windmill-components 1.537.1 → 1.542.4

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 (273) hide show
  1. package/package/components/AIProviderPicker.svelte +181 -0
  2. package/package/components/AIProviderPicker.svelte.d.ts +15 -0
  3. package/package/components/ArgInfo.svelte +2 -2
  4. package/package/components/ArgInput.svelte +35 -9
  5. package/package/components/ArgInput.svelte.d.ts +3 -3
  6. package/package/components/AssignableTagsInner.svelte +89 -3
  7. package/package/components/ConcurrentJobsChart.svelte +36 -48
  8. package/package/components/ConcurrentJobsChart.svelte.d.ts +8 -20
  9. package/package/components/CustomPopover.svelte.d.ts +1 -1
  10. package/package/components/DropdownSelect.svelte +26 -0
  11. package/package/components/DropdownSelect.svelte.d.ts +11 -0
  12. package/package/components/DropdownV2Inner.svelte +1 -1
  13. package/package/components/{DynSelect.svelte → DynamicInput.svelte} +47 -15
  14. package/package/components/DynamicInput.svelte.d.ts +11 -0
  15. package/package/components/EditableSchemaForm.svelte +119 -95
  16. package/package/components/EditableSchemaForm.svelte.d.ts +4 -4
  17. package/package/components/Editor.svelte +86 -93
  18. package/package/components/Editor.svelte.d.ts +4 -3
  19. package/package/components/EditorBar.svelte +2 -5
  20. package/package/components/FlowBuilder.svelte +3 -3
  21. package/package/components/FlowLogRow.svelte +64 -0
  22. package/package/components/FlowLogRow.svelte.d.ts +15 -0
  23. package/package/components/FlowLogViewer.svelte +406 -373
  24. package/package/components/FlowLogViewer.svelte.d.ts +5 -1
  25. package/package/components/FlowLogViewerWrapper.svelte +44 -1
  26. package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
  27. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  28. package/package/components/FlowStatusViewerInner.svelte +34 -3
  29. package/package/components/FolderPicker.svelte +1 -1
  30. package/package/components/InputTransformForm.svelte +20 -10
  31. package/package/components/JobArgs.svelte +1 -1
  32. package/package/components/JobLoader.svelte.d.ts +1 -1
  33. package/package/components/JobStatus.svelte +2 -0
  34. package/package/components/LogSnippetViewer.svelte +3 -3
  35. package/package/components/LogSnippetViewer.svelte.d.ts +1 -1
  36. package/package/components/LogViewer.svelte +87 -71
  37. package/package/components/LogViewer.svelte.d.ts +1 -0
  38. package/package/components/Path.svelte +7 -1
  39. package/package/components/Path.svelte.d.ts +1 -1
  40. package/package/components/PrefixedInput.svelte +120 -0
  41. package/package/components/PrefixedInput.svelte.d.ts +8 -0
  42. package/package/components/QueuePosition.svelte +81 -0
  43. package/package/components/QueuePosition.svelte.d.ts +8 -0
  44. package/package/components/ResourceNarrowing.svelte +13 -0
  45. package/package/components/ResourceNarrowing.svelte.d.ts +6 -0
  46. package/package/components/ResourceTypePicker.svelte +49 -74
  47. package/package/components/RunChart.svelte +74 -89
  48. package/package/components/RunChart.svelte.d.ts +10 -22
  49. package/package/components/S3FilePicker.svelte +1 -1
  50. package/package/components/SchemaForm.svelte.d.ts +2 -2
  51. package/package/components/ScriptBuilder.svelte +2 -1
  52. package/package/components/ScriptEditor.svelte +4 -3
  53. package/package/components/ScriptEditor.svelte.d.ts +2 -1
  54. package/package/components/ServiceLogsInner.svelte +1 -1
  55. package/package/components/ShareModal.svelte.d.ts +1 -1
  56. package/package/components/SimpleEditor.svelte +4 -67
  57. package/package/components/StringTypeNarrowing.svelte +5 -10
  58. package/package/components/TemplateEditor.svelte +2 -16
  59. package/package/components/TimeAgo.svelte +1 -1
  60. package/package/components/TimeAgo.svelte.d.ts +1 -0
  61. package/package/components/Toggle.svelte +2 -1
  62. package/package/components/Toggle.svelte.d.ts +2 -1
  63. package/package/components/WorkerRepl.svelte +1 -1
  64. package/package/components/apps/components/display/AppNavbarItem.svelte +2 -1
  65. package/package/components/apps/components/display/table/AppAggridTable.svelte +44 -48
  66. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +101 -19
  67. package/package/components/apps/components/display/table/SyncColumnDefs.svelte.d.ts +5 -2
  68. package/package/components/apps/components/display/table/utils.js +36 -5
  69. package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +10 -5
  70. package/package/components/apps/editor/AppEditor.svelte +4 -3
  71. package/package/components/apps/editor/AppEditorHeader.svelte +0 -1
  72. package/package/components/apps/editor/GridViewer.svelte.d.ts +11 -4
  73. package/package/components/apps/editor/SettingsPanel.svelte +2 -2
  74. package/package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
  75. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  76. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  77. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  78. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +26 -3
  79. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -1
  80. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +13 -5
  81. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +30 -11
  82. package/package/components/assets/JobAssetsViewer.svelte +28 -24
  83. package/package/components/auditLogs/AuditLogsTable.svelte +2 -6
  84. package/package/components/chartjs-wrappers/Chart.svelte.d.ts +14 -7
  85. package/package/components/common/OnChange.svelte.d.ts +11 -4
  86. package/package/components/common/badge/Badge.svelte +9 -2
  87. package/package/components/common/badge/Badge.svelte.d.ts +2 -1
  88. package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -1
  89. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +5 -4
  90. package/package/components/common/drawer/Disposable.svelte +9 -11
  91. package/package/components/common/drawer/Drawer.svelte +3 -4
  92. package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
  93. package/package/components/common/menu/MenuItem.svelte.d.ts +2 -2
  94. package/package/components/common/modal/Modal.svelte.d.ts +1 -1
  95. package/package/components/common/tabs/TabContent.svelte +2 -7
  96. package/package/components/common/tabs/TabContent.svelte.d.ts +5 -27
  97. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +9 -3
  98. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
  99. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +8 -4
  100. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
  101. package/package/components/copilot/MetadataGen.svelte +1 -1
  102. package/package/components/copilot/chat/AIChatManager.svelte.js +24 -102
  103. package/package/components/copilot/chat/AssistantMessage.svelte +0 -4
  104. package/package/components/copilot/chat/anthropic.d.ts +15 -0
  105. package/package/components/copilot/chat/anthropic.js +208 -0
  106. package/package/components/copilot/chat/api/apiTools.d.ts +2 -2
  107. package/package/components/copilot/chat/api/apiTools.js +10 -7
  108. package/package/components/copilot/chat/api/core.d.ts +1 -1
  109. package/package/components/copilot/chat/api/core.js +7 -2
  110. package/package/components/copilot/chat/ask/core.d.ts +1 -1
  111. package/package/components/copilot/chat/ask/core.js +7 -2
  112. package/package/components/copilot/chat/flow/core.d.ts +1 -1
  113. package/package/components/copilot/chat/flow/core.js +14 -4
  114. package/package/components/copilot/chat/monaco-adapter.d.ts +6 -5
  115. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  116. package/package/components/copilot/chat/navigator/core.js +7 -2
  117. package/package/components/copilot/chat/script/CodeDisplay.svelte +10 -111
  118. package/package/components/copilot/chat/script/core.d.ts +5 -4
  119. package/package/components/copilot/chat/script/core.js +131 -19
  120. package/package/components/copilot/chat/shared.d.ts +7 -7
  121. package/package/components/copilot/lib.d.ts +29 -8
  122. package/package/components/copilot/lib.js +199 -24
  123. package/package/components/flows/content/FlowInput.svelte +5 -5
  124. package/package/components/flows/content/FlowModuleComponent.svelte +5 -2
  125. package/package/components/flows/content/FlowModuleEarlyStop.svelte +47 -17
  126. package/package/components/flows/content/FlowModuleSleep.svelte +4 -1
  127. package/package/components/flows/content/FlowModuleSuspend.svelte +0 -1
  128. package/package/components/flows/content/FlowModuleTimeout.svelte +50 -10
  129. package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +1 -0
  130. package/package/components/flows/content/FlowRetries.svelte +108 -3
  131. package/package/components/flows/content/FlowRetries.svelte.d.ts +3 -2
  132. package/package/components/flows/flowInfers.js +8 -35
  133. package/package/components/flows/flowStore.d.ts +45 -1
  134. package/package/components/flows/flowStore.js +1 -1
  135. package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
  136. package/package/components/flows/map/FlowModuleSchemaItem.svelte +61 -54
  137. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -1
  138. package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +1 -1
  139. package/package/components/flows/map/InsertModuleButton.svelte +1 -0
  140. package/package/components/flows/map/InsertModuleInner.svelte +12 -15
  141. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +10 -9
  142. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +1 -1
  143. package/package/components/git_sync/DetectionFlow.svelte +15 -17
  144. package/package/components/git_sync/GitSyncContext.svelte.js +1 -1
  145. package/package/components/git_sync/GitSyncRepositoryCard.svelte +0 -1
  146. package/package/components/graph/graphBuilder.svelte.d.ts +5 -1
  147. package/package/components/graph/renderers/edges/BaseEdge.svelte +9 -1
  148. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +4 -1
  149. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +2 -3
  150. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +2 -3
  151. package/package/components/graph/renderers/triggers/TriggerButton.svelte.d.ts +1 -1
  152. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +3 -1
  153. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte +34 -24
  154. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte.d.ts +1 -2
  155. package/package/components/home/ItemsList.svelte +17 -13
  156. package/package/components/home/TreeView.svelte +21 -27
  157. package/package/components/home/TreeView.svelte.d.ts +2 -29
  158. package/package/components/home/TreeViewRoot.svelte +11 -23
  159. package/package/components/home/TreeViewRoot.svelte.d.ts +15 -13
  160. package/package/components/icons/GitIcon.svelte +10 -2
  161. package/package/components/icons/GitIcon.svelte.d.ts +1 -0
  162. package/package/components/meltComponents/MeltButton.svelte.d.ts +1 -1
  163. package/package/components/meltComponents/Popover.svelte +23 -3
  164. package/package/components/meltComponents/Popover.svelte.d.ts +2 -1
  165. package/package/components/monacoLanguagesOptions.d.ts +3 -0
  166. package/package/components/monacoLanguagesOptions.js +109 -0
  167. package/package/components/propertyPicker/ObjectViewer.svelte +7 -2
  168. package/package/components/propertyPicker/PropPicker.svelte +1 -1
  169. package/package/components/propertyPicker/utils.js +14 -7
  170. package/package/components/runs/JobRunsPreview.svelte +212 -177
  171. package/package/components/runs/JobsLoader.svelte +2 -2
  172. package/package/components/runs/JobsLoader.svelte.d.ts +1 -1
  173. package/package/components/runs/NoWorkerWithTagWarning.svelte +18 -5
  174. package/package/components/runs/RunBadges.svelte +100 -0
  175. package/package/components/runs/RunBadges.svelte.d.ts +12 -0
  176. package/package/components/runs/RunLabels.svelte +86 -0
  177. package/package/components/runs/RunLabels.svelte.d.ts +10 -0
  178. package/package/components/runs/RunOption.svelte +20 -0
  179. package/package/components/runs/RunOption.svelte.d.ts +10 -0
  180. package/package/components/runs/RunRow.svelte +239 -151
  181. package/package/components/runs/RunRow.svelte.d.ts +12 -9
  182. package/package/components/runs/RunsBatchActionsDropdown.svelte +13 -17
  183. package/package/components/runs/RunsBatchActionsDropdown.svelte.d.ts +5 -18
  184. package/package/components/runs/RunsFilter.svelte +369 -243
  185. package/package/components/runs/RunsFilter.svelte.d.ts +2 -0
  186. package/package/components/runs/RunsQueue.svelte +96 -25
  187. package/package/components/runs/RunsQueue.svelte.d.ts +7 -21
  188. package/package/components/runs/RunsTable.svelte +62 -71
  189. package/package/components/runs/RunsTable.svelte.d.ts +2 -1
  190. package/package/components/runs/runs-grid.css +95 -0
  191. package/package/components/schema/EditableSchemaDrawer.svelte +12 -12
  192. package/package/components/schema/FlowPropertyEditor.svelte +197 -206
  193. package/package/components/schema/PropertyEditor.svelte +33 -35
  194. package/package/components/schema/SchemaFormDND.svelte.d.ts +2 -2
  195. package/package/components/search/GlobalSearchModal.svelte +8 -1
  196. package/package/components/select/DraggableTags.svelte.d.ts +17 -7
  197. package/package/components/select/MultiSelect.svelte.d.ts +21 -11
  198. package/package/components/select/Select.svelte +2 -1
  199. package/package/components/select/Select.svelte.d.ts +25 -13
  200. package/package/components/select/SelectDropdown.svelte.d.ts +14 -7
  201. package/package/components/settings/TokenDisplay.svelte +1 -1
  202. package/package/components/sidebar/OperatorMenu.svelte +5 -0
  203. package/package/components/sidebar/SidebarContent.svelte +48 -2
  204. package/package/components/sidebar/WorkspaceMenu.svelte +116 -17
  205. package/package/components/toast.js +6 -3
  206. package/package/components/triggers/AddTriggersButton.svelte +7 -6
  207. package/package/components/triggers/CaptureWrapper.svelte +19 -3
  208. package/package/components/triggers/TriggerLabel.svelte +8 -0
  209. package/package/components/triggers/TriggerTokens.svelte +1 -1
  210. package/package/components/triggers/TriggersEditor.svelte +9 -5
  211. package/package/components/triggers/TriggersTable.svelte +2 -2
  212. package/package/components/triggers/TriggersWrapper.svelte +16 -5
  213. package/package/components/triggers/TriggersWrapper.svelte.d.ts +3 -19
  214. package/package/components/{details/EmailTriggerCaptures.svelte → triggers/email/DefaultEmailCapture.svelte} +5 -5
  215. package/package/components/{details/EmailTriggerCaptures.svelte.d.ts → triggers/email/DefaultEmailCapture.svelte.d.ts} +4 -4
  216. package/package/components/{details/EmailTriggerConfigSection.svelte → triggers/email/DefaultEmailConfigSection.svelte} +24 -14
  217. package/package/components/triggers/email/DefaultEmailConfigSection.svelte.d.ts +13 -0
  218. package/package/components/triggers/email/DefaultEmailPanel.svelte +71 -0
  219. package/package/components/triggers/email/DefaultEmailPanel.svelte.d.ts +11 -0
  220. package/package/components/triggers/email/EmailCapture.svelte +39 -0
  221. package/package/components/triggers/email/EmailCapture.svelte.d.ts +43 -0
  222. package/package/components/triggers/email/EmailTriggerEditor.svelte +20 -0
  223. package/package/components/triggers/email/EmailTriggerEditor.svelte.d.ts +11 -0
  224. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte +133 -0
  225. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte.d.ts +14 -0
  226. package/package/components/triggers/email/EmailTriggerEditorInner.svelte +335 -0
  227. package/package/components/triggers/email/EmailTriggerEditorInner.svelte.d.ts +22 -0
  228. package/package/components/triggers/email/EmailTriggerPanel.svelte +61 -0
  229. package/package/components/triggers/email/EmailTriggerPanel.svelte.d.ts +14 -0
  230. package/package/components/triggers/email/utils.d.ts +4 -0
  231. package/package/components/triggers/email/utils.js +52 -0
  232. package/package/components/triggers/http/RouteEditorConfigSection.svelte +1 -1
  233. package/package/components/triggers/http/utils.js +1 -1
  234. package/package/components/triggers/triggers.svelte.d.ts +1 -0
  235. package/package/components/triggers/triggers.svelte.js +24 -2
  236. package/package/components/triggers/utils.js +19 -5
  237. package/package/components/triggers.d.ts +1 -1
  238. package/package/components/triggers.js +2 -0
  239. package/package/components/wizards/AgGridWizard.svelte +85 -80
  240. package/package/components/workspaceSettings/AISettings.svelte +74 -22
  241. package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
  242. package/package/components/workspaceSettings/CreateWorkspace.svelte +395 -0
  243. package/package/components/workspaceSettings/CreateWorkspace.svelte.d.ts +6 -0
  244. package/package/components/workspaceSettings/DucklakeSettings.svelte +3 -1
  245. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +1 -1
  246. package/package/components/workspaceSettings/StorageSettings.svelte +69 -48
  247. package/package/gen/core/OpenAPI.js +1 -1
  248. package/package/gen/schemas.gen.d.ts +142 -3
  249. package/package/gen/schemas.gen.js +144 -3
  250. package/package/gen/services.gen.d.ts +129 -1
  251. package/package/gen/services.gen.js +267 -1
  252. package/package/gen/types.gen.d.ts +434 -8
  253. package/package/hubPaths.json +4 -2
  254. package/package/infer.js +1 -1
  255. package/package/keyboardChain.d.ts +5 -0
  256. package/package/keyboardChain.js +40 -0
  257. package/package/services/JobManager.js +2 -2
  258. package/package/stores.d.ts +3 -1
  259. package/package/stores.js +8 -5
  260. package/package/utils/workspaceHierarchy.d.ts +27 -0
  261. package/package/utils/workspaceHierarchy.js +101 -0
  262. package/package/utils.d.ts +6 -3
  263. package/package/utils.js +30 -15
  264. package/package/workspace_settings.js +2 -3
  265. package/package.json +9 -11
  266. package/package/components/DynSelect.svelte.d.ts +0 -11
  267. package/package/components/ObjectTypeNarrowing.svelte +0 -18
  268. package/package/components/ObjectTypeNarrowing.svelte.d.ts +0 -22
  269. package/package/components/details/DetailPageTriggerPanel.svelte +0 -121
  270. package/package/components/details/DetailPageTriggerPanel.svelte.d.ts +0 -20
  271. package/package/components/details/EmailTriggerConfigSection.svelte.d.ts +0 -12
  272. package/package/components/details/EmailTriggerPanel.svelte +0 -76
  273. package/package/components/details/EmailTriggerPanel.svelte.d.ts +0 -26
