windmill-components 1.542.5 → 1.555.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 (399) hide show
  1. package/package/aiStore.d.ts +13 -0
  2. package/package/aiStore.js +70 -0
  3. package/package/common.d.ts +6 -2
  4. package/package/components/AIAgentLogViewer.svelte +1 -1
  5. package/package/components/AIProviderPicker.svelte +25 -8
  6. package/package/components/ArgEnum.svelte +17 -7
  7. package/package/components/ArgEnum.svelte.d.ts +1 -0
  8. package/package/components/ArgInput.svelte +257 -188
  9. package/package/components/ArgInput.svelte.d.ts +4 -1
  10. package/package/components/ArrayTypeNarrowing.svelte +38 -32
  11. package/package/components/AutoscalingEvents.svelte +21 -5
  12. package/package/components/AutoscalingEvents.svelte.d.ts +4 -18
  13. package/package/components/ChannelSelector.svelte +92 -18
  14. package/package/components/ChannelSelector.svelte.d.ts +2 -0
  15. package/package/components/ConnectionSection.svelte +12 -1
  16. package/package/components/DateTimeInput.svelte +8 -6
  17. package/package/components/DeployButton.svelte +1 -1
  18. package/package/components/Dev.svelte +24 -9
  19. package/package/components/Dev.svelte.d.ts +23 -1
  20. package/package/components/DisplayResult.svelte +36 -23
  21. package/package/components/DropdownV2.svelte +8 -2
  22. package/package/components/DropdownV2.svelte.d.ts +1 -0
  23. package/package/components/DynamicInput.svelte +10 -10
  24. package/package/components/EditableSchemaForm.svelte +28 -13
  25. package/package/components/Editor.svelte +2 -1
  26. package/package/components/EditorSettings.svelte +5 -5
  27. package/package/components/EditorSettings.svelte.d.ts +4 -18
  28. package/package/components/ErrorOrRecoveryHandler.svelte +14 -20
  29. package/package/components/FakeMonacoPlaceHolder.svelte +4 -2
  30. package/package/components/FakeMonacoPlaceHolder.svelte.d.ts +1 -0
  31. package/package/components/FieldHeader.svelte +5 -7
  32. package/package/components/FirstStepInputs.svelte +1 -1
  33. package/package/components/FlowHistoryJobPicker.svelte +3 -0
  34. package/package/components/FlowHistoryJobPicker.svelte.d.ts +1 -0
  35. package/package/components/FlowJobResult.svelte +5 -5
  36. package/package/components/FlowLogRow.svelte +2 -2
  37. package/package/components/FlowLogViewer.svelte +228 -57
  38. package/package/components/FlowLogViewer.svelte.d.ts +16 -5
  39. package/package/components/FlowLogViewerWrapper.svelte +56 -3
  40. package/package/components/FlowLogViewerWrapper.svelte.d.ts +4 -3
  41. package/package/components/FlowLoopIterationPreview.svelte +4 -4
  42. package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
  43. package/package/components/FlowMetadata.svelte +3 -4
  44. package/package/components/FlowMetadata.svelte.d.ts +4 -18
  45. package/package/components/FlowPlugConnect.svelte +8 -2
  46. package/package/components/FlowPlugConnect.svelte.d.ts +1 -0
  47. package/package/components/FlowPreviewContent.svelte +121 -94
  48. package/package/components/FlowPreviewContent.svelte.d.ts +3 -3
  49. package/package/components/FlowStatusViewer.svelte +63 -59
  50. package/package/components/FlowStatusViewer.svelte.d.ts +2 -2
  51. package/package/components/FlowStatusViewerInner.svelte +186 -94
  52. package/package/components/FlowStatusViewerInner.svelte.d.ts +10 -3
  53. package/package/components/FlowTimeline.svelte +110 -131
  54. package/package/components/FlowTimeline.svelte.d.ts +13 -4
  55. package/package/components/FlowTimelineBar.svelte +227 -0
  56. package/package/components/FlowTimelineBar.svelte.d.ts +24 -0
  57. package/package/components/FolderEditor.svelte +6 -7
  58. package/package/components/GroupEditor.svelte +148 -141
  59. package/package/components/GroupEditor.svelte.d.ts +5 -4
  60. package/package/components/InputTransformForm.svelte +193 -71
  61. package/package/components/InputTransformForm.svelte.d.ts +3 -0
  62. package/package/components/InputTransformSchemaForm.svelte +10 -5
  63. package/package/components/InputTransformSchemaForm.svelte.d.ts +2 -0
  64. package/package/components/InstanceSetting.svelte +34 -51
  65. package/package/components/InstanceSettings.svelte +12 -21
  66. package/package/components/JobArgs.svelte +15 -16
  67. package/package/components/JobArgs.svelte.d.ts +4 -18
  68. package/package/components/JobLoader.svelte +23 -42
  69. package/package/components/JobLoader.svelte.d.ts +2 -0
  70. package/package/components/JobStatus.svelte +1 -1
  71. package/package/components/JobStatus.svelte.d.ts +4 -18
  72. package/package/components/JsonEditor.svelte +18 -9
  73. package/package/components/JsonEditor.svelte.d.ts +1 -1
  74. package/package/components/JsonInputs.svelte +1 -1
  75. package/package/components/ModulePreviewForm.svelte +23 -19
  76. package/package/components/ModulePreviewResultViewer.svelte +1 -7
  77. package/package/components/NextcloudSetting.svelte +6 -1
  78. package/package/components/NumberTypeNarrowing.svelte +32 -16
  79. package/package/components/ObjectStoreConfigSettings.svelte +27 -19
  80. package/package/components/Password.svelte +7 -11
  81. package/package/components/Password.svelte.d.ts +5 -20
  82. package/package/components/PasswordArgInput.svelte +35 -15
  83. package/package/components/PasswordArgInput.svelte.d.ts +4 -18
  84. package/package/components/Path.svelte +2 -8
  85. package/package/components/Path.svelte.d.ts +1 -1
  86. package/package/components/QueuePosition.svelte +6 -2
  87. package/package/components/ResourceEditor.svelte +3 -10
  88. package/package/components/ResourcePicker.svelte +85 -72
  89. package/package/components/ResourcePicker.svelte.d.ts +2 -0
  90. package/package/components/RunChart.svelte +1 -1
  91. package/package/components/RunForm.svelte +16 -21
  92. package/package/components/S3ArrayHelperButton.svelte +18 -0
  93. package/package/components/S3ArrayHelperButton.svelte.d.ts +9 -0
  94. package/package/components/S3FilePicker.svelte +1 -1
  95. package/package/components/SchemaForm.svelte +18 -10
  96. package/package/components/SchemaForm.svelte.d.ts +7 -1
  97. package/package/components/SchemaFormWithArgPicker.svelte +1 -1
  98. package/package/components/ScriptBuilder.svelte +2 -2
  99. package/package/components/ScriptEditor.svelte +9 -9
  100. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  101. package/package/components/ShareModal.svelte +4 -4
  102. package/package/components/SimpleEditor.svelte +6 -2
  103. package/package/components/SimpleEditor.svelte.d.ts +3 -0
  104. package/package/components/StringTypeNarrowing.svelte +44 -25
  105. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  106. package/package/components/SuperadminSettingsInner.svelte +3 -3
  107. package/package/components/TeamSelector.svelte +83 -37
  108. package/package/components/TeamSelector.svelte.d.ts +0 -1
  109. package/package/components/TemplateEditor.svelte +18 -9
  110. package/package/components/Toast.svelte +2 -7
  111. package/package/components/Toast.svelte.d.ts +4 -18
  112. package/package/components/Toggle.svelte +17 -7
  113. package/package/components/ToggleHubWorkspaceQuick.svelte +3 -3
  114. package/package/components/WorkerGroup.svelte +2 -14
  115. package/package/components/apps/components/buttons/AppButton.svelte +66 -38
  116. package/package/components/apps/components/display/dbtable/InsertRow.svelte +32 -2
  117. package/package/components/apps/components/display/dbtable/queries/insert.js +2 -1
  118. package/package/components/apps/components/display/dbtable/utils.d.ts +8 -8
  119. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +13 -4
  120. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +2 -2
  121. package/package/components/apps/components/display/table/utils.js +14 -4
  122. package/package/components/apps/components/helpers/RefreshButton.svelte +5 -1
  123. package/package/components/apps/components/helpers/RunnableComponent.svelte +3 -5
  124. package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
  125. package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +2 -1
  126. package/package/components/apps/components/layout/AppTabs.svelte +116 -71
  127. package/package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -0
  128. package/package/components/apps/editor/AppEditorHeader.svelte +33 -271
  129. package/package/components/apps/editor/AppEditorHeaderDeploy.svelte +233 -0
  130. package/package/components/apps/editor/AppEditorHeaderDeploy.svelte.d.ts +18 -0
  131. package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte +47 -0
  132. package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte.d.ts +8 -0
  133. package/package/components/apps/editor/GridEditor.svelte +7 -2
  134. package/package/components/apps/editor/appDeploy.svelte.d.ts +1 -0
  135. package/package/components/apps/editor/appDeploy.svelte.js +6 -0
  136. package/package/components/apps/editor/appUtils.d.ts +1 -0
  137. package/package/components/apps/editor/appUtils.js +30 -1
  138. package/package/components/apps/editor/component/ComponentInner.svelte +1 -0
  139. package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -1
  140. package/package/components/apps/editor/component/components.d.ts +19 -4
  141. package/package/components/apps/editor/component/components.js +23 -3
  142. package/package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +1 -1
  143. package/package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +6 -4
  144. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  145. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  146. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  147. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +2 -0
  148. package/package/components/apps/editor/settingsPanel/GridTab.svelte +19 -1
  149. package/package/components/apps/editor/settingsPanel/GridTab.svelte.d.ts +3 -1
  150. package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte +52 -0
  151. package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte.d.ts +9 -0
  152. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +58 -8
  153. package/package/components/auditLogs/AuditLogsFilters.svelte +7 -1
  154. package/package/components/auditLogs/AuditLogsTable.svelte +17 -7
  155. package/package/components/auditLogs/AuditLogsTable.svelte.d.ts +1 -0
  156. package/package/components/common/CloseButton.svelte +2 -2
  157. package/package/components/common/CloseButton.svelte.d.ts +1 -0
  158. package/package/components/common/ResizeTransitionWrapper.svelte +39 -0
  159. package/package/components/common/ResizeTransitionWrapper.svelte.d.ts +12 -0
  160. package/package/components/common/badge/CountBadge.svelte +29 -0
  161. package/package/components/common/badge/CountBadge.svelte.d.ts +8 -0
  162. package/package/components/common/button/Button.svelte +1 -0
  163. package/package/components/common/button/ConnectionButton.svelte +6 -1
  164. package/package/components/common/button/ConnectionButton.svelte.d.ts +2 -0
  165. package/package/components/common/button/RefreshButton.svelte +8 -4
  166. package/package/components/common/button/RefreshButton.svelte.d.ts +3 -0
  167. package/package/components/common/calendarPicker/CalendarPicker.svelte +1 -1
  168. package/package/components/common/fileInput/FileInput.svelte +7 -6
  169. package/package/components/common/fileUpload/S3ArgInput.svelte +11 -9
  170. package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +1 -0
  171. package/package/components/common/layout/List.svelte +3 -7
  172. package/package/components/common/layout/List.svelte.d.ts +7 -29
  173. package/package/components/common/popup/PopupV2.svelte +14 -25
  174. package/package/components/common/popup/PopupV2.svelte.d.ts +4 -2
  175. package/package/components/common/table/ScriptRow.svelte +22 -2
  176. package/package/components/common/toggleButton-v2/ToggleButton.svelte +17 -26
  177. package/package/components/common/toggleButton-v2/ToggleButton.svelte.d.ts +16 -30
  178. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +1 -1
  179. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +3 -3
  180. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
  181. package/package/components/copilot/CodeCompletionStatus.svelte +2 -1
  182. package/package/components/copilot/CronGen.svelte +1 -1
  183. package/package/components/copilot/FlowCopilotInputsModal.svelte +26 -23
  184. package/package/components/copilot/FlowInlineScriptAIButton.svelte +2 -2
  185. package/package/components/copilot/IteratorGen.svelte +30 -25
  186. package/package/components/copilot/IteratorGen.svelte.d.ts +8 -7
  187. package/package/components/copilot/MetadataGen.svelte +4 -3
  188. package/package/components/copilot/PredicateGen.svelte +15 -12
  189. package/package/components/copilot/PredicateGen.svelte.d.ts +5 -4
  190. package/package/components/copilot/RegexGen.svelte +1 -1
  191. package/package/components/copilot/ScriptFix.svelte +1 -1
  192. package/package/components/copilot/ScriptGen.svelte +2 -1
  193. package/package/components/copilot/StepGenQuick.svelte +15 -16
  194. package/package/components/copilot/StepGenQuick.svelte.d.ts +14 -13
  195. package/package/components/copilot/StepInputGen.svelte +50 -36
  196. package/package/components/copilot/StepInputGen.svelte.d.ts +13 -10
  197. package/package/components/copilot/StepInputsGen.svelte +18 -19
  198. package/package/components/copilot/StepInputsGen.svelte.d.ts +4 -18
  199. package/package/components/copilot/autocomplete/Autocompletor.js +1 -1
  200. package/package/components/copilot/autocomplete/request.js +1 -1
  201. package/package/components/copilot/chat/AIChat.svelte +2 -1
  202. package/package/components/copilot/chat/AIChatManager.svelte.js +5 -3
  203. package/package/components/copilot/chat/AiChatLayout.svelte +2 -1
  204. package/package/components/copilot/chat/ProviderModelSelector.svelte +11 -10
  205. package/package/components/copilot/chat/ProviderModelSelector.svelte.d.ts +2 -17
  206. package/package/components/copilot/chat/flow/FlowAIButton.svelte +1 -1
  207. package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -2
  208. package/package/components/copilot/chat/script/core.d.ts +4 -4
  209. package/package/components/copilot/chat/script/core.js +95 -35
  210. package/package/components/copilot/chat/shared.js +2 -1
  211. package/package/components/copilot/lib.d.ts +1 -0
  212. package/package/components/copilot/lib.js +7 -3
  213. package/package/components/custom_ui.d.ts +1 -0
  214. package/package/components/details/DetailPageLayout.svelte +3 -2
  215. package/package/components/details/DetailPageLayout.svelte.d.ts +1 -0
  216. package/package/components/flows/CreateActionsFlow.svelte +1 -1
  217. package/package/components/flows/FlowChatInterface.svelte +404 -0
  218. package/package/components/flows/FlowChatInterface.svelte.d.ts +19 -0
  219. package/package/components/flows/FlowChatMessage.svelte +41 -0
  220. package/package/components/flows/FlowChatMessage.svelte.d.ts +9 -0
  221. package/package/components/flows/FlowConversationsSidebar.svelte +213 -0
  222. package/package/components/flows/FlowConversationsSidebar.svelte.d.ts +15 -0
  223. package/package/components/flows/FlowEditor.svelte.d.ts +1 -1
  224. package/package/components/flows/FlowModuleIcon.svelte +10 -10
  225. package/package/components/flows/FlowProgressBar.svelte +16 -16
  226. package/package/components/flows/FlowProgressBar.svelte.d.ts +7 -22
  227. package/package/components/flows/common/FlowCard.svelte +10 -2
  228. package/package/components/flows/common/FlowCard.svelte.d.ts +1 -0
  229. package/package/components/flows/common/FlowCardHeader.svelte +2 -1
  230. package/package/components/flows/common/FlowCardHeader.svelte.d.ts +1 -0
  231. package/package/components/flows/content/DynamicInputHelpBox.svelte +4 -4
  232. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -1
  233. package/package/components/flows/content/FlowInput.svelte +381 -259
  234. package/package/components/flows/content/FlowInput.svelte.d.ts +1 -1
  235. package/package/components/flows/content/FlowInputsQuick.svelte +56 -34
  236. package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +3 -2
  237. package/package/components/flows/content/FlowModuleComponent.svelte +29 -11
  238. package/package/components/flows/flowInfers.d.ts +60 -0
  239. package/package/components/flows/flowInfers.js +72 -40
  240. package/package/components/flows/{flowStore.d.ts → flowStore.svelte.d.ts} +5 -1
  241. package/package/components/flows/header/FlowPreviewButtons.svelte +1 -1
  242. package/package/components/flows/map/FlowErrorHandlerItem.svelte +4 -2
  243. package/package/components/flows/map/FlowErrorHandlerItem.svelte.d.ts +1 -0
  244. package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
  245. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -1
  246. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -1
  247. package/package/components/flows/map/FlowModuleSchemaMap.svelte +5 -2
  248. package/package/components/flows/map/FlowStickyNode.svelte +2 -2
  249. package/package/components/flows/map/FlowStickyNode.svelte.d.ts +1 -0
  250. package/package/components/flows/map/InsertModuleButton.svelte +8 -15
  251. package/package/components/flows/map/InsertModuleButton.svelte.d.ts +4 -4
  252. package/package/components/flows/map/InsertModuleInner.svelte +19 -20
  253. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +2 -2
  254. package/package/components/flows/map/MapItem.svelte +1 -1
  255. package/package/components/flows/map/VirtualItem.svelte +1 -2
  256. package/package/components/flows/pickers/PickHubScriptQuick.svelte +43 -52
  257. package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +2 -1
  258. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +41 -26
  259. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte.d.ts +1 -0
  260. package/package/components/flows/propPicker/OutputPicker.svelte +2 -0
  261. package/package/components/flows/propPicker/PropPickerWrapper.svelte +1 -15
  262. package/package/components/git_sync/DetectionFlow.svelte +33 -44
  263. package/package/components/git_sync/DetectionFlow.svelte.d.ts +1 -0
  264. package/package/components/git_sync/GitSyncContext.svelte.d.ts +22 -0
  265. package/package/components/git_sync/GitSyncContext.svelte.js +145 -5
  266. package/package/components/git_sync/GitSyncModeDisplay.svelte +14 -0
  267. package/package/components/git_sync/GitSyncModeDisplay.svelte.d.ts +9 -0
  268. package/package/components/git_sync/GitSyncRepositoryCard.svelte +365 -253
  269. package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +10 -1
  270. package/package/components/git_sync/GitSyncSection.svelte +134 -14
  271. package/package/components/git_sync/PullWorkspaceModal.svelte +24 -32
  272. package/package/components/git_sync/PushWorkspaceModal.svelte +24 -32
  273. package/package/components/graph/FlowGraphV2.svelte +2 -1
  274. package/package/components/graph/FlowGraphV2.svelte.d.ts +1 -0
  275. package/package/components/graph/graphBuilder.svelte.d.ts +2 -0
  276. package/package/components/graph/graphBuilder.svelte.js +1 -0
  277. package/package/components/graph/model.d.ts +5 -5
  278. package/package/components/graph/renderers/edges/BaseEdge.svelte +1 -0
  279. package/package/components/graph/renderers/edges/EmptyEdge.svelte +3 -10
  280. package/package/components/graph/renderers/edges/EmptyEdge.svelte.d.ts +4 -18
  281. package/package/components/graph/renderers/nodes/AIToolNode.svelte +2 -2
  282. package/package/components/graph/renderers/nodes/InputNode.svelte +13 -2
  283. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +5 -10
  284. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +2 -27
  285. package/package/components/home/ItemsList.svelte +1 -1
  286. package/package/components/instanceSettings.js +17 -0
  287. package/package/components/jobs/JobProgressBar.svelte +27 -21
  288. package/package/components/jobs/JobProgressBar.svelte.d.ts +9 -24
  289. package/package/components/meltComponents/MenuSingleItem.svelte +3 -8
  290. package/package/components/meltComponents/MenuSingleItem.svelte.d.ts +0 -3
  291. package/package/components/meltComponents/Popover.svelte +3 -2
  292. package/package/components/meltComponents/Popover.svelte.d.ts +1 -0
  293. package/package/components/meltComponents/Tooltip.svelte +1 -1
  294. package/package/components/progressBar/ProgressBar.svelte +39 -53
  295. package/package/components/progressBar/ProgressBar.svelte.d.ts +11 -26
  296. package/package/components/raw_apps/FileEditorIcon.svelte +1 -1
  297. package/package/components/raw_apps/FileEditorIcon.svelte.d.ts +4 -18
  298. package/package/components/raw_apps/RawAppBackgroundRunner.svelte +2 -8
  299. package/package/components/raw_apps/RawAppBackgroundRunner.svelte.d.ts +4 -18
  300. package/package/components/raw_apps/RawAppEditor.svelte +6 -7
  301. package/package/components/raw_apps/RawAppEditorHeader.svelte +48 -301
  302. package/package/components/raw_apps/RawAppEditorHeader.svelte.d.ts +18 -19
  303. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +10 -16
  304. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte.d.ts +13 -13
  305. package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte +8 -11
  306. package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte.d.ts +1 -2
  307. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +0 -1
  308. package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte +7 -13
  309. package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte.d.ts +8 -8
  310. package/package/components/raw_apps/RawAppPreview.svelte +3 -7
  311. package/package/components/raw_apps/RawAppPreview.svelte.d.ts +5 -19
  312. package/package/components/raw_apps/utils.d.ts +1 -1
  313. package/package/components/raw_apps/utils.js +3 -3
  314. package/package/components/runs/JobsLoader.svelte +1 -1
  315. package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
  316. package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -1
  317. package/package/components/runs/RunOption.svelte +2 -2
  318. package/package/components/runs/RunsFilter.svelte +15 -12
  319. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  320. package/package/components/schema/AddPropertyV2.svelte +7 -4
  321. package/package/components/schema/EditableSchemaDrawer.svelte +19 -18
  322. package/package/components/schema/FlowPropertyEditor.svelte +9 -2
  323. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  324. package/package/components/schema/PropertyEditor.svelte +22 -26
  325. package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
  326. package/package/components/schema/SchemaFormDND.svelte +3 -2
  327. package/package/components/schema/SchemaFormDND.svelte.d.ts +1 -0
  328. package/package/components/select/DraggableTags.svelte +2 -2
  329. package/package/components/select/MultiSelect.svelte +15 -9
  330. package/package/components/select/MultiSelect.svelte.d.ts +1 -0
  331. package/package/components/select/Select.svelte +12 -5
  332. package/package/components/select/Select.svelte.d.ts +11 -0
  333. package/package/components/select/SelectDropdown.svelte +98 -46
  334. package/package/components/select/SelectDropdown.svelte.d.ts +10 -0
  335. package/package/components/select/utils.svelte.js +2 -0
  336. package/package/components/settings/CreateToken.svelte +76 -49
  337. package/package/components/settings/WorkspaceUserSettings.svelte +111 -17
  338. package/package/components/sidebar/CriticalAlertTable.svelte +2 -1
  339. package/package/components/sidebar/Linkify.svelte +14 -0
  340. package/package/components/sidebar/Linkify.svelte.d.ts +5 -0
  341. package/package/components/sidebar/MenuLink.svelte +2 -1
  342. package/package/components/sidebar/MenuLink.svelte.d.ts +1 -0
  343. package/package/components/sidebar/SidebarContent.svelte +27 -27
  344. package/package/components/sidebar/WorkspaceMenu.svelte +8 -3
  345. package/package/components/table/Cell.svelte +7 -14
  346. package/package/components/table/Cell.svelte.d.ts +13 -35
  347. package/package/components/table/tableUtils.js +1 -1
  348. package/package/components/text_input/TextInput.svelte +30 -0
  349. package/package/components/text_input/TextInput.svelte.d.ts +17 -0
  350. package/package/components/triggers/AddTriggersButton.svelte +1 -0
  351. package/package/components/triggers/TriggersEditor.svelte +11 -1
  352. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
  353. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
  354. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +28 -5
  355. package/package/components/triggers/gcp/utils.js +1 -0
  356. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +1 -0
  357. package/package/components/triggers/triggers.svelte.d.ts +1 -1
  358. package/package/components/triggers/triggers.svelte.js +8 -4
  359. package/package/components/triggers/webhook/WebhooksConfigSection.svelte +143 -63
  360. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +22 -0
  361. package/package/components/triggers/websocket/utils.js +1 -0
  362. package/package/components/tutorials/FlowBuilderTutorialErrorHandler.svelte +2 -2
  363. package/package/components/tutorials/FlowBuilderTutorialForLoop.svelte +3 -0
  364. package/package/components/tutorials/FlowBuilderTutorialSimpleFlow.svelte +49 -17
  365. package/package/components/tutorials/Tutorial.svelte +9 -0
  366. package/package/components/tutorials/Tutorial.svelte.d.ts +1 -0
  367. package/package/components/tutorials/app/AppTutorial.svelte +41 -57
  368. package/package/components/tutorials/app/BackgroundRunnablesTutorial.svelte +3 -5
  369. package/package/components/tutorials/app/ConnectionTutorial.svelte +2 -2
  370. package/package/components/tutorials/utils.js +2 -154
  371. package/package/components/vscode.js +16 -8
  372. package/package/components/workspaceSettings/AISettings.svelte +12 -5
  373. package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
  374. package/package/components/workspaceSettings/CreateWorkspace.svelte +2 -2
  375. package/package/components/workspaceSettings/DucklakeSettings.svelte +64 -7
  376. package/package/components/workspaceSettings/ModelTokenLimits.svelte +165 -0
  377. package/package/components/workspaceSettings/ModelTokenLimits.svelte.d.ts +8 -0
  378. package/package/components/workspaceSettings/StorageSettings.svelte +147 -77
  379. package/package/editorUtils.d.ts +1 -1
  380. package/package/gen/core/OpenAPI.js +1 -1
  381. package/package/gen/schemas.gen.d.ts +223 -17
  382. package/package/gen/schemas.gen.js +226 -17
  383. package/package/gen/services.gen.d.ts +221 -27
  384. package/package/gen/services.gen.js +440 -48
  385. package/package/gen/types.gen.d.ts +1067 -218
  386. package/package/hubPaths.json +2 -1
  387. package/package/script_helpers.js +5 -5
  388. package/package/services/JobManager.js +14 -9
  389. package/package/stores.d.ts +4 -12
  390. package/package/stores.js +5 -65
  391. package/package/timelineCompute.svelte.d.ts +21 -0
  392. package/package/timelineCompute.svelte.js +113 -0
  393. package/package/toast.js +2 -1
  394. package/package/utils.d.ts +16 -8
  395. package/package/utils.js +65 -12
  396. package/package/workspace_settings.d.ts +13 -8
  397. package/package/workspace_settings.js +46 -11
  398. package/package.json +4 -4
  399. /package/package/components/flows/{flowStore.js → flowStore.svelte.js} +0 -0
