windmill-components 1.623.2 → 1.642.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 (599) hide show
  1. package/dist/sharedUtils/assets/tokens/colorTokensConfig.d.ts +2 -0
  2. package/dist/sharedUtils/base.d.ts +1 -0
  3. package/dist/sharedUtils/cloud.d.ts +1 -0
  4. package/dist/sharedUtils/common.d.ts +111 -0
  5. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +5 -0
  6. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +5 -0
  7. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +5 -0
  8. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +13 -0
  9. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +11 -0
  10. package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +95 -0
  11. package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +6 -0
  12. package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +7 -0
  13. package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +33 -0
  14. package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +10 -0
  15. package/dist/sharedUtils/components/apps/editor/component/components.d.ts +5371 -0
  16. package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +3 -0
  17. package/dist/sharedUtils/components/apps/editor/component/index.d.ts +3 -0
  18. package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +7 -0
  19. package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +3 -0
  20. package/dist/sharedUtils/components/apps/gridUtils.d.ts +14 -0
  21. package/dist/sharedUtils/components/apps/inputType.d.ts +178 -0
  22. package/dist/sharedUtils/components/apps/rx.d.ts +29 -0
  23. package/dist/sharedUtils/components/apps/sharedTypes.d.ts +21 -0
  24. package/dist/sharedUtils/components/apps/types.d.ts +274 -0
  25. package/dist/sharedUtils/components/assets/lib.d.ts +25 -0
  26. package/dist/sharedUtils/components/common/alert/model.d.ts +2 -0
  27. package/dist/sharedUtils/components/common/badge/model.d.ts +8 -0
  28. package/dist/sharedUtils/components/common/button/model.d.ts +45 -0
  29. package/dist/sharedUtils/components/common/fileInput/model.d.ts +1 -0
  30. package/dist/sharedUtils/components/common/index.d.ts +24 -0
  31. package/dist/sharedUtils/components/common/skeleton/model.d.ts +21 -0
  32. package/dist/sharedUtils/components/dbTypes.d.ts +14 -0
  33. package/dist/sharedUtils/components/diff_drawer.d.ts +26 -0
  34. package/dist/sharedUtils/components/ducklake.d.ts +1 -0
  35. package/dist/sharedUtils/components/flows/scheduleUtils.d.ts +7 -0
  36. package/dist/sharedUtils/components/icons/index.d.ts +101 -0
  37. package/dist/sharedUtils/components/random_positive_adjetive.d.ts +1 -0
  38. package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +10 -0
  39. package/dist/sharedUtils/components/raw_apps/utils.d.ts +15 -0
  40. package/dist/sharedUtils/components/triggers/email/utils.d.ts +4 -0
  41. package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +2 -0
  42. package/dist/sharedUtils/components/triggers/http/utils.d.ts +11 -0
  43. package/dist/sharedUtils/components/triggers/kafka/utils.d.ts +2 -0
  44. package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +2 -0
  45. package/dist/sharedUtils/components/triggers/nats/utils.d.ts +2 -0
  46. package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +8 -0
  47. package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +2 -0
  48. package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +32 -0
  49. package/dist/sharedUtils/components/triggers/utils.d.ts +80 -0
  50. package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +2 -0
  51. package/dist/sharedUtils/components/triggers.d.ts +20 -0
  52. package/dist/sharedUtils/gen/core/ApiError.d.ts +10 -0
  53. package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +13 -0
  54. package/dist/sharedUtils/gen/core/ApiResult.d.ts +7 -0
  55. package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +26 -0
  56. package/dist/sharedUtils/gen/core/OpenAPI.d.ts +27 -0
  57. package/dist/sharedUtils/gen/core/request.d.ts +29 -0
  58. package/dist/sharedUtils/gen/index.d.ts +6 -0
  59. package/dist/sharedUtils/gen/schemas.gen.d.ts +7036 -0
  60. package/dist/sharedUtils/gen/services.gen.d.ts +6047 -0
  61. package/dist/sharedUtils/gen/types.gen.d.ts +21881 -0
  62. package/dist/sharedUtils/history.svelte.d.ts +9 -0
  63. package/dist/sharedUtils/hub.d.ts +49 -0
  64. package/dist/sharedUtils/jsr.json +6 -0
  65. package/dist/sharedUtils/lib.d.ts +5 -0
  66. package/dist/sharedUtils/lib.es.js +1588 -0
  67. package/dist/sharedUtils/package.json +12 -0
  68. package/dist/sharedUtils/schema.d.ts +3 -0
  69. package/dist/sharedUtils/stores.d.ts +97 -0
  70. package/dist/sharedUtils/svelte5Utils.svelte.d.ts +80 -0
  71. package/dist/sharedUtils/toast.d.ts +8 -0
  72. package/dist/sharedUtils/utils.d.ts +265 -0
  73. package/package/assets/app.css +32 -13
  74. package/package/components/AIAgentLogViewer.svelte +2 -2
  75. package/package/components/AIAgentLogViewer.svelte.d.ts +1 -0
  76. package/package/components/AIProviderPicker.svelte +20 -80
  77. package/package/components/AIProviderPicker.svelte.d.ts +2 -7
  78. package/package/components/AddUser.svelte +2 -2
  79. package/package/components/ApiConnectForm.svelte +7 -1
  80. package/package/components/AppConnectInner.svelte.d.ts +1 -1
  81. package/package/components/ArgInput.svelte +15 -5
  82. package/package/components/ArgInput.svelte.d.ts +3 -4
  83. package/package/components/Auth0Setting.svelte +6 -2
  84. package/package/components/AuthSettings.svelte +68 -39
  85. package/package/components/AuthSettings.svelte.d.ts +3 -1
  86. package/package/components/AutheliaSetting.svelte +3 -2
  87. package/package/components/AuthentikSetting.svelte +3 -2
  88. package/package/components/AutoscalingConfigEditor.svelte +2 -1
  89. package/package/components/AutoscalingConfigEditor.svelte.d.ts +1 -0
  90. package/package/components/CenteredModal.svelte +14 -4
  91. package/package/components/CenteredModal.svelte.d.ts +1 -0
  92. package/package/components/ChangeInstanceUsernameInner.svelte +1 -1
  93. package/package/components/CompareWorkspaces.svelte +29 -57
  94. package/package/components/ConcurrentJobsChart.svelte +1 -1
  95. package/package/components/ConnectionSection.svelte +69 -73
  96. package/package/components/CustomSso.svelte +7 -7
  97. package/package/components/DBManager.svelte +15 -4
  98. package/package/components/DBManager.svelte.d.ts +2 -0
  99. package/package/components/DBManagerContent.svelte +5 -0
  100. package/package/components/DBManagerContent.svelte.d.ts +1 -0
  101. package/package/components/DBManagerDrawer.svelte +2 -0
  102. package/package/components/DatatablePicker.svelte +29 -0
  103. package/package/components/DatatablePicker.svelte.d.ts +13 -0
  104. package/package/components/DateTimeInput.svelte +3 -3
  105. package/package/components/DedicatedWorkersSelector.svelte +39 -42
  106. package/package/components/DeployToSetting.svelte +183 -123
  107. package/package/components/DeployToSetting.svelte.d.ts +19 -28
  108. package/package/components/DeployWorkspace.svelte +6 -44
  109. package/package/components/DeployWorkspace.svelte.d.ts +2 -1
  110. package/package/components/DeployWorkspaceDrawer.svelte +18 -7
  111. package/package/components/DeployWorkspaceDrawer.svelte.d.ts +3 -20
  112. package/package/components/Description.svelte +3 -1
  113. package/package/components/Dev.svelte +1 -0
  114. package/package/components/DiffEditor.svelte +7 -6
  115. package/package/components/DiffEditor.svelte.d.ts +2 -6
  116. package/package/components/DisplayResult.svelte +2 -2
  117. package/package/components/DropdownMenu.svelte +39 -0
  118. package/package/components/DropdownMenu.svelte.d.ts +14 -0
  119. package/package/components/DropdownSubmenuItem.svelte +68 -0
  120. package/package/components/DropdownSubmenuItem.svelte.d.ts +10 -0
  121. package/package/components/DropdownV2.svelte +3 -3
  122. package/package/components/DropdownV2Inner.svelte +42 -34
  123. package/package/components/DropdownV2Inner.svelte.d.ts +2 -1
  124. package/package/components/DucklakePicker.svelte +2 -5
  125. package/package/components/EEOnly.svelte +4 -14
  126. package/package/components/EEOnly.svelte.d.ts +0 -1
  127. package/package/components/Editor.svelte +2 -2
  128. package/package/components/Editor.svelte.d.ts +1 -0
  129. package/package/components/EditorBar.svelte +2 -4
  130. package/package/components/ErrorOrRecoveryHandler.svelte +62 -53
  131. package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +1 -0
  132. package/package/components/ExploreAssetButton.svelte +1 -2
  133. package/package/components/FileExplorer.svelte +249 -0
  134. package/package/components/FileExplorer.svelte.d.ts +21 -0
  135. package/package/components/FilesetEditor.svelte +103 -0
  136. package/package/components/FilesetEditor.svelte.d.ts +6 -0
  137. package/package/components/FilterSearchbar.svelte +628 -0
  138. package/package/components/FilterSearchbar.svelte.d.ts +86 -0
  139. package/package/components/FlowBuilder.svelte +123 -79
  140. package/package/components/FlowGraphViewerStep.svelte +49 -33
  141. package/package/components/FlowHistoryJobPicker.svelte +2 -1
  142. package/package/components/FlowJobResult.svelte +31 -23
  143. package/package/components/FlowJobResult.svelte.d.ts +0 -1
  144. package/package/components/FlowLogRow.svelte +1 -1
  145. package/package/components/FlowLogViewer.svelte +8 -3
  146. package/package/components/FlowPreviewContent.svelte +65 -49
  147. package/package/components/FlowPreviewContent.svelte.d.ts +4 -0
  148. package/package/components/FlowRestartButton.svelte +47 -47
  149. package/package/components/FlowRestartButton.svelte.d.ts +2 -0
  150. package/package/components/FlowStatusViewer.svelte +2 -3
  151. package/package/components/FlowStatusViewer.svelte.d.ts +1 -0
  152. package/package/components/FlowStatusViewerInner.svelte +380 -297
  153. package/package/components/FlowStatusViewerInner.svelte.d.ts +2 -2
  154. package/package/components/FlowStatusWaitingForEvents.svelte +11 -10
  155. package/package/components/FolderPicker.svelte +195 -65
  156. package/package/components/FolderPicker.svelte.d.ts +2 -0
  157. package/package/components/HistoricInputs.svelte +3 -4
  158. package/package/components/IconedResourceType.svelte +8 -2
  159. package/package/components/IconedResourceType.svelte.d.ts +2 -0
  160. package/package/components/InputError.svelte +9 -0
  161. package/package/components/InputError.svelte.d.ts +6 -0
  162. package/package/components/InputTransformForm.svelte +46 -39
  163. package/package/components/InputTransformForm.svelte.d.ts +1 -0
  164. package/package/components/InputTransformSchemaForm.svelte +2 -1
  165. package/package/components/InputTransformSchemaForm.svelte.d.ts +1 -0
  166. package/package/components/InputTransformsViewer.svelte +37 -20
  167. package/package/components/InstanceNameEditor.svelte +3 -1
  168. package/package/components/InstanceSetting.svelte +150 -374
  169. package/package/components/InstanceSetting.svelte.d.ts +1 -0
  170. package/package/components/InstanceSettings.svelte +804 -193
  171. package/package/components/InstanceSettings.svelte.d.ts +17 -2
  172. package/package/components/IntegerInput.svelte +58 -0
  173. package/package/components/IntegerInput.svelte.d.ts +14 -0
  174. package/package/components/InviteGlobalUser.svelte +25 -25
  175. package/package/components/InviteGlobalUser.svelte.d.ts +4 -2
  176. package/package/components/JobArgs.svelte +14 -10
  177. package/package/components/JobLoader.svelte +6 -4
  178. package/package/components/JobLoader.svelte.d.ts +2 -2
  179. package/package/components/JobStatus.svelte +29 -26
  180. package/package/components/JobStatus.svelte.d.ts +1 -0
  181. package/package/components/KanidmSetting.svelte +3 -2
  182. package/package/components/KeycloakSetting.svelte +3 -2
  183. package/package/components/Login.svelte +9 -3
  184. package/package/components/ModuleStatus.svelte +5 -5
  185. package/package/components/ModuleTest.svelte +3 -3
  186. package/package/components/MoveDrawer.svelte +47 -76
  187. package/package/components/MoveDrawer.svelte.d.ts +4 -6
  188. package/package/components/NextcloudSetting.svelte +3 -2
  189. package/package/components/NoDirectDeployAlert.svelte +31 -0
  190. package/package/components/NoDirectDeployAlert.svelte.d.ts +6 -0
  191. package/package/components/NumberTypeNarrowing.svelte +65 -67
  192. package/package/components/NumberTypeNarrowing.svelte.d.ts +2 -1
  193. package/package/components/OAuthSetting.svelte +6 -14
  194. package/package/components/ObjectStoreConfigSettings.svelte +150 -55
  195. package/package/components/ObjectStoreConfigSettings.svelte.d.ts +34 -44
  196. package/package/components/OktaSetting.svelte +3 -2
  197. package/package/components/PageHeader.svelte +1 -1
  198. package/package/components/ParentWorkspaceProtectionAlert.svelte +48 -0
  199. package/package/components/ParentWorkspaceProtectionAlert.svelte.d.ts +7 -0
  200. package/package/components/Path.svelte +40 -28
  201. package/package/components/Path.svelte.d.ts +3 -0
  202. package/package/components/PocketIdSetting.svelte +3 -2
  203. package/package/components/ResourceEditor.svelte +9 -3
  204. package/package/components/ResourcePicker.svelte +2 -5
  205. package/package/components/RightClickPopover.svelte +37 -0
  206. package/package/components/RightClickPopover.svelte.d.ts +11 -0
  207. package/package/components/RunChart.svelte +2 -21
  208. package/package/components/RunChart.svelte.d.ts +0 -3
  209. package/package/components/RunsPage.svelte +458 -560
  210. package/package/components/SaveButton.svelte +78 -0
  211. package/package/components/SaveButton.svelte.d.ts +12 -0
  212. package/package/components/SaveInputsButton.svelte +1 -1
  213. package/package/components/SavedInputsV2.svelte +1 -3
  214. package/package/components/SchemaFormWithArgPicker.svelte +34 -30
  215. package/package/components/SchemaFormWithArgPicker.svelte.d.ts +12 -21
  216. package/package/components/SchemaViewer.svelte +56 -53
  217. package/package/components/ScriptBuilder.svelte +12 -12
  218. package/package/components/ScriptEditor.svelte +30 -28
  219. package/package/components/Section.svelte +2 -2
  220. package/package/components/ServiceLogsInner.svelte +21 -82
  221. package/package/components/Star.svelte +8 -22
  222. package/package/components/Star.svelte.d.ts +4 -4
  223. package/package/components/StringTypeNarrowing.svelte +1 -0
  224. package/package/components/SummaryPathDisplay.svelte +177 -0
  225. package/package/components/SummaryPathDisplay.svelte.d.ts +10 -0
  226. package/package/components/SuperadminSettings.svelte +185 -4
  227. package/package/components/SuperadminSettings.svelte.d.ts +4 -1
  228. package/package/components/SuperadminSettingsInner.svelte +307 -192
  229. package/package/components/SuperadminSettingsInner.svelte.d.ts +12 -1
  230. package/package/components/TaggedTextInput.svelte +449 -0
  231. package/package/components/TaggedTextInput.svelte.d.ts +28 -0
  232. package/package/components/Toast.svelte +69 -51
  233. package/package/components/Toast.svelte.d.ts +2 -2
  234. package/package/components/Tooltip.svelte +2 -2
  235. package/package/components/Tooltip.svelte.d.ts +2 -0
  236. package/package/components/TooltipInner.svelte +6 -1
  237. package/package/components/TooltipInner.svelte.d.ts +1 -0
  238. package/package/components/Uptodate.svelte +3 -2
  239. package/package/components/UserSettings.svelte +2 -2
  240. package/package/components/UserSettings.svelte.d.ts +1 -0
  241. package/package/components/WorkerGroup.svelte +320 -192
  242. package/package/components/WorkerGroup.svelte.d.ts +2 -0
  243. package/package/components/WorkspaceDependenciesEditor.svelte +33 -17
  244. package/package/components/ZitadelSetting.svelte +3 -2
  245. package/package/components/aiProviderStorage.d.ts +5 -0
  246. package/package/components/aiProviderStorage.js +50 -0
  247. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +24 -13
  248. package/package/components/apps/components/display/dbtable/metadata.d.ts +1 -0
  249. package/package/components/apps/components/display/dbtable/metadata.js +1 -0
  250. package/package/components/apps/components/display/dbtable/queries/count.js +3 -1
  251. package/package/components/apps/components/display/dbtable/queries/delete.js +3 -1
  252. package/package/components/apps/components/display/dbtable/queries/insert.js +3 -1
  253. package/package/components/apps/components/display/dbtable/queries/select.js +15 -1
  254. package/package/components/apps/components/display/dbtable/queries/update.js +3 -1
  255. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +6 -0
  256. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +1 -0
  257. package/package/components/apps/components/display/table/AppAggridTable.svelte +7 -0
  258. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +9 -3
  259. package/package/components/apps/components/display/table/AppAggridTableActions.svelte.d.ts +1 -0
  260. package/package/components/apps/components/display/table/theme/windmill-theme.css +8 -7
  261. package/package/components/apps/components/helpers/eval.js +5 -2
  262. package/package/components/apps/components/layout/AppModal.svelte +2 -1
  263. package/package/components/apps/components/layout/AppModal.svelte.d.ts +1 -0
  264. package/package/components/apps/editor/appPolicy.js +5 -4
  265. package/package/components/apps/editor/appUtils.d.ts +1 -1
  266. package/package/components/apps/editor/component/components.d.ts +11 -0
  267. package/package/components/apps/editor/component/components.js +19 -2
  268. package/package/components/apps/editor/componentsPanel/CssProperty.svelte +3 -1
  269. package/package/components/apps/editor/inlineScriptsPanel/CacheTtlPopup.svelte +1 -1
  270. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +1 -1
  271. package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +1 -1
  272. package/package/components/apps/editor/settingsPanel/StylePanel.svelte +66 -29
  273. package/package/components/apps/editor/settingsPanel/StylePanel.svelte.d.ts +2 -17
  274. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +10 -0
  275. package/package/components/apps/inputType.d.ts +2 -2
  276. package/package/components/assets/AssetButtons.svelte +3 -7
  277. package/package/components/assets/AssetButtons.svelte.d.ts +2 -4
  278. package/package/components/assets/AssetColumnBadges.svelte +35 -0
  279. package/package/components/assets/AssetColumnBadges.svelte.d.ts +10 -0
  280. package/package/components/assets/AssetsDropdownButton.svelte +8 -6
  281. package/package/components/assets/AssetsUsageDrawer.svelte +16 -14
  282. package/package/components/assets/JobAssetsViewer.svelte +4 -6
  283. package/package/components/assets/assetsFilter.d.ts +50 -0
  284. package/package/components/assets/assetsFilter.js +43 -0
  285. package/package/components/assets/lib.d.ts +3 -2
  286. package/package/components/assets/lib.js +8 -1
  287. package/package/components/auditLogs/AuditLogsFilters.svelte +30 -1
  288. package/package/components/common/InlineCalendarInput.svelte +580 -0
  289. package/package/components/common/InlineCalendarInput.svelte.d.ts +31 -0
  290. package/package/components/common/alert/Alert.svelte +2 -8
  291. package/package/components/common/alert/model.d.ts +1 -0
  292. package/package/components/common/alert/model.js +7 -0
  293. package/package/components/common/badge/Badge.svelte +7 -3
  294. package/package/components/common/badge/Badge.svelte.d.ts +1 -0
  295. package/package/components/common/breadcrumb/Breadcrumb.svelte +10 -14
  296. package/package/components/common/breadcrumb/Breadcrumb.svelte.d.ts +8 -23
  297. package/package/components/common/drawer/DrawerContent.svelte +1 -1
  298. package/package/components/common/seconds/SecondsInput.svelte +158 -67
  299. package/package/components/common/seconds/SecondsInput.svelte.d.ts +9 -21
  300. package/package/components/common/sidebar/SidebarNavigation.svelte +50 -0
  301. package/package/components/common/sidebar/SidebarNavigation.svelte.d.ts +25 -0
  302. package/package/components/common/table/AppRow.svelte +7 -10
  303. package/package/components/common/table/AppRow.svelte.d.ts +2 -2
  304. package/package/components/common/table/FlowRow.svelte +12 -15
  305. package/package/components/common/table/FlowRow.svelte.d.ts +2 -2
  306. package/package/components/common/table/RawAppRow.svelte +5 -82
  307. package/package/components/common/table/RawAppRow.svelte.d.ts +2 -23
  308. package/package/components/common/table/Row.svelte +2 -2
  309. package/package/components/common/table/Row.svelte.d.ts +0 -2
  310. package/package/components/common/table/ScriptRow.svelte +8 -11
  311. package/package/components/common/table/ScriptRow.svelte.d.ts +2 -2
  312. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +1 -1
  313. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -1
  314. package/package/components/copilot/TestAIKey.svelte +1 -1
  315. package/package/components/copilot/chat/AIChatInput.svelte +22 -11
  316. package/package/components/copilot/chat/AIChatManager.svelte.js +15 -17
  317. package/package/components/copilot/chat/AvailableContextList.svelte +215 -12
  318. package/package/components/copilot/chat/AvailableContextList.svelte.d.ts +1 -0
  319. package/package/components/copilot/chat/ContextTextarea.svelte +15 -2
  320. package/package/components/copilot/chat/__tests__/app/variants/streamlined.js +1 -1
  321. package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.js +4 -2
  322. package/package/components/copilot/chat/app/core.js +7 -86
  323. package/package/components/copilot/chat/context.js +4 -1
  324. package/package/components/copilot/chat/flow/core.js +193 -61
  325. package/package/components/copilot/chat/flow/openFlow.json +1 -1
  326. package/package/components/copilot/chat/flow/openFlowZod.d.ts +2 -2
  327. package/package/components/copilot/chat/flow/openFlowZod.js +6 -8
  328. package/package/components/copilot/chat/navigator/core.d.ts +2 -2
  329. package/package/components/copilot/chat/navigator/core.js +11 -2
  330. package/package/components/copilot/chat/script/core.js +4 -1
  331. package/package/components/copilot/chat/shared.d.ts +53 -1
  332. package/package/components/copilot/chat/shared.js +227 -1
  333. package/package/components/copilot/lib.js +42 -0
  334. package/package/components/dedicated_worker.d.ts +7 -0
  335. package/package/components/dedicated_worker.js +36 -0
  336. package/package/components/details/DetailPageHeader.svelte +8 -23
  337. package/package/components/details/DetailPageHeader.svelte.d.ts +1 -0
  338. package/package/components/details/DetailPageLayout.svelte +1 -1
  339. package/package/components/details/createAppFromScript.d.ts +136 -16
  340. package/package/components/details/createAppFromScript.js +13 -12
  341. package/package/components/diffEditorTypes.d.ts +6 -0
  342. package/package/components/diffEditorTypes.js +1 -0
  343. package/package/components/flows/CreateActionsApp.svelte +32 -82
  344. package/package/components/flows/CreateActionsFlow.svelte +28 -28
  345. package/package/components/flows/FlowAssetsHandler.svelte +1 -4
  346. package/package/components/flows/FlowProgressBar.svelte +37 -1
  347. package/package/components/flows/FlowProgressBar.svelte.d.ts +3 -0
  348. package/package/components/flows/agentToolUtils.d.ts +18 -0
  349. package/package/components/flows/agentToolUtils.js +47 -0
  350. package/package/components/flows/common/FlowCardHeader.svelte +8 -9
  351. package/package/components/flows/content/FlowEnvironmentVariables.svelte +3 -2
  352. package/package/components/flows/content/FlowLoop.svelte +3 -4
  353. package/package/components/flows/content/FlowModuleCache.svelte +1 -3
  354. package/package/components/flows/content/FlowModuleComponent.svelte +22 -6
  355. package/package/components/flows/content/FlowModuleSleep.svelte +1 -1
  356. package/package/components/flows/content/FlowResult.svelte +77 -25
  357. package/package/components/flows/content/FlowRetries.svelte +1 -1
  358. package/package/components/flows/content/FlowSettings.svelte +4 -7
  359. package/package/components/flows/flowState.js +6 -0
  360. package/package/components/flows/flowStateUtils.svelte.js +4 -1
  361. package/package/components/flows/flowStore.svelte.d.ts +1 -1
  362. package/package/components/flows/flowStore.svelte.js +4 -2
  363. package/package/components/flows/header/FlowPreviewButtons.svelte +2 -1
  364. package/package/components/flows/header/FlowYamlEditor.svelte +2 -2
  365. package/package/components/flows/map/FlowModuleSchemaMap.svelte +12 -6
  366. package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +2 -2
  367. package/package/components/flows/map/InsertModuleInner.svelte +7 -0
  368. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +1 -0
  369. package/package/components/flows/missingInputWarnings.js +7 -0
  370. package/package/components/flows/pickers/PickHubScriptQuick.svelte +4 -4
  371. package/package/components/flows/propPicker/OutputPicker.svelte +1 -1
  372. package/package/components/flows/propPicker/PropPickerWrapper.svelte +6 -9
  373. package/package/components/flows/propPicker/PropPickerWrapper.svelte.d.ts +3 -3
  374. package/package/components/flows/scheduleUtils.js +2 -2
  375. package/package/components/flows/types.d.ts +1 -3
  376. package/package/components/flows/utils.svelte.js +5 -1
  377. package/package/components/git_sync/GitSyncRepositoryCard.svelte +23 -21
  378. package/package/components/git_sync/GitSyncSection.svelte +24 -27
  379. package/package/components/graph/FlowGraphV2.svelte +1 -1
  380. package/package/components/graph/graphBuilder.svelte.d.ts +3 -1
  381. package/package/components/graph/model.d.ts +1 -1
  382. package/package/components/graph/renderers/nodes/AIToolNode.svelte +3 -1
  383. package/package/components/graph/renderers/nodes/AssetNode.svelte +25 -13
  384. package/package/components/graph/renderers/nodes/AssetsOverflowedNode.svelte +1 -1
  385. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +8 -0
  386. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +5 -2
  387. package/package/components/home/Item.svelte +9 -15
  388. package/package/components/home/Item.svelte.d.ts +8 -7
  389. package/package/components/home/ItemsList.svelte +4 -10
  390. package/package/components/home/ItemsList.svelte.d.ts +1 -0
  391. package/package/components/icons/GoogleCalendarIcon.svelte +41 -0
  392. package/package/components/icons/GoogleCalendarIcon.svelte.d.ts +7 -0
  393. package/package/components/icons/GoogleDriveIcon.svelte +30 -0
  394. package/package/components/icons/GoogleDriveIcon.svelte.d.ts +7 -0
  395. package/package/components/icons/GoogleIcon.svelte +15 -6
  396. package/package/components/icons/GoogleIcon.svelte.d.ts +5 -2
  397. package/package/components/icons/MSSqlServerIcon.svelte +111 -47
  398. package/package/components/instanceSettings/IndexerJobIndexSettings.svelte +94 -0
  399. package/package/components/instanceSettings/IndexerJobIndexSettings.svelte.d.ts +9 -0
  400. package/package/components/instanceSettings/IndexerLogIndexSettings.svelte +67 -0
  401. package/package/components/instanceSettings/IndexerLogIndexSettings.svelte.d.ts +9 -0
  402. package/package/components/instanceSettings/IndexerMemorySettings.svelte +109 -0
  403. package/package/components/instanceSettings/IndexerMemorySettings.svelte.d.ts +9 -0
  404. package/package/components/instanceSettings/SecretBackendConfig.svelte +15 -16
  405. package/package/components/instanceSettings/SettingCard.svelte +47 -0
  406. package/package/components/instanceSettings/SettingCard.svelte.d.ts +19 -0
  407. package/package/components/instanceSettings/SettingsSearchInput.svelte +66 -0
  408. package/package/components/instanceSettings/SettingsSearchInput.svelte.d.ts +9 -0
  409. package/package/components/instanceSettings.d.ts +52 -0
  410. package/package/components/instanceSettings.js +413 -69
  411. package/package/components/meltComponents/MenuItem.svelte +1 -0
  412. package/package/components/meltComponents/Popover.svelte +10 -1
  413. package/package/components/meltComponents/Popover.svelte.d.ts +2 -0
  414. package/package/components/meltComponents/Tooltip.svelte +2 -1
  415. package/package/components/meltComponents/Tooltip.svelte.d.ts +1 -0
  416. package/package/components/moveRenameManager.d.ts +21 -0
  417. package/package/components/moveRenameManager.js +61 -0
  418. package/package/components/progressBar/ProgressBar.svelte +69 -27
  419. package/package/components/progressBar/ProgressBar.svelte.d.ts +7 -0
  420. package/package/components/prop_picker.d.ts +0 -3
  421. package/package/components/propertyPicker/PropPicker.svelte +34 -49
  422. package/package/components/propertyPicker/PropPicker.svelte.d.ts +12 -11
  423. package/package/components/raw_apps/FileTreeNode.svelte +1 -0
  424. package/package/components/raw_apps/RawAppBackgroundRunner.svelte +3 -2
  425. package/package/components/raw_apps/RawAppEditor.svelte +20 -16
  426. package/package/components/raw_apps/RawAppEditor.svelte.d.ts +4 -4
  427. package/package/components/raw_apps/RawAppEditorHeader.svelte +73 -7
  428. package/package/components/raw_apps/RawAppEditorHeader.svelte.d.ts +1 -1
  429. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte.d.ts +1 -2
  430. package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte +41 -1
  431. package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte.d.ts +0 -1
  432. package/package/components/raw_apps/RawAppSidebar.svelte +32 -284
  433. package/package/components/raw_apps/RawAppSidebar.svelte.d.ts +1 -1
  434. package/package/components/raw_apps/RunnableRow.svelte +88 -34
  435. package/package/components/raw_apps/RunnableRow.svelte.d.ts +4 -0
  436. package/package/components/resources/resourcesFilter.d.ts +70 -0
  437. package/package/components/resources/resourcesFilter.js +61 -0
  438. package/package/components/runs/BatchReRunOptionsPane.svelte +130 -121
  439. package/package/components/runs/BatchReRunOptionsPane.svelte.d.ts +3 -2
  440. package/package/components/runs/FlowExecutionStatus.svelte +30 -0
  441. package/package/components/runs/FlowExecutionStatus.svelte.d.ts +15 -0
  442. package/package/components/runs/JobDetailFieldConfig.d.ts +47 -0
  443. package/package/components/runs/JobDetailFieldConfig.js +433 -0
  444. package/package/components/runs/JobDetailHeader.svelte +551 -0
  445. package/package/components/runs/JobDetailHeader.svelte.d.ts +17 -0
  446. package/package/components/runs/JobRunsPreview.svelte +174 -218
  447. package/package/components/runs/JobRunsPreview.svelte.d.ts +0 -1
  448. package/package/components/runs/JobStatusIcon.svelte +47 -0
  449. package/package/components/runs/JobStatusIcon.svelte.d.ts +9 -0
  450. package/package/components/runs/RunBadges.svelte +39 -34
  451. package/package/components/runs/RunBadges.svelte.d.ts +2 -1
  452. package/package/components/runs/RunRow.svelte +24 -64
  453. package/package/components/runs/RunRow.svelte.d.ts +1 -2
  454. package/package/components/runs/RunsTable.svelte +312 -131
  455. package/package/components/runs/RunsTable.svelte.d.ts +4 -3
  456. package/package/components/runs/TimeframeSelect.svelte +189 -0
  457. package/package/components/runs/TimeframeSelect.svelte.d.ts +44 -0
  458. package/package/components/runs/runsFilter.d.ts +201 -0
  459. package/package/components/runs/runsFilter.js +182 -0
  460. package/package/components/runs/useJobsLoader.svelte.d.ts +5 -7
  461. package/package/components/runs/useJobsLoader.svelte.js +27 -30
  462. package/package/components/schedules/schedulesFilter.d.ts +65 -0
  463. package/package/components/schedules/schedulesFilter.js +60 -0
  464. package/package/components/schema/EditableSchemaWrapper.svelte +43 -22
  465. package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +1 -1
  466. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  467. package/package/components/schema/PropertyEditor.svelte +1 -0
  468. package/package/components/schema/RunningJobSchemaPicker.svelte +1 -1
  469. package/package/components/schema/editable_schema_wrapper.d.ts +1 -0
  470. package/package/components/scripts/CreateActionsScript.svelte +0 -1
  471. package/package/components/search/GlobalSearchModal.svelte +1 -8
  472. package/package/components/select/GenericDropdown.svelte +113 -0
  473. package/package/components/select/GenericDropdown.svelte.d.ts +37 -0
  474. package/package/components/select/Select.svelte +17 -4
  475. package/package/components/select/Select.svelte.d.ts +2 -1
  476. package/package/components/select/SelectDropdown.svelte +76 -155
  477. package/package/components/select/SelectDropdown.svelte.d.ts +4 -1
  478. package/package/components/settings/ChangeWorkspaceColor.svelte +7 -8
  479. package/package/components/settings/ChangeWorkspaceId.svelte +4 -6
  480. package/package/components/settings/ChangeWorkspaceName.svelte +6 -8
  481. package/package/components/settings/PremiumInfo.svelte +268 -128
  482. package/package/components/settings/SettingsPageHeader.svelte +22 -0
  483. package/package/components/settings/SettingsPageHeader.svelte.d.ts +10 -0
  484. package/package/components/settings/WorkspaceUserSettings.svelte +13 -23
  485. package/package/components/sidebar/CriticalAlertModalInner.svelte +28 -22
  486. package/package/components/sidebar/CriticalAlertModalInner.svelte.d.ts +5 -20
  487. package/package/components/sidebar/DarkModeToggle.svelte +2 -2
  488. package/package/components/sidebar/FavoriteMenu.svelte +101 -20
  489. package/package/components/sidebar/FavoriteMenu.svelte.d.ts +29 -1
  490. package/package/components/sidebar/MenuButton.svelte +10 -7
  491. package/package/components/sidebar/MenuButton.svelte.d.ts +2 -0
  492. package/package/components/sidebar/MenuLink.svelte +4 -3
  493. package/package/components/sidebar/OperatorMenu.svelte +3 -1
  494. package/package/components/sidebar/OperatorMenu.svelte.d.ts +6 -1
  495. package/package/components/sidebar/SidebarContent.svelte +3 -3
  496. package/package/components/sidebar/WorkspaceMenu.svelte +3 -2
  497. package/package/components/table/AutoDataTable.svelte +2 -2
  498. package/package/components/toast.js +1 -2
  499. package/package/components/triggers/AddTriggersButton.svelte +11 -0
  500. package/package/components/triggers/TriggerFilters.svelte +71 -0
  501. package/package/components/triggers/TriggerFilters.svelte.d.ts +10 -0
  502. package/package/components/triggers/TriggersEditor.svelte +31 -11
  503. package/package/components/triggers/TriggersWrapper.svelte +10 -0
  504. package/package/components/triggers/http/RouteEditorInner.svelte +1 -1
  505. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +7 -0
  506. package/package/components/triggers/kafka/utils.js +1 -0
  507. package/package/components/triggers/native/NativeTriggerEditor.svelte +22 -17
  508. package/package/components/triggers/native/NativeTriggerTable.svelte +16 -0
  509. package/package/components/triggers/native/services/google/GoogleCalendarPicker.svelte +112 -0
  510. package/package/components/triggers/native/services/google/GoogleCalendarPicker.svelte.d.ts +8 -0
  511. package/package/components/triggers/native/services/google/GoogleDrivePicker.svelte +323 -0
  512. package/package/components/triggers/native/services/google/GoogleDrivePicker.svelte.d.ts +8 -0
  513. package/package/components/triggers/native/services/google/GoogleTriggerForm.svelte +116 -0
  514. package/package/components/triggers/native/services/google/GoogleTriggerForm.svelte.d.ts +12 -0
  515. package/package/components/triggers/native/utils.d.ts +0 -1
  516. package/package/components/triggers/native/utils.js +15 -1
  517. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +3 -3
  518. package/package/components/triggers/triggers.svelte.d.ts +1 -1
  519. package/package/components/triggers/triggers.svelte.js +11 -3
  520. package/package/components/triggers/utils.js +33 -6
  521. package/package/components/triggers/websocket/WebsocketEditorConfigSection.svelte +1 -1
  522. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +3 -81
  523. package/package/components/triggers.d.ts +1 -1
  524. package/package/components/variables/variablesFilter.d.ts +56 -0
  525. package/package/components/variables/variablesFilter.js +51 -0
  526. package/package/components/waitJob.d.ts +1 -1
  527. package/package/components/waitJob.js +3 -2
  528. package/package/components/worker_group.d.ts +2 -0
  529. package/package/components/worker_group.js +15 -0
  530. package/package/components/workspaceSettings/AISettings.svelte +36 -42
  531. package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -0
  532. package/package/components/workspaceSettings/CreateWorkspace.svelte +4 -4
  533. package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte.d.ts +1 -2
  534. package/package/components/workspaceSettings/DataTableSettings.svelte +27 -16
  535. package/package/components/workspaceSettings/DataTableSettings.svelte.d.ts +1 -0
  536. package/package/components/workspaceSettings/DucklakeSettings.svelte +21 -15
  537. package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +1 -0
  538. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +24 -66
  539. package/package/components/workspaceSettings/ModelTokenLimits.svelte +6 -10
  540. package/package/components/workspaceSettings/OAuthClientConfig.svelte +46 -75
  541. package/package/components/workspaceSettings/OAuthClientConfig.svelte.d.ts +8 -1
  542. package/package/components/workspaceSettings/RulesetEditor.svelte +280 -0
  543. package/package/components/workspaceSettings/RulesetEditor.svelte.d.ts +9 -0
  544. package/package/components/workspaceSettings/SettingsFooter.svelte +35 -0
  545. package/package/components/workspaceSettings/SettingsFooter.svelte.d.ts +12 -0
  546. package/package/components/workspaceSettings/StorageSettings.svelte +48 -34
  547. package/package/components/workspaceSettings/StorageSettings.svelte.d.ts +1 -0
  548. package/package/components/workspaceSettings/WorkspaceDependenciesSettings.svelte +66 -27
  549. package/package/components/workspaceSettings/WorkspaceIntegrations.svelte +237 -73
  550. package/package/components/workspaceSettings/WorkspaceRulesets.svelte +183 -0
  551. package/package/components/workspaceSettings/WorkspaceRulesets.svelte.d.ts +3 -0
  552. package/package/editorLangUtils.d.ts +1 -1
  553. package/package/gen/core/OpenAPI.js +1 -1
  554. package/package/gen/schemas.gen.d.ts +996 -70
  555. package/package/gen/schemas.gen.js +1352 -378
  556. package/package/gen/services.gen.d.ts +156 -41
  557. package/package/gen/services.gen.js +319 -83
  558. package/package/gen/types.gen.d.ts +1896 -317
  559. package/package/hub.d.ts +1 -0
  560. package/package/hub.js +7 -0
  561. package/package/hubPaths.json +2 -1
  562. package/package/infer.d.ts +2 -0
  563. package/package/mcpEndpointTools.d.ts +3 -0
  564. package/package/mcpEndpointTools.js +574 -147
  565. package/package/rawAppWmillTs.js +12 -11
  566. package/package/scripts.d.ts +1 -1
  567. package/package/scripts.js +1 -1
  568. package/package/storeUtils.js +8 -0
  569. package/package/stores.d.ts +1 -1
  570. package/package/stores.js +4 -2
  571. package/package/svelte5Utils.svelte.d.ts +40 -0
  572. package/package/svelte5Utils.svelte.js +158 -0
  573. package/package/svelte5UtilsKit.svelte.d.ts +13 -3
  574. package/package/svelte5UtilsKit.svelte.js +96 -20
  575. package/package/system_prompts/prompts.d.ts +5 -5
  576. package/package/system_prompts/prompts.js +94 -21
  577. package/package/toast.d.ts +5 -1
  578. package/package/toast.js +14 -5
  579. package/package/utils.js +214 -7
  580. package/package/utils_deployable.d.ts +25 -25
  581. package/package/utils_deployable.js +2 -1
  582. package/package/validators/workspaceSettings.d.ts +12 -0
  583. package/package/validators/workspaceSettings.js +72 -0
  584. package/package/workspaceProtectionRules.svelte.d.ts +73 -0
  585. package/package/workspaceProtectionRules.svelte.js +176 -0
  586. package/package.json +8 -5
  587. package/package/components/DropdownSelect.svelte +0 -26
  588. package/package/components/DropdownSelect.svelte.d.ts +0 -11
  589. package/package/components/FlowPreviewResult.svelte +0 -84
  590. package/package/components/FlowPreviewResult.svelte.d.ts +0 -20
  591. package/package/components/copilot/chat/context.d.ts +0 -119
  592. package/package/components/flows/propPicker/FlowPropPicker.svelte +0 -72
  593. package/package/components/flows/propPicker/FlowPropPicker.svelte.d.ts +0 -23
  594. package/package/components/runs/ManuelDatePicker.svelte +0 -96
  595. package/package/components/runs/ManuelDatePicker.svelte.d.ts +0 -35
  596. package/package/components/runs/RunsBatchActionsDropdown.svelte +0 -82
  597. package/package/components/runs/RunsBatchActionsDropdown.svelte.d.ts +0 -15
  598. package/package/components/runs/RunsFilter.svelte +0 -966
  599. package/package/components/runs/RunsFilter.svelte.d.ts +0 -80
