windmill-components 1.522.0 → 1.531.0

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 (271) hide show
  1. package/package/components/AIAgentLogViewer.svelte +123 -0
  2. package/package/components/AIAgentLogViewer.svelte.d.ts +13 -0
  3. package/package/components/AppConnectInner.svelte +10 -10
  4. package/package/components/AutoscalingConfigEditor.svelte +76 -2
  5. package/package/components/Dev.svelte +12 -28
  6. package/package/components/DiffEditor.svelte +6 -3
  7. package/package/components/DiffEditor.svelte.d.ts +1 -0
  8. package/package/components/DisplayResult.svelte +16 -10
  9. package/package/components/DisplayResult.svelte.d.ts +1 -0
  10. package/package/components/EditableSchemaForm.svelte +5 -2
  11. package/package/components/Editor.svelte +26 -8
  12. package/package/components/Editor.svelte.d.ts +1 -1
  13. package/package/components/EditorBar.svelte +25 -5
  14. package/package/components/EditorSettings.svelte +6 -0
  15. package/package/components/FirstStepInputs.svelte +2 -2
  16. package/package/components/FlowBuilder.svelte +18 -36
  17. package/package/components/FlowGraphViewerStep.svelte +7 -0
  18. package/package/components/FlowJobResult.svelte +15 -63
  19. package/package/components/FlowJobResult.svelte.d.ts +10 -4
  20. package/package/components/FlowLogViewer.svelte +660 -0
  21. package/package/components/FlowLogViewer.svelte.d.ts +34 -0
  22. package/package/components/FlowLogViewerWrapper.svelte +52 -0
  23. package/package/components/FlowLogViewerWrapper.svelte.d.ts +21 -0
  24. package/package/components/FlowLoopIterationPreview.svelte +3 -3
  25. package/package/components/FlowPreviewContent.svelte +4 -5
  26. package/package/components/FlowPreviewContent.svelte.d.ts +7 -7
  27. package/package/components/FlowPreviewResult.svelte +4 -5
  28. package/package/components/FlowPreviewResult.svelte.d.ts +3 -5
  29. package/package/components/FlowStatusViewer.svelte +28 -16
  30. package/package/components/FlowStatusViewer.svelte.d.ts +19 -27
  31. package/package/components/FlowStatusViewerInner.svelte +483 -296
  32. package/package/components/FlowStatusViewerInner.svelte.d.ts +27 -33
  33. package/package/components/FlowTimeline.svelte +11 -13
  34. package/package/components/FlowTimeline.svelte.d.ts +6 -5
  35. package/package/components/HighlightCode.svelte +4 -1
  36. package/package/components/IconedResourceType.svelte +9 -5
  37. package/package/components/JobLoader.svelte +61 -8
  38. package/package/components/JobLoader.svelte.d.ts +9 -1
  39. package/package/components/LogViewer.svelte +8 -2
  40. package/package/components/LogViewer.svelte.d.ts +1 -0
  41. package/package/components/LogViewerHeader.svelte +32 -0
  42. package/package/components/LogViewerHeader.svelte.d.ts +8 -0
  43. package/package/components/ModulePreviewForm.svelte +10 -6
  44. package/package/components/ModulePreviewResultViewer.svelte +16 -0
  45. package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -1
  46. package/package/components/ModuleTest.svelte +59 -16
  47. package/package/components/RelativeLineNumbers.svelte +16 -0
  48. package/package/components/RelativeLineNumbers.svelte.d.ts +18 -0
  49. package/package/components/ResourceEditor.svelte +9 -4
  50. package/package/components/ScriptBuilder.svelte +13 -11
  51. package/package/components/ScriptEditor.svelte +2 -2
  52. package/package/components/SimpleEditor.svelte +10 -4
  53. package/package/components/SimpleEditor.svelte.d.ts +1 -0
  54. package/package/components/TemplateEditor.svelte +1 -1
  55. package/package/components/UserSettings.svelte +4 -4
  56. package/package/components/apps/components/display/AppAccordionList.svelte +1 -1
  57. package/package/components/apps/components/display/AppCarouselList.svelte +10 -8
  58. package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +3 -3
  59. package/package/components/apps/components/display/table/AppAggridTable.svelte +2 -2
  60. package/package/components/apps/components/helpers/HiddenComponent.svelte +0 -1
  61. package/package/components/apps/components/helpers/InputValue.svelte +6 -1
  62. package/package/components/apps/components/helpers/NonRunnableComponent.svelte +8 -4
  63. package/package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +1 -1
  64. package/package/components/apps/components/helpers/RunnableComponent.svelte +7 -8
  65. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -1
  66. package/package/components/apps/components/helpers/RunnableWrapper.svelte +12 -3
  67. package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -1
  68. package/package/components/apps/components/inputs/AppCodeInputComponent.svelte +0 -5
  69. package/package/components/apps/components/layout/AppConditionalWrapper.svelte +1 -1
  70. package/package/components/apps/components/layout/AppContainer.svelte +1 -1
  71. package/package/components/apps/components/layout/AppDecisionTree.svelte +31 -20
  72. package/package/components/apps/components/layout/AppDrawer.svelte +1 -1
  73. package/package/components/apps/components/layout/AppList.svelte +9 -8
  74. package/package/components/apps/components/layout/AppModal.svelte +1 -1
  75. package/package/components/apps/components/layout/AppSplitpanes.svelte +5 -2
  76. package/package/components/apps/components/layout/AppStepper.svelte +9 -5
  77. package/package/components/apps/components/layout/AppTabs.svelte +2 -2
  78. package/package/components/apps/editor/AppJobsDrawer.svelte +2 -2
  79. package/package/components/apps/editor/GridEditor.svelte +24 -19
  80. package/package/components/apps/editor/GridEditor.svelte.d.ts +4 -1
  81. package/package/components/apps/editor/GridViewer.svelte +1 -1
  82. package/package/components/apps/editor/SubGridEditor.svelte +7 -11
  83. package/package/components/apps/editor/SubGridEditor.svelte.d.ts +3 -19
  84. package/package/components/apps/editor/appUtils.js +17 -68
  85. package/package/components/apps/editor/component/ComponentInner.svelte +845 -694
  86. package/package/components/apps/editor/component/componentCallbacks.svelte.js +8 -1
  87. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +9 -46
  88. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +29 -43
  89. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -1
  90. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +1 -0
  91. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +2 -2
  92. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte.d.ts +1 -0
  93. package/package/components/apps/svelte-grid/Grid.svelte +23 -25
  94. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +21 -9
  95. package/package/components/apps/svelte-grid/MoveResize.svelte +13 -15
  96. package/package/components/apps/svelte-grid/MoveResize.svelte.d.ts +17 -24
  97. package/package/components/apps/utils.d.ts +2 -0
  98. package/package/components/apps/utils.js +22 -0
  99. package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
  100. package/package/components/common/fileDownload/FileDownload.svelte +1 -3
  101. package/package/components/common/fileDownload/FileDownload.svelte.d.ts +4 -18
  102. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  103. package/package/components/copilot/FlowInlineScriptAIButton.svelte +58 -0
  104. package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +3 -0
  105. package/package/components/copilot/MetadataGen.svelte +19 -1
  106. package/package/components/copilot/MetadataGen.svelte.d.ts +1 -1
  107. package/package/components/copilot/ScriptGen.svelte +23 -31
  108. package/package/components/copilot/ScriptGen.svelte.d.ts +0 -1
  109. package/package/components/copilot/autocomplete/Autocompletor.js +2 -0
  110. package/package/components/copilot/chat/AIChatDisplay.svelte +4 -4
  111. package/package/components/copilot/chat/AIChatInput.svelte +29 -6
  112. package/package/components/copilot/chat/AIChatManager.svelte.js +110 -26
  113. package/package/components/copilot/chat/AIChatMessage.svelte +3 -0
  114. package/package/components/copilot/chat/ToolContentDisplay.svelte +84 -0
  115. package/package/components/copilot/chat/ToolContentDisplay.svelte.d.ts +11 -0
  116. package/package/components/copilot/chat/ToolExecutionDisplay.svelte +105 -0
  117. package/package/components/copilot/chat/ToolExecutionDisplay.svelte.d.ts +7 -0
  118. package/package/components/copilot/chat/api/apiTools.d.ts +7 -0
  119. package/package/components/copilot/chat/api/apiTools.js +192 -0
  120. package/package/components/copilot/chat/api/core.d.ts +7 -0
  121. package/package/components/copilot/chat/api/core.js +61 -0
  122. package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -6
  123. package/package/components/copilot/chat/flow/core.js +213 -42
  124. package/package/components/copilot/chat/flow/utils.js +3 -0
  125. package/package/components/copilot/chat/monaco-adapter.d.ts +1 -1
  126. package/package/components/copilot/chat/monaco-adapter.js +10 -4
  127. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  128. package/package/components/copilot/chat/navigator/core.js +20 -22
  129. package/package/components/copilot/chat/script/core.d.ts +11 -3
  130. package/package/components/copilot/chat/script/core.js +92 -15
  131. package/package/components/copilot/chat/shared.d.ts +30 -3
  132. package/package/components/copilot/chat/shared.js +228 -9
  133. package/package/components/copilot/lib.d.ts +1 -1
  134. package/package/components/copilot/lib.js +15 -6
  135. package/package/components/custom_ui.d.ts +2 -0
  136. package/package/components/details/DetailPageLayout.svelte +34 -33
  137. package/package/components/flow_builder.d.ts +1 -2
  138. package/package/components/flows/FlowEditor.svelte +3 -3
  139. package/package/components/flows/FlowEditor.svelte.d.ts +7 -6
  140. package/package/components/flows/common/FlowCard.svelte +2 -2
  141. package/package/components/flows/common/FlowCard.svelte.d.ts +1 -0
  142. package/package/components/flows/common/FlowCardHeader.svelte +13 -4
  143. package/package/components/flows/common/FlowCardHeader.svelte.d.ts +1 -0
  144. package/package/components/flows/content/BranchPredicateEditor.svelte +4 -7
  145. package/package/components/flows/content/BranchPredicateEditor.svelte.d.ts +12 -11
  146. package/package/components/flows/content/FlowConstants.svelte +3 -3
  147. package/package/components/flows/content/FlowEditorPanel.svelte +3 -3
  148. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +2 -4
  149. package/package/components/flows/content/FlowInputsQuick.svelte +2 -1
  150. package/package/components/flows/content/FlowLoop.svelte +2 -2
  151. package/package/components/flows/content/FlowModuleComponent.svelte +130 -108
  152. package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
  153. package/package/components/flows/content/FlowModuleEarlyStop.svelte +2 -2
  154. package/package/components/flows/content/FlowModuleSkip.svelte +1 -1
  155. package/package/components/flows/content/FlowModuleSleep.svelte +1 -1
  156. package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
  157. package/package/components/flows/content/FlowModuleWrapper.svelte +15 -5
  158. package/package/components/flows/content/FlowModuleWrapper.svelte.d.ts +1 -0
  159. package/package/components/flows/content/FlowResult.svelte +2 -3
  160. package/package/components/flows/content/FlowResult.svelte.d.ts +2 -4
  161. package/package/components/flows/content/FlowWhileLoop.svelte +1 -1
  162. package/package/components/flows/dfs.d.ts +3 -1
  163. package/package/components/flows/dfs.js +5 -1
  164. package/package/components/flows/flowInfers.js +78 -0
  165. package/package/components/flows/flowState.d.ts +2 -3
  166. package/package/components/flows/flowState.js +2 -2
  167. package/package/components/flows/flowStateUtils.svelte.d.ts +4 -4
  168. package/package/components/flows/flowStateUtils.svelte.js +14 -13
  169. package/package/components/flows/flowStore.d.ts +3 -4
  170. package/package/components/flows/header/FlowPreviewButtons.svelte +2 -1
  171. package/package/components/flows/header/FlowYamlEditor.svelte +10 -1
  172. package/package/components/flows/map/FlowGraphPreviewButton.svelte +1 -1
  173. package/package/components/flows/map/FlowJobsMenu.svelte +7 -3
  174. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -0
  175. package/package/components/flows/map/FlowModuleSchemaItem.svelte +12 -12
  176. package/package/components/flows/map/FlowModuleSchemaMap.svelte +26 -19
  177. package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +6 -4
  178. package/package/components/flows/map/InsertModuleInner.svelte +9 -1
  179. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +1 -0
  180. package/package/components/flows/map/MapItem.svelte +4 -2
  181. package/package/components/flows/pickers/TopLevelNode.svelte +4 -1
  182. package/package/components/flows/propPicker/InputPickerInner.svelte +5 -4
  183. package/package/components/flows/propPicker/OutputBadge.svelte +11 -9
  184. package/package/components/flows/propPicker/OutputPickerInner.svelte +10 -1
  185. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +1 -1
  186. package/package/components/flows/testSteps.svelte.d.ts +3 -2
  187. package/package/components/flows/testSteps.svelte.js +26 -23
  188. package/package/components/flows/types.d.ts +1 -1
  189. package/package/components/flows/utils.d.ts +3 -5
  190. package/package/components/flows/utils.js +3 -4
  191. package/package/components/git_sync/GitSyncContext.svelte.js +2 -1
  192. package/package/components/graph/FlowGraphV2.svelte +44 -24
  193. package/package/components/graph/FlowGraphV2.svelte.d.ts +5 -2
  194. package/package/components/graph/graphBuilder.svelte.d.ts +49 -17
  195. package/package/components/graph/graphBuilder.svelte.js +30 -14
  196. package/package/components/graph/model.d.ts +9 -6
  197. package/package/components/graph/renderers/edges/BaseEdge.svelte +3 -3
  198. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +2 -3
  199. package/package/components/graph/renderers/nodes/AIToolNode.svelte +234 -0
  200. package/package/components/graph/renderers/nodes/AIToolNode.svelte.d.ts +24 -0
  201. package/package/components/graph/renderers/nodes/AssetNode.svelte +15 -10
  202. package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +18 -1
  203. package/package/components/graph/renderers/nodes/BranchAllEndNode.svelte +1 -1
  204. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +1 -1
  205. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
  206. package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte +2 -2
  207. package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +1 -1
  208. package/package/components/graph/renderers/nodes/ModuleNode.svelte +21 -21
  209. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +64 -0
  210. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte.d.ts +7 -0
  211. package/package/components/graph/renderers/nodes/branchOneEndNode.svelte +1 -1
  212. package/package/components/icons/RubyIcon.svelte +656 -0
  213. package/package/components/icons/RubyIcon.svelte.d.ts +7 -0
  214. package/package/components/instanceSettings.js +9 -0
  215. package/package/components/modulesTest.svelte.d.ts +6 -3
  216. package/package/components/modulesTest.svelte.js +32 -0
  217. package/package/components/preview/FlowPreviewStatus.svelte +3 -1
  218. package/package/components/raw_apps/RawAppEditor.svelte +27 -26
  219. package/package/components/raw_apps/RawAppEditor.svelte.d.ts +17 -17
  220. package/package/components/runs/{JobPreview.svelte → JobRunsPreview.svelte} +1 -4
  221. package/package/components/runs/{JobPreview.svelte.d.ts → JobRunsPreview.svelte.d.ts} +3 -3
  222. package/package/components/runs/RunRow.svelte +5 -1
  223. package/package/components/schema/AddProperty.svelte +41 -36
  224. package/package/components/schema/AddProperty.svelte.d.ts +2 -2
  225. package/package/components/schema/AddPropertyV2.svelte +41 -37
  226. package/package/components/schema/AddPropertyV2.svelte.d.ts +1 -1
  227. package/package/components/schema/FlowPropertyEditor.svelte +8 -6
  228. package/package/components/search/RunsSearch.svelte +1 -1
  229. package/package/components/settings/CreateToken.svelte +132 -12
  230. package/package/components/settings/CreateToken.svelte.d.ts +3 -20
  231. package/package/components/settings/TokenDisplay.svelte +18 -42
  232. package/package/components/settings/TokenDisplay.svelte.d.ts +0 -1
  233. package/package/components/settings/TokensTable.svelte +2 -4
  234. package/package/components/settings/TokensTable.svelte.d.ts +3 -19
  235. package/package/components/settings/WorkspaceUserSettings.svelte +428 -69
  236. package/package/components/sidebar/MenuButton.svelte +12 -10
  237. package/package/components/stepHistoryLoader.svelte.d.ts +2 -2
  238. package/package/components/stepHistoryLoader.svelte.js +7 -12
  239. package/package/components/triggers/http/OpenAPISpecGenerator.svelte +2 -2
  240. package/package/components/tutorials/FlowBuilderTutorialBranchOne.svelte +1 -1
  241. package/package/components/tutorials/FlowBuilderTutorialForLoop.svelte +4 -4
  242. package/package/components/tutorials/utils.js +3 -0
  243. package/package/components/worker_group.d.ts +4 -1
  244. package/package/components/worker_group.js +3 -2
  245. package/package/editorLangUtils.d.ts +1 -1
  246. package/package/editorLangUtils.js +2 -0
  247. package/package/editorUtils.d.ts +2 -1
  248. package/package/editorUtils.js +2 -1
  249. package/package/gen/core/OpenAPI.js +1 -1
  250. package/package/gen/schemas.gen.d.ts +296 -8
  251. package/package/gen/schemas.gen.js +364 -70
  252. package/package/gen/services.gen.d.ts +118 -16
  253. package/package/gen/services.gen.js +226 -19
  254. package/package/gen/types.gen.d.ts +660 -16
  255. package/package/hubPaths.json +7 -4
  256. package/package/infer.js +10 -1
  257. package/package/monaco_workers/graphql.worker.bundle.js +144 -110
  258. package/package/script_helpers.d.ts +3 -0
  259. package/package/script_helpers.js +58 -3
  260. package/package/scripts.d.ts +1 -1
  261. package/package/scripts.js +3 -2
  262. package/package/stores.d.ts +2 -0
  263. package/package/stores.js +2 -0
  264. package/package/svelte5Utils.svelte.d.ts +16 -0
  265. package/package/svelte5Utils.svelte.js +26 -0
  266. package/package/utils.d.ts +1 -1
  267. package/package.json +20 -19
  268. package/package/components/AllFlowLogs.svelte +0 -31
  269. package/package/components/AllFlowLogs.svelte.d.ts +0 -8
  270. package/package/components/copilot/chat/navigator/apiTools.d.ts +0 -68
  271. package/package/components/copilot/chat/navigator/apiTools.js +0 -258