@@ -1,104 +1,57 @@
1
- <script lang="ts">import { debounce, displayDate, msToSec, readFieldsRecursively } from '../utils';
2
- import { onDestroy, untrack } from 'svelte';
3
- import { getDbClockNow } from '../forLater';
1
+ <script lang="ts">import { displayDate, msToSec } from '../utils';
4
2
  import { Loader2 } from 'lucide-svelte';
5
3
  import TimelineBar from './TimelineBar.svelte';
6
4
  import WaitTimeWarning from './common/waitTimeWarning/WaitTimeWarning.svelte';
7
- let { selfWaitTime = undefined, aggregateWaitTime = undefined, flowModules, durationStatuses, flowDone = false, decreaseIterationFrom, buildSubflowKey, globalIterationBounds } = $props();
8
- let min = $state(undefined);
9
- let max = $state(undefined);
10
- let total = $state(undefined);
11
- let items = $state(undefined);
12
- let { debounced, clearDebounce } = debounce(() => computeItems(durationStatuses), 30);
5
+ import { TimelineCompute } from '../timelineCompute.svelte';
6
+ import { onMount, untrack } from 'svelte';
7
+ import OnChange from './common/OnChange.svelte';
8
+ import VirtualList from '@tutorlatin/svelte-tiny-virtual-list';
9
+ import FlowJobsMenu from './flows/map/FlowJobsMenu.svelte';
10
+ let { selfWaitTime = undefined, aggregateWaitTime = undefined, flowModules, durationStatuses, flowDone = false, localModuleStates, onSelectedIteration } = $props();
11
+ let timelineCompute = $state(undefined);
12
+ const flowModulesIds = $derived(flowModules.map(({ id }) => id));
13
+ // Initialize timeline compute when we have duration statuses
14
+ onMount(() => {
15
+ timelineCompute = new TimelineCompute(flowModulesIds, durationStatuses, flowDone);
16
+ return () => {
17
+ timelineCompute?.destroy();
18
+ };
19
+ });
13
20
  $effect(() => {
14
- readFieldsRecursively(durationStatuses);
15
- flowDone != undefined && durationStatuses && untrack(() => debounced());
21
+ flowDone;
22
+ untrack(() => {
23
+ timelineCompute?.setFlowDone(flowDone);
24
+ });
16
25
  });