@@ -1,115 +1,90 @@
1
1
  <script lang="ts">import { JobService, UserService, FolderService, ScriptService, FlowService, OpenAPI } from '../gen';
2
2
  import { sendUserToast } from '../toast';
3
- import { userStore, workspaceStore, userWorkspaces } from '../stores';
4
- import { Button, Drawer, DrawerContent, Skeleton } from './common';
3
+ import { userStore, workspaceStore, userWorkspaces, superadmin } from '../stores';
4
+ import { Button, ButtonType, Drawer, DrawerContent, Skeleton, Tab, Tabs } from './common';
5
5
  import RunChart from './RunChart.svelte';
6
6
  import JobRunsPreview from './runs/JobRunsPreview.svelte';
7
7
  import Tooltip from './Tooltip.svelte';
8
- import CalendarPicker from './common/calendarPicker/CalendarPicker.svelte';
9
8
  import RunsTable from './runs/RunsTable.svelte';
10
9
  import { Pane, Splitpanes } from 'svelte-splitpanes';
11
- import RunsFilter, { runsFiltersSchema } from './runs/RunsFilter.svelte';
10
+ import { allowWildcards, buildRunsFilterSearchbarSchema, buildRunsFilterPresets } from './runs/runsFilter';
12
11
  import Toggle from './Toggle.svelte';