@@ -21,6 +21,8 @@ interface Props {
21
21
  folders?: string[];
22
22
  allWorkspaces?: boolean;
23
23
  filterBy?: 'path' | 'user' | 'folder' | 'label' | 'concurrencyKey' | 'worker' | 'tag' | 'schedulePath';
24
+ small?: boolean;
25
+ calendarSmall?: boolean;
24
26
  }
25
27
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
26
28
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
@@ -1,32 +1,103 @@
1
-
2
-
3
- <script lang="ts">import { createEventDispatcher } from 'svelte';
4
- import { Button } from '../common';
5
- import { FilterX, ListFilter } from 'lucide-svelte';
6
- import Tooltip from '../Tooltip.svelte';
7
- export let queue_count = undefined;
8
- export let suspended_count = undefined;
9
- export let success;
10
- const dispatch = createEventDispatcher();
1
+ <script lang="ts">import { Button } from '../common';
2
+ import { Bot, Hourglass, ListFilterPlus, X } from 'lucide-svelte';
3
+ import RunOption from './RunOption.svelte';
4
+ import { Popover } from '../meltComponents';
5
+ let { queue_count = undefined, suspended_count = undefined, success, small = false, onJobsWaiting, onJobsSuspended } = $props();
11
6
  </script>
12
7
 