26
+ // Derived timeline values
27
+ const min = $derived(timelineCompute?.min ?? undefined);
28
+ const max = $derived(timelineCompute?.max ?? undefined);
29
+ const total = $derived(timelineCompute?.total ?? undefined);
30
+ const items = $derived(timelineCompute?.items ?? undefined);
31
+ const now = $derived(timelineCompute?.now ?? Date.now());
17
32
  export function reset() {
18
- min = undefined;
19
- max = undefined;
20
- items = computeItems(durationStatuses);
33
+ timelineCompute?.reset();
21
34
  }
22
- function computeItems(durationStatuses) {
23
- let nmin = undefined;
24
- let nmax = undefined;
25
- let isStillRunning = false;
26
- let cnt = 0;
27
- let nitems = {};
28
- Object.entries(durationStatuses).forEach(([k, o]) => {
29
- Object.values(o.byJob).forEach((v) => {
30
- cnt++;
31
- if (v.started_at) {
32
- if (!nmin) {
33
- nmin = v.started_at;
34
- }
35
- else {
36
- nmin = Math.min(nmin, v.started_at);
37
- }
38
- }
39
- if (!flowDone && v.duration_ms == undefined) {
40
- isStillRunning = true;
41
- }
42
- if (!isStillRunning) {
43
- if (v.started_at && v.duration_ms != undefined) {
44
- let lmax = v.started_at + v.duration_ms;
45
- if (!nmax) {
46
- nmax = lmax;
47
- }
48
- else {
49
- nmax = Math.max(nmax, lmax);
50
- }
51
- }
52
- }
53
- });
54
- let arr = Object.entries(o.byJob).map(([k, v]) => ({ ...v, id: k }));
55
- arr.sort((x, y) => {
56
- if (!x.started_at) {
57
- return -1;
58
- }
59
- else if (!y.started_at) {
60
- return 1;
61
- }
62
- else {
63
- return x.started_at - y.started_at;
64
- }
65
- });
66
- nitems[k] = arr;
67
- });
68
- items = nitems;
69
- min = nmin;
70
- max = isStillRunning || (cnt < flowModules.length && !flowDone) ? undefined : nmax;
71
- if (max && min) {
72
- total = max - min;
73
- total = Math.max(total, 2000);
74
- }
75
- }
76
- let now = $state(getDbClockNow().getTime());
77
- let interval = setInterval((x) => {
78
- if (!max) {
79
- now = getDbClockNow().getTime();
80
- }
81
- if (min && (!max || total == undefined)) {
82
- total = max ? max - min : Math.max(now - min, 2000);
83
- }
84
- }, 30);
85
- onDestroy(() => {
86
- interval && clearInterval(interval);
87
- clearDebounce();
88
- });
35
+ const barHeight = 32;
89
36
  </script>