13
12
  import ConfirmationModal from './common/confirmationModal/ConfirmationModal.svelte';
14
13
  import RunsQueue from './runs/RunsQueue.svelte';
15
14
  import { twMerge } from 'tailwind-merge';
16
- import ManuelDatePicker from './runs/ManuelDatePicker.svelte';
17
15
  import { computeJobKinds, useJobsLoader } from './runs/useJobsLoader.svelte';
18
- import { Calendar, Clock, TriangleAlert } from 'lucide-svelte';
19
16
  import ConcurrentJobsChart from './ConcurrentJobsChart.svelte';
20
- import { isJobSelectable } from '../utils';
17
+ import { pluralize } from '../utils';
21
18
  import BatchReRunOptionsPane, {} from './runs/BatchReRunOptionsPane.svelte';
22
19
  import { untrack } from 'svelte';
23
20
  import { page } from '$app/state';
24
- import RunOption from './runs/RunOption.svelte';
25
- import TooltipV2 from './meltComponents/Tooltip.svelte';
26
- import DropdownSelect from './DropdownSelect.svelte';
27
- import RunsBatchActionsDropdown from './runs/RunsBatchActionsDropdown.svelte';
28
- import { createBubbler } from 'svelte/legacy';
29
- import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
30
- import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
31
21
  import Select from './select/Select.svelte';