13
- <div class="flex gap-1 relative max-w-36 min-w-[50px] items-baseline">
14
- <div class="text-xs absolute -top-4 truncate flex items-baseline gap-1">Waiting for workers <Tooltip small>Jobs waiting for a worker being available to be executed</Tooltip></div>
15
- <div class="mt-1">{queue_count ? ($queue_count ?? 0).toFixed(0) : '...'}</div>
16
- <div class="truncate text-2xs !text-secondary mt-0.5">
17
- {#if queue_count && ($queue_count ?? 0) > 0}
18
- <Button size="xs2" color="light" on:click={() => dispatch('jobs_waiting')}>{#if success == 'waiting'}<FilterX size={12}></FilterX>{:else}<ListFilter size={12}></ListFilter>{/if}</Button>
19
- {/if}
8
+ <div class="flex flex-row gap-4 items-center">
9
+ {#if small}
10
+ <Popover contentClasses="p-4" openOnHover debounceDelay={100}>
11
+ {#snippet trigger()}
12
+ <div class="relative">
13
+ <Bot size={16} />
14
+ {#if queue_count && ($queue_count ?? 0) > 0}
15
+ <div
16
+ class="absolute top-0 right-0 translate-x-1/2 -translate-y-1/2 bg-yellow-500 rounded-full text-white text-xs h-4 min-w-4"
17
+ >
18
+ {queue_count ? ($queue_count ?? 0).toFixed(0) : '...'}
19
+ </div>
20
+ {/if}
21
+ </div>
22
+ {/snippet}
20
23
 
21
- </div>
24
+ {#snippet content()}
25
+ {@render queuedContent()}
26
+ {/snippet}
27
+ </Popover>
28
+ {:else}
29
+ {@render queuedContent()}
30
+ {/if}
31
+
32
+ {#if small}
33
+ <Popover contentClasses="p-4" openOnHover debounceDelay={100}>
34
+ {#snippet trigger()}
35
+ <div class="relative">
36
+ <Hourglass size={16} />
37
+ <div
38
+ class="absolute top-0 right-0 translate-x-1/2 -translate-y-1/2 bg-surface-secondary-inverse rounded-full text-primary-inverse text-xs h-4 min-w-4"
39
+ >
40
+ {suspended_count ? ($suspended_count ?? 0).toFixed(0) : '...'}
41
+ </div>
42
+ </div>
43
+ {/snippet}
44
+ {#snippet content()}
45
+ {@render suspendedContent()}
46
+ {/snippet}
47
+ </Popover>
48
+ {:else}
49
+ {@render suspendedContent()}
50
+ {/if}
22
51
  </div>
23
52
 
24
- {#if suspended_count && ($suspended_count ?? 0) > 0}
25
- <div class="flex gap-1 relative max-w-36 min-w-[50px] items-baseline ml-20 mr-8">
26
- <div class="text-xs absolute -top-4 truncate flex items-baseline gap-1">Suspended <Tooltip small>Jobs waiting for an event or approval before being resumed</Tooltip></div>
27
- <div class="mt-1">{suspended_count ? ($suspended_count ?? 0).toFixed(0) : '...'}</div>
53
+ {#snippet queuedContent()}
54
+ <RunOption label="Waiting for workers">
55
+ {#snippet tooltip()}
56
+ Jobs waiting for a worker being available to be executed
57
+ {/snippet}
58
+ <div
59
+ class={queue_count && ($queue_count ?? 0) > 0
60
+ ? 'bg-yellow-500 text-white rounded-full w-6 h-6 flex center-center'
61
+ : ''}>{queue_count ? ($queue_count ?? 0).toFixed(0) : '...'}</div
62
+ >
28
63
  <div class="truncate text-2xs !text-secondary mt-0.5">
29
- <Button size="xs2" color="light" on:click={() => dispatch('jobs_suspended')}>{#if success == 'waiting'}<FilterX size={12}></FilterX>{:else}<ListFilter size={12}></ListFilter>{/if}</Button>
64
+ <Button size="xs2" color="light" on:click={() => onJobsWaiting?.()}>
65
+ {#if success == 'waiting'}
66
+ <div class="flex flex-row items-center gap-1">
67
+ Reset filter
68
+ <X size={12} />
69
+ </div>
70
+ {:else}
71
+ <ListFilterPlus size={14} />
72
+ {/if}
73
+ </Button>
30
74
  </div>
31
- </div>
32
- {/if}
75
+ </RunOption>
76
+ {/snippet}
77
+
78
+ {#snippet suspendedContent()}
79
+ {#if suspended_count && ($suspended_count ?? 0) > 0}
80
+ <RunOption label="Suspended">
81
+ {#snippet tooltip()}
82
+ Jobs waiting for an event or approval before being resumed
83
+ {/snippet}
84
+ <div
85
+ class={suspended_count && ($suspended_count ?? 0) > 0
86
+ ? 'bg-surface-secondary-inverse text-primary-inverse rounded-full w-6 h-6 flex center-center'
87
+ : ''}>{suspended_count ? ($suspended_count ?? 0).toFixed(0) : '...'}</div
88
+ >
89
+ <div class="truncate text-2xs !text-secondary">
90
+ <Button size="xs2" color="light" on:click={() => onJobsSuspended?.()}>
91
+ {#if success == 'suspended'}
92
+ <div class="flex flex-row items-center gap-1">
93
+ Reset filter
94
+ <X size={12} />
95
+ </div>
96
+ {:else}
97
+ <ListFilterPlus size={14} />
98
+ {/if}
99
+ </Button>
100
+ </div>
101
+ </RunOption>
102
+ {/if}
103
+ {/snippet}
@@ -1,26 +1,12 @@
1
1
  import type { Tweened } from 'svelte/motion';
2
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
3
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
- $$bindings?: Bindings;
5
- } & Exports;
6
- (internal: unknown, props: Props & {
7
- $$events?: Events;
8
- $$slots?: Slots;
9
- }): Exports & {
10
- $set?: any;
11
- $on?: any;
12
- };
13
- z_$$bindings?: Bindings;
14
- }
15
- declare const RunsQueue: $$__sveltets_2_IsomorphicComponent<{
2
+ interface Props {
16
3
  queue_count?: Tweened<number> | undefined;
17
4
  suspended_count?: Tweened<number> | undefined;
18
5
  success: string | undefined;
19
- }, {
20
- jobs_waiting: CustomEvent<any>;
21
- jobs_suspended: CustomEvent<any>;
22
- } & {
23
- [evt: string]: CustomEvent<any>;
24
- }, {}, {}, string>;
25
- type RunsQueue = InstanceType<typeof RunsQueue>;
6
+ small?: boolean;
7
+ onJobsWaiting?: () => void;
8
+ onJobsSuspended?: () => void;
9
+ }
10
+ declare const RunsQueue: import("svelte").Component<Props, {}, "">;
11
+ type RunsQueue = ReturnType<typeof RunsQueue>;
26
12
  export default RunsQueue;
@@ -1,14 +1,11 @@
1
- <script lang="ts">import { createBubbler } from 'svelte/legacy';
2
- const bubble = createBubbler();
3
- import RunRow from './RunRow.svelte';
1
+ <script lang="ts">import RunRow from './RunRow.svelte';
4
2
  import VirtualList from '@tutorlatin/svelte-tiny-virtual-list';
5
3
  import { createEventDispatcher, onMount } from 'svelte';
6
4
  import Tooltip from '../Tooltip.svelte';
7
5
  import { AlertTriangle } from 'lucide-svelte';
8
6
  import Popover from '../Popover.svelte';
9
7
  import { workspaceStore } from '../../stores';
10
- import { twMerge } from 'tailwind-merge';
11
- import { isJobSelectable } from '../../utils';
8
+ import './runs-grid.css';
12
9
  let { jobs = undefined, externalJobs = [], omittedObscuredJobs, showExternalJobs = false, selectionMode = false, selectedIds = $bindable([]), selectedWorkspace = $bindable(undefined), activeLabel = null, lastFetchWentToEnd = $bindable(false) } = $props();
13
10
  function getTime(job) {
14
11
  return job['started_at'] ?? job['scheduled_for'] ?? job['created_at'];
@@ -81,26 +78,6 @@ function infiniteHandler({ detail: { loaded, error, complete } }) {
81
78
  }
82
79
  }
83
80
  */
84
- let selectableJobCount = $derived.by(() => {
85
- if (!selectionMode)
86
- return 0;
87
- return jobs?.filter(isJobSelectable(selectionMode)).length ?? 0;
88
- });
89
- let allSelected = $derived.by(() => {
90
- return selectionMode && selectedIds.length === selectableJobCount;
91
- });
92
- function selectAll() {
93
- if (!selectionMode)
94
- return;
95
- if (allSelected) {
96
- allSelected = false;
97
- selectedIds = [];
98
- }
99
- else {
100
- allSelected = true;
101
- selectedIds = jobs?.filter(isJobSelectable(selectionMode)).map((j) => j.id) ?? [];
102
- }
103
- }
104
81
  function jobCountString(jobCount, lastFetchWentToEnd) {
105
82
  if (jobCount === undefined) {
106
83
  return '';
@@ -148,64 +125,66 @@ let stickyIndices = $derived.by(() => {
148
125
  }
149
126
  return nstickyIndices;
150
127
  });
128
+ const showTag = $derived(containerWidth > 700);
151
129
  </script>
152
130
 
153
131
  <svelte:window onresize={() => computeHeight()} />
154
132
 
155
133
  <div
156
- class="divide-y min-w-[640px] h-full"
134
+ class="divide-y h-full border min-w-[650px]"
157
135
  id="runs-table-wrapper"
158
136
  bind:clientWidth={containerWidth}
159
137
  >
160
138
  <div bind:clientHeight={headerHeight}>
161
- {#if selectionMode && selectableJobCount}
162
- <!-- svelte-ignore a11y_click_events_have_key_events -->
163
- <!-- svelte-ignore a11y_no_static_element_interactions -->
164
- <div
165
- class={twMerge(
166
- 'hover:bg-surface-hover bg-surface-primary cursor-pointer',
167
- allSelected ? 'bg-blue-50 dark:bg-blue-900/50' : '',
168
- 'flex flex-row items-center sticky w-full p-2 pr-4 top-0 font-semibold border-t text-sm'
169
- )}
170
- onclick={selectAll}
171
- >
172
- <div class="px-2">
173
- <input onfocus={bubble('focus')} type="checkbox" checked={allSelected} />
174
- </div>
175
- Select all
176
- </div>
177
- {/if}
178
- <div class="flex flex-row bg-surface-secondary sticky top-0 w-full p-2 pr-4">
179
- {#if showExternalJobs && externalJobs.length > 0}
180
- <div class="w-1/12 text-2xs">
139
+ <div
140
+ class="grid bg-surface-secondary sticky top-0 w-full py-2 pr-4"
141
+ class:grid-runs-table={!containsLabel && !selectionMode && showTag}
142
+ class:grid-runs-table-with-labels={containsLabel && !selectionMode && showTag}
143
+ class:grid-runs-table-selection={!containsLabel && selectionMode && showTag}
144
+ class:grid-runs-table-with-labels-selection={containsLabel && selectionMode && showTag}
145
+ class:grid-runs-table-no-tag={!containsLabel && !selectionMode && !showTag}
146
+ class:grid-runs-table-with-labels-no-tag={containsLabel && !selectionMode && !showTag}
147
+ class:grid-runs-table-selection-no-tag={!containsLabel && selectionMode && !showTag}
148
+ class:grid-runs-table-with-labels-selection-no-tag={containsLabel &&
149
+ selectionMode &&
150
+ !showTag}
151
+ >
152
+ {#if selectionMode}
153
+ <div class="text-xs font-semibold pl-4"></div>
154
+ {/if}
155
+ <div class="text-2xs px-2 flex flex-row items-center gap-2">
156
+ {#if showExternalJobs && externalJobs.length > 0}
181
157
  <div class="flex flex-row">
182
158
  {jobs
183
159
  ? jobCountString(jobs.length + externalJobs.length, lastFetchWentToEnd)
184
160
  : ''}<Tooltip>{externalJobs.length} jobs obscured</Tooltip>
185
161
  </div>
186
- </div>
187
- {:else if $workspaceStore !== 'admins' && omittedObscuredJobs}
188
- <div class="w-1/12 text-2xs flex flex-row">
162
+ {:else if $workspaceStore !== 'admins' && omittedObscuredJobs}
163
+ <div class="flex flex-row">
164
+ {jobs ? jobCountString(jobs.length, lastFetchWentToEnd) : ''}
165
+ <Popover>
166
+ <AlertTriangle size={16} class="ml-0.5 text-yellow-500" />
167
+ {#snippet text()}
168
+ Too specific filtering may have caused the omission of obscured jobs. This is done
169
+ for security reasons. To see obscured jobs, try removing some filters.
170
+ {/snippet}
171
+ </Popover>
172
+ </div>
173
+ {:else}
189
174
  {jobs ? jobCountString(jobs.length, lastFetchWentToEnd) : ''}
190
- <Popover>
191
- <AlertTriangle size={16} class="ml-0.5 text-yellow-500" />
192
- {#snippet text()}
193
- Too specific filtering may have caused the omission of obscured jobs. This is done for
194
- security reasons. To see obscured jobs, try removing some filters.
195
- {/snippet}
196
- </Popover>
197
- </div>
198
- {:else}
199
- <div class="w-1/12 text-2xs"
200
- >{jobs ? jobCountString(jobs.length, lastFetchWentToEnd) : ''}</div
201
- >
202
- {/if}
203
- <div class="w-4/12 text-xs font-semibold"></div>
204
- <div class="w-4/12 text-xs font-semibold">Path</div>
175
+ {/if}
176
+ </div>
177
+ <div class="text-xs font-semibold">Started</div>
178
+ <div class="text-xs font-semibold">Duration</div>
179
+ <div class="text-xs font-semibold">Path</div>
205
180
  {#if containsLabel}
206
- <div class="w-3/12 text-xs font-semibold">Label</div>
181
+ <div class="text-xs font-semibold">Label</div>
182
+ {/if}
183
+ <div class="text-xs font-semibold">Triggered by</div>
184
+ {#if showTag}
185
+ <div class="text-xs font-semibold">Tag</div>
207
186
  {/if}
208
- <div class="w-3/12 text-xs font-semibold">Triggered by</div>
187
+ <div class=""></div>
209
188
  </div>
210
189
  </div>
211
190
  {#if jobs?.length == 0 && (!showExternalJobs || externalJobs?.length == 0)}
@@ -222,20 +201,23 @@ let stickyIndices = $derived.by(() => {
222
201
  scrollToAlignment="center"
223
202
  >
224
203
  {#snippet header()}{/snippet}
225
- {#snippet children({ index, style })}
204
+ {#snippet item({ index, style })}
226
205
  <div {style} class="w-full">
227
206
  {#if flatJobs}
228
207
  {@const jobOrDate = flatJobs[index]}
229
208
 
230
209
  {#if jobOrDate}
231
210
  {#if jobOrDate?.type === 'date'}
232
- <div class="bg-surface-secondary py-2 border-b font-semibold text-xs pl-5">
211
+ <div
212
+ class="bg-surface-secondary py-2 border-b font-semibold text-xs pl-2 h-[42px] flex items-center"
213
+ >
233
214
  {jobOrDate.date}
234
215
  </div>
235
216
  {:else}
236
217
  <div class="flex flex-row items-center h-full w-full">
237
218
  <RunRow
238
219
  {containsLabel}
220
+ {showTag}
239
221
  job={jobOrDate.job}
240
222
  selected={jobOrDate.job.id !== '-' && selectedIds.includes(jobOrDate.job.id)}
241
223
  {selectionMode}
@@ -249,9 +231,18 @@ let stickyIndices = $derived.by(() => {
249
231
  selectedIds = selectedIds
250
232
  }
251
233
  } else {
252
- selectedWorkspace = jobOrDate.job.workspace_id
253
- selectedIds = [jobOrDate.job.id]
254
- dispatch('select')
234
+ if (
235
+ JSON.stringify(selectedIds) !== JSON.stringify([jobOrDate.job.id]) ||
236
+ selectedWorkspace !== jobOrDate.job.workspace_id
237
+ ) {
238
+ selectedWorkspace = jobOrDate.job.workspace_id
239
+ selectedIds = [jobOrDate.job.id]
240
+ dispatch('select')
241
+ } else {
242
+ selectedIds = []
243
+ selectedWorkspace = undefined
244
+ dispatch('select')
245
+ }
255
246
  }
256
247
  }}
257
248
  {activeLabel}
@@ -1,5 +1,6 @@
1
1
  import type { Job } from '../../gen';
2
2
  import type { RunsSelectionMode } from './RunsBatchActionsDropdown.svelte';
3
+ import './runs-grid.css';
3
4
  interface Props {
4
5
  jobs?: Job[] | undefined;
5
6
  externalJobs?: Job[];
@@ -38,6 +39,6 @@ declare const RunsTable: $$__sveltets_2_IsomorphicComponent<Props, {
38
39
  [evt: string]: CustomEvent<any>;
39
40
  }, {}, {
40
41
  scrollToRun: (ids: string[]) => void;
41
- }, "selectedIds" | "selectedWorkspace" | "lastFetchWentToEnd">;
42
+ }, "selectedIds" | "lastFetchWentToEnd" | "selectedWorkspace">;
42
43
  type RunsTable = InstanceType<typeof RunsTable>;
43
44
  export default RunsTable;
@@ -0,0 +1,95 @@
1
+ /* Shared CSS Grid Styles for RunsTable and RunRow components */
2
+
3
+ /* Grid layouts with tag column */
4
+ .grid-runs-table {
5
+ grid-template-columns:
6
+ 60px /* Status (fixed width) */
7
+ minmax(100px, 0.8fr) /* Started time (~10%) */
8
+ minmax(60px, 0.5fr) /* Duration (~7%) */
9
+ minmax(200px, 2.3fr) /* Path (~33% reduced for wider tag) */
10
+ minmax(150px, 1.8fr) /* Triggered by (~28% reduced for wider tag) */
11
+ minmax(70px, 0.5fr) /* Tag (~7% wider) */
12
+ minmax(40px, 0.3fr); /* Actions (~5%) */
13
+ }
14
+
15
+ .grid-runs-table-with-labels {
16
+ grid-template-columns:
17
+ 60px /* Status (fixed width) */
18
+ minmax(100px, 0.8fr) /* Started time (~10%) */
19
+ minmax(60px, 0.5fr) /* Duration (~7%) */
20
+ minmax(150px, 1.6fr) /* Path (~25% reduced for labels and wider tag) */
21
+ minmax(120px, 1.3fr) /* Labels (~22% reduced for wider tag) */
22
+ minmax(110px, 1.3fr) /* Triggered by (~22% reduced for wider tag) */
23
+ minmax(70px, 0.5fr) /* Tag (~7% wider) */
24
+ minmax(40px, 0.3fr); /* Actions (~5%) */
25
+ }
26
+
27
+ .grid-runs-table-selection {
28
+ grid-template-columns:
29
+ 50px /* Selection checkbox (fixed width) */
30
+ 80px /* Status (fixed width) */
31
+ minmax(100px, 0.8fr) /* Started time (~10%) */
32
+ minmax(60px, 0.5fr) /* Duration (~7%) */
33
+ minmax(200px, 2.3fr) /* Path (~33% reduced for wider tag) */
34
+ minmax(150px, 1.8fr) /* Triggered by (~28% reduced for wider tag) */
35
+ minmax(70px, 0.5fr) /* Tag (~7% wider) */
36
+ minmax(40px, 0.3fr); /* Actions (~5%) */
37
+ }
38
+
39
+ .grid-runs-table-with-labels-selection {
40
+ grid-template-columns:
41
+ 50px /* Selection checkbox (fixed width) */
42
+ 80px /* Status (fixed width) */
43
+ minmax(100px, 0.8fr) /* Started time (~10%) */
44
+ minmax(60px, 0.5fr) /* Duration (~7%) */
45
+ minmax(150px, 1.6fr) /* Path (~25% reduced for labels and wider tag) */
46
+ minmax(120px, 1.3fr) /* Labels (~22% reduced for wider tag) */
47
+ minmax(110px, 1.3fr) /* Triggered by (~22% reduced for wider tag) */
48
+ minmax(70px, 0.5fr) /* Tag (~7% wider) */
49
+ minmax(40px, 0.3fr); /* Actions (~5%) */
50
+ }
51
+
52
+ /* Grid layouts without tag column */
53
+ .grid-runs-table-no-tag {
54
+ grid-template-columns:
55
+ 60px /* Status (fixed width) */
56
+ minmax(100px, 0.8fr) /* Started time (~10%) */
57
+ minmax(60px, 0.5fr) /* Duration (~7%) */
58
+ minmax(200px, 2.8fr) /* Path (~38% expanded without tag) */
59
+ minmax(150px, 2.2fr) /* Triggered by (~33% expanded without tag) */
60
+ minmax(40px, 0.3fr); /* Actions (~5%) */
61
+ }
62
+
63
+ .grid-runs-table-with-labels-no-tag {
64
+ grid-template-columns:
65
+ 60px /* Status (fixed width) */
66
+ minmax(100px, 0.8fr) /* Started time (~10%) */
67
+ minmax(60px, 0.5fr) /* Duration (~7%) */
68
+ minmax(150px, 1.8fr) /* Path (~30% expanded without tag) */
69
+ minmax(120px, 1.8fr) /* Labels (~30% expanded without tag) */
70
+ minmax(110px, 1.8fr) /* Triggered by (~30% expanded without tag) */
71
+ minmax(40px, 0.3fr); /* Actions (~5%) */
72
+ }
73
+
74
+ .grid-runs-table-selection-no-tag {
75
+ grid-template-columns:
76
+ 40px /* Selection checkbox (fixed width) */
77
+ 60px /* Status (fixed width) */
78
+ minmax(100px, 0.8fr) /* Started time (~10%) */
79
+ minmax(60px, 0.5fr) /* Duration (~7%) */
80
+ minmax(200px, 2.8fr) /* Path (~38% expanded without tag) */
81
+ minmax(150px, 2.2fr) /* Triggered by (~33% expanded without tag) */
82
+ minmax(40px, 0.3fr); /* Actions (~5%) */
83
+ }
84
+
85
+ .grid-runs-table-with-labels-selection-no-tag {
86
+ grid-template-columns:
87
+ 50px /* Selection checkbox (fixed width) */
88
+ 60px /* Status (fixed width) */
89
+ minmax(100px, 0.8fr) /* Started time (~10%) */
90
+ minmax(60px, 0.5fr) /* Duration (~7%) */
91
+ minmax(150px, 1.8fr) /* Path (~30% expanded without tag) */
92
+ minmax(120px, 1.8fr) /* Labels (~30% expanded without tag) */
93
+ minmax(110px, 1.8fr) /* Triggered by (~30% expanded without tag) */
94
+ minmax(40px, 0.3fr); /* Actions (~5%) */
95
+ }
@@ -50,7 +50,18 @@ let items = $derived([
50
50
  const rnd = generateRandomString();
51
51
  </script>
52
52
 
53
- <div class="flex flex-col items-end mb-2 w-full">
53
+ <div class="flex flex-wrap justify-between mb-2 w-full items-center gap-y-2">
54
+ <AddProperty
55
+ on:change={() => {
56
+ if (jsonView) {
57
+ schemaString = JSON.stringify(schema, null, '\t')
58
+ editor?.setCode(schemaString)
59
+ }
60
+ }}
61
+ bind:schema
62
+ bind:this={addPropertyComponent}
63
+ />
64
+
54
65
  <Toggle
55
66
  bind:checked={jsonView}
56
67
  label="JSON View"
@@ -68,17 +79,6 @@ const rnd = generateRandomString();
68
79
  />
69
80
  </div>
70
81
 
71
- <AddProperty
72
- on:change={() => {
73
- if (jsonView) {
74
- schemaString = JSON.stringify(schema, null, '\t')
75
- editor?.setCode(schemaString)
76
- }
77
- }}
78
- bind:schema
79
- bind:this={addPropertyComponent}
80
- />
81
-
82
82
  {#if !jsonView}
83
83
  {#key rnd}
84
84
  <div