windmill-components 1.70.0 → 1.77.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 (441) hide show
  1. package/assets/app.css +12 -1
  2. package/components/AppConnect.svelte +4 -3
  3. package/components/DisplayResult.svelte +28 -10
  4. package/components/Dropdown.svelte +14 -4
  5. package/components/FieldHeader.svelte +12 -8
  6. package/components/FlowBuilder.svelte +107 -39
  7. package/components/FlowBuilder.svelte.d.ts +5 -0
  8. package/components/FlowGraphViewer.svelte +6 -5
  9. package/components/FlowJobResult.svelte +3 -3
  10. package/components/FlowPreviewContent.svelte +3 -8
  11. package/components/FlowStatusViewer.svelte +21 -8
  12. package/components/FolderUsageInfo.svelte +16 -6
  13. package/components/FolderUsageInfo.svelte.d.ts +2 -0
  14. package/components/GroupEditor.svelte +8 -0
  15. package/components/InputTransformForm.svelte +13 -20
  16. package/components/InputTransformSchemaForm.svelte +103 -0
  17. package/components/InputTransformSchemaForm.svelte.d.ts +24 -0
  18. package/components/LogViewer.svelte +1 -1
  19. package/components/ModulePreview.svelte +3 -2
  20. package/components/Multiselect.svelte +1 -1
  21. package/components/PageHeader.svelte +1 -1
  22. package/components/Path.svelte +35 -12
  23. package/components/Popover.svelte +2 -13
  24. package/components/ResourcePicker.svelte +33 -14
  25. package/components/RunChart.svelte +24 -5
  26. package/components/RunForm.svelte +5 -6
  27. package/components/RunForm.svelte.d.ts +1 -0
  28. package/components/SchemaForm.svelte +59 -57
  29. package/components/SchemaForm.svelte.d.ts +0 -5
  30. package/components/ScriptBuilder.svelte +151 -135
  31. package/components/ScriptPicker.svelte +3 -0
  32. package/components/SettingSection.svelte +44 -0
  33. package/components/SettingSection.svelte.d.ts +21 -0
  34. package/components/SimpleEditor.svelte +4 -1
  35. package/components/SimpleEditor.svelte.d.ts +2 -0
  36. package/components/Slider.svelte +6 -1
  37. package/components/Slider.svelte.d.ts +1 -0
  38. package/components/TemplateEditor.svelte +1 -1
  39. package/components/TestJobLoader.svelte +2 -2
  40. package/components/Toggle.svelte +17 -4
  41. package/components/Toggle.svelte.d.ts +2 -0
  42. package/components/Tooltip.svelte +4 -2
  43. package/components/UserSettings.svelte +2 -0
  44. package/components/WhitelistIp.svelte +1 -3
  45. package/components/apps/components/buttons/AppButton.svelte +45 -23
  46. package/components/apps/components/buttons/AppButton.svelte.d.ts +2 -0
  47. package/components/apps/components/buttons/AppForm.svelte +18 -12
  48. package/components/apps/components/buttons/AppForm.svelte.d.ts +3 -0
  49. package/components/apps/components/buttons/AppFormButton.svelte +14 -10
  50. package/components/apps/components/buttons/AppFormButton.svelte.d.ts +3 -0
  51. package/components/apps/components/display/AppBarChart.svelte +15 -7
  52. package/components/apps/components/display/AppBarChart.svelte.d.ts +3 -0
  53. package/components/apps/components/display/AppDisplayComponent.svelte +17 -12
  54. package/components/apps/components/display/AppDisplayComponent.svelte.d.ts +1 -0
  55. package/components/apps/components/display/AppHtml.svelte +18 -4
  56. package/components/apps/components/display/AppHtml.svelte.d.ts +3 -0
  57. package/components/apps/components/display/AppIcon.svelte +20 -8
  58. package/components/apps/components/display/AppIcon.svelte.d.ts +3 -0
  59. package/components/apps/components/display/AppImage.svelte +17 -10
  60. package/components/apps/components/display/AppImage.svelte.d.ts +3 -0
  61. package/components/apps/components/display/AppMap.svelte +214 -0
  62. package/components/apps/components/display/AppMap.svelte.d.ts +23 -0
  63. package/components/apps/components/display/AppPdf.svelte +304 -0
  64. package/components/apps/components/display/AppPdf.svelte.d.ts +24 -0
  65. package/components/apps/components/display/AppPieChart.svelte +15 -7
  66. package/components/apps/components/display/AppPieChart.svelte.d.ts +3 -0
  67. package/components/apps/components/display/AppScatterChart.svelte +12 -4
  68. package/components/apps/components/display/AppScatterChart.svelte.d.ts +3 -0
  69. package/components/apps/components/display/AppText.svelte +38 -32
  70. package/components/apps/components/display/AppText.svelte.d.ts +1 -0
  71. package/components/apps/components/display/AppTimeseries.svelte +12 -4
  72. package/components/apps/components/display/AppTimeseries.svelte.d.ts +3 -0
  73. package/components/apps/components/display/PlotlyHtml.svelte +8 -14
  74. package/components/apps/components/display/PlotlyHtml.svelte.d.ts +1 -1
  75. package/components/apps/components/display/VegaLiteHtml.svelte +3 -8
  76. package/components/apps/components/display/VegaLiteHtml.svelte.d.ts +1 -0
  77. package/components/apps/components/display/index.d.ts +3 -0
  78. package/components/apps/components/display/index.js +3 -0
  79. package/components/apps/components/display/table/AppAggridTable.svelte +20 -8
  80. package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -0
  81. package/components/apps/components/display/table/AppTable.svelte +69 -21
  82. package/components/apps/components/display/table/AppTable.svelte.d.ts +3 -1
  83. package/components/apps/components/display/table/AppTableFooter.svelte +8 -1
  84. package/components/apps/components/display/table/AppTableFooter.svelte.d.ts +2 -0
  85. package/components/apps/components/helpers/AlignWrapper.svelte +13 -7
  86. package/components/apps/components/helpers/AlignWrapper.svelte.d.ts +3 -1
  87. package/components/apps/components/helpers/HiddenComponent.svelte +5 -1
  88. package/components/apps/components/helpers/HiddenComponent.svelte.d.ts +1 -0
  89. package/components/apps/components/helpers/InputValue.svelte +58 -52
  90. package/components/apps/components/helpers/InputValue.svelte.d.ts +4 -3
  91. package/components/apps/components/helpers/NonRunnableComponent.svelte +18 -3
  92. package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +1 -0
  93. package/components/apps/components/helpers/RefreshButton.svelte +3 -4
  94. package/components/apps/components/helpers/ResizeWrapper.svelte +24 -0
  95. package/components/apps/components/helpers/ResizeWrapper.svelte.d.ts +19 -0
  96. package/components/apps/components/helpers/RunnableComponent.svelte +126 -91
  97. package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +5 -1
  98. package/components/apps/components/helpers/RunnableWrapper.svelte +11 -5
  99. package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +4 -1
  100. package/components/apps/components/helpers/eval.d.ts +5 -0
  101. package/components/apps/components/helpers/eval.js +57 -0
  102. package/components/apps/components/inputs/AppCheckbox.svelte +8 -2
  103. package/components/apps/components/inputs/AppCheckbox.svelte.d.ts +3 -0
  104. package/components/apps/components/inputs/AppDateInput.svelte +25 -18
  105. package/components/apps/components/inputs/AppDateInput.svelte.d.ts +6 -1
  106. package/components/apps/components/inputs/AppFileInput.svelte +22 -14
  107. package/components/apps/components/inputs/AppFileInput.svelte.d.ts +3 -0
  108. package/components/apps/components/inputs/AppMultiSelect.svelte +82 -0
  109. package/components/apps/components/inputs/AppMultiSelect.svelte.d.ts +27 -0
  110. package/components/apps/components/inputs/AppNumberInput.svelte +20 -16
  111. package/components/apps/components/inputs/AppNumberInput.svelte.d.ts +5 -0
  112. package/components/apps/components/inputs/AppRangeInput.svelte +55 -14
  113. package/components/apps/components/inputs/AppRangeInput.svelte.d.ts +3 -0
  114. package/components/apps/components/inputs/AppSelect.svelte +58 -21
  115. package/components/apps/components/inputs/AppSelect.svelte.d.ts +3 -0
  116. package/components/apps/components/inputs/AppSliderInputs.svelte +41 -9
  117. package/components/apps/components/inputs/AppSliderInputs.svelte.d.ts +3 -0
  118. package/components/apps/components/inputs/AppTextInput.svelte +53 -19
  119. package/components/apps/components/inputs/AppTextInput.svelte.d.ts +6 -0
  120. package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +13 -3
  121. package/components/apps/components/inputs/currency/AppCurrencyInput.svelte.d.ts +3 -0
  122. package/components/apps/components/inputs/currency/CurrencyInput.svelte +2 -0
  123. package/components/apps/components/inputs/currency/CurrencyInput.svelte.d.ts +1 -0
  124. package/components/apps/components/layout/AppContainer.svelte +20 -17
  125. package/components/apps/components/layout/AppContainer.svelte.d.ts +3 -0
  126. package/components/apps/components/layout/AppDivider.svelte +24 -4
  127. package/components/apps/components/layout/AppDivider.svelte.d.ts +3 -1
  128. package/components/apps/components/layout/AppDrawer.svelte +86 -0
  129. package/components/apps/components/layout/AppDrawer.svelte.d.ts +24 -0
  130. package/components/apps/components/layout/AppSplitpanes.svelte +83 -0
  131. package/components/apps/components/layout/AppSplitpanes.svelte.d.ts +26 -0
  132. package/components/apps/components/layout/AppTabs.svelte +112 -40
  133. package/components/apps/components/layout/AppTabs.svelte.d.ts +4 -0
  134. package/components/apps/components/layout/index.d.ts +2 -0
  135. package/components/apps/components/layout/index.js +2 -0
  136. package/components/apps/editor/AppEditor.svelte +201 -132
  137. package/components/apps/editor/AppEditor.svelte.d.ts +3 -1
  138. package/components/apps/editor/AppEditorHeader.svelte +149 -66
  139. package/components/apps/editor/AppInputs.svelte +3 -3
  140. package/components/apps/editor/AppPreview.svelte +21 -7
  141. package/components/apps/editor/ComponentHeader.svelte +17 -4
  142. package/components/apps/editor/ComponentHeader.svelte.d.ts +2 -0
  143. package/components/apps/editor/GridEditor.svelte +86 -70
  144. package/components/apps/editor/GridPanel.svelte +29 -0
  145. package/components/apps/editor/GridPanel.svelte.d.ts +18 -0
  146. package/components/apps/editor/RecomputeAllComponents.svelte +14 -6
  147. package/components/apps/editor/SettingsPanel.svelte +30 -27
  148. package/components/apps/editor/SubGridEditor.svelte +82 -50
  149. package/components/apps/editor/SubGridEditor.svelte.d.ts +8 -4
  150. package/components/apps/editor/appUtils.d.ts +22 -3
  151. package/components/apps/editor/appUtils.js +221 -47
  152. package/components/apps/editor/component/Component.svelte +281 -61
  153. package/components/apps/editor/component/Component.svelte.d.ts +3 -1
  154. package/components/apps/editor/component/ComponentNavigation.svelte +170 -0
  155. package/components/apps/editor/component/ComponentNavigation.svelte.d.ts +14 -0
  156. package/components/apps/editor/component/components.d.ts +15 -3
  157. package/components/apps/editor/component/components.js +409 -54
  158. package/components/apps/editor/component/default-codes.js +6 -6
  159. package/components/apps/editor/component/sets.js +11 -3
  160. package/components/apps/editor/componentsPanel/ComponentList.svelte +72 -29
  161. package/components/apps/editor/componentsPanel/CssProperty.svelte +59 -23
  162. package/components/apps/editor/componentsPanel/CssProperty.svelte.d.ts +2 -1
  163. package/components/apps/editor/componentsPanel/CssSettings.svelte +56 -9
  164. package/components/apps/editor/componentsPanel/ListItem.svelte +23 -12
  165. package/components/apps/editor/componentsPanel/componentStaticValues.d.ts +2 -0
  166. package/components/apps/editor/componentsPanel/componentStaticValues.js +15 -2
  167. package/components/apps/editor/contextPanel/ComponentOutput.svelte +77 -0
  168. package/components/apps/editor/contextPanel/ComponentOutput.svelte.d.ts +21 -0
  169. package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +10 -6
  170. package/components/apps/editor/contextPanel/ContextPanel.svelte +81 -91
  171. package/components/apps/editor/contextPanel/SubGridOutput.svelte +71 -0
  172. package/components/apps/editor/contextPanel/SubGridOutput.svelte.d.ts +19 -0
  173. package/components/apps/editor/contextPanel/components/BackgroundScriptOutput.svelte +38 -0
  174. package/components/apps/editor/contextPanel/components/BackgroundScriptOutput.svelte.d.ts +19 -0
  175. package/components/apps/editor/contextPanel/components/BackgroundScriptsOutput.svelte +10 -0
  176. package/components/apps/editor/contextPanel/components/BackgroundScriptsOutput.svelte.d.ts +16 -0
  177. package/components/apps/editor/contextPanel/components/MinMaxButton.svelte +25 -0
  178. package/components/apps/editor/contextPanel/components/MinMaxButton.svelte.d.ts +16 -0
  179. package/components/apps/editor/contextPanel/components/OutputHeader.svelte +78 -0
  180. package/components/apps/editor/contextPanel/components/OutputHeader.svelte.d.ts +26 -0
  181. package/components/apps/editor/contextPanel/components/TableActionOutput.svelte +19 -0
  182. package/components/apps/editor/contextPanel/components/TableActionOutput.svelte.d.ts +18 -0
  183. package/components/apps/editor/contextPanel/components/TableActionsOutput.svelte +14 -0
  184. package/components/apps/editor/contextPanel/components/TableActionsOutput.svelte.d.ts +18 -0
  185. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +55 -13
  186. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte.d.ts +1 -0
  187. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +126 -62
  188. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +5 -0
  189. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte +1 -1
  190. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +11 -5
  191. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +1 -0
  192. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +26 -17
  193. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +95 -85
  194. package/components/apps/editor/inlineScriptsPanel/utils.d.ts +5 -9
  195. package/components/apps/editor/inlineScriptsPanel/utils.js +19 -8
  196. package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +10 -9
  197. package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte.d.ts +21 -12
  198. package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +1 -1
  199. package/components/apps/editor/settingsPanel/ComponentPanel.svelte +119 -79
  200. package/components/apps/editor/settingsPanel/ComponentPanel.svelte.d.ts +1 -0
  201. package/components/apps/editor/settingsPanel/GridPane.svelte +75 -0
  202. package/components/apps/editor/settingsPanel/GridPane.svelte.d.ts +20 -0
  203. package/components/apps/editor/settingsPanel/GridTab.svelte +9 -17
  204. package/components/apps/editor/settingsPanel/GridTab.svelte.d.ts +2 -0
  205. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -1
  206. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +1 -1
  207. package/components/apps/editor/settingsPanel/Recompute.svelte +2 -1
  208. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +7 -1
  209. package/components/apps/editor/settingsPanel/TableActions.svelte +30 -2
  210. package/components/apps/editor/settingsPanel/common/PanelSection.svelte +2 -2
  211. package/components/apps/editor/settingsPanel/inputEditor/ColorInput.svelte +48 -0
  212. package/components/apps/editor/settingsPanel/inputEditor/ColorInput.svelte.d.ts +19 -0
  213. package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +2 -8
  214. package/components/apps/editor/settingsPanel/inputEditor/EvalInputEditor.svelte +2 -2
  215. package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +77 -41
  216. package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +2 -0
  217. package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte +3 -3
  218. package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte.d.ts +4 -1
  219. package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +54 -6
  220. package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +1 -0
  221. package/components/apps/editor/settingsPanel/inputEditor/UploadInputEditor.svelte +7 -9
  222. package/components/apps/editor/settingsPanel/inputEditor/UploadInputEditor.svelte.d.ts +1 -1
  223. package/components/apps/editor/settingsPanel/mainInput/InlineScriptList.svelte +1 -0
  224. package/components/apps/editor/settingsPanel/mainInput/InlineScriptList.svelte.d.ts +1 -0
  225. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +1 -1
  226. package/components/apps/inputType.d.ts +6 -5
  227. package/components/apps/rx.d.ts +6 -4
  228. package/components/apps/rx.js +36 -15
  229. package/components/apps/store.d.ts +6 -1
  230. package/components/apps/svelte-grid/Grid.svelte +171 -0
  231. package/components/apps/svelte-grid/Grid.svelte.d.ts +47 -0
  232. package/components/apps/svelte-grid/LICENSE +23 -0
  233. package/components/apps/svelte-grid/MoveResize.svelte +328 -0
  234. package/components/apps/svelte-grid/MoveResize.svelte.d.ts +46 -0
  235. package/components/apps/svelte-grid/types.d.ts +25 -0
  236. package/components/apps/svelte-grid/utils/container.d.ts +1 -0
  237. package/components/apps/svelte-grid/utils/container.js +4 -0
  238. package/components/apps/svelte-grid/utils/helper.d.ts +14 -0
  239. package/components/apps/svelte-grid/utils/helper.js +36 -0
  240. package/components/apps/svelte-grid/utils/item.d.ts +14 -0
  241. package/components/apps/svelte-grid/utils/item.js +192 -0
  242. package/components/apps/svelte-grid/utils/matrix.d.ts +6 -0
  243. package/components/apps/svelte-grid/utils/matrix.js +53 -0
  244. package/components/apps/svelte-grid/utils/other.d.ts +3 -0
  245. package/components/apps/svelte-grid/utils/other.js +30 -0
  246. package/components/apps/types.d.ts +21 -8
  247. package/components/apps/utils.d.ts +3 -3
  248. package/components/apps/utils.js +34 -56
  249. package/components/common/CloseButton.svelte +18 -0
  250. package/components/common/CloseButton.svelte.d.ts +27 -0
  251. package/components/common/badge/Badge.svelte +6 -1
  252. package/components/common/badge/Badge.svelte.d.ts +1 -0
  253. package/components/common/button/ButtonPopup.svelte +2 -0
  254. package/components/common/button/ButtonPopup.svelte.d.ts +1 -0
  255. package/components/common/button/UndoRedo.svelte +32 -0
  256. package/components/common/button/UndoRedo.svelte.d.ts +20 -0
  257. package/components/common/drawer/Drawer.svelte +10 -4
  258. package/components/common/drawer/Drawer.svelte.d.ts +3 -1
  259. package/components/common/drawer/DrawerContent.svelte +2 -7
  260. package/components/common/fileInput/FileInput.svelte +47 -21
  261. package/components/common/fileInput/FileInput.svelte.d.ts +3 -1
  262. package/components/common/fileInput/model.d.ts +1 -0
  263. package/components/common/fileInput/model.js +1 -0
  264. package/components/common/index.d.ts +1 -0
  265. package/components/common/index.js +1 -0
  266. package/components/common/languageIcons/JavaScript.svelte +11 -0
  267. package/components/common/languageIcons/JavaScript.svelte.d.ts +25 -0
  268. package/components/common/languageIcons/LanguageIcon.svelte +3 -1
  269. package/components/common/languageIcons/LanguageIcon.svelte.d.ts +1 -1
  270. package/components/common/menu/Menu.svelte +3 -2
  271. package/components/common/menu/Menu.svelte.d.ts +2 -1
  272. package/components/common/modal/Modal.svelte +9 -4
  273. package/components/common/modal/Modal.svelte.d.ts +2 -0
  274. package/components/common/popup/Popup.svelte +2 -1
  275. package/components/common/popup/Popup.svelte.d.ts +9 -0
  276. package/components/common/table/AppRow.svelte +14 -8
  277. package/components/common/table/AppRow.svelte.d.ts +1 -0
  278. package/components/common/table/FlowRow.svelte +22 -12
  279. package/components/common/table/FlowRow.svelte.d.ts +1 -0
  280. package/components/common/table/ScriptRow.svelte +43 -14
  281. package/components/common/table/ScriptRow.svelte.d.ts +1 -0
  282. package/components/common/tabs/Tab.svelte +13 -5
  283. package/components/common/tabs/Tab.svelte.d.ts +6 -1
  284. package/components/common/tabs/Tabs.svelte +8 -6
  285. package/components/common/tabs/Tabs.svelte.d.ts +3 -1
  286. package/components/flows/FlowEditor.svelte +6 -4
  287. package/components/flows/common/FlowCardHeader.svelte +4 -1
  288. package/components/flows/content/BranchPredicateEditor.svelte +3 -4
  289. package/components/flows/content/CapturePayload.svelte +1 -2
  290. package/components/flows/content/FlowBranchesAllWrapper.svelte +1 -1
  291. package/components/flows/content/FlowConstants.svelte +7 -13
  292. package/components/flows/content/FlowEditorPanel.svelte +4 -3
  293. package/components/flows/content/FlowFailureModule.svelte +2 -1
  294. package/components/flows/content/FlowInput.svelte +4 -2
  295. package/components/flows/content/FlowLoop.svelte +3 -4
  296. package/components/flows/content/FlowModuleComponent.svelte +23 -11
  297. package/components/flows/content/FlowModuleEarlyStop.svelte +3 -1
  298. package/components/flows/content/FlowModuleHeader.svelte +26 -3
  299. package/components/flows/content/FlowModuleHeader.svelte.d.ts +1 -0
  300. package/components/flows/content/FlowModuleSleep.svelte +2 -2
  301. package/components/flows/content/FlowModuleWrapper.svelte +2 -8
  302. package/components/flows/content/FlowSchedules.svelte +1 -2
  303. package/components/flows/content/FlowSettings.svelte +17 -37
  304. package/components/flows/content/ScriptEditorDrawer.svelte +98 -0
  305. package/components/flows/content/ScriptEditorDrawer.svelte.d.ts +19 -0
  306. package/components/flows/flowState.d.ts +2 -3
  307. package/components/flows/flowState.js +1 -4
  308. package/components/flows/flowStateUtils.d.ts +7 -6
  309. package/components/flows/flowStateUtils.js +5 -9
  310. package/components/flows/flowStore.d.ts +5 -4
  311. package/components/flows/flowStore.js +5 -17
  312. package/components/flows/header/FlowImportExportMenu.svelte +2 -1
  313. package/components/flows/map/FlowConstantsItem.svelte +2 -2
  314. package/components/flows/map/FlowErrorHandlerItem.svelte +12 -13
  315. package/components/flows/map/FlowInputsItem.svelte +2 -3
  316. package/components/flows/map/FlowModuleSchemaItem.svelte +88 -91
  317. package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +3 -3
  318. package/components/flows/map/FlowModuleSchemaMap.svelte +164 -138
  319. package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +1 -2
  320. package/components/flows/map/FlowSettingsItem.svelte +5 -4
  321. package/components/flows/map/InsertModuleButton.svelte +12 -10
  322. package/components/flows/map/InsertModuleButton.svelte.d.ts +1 -0
  323. package/components/flows/map/MapItem.svelte +176 -103
  324. package/components/flows/map/MapItem.svelte.d.ts +20 -2
  325. package/components/flows/map/VirtualItem.svelte +129 -0
  326. package/components/flows/map/VirtualItem.svelte.d.ts +44 -0
  327. package/components/flows/pickers/FlowScriptPicker.svelte.d.ts +1 -1
  328. package/components/flows/pickers/WorkspaceScriptPicker.svelte +1 -1
  329. package/components/flows/previousResults.d.ts +1 -1
  330. package/components/flows/previousResults.js +32 -17
  331. package/components/flows/types.d.ts +13 -1
  332. package/components/flows/utils.js +1 -1
  333. package/components/graph/FlowGraph.svelte +227 -167
  334. package/components/graph/FlowGraph.svelte.d.ts +14 -1
  335. package/components/graph/model.d.ts +6 -36
  336. package/components/graph/model.js +1 -1
  337. package/components/graph/svelvet/LICENSE +21 -0
  338. package/components/graph/svelvet/collapsible/controllers/util.d.ts +15 -0
  339. package/components/graph/svelvet/collapsible/controllers/util.js +144 -0
  340. package/components/graph/svelvet/collapsible/models/Collapsible.d.ts +17 -0
  341. package/components/graph/svelvet/collapsible/models/Collapsible.js +25 -0
  342. package/components/graph/svelvet/collapsible/types/types.d.ts +8 -0
  343. package/components/graph/svelvet/collapsible/types/types.js +1 -0
  344. package/components/graph/svelvet/container/README.md +7 -0
  345. package/components/graph/svelvet/container/controllers/middleware.d.ts +18 -0
  346. package/components/graph/svelvet/container/controllers/middleware.js +101 -0
  347. package/components/graph/svelvet/container/views/GraphView.svelte +252 -0
  348. package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +25 -0
  349. package/components/graph/svelvet/container/views/Svelvet.svelte +131 -0
  350. package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +41 -0
  351. package/components/graph/svelvet/customCss/controllers/getCss.d.ts +2 -0
  352. package/components/graph/svelvet/customCss/controllers/getCss.js +57 -0
  353. package/components/graph/svelvet/d3/controllers/d3.d.ts +5 -0
  354. package/components/graph/svelvet/d3/controllers/d3.js +59 -0
  355. package/components/graph/svelvet/edges/controllers/anchorCbDev.d.ts +4 -0
  356. package/components/graph/svelvet/edges/controllers/anchorCbDev.js +92 -0
  357. package/components/graph/svelvet/edges/controllers/anchorCbUser.d.ts +57 -0
  358. package/components/graph/svelvet/edges/controllers/anchorCbUser.js +73 -0
  359. package/components/graph/svelvet/edges/controllers/util.d.ts +37 -0
  360. package/components/graph/svelvet/edges/controllers/util.js +72 -0
  361. package/components/graph/svelvet/edges/models/Anchor.d.ts +48 -0
  362. package/components/graph/svelvet/edges/models/Anchor.js +122 -0
  363. package/components/graph/svelvet/edges/models/Edge.d.ts +47 -0
  364. package/components/graph/svelvet/edges/models/Edge.js +107 -0
  365. package/components/graph/svelvet/edges/types/types.d.ts +18 -0
  366. package/components/graph/svelvet/edges/types/types.js +1 -0
  367. package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte +105 -0
  368. package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte.d.ts +18 -0
  369. package/components/graph/svelvet/edges/views/Edges/EdgeAnchor.svelte +12 -0
  370. package/components/graph/svelvet/edges/views/Edges/EdgeAnchor.svelte.d.ts +17 -0
  371. package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +43 -0
  372. package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte.d.ts +17 -0
  373. package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte +137 -0
  374. package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte.d.ts +17 -0
  375. package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte +176 -0
  376. package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte.d.ts +60 -0
  377. package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte +8 -0
  378. package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte.d.ts +25 -0
  379. package/components/graph/svelvet/edges/views/Edges/types.d.ts +52 -0
  380. package/components/graph/svelvet/edges/views/Edges/types.js +1 -0
  381. package/components/graph/svelvet/edges/views/Edges/utils.d.ts +33 -0
  382. package/components/graph/svelvet/edges/views/Edges/utils.js +31 -0
  383. package/components/graph/svelvet/editEdges/views/EditEdge.svelte +151 -0
  384. package/components/graph/svelvet/editEdges/views/EditEdge.svelte.d.ts +20 -0
  385. package/components/graph/svelvet/nodes/controllers/util.d.ts +9 -0
  386. package/components/graph/svelvet/nodes/controllers/util.js +13 -0
  387. package/components/graph/svelvet/nodes/models/Node.d.ts +78 -0
  388. package/components/graph/svelvet/nodes/models/Node.js +195 -0
  389. package/components/graph/svelvet/nodes/views/EditNode.svelte +147 -0
  390. package/components/graph/svelvet/nodes/views/EditNode.svelte.d.ts +33 -0
  391. package/components/graph/svelvet/nodes/views/Node.svelte +85 -0
  392. package/components/graph/svelvet/nodes/views/Node.svelte.d.ts +22 -0
  393. package/components/graph/svelvet/resizableNodes/controllers/util.d.ts +11 -0
  394. package/components/graph/svelvet/resizableNodes/controllers/util.js +24 -0
  395. package/components/graph/svelvet/resizableNodes/models/ResizeNode.d.ts +33 -0
  396. package/components/graph/svelvet/resizableNodes/models/ResizeNode.js +71 -0
  397. package/components/graph/svelvet/resizableNodes/views/ResizeNode.svelte +81 -0
  398. package/components/graph/svelvet/resizableNodes/views/ResizeNode.svelte.d.ts +20 -0
  399. package/components/graph/svelvet/store/controllers/storeApi.d.ts +32 -0
  400. package/components/graph/svelvet/store/controllers/storeApi.js +111 -0
  401. package/components/graph/svelvet/store/controllers/userApi.d.ts +3 -0
  402. package/components/graph/svelvet/store/controllers/userApi.js +18 -0
  403. package/components/graph/svelvet/store/controllers/util.d.ts +31 -0
  404. package/components/graph/svelvet/store/controllers/util.js +180 -0
  405. package/components/graph/svelvet/store/models/store.d.ts +12 -0
  406. package/components/graph/svelvet/store/models/store.js +9 -0
  407. package/components/graph/svelvet/store/types/types.d.ts +134 -0
  408. package/components/graph/svelvet/store/types/types.js +1 -0
  409. package/components/graph/svelvet/types/README.md +3 -0
  410. package/components/graph/svelvet/types/index.d.ts +2 -0
  411. package/components/graph/svelvet/types/index.js +1 -0
  412. package/components/graph/svelvet/types/types.d.ts +49 -0
  413. package/components/graph/svelvet/types/types.js +18 -0
  414. package/components/graph/util.js +2 -2
  415. package/components/home/ItemsList.svelte +53 -5
  416. package/components/home/ItemsList.svelte.d.ts +1 -0
  417. package/components/home/ListFilters.svelte +7 -2
  418. package/components/jobs/JobDetail.svelte +12 -1
  419. package/components/propertyPicker/ObjectViewer.svelte +6 -4
  420. package/components/sidebar/SidebarContent.svelte +2 -2
  421. package/consts.d.ts +1 -0
  422. package/consts.js +1 -0
  423. package/defaults.d.ts +4 -0
  424. package/defaults.js +4 -0
  425. package/history.d.ts +9 -0
  426. package/history.js +63 -0
  427. package/package.json +87 -9
  428. package/script_helpers.d.ts +1 -1
  429. package/script_helpers.js +1 -0
  430. package/scripts.d.ts +1 -1
  431. package/scripts.js +8 -1
  432. package/utils.d.ts +9 -4
  433. package/utils.js +43 -8
  434. package/components/apps/editor/TablePanel.svelte +0 -19
  435. package/components/apps/editor/TablePanel.svelte.d.ts +0 -17
  436. package/components/apps/editor/settingsPanel/MoveToOtherGrid.svelte +0 -85
  437. package/components/apps/editor/settingsPanel/MoveToOtherGrid.svelte.d.ts +0 -18
  438. package/components/flows/map/FlowBranchAllMap.svelte +0 -100
  439. package/components/flows/map/FlowBranchAllMap.svelte.d.ts +0 -17
  440. package/components/flows/map/FlowBranchOneMap.svelte +0 -124
  441. package/components/flows/map/FlowBranchOneMap.svelte.d.ts +0 -17