@@ -10,6 +10,7 @@ import { initOutput } from '../../editor/appUtils';
10
10
  import Badge from '../../../common/badge/Badge.svelte';
11
11
  import { getFirstNode, isDebugging } from '../../editor/settingsPanel/decisionTree/utils';
12
12
  import InputValue from '../helpers/InputValue.svelte';
13
+ import { sendUserToast } from '../../../../toast';
13
14
  let { id, componentContainerHeight, customCss = undefined, render, nodes } = $props();
14
15
  let resolvedConditions = $state(createResolvedConditions());
15
16
  function createResolvedConditions() {
@@ -25,10 +26,12 @@ function createResolvedNext() {
25
26
  return acc;
26
27
  }, {});
27
28
  }
29
+ let counter = $state(0);
28
30
  $effect(() => {
29
31
  nodes;
30
32
  resolvedConditions = untrack(() => createResolvedConditions());
31
33
  resolvedNext = untrack(() => createResolvedNext());
34
+ untrack(() => (counter += 1));
32
35
  });
33
36
  let everRender = $state(render);
34
37
  $effect.pre(() => {
@@ -75,6 +78,7 @@ function next() {
75
78
  return;
76
79
  }
77
80
  }
81
+ sendUserToast('No next node was an available option', true);
78
82
  }