32
22
  import AnimatedPane from './splitPanes/AnimatedPane.svelte';
33
- import { useSearchParams } from '../svelte5UtilsKit.svelte';
34
- import { StaleWhileLoading } from '../svelte5Utils.svelte';
23
+ import { StaleWhileLoading, useLocalStorageValue } from '../svelte5Utils.svelte';
24
+ import { CircleAlert, CircleCheck, CirclePlay, Hourglass, TriangleAlertIcon } from 'lucide-svelte';
25
+ import DropdownV2 from './DropdownV2.svelte';
26
+ import TimeframeSelect, { buildManualTimeframe, runsTimeframes, useSyncedTimeframe } from './runs/TimeframeSelect.svelte';
27
+ import FilterSearchbar, { useUrlSyncedFilterInstance } from './FilterSearchbar.svelte';
28
+ import { jobTriggerKinds } from './triggers/utils';
29
+ import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
30
+ import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
31
+ import ToggleButtonMore from './common/toggleButton-v2/ToggleButtonMore.svelte';
32
+ let paths = $state([]);
33
+ let usernames = $state([]);
34
+ let folders = $state([]);
35
+ let runsFilterSearchbarSchema = $derived(buildRunsFilterSearchbarSchema({
36
+ paths,
37
+ usernames,
38
+ folders,
39
+ jobTriggerKinds,
40
+ isSuperAdmin: !!$superadmin
41
+ }));
42
+ let perPage = useLocalStorageValue('runs_per_page', 1000, 'number');
43
+ let filters = useUrlSyncedFilterInstance(untrack(() => runsFilterSearchbarSchema));
35
44
  let { initialPath } = $props();
36
- let filters = useSearchParams(runsFiltersSchema);
45
+ let batchRerunOptionsIsOpen = $state(false);
37
46
  // Initialize path filter from route param if provided and not already set via query params