@@ -1,17 +1,26 @@
1
- <script>import Svelvet from '@windmill-labs/svelvet';
2
- import { sugiyama, dagStratify, decrossOpt, coordCenter } from 'd3-dag';
3
- import { FlowStatusModule, RawScript } from '../../gen';
1
+ <script>import { sugiyama, dagStratify, decrossOpt, coordCenter } from 'd3-dag';
2
+ import { FlowStatusModule } from '../../gen';
4
3
  import { NODE, createIdGenerator, isNode, isLoop, isBranch } from '.';
5
4
  import { defaultIfEmptyString, truncateRev } from '../../utils';
6
- import { createEventDispatcher } from 'svelte';
7
- import { charsToNumber, numberToChars } from '../flows/utils';
5
+ import { createEventDispatcher, setContext } from 'svelte';
6
+ import Svelvet from './svelvet/container/views/Svelvet.svelte';
7
+ import MapItem from '../flows/map/MapItem.svelte';
8
+ import VirtualItem from '../flows/map/VirtualItem.svelte';
9
+ import { writable } from 'svelte/store';
8
10
  export let success = undefined;
9
11
  export let modules = [];
10
12
  export let failureModule = undefined;
11
13
  export let minHeight = 0;
14
+ export let maxHeight = undefined;
12
15
  export let notSelectable = false;