90
37
 
38
+ <OnChange
39
+ key={durationStatuses}
40
+ onChange={() => {
41
+ timelineCompute?.updateInputs(flowModulesIds, durationStatuses, flowDone)
42
+ }}
43
+ />
91
44
  {#if items}
92
45
  <div class="divide-y border-b">
93
46
  <div class="px-2 py-2 grid grid-cols-12 w-full"
94
47
  ><div></div>
95
48
  <div class="col-span-11 pt-1 px-2 flex text-2xs text-secondary justify-between"
96
49
  ><div>{min ? displayDate(new Date(min), true) : ''}</div>{#if max && min}<div
97
- class="hidden lg:block">{msToSec(max - min)}s</div
50
+ class="hidden lg:block">{msToSec(max - min, 1)}s</div
98
51
  >
99
52
  {/if}<div class="flex gap-1 items-center font-mono"
100
53
  >{max ? displayDate(new Date(max), true) : ''}{#if !max && min}{#if now}
101
- {msToSec(now - min, 3)}s
54
+ {msToSec(now - min, 1)}s
102
55
  {/if}<Loader2 size={14} class="animate-spin" />{/if}</div
103
56
  ></div
104
57
  >
@@ -126,61 +79,87 @@ onDestroy(() => {
126
79
  />
127
80
  </div>
128
81
  {/if}
129
- {#each Object.values(flowModules) as k (k)}
130
- {@const iterationFrom = globalIterationBounds[buildSubflowKey(k)]?.iteration_from ?? 0}
131
- <div class="overflow-auto max-h-60 shadow-inner dark:shadow-gray-700 relative">
132
- {#if iterationFrom > 0}
133
- <div class="w-full flex flex-row-reverse sticky top-0">
134
- <button
135
- class="!text-secondary underline mr-2 text-2xs text-right whitespace-nowrap"
136
- onclick={() => {
137
- decreaseIterationFrom?.(k, 20)
138
- }}
139
- >Viewing iterations {iterationFrom} to {globalIterationBounds[buildSubflowKey(k)]
140
- ?.iteration_total}. Load more
141
- </button>
142
- </div>
143
- {/if}
144
-
82
+ {#each flowModules as { id: k, type: typ } (k)}
83
+ {@const subItems = items?.[k]?.filter((x) => x.created_at && x.started_at)}
84
+ <div class="shadow-inner dark:shadow-gray-700 relative">
145
85
  <div class="px-2 py-2 grid grid-cols-6 w-full">
146
- <div class="truncate">{k.startsWith('subflow:') ? k.substring(8) : k}</div>
147
- <div class="col-span-5 flex min-h-6">
86
+ <div class="truncate"
87
+ >{k.startsWith('subflow:') ? k.substring(8) : k}
88
+ {#if localModuleStates[k]?.selectedForloop && (typ == 'forloopflow' || typ == 'whileloopflow')}
89
+ <span class="text-xs font-mono font-medium inline-flex items-center -my-2">
90
+ <button onclick={(e) => e.stopPropagation()}>
91
+ <FlowJobsMenu
92
+ moduleId={k}
93
+ id={k}
94
+ {onSelectedIteration}
95
+ flowJobsSuccess={localModuleStates[k]?.flow_jobs_success}
96
+ flowJobs={localModuleStates[k]?.flow_jobs}
97
+ selected={localModuleStates[k]?.selectedForloopIndex ?? 0}
98
+ selectedManually={localModuleStates[k]?.selectedForLoopSetManually ?? false}
99
+ showIcon={false}
100
+ />
101
+ </button>
102
+ </span>
103
+ {/if}
104
+ </div>
105
+ <div class="col-span-5 flex">
106
+ {#if subItems?.length > 1}
107
+ <div class="text-xs text-secondary absolute top-1 right-2">
108
+ {subItems?.length} jobs
109
+ </div>
110
+ {/if}
148
111
  {#if min && total}
149
- <div class="flex flex-col gap-2 w-full p-2 ml-4">
150
- {#each items?.[k] ?? [] as b}
151
- {@const waitingLen = b?.created_at
152
- ? b.started_at
153
- ? b.started_at - b?.created_at
154
- : b.duration_ms
155
- ? 0
156
- : now - b?.created_at
157
- : 0}
158
- <div class="flex w-full">
159
- <TimelineBar
160
- position="left"
161
- id={b?.id}
162
- {total}
163
- {min}
164
- gray
165
- started_at={b.created_at}
166
- len={waitingLen < 100 ? 0 : waitingLen - 100}
167
- running={b?.started_at == undefined}
168
- />
169
- {#if b.started_at}
112
+ <VirtualList
113
+ width="100%"
114
+ height={Math.min(400, (subItems?.length ?? 0) * barHeight)}
115
+ itemCount={subItems?.length ?? 0}
116
+ itemSize={barHeight}
117
+ getKey={(index) => subItems?.[index]?.id}
118
+ >
119
+ {#snippet item({ index, style })}
120
+ {@const b = subItems?.[index]}
121
+ {#if b?.created_at}
122
+ <!-- <div class="text-xs text-secondary">{JSON.stringify(b)}</div> -->
123
+ {@const waitingLen = b?.created_at
124
+ ? b.started_at
125
+ ? b.started_at - b?.created_at
126
+ : b.duration_ms
127
+ ? 0
128
+ : now - b?.created_at
129
+ : 0}
130
+ <div class="flex w-full p-1 pb-2 pl-12" {style}>
170
131
  <TimelineBar
171
- position={waitingLen < 100 ? 'center' : 'right'}
132
+ position="left"
172
133
  id={b?.id}
173
134
  {total}
174
135
  {min}
175
- concat
176
- started_at={b.started_at}
177
- len={b.started_at ? (b?.duration_ms ?? now - b?.started_at) : 0}
178
- running={b?.duration_ms == undefined}
136
+ gray
137
+ started_at={b.created_at}
138
+ len={waitingLen < 100 ? 0 : waitingLen - 100}
139
+ running={b?.started_at == undefined}
179
140
  />
180
- {/if}
181
- </div>
182
- {/each}
183
- </div>
141
+ {#if b.started_at}
142
+ <TimelineBar
143
+ position={waitingLen < 100 ? 'center' : 'right'}
144
+ id={b?.id}
145
+ {total}
146
+ {min}
147
+ concat
148
+ started_at={b.started_at}
149
+ len={b.started_at ? (b?.duration_ms ?? now - b?.started_at) : 0}
150
+ running={b?.duration_ms == undefined}
151
+ />
152
+ {/if}
153
+ </div>
154
+ {:else}
155
+ <div class="flex w-full p-1 pb-2 pl-12">
156
+ <div class="text-xs text-secondary">
157
+ <!-- Waiting for executor/Suspend {JSON.stringify(b)} -->
158
+ </div>
159
+ </div>
160
+ {/if}
161
+ {/snippet}
162
+ </VirtualList>
184
163
  {/if}</div
185
164
  ></div
186
165
  >
@@ -1,8 +1,19 @@
1
- import type { GlobalIterationBounds } from './graph';
1
+ import type { GraphModuleState } from './graph';
2
+ import type { FlowModuleForTimeline } from './FlowStatusViewerInner.svelte';
2
3
  interface Props {
3
4
  selfWaitTime?: number | undefined;
4
5
  aggregateWaitTime?: number | undefined;
5
- flowModules: string[];
6
+ flowModules: FlowModuleForTimeline[];
7
+ localModuleStates: Record<string, GraphModuleState>;
8
+ onSelectedIteration?: (detail: {
9
+ id: string;
10
+ index: number;
11
+ manuallySet: true;
12
+ moduleId: string;
13
+ } | {
14
+ manuallySet: false;
15
+ moduleId: string;
16
+ }) => Promise<void>;
6
17
  durationStatuses: Record<string, {
7
18
  byJob: Record<string, {
8
19
  created_at?: number;
@@ -11,9 +22,7 @@ interface Props {
11
22
  }>;
12
23
  }>;
13
24
  flowDone?: boolean;
14
- decreaseIterationFrom?: (key: string, amount: number) => void;
15
25
  buildSubflowKey: (key: string) => string;
16
- globalIterationBounds: Record<string, GlobalIterationBounds>;
17
26
  }
18
27
  declare const FlowTimeline: import("svelte").Component<Props, {
19
28
  reset: () => void;
@@ -0,0 +1,227 @@
1
+ <script lang="ts">import { msToReadableTime, msToReadableTimeShort } from '../utils';
2
+ import { ZoomIn, ZoomOut } from 'lucide-svelte';
3
+ import { twMerge } from 'tailwind-merge';
4
+ import { Tooltip } from './meltComponents';
5
+ let { total, min, items, selectedIndex, now, timelinelWidth, showZoomButtons = false, onZoom, zoom = 'in', onSelectIteration, idToIterationIndex, showIterations, isJobFailure } = $props();
6
+ function getLength(item) {
7
+ if (!item?.started_at)
8
+ return 0;
9
+ return item.duration_ms ?? now - item.started_at;
10
+ }
11
+ function isRunning(item) {
12
+ return item.started_at !== undefined && item.duration_ms === undefined;
13
+ }
14
+ const filteredItems = $derived(showIterations ? items.filter((item) => showIterations.includes(item.id)) : items);
15
+ let selectedItem = $derived(selectedIndex && selectedIndex >= 0 ? filteredItems[selectedIndex] : filteredItems[0]);
16
+ let startItem = $derived(showIterations ? filteredItems[0] : selectedItem);
17
+ // Calculate total execution time for multiple filteredItems
18
+ function calculateTotalExecutionTime() {
19
+ let earliestStart;
20
+ let latestEnd = 0;
21
+ for (const item of filteredItems) {
22
+ if (item.started_at) {
23
+ // Track earliest start
24
+ if (!earliestStart || item.started_at < earliestStart) {
25
+ earliestStart = item.started_at;
26
+ }
27
+ // Track latest end
28
+ const itemEnd = item.duration_ms ? item.started_at + item.duration_ms : now;
29
+ latestEnd = Math.max(latestEnd, itemEnd);
30
+ }
31
+ }
32
+ return earliestStart ? latestEnd - earliestStart : 0;
33
+ }
34
+ let selectedLen = $derived(
35
+ // If selectedIteration is set, it means we are in a loop and we are selecting an iteration
36
+ showIterations ? calculateTotalExecutionTime() : getLength(selectedItem));
37
+ const waitingLen = $derived(startItem?.created_at
38
+ ? startItem.started_at
39
+ ? startItem.started_at - startItem.created_at
40
+ : startItem.duration_ms
41
+ ? 0
42
+ : now - startItem.created_at
43
+ : 0);
44
+ function calculateItemPosition(item) {
45
+ if (!item.started_at || !min)
46
+ return { left: 0, width: 0 };
47
+ const startOffset = item.started_at - min;
48
+ const duration = getLength(item);
49
+ const leftPercent = (startOffset / total) * 100;
50
+ const widthPercent = (duration / total) * 100;
51
+ return { left: leftPercent, width: widthPercent };
52
+ }
53
+ // More efficient version using sweep line algorithm for computing all overlaps at once
54
+ function computeAllOverlaps(items) {
55
+ const overlapCounts = new Map();
56
+ const events = [];
57
+ for (const item of items) {
58
+ if (!item.started_at)
59
+ continue;
60
+ const endTime = item.duration_ms ? item.started_at + item.duration_ms : now;
61
+ events.push({ time: item.started_at, type: 'start', itemId: item.id });
62
+ events.push({ time: endTime, type: 'end', itemId: item.id });
63
+ overlapCounts.set(item.id, 0);
64
+ }
65
+ // Sort events by time, with end events before start events at the same time
66
+ events.sort((a, b) => {
67
+ if (a.time !== b.time)
68
+ return a.time - b.time;
69
+ return a.type === 'end' ? -1 : 1;
70
+ });
71
+ // Sweep through events
72
+ const activeItems = new Set();
73
+ for (const event of events) {
74
+ if (event.type === 'start') {
75
+ // Count current active items as overlaps for this item
76
+ overlapCounts.set(event.itemId, activeItems.size);
77
+ // Update overlap counts for all currently active items
78
+ for (const activeId of activeItems) {
79
+ overlapCounts.set(activeId, overlapCounts.get(activeId) + 1);
80
+ }
81
+ activeItems.add(event.itemId);
82
+ }
83
+ else {
84
+ activeItems.delete(event.itemId);
85
+ }
86
+ }
87
+ return Object.fromEntries(overlapCounts.entries());
88
+ }
89
+ // At component level, compute once when items change
90
+ const allOverlaps = $derived(computeAllOverlaps(filteredItems));
91
+ const maximumOverlaps = $derived(Math.max(...Object.values(allOverlaps)));
92
+ const opacity = $derived(Math.max(0.02, 1 / maximumOverlaps));
93
+ // Then in your template, use:
94
+ // allOverlaps.get(item.id) ?? 0
95
+ </script>
96
+
97
+ {#if min && filteredItems.length > 0 && startItem?.started_at}
98
+ <div
99
+ class="flex items-center gap-2 ml-auto min-w-96 max-w-[1000px] h-4 group"
100
+ style="width: {timelinelWidth}px"
101
+ >
102
+ {#if showZoomButtons}
103
+ <div class="w-24 flex items-center justify-end">
104
+ <button
105
+ onclick={(e) => {
106
+ e.stopPropagation()
107
+ onZoom?.()
108
+ }}
109
+ class="hover:text-primary hover:bg-surface p-1 -my-1 rounded-md"
110
+ >
111
+ {#if zoom === 'in'}
112
+ <ZoomOut size={12} />
113
+ {:else}
114
+ <ZoomIn size={12} />
115
+ {/if}
116
+ </button>
117
+ </div>
118
+ {:else}
119
+ <div class="w-24"></div>
120
+ {/if}
121
+ <div
122
+ class="flex-1 h-1 bg-gray-300 dark:bg-gray-800 rounded-sm overflow-hidden group-hover:h-full transition-all duration-100 relative"
123
+ >
124
+ {#if waitingLen > 100 && startItem.created_at}
125
+ <div
126
+ style="width: {((startItem.created_at - min) / total) * 100}%"
127
+ class="h-full absolute left-0 top-0"
128
+ >
129
+ </div>
130
+ <div
131
+ style="left: {((startItem.created_at - min) / total) * 100}%; width: {(waitingLen /
132
+ total) *
133
+ 100}%"
134
+ class="h-full absolute top-0 bg-gray-300 dark:bg-gray-600"
135
+ title={msToReadableTime(waitingLen, 1)}
136
+ >
137
+ </div>
138
+ {:else if startItem?.started_at}
139
+ <div
140
+ style="width: {((startItem.started_at - min) / total) * 100}%"
141
+ class="h-full absolute left-0 top-0"
142
+ ></div>
143
+ {/if}
144
+
145
+ {#if showIterations}
146
+ <!-- All iterations with absolute positioning -->
147
+ {#each filteredItems as item, i}
148
+ {#if item.started_at}
149
+ {@const position = calculateItemPosition(item)}
150
+ <!-- {overlapCount}
151
+ {opacity} -->
152
+ <Tooltip
153
+ style="left: {position.left}%; width: {position.width}%"
154
+ class="h-full absolute top-0"
155
+ openDelay={100}
156
+ >
157
+ <!-- svelte-ignore a11y_consider_explicit_label -->
158
+ <div class="relative w-full h-full">
159
+ <button
160
+ class={twMerge(
161
+ 'w-full h-full hover:outline outline-1 outline-blue-800 dark:outline-blue-300 -outline-offset-1 rounded-sm block transition-opacity duration-200',
162
+ isRunning(item)
163
+ ? 'bg-blue-400'
164
+ : isJobFailure?.(item.id)
165
+ ? ' bg-red-500'
166
+ : ' bg-blue-500',
167
+ i > 0 ? 'border-l border-gray-300 dark:border-gray-800 ' : '',
168
+ i === selectedIndex ? 'outline' : ''
169
+ )}
170
+ style="opacity: {opacity}"
171
+ onclick={(e) => {
172
+ e.stopPropagation()
173
+ onSelectIteration?.(item.id)
174
+ }}
175
+ >
176
+ </button>
177
+ </div>
178
+ {#snippet text()}
179
+ {`#${(idToIterationIndex?.(item.id) ?? 0) + 1}`}
180
+ <br />
181
+ {msToReadableTime(getLength(item), 1)}
182
+ {#if opacity < 1}
183
+ <br />
184
+ <span class="text-xs opacity-75">Overlapping</span>
185
+ {/if}
186
+ {/snippet}
187
+ </Tooltip>
188
+ {/if}
189
+ {/each}
190
+ {:else}
191
+ <!-- Single item case or inside a loop -->
192
+ {#if selectedItem?.started_at}
193
+ {@const position = calculateItemPosition(selectedItem)}
194
+ <Tooltip
195
+ class="h-full absolute top-0"
196
+ style="left: {position.left}%; width: {position.width}%"
197
+ openDelay={100}
198
+ >
199
+ <!-- svelte-ignore a11y_consider_explicit_label -->
200
+ <button
201
+ class={twMerge(
202
+ 'block w-full h-full hover:outline outline-1 outline-white -outline-offset-1 rounded-sm',
203
+ isRunning(selectedItem)
204
+ ? 'bg-blue-400'
205
+ : isJobFailure?.(selectedItem.id)
206
+ ? ' bg-red-500'
207
+ : ' bg-blue-500'
208
+ )}
209
+ onclick={(e) => {
210
+ e.stopPropagation()
211
+ }}
212
+ ></button>
213
+ {#snippet text()}
214
+ {msToReadableTime(selectedLen, 1)}
215
+ {/snippet}
216
+ </Tooltip>
217
+ {/if}
218
+ {/if}
219
+ </div>
220
+ {#if selectedLen > 0}
221
+ <span
222
+ class="text-2xs text-tertiary font-mono font-normal w-10 truncate"
223
+ title={msToReadableTime(selectedLen, 1)}>{msToReadableTimeShort(selectedLen, 1)}</span
224
+ >
225
+ {/if}
226
+ </div>
227
+ {/if}
@@ -0,0 +1,24 @@
1
+ interface TimelineItem {
2
+ created_at?: number;
3
+ started_at?: number;
4
+ duration_ms?: number;
5
+ id: string;
6
+ }
7
+ interface Props {
8
+ total: number;
9
+ min: number | undefined;
10
+ items: TimelineItem[];
11
+ selectedIndex?: number;
12
+ now: number;
13
+ timelinelWidth: number;
14
+ showZoomButtons?: boolean;
15
+ onZoom?: () => void;
16
+ zoom?: 'in' | 'out';
17
+ onSelectIteration?: (id: string) => void;
18
+ idToIterationIndex?: (id: string) => number | undefined;
19
+ showIterations?: string[];
20
+ isJobFailure?: (id: string) => boolean;
21
+ }
22
+ declare const FlowTimelineBar: import("svelte").Component<Props, {}, "">;
23
+ type FlowTimelineBar = ReturnType<typeof FlowTimelineBar>;
24
+ export default FlowTimelineBar;
@@ -1,5 +1,4 @@
1
- <script lang="ts">import { run } from 'svelte/legacy';
2
- import { userStore, workspaceStore } from '../stores';
1
+ <script lang="ts">import { userStore, workspaceStore } from '../stores';
3
2
  import { FolderService, UserService, GranularAclService, GroupService } from '../gen';
4
3
  import TableCustom from './TableCustom.svelte';
5
4
  import { Alert, Button, Drawer, DrawerContent } from './common';
@@ -11,7 +10,7 @@ import Section from './Section.svelte';
11
10
  import { Eye, Plus } from 'lucide-svelte';
12
11
  import Label from './Label.svelte';
13
12
  import { sendUserToast } from '../toast';
14
- import { createEventDispatcher } from 'svelte';
13
+ import { createEventDispatcher, untrack } from 'svelte';
15
14
  import Select from './select/Select.svelte';
16
15
  import { safeSelectItems } from './select/utils.svelte';
17
16
  let { name } = $props();
@@ -109,9 +108,11 @@ async function updateFolder() {
109
108
  dispatch('update');
110
109
  loadFolder();
111
110
  }
112
- run(() => {
111
+ $effect.pre(() => {
113
112
  if ($workspaceStore && $userStore) {
114
- load();
113
+ untrack(() => {
114
+ load();
115
+ });
115
116
  }
116
117
  });
117
118
  </script>
@@ -297,7 +298,6 @@ run(() => {
297
298
  />
298
299
 
299
300
  <ToggleButton
300
- position="center"
301
301
  value="writer"
302
302
  label="Writer"
303
303
  tooltip="A writer of a folder has read AND write access to all the elements (scripts/flows/apps/schedules/resources/variables) inside the folder"
@@ -305,7 +305,6 @@ run(() => {
305
305
  />
306
306
 
307
307
  <ToggleButton
308
- position="right"
309
308
  value="admin"
310
309
  label="Admin"
311
310
  tooltip="An admin of a folder has read AND write access to all the elements inside the folders and can manage the permissions as well as add new admins"