79
83
  function updateFocusedGrid(nodeId) {
80
84
  currentNodeId = nodeId;
@@ -133,30 +137,37 @@ $effect.pre(() => {
133
137
 
134
138
  <!-- {JSON.stringify(resolvedConditions)}
135
139
  {JSON.stringify(resolvedNext)} -->
136
- {#if Object.keys(resolvedConditions).length === nodes.length}
137
- {#each nodes ?? [] as node (node.id)}
138
- {#each node.next ?? [] as next, conditionIndex}
139
- {#if next.condition}
140
+
141
+ {#key counter}
142
+ {#if Object.keys(resolvedConditions).length === nodes.length}
143
+ {#each nodes ?? [] as node (node.id)}
144
+ {#each node.next ?? [] as next, conditionIndex}
145
+ {#if next.condition}
146
+ <InputValue
147
+ key={`condition-${node.id}-${conditionIndex}`}
148
+ {id}
149
+ input={next.condition}
150
+ bind:value={resolvedConditions[node.id][conditionIndex]}
151
+ field={`condition-${node.id}-${conditionIndex}`}
152
+ />
153
+ {/if}
154
+ {/each}
155
+ {/each}
156
+ {/if}
157
+
158
+ {#if Object.keys(resolvedConditions).length === nodes.length}
159
+ {#each nodes ?? [] as node (node.id)}
160
+ {#if node.allowed}
140
161
  <InputValue
141
- key={`condition-${node.id}-${conditionIndex}`}
162
+ key="allowed-{node.id}"
142
163
  {id}
143
- input={next.condition}
144
- bind:value={resolvedConditions[node.id][conditionIndex]}
145
- field={`condition-${node.id}-${conditionIndex}`}
164
+ input={node.allowed}
165
+ bind:value={resolvedNext[node.id]}
146
166
  />
147
167
  {/if}
148
168
  {/each}
149
- {/each}
150
- {/if}
151
-
152
- {#if Object.keys(resolvedConditions).length === nodes.length}
153
- {#each nodes ?? [] as node (node.id)}
154
- {#if node.allowed}
155
- <InputValue key="allowed" {id} input={node.allowed} bind:value={resolvedNext[node.id]} />
156
- {/if}
157
- {/each}
158
- {/if}
159
-
169
+ {/if}
170
+ {/key}
160
171
  {#each Object.keys(css ?? {}) as key (key)}
161
172
  <ResolveStyle
162
173
  {id}
@@ -181,7 +192,7 @@ $effect.pre(() => {
181
192
  style={css?.container?.style}
182
193
  subGridId={`${id}-${i}`}
183
194
  containerHeight={componentContainerHeight - 40}
184
- on:focus={() => {
195
+ onFocus={() => {
185
196
  if (!$connectingInput.opened) {
186
197
  $selectedComponent = [id]
187
198
  }
@@ -138,7 +138,7 @@ let css = $state(initCss($app.css?.drawercomponent, customCss));
138
138
  {id}
139
139
  {containerHeight}
140
140
  subGridId={`${id}-0`}
141
- on:focus={() => {
141
+ onFocus={() => {
142
142
  if (!$connectingInput.opened) {
143
143
  $selectedComponent = [id]
144
144
  $focusedGrid = {
@@ -94,8 +94,12 @@ let pagination = $derived(getPagination(resolvedConfig.pagination?.configuration
94
94
 
95
95
  <InitializeComponent {id} />
96
96
 
97
+ {#snippet nonRenderedPlaceholder()}
98
+ <ListWrapper disabled value={undefined} index={0}>
99
+ <SubGridEditor visible={false} {id} subGridId={`${id}-0`} />
100
+ </ListWrapper>
101
+ {/snippet}
97
102
  <RunnableWrapper
98
- hasChildrens
99
103
  {render}
100
104
  {outputs}
101
105
  autoRefresh
@@ -104,6 +108,7 @@ let pagination = $derived(getPagination(resolvedConfig.pagination?.configuration
104
108
  bind:initializing
105
109
  bind:result
106
110
  bind:loading
111
+ {nonRenderedPlaceholder}
107
112
  >
108
113
  {#if everRender}
109
114
  <div
@@ -170,7 +175,7 @@ let pagination = $derived(getPagination(resolvedConfig.pagination?.configuration
170
175
  {id}
171
176
  subGridId={`${id}-0`}
172
177
  containerHeight={resolvedConfig.heightPx}
173
- on:focus={() => {
178
+ onFocus={() => {
174
179
  if (!$connectingInput.opened) {
175
180
  $selectedComponent = [id]
176
181
  }
@@ -181,9 +186,7 @@ let pagination = $derived(getPagination(resolvedConfig.pagination?.configuration
181
186
  </div>
182
187
  {/each}
183
188
  {:else}
184
- <ListWrapper disabled value={undefined} index={0}>
185
- <SubGridEditor visible={false} {id} subGridId={`${id}-0`} />
186
- </ListWrapper>
189
+ {@render nonRenderedPlaceholder?.()}
187
190
  {#if !Array.isArray(result)}
188
191
  <div class="text-center text-tertiary">Input data is not an array</div>
189
192
  {/if}
@@ -239,8 +242,6 @@ let pagination = $derived(getPagination(resolvedConfig.pagination?.configuration
239
242
  {/if}
240
243
  </div>
241
244
  {:else if $app.subgrids}
242
- <ListWrapper disabled value={undefined} index={0}>
243
- <SubGridEditor visible={false} {id} subGridId={`${id}-0`} />
244
- </ListWrapper>
245
+ {@render nonRenderedPlaceholder?.()}
245
246
  {/if}
246
247
  </RunnableWrapper>
@@ -191,7 +191,7 @@ async function getMenuElements() {
191
191
  {id}
192
192
  {containerHeight}
193
193
  subGridId={`${id}-0`}
194
- on:focus={() => {
194
+ onFocus={() => {
195
195
  if (!$connectingInput.opened) {
196
196
  $selectedComponent = [id]
197
197
  $focusedGrid = {
@@ -11,7 +11,9 @@ import ResolveStyle from '../helpers/ResolveStyle.svelte';
11
11
  let { id, componentContainerHeight, customCss = undefined, horizontal = false, panes, render } = $props();
12
12
  const { app, focusedGrid, selectedComponent, componentControl, worldStore, connectingInput } = getContext('AppViewerContext');
13
13
  //used so that we can count number of outputs setup for first refresh
14
- initOutput($worldStore, id, {});
14
+ initOutput($worldStore, id, {
15
+ selectedPaneIndex: 0
16
+ });
15
17
  let everRender = $state(render);
16
18
  $effect.pre(() => {
17
19
  render && !everRender && (everRender = true);
@@ -97,13 +99,14 @@ $effect.pre(() => {
97
99
  style={css?.container?.style}
98
100
  subGridId={`${id}-${index}`}
99
101
  containerHeight={horizontal ? undefined : componentContainerHeight - 8}
100
- on:focus={() => {
102
+ onFocus={() => {
101
103
  if (!$connectingInput.opened) {
102
104
  $selectedComponent = [id]
103
105
  $focusedGrid = {
104
106
  parentComponentId: id,
105
107
  subGridIndex: index
106
108
  }
109
+ $worldStore.outputsById[id].selectedPaneIndex.set(index)
107
110
  }
108
111
  }}
109
112
  />
@@ -115,8 +115,13 @@ let directionClicked = $state(undefined);
115
115
  {/each}
116
116
 
117
117
  <InitializeComponent {id} />
118
+
119
+ {#snippet nonRenderedPlaceholder()}
120
+ {#each tabs ?? [] as _res, i}
121
+ <SubGridEditor {id} visible={false} subGridId={`${id}-${i}`} />
122
+ {/each}
123
+ {/snippet}
118
124
  <RunnableWrapper
119
- hasChildrens
120
125
  {recomputeIds}
121
126
  {render}
122
127
  bind:runnableComponent
@@ -129,6 +134,7 @@ let directionClicked = $state(undefined);
129
134
  {outputs}
130
135
  bind:result
131
136
  errorHandledByComponent={true}
137
+ {nonRenderedPlaceholder}
132
138
  >
133
139
  {#if everRender}
134
140
  <div class="w-full overflow-auto">
@@ -160,7 +166,7 @@ let directionClicked = $state(undefined);
160
166
  class={twMerge(css?.container?.class, 'wm-stepper')}
161
167
  style={css?.container?.style}
162
168
  containerHeight={componentContainerHeight - tabHeight - footerHeight}
163
- on:focus={() => {
169
+ onFocus={() => {
164
170
  if (!$connectingInput.opened) {
165
171
  $selectedComponent = [id]
166
172
  handleTabSelection()
@@ -231,8 +237,6 @@ let directionClicked = $state(undefined);
231
237
  {/if}
232
238
  </div>
233
239
  {:else if $app.subgrids}
234
- {#each tabs ?? [] as _res, i}
235
- <SubGridEditor {id} visible={false} subGridId={`${id}-${i}`} />
236
- {/each}
240
+ {@render nonRenderedPlaceholder?.()}
237
241
  {/if}
238
242
  </RunnableWrapper>
@@ -209,7 +209,7 @@ let resolvedDisabledTabs = $state([]);
209
209
  class={twMerge(css?.container?.class, 'wm-tabs-container')}
210
210
  style={css?.container?.style}
211
211
  containerHeight={componentContainerHeight - (titleBarHeight * tabs.length + 40)}
212
- on:focus={() => {
212
+ onFocus={() => {
213
213
  if (!$connectingInput.opened) {
214
214
  $selectedComponent = [id]
215
215
  handleTabSelection()
@@ -233,7 +233,7 @@ let resolvedDisabledTabs = $state([]);
233
233
  containerHeight={resolvedConfig.tabsKind !== 'sidebar' && $mode !== 'preview'
234
234
  ? componentContainerHeight - tabHeight
235
235
  : componentContainerHeight}
236
- on:focus={() => {
236
+ onFocus={() => {
237
237
  if (!$connectingInput.opened) {
238
238
  $selectedComponent = [id]
239
239
  handleTabSelection()
@@ -233,8 +233,8 @@ $effect(() => {
233
233
  {#if job?.id}
234
234
  <FlowStatusViewer
235
235
  jobId={job?.id}
236
- on:jobsLoaded={({ detail }) => {
237
- job = detail
236
+ onJobsLoaded={({ job: newJob }) => {
237
+ job = newJob
238
238
  }}
239
239
  />
240
240
  {:else}
@@ -45,7 +45,7 @@ function handleFillHeight(id) {
45
45
  }
46
46
  $app = $app;
47
47
  }
48
- export function moveComponentBetweenSubgrids(componentId, parentComponentId, subGridIndex, position) {
48
+ export function moveComponentBetweenSubgrids(componentId, subgrid, position) {
49
49
  // Find the component in the source subgrid
50
50
  const component = findGridItem($app, componentId);
51
51
  if (!component) {
@@ -60,14 +60,17 @@ export function moveComponentBetweenSubgrids(componentId, parentComponentId, sub
60
60
  $app.grid = $app.grid.filter((item) => item.id !== component?.id);
61
61
  }
62
62
  const gridItem = component;
63
- insertNewGridItem($app, (id) => ({ ...gridItem.data, id }), { parentComponentId: parentComponentId, subGridIndex: subGridIndex }, Object.fromEntries(gridColumns.map((column) => [column, gridItem[column]])), component.id, position, undefined, undefined, undefined, true);
63
+ insertNewGridItem($app, (id) => ({ ...gridItem.data, id }), subgrid, Object.fromEntries(gridColumns.map((column) => [column, gridItem[column]])), component.id, position, undefined, undefined, undefined, true);
64
64
  // Update the app state
65
65
  $app = $app;
66
- $selectedComponent = [parentComponentId];
67
- $focusedGrid = {
68
- parentComponentId,
69
- subGridIndex
70
- };
66
+ if (subgrid) {
67
+ $selectedComponent = [subgrid.parentComponentId];
68
+ $focusedGrid = subgrid;
69
+ }
70
+ else {
71
+ $selectedComponent = [componentId];
72
+ $focusedGrid = undefined;
73
+ }
71
74
  }
72
75
  </script>
73
76
 
@@ -144,32 +147,34 @@ export function moveComponentBetweenSubgrids(componentId, parentComponentId, sub
144
147
  allIdsInPath={$allIdsInPath}
145
148
  selectedIds={$selectedComponent}
146
149
  items={$app.grid}
147
- on:redraw={(e) => {
150
+ onRedraw={(grid) => {
148
151
  push(history, $app)
149
- $app.grid = e.detail
152
+ $app.grid = grid
150
153
  }}
151
154
  root
152
- on:dropped={(e) => {
153
- const { id, overlapped, x, y } = e.detail
154
-
155
- const overlappedComponent = findGridItem($app, overlapped)
155
+ onDropped={({ id, overlapped, x, y }) => {
156
+ const overlappedComponent = overlapped ? findGridItem($app, overlapped) : undefined
156
157
 
157
158
  if (overlappedComponent && !isContainer(overlappedComponent.data.type)) {
158
159
  return
159
160
  }
160
161
 
161
- if (!overlapped) {
162
- return
163
- }
164
-
165
162
  if (id === overlapped) {
166
163
  return
167
164
  }
168
165
 
169
166
  moveComponentBetweenSubgrids(
170
167
  id,
171
- overlapped,
172
- subGridIndexKey(overlappedComponent?.data?.type, overlapped, $worldStore),
168
+ overlapped
169
+ ? {
170
+ parentComponentId: overlapped,
171
+ subGridIndex: subGridIndexKey(
172
+ overlappedComponent?.data?.type,
173
+ overlapped,
174
+ $worldStore
175
+ )
176
+ }
177
+ : undefined,
173
178
  { x, y }
174
179
  )
175
180
  }}
@@ -3,7 +3,10 @@ interface Props {
3
3
  policy: Policy;
4
4
  }
5
5
  declare const GridEditor: import("svelte").Component<Props, {
6
- moveComponentBetweenSubgrids: (componentId: string, parentComponentId: string, subGridIndex: number, position?: {
6
+ moveComponentBetweenSubgrids: (componentId: string, subgrid: {
7
+ parentComponentId: string;
8
+ subGridIndex: number;
9
+ } | undefined, position?: {
7
10
  x: number;
8
11
  y: number;
9
12
  }) => void;
@@ -80,7 +80,7 @@ onMount(() => {
80
80
  {@const left = (item[getComputedCols] && item[getComputedCols].x) * xPerPx + gapX}
81
81
 
82
82
  <div
83
- id={`wm-${item.id}-grid-item`}
83
+ id={`wm-component-${item.id}`}
84
84
  class="svlt-grid-item"
85
85
  style="width: {width}px; height:{height}px; {onTop
86
86
  ? 'z-index: 1000;'
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">import { stopPropagation } from 'svelte/legacy';
2
2
  import { push } from '../../../history.svelte';
3
3
  import { classNames } from '../../../utils';
4
- import { createEventDispatcher, getContext, onDestroy } from 'svelte';
4
+ import { getContext, onDestroy } from 'svelte';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { gridColumns, isFixed, toggleFixed } from '../gridUtils';
7
7
  import Grid from '../svelte-grid/Grid.svelte';
@@ -10,8 +10,7 @@ import Component from './component/Component.svelte';
10
10
  import ComponentWrapper from './component/ComponentWrapper.svelte';
11
11
  import GridViewer from './GridViewer.svelte';
12
12
  import GridEditorMenu from './GridEditorMenu.svelte';
13
- let { containerHeight = undefined, containerWidth = undefined, class: classes = '', style = '', noPadding = false, noYPadding = false, subGridId, visible = true, id, shouldHighlight = true } = $props();
14
- const dispatch = createEventDispatcher();
13
+ let { containerHeight = undefined, containerWidth = undefined, class: classes = '', style = '', noPadding = false, noYPadding = false, subGridId, visible = true, id, shouldHighlight = true, onFocus } = $props();
15
14
  const { app, connectingInput, selectedComponent, focusedGrid, mode, parentWidth, breakpoint, allIdsInPath, worldStore } = getContext('AppViewerContext');
16
15
  const editorContext = getContext('AppEditorContext');
17
16
  let isActive = $state(false);
@@ -25,7 +24,7 @@ onDestroy(() => {
25
24
  });
26
25
  let highlight = $derived(id === $focusedGrid?.parentComponentId && shouldHighlight);
27
26
  const onpointerdown = (e) => {
28
- dispatch('focus');
27
+ onFocus?.();
29
28
  };
30
29
  function selectComponent(e, id) {
31
30
  if (!$connectingInput.opened) {
@@ -113,7 +112,7 @@ export function moveToRoot(componentId, position) {
113
112
  {#if $mode !== 'preview'}
114
113
  <div
115
114
  class={highlight
116
- ? `outline !outline-dashed outline-2 min-h-full ${
115
+ ? `!outline-dashed outline-2 min-h-full ${
117
116
  isActive && !$selectedComponent?.includes(id)
118
117
  ? 'outline-orange-600'
119
118
  : 'outline-gray-400 dark:outline-gray-600'
@@ -124,19 +123,17 @@ export function moveToRoot(componentId, position) {
124
123
  <Grid
125
124
  allIdsInPath={$allIdsInPath}
126
125
  items={$app.subgrids?.[subGridId] ?? []}
127
- on:redraw={(e) => {
126
+ onRedraw={(grid) => {
128
127
  push(editorContext?.history, $app)
129
128
  if ($app.subgrids) {
130
- $app.subgrids[subGridId] = e.detail
129
+ $app.subgrids[subGridId] = grid
131
130
  }
132
131
  }}
133
132
  selectedIds={$selectedComponent}
134
133
  scroller={container}
135
134
  parentWidth={$parentWidth - 17}
136
135
  {containerWidth}
137
- on:dropped={(e) => {
138
- const { id, overlapped, x, y } = e.detail
139
-
136
+ onDropped={({ id, overlapped, x, y }) => {
140
137
  if (!overlapped) {
141
138
  moveToRoot(id, { x, y })
142
139
  } else {
@@ -152,7 +149,6 @@ export function moveToRoot(componentId, position) {
152
149
  if (id === overlapped) {
153
150
  return
154
151
  }
155
-
156
152
  moveComponentBetweenSubgrids(
157
153
  id,
158
154
  overlapped,
@@ -9,25 +9,9 @@ interface Props {
9
9
  visible?: boolean;
10
10
  id: string;
11
11
  shouldHighlight?: boolean;
12
+ onFocus?: () => void;
12
13
  }
13
- 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> {
14
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
15
- $$bindings?: Bindings;
16
- } & Exports;
17
- (internal: unknown, props: Props & {
18
- $$events?: Events;
19
- $$slots?: Slots;
20
- }): Exports & {
21
- $set?: any;
22
- $on?: any;
23
- };
24
- z_$$bindings?: Bindings;
25
- }
26
- declare const SubGridEditor: $$__sveltets_2_IsomorphicComponent<Props, {
27
- focus: CustomEvent<any>;
28
- } & {
29
- [evt: string]: CustomEvent<any>;
30
- }, {}, {
14
+ declare const SubGridEditor: import("svelte").Component<Props, {
31
15
  moveComponentBetweenSubgrids: (componentId: string, parentComponentId: string, subGridIndex: number, position?: {
32
16
  x: number;
33
17
  y: number;
@@ -37,5 +21,5 @@ declare const SubGridEditor: $$__sveltets_2_IsomorphicComponent<Props, {
37
21
  y: number;
38
22
  }) => void;
39
23
  }, "">;
40
- type SubGridEditor = InstanceType<typeof SubGridEditor>;
24
+ type SubGridEditor = ReturnType<typeof SubGridEditor>;
41
25
  export default SubGridEditor;
@@ -1,6 +1,6 @@
1
1
  import { ccomponents, components, getRecommendedDimensionsByComponent } from './component';
2
2
  import { gridColumns } from '../gridUtils';
3
- import { allItems } from '../utils';
3
+ import { allItems, processSubcomponents } from '../utils';
4
4
  import { get } from 'svelte/store';
5
5
  import { deepMergeWithPriority } from '../../../utils';
6
6
  import { sendUserToast } from '../../../toast';
@@ -453,43 +453,11 @@ export function copyComponent(app, item, parentGrid, subgrids, alreadyVisited) {
453
453
  alreadyVisited.push(item.id);
454
454
  }
455
455
  const newItem = insertNewGridItem(app, (id) => {
456
- if (item.data.type === 'tablecomponent') {
457
- return {
458
- ...item.data,
459
- id,
460
- actionButtons: item.data.actionButtons.map((x) => ({
461
- ...x,
462
- id: x.id.replace(`${item.id}_`, `${id}_`)
463
- })) ?? []
464
- };
465
- }
466
- else if (item.data.type === 'aggridcomponent' ||
467
- item.data.type === 'aggridcomponentee' ||
468
- item.data.type === 'dbexplorercomponent' ||
469
- item.data.type === 'aggridinfinitecomponent' ||
470
- item.data.type === 'aggridinfinitecomponentee') {
471
- return {
472
- ...item.data,
473
- id,
474
- actionButtons: (item.data.actions ?? []).map((x) => ({
475
- ...x,
476
- id: x.id.replace(`${item.id}_`, `${id}_`)
477
- })) ?? []
478
- };
479
- }
480
- else if (item.data.type === 'menucomponent') {
481
- return {
482
- ...item.data,
483
- id,
484
- menuItems: item.data.menuItems.map((x) => ({
485
- ...x,
486
- id: x.id.replace(`${item.id}_`, `${id}_`)
487
- })) ?? []
488
- };
489
- }
490
- else {
491
- return { ...item.data, id };
492
- }
456
+ let newComponent = { ...item.data, id };
457
+ processSubcomponents(newComponent, (c) => {
458
+ c.id = c.id.replace(item.id + '_', id + '_');
459
+ });
460
+ return newComponent;
493
461
  }, parentGrid, Object.fromEntries(gridColumns.map((column) => [column, item[column]])));
494
462
  for (let i = 0; i < (item?.data?.numberOfSubgrids ?? 0); i++) {
495
463
  subgrids[`${item.id}-${i}`].forEach((subgridItem) => {
@@ -501,19 +469,9 @@ export function copyComponent(app, item, parentGrid, subgrids, alreadyVisited) {
501
469
  export function getAllSubgridsAndComponentIds(app, component) {
502
470
  const subgrids = [];
503
471
  let components = [component.id];
504
- if (component.type === 'tablecomponent') {
505
- components.push(...component.actionButtons?.map((x) => x.id));
506
- }
507
- if (component.type === 'aggridcomponent' ||
508
- component.type === 'aggridcomponentee' ||
509
- component.type === 'dbexplorercomponent' ||
510
- component.type === 'aggridinfinitecomponent' ||
511
- component.type === 'aggridinfinitecomponentee') {
512
- components.push(...(component.actions?.map((x) => x.id) ?? []));
513
- }
514
- if (component.type === 'menucomponent') {
515
- components.push(...component.menuItems?.map((x) => x.id));
516
- }
472
+ processSubcomponents(component, (c) => {
473
+ components.push(c.id);
474
+ });
517
475
  if (app.subgrids && component.numberOfSubgrids) {
518
476
  for (let i = 0; i < component.numberOfSubgrids; i++) {
519
477
  const key = `${component.id}-${i}`;
@@ -534,21 +492,11 @@ export function getAllGridItems(app) {
534
492
  return app.grid
535
493
  .concat(Object.values(app.subgrids ?? {}).flat())
536
494
  .map((x) => {
537
- if (x?.data?.type === 'tablecomponent') {
538
- return [x, ...x?.data?.actionButtons?.map((x) => ({ data: x, id: x.id }))];
539
- }
540
- else if ((x?.data?.type === 'aggridcomponent' ||
541
- x?.data?.type === 'aggridcomponentee' ||
542
- x?.data?.type === 'dbexplorercomponent' ||
543
- x?.data?.type === 'aggridinfinitecomponent' ||
544
- x?.data?.type === 'aggridinfinitecomponentee') &&
545
- Array.isArray(x?.data?.actions)) {
546
- return [x, ...x?.data?.actions?.map((x) => ({ data: x, id: x.id }))];
547
- }
548
- else if (x?.data?.type === 'menucomponent') {
549
- return [x, ...x?.data?.menuItems?.map((x) => ({ data: x, id: x.id }))];
550
- }
551
- return [x];
495
+ let r = [];
496
+ processSubcomponents(x.data, (c) => {
497
+ r.push({ data: c, id: c.id });
498
+ });
499
+ return [x, ...r];
552
500
  })
553
501
  .flat();
554
502
  }
@@ -929,10 +877,11 @@ export function isContainer(type) {
929
877
  export function subGridIndexKey(type, id, world) {
930
878
  switch (type) {
931
879
  case 'containercomponent':
932
- case 'verticalsplitpanescomponent':
933
- case 'horizontalsplitpanescomponent':
934
880
  case 'listcomponent':
935
881
  return 0;
882
+ case 'verticalsplitpanescomponent':
883
+ case 'horizontalsplitpanescomponent':
884
+ return world?.outputsById?.[id]?.selectedPaneIndex?.peak() ?? 0;
936
885
  case 'tabscomponent': {
937
886
  return world?.outputsById?.[id]?.selectedTabIndex?.peak() ?? 0;
938
887
  }