13
16
  export let flowModuleStates = undefined;
14
- let selectedNode = undefined;
17
+ export let rebuildOnChange = undefined;
18
+ export let selectedId = writable(undefined);
19
+ export let initialZoom = 1.0;
20
+ export let insertable = false;
21
+ export let moving = undefined;
22
+ export let scroll = false;
23
+ setContext('FlowGraphContext', { selectedId });
15
24
  let idGenerator;
16
25
  let nestedNodes;
17
26
  let nodes = [];
@@ -20,7 +29,9 @@ let width, height;
20
29
  let errorHandlers = {};
21
30
  let dispatch = createEventDispatcher();
22
31
  $: {
23
- width && height && minHeight && selectedNode && flowModuleStates;
32
+ rebuildOnChange;
33
+ moving;
34
+ width && height && minHeight && $selectedId && flowModuleStates;
24
35
  nodes = edges = [];
25
36
  errorHandlers = {};
26
37
  createGraph();
@@ -34,12 +45,12 @@ async function createGraph() {
34
45
  return;
35
46
  }
36
47
  nestedNodes = nodes = [];
37
- nestedNodes.push(createVirtualNode(getParentIds(), 'Input'));
38
- modules.forEach((m) => {
39
- const item = getConvertedFlowModule(m);
48
+ nestedNodes.push(createVirtualNode(getParentIds(), 'Input', modules, 'after', undefined, undefined, 0, 0, true, undefined));
49
+ modules.forEach((m, i) => {
50
+ const item = getConvertedFlowModule(m, undefined, undefined, 0, i + 1 == modules?.length, modules);
40
51
  item && nestedNodes.push(item);
41
52
  });
42
- nestedNodes.push(createVirtualNode(getParentIds(), 'Result'));
53
+ nestedNodes.push(createVirtualNode(getParentIds(), 'Result', undefined, 'before', undefined, undefined, 0, modules.length, true, undefined));
43
54
  if (!flowModuleStates) {
44
55
  if (failureModule)
45
56
  nestedNodes.push(createErrorHandler(failureModule));
@@ -55,44 +66,36 @@ async function createGraph() {
55
66
  const layered = layoutNodes(flatNodes);
56
67
  nodes = layered.nodes;
57
68
  // width = layered.width
58
- height = layered.height;
69
+ height = Math.min(Math.max(layered.height, minHeight), maxHeight ?? window.innerHeight - 100);
59
70
  edges = createEdges(nodes);
60
71
  }
61
- function getConvertedFlowModule(module, parent = undefined, edgeLabel = undefined, insideLoop = false) {
72
+ function getConvertedFlowModule(module, parent, edgeLabel, loopDepth, insertableEnd, modules) {
62
73
  const type = module.value.type;
63
74
  const parentIds = getParentIds(parent);
64
- if (type === 'rawscript') {
65
- const lang = module.value.language;
66
- return flowModuleToNode(parentIds, module.id, module.summary || 'Inline script', 'inline', module, lang, edgeLabel, undefined, insideLoop);
67
- }
68
- else if (type === 'script') {
69
- const isHub = module.value.path.startsWith('hub/');
70
- return flowModuleToNode(parentIds, module.id, module.summary || module.value.path, isHub ? 'hub' : 'workspace', module, undefined, edgeLabel, undefined, insideLoop);
71
- }
72
- else if (type === 'forloopflow') {
73
- return flowModuleToLoop(module.value.modules, module, parent);
75
+ if (type === 'forloopflow') {
76
+ //@ts-ignore
77
+ return flowModuleToLoop(modules, module, parent, loopDepth);
74
78
  }
75
79
  else if (type === 'branchone') {
76
80
  const branches = [
77
- { summary: 'Default branch', modules: module.value.default },
81
+ { summary: 'Default Branch', modules: module.value.default, removable: false },
78
82
  ...module.value.branches.map((b, i) => ({
79
83
  summary: defaultIfEmptyString(b.summary, 'Branch ' + (i + 1)),
80
- modules: b.modules
84
+ modules: b.modules,
85
+ removable: true
81
86
  }))
82
87
  ];
83
- return flowModuleToBranch(module, branches, ['Default', ...module.value.branches.map((x) => `${truncateRev(x.expr, 20)}`)], parent, insideLoop);
88
+ return flowModuleToBranch(module, modules, branches, ['', ...module.value.branches.map((x) => `${truncateRev(x.expr, 20)}`)], parent, loopDepth, false);
84
89
  }
85
90
  else if (type === 'branchall') {
86
91
  const branches = module.value.branches.map((b, i) => ({
87
92
  summary: defaultIfEmptyString(b.summary, `Branch ${i + 1}`),
88
- modules: b.modules
93
+ modules: b.modules,
94
+ removable: true
89
95
  }));
90
- return flowModuleToBranch(module, branches, [], parent, insideLoop);
91
- }
92
- else if (type === 'flow') {
93
- return flowModuleToNode(parentIds, module.id, module.summary || 'Flow ' + module.value.path, 'inline', module, undefined, edgeLabel, undefined, insideLoop);
96
+ return flowModuleToBranch(module, modules, branches, [], parent, loopDepth, true);
94
97
  }
95
- return flowModuleToNode(parentIds, module.id, module.summary || 'Identity step', 'inline', module, undefined, edgeLabel, undefined, insideLoop);
98
+ return flowModuleToNode(parentIds, module, edgeLabel, undefined, loopDepth, insertableEnd, false, modules);
96
99
  }
97
100
  function getParentIds(items = undefined) {
98
101
  if (typeof items == 'string') {
@@ -102,14 +105,14 @@ function getParentIds(items = undefined) {
102
105
  if (!item)
103
106
  return [];
104
107
  if (isNode(item)) {
105
- const id = numberToChars(item.id);
108
+ const id = item.id;
106
109
  return [id];
107
110
  }
108
111
  else if (isLoop(item)) {
109
112
  return getParentIds(item.items);
110
113
  }
111
114
  else if (isBranch(item)) {
112
- return item.items.map((i) => getParentIds(i)).flat();
115
+ return [item.nodeEnd.id];
113
116
  }
114
117
  return [];
115
118
  }
@@ -136,105 +139,105 @@ function getResultColor() {
136
139
  case false:
137
140
  return getStateColor(FlowStatusModule.type.FAILURE);
138
141
  default:
139
- return undefined;
142
+ return '#fff';
140
143
  }
141
144
  }
142
- function flowModuleToNode(parentIds, id, title, host, onClickDetail, lang, edgeLabel, header, insideLoop = false) {
143
- const langImg = {
144
- deno: '/icons/ts-lang.svg',
145
- go: '/icons/go-lang.svg',
146
- python3: '/icons/python-lang.svg',
147
- bash: '/icons/bash-lang.svg'
148
- };
149
- const hostImg = {
150
- hub: '/icons/hub-script.svg',
151
- workspace: '/icons/inline-script.svg',
152
- inline: ''
153
- };
154
- const wrapperWidth = lang ? 'w-[calc(100%-70px)]' : 'w-[calc(100%-50px)]';
155
- let generatedId = idGenerator.next().value;
156
- let nodeId = id ?? numberToChars(generatedId - 1);
157
- // console.log(id, generatedId, nodeId, charsToNumber(nodeId))
145
+ function flowModuleToNode(parentIds, mod, edgeLabel, annotation, loopDepth, insertableEnd, branchable, modules) {
158
146
  return {
159
- id: charsToNumber(nodeId),
147
+ type: 'node',
148
+ id: mod.id,
160
149
  position: { x: -1, y: -1 },
161
150
  data: {
162
- html: `
163
- <div class="w-full flex justify-between items-center px-1">
164
- <div class="${wrapperWidth} text-left ellipsize text-2xs truncate">
165
- ${title}
166
- </div>
167
- <div class="flex items-center">
168
- ${lang ? `<img src="${langImg[lang]}" class="grayscale">` : ''}
169
- ${host != 'inline' ? `<img src="${hostImg[host]}" class="grayscale">` : ''}
170
- <span class="center-center font-semibold bg-indigo-100 text-indigo-800 rounded px-1 pb-[2px] ml-[2px]">
171
- ${nodeId}
172
- </span>
173
- </div>
174
- </div>
175
- <div class="text-2xs absolute -top-6 text-gray-600 truncate">${flowModuleStates?.[nodeId]?.scheduled_for ?? header ?? ''}<div>
176
- `
151
+ custom: {
152
+ component: MapItem,
153
+ props: {
154
+ trigger: parentIds.length == 0,
155
+ mod,
156
+ insertable,
157
+ insertableEnd,
158
+ branchable,
159
+ bgColor: getStateColor(flowModuleStates?.[mod.id]?.type),
160
+ annotation,
161
+ modules,
162
+ moving
163
+ },
164
+ cb: (e, detail) => {
165
+ if (e == 'delete') {
166
+ dispatch('delete', detail);
167
+ }
168
+ else if (e == 'select') {
169
+ if (!notSelectable) {
170
+ if ($selectedId != mod.id) {
171
+ $selectedId = mod.id;
172
+ dispatch('select', mod);
173
+ }
174
+ }
175
+ }
176
+ else if (e == 'insert') {
177
+ dispatch('insert', detail);
178
+ }
179
+ else if (e == 'newBranch') {
180
+ dispatch('newBranch', detail);
181
+ }
182
+ else if (e == 'move') {
183
+ dispatch('move', { module: mod, modules });
184
+ }
185
+ }
186
+ }
177
187
  },
178
- host,
179
- width: insideLoop ? NODE.width * 0.8 : NODE.width,
188
+ width: NODE.width,
180
189
  height: NODE.height,
181
- borderColor: selectedNode == nodeId ? 'black' : '#999',
182
- bgColor: selectedNode == nodeId ? '#f5f5f5' : getStateColor(flowModuleStates?.[nodeId]?.type),
183
190
  parentIds,
184
- clickCallback: (node) => {
185
- if (!notSelectable) {
186
- selectedNode = nodeId;
187
- }
188
- if (onClickDetail.id == undefined) {
189
- onClickDetail.id = nodeId;
190
- }
191
- dispatch('click', onClickDetail);
192
- },
193
- edgeLabel
191
+ sourcePosition: 'bottom',
192
+ targetPosition: 'top',
193
+ edgeLabel,
194
+ loopDepth
194
195
  };
195
196
  }
196
- function flowModuleToLoop(modules, module, parent = undefined) {
197
- const value = module.value;
198
- const expr = value.iterator.type == 'static' ? value.iterator.value : value.iterator.expr;
197
+ function flowModuleToLoop(modules, module, parent, loopDepth) {
199
198
  const loop = {
200
199
  type: 'loop',
201
200
  items: [
202
- flowModuleToNode(getParentIds(parent), module.id, module.summary || `For Loop: ${defaultIfEmptyString(expr ?? '', 'TBD')}`, 'inline', module, undefined, undefined, flowModuleStates?.[module.id]?.iteration_total
201
+ flowModuleToNode(getParentIds(parent), module, undefined, flowModuleStates?.[module.id]?.iteration_total
203
202
  ? 'Iteration ' + flowModuleStates?.[module.id]?.iteration_total
204
- : '')
203
+ : '', loopDepth, false, false, modules)
205
204
  ]
206
205
  };
207
- modules.forEach((module) => {
208
- const item = getConvertedFlowModule(module, loop.items, undefined, true);
206
+ const innerModules = module.value.modules;
207
+ loop.items.push(createVirtualNode(getParentIds(loop.items), `Do one iteration`, innerModules, 'after', undefined, 1000, loopDepth + 1, 0, true, undefined, undefined));
208
+ innerModules.forEach((module, i) => {
209
+ const item = getConvertedFlowModule(module, loop.items, undefined, loopDepth + 1, i + 1 == innerModules?.length, innerModules);
209
210
  item && loop.items.push(item);
210
211
  });
211
- loop.items.push(createVirtualNode(getParentIds(loop.items), `Collect iterations' results of For Loop ${module.id ?? ''}`, undefined, 1000));
212
+ loop.items.push(createVirtualNode(getParentIds(loop.items), `Collect result of each iteration`, modules, 'after', undefined, 1000, loopDepth, modules.findIndex((m) => m.id == module.id) + 1, true, undefined, module.id));
212
213
  return loop;
213
214
  }
214
- function flowModuleToBranch(module, branches, edgesLabel, parent = undefined, insideLoop = false) {
215
- const branch = {
216
- type: 'branch',
217
- node: flowModuleToNode(getParentIds(parent), module.id, module.summary || module.value.type == 'branchall'
218
- ? 'Run all branches'
219
- : 'Run one branch given predicate', 'inline', module, undefined, undefined, undefined, insideLoop),
220
- items: []
221
- };
222
- const branchParent = [numberToChars(branch.node.id)];
215
+ function flowModuleToBranch(module, modules, branches, edgesLabel, parent = undefined, loopDepth, branchall) {
216
+ const node = flowModuleToNode(getParentIds(parent), module, undefined, undefined, loopDepth, false, true, modules);
217
+ const bitems = [];
218
+ const branchParent = [node.id];
223
219
  if (branches.length == 0) {
224
- branch.items.push([createVirtualNode(branchParent, 'No branches')]);
220
+ bitems.push([
221
+ createVirtualNode(branchParent, 'No branches', undefined, 'after', undefined, 0, loopDepth, 0, false, undefined)
222
+ ]);
225
223
  }
226
- branches.forEach(({ summary, modules }, i) => {
224
+ branches.forEach(({ summary, modules, removable }, i) => {
227
225
  const items = [];
228
- items.push(createVirtualNode(branchParent, summary, edgesLabel[i]));
226
+ items.push(createVirtualNode(branchParent, summary, modules, 'after', edgesLabel[i], undefined, loopDepth, 0, false, removable ? { module, index: i } : undefined));
229
227
  if (modules.length) {
230
228
  modules.forEach((module, j) => {
231
- const item = getConvertedFlowModule(module, items, undefined, insideLoop);
229
+ const item = getConvertedFlowModule(module, items, undefined, loopDepth, j + 1 == modules?.length, modules);
232
230
  item && items.push(item);
233
231
  });
234
232
  }
235
- items.length && branch.items.push(items);
233
+ items.length && bitems.push(items);
236
234
  });
237
- return branch;
235
+ return {
236
+ type: 'branch',
237
+ node,
238
+ nodeEnd: createVirtualNode(bitems.map((i) => getParentIds(i)).flat(), branchall ? 'Collect result of each branch' : 'Result of the chosen branch', modules, 'after', undefined, 0, loopDepth, modules.findIndex((m) => m.id == module.id) + 1, true, undefined, module.id),
239
+ items: bitems
240
+ };
238
241
  }
239
242
  function flattenNestedNodes(nestedNodes, nodes = []) {
240
243
  const array = nodes;
@@ -250,29 +253,40 @@ function flattenNestedNodes(nestedNodes, nodes = []) {
250
253
  node.items.forEach((item) => {
251
254
  flattenNestedNodes(item, array);
252
255
  });
256
+ array.push(node.nodeEnd);
253
257
  }
254
258
  });
255
259
  return array;
256
260
  }
257
261
  function layoutNodes(nodes) {
258
- // console.log('layoutNodes', nodes)
259
- const stratify = dagStratify().id(({ id }) => numberToChars(id));
262
+ const stratify = dagStratify().id(({ id }) => id);
260
263
  const dag = stratify(nodes);
261
- const layout = sugiyama()
262
- .decross(decrossOpt())
263
- .coord(coordCenter())
264
- .nodeSize(() => [NODE.width + NODE.gap.horizontal, NODE.height + NODE.gap.vertical]);
265
- const boxSize = layout(dag);
264
+ let boxSize;
265
+ try {
266
+ const layout = sugiyama()
267
+ .decross(decrossOpt())
268
+ .coord(coordCenter())
269
+ .nodeSize(() => [NODE.width + NODE.gap.horizontal, NODE.height + NODE.gap.vertical]);
270
+ boxSize = layout(dag);
271
+ }
272
+ catch {
273
+ const layout = sugiyama()
274
+ .coord(coordCenter())
275
+ .nodeSize(() => [NODE.width + NODE.gap.horizontal, NODE.height + NODE.gap.vertical]);
276
+ boxSize = layout(dag);
277
+ }
266
278
  return {
267
279
  nodes: dag.descendants().map((des) => ({
268
280
  ...des.data,
269
281
  id: des.data.id,
270
282
  position: {
271
- x: des.x ? des.x + (width - boxSize.width - NODE.width) / 2 : 0,
283
+ x: des.x
284
+ ? des.data.loopDepth * 50 + des.x + width / 2 - boxSize.width / 2 - NODE.width / 2
285
+ : 0,
272
286
  y: des.y || 0
273
287
  }
274
288
  })),
275
- height: Math.max(boxSize.height + NODE.height, minHeight)
289
+ height: boxSize.height + NODE.height
276
290
  };
277
291
  }
278
292
  function createEdges(nodes) {
@@ -280,110 +294,156 @@ function createEdges(nodes) {
280
294
  nodes.forEach((node) => {
281
295
  node.parentIds.forEach((pid, i) => {
282
296
  // skip virtual nodes such as collect result
283
- if (errorHandlers[pid] && node.id < 900 && nodes.find((x) => x.id == errorHandlers[pid])) {
297
+ if (false &&
298
+ errorHandlers[pid] &&
299
+ parseInt(node.id) < 900 &&
300
+ nodes.find((x) => x.id == errorHandlers[pid])) {
284
301
  edges.push({
285
302
  id: `e-${pid}-${node.id}`,
286
- source: charsToNumber(pid),
303
+ source: pid,
287
304
  target: errorHandlers[pid],
288
305
  labelBgColor: 'white',
289
- arrow: true,
306
+ arrow: false,
290
307
  animate: false,
291
- noHandle: false,
292
- label: node.edgeLabel
293
- // type: 'smoothstep'
308
+ noHandle: true,
309
+ label: node.edgeLabel,
310
+ type: 'bezier'
294
311
  });
295
312
  edges.push({
296
313
  id: `e-${pid}-${node.id}`,
297
314
  source: errorHandlers[pid],
298
315
  target: node.id,
299
316
  labelBgColor: 'white',
300
- arrow: true,
317
+ arrow: false,
301
318
  animate: false,
302
- noHandle: false,
303
- label: node.edgeLabel
304
- // type: 'smoothstep'
319
+ noHandle: true,
320
+ label: node.edgeLabel,
321
+ type: 'bezier'
305
322
  });
306
323
  }
307
324
  else {
308
325
  edges.push({
309
326
  id: `e-${pid}-${node.id}`,
310
- source: charsToNumber(pid),
327
+ source: pid,
311
328
  target: node.id,
312
329
  labelBgColor: 'white',
313
- arrow: true,
330
+ arrow: false,
314
331
  animate: false,
315
- noHandle: false,
316
- label: node.edgeLabel
317
- // type: 'smoothstep'
332
+ noHandle: true,
333
+ label: node.edgeLabel,
334
+ edgeColor: '#999',
335
+ type: 'bezier'
318
336
  });
319
337
  }
320
338
  });
321
339
  });
322
340
  return edges;
323
341
  }
324
- function createVirtualNode(parentIds, label, edgeLabel, offset) {
325
- const id = -idGenerator.next().value - 1 + (offset ?? 0);
342
+ function createVirtualNode(parentIds, label, modules, whereInsert, edgeLabel, offset, loopDepth, index, selectable, deleteBranch, mid = undefined) {
343
+ const id = -idGenerator.next().value - 2 + (offset ?? 0);
326
344
  return {
327
- id,
345
+ type: 'node',
346
+ id: id.toString(),
328
347
  position: { x: -1, y: -1 },
329
348
  data: {
330
- html: `
331
- <div class="w-full max-h-full text-center ellipsize-multi-line text-2xs [-webkit-line-clamp:2] px-1">
332
- ${label}
333
- </div>
334
- `
349
+ // html: `
350
+ // <div class="w-full max-h-full text-center ellipsize-multi-line text-2xs [-webkit-line-clamp:2] px-1">
351
+ // ${label}
352
+ // </div>
353
+ // `
354
+ custom: {
355
+ component: VirtualItem,
356
+ props: {
357
+ label,
358
+ insertable,
359
+ modules,
360
+ bgColor: label == 'Result' ? getResultColor() : '#dfe6ee',
361
+ selected: $selectedId == label,
362
+ index,
363
+ selectable,
364
+ whereInsert,
365
+ deleteBranch,
366
+ id: mid,
367
+ moving
368
+ },
369
+ cb: (e, detail) => {
370
+ if (e == 'insert') {
371
+ dispatch('insert', detail);
372
+ }
373
+ else if (e == 'select') {
374
+ $selectedId = detail;
375
+ dispatch('select', detail);
376
+ }
377
+ else if (e == 'deleteBranch') {
378
+ $selectedId = label;
379
+ dispatch('deleteBranch', detail);
380
+ }
381
+ }
382
+ }
335
383
  },
336
384
  width: NODE.width,
337
385
  height: NODE.height,
338
- borderColor: selectedNode == label ? 'black' : '#999',
339
- bgColor: label == 'Result' ? getResultColor() : selectedNode == label ? '#f5f5f5' : '#d4e4ff',
386
+ borderColor: $selectedId == label ? 'black' : '#999',
387
+ sourcePosition: 'bottom',
388
+ targetPosition: 'top',
340
389
  parentIds,
341
- clickCallback: (node) => {
342
- if (!notSelectable) {
343
- selectedNode = label;
344
- }
345
- dispatch('click', label);
346
- },
347
- edgeLabel
390
+ edgeLabel,
391
+ loopDepth
348
392
  };
349
393
  }
350
394
  function createErrorHandler(mod, parent_module) {
351
- const nId = -idGenerator.next().value - 1 + 1100;
395
+ const nId = (-idGenerator.next().value - 1 + 1100).toString();
352
396
  parent_module && (errorHandlers[parent_module] = nId);
397
+ let label = 'Error handler';
353
398
  return {
399
+ type: 'node',
354
400
  id: nId,
355
401
  position: { x: -1, y: -1 },
356
402
  data: {
357
- html: `
358
- <div class="w-full flex justify-between items-center px-1">
359
- <div class="text-left ellipsize text-2xs truncate">
360
- Error Handler
361
- </div>
362
- <div class="flex items-center">
363
- <span class="center-center font-semibold bg-indigo-100 text-indigo-800 rounded px-1 pb-[2px] ml-[2px]">
364
- ${mod.id}
365
- </span>
366
- </div>
367
- </div>
368
- `
403
+ custom: {
404
+ component: VirtualItem,
405
+ props: {
406
+ label,
407
+ insertable: false,
408
+ modules: undefined,
409
+ bgColor: getStateColor(flowModuleStates?.[mod.id]?.type),
410
+ selected: $selectedId == mod.id,
411
+ index: 0,
412
+ selectable: true,
413
+ id: mod.id
414
+ },
415
+ cb: (e, detail) => {
416
+ console.log(detail);
417
+ if (e == 'select') {
418
+ $selectedId = detail;
419
+ dispatch('select', detail);
420
+ }
421
+ }
422
+ }
369
423
  },
370
424
  width: NODE.width,
371
425
  height: NODE.height,
372
- bgColor: selectedNode == mod.id ? '#f5f5f5' : getStateColor(flowModuleStates?.[mod.id]?.type),
373
- borderColor: selectedNode == mod.id ? 'black' : '#999',
426
+ sourcePosition: 'bottom',
427
+ targetPosition: 'top',
374
428
  parentIds: parent_module ? [parent_module] : [],
375
- clickCallback: (node) => {
376
- if (!notSelectable) {
377
- selectedNode = mod.id;
378
- }
379
- dispatch('click', mod);
380
- }
429
+ loopDepth: 0
381
430
  };
382
431
  }
383
432
  </script>
384
433
 
385
434
  <div bind:clientWidth={width} class="w-full h-full overflow-hidden relative">
386
435
  {#if width && height}
387
- <Svelvet {nodes} {width} {edges} {height} bgColor="rgb(249 250 251)" />
436
+ <Svelvet
437
+ highlightEdges={false}
438
+ locked
439
+ {initialZoom}
440
+ {nodes}
441
+ {width}
442
+ {edges}
443
+ {height}
444
+ {scroll}
445
+ background={false}
446
+ bgColor="rgb(249 250 251)"
447
+ />
388
448
  {/if}
389
449
  </div>
@@ -1,17 +1,30 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
2
  import { type FlowModule } from '../../gen';
3
3
  import { type GraphModuleState } from '.';
4
+ import { type Writable } from 'svelte/store';
4
5
  declare const __propDef: {
5
6
  props: {
6
7
  success?: boolean | undefined;
7
8
  modules?: FlowModule[] | undefined;
8
9
  failureModule?: FlowModule | undefined;
9
10
  minHeight?: number | undefined;
11
+ maxHeight?: number | undefined;
10
12
  notSelectable?: boolean | undefined;
11
13
  flowModuleStates?: Record<string, GraphModuleState> | undefined;
14
+ rebuildOnChange?: any;
15
+ selectedId?: Writable<string | undefined> | undefined;
16
+ initialZoom?: number | undefined;
17
+ insertable?: boolean | undefined;
18
+ moving?: string | undefined;
19
+ scroll?: boolean | undefined;
12
20
  };
13
21
  events: {
14
- click: CustomEvent<any>;
22
+ delete: CustomEvent<any>;
23
+ select: CustomEvent<any>;
24
+ insert: CustomEvent<any>;
25
+ newBranch: CustomEvent<any>;
26
+ move: CustomEvent<any>;
27
+ deleteBranch: CustomEvent<any>;
15
28
  } & {
16
29
  [evt: string]: CustomEvent<any>;
17
30
  };
@@ -1,44 +1,12 @@
1
1
  import type { FlowStatusModule } from "../../gen";
2
- export interface SvelvetNode<T = any> {
3
- id: number;
4
- position: {
5
- x: number;
6
- y: number;
7
- };
8
- data: T;
9
- width: number;
10
- height: number;
11
- bgColor?: string;
12
- fontSize?: number;
13
- borderColor?: string;
14
- parentNode?: number;
15
- childNodes?: number[];
16
- borderRadius?: number;
17
- textColor?: string;
18
- clickCallback?: Function;
19
- image?: boolean;
20
- src?: string;
21
- sourcePosition?: 'left' | 'right' | 'top' | 'bottom';
22
- targetPosition?: 'left' | 'right' | 'top' | 'bottom';
23
- }
24
- export interface Edge {
25
- id: string;
26
- source: number;
27
- target: number;
28
- label?: string;
29
- labelBgColor?: string;
30
- labelTextColor?: string;
31
- edgeColor?: string;
32
- type?: string;
33
- animate?: boolean;
34
- noHandle?: boolean;
35
- arrow?: boolean;
36
- }
2
+ import type { UserNodeType } from "./svelvet/types";
37
3
  export type ModuleHost = 'workspace' | 'inline' | 'hub';
38
- export type Node = SvelvetNode & {
4
+ export type Node = UserNodeType & {
39
5
  parentIds: string[];
40
6
  edgeLabel?: string;
41
7
  host?: ModuleHost;
8
+ type: 'node';
9
+ loopDepth: number;
42
10
  };
43
11
  export type Loop = {
44
12
  type: 'loop';
@@ -46,12 +14,14 @@ export type Loop = {
46
14
  };
47
15
  export type Branch = {
48
16
  node: Node;
17
+ nodeEnd: Node;
49
18
  type: 'branch';
50
19
  items: NestedNodes[];
51
20
  };
52
21
  export type GraphItem = Node | Loop | Branch;
53
22
  export type GraphModuleState = {
54
23
  type: FlowStatusModule.type;
24
+ args: any;
55
25
  logs?: string;
56
26
  result?: any;
57
27
  scheduled_for?: string;