38
- if (initialPath && !filters.path) {
39
- filters.path = initialPath;
40
- }
41
- // Initialize toggle filters from localStorage if not set via URL params
42
- // Check if URL has the params explicitly set; if not, use localStorage values
43
- const urlParams = new URLSearchParams(window.location.search);
44
- if (!urlParams.has('show_schedules')) {
45
- filters.show_schedules = getShowSchedules();
46
- }
47
- if (!urlParams.has('show_future_jobs')) {
48
- filters.show_future_jobs = getShowFutureJobs();
47
+ if (initialPath && !filters.val.path) {
48
+ filters.val.path = initialPath;
49
49
  }
50
50
  let selectedIds = $state([]);
51
- let loadingSelectedIds = $state(false);
52
51
  let selectedWorkspace = $state(undefined);
53
- let batchReRunOptions = $state({ flow: {}, script: {} });
54
- let jobKinds = $derived(computeJobKinds(filters.job_kinds));
55
- let paths = $state([]);
56
- let usernames = $state([]);
57
- let folders = $state([]);
52
+ let jobKinds = $derived(computeJobKinds(filters.val.job_kinds ?? null));
58
53
  let argError = $state('');
59
54
  let resultError = $state('');
60
- let filterTimeout = undefined;
61
- let selectedManualDate = $state(0);
62
- let autoRefresh = $state(getAutoRefresh());
55
+ let autoRefresh = useLocalStorageValue('auto_refresh_in_runs', true, 'boolean');
63
56
  let runDrawer = $state(undefined);
64
57
  let lookback = $state(1);
65
58
  let askingForConfirmation = $state(undefined);
66
- function getAutoRefresh() {
67
- try {
68
- return localStorage.getItem('auto_refresh_in_runs') != 'false';
69
- }
70
- catch (e) {
71
- console.error('Error getting auto refresh', e);
72
- return true;
73
- }
74
- }
75
- function getShowSchedules() {
76
- try {
77
- return localStorage.getItem('show_schedules_in_runs') != 'false';
78
- }
79
- catch (e) {
80
- console.error('Error getting show schedules', e);
81
- return true;
82
- }
83
- }
84
- function getShowFutureJobs() {
85
- try {
86
- return localStorage.getItem('show_future_jobs_in_runs') != 'false';
87
- }
88
- catch (e) {
89
- console.error('Error getting show future jobs', e);
90
- return true;
91
- }
92
- }
93
- let manualDatePicker = $state(undefined);
59
+ let automaticTimeframeState = useLocalStorageValue('runs_automatic_timeframe', 'null', 'string');
60
+ let _timeframe = useSyncedTimeframe(runsTimeframes, () => ({
61
+ maxTs: filters.val.max_ts?.toISOString(),
62
+ minTs: filters.val.min_ts?.toISOString(),
63
+ timeframe: automaticTimeframeState.val === 'null' ? null : automaticTimeframeState.val
64
+ }), (v) => {
65
+ v.maxTs ? (filters.val.max_ts = new Date(v.maxTs)) : delete filters.val.max_ts;
66
+ v.minTs ? (filters.val.min_ts = new Date(v.minTs)) : delete filters.val.min_ts;
67
+ automaticTimeframeState.val = v.timeframe ?? 'null';
68
+ });
69
+ let timeframe = $derived(_timeframe.val);
70
+ let manualTimeframe = $derived(timeframe.type === 'manual' ? timeframe : undefined);
94
71
  let graph = $state(typeOfChart(page.url.searchParams.get('graph')));
95
- let graphIsRunsChart = $state(untrack(() => graph) === 'RunChart');
96
72
  let innerWidth = $state(window.innerWidth);
97
73
  let jobsLoader = useJobsLoader(() => ({
98
- filters,
99
- computeMinAndMax: manualDatePicker?.computeMinMax,
74
+ filters: filters.val,
75
+ timeframe,
100
76
  jobKinds,
101
- autoRefresh,
77
+ autoRefresh: autoRefresh.val,
102
78
  argError,
103
79
  resultError,
104
- lookback: graphIsRunsChart ? 0 : lookback,
105
- onSetPerPage: (p) => (filters.per_page = p),
106
- onSetMinMaxTs: (minTs, maxTs) => ((filters.min_ts = minTs), (filters.max_ts = maxTs)),
80
+ perPage: perPage.val,
81
+ lookback: graph === 'RunChart' ? 0 : lookback,
82
+ onSetPerPage: (p) => (perPage.val = p),
107
83
  currentWorkspace: $workspaceStore ?? ''
108
84
  }));
109
85
  let lastFetchWentToEnd = $derived(jobsLoader.lastFetchWentToEnd);
110
86
  let queue_count = $derived(jobsLoader.queue_count);
111
87
  let suspended_count = $derived(jobsLoader.suspended_count);
112
- let loading = $derived(jobsLoader.loading);
113
88
  let externalJobs = $derived(jobsLoader.externalJobs);
114
89
  let extendedJobs = $derived(jobsLoader.extendedJobs);
115
90
  // Avoid flicker, but still show empty if loading takes too long
@@ -118,22 +93,10 @@ let debouncedJobs = new StaleWhileLoading(() => jobsLoader.jobs);
118
93
  let completedJobs = $derived(jobsLoader.completedJobs ?? debouncedCompletedJobs.current);
119
94
  let jobs = $derived(jobsLoader.jobs ?? debouncedJobs.current);
120
95
  let runsTable = $state(undefined);
121
- function reloadJobsWithoutFilterError() {
122
- if (resultError == '' && argError == '') {
123
- filterTimeout && clearTimeout(filterTimeout);
124
- filterTimeout = setTimeout(() => {
125
- jobsLoader?.loadJobs(true);
126
- }, 2000);
127
- }
128
- }
129
96
  function reset() {
130
- filters.min_ts = null;
131
- filters.max_ts = null;
132
- selectedManualDate = 0;
97
+ _timeframe.val = { ...runsTimeframes[0] };
133
98
  selectedIds = [];
134
- filters.schedule_path = null;
135
- batchReRunOptions = { flow: {}, script: {} };
136
- selectionMode = false;
99
+ delete filters.val.schedule_path;
137
100
  selectedWorkspace = undefined;
138
101
  jobsLoader?.loadJobs(true);
139
102
  }
@@ -152,25 +115,25 @@ async function loadPaths() {
152
115
  }
153
116
  function resetAndFilterBy(setter) {
154
117
  return (e) => {
155
- filters.path = null;
156
- filters.user = null;
157
- filters.folder = null;
158
- filters.label = null;
159
- filters.concurrency_key = null;
160
- filters.tag = null;
161
- filters.worker = null;
162
- filters.schedule_path = null;
118
+ delete filters.val.path;
119
+ delete filters.val.user;
120
+ delete filters.val.folder;
121
+ delete filters.val.label;
122
+ delete filters.val.concurrency_key;
123
+ delete filters.val.tag;
124
+ delete filters.val.worker;
125
+ delete filters.val.schedule_path;
163
126
  setter(e.detail);
164
127
  };
165
128
  }
166
- const filterByPath = resetAndFilterBy((s) => (filters.path = s));
167
- const filterByUser = resetAndFilterBy((s) => (filters.user = s));
168
- const filterByFolder = resetAndFilterBy((s) => (filters.folder = s));
169
- const filterByLabel = resetAndFilterBy((s) => (filters.label = s));
170
- const filterByConcurrencyKey = resetAndFilterBy((s) => (filters.concurrency_key = s));
171
- const filterByTag = resetAndFilterBy((s) => (filters.tag = s));
172
- const filterBySchedule = resetAndFilterBy((s) => (filters.schedule_path = s));
173
- const filterByWorker = resetAndFilterBy((s) => (filters.worker = s));
129
+ const filterByPath = resetAndFilterBy((s) => (filters.val.path = s));
130
+ const filterByUser = resetAndFilterBy((s) => (filters.val.user = s));
131
+ const filterByFolder = resetAndFilterBy((s) => (filters.val.folder = s));
132
+ const filterByLabel = resetAndFilterBy((s) => (filters.val.label = s));
133
+ const filterByConcurrencyKey = resetAndFilterBy((s) => (filters.val.concurrency_key = s));
134
+ const filterByTag = resetAndFilterBy((s) => (filters.val.tag = s));
135
+ const filterBySchedule = resetAndFilterBy((s) => (filters.val.schedule_path = s));
136
+ const filterByWorker = resetAndFilterBy((s) => (filters.val.worker = s));
174
137
  function typeOfChart(s) {
175
138
  switch (s) {
176
139
  case 'RunChart':
@@ -181,72 +144,55 @@ function typeOfChart(s) {
181
144
  return 'RunChart';
182
145
  }
183
146
  }
184
- let selectionMode = $state(false);
185
- async function onSetSelectionMode(mode) {
186
- selectionMode = mode;
187
- if (!mode) {
188
- selectedIds = [];
189
- batchReRunOptions = { flow: {}, script: {} };
190
- return;
191
- }
192
- const selectableIds = jobs?.filter(isJobSelectable(mode)).map((j) => j.id) ?? [];
193
- selectedIds = [];
194
- if (!selectableIds?.length) {
195
- sendUserToast('There are no visible jobs that can be ' +
196
- { cancel: 'cancelled', 're-run': 're-ran' }[mode], true);
197
- }
198
- }
199
147
  function getSelectedFilters() {
200
- const argFilter = filters.arg && JSON.parse(filters.arg);
201
- const resultFilter = filters.result && JSON.parse(filters.result);
148
+ const argFilter = filters.val.arg && JSON.parse(filters.val.arg);
149
+ const resultFilter = filters.val.result && JSON.parse(filters.val.result);
150
+ const { minTs, maxTs } = timeframe.computeMinMax();
202
151
  return {
203
152
  workspace: $workspaceStore ?? '',
204
- startedBefore: filters.max_ts ?? undefined,
205
- startedAfter: filters.min_ts ?? undefined,
206
- schedulePath: filters.schedule_path ?? undefined,
207
- scriptPathExact: filters.path === null || filters.path === '' ? undefined : filters.path,
208
- createdBy: filters.user || undefined,
209
- scriptPathStart: filters.folder ? `f/${filters.folder}/` : undefined,
153
+ startedBefore: maxTs ?? undefined,
154
+ startedAfter: minTs ?? undefined,
155
+ schedulePath: filters.val.schedule_path ?? undefined,
156
+ scriptPathExact: filters.val.path === null || filters.val.path === '' ? undefined : filters.val.path,
157
+ createdBy: filters.val.user || undefined,
158
+ scriptPathStart: filters.val.folder ? `f/${filters.val.folder}/` : undefined,
210
159
  jobKinds: jobKinds == '' ? undefined : jobKinds,
211
- success: filters.success == 'success' ? true : filters.success == 'failure' ? false : undefined,
212
- running: filters.success == 'running' || filters.success == 'suspended'
160
+ success: filters.val.status == 'success'
161
+ ? true
162
+ : filters.val.status == 'failure'
163
+ ? false
164
+ : undefined,
165
+ running: filters.val.status == 'running' || filters.val.status == 'suspended'
213
166
  ? true
214
- : filters.success == 'waiting'
167
+ : filters.val.status == 'waiting'
215
168
  ? false
216
169
  : undefined,
217
- isSkipped: filters.show_skipped ? undefined : false,
170
+ isSkipped: filters.val.show_skipped ? undefined : false,
218
171
  // isFlowStep: jobKindsCat != 'all' ? false : undefined,
219
- hasNullParent: filters.path != undefined || filters.path != undefined || filters.job_kinds != 'all'
172
+ hasNullParent: filters.val.path != undefined ||
173
+ filters.val.path != undefined ||
174
+ filters.val.job_kinds != 'all'
220
175
  ? true
221
176
  : undefined,
222
- label: filters.label || undefined,
223
- tag: filters.tag || undefined,
224
- isNotSchedule: filters.show_schedules == false ? true : undefined,
225
- suspended: filters.success == 'waiting' ? false : filters.success == 'suspended' ? true : undefined,
226
- scheduledForBeforeNow: filters.show_future_jobs == false ||
227
- filters.success == 'waiting' ||
228
- filters.success == 'suspended'
177
+ label: filters.val.label || undefined,
178
+ tag: filters.val.tag || undefined,
179
+ suspended: filters.val.status == 'waiting'
180
+ ? false
181
+ : filters.val.status == 'suspended'
182
+ ? true
183
+ : undefined,
184
+ scheduledForBeforeNow: filters.val.show_future_jobs == false ||
185
+ filters.val.status == 'waiting' ||
186
+ filters.val.status == 'suspended'
229
187
  ? true
230
188
  : undefined,
231
189
  args: argFilter && Object.keys(argFilter).length && !argError ? argFilter : undefined,
232
190
  result: resultFilter && Object.keys(resultFilter).length && !resultError ? resultFilter : undefined,
233
- jobTriggerKind: filters.job_trigger_kind || undefined,
234
- allWorkspaces: filters.all_workspaces || undefined,
235
- allowWildcards: filters.allow_wildcards || undefined
191
+ jobTriggerKind: filters.val.job_trigger_kind || undefined,
192
+ allWorkspaces: filters.val.all_workspaces || undefined,
193
+ allowWildcards: allowWildcards(filters.val) || undefined
236
194
  };
237
195
  }
238
- $effect(() => {
239
- if (filters.job_trigger_kind === 'schedule' && !filters.show_schedules) {
240
- filters.show_schedules = true;
241
- }
242
- });
243
- // Persist toggle filters to localStorage
244
- $effect(() => {
245
- localStorage.setItem('show_schedules_in_runs', filters.show_schedules ? 'true' : 'false');
246
- });
247
- $effect(() => {
248
- localStorage.setItem('show_future_jobs_in_runs', filters.show_future_jobs ? 'true' : 'false');
249
- });
250
196
  async function cancelJobs(uuidsToCancel, forceCancel = false) {
251
197
  const uuids = await JobService.cancelSelection({
252
198
  workspace: $workspaceStore ?? '',
@@ -256,9 +202,8 @@ async function cancelJobs(uuidsToCancel, forceCancel = false) {
256
202
  selectedIds = [];
257
203
  jobsLoader?.loadJobs(true, true);
258
204
  sendUserToast(`Canceled ${uuids.length} jobs`);
259
- selectionMode = false;
260
205
  }
261
- async function onCancelFilteredJobs() {
206
+ async function onCancelAllJobsMatchingFilters() {
262
207
  forceCancelInPopup = false;
263
208
  askingForConfirmation = {
264
209
  title: 'Confirm cancelling all jobs corresponding to the selected filters',
@@ -277,17 +222,17 @@ async function onCancelFilteredJobs() {
277
222
  }
278
223
  };
279
224
  }
280
- async function onCancelSelectedJobs() {
225
+ async function onCancelSelectedJobs(jobIdsToCancel) {
281
226
  forceCancelInPopup = true;
282
227
  askingForConfirmation = {
283
- confirmBtnText: `Cancel ${selectedIds.length} jobs`,
284
- title: 'Confirm cancelling the selected jobs',
228
+ confirmBtnText: `Cancel ${jobIdsToCancel.length} jobs`,
229
+ title: `Confirm cancelling ${jobIdsToCancel.length} jobs`,
285
230
  onConfirm: (forceCancel) => {
286
- cancelJobs(selectedIds, forceCancel);
231
+ cancelJobs(jobIdsToCancel, forceCancel);
287
232
  }
288
233
  };
289
234
  }
290
- async function reRunJobs(jobIdsToReRun) {
235
+ async function reRunJobs(jobIdsToReRun, batchReRunOptions) {
291
236
  if (!$workspaceStore)
292
237
  return;
293
238
  if (askingForConfirmation) {
@@ -295,8 +240,8 @@ async function reRunJobs(jobIdsToReRun) {
295
240
  }
296
241
  const body = {
297
242
  job_ids: jobIdsToReRun,
298
- script_options_by_path: batchReRunOptions.script,
299
- flow_options_by_path: batchReRunOptions.flow
243
+ script_options_by_path: batchReRunOptions.script ?? {},
244
+ flow_options_by_path: batchReRunOptions.flow ?? {}
300
245
  };
301
246
  // workaround because EventSource does not support POST requests
302
247
  // https://medium.com/@david.richards.tech/sse-server-sent-events-using-a-post-request-without-eventsource-1c0bd6f14425
@@ -351,60 +296,50 @@ async function reRunJobs(jobIdsToReRun) {
351
296
  resolve(undefined);
352
297
  });
353
298
  selectedIds = [];
354
- batchReRunOptions = { flow: {}, script: {} };
355
299
  jobsLoader?.loadJobs(true, true);
356
- selectionMode = false;
357
300
  }
358
- async function onReRunFilteredJobs() {
301
+ async function onRerunAllJobsMatchingFilters() {
359
302
  const selectedFilters = getSelectedFilters();
360
303
  selectedIds = [];
361
- loadingSelectedIds = true;
362
- if (filters.job_kinds !== 'runs') {
304
+ const loadingToast = sendUserToast('Loading job ids', 'info');
305
+ if (filters.val.job_kinds !== 'runs') {
363
306
  sendUserToast('Batch re-run is only supported for scripts and flows', true);
307
+ loadingToast.destroy();
308
+ return;
364
309
  }
365
310
  selectedIds = await JobService.listFilteredJobsUuids({
366
311
  ...selectedFilters,
367
312
  jobKinds: 'script,flow'
368
313
  });
369
- selectionMode = 're-run';
314
+ loadingToast.destroy();
315
+ batchRerunOptionsIsOpen = true;
370
316
  }
371
- async function onReRunSelectedJobs() {
317
+ async function onReRunSelectedJobs(batchReRunOptions) {
372
318
  const jobIdsToReRun = selectedIds;
373
319
  askingForConfirmation = {
374
320
  title: `Confirm re-running the selected jobs`,
375
321
  confirmBtnText: `Re-run ${jobIdsToReRun.length} jobs`,
376
322
  type: 'reload',
377
323
  onConfirm: async () => {
378
- await reRunJobs(jobIdsToReRun);
324
+ await reRunJobs(jobIdsToReRun, batchReRunOptions);
379
325
  }
380
326
  };
381
327
  }
382
- function setLookback(lookbackInDays) {
383
- lookback = lookbackInDays;
384
- }
385
328
  async function loadExtra() {
386
329
  await jobsLoader?.loadExtraJobs();
387
330
  }
388
331
  function jobsFilter(f) {
389
- filters.path = null;
390
- filters.user = null;
391
- filters.folder = null;
392
- filters.label = null;
393
- filters.concurrency_key = null;
394
- filters.tag = null;
395
- filters.worker = null;
396
- filters.schedule_path = null;
397
- if (filters.success == f) {
398
- filters.success = null;
399
- }
400
- else {
401
- filters.success = f;
402
- }
403
- filters.job_kinds = 'all';
332
+ filters.val.path = undefined;
333
+ filters.val.user = undefined;
334
+ filters.val.folder = undefined;
335
+ filters.val.label = undefined;
336
+ filters.val.concurrency_key = undefined;
337
+ filters.val.tag = undefined;
338
+ filters.val.worker = undefined;
339
+ filters.val.schedule_path = undefined;
340
+ filters.val.status = filters.val.status == f ? undefined : f;
341
+ filters.val.job_kinds = 'all';
404
342
  }
405
- $effect(() => {
406
- loadingSelectedIds && selectedIds.length && setTimeout(() => (loadingSelectedIds = false), 250);
407
- });
408
343
  $effect(() => {
409
344
  if ($workspaceStore) {
410
345
  untrack(() => {
@@ -420,32 +355,10 @@ let warnJobLimit = $derived.by(() => {
420
355
  extended !== undefined &&
421
356
  extended.jobs.length + extended.obscured_jobs.length >= 1000);
422
357
  });
423
- const bubble = createBubbler();
424
- function selectAll() {
425
- if (!selectionMode)
426
- return;
427
- if (allSelected) {
428
- allSelected = false;
429
- selectedIds = [];
430
- }
431
- else {
432
- allSelected = true;
433
- selectedIds = jobs?.filter(isJobSelectable(selectionMode)).map((j) => j.id) ?? [];
434
- }
435
- }
436
- let allSelected = $derived.by(() => {
437
- return selectionMode && selectedIds.length === selectableJobCount;
438
- });
439
- const selectableJobCount = $derived.by(() => {
440
- if (!selectionMode)
441
- return 0;
442
- return jobs?.filter(isJobSelectable(selectionMode)).length ?? 0;
443
- });
444
- let tableTopBarWidth = $state(0);
445
358
  const smallScreenWidth = 1920;
446
- const verySmallScreenWidth = 1300;
447
359
  let forceCancelInPopup = $state(false);
448
- const warnJobLimitMsg = $derived(`The exact number of concurrent jobs at the beginning of the time range may be incorrect as only the last ${filters.per_page} jobs are taken into account: a job that was started earlier than this limit will not be taken into account`);
360
+ const warnJobLimitMsg = $derived(`The exact number of concurrent jobs at the beginning of the time range may be incorrect as only the last ${perPage.val} jobs are taken into account: a job that was started earlier than this limit will not be taken into account`);
361
+ let manualSelectionMode = $state();
449
362
  </script>
450
363
 
451
364
  <ConfirmationModal
@@ -495,7 +408,7 @@ const warnJobLimitMsg = $derived(`The exact number of concurrent jobs at the beg
495
408
  {#if selectedIds[0] === '-'}
496
409
  <div class="p-4">There is no information available for this job</div>
497
410
  {:else}
498
- <JobRunsPreview blankLink id={selectedIds[0]} workspace={selectedWorkspace} />
411
+ <JobRunsPreview id={selectedIds[0]} workspace={selectedWorkspace} />
499
412
  {/if}
500
413
  {/if}
501
414
  </DrawerContent>
@@ -515,29 +428,27 @@ const warnJobLimitMsg = $derived(`The exact number of concurrent jobs at the beg
515
428
  {:else}
516
429
  <div class="w-full h-screen flex flex-col" bind:clientWidth={innerWidth}>
517
430
  <!-- Header and filters -->
518
- <div class="flex flex-row items-start w-full border-b px-4 gap-8">
519
- <div class="flex flex-row items-center h-full gap-6">
520
- <div class="flex flex-row items-center gap-1">
521
- <h1
522
- class={twMerge(
523
- '!text-2xl font-semibold leading-6 tracking-tight',
524
- $userStore?.operator ? 'pl-10' : ''
525
- )}
526
- >
527
- Runs
528
- </h1>
431
+ <div class="flex flex-row items-start w-full px-4 gap-3 py-4 flex-wrap">
432
+ <div class="flex flex-row items-center gap-6">
433
+ <h1
434
+ class={twMerge(
435
+ '!text-2xl font-semibold leading-6 tracking-tight',
436
+ $userStore?.operator ? 'pl-10' : ''
437
+ )}
438
+ >
439
+ Runs
440
+ </h1>
529
441
 
530
- <Tooltip
531
- documentationLink="https://www.windmill.dev/docs/core_concepts/monitor_past_and_future_runs"
532
- >
533
- All past and schedule executions of scripts and flows, including previews. You only see
534
- your own runs or runs of groups you belong to unless you are an admin.
535
- </Tooltip>
536
- </div>
442
+ <Tooltip
443
+ documentationLink="https://www.windmill.dev/docs/core_concepts/monitor_past_and_future_runs"
444
+ >
445
+ All past and schedule executions of scripts and flows, including previews. You only see
446
+ your own runs or runs of groups you belong to unless you are an admin.
447
+ </Tooltip>
537
448
 
538
449
  <!-- Queue -->
539
450
  <RunsQueue
540
- success={filters.success}
451
+ success={filters.val.status ?? null}
541
452
  {queue_count}
542
453
  {suspended_count}
543
454
  onJobsWaiting={() => {
@@ -550,178 +461,174 @@ const warnJobLimitMsg = $derived(`The exact number of concurrent jobs at the beg
550
461
  />
551
462
  </div>
552
463
 
553
- <div class="py-2 flex items-start gap-x-4 gap-y-2 flex-row grow min-w-0 justify-end">
554
- <!-- Dates -->
555
- <div class="flex flex-row gap-2">
556
- <RunOption label="From" for="min-datetimes">
557
- {#if filters.min_ts || filters.max_ts}
558
- <input
559
- type="text"
560
- class="!text-sm text-primary !bg-surface-secondary h-9 !border-none"
561
- value={filters.min_ts
562
- ? new Date(filters.min_ts).toLocaleString()
563
- : 'zoom x axis to set min'}
564
- disabled
565
- name="min-datetimes"
566
- />
567
- {/if}
568
- <CalendarPicker
569
- clearable={true}
570
- bind:date={filters.min_ts}
571
- on:clear={() => (filters.min_ts = null)}
572
- label="From"
573
- class={filters.min_ts || filters.max_ts
574
- ? ''
575
- : 'relative top-0 bottom-0 left-0 right-0 h-[34px]'}
464
+ <div class="hidden xl:flex gap-2 ml-6">
465
+ <ToggleButtonGroup
466
+ tabListClass="hidden 2xl:flex"
467
+ bind:selected={
468
+ () => filters.val.job_kinds ?? 'runs',
469
+ (v) => (v === 'runs' ? delete filters.val.job_kinds : (filters.val.job_kinds = v))
470
+ }
471
+ >
472
+ {#snippet children({ item })}
473
+ <ToggleButton value="all" label="All" {item} />
474
+ <ToggleButton
475
+ value="runs"
476
+ label="Runs"
477
+ showTooltipIcon
478
+ tooltip="Runs are jobs that have no parent jobs (flows are jobs that are parent of the jobs they start), they have been triggered through the UI, a schedule or webhook"
479
+ {item}
576
480
  />
577
- </RunOption>
578
-
579
- <RunOption label="To" for="max-datetimes">
580
- {#if filters.max_ts || filters.min_ts}
581
- <input
582
- type="text"
583
- class="!text-sm text-primary !bg-surface-secondary h-9 !border-none"
584
- value={filters.max_ts
585
- ? new Date(filters.max_ts).toLocaleString()
586
- : 'zoom x axis to set max'}
587
- name="max-datetimes"
588
- disabled
481
+ <ToggleButton
482
+ value="dependencies"
483
+ label="Deps"
484
+ showTooltipIcon
485
+ tooltip="Deploying a script, flow or an app launch a dependency job that create and then attach the lockfile to the deployed item. This mechanism ensure that logic is always executed with the exact same direct and indirect dependencies."
486
+ {item}
487
+ />
488
+ <ToggleButtonMore
489
+ togglableItems={[
490
+ {
491
+ label: 'Previews',
492
+ value: 'previews',
493
+ tooltip: "Previews are jobs that have been started in the editor as 'Tests'"
494
+ },
495
+ {
496
+ label: 'Sync',
497
+ value: 'deploymentcallbacks',
498
+ tooltip:
499
+ 'Sync jobs that are triggered on every script deployment to sync the workspace with the Git repository configured in the the workspace settings'
500
+ }
501
+ ]}
502
+ {item}
503
+ bind:selected={filters.val.job_kinds}
504
+ />
505
+ {/snippet}
506
+ </ToggleButtonGroup>
507
+ <ToggleButtonGroup
508
+ bind:selected={
509
+ () => filters.val.status ?? 'all',
510
+ (v) => (v === 'all' ? delete filters.val.status : (filters.val.status = v))
511
+ }
512
+ id="status"
513
+ >
514
+ {#snippet children({ item })}
515
+ <ToggleButton value={'all'} label="All" {item} />
516
+ <ToggleButton
517
+ value={'running'}
518
+ tooltip="Running"
519
+ class="whitespace-nowrap"
520
+ icon={CirclePlay}
521
+ iconProps={{
522
+ class:
523
+ 'group-data-[state=on]:text-yellow-600 dark:group-data-[state=on]:text-yellow-400'
524
+ }}
525
+ {item}
526
+ />
527
+ <ToggleButton
528
+ value={'success'}
529
+ tooltip="Success"
530
+ class="whitespace-nowrap"
531
+ icon={CircleCheck}
532
+ iconProps={{
533
+ class:
534
+ 'group-data-[state=on]:text-green-500 dark:group-data-[state=on]:text-green-300'
535
+ }}
536
+ {item}
537
+ />
538
+ <ToggleButton
539
+ value={'failure'}
540
+ tooltip="Failure"
541
+ class="whitespace-nowrap"
542
+ icon={CircleAlert}
543
+ iconProps={{
544
+ class: 'group-data-[state=on]:text-red-500 dark:group-data-[state=on]:text-red-300'
545
+ }}
546
+ {item}
547
+ />
548
+ {#if filters.val.status == 'waiting'}
549
+ <ToggleButton
550
+ value={'waiting'}
551
+ tooltip="Waiting"
552
+ class="whitespace-nowrap"
553
+ icon={Hourglass}
554
+ selectedColor="blue"
555
+ {item}
556
+ />
557
+ {:else if filters.val.status == 'suspended'}
558
+ <ToggleButton
559
+ value={'suspended'}
560
+ tooltip="Suspended"
561
+ class="whitespace-nowrap"
562
+ icon={Hourglass}
563
+ selectedColor="purple"
564
+ {item}
589
565
  />
590
566
  {/if}
591
- <CalendarPicker
592
- clearable={true}
593
- on:clear={() => (filters.max_ts = null)}
594
- bind:date={filters.max_ts}
595
- label="To"
596
- class={filters.min_ts || filters.max_ts
597
- ? ''
598
- : 'relative top-0 bottom-0 left-0 right-0 h-[34px]'}
599
- />
600
- </RunOption>
601
-
602
- {#if filters.min_ts || filters.max_ts}
603
- <RunOption label="Reset" for="reset" noLabel>
604
- <Button variant="default" size="xs" onClick={reset} btnClasses="h-9">Reset</Button>
605
- </RunOption>
606
- {/if}
607
- </div>
608
-
609
- <!-- Filters 1 -->
610
- <div class="flex flex-row gap-2">
611
- <RunsFilter
612
- bind:allowWildcards={filters.allow_wildcards}
613
- bind:user={filters.user}
614
- bind:folder={filters.folder}
615
- bind:label={filters.label}
616
- bind:concurrencyKey={filters.concurrency_key}
617
- bind:tag={filters.tag}
618
- bind:worker={filters.worker}
619
- bind:showSkipped={filters.show_skipped}
620
- bind:path={filters.path}
621
- bind:success={filters.success}
622
- bind:jobTriggerKind={filters.job_trigger_kind}
623
- bind:argError
624
- bind:resultError
625
- bind:jobKindsCat={filters.job_kinds}
626
- bind:allWorkspaces={filters.all_workspaces}
627
- bind:schedulePath={filters.schedule_path}
628
- bind:argFilter={filters.arg}
629
- bind:resultFilter={filters.result}
630
- on:change={reloadJobsWithoutFilterError}
631
- on:successChange={(e) => {
632
- if (e.detail == 'running' && filters.max_ts != undefined) {
633
- filters.max_ts = null
634
- }
635
- }}
636
- {usernames}
637
- {folders}
638
- {paths}
639
- mobile={innerWidth < verySmallScreenWidth}
640
- small={innerWidth < smallScreenWidth}
641
- calendarSmall={!filters.min_ts && !filters.max_ts}
642
- />
643
- </div>
567
+ {/snippet}
568
+ </ToggleButtonGroup>
644
569
  </div>
570
+
571
+ <TimeframeSelect
572
+ wrapperClasses="ml-auto"
573
+ onClick={() => jobsLoader?.loadJobs(true)}
574
+ loading={jobsLoader?.loading}
575
+ items={runsTimeframes}
576
+ bind:value={_timeframe.val}
577
+ />
578
+ <FilterSearchbar
579
+ class="flex-1 relative max-w-[34rem] min-w-[18rem] {ButtonType.UnifiedMinHeightClasses.md}"
580
+ schema={runsFilterSearchbarSchema}
581
+ presets={buildRunsFilterPresets({ isSuperadmin: !!$superadmin })}
582
+ bind:value={filters.val}
583
+ placeholder="Filter runs..."
584
+ />
645
585
  </div>
646
586
 
647
587
  <!-- Graph -->
648
- <div class="p-2 px-4 pt-8 w-full border-b">
649
- <div class="relative z-10">
650
- <div class="absolute left-0 -top-7 flex flex-row gap-2 items-center min-w-24">
651
- <ToggleButtonGroup
652
- selected={graph}
653
- on:selected={({ detail }) => {
654
- graph = detail
655
- graphIsRunsChart = graph === 'RunChart'
656
- }}
657
- >
658
- {#snippet children({ item })}
659
- <ToggleButton value="RunChart" label="Duration" {item} />
660
- <ToggleButton
661
- {item}
662
- value="ConcurrencyChart"
663
- label="Concurrency"
664
- icon={warnJobLimit ? TriangleAlert : undefined}
665
- tooltip={warnJobLimit ? warnJobLimitMsg : undefined}
666
- />
588
+ <div class="p-2 px-4 bg-surface-tertiary mx-4 border rounded-md">
589
+ <div class="relative z-10 mb-2 flex gap-2">
590
+ <Tabs bind:selected={graph}>
591
+ <Tab value="RunChart" label="Duration" />
592
+ <Tab value="ConcurrencyChart" label="Concurrency">
593
+ {#snippet extra()}
594
+ {#if warnJobLimit}
595
+ <Tooltip Icon={TriangleAlertIcon}>{warnJobLimitMsg}</Tooltip>
596
+ {/if}
667
597
  {/snippet}
668
- </ToggleButtonGroup>
598
+ </Tab>
599
+ </Tabs>
669
600
 
670
- {#if !graphIsRunsChart}
671
- <DropdownSelect
672
- items={[
673
- {
674
- displayName: 'None',
675
- action: () => setLookback(0),
676
- id: '0'
677
- },
678
- {
679
- displayName: '1 day',
680
- action: () => setLookback(1),
681
- id: '1'
682
- },
683
- {
684
- displayName: '3 days',
685
- action: () => setLookback(3),
686
- id: '3'
687
- },
688
- {
689
- displayName: '7 days',
690
- action: () => setLookback(7),
691
- id: '7'
692
- }
693
- ]}
694
- selected={lookback.toString()}
695
- selectedDisplayName={`${lookback} days lookback`}
696
- >
697
- {#snippet extraLabel()}
698
- <TooltipV2>
699
- {#snippet text()}
700
- How far behind the min datetime to start considering jobs for the concurrency
701
- graph. Change this value to include jobs started before the set time window for
702
- the computation of the graph
703
- {/snippet}
704
- </TooltipV2>
705
- {/snippet}
706
- </DropdownSelect>
707
- {/if}
708
- </div>
601
+ {#if graph !== 'RunChart'}
602
+ <Select
603
+ class="ml-2"
604
+ bind:value={lookback}
605
+ items={[
606
+ { label: 'None', value: 0 },
607
+ { label: '1 day', value: 1 },
608
+ { label: '3 days', value: 3 },
609
+ { label: '7 days', value: 7 }
610
+ ]}
611
+ transformInputSelectedText={(_, v) => `${pluralize(v, 'day')} lookback`}
612
+ tooltip={'How far behind the min datetime to start considering jobs for the concurrency graph. Change this value to include jobs started before the set time window for the computation of the graph'}
613
+ />
614
+ {:else if !lastFetchWentToEnd}
615
+ <Button wrapperClasses="ml-2" unifiedSize="md" onClick={() => jobsLoader.loadExtraJobs()}>
616
+ Load more
617
+ <Tooltip>There are more jobs to load</Tooltip>
618
+ </Button>
619
+ {/if}
709
620
  </div>
710
621
  {#if graph === 'RunChart'}
622
+ {@const manualTimeframe = timeframe.type === 'manual' ? timeframe : undefined}
711
623
  <RunChart
712
- {lastFetchWentToEnd}
713
624
  bind:selectedIds
714
- canSelect={!selectionMode}
715
- minTimeSet={filters.min_ts}
716
- maxTimeSet={filters.max_ts}
717
- totalRowsFetched={jobs?.length ?? 0}
718
- maxIsNow={filters.max_ts == undefined}
719
- onLoadExtra={loadExtra}
625
+ canSelect
626
+ minTimeSet={manualTimeframe?.minTs}
627
+ maxTimeSet={manualTimeframe?.maxTs}
628
+ maxIsNow={manualTimeframe?.maxTs == undefined}
720
629
  jobs={completedJobs}
721
630
  onZoom={async (zoom) => {
722
- filters.min_ts = zoom.min.toISOString()
723
- filters.max_ts = zoom.max.toISOString()
724
- manualDatePicker?.resetChoice()
631
+ _timeframe.val = buildManualTimeframe(zoom.min.toISOString(), zoom.max.toISOString())
725
632
  jobsLoader?.loadJobs(true)
726
633
  }}
727
634
  onPointClicked={(ids) => {
@@ -730,197 +637,188 @@ const warnJobLimitMsg = $derived(`The exact number of concurrent jobs at the beg
730
637
  />
731
638
  {:else if graph === 'ConcurrencyChart'}
732
639
  <ConcurrentJobsChart
733
- minTimeSet={filters.min_ts}
734
- maxTimeSet={filters.max_ts}
735
- maxIsNow={filters.max_ts == undefined}
640
+ minTimeSet={manualTimeframe?.minTs}
641
+ maxTimeSet={manualTimeframe?.maxTs}
642
+ maxIsNow={manualTimeframe?.maxTs == undefined}
736
643
  {extendedJobs}
737
644
  onZoom={async (zoom) => {
738
- filters.min_ts = zoom.min.toISOString()
739
- filters.max_ts = zoom.max.toISOString()
645
+ _timeframe.val = buildManualTimeframe(zoom.min.toISOString(), zoom.max.toISOString())
740
646
  jobsLoader?.loadJobs(true)
741
647
  }}
742
648
  />
743
649
  {/if}
744
650
  </div>
745
651
 
746
- <div class="grow min-h-0">
652
+ <div class="grow min-h-0 bottom-splitpane-wrapper">
747
653
  <Splitpanes>
748
654
  <Pane minSize={40}>
749
- <div class="flex flex-col h-full">
750
- <!-- Runs table top bar -->
751
- <div
752
- class="flex flex-row gap-4 items-center px-2 py-1 grow-0 justify-between"
753
- bind:clientWidth={tableTopBarWidth}
754
- >
755
- <div class="flex flex-row gap-4 items-center">
756
- {#if selectionMode && selectableJobCount}
757
- <div class="flex flex-row items-center font-semibold text-sm">
758
- <div class="px-2">
759
- <input
760
- onfocus={bubble('focus')}
761
- type="checkbox"
762
- checked={allSelected}
763
- id="select-all"
764
- class={twMerge(
765
- 'cursor-pointer',
766
- allSelected ? 'bg-blue-50 dark:bg-blue-900/50' : '',
767
- 'flex flex-row items-center p-2 pr-4 top-0 font-semibold text-sm'
768
- )}
769
- onclick={selectAll}
770
- />
771
- </div>
772
- <label
773
- class="cursor-pointer whitespace-nowrap text-xs text-emphasis font-semibold"
774
- for="select-all">Select all</label
775
- >
655
+ <div class="h-full flex">
656
+ <div class="flex flex-col flex-1 m-4 mt-2 mr-2">
657
+ <!-- Runs table. Add overflow-hidden because scroll is handled inside the runs table based on this wrapper height -->
658
+ <div class="grow min-h-0 overflow-y-hidden overflow-x-auto">
659
+ {#if jobs}
660
+ <RunsTable
661
+ {jobs}
662
+ externalJobs={externalJobs ?? []}
663
+ omittedObscuredJobs={extendedJobs?.omitted_obscured_jobs ?? false}
664
+ showExternalJobs={graph !== 'RunChart'}
665
+ activeLabel={filters.val.label}
666
+ {lastFetchWentToEnd}
667
+ bind:selectedIds
668
+ bind:selectedWorkspace
669
+ on:loadExtra={loadExtra}
670
+ on:filterByPath={filterByPath}
671
+ on:filterByUser={filterByUser}
672
+ on:filterByFolder={filterByFolder}
673
+ on:filterByLabel={filterByLabel}
674
+ on:filterByConcurrencyKey={filterByConcurrencyKey}
675
+ on:filterByTag={filterByTag}
676
+ on:filterBySchedule={filterBySchedule}
677
+ on:filterByWorker={filterByWorker}
678
+ bind:this={runsTable}
679
+ perPage={perPage.val}
680
+ bind:batchRerunOptionsIsOpen
681
+ onCancelJobs={onCancelSelectedJobs}
682
+ {manualSelectionMode}
683
+ ></RunsTable>
684
+ {:else}
685
+ <div class="gap-1 flex flex-col">
686
+ {#each new Array(8) as _}
687
+ <Skeleton layout={[[3]]} />
688
+ {/each}
776
689
  </div>
777
690
  {/if}
778
-
779
- <RunsBatchActionsDropdown
780
- isLoading={loadingSelectedIds}
781
- {selectionMode}
782
- selectionCount={selectedIds.length}
783
- {onSetSelectionMode}
784
- {onCancelFilteredJobs}
785
- {onCancelSelectedJobs}
786
- {onReRunFilteredJobs}
787
- {onReRunSelectedJobs}
788
- small={tableTopBarWidth < 800}
789
- />
790
691
  </div>
791
-
792
- <div class="flex flex-row gap-4 items-center">
793
- {#if !filters.job_trigger_kind}
794
- <div class="flex flex-row gap-1 items-center">
795
- <Toggle
796
- id="cron-schedules"
797
- bind:checked={filters.show_schedules}
798
- options={tableTopBarWidth < 800 || selectionMode
799
- ? {}
800
- : { right: 'Schedules' }}
801
- />
802
- <span title="Schedules">
803
- <Calendar size="14" />
804
- </span>
805
- </div>
806
- {/if}
807
-
808
- <div class="flex flex-row gap-1 items-center">
809
- <Toggle
810
- size="sm"
811
- bind:checked={filters.show_future_jobs}
812
- id="planned-later"
813
- options={tableTopBarWidth < 800 || selectionMode
814
- ? {}
815
- : { right: 'Planned later' }}
692
+ <div
693
+ class="bg-surface-tertiary border rounded-b-md flex text-xs px-2 py-1 items-center gap-4"
694
+ >
695
+ {#if !manualSelectionMode}
696
+ <DropdownV2
697
+ btnText="Batch actions"
698
+ size="xs"
699
+ items={[
700
+ {
701
+ displayName: 'Cancel jobs',
702
+ action: () => ((manualSelectionMode = 'cancel'), (selectedIds = []))
703
+ },
704
+ {
705
+ displayName: 'Re-run jobs',
706
+ action: () => {
707
+ manualSelectionMode = 'rerun'
708
+ selectedIds = []
709
+ batchRerunOptionsIsOpen = true
710
+ }
711
+ },
712
+ {
713
+ displayName: 'Cancel all jobs matching filters',
714
+ action: () => onCancelAllJobsMatchingFilters()
715
+ },
716
+ {
717
+ displayName: 'Re-run all jobs matching filters',
718
+ action: () => onRerunAllJobsMatchingFilters()
719
+ }
720
+ ]}
816
721
  />
817
- <span title="Planned later">
818
- <Clock size={14} />
819
- </span>
820
- </div>
821
- <div class="flex flex-row gap-2 items-center">
822
- <ManuelDatePicker
823
- on:loadJobs={() => {
824
- jobsLoader?.loadJobs(true)
722
+ {:else}
723
+ <Button
724
+ size="xs"
725
+ destructive
726
+ onClick={() => {
727
+ manualSelectionMode = undefined
728
+ batchRerunOptionsIsOpen = false
825
729
  }}
826
- bind:minTs={filters.min_ts}
827
- bind:maxTs={filters.max_ts}
828
- bind:selectedManualDate
829
- {loading}
830
- bind:this={manualDatePicker}
831
- numberOfLastJobsToFetch={filters.per_page}
832
- />
833
- <Toggle
834
- size="sm"
835
- bind:checked={autoRefresh}
836
- on:change={() => {
837
- localStorage.setItem('auto_refresh_in_runs', autoRefresh ? 'true' : 'false')
838
- }}
839
- options={{ right: 'Auto-refresh' }}
840
- textClass="whitespace-nowrap"
841
- />
842
- </div>
843
- </div>
844
- </div>
845
-
846
- <!-- Runs table. Add overflow-hidden because scroll is handled inside the runs table based on this wrapper height -->
847
- <div class="grow min-h-0 overflow-y-hidden overflow-x-auto">
848
- {#if jobs}
849
- <RunsTable
850
- {jobs}
851
- externalJobs={externalJobs ?? []}
852
- omittedObscuredJobs={extendedJobs?.omitted_obscured_jobs ?? false}
853
- showExternalJobs={!graphIsRunsChart}
854
- activeLabel={filters.label}
855
- {selectionMode}
856
- {lastFetchWentToEnd}
857
- bind:selectedIds
858
- bind:selectedWorkspace
859
- on:loadExtra={loadExtra}
860
- on:filterByPath={filterByPath}
861
- on:filterByUser={filterByUser}
862
- on:filterByFolder={filterByFolder}
863
- on:filterByLabel={filterByLabel}
864
- on:filterByConcurrencyKey={filterByConcurrencyKey}
865
- on:filterByTag={filterByTag}
866
- on:filterBySchedule={filterBySchedule}
867
- on:filterByWorker={filterByWorker}
868
- bind:this={runsTable}
869
- perPage={filters.per_page}
870
- ></RunsTable>
871
- {:else}
872
- <div class="gap-1 flex flex-col">
873
- {#each new Array(8) as _}
874
- <Skeleton layout={[[3]]} />
875
- {/each}
876
- </div>
877
- {/if}
878
- </div>
879
- <div
880
- class="bg-surface-secondary border-t flex text-xs px-2 py-1 items-center justify-end gap-2"
881
- >
882
- Per page:
883
- <Select
884
- class="w-20"
885
- bind:value={
886
- () => filters.per_page,
887
- (newPerPage) => {
888
- filters.per_page = newPerPage
889
- if (newPerPage > (jobs?.length ?? 1000)) loadExtra()
730
+ >
731
+ Exit selection mode
732
+ </Button>
733
+ {/if}
734
+ <div class="flex-1"></div>
735
+ <Toggle
736
+ size="xs"
737
+ bind:checked={autoRefresh.val}
738
+ options={{ right: 'Auto-refresh' }}
739
+ textClass="whitespace-nowrap"
740
+ />
741
+ <Select
742
+ class="w-24"
743
+ bind:value={
744
+ () => perPage.val,
745
+ (newPerPage) => {
746
+ perPage.val = newPerPage
747
+ if (newPerPage > (jobs?.length ?? 1000)) loadExtra()
748
+ }
890
749
  }
891
- }
892
- onCreateItem={(v) => (filters.per_page = parseInt(v))}
893
- items={[
894
- { value: 25, label: '25' },
895
- { value: 100, label: '100' },
896
- { value: 1000, label: '1000' },
897
- { value: 10000, label: '10000' }
898
- ]}
899
- />
750
+ onCreateItem={(v) => (perPage.val = parseInt(v))}
751
+ items={[
752
+ { value: 25, label: '25' },
753
+ { value: 100, label: '100' },
754
+ { value: 1000, label: '1000' },
755
+ { value: 10000, label: '10000' }
756
+ ]}
757
+ transformInputSelectedText={(_, v) => `${v} / page`}
758
+ />
759
+ </div>
900
760
  </div>
901
761
  </div>
902
762
  </Pane>
903
- <AnimatedPane size={40} minSize={15} class="flex flex-col" opened={selectedIds.length > 0}>
904
- {#if selectionMode === 're-run'}
905
- <BatchReRunOptionsPane {selectedIds} bind:options={batchReRunOptions} />
906
- {:else if selectedIds.length === 1}
907
- {#if selectedIds[0] === '-'}
908
- <div class="p-4">There is no information available for this job</div>
909
- {:else}
910
- <JobRunsPreview
911
- on:filterByConcurrencyKey={filterByConcurrencyKey}
912
- on:filterByWorker={filterByWorker}
913
- id={selectedIds[0]}
914
- workspace={selectedWorkspace}
763
+ <AnimatedPane
764
+ size={40}
765
+ minSize={15}
766
+ class="flex flex-col"
767
+ opened={selectedIds.length > 0 || !!manualSelectionMode}
768
+ >
769
+ <div class="mt-12 overflow-y-auto pr-4 ml-2 relative flex-1">
770
+ {#if manualSelectionMode === 'cancel'}
771
+ <div
772
+ class="rounded-md bg-surface-tertiary border absolute inset-0 mb-4 flex flex-col items-center justify-center"
773
+ >
774
+ <Button
775
+ destructive
776
+ variant="accent"
777
+ disabled={!selectedIds.length}
778
+ onClick={() => onCancelSelectedJobs(selectedIds)}
779
+ >
780
+ Cancel {selectedIds.length} jobs
781
+ </Button>
782
+ </div>
783
+ {:else if batchRerunOptionsIsOpen}
784
+ <BatchReRunOptionsPane
785
+ {selectedIds}
786
+ onCancel={() => (
787
+ (batchRerunOptionsIsOpen = false),
788
+ (manualSelectionMode = undefined)
789
+ )}
790
+ onConfirm={async (options) => {
791
+ await onReRunSelectedJobs(options)
792
+ }}
915
793
  />
794
+ {:else if selectedIds.length === 1}
795
+ {#if selectedIds[0] === '-'}
796
+ <div class="p-4">There is no information available for this job</div>
797
+ {:else}
798
+ <JobRunsPreview
799
+ id={selectedIds[0]}
800
+ workspace={selectedWorkspace}
801
+ on:filterByConcurrencyKey={filterByConcurrencyKey}
802
+ on:filterByWorker={filterByWorker}
803
+ />
804
+ {/if}
805
+ {:else if selectedIds.length > 1}
806
+ <div
807
+ class="rounded-md bg-surface-tertiary border absolute inset-0 mb-4 flex items-center justify-center"
808
+ >
809
+ <div class="text-xs m-4"> {selectedIds.length} jobs selected</div>
810
+ </div>
916
811
  {/if}
917
- {:else if selectedIds.length > 1}
918
- <div class="text-xs m-4"
919
- >There are {selectedIds.length} jobs selected. Choose 1 to see detailed information</div
920
- >
921
- {/if}
812
+ </div>
922
813
  </AnimatedPane>
923
814
  </Splitpanes>
924
815
  </div>
925
816
  </div>
926
817
  {/if}
818
+
819
+ <style>
820
+ :global(.bottom-splitpane-wrapper .splitpanes__splitter) {
821
+ background-color: transparent !important;
822
+ border: none !important;
823
+ /* opacity: 0 !important; */
824
+ }</style>