windmill-components 1.394.8 → 1.405.5

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 (305) hide show
  1. package/package/assets/app.css +20 -0
  2. package/package/ata/edgeCases.d.ts +0 -1
  3. package/package/ata/edgeCases.js +2 -8
  4. package/package/ata/index.js +4 -3
  5. package/package/common.d.ts +1 -1
  6. package/package/common.js +2 -2
  7. package/package/components/ApiConnectForm.svelte +33 -7
  8. package/package/components/AppConnectLightweightResourcePicker.svelte +66 -0
  9. package/package/components/AppConnectLightweightResourcePicker.svelte.d.ts +21 -0
  10. package/package/components/ArgInput.svelte +10 -4
  11. package/package/components/ArgInput.svelte.d.ts +1 -0
  12. package/package/components/CenteredModal.svelte +4 -1
  13. package/package/components/CenteredModal.svelte.d.ts +1 -0
  14. package/package/components/CustomPopover.svelte +1 -1
  15. package/package/components/DateInput.svelte +2 -0
  16. package/package/components/DateInput.svelte.d.ts +1 -0
  17. package/package/components/DefaultScripts.svelte +8 -3
  18. package/package/components/DefaultScripts.svelte.d.ts +5 -1
  19. package/package/components/DefaultScriptsInner.svelte +16 -7
  20. package/package/components/DefaultScriptsInner.svelte.d.ts +3 -1
  21. package/package/components/Dev.svelte +68 -11
  22. package/package/components/DisplayResult.svelte +1 -1
  23. package/package/components/DropdownV2.svelte.d.ts +3 -3
  24. package/package/components/DropdownV2Inner.svelte.d.ts +3 -3
  25. package/package/components/EditableSchemaForm.svelte +1 -0
  26. package/package/components/Editor.svelte +3 -2
  27. package/package/components/Editor.svelte.d.ts +1 -1
  28. package/package/components/ExecutionDuration.svelte +44 -0
  29. package/package/components/ExecutionDuration.svelte.d.ts +24 -0
  30. package/package/components/FlowBuilder.svelte +22 -12
  31. package/package/components/FlowBuilder.svelte.d.ts +1 -0
  32. package/package/components/FlowGraphViewer.svelte +9 -2
  33. package/package/components/FlowGraphViewerStep.svelte +23 -10
  34. package/package/components/FlowInputViewer.svelte +25 -0
  35. package/package/components/FlowInputViewer.svelte.d.ts +19 -0
  36. package/package/components/FlowJobResult.svelte +8 -2
  37. package/package/components/FlowJobResult.svelte.d.ts +1 -0
  38. package/package/components/FlowMetadata.svelte +2 -2
  39. package/package/components/FlowStatusViewer.svelte +3 -1
  40. package/package/components/FlowStatusViewer.svelte.d.ts +1 -0
  41. package/package/components/FlowStatusViewerInner.svelte +21 -5
  42. package/package/components/FlowTimeline.svelte +3 -3
  43. package/package/components/FlowViewer.svelte +2 -21
  44. package/package/components/HighlightCode.svelte +3 -0
  45. package/package/components/IconedResourceType.svelte +17 -10
  46. package/package/components/IconedResourceType.svelte.d.ts +2 -0
  47. package/package/components/IdEditorInput.svelte +0 -1
  48. package/package/components/InstanceSettings.svelte +247 -129
  49. package/package/components/InstanceSettings.svelte.d.ts +2 -0
  50. package/package/components/JobArgs.svelte +3 -1
  51. package/package/components/LightweightArgInput.svelte +35 -10
  52. package/package/components/LightweightArgInput.svelte.d.ts +1 -0
  53. package/package/components/LightweightObjectResourceInput.svelte +2 -0
  54. package/package/components/LightweightObjectResourceInput.svelte.d.ts +1 -0
  55. package/package/components/LightweightResourcePicker.svelte +34 -30
  56. package/package/components/LightweightSchemaForm.svelte +2 -0
  57. package/package/components/LightweightSchemaForm.svelte.d.ts +1 -0
  58. package/package/components/LogViewer.svelte +4 -3
  59. package/package/components/LogViewer.svelte.d.ts +1 -0
  60. package/package/components/Login.svelte +10 -5
  61. package/package/components/Login.svelte.d.ts +1 -0
  62. package/package/components/ManualPopover.svelte +1 -1
  63. package/package/components/ModulePreview.svelte +21 -2
  64. package/package/components/ModuleStatus.svelte +3 -0
  65. package/package/components/ModuleStatus.svelte.d.ts +1 -0
  66. package/package/components/OAuthSetting.svelte +40 -15
  67. package/package/components/ObjectResourceInput.svelte +5 -2
  68. package/package/components/ObjectResourceInput.svelte.d.ts +2 -0
  69. package/package/components/ObjectStoreConfigSettings.svelte +78 -76
  70. package/package/components/ParqetCsvTableRenderer.svelte +25 -3
  71. package/package/components/Password.svelte.d.ts +1 -1
  72. package/package/components/Path.svelte +74 -54
  73. package/package/components/Path.svelte.d.ts +2 -1
  74. package/package/components/Popover.svelte +1 -1
  75. package/package/components/Portal.svelte +7 -8
  76. package/package/components/Portal.svelte.d.ts +3 -7
  77. package/package/components/QueueMetricsDrawer.svelte +368 -3
  78. package/package/components/QueueMetricsDrawer.svelte.d.ts +2 -0
  79. package/package/components/ResourceEditor.svelte +38 -10
  80. package/package/components/ResourcePicker.svelte +14 -9
  81. package/package/components/ResourcePicker.svelte.d.ts +1 -0
  82. package/package/components/ResultJobLoader.svelte +6 -3
  83. package/package/components/ResultJobLoader.svelte.d.ts +1 -1
  84. package/package/components/RunForm.svelte +1 -1
  85. package/package/components/SavedInputs.svelte +2 -2
  86. package/package/components/ScheduleEditorInner.svelte +2 -2
  87. package/package/components/SchemaForm.svelte +6 -1
  88. package/package/components/ScriptBuilder.svelte +12 -5
  89. package/package/components/ScriptEditor.svelte +33 -3
  90. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  91. package/package/components/ScriptVersionHistory.svelte +54 -59
  92. package/package/components/Scrollable.svelte +47 -0
  93. package/package/components/Scrollable.svelte.d.ts +21 -0
  94. package/package/components/ShareModal.svelte.d.ts +2 -2
  95. package/package/components/SuperadminSettings.svelte +5 -7
  96. package/package/components/TestConnection.svelte +1 -0
  97. package/package/components/TestJobLoader.svelte +46 -5
  98. package/package/components/TestJobLoader.svelte.d.ts +2 -1
  99. package/package/components/TimeAgo.svelte +5 -6
  100. package/package/components/TimeAgo.svelte.d.ts +1 -1
  101. package/package/components/ToggleHubWorkspaceQuick.svelte +14 -0
  102. package/package/components/ToggleHubWorkspaceQuick.svelte.d.ts +16 -0
  103. package/package/components/WorkspaceGroup.svelte +3 -2
  104. package/package/components/apps/components/buttons/AppButton.svelte +1 -1
  105. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +1 -1
  106. package/package/components/apps/components/helpers/DebouncedInput.svelte +9 -1
  107. package/package/components/apps/components/inputs/AppMultiSelect.svelte +1 -1
  108. package/package/components/apps/components/inputs/AppMultiSelectV2.svelte +1 -1
  109. package/package/components/apps/components/inputs/AppSelect.svelte +1 -1
  110. package/package/components/apps/components/layout/AppDrawer.svelte +1 -1
  111. package/package/components/apps/components/layout/AppModal.svelte +1 -1
  112. package/package/components/apps/editor/AppEditor.svelte +11 -3
  113. package/package/components/apps/editor/GridEditor.svelte +57 -4
  114. package/package/components/apps/editor/GridEditor.svelte.d.ts +8 -0
  115. package/package/components/apps/editor/GridEditorMenu.svelte +1 -1
  116. package/package/components/apps/editor/SubGridEditor.svelte +82 -3
  117. package/package/components/apps/editor/SubGridEditor.svelte.d.ts +16 -0
  118. package/package/components/apps/editor/appUtils.d.ts +19 -2
  119. package/package/components/apps/editor/appUtils.js +103 -7
  120. package/package/components/apps/editor/component/Component.svelte +36 -8
  121. package/package/components/apps/editor/component/Component.svelte.d.ts +3 -1
  122. package/package/components/apps/editor/component/components.d.ts +79 -79
  123. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +1 -1
  124. package/package/components/apps/svelte-grid/Grid.svelte +235 -12
  125. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +7 -7
  126. package/package/components/apps/svelte-grid/MoveResize.svelte +104 -11
  127. package/package/components/apps/svelte-grid/MoveResize.svelte.d.ts +7 -0
  128. package/package/components/apps/svelte-grid/utils/item.d.ts +4 -1
  129. package/package/components/apps/svelte-grid/utils/item.js +2 -3
  130. package/package/components/apps/svelte-select/lib/ConditionalPortal.svelte +1 -1
  131. package/package/components/apps/svelte-select/lib/ConditionalPortalGlobal.svelte +1 -1
  132. package/package/components/apps/svelte-select/lib/Select.svelte +1 -1
  133. package/package/components/common/button/ButtonDropdown.svelte +1 -1
  134. package/package/components/common/drawer/ConditionalPortal.svelte +1 -1
  135. package/package/components/common/fileUpload/FileUpload.svelte +1 -1
  136. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  137. package/package/components/common/menu/Menu.svelte +2 -1
  138. package/package/components/common/menu/MenuV2.svelte +4 -2
  139. package/package/components/common/menu/MenuV2.svelte.d.ts +1 -0
  140. package/package/components/common/modal/AlwaysMountedModal.svelte +1 -1
  141. package/package/components/common/popup/Popup.svelte +22 -12
  142. package/package/components/common/popup/Popup.svelte.d.ts +2 -0
  143. package/package/components/common/popup/PopupV2.svelte +58 -0
  144. package/package/components/common/popup/PopupV2.svelte.d.ts +27 -0
  145. package/package/components/copilot/CronGen.svelte +1 -1
  146. package/package/components/copilot/RegexGen.svelte +4 -4
  147. package/package/components/copilot/StepGen.svelte +6 -6
  148. package/package/components/copilot/StepGenQuick.svelte +58 -0
  149. package/package/components/copilot/StepGenQuick.svelte.d.ts +24 -0
  150. package/package/components/copilot/flow.d.ts +2 -0
  151. package/package/components/copilot/flow.js +55 -0
  152. package/package/components/details/DetailPageDetailPanel.svelte +9 -1
  153. package/package/components/details/DetailPageDetailPanel.svelte.d.ts +2 -1
  154. package/package/components/details/DetailPageLayout.svelte +2 -0
  155. package/package/components/details/DetailPageLayout.svelte.d.ts +3 -0
  156. package/package/components/details/Menu.svelte +1 -1
  157. package/package/components/details/utils.d.ts +0 -1
  158. package/package/components/details/utils.js +1 -12
  159. package/package/components/flows/CreateActionsApp.svelte +1 -1
  160. package/package/components/flows/FlowEditor.svelte +4 -2
  161. package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
  162. package/package/components/flows/FlowHistory.svelte +10 -195
  163. package/package/components/flows/FlowHistory.svelte.d.ts +0 -1
  164. package/package/components/flows/FlowHistoryInner.svelte +200 -0
  165. package/package/components/flows/FlowHistoryInner.svelte.d.ts +19 -0
  166. package/package/components/flows/FlowProgressBar.svelte +16 -1
  167. package/package/components/flows/FlowProgressBar.svelte.d.ts +1 -0
  168. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +8 -0
  169. package/package/components/flows/content/FlowBranchesAllWrapper.svelte.d.ts +1 -0
  170. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +8 -0
  171. package/package/components/flows/content/FlowBranchesOneWrapper.svelte.d.ts +1 -0
  172. package/package/components/flows/content/FlowConstants.svelte +1 -1
  173. package/package/components/flows/content/FlowEditorPanel.svelte +5 -1
  174. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -0
  175. package/package/components/flows/content/FlowInput.svelte +66 -58
  176. package/package/components/flows/content/FlowInput.svelte.d.ts +1 -0
  177. package/package/components/flows/content/FlowInputs.svelte +7 -6
  178. package/package/components/flows/content/FlowInputs.svelte.d.ts +1 -0
  179. package/package/components/flows/content/FlowInputsFlowQuick.svelte +65 -0
  180. package/package/components/flows/content/FlowInputsFlowQuick.svelte.d.ts +19 -0
  181. package/package/components/flows/content/FlowInputsQuick.svelte +419 -0
  182. package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +33 -0
  183. package/package/components/flows/content/FlowLoop.svelte +7 -1
  184. package/package/components/flows/content/FlowModuleComponent.svelte +12 -3
  185. package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
  186. package/package/components/flows/content/FlowModuleScript.svelte +1 -1
  187. package/package/components/flows/content/FlowModuleSkip.svelte +69 -0
  188. package/package/components/flows/content/FlowModuleSkip.svelte.d.ts +20 -0
  189. package/package/components/flows/content/FlowModuleWrapper.svelte +17 -4
  190. package/package/components/flows/content/FlowPreprocessorModule.svelte +16 -0
  191. package/package/components/flows/content/FlowPreprocessorModule.svelte.d.ts +16 -0
  192. package/package/components/flows/content/FlowWhileLoop.svelte +9 -0
  193. package/package/components/flows/content/FlowWhileLoop.svelte.d.ts +1 -0
  194. package/package/components/flows/content/GenAiQuick.svelte +30 -0
  195. package/package/components/flows/content/GenAiQuick.svelte.d.ts +20 -0
  196. package/package/components/flows/content/ScriptEditorDrawer.svelte +3 -2
  197. package/package/components/flows/flowInfers.js +1 -1
  198. package/package/components/flows/header/FlowPreviewButtons.svelte +1 -0
  199. package/package/components/flows/idUtils.js +3 -1
  200. package/package/components/flows/map/FlowCopilotButton.svelte +55 -0
  201. package/package/components/flows/map/FlowCopilotButton.svelte.d.ts +16 -0
  202. package/package/components/flows/map/FlowErrorHandlerItem.svelte +77 -47
  203. package/package/components/flows/map/FlowJobsMenu.svelte +1 -1
  204. package/package/components/flows/map/FlowModuleSchemaItem.svelte +25 -12
  205. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
  206. package/package/components/flows/map/FlowModuleSchemaMap.svelte +64 -20
  207. package/package/components/flows/map/InsertModuleButton.svelte +161 -138
  208. package/package/components/flows/map/InsertModuleButton.svelte.d.ts +7 -4
  209. package/package/components/flows/map/MapItem.svelte +11 -0
  210. package/package/components/flows/map/MapItem.svelte.d.ts +1 -0
  211. package/package/components/flows/pickers/FlowScriptPickerQuick.svelte +48 -0
  212. package/package/components/flows/pickers/FlowScriptPickerQuick.svelte.d.ts +23 -0
  213. package/package/components/flows/pickers/FlowToplevelNode.svelte +19 -0
  214. package/package/components/flows/pickers/FlowToplevelNode.svelte.d.ts +19 -0
  215. package/package/components/flows/pickers/PickHubScriptQuick.svelte +138 -0
  216. package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +33 -0
  217. package/package/components/flows/pickers/TopLevelNode.svelte +58 -0
  218. package/package/components/flows/pickers/TopLevelNode.svelte.d.ts +21 -0
  219. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +120 -0
  220. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte.d.ts +35 -0
  221. package/package/components/flows/types.d.ts +1 -0
  222. package/package/components/graph/FlowGraphV2.svelte +93 -58
  223. package/package/components/graph/FlowGraphV2.svelte.d.ts +2 -1
  224. package/package/components/graph/graphBuilder.d.ts +2 -1
  225. package/package/components/graph/graphBuilder.js +345 -280
  226. package/package/components/graph/model.d.ts +2 -0
  227. package/package/components/graph/renderers/edges/BaseEdge.svelte +36 -14
  228. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
  229. package/package/components/graph/renderers/nodes/InputNode.svelte +31 -51
  230. package/package/components/graph/renderers/nodes/InputNode.svelte.d.ts +6 -1
  231. package/package/components/graph/renderers/nodes/ModuleNode.svelte +2 -1
  232. package/package/components/graph/util.d.ts +1 -1
  233. package/package/components/graph/util.js +7 -2
  234. package/package/components/home/ListFiltersQuick.svelte +51 -0
  235. package/package/components/home/ListFiltersQuick.svelte.d.ts +23 -0
  236. package/package/components/icons/AnsibleIcon.svelte +42 -0
  237. package/package/components/icons/AnsibleIcon.svelte.d.ts +25 -0
  238. package/package/components/icons/WindmillIcon.svelte +119 -105
  239. package/package/components/icons/WindmillIcon2.svelte +141 -0
  240. package/package/components/icons/WindmillIcon2.svelte.d.ts +20 -0
  241. package/package/components/icons/index.d.ts +2 -1
  242. package/package/components/icons/index.js +2 -1
  243. package/package/components/icons/store.d.ts +4 -0
  244. package/package/components/icons/store.js +1 -0
  245. package/package/components/instanceSettings.d.ts +2 -2
  246. package/package/components/instanceSettings.js +25 -58
  247. package/package/components/jobs/JobProgressBar.svelte +52 -0
  248. package/package/components/jobs/JobProgressBar.svelte.d.ts +23 -0
  249. package/package/components/multiselect/MultiSelectWrapper.svelte +1 -1
  250. package/package/components/progressBar/ProgressBar.svelte +18 -1
  251. package/package/components/progressBar/ProgressBar.svelte.d.ts +3 -0
  252. package/package/components/propertyPicker/ObjectViewer.svelte +1 -1
  253. package/package/components/runs/JobPreview.svelte +1 -0
  254. package/package/components/runs/PreprocessedArgsDisplay.svelte +71 -0
  255. package/package/components/runs/PreprocessedArgsDisplay.svelte.d.ts +16 -0
  256. package/package/components/runs/RunRow.svelte +3 -7
  257. package/package/components/schema/AddProperty.svelte +1 -0
  258. package/package/components/schema/EditableSchemaWrapper.svelte +142 -19
  259. package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +1 -0
  260. package/package/components/schema/FlowPropertyEditor.svelte +13 -0
  261. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -0
  262. package/package/components/scriptEditor/LogPanel.svelte +1 -0
  263. package/package/components/scriptEditor/LogPanel.svelte.d.ts +3 -1
  264. package/package/components/search/GlobalSearchModal.svelte +3 -2
  265. package/package/components/sidebar/SidebarContent.svelte +69 -8
  266. package/package/components/sidebar/changelogs.js +10 -0
  267. package/package/components/triggers/RouteEditor.svelte +19 -0
  268. package/package/components/triggers/RouteEditor.svelte.d.ts +21 -0
  269. package/package/components/triggers/RouteEditorInner.svelte +327 -0
  270. package/package/components/triggers/RouteEditorInner.svelte.d.ts +21 -0
  271. package/package/components/triggers/RoutesPanel.svelte +74 -0
  272. package/package/components/triggers/RoutesPanel.svelte.d.ts +17 -0
  273. package/package/editorUtils.js +2 -0
  274. package/package/gen/core/OpenAPI.js +1 -1
  275. package/package/gen/schemas.gen.d.ts +159 -8
  276. package/package/gen/schemas.gen.js +161 -8
  277. package/package/gen/services.gen.d.ts +139 -1
  278. package/package/gen/services.gen.js +282 -1
  279. package/package/gen/types.gen.d.ts +455 -12
  280. package/package/hubPaths.json +6 -8
  281. package/package/infer.d.ts +4 -2
  282. package/package/infer.js +25 -23
  283. package/package/inferArgSig.js +8 -2
  284. package/package/monaco_workers/graphql.worker.bundle.js +45440 -174
  285. package/package/relative_imports.d.ts +3 -0
  286. package/package/relative_imports.js +25 -0
  287. package/package/script_helpers.d.ts +38 -34
  288. package/package/script_helpers.js +245 -35
  289. package/package/scripts.d.ts +1 -1
  290. package/package/scripts.js +5 -1
  291. package/package/stores.d.ts +1 -0
  292. package/package/stores.js +1 -0
  293. package/package/utils.d.ts +1 -0
  294. package/package/utils.js +4 -0
  295. package/package.json +38 -7
  296. package/package/components/flows/map/InsertTriggerButton.svelte +0 -48
  297. package/package/components/flows/map/InsertTriggerButton.svelte.d.ts +0 -24
  298. package/package/init_scripts/python_failure_module.d.ts +0 -2
  299. package/package/init_scripts/python_failure_module.js +0 -8
  300. package/package/init_scripts/python_init_code.d.ts +0 -2
  301. package/package/init_scripts/python_init_code.js +0 -40
  302. package/package/init_scripts/python_init_code_clear.d.ts +0 -2
  303. package/package/init_scripts/python_init_code_clear.js +0 -5
  304. package/package/init_scripts/python_init_code_trigger.d.ts +0 -2
  305. package/package/init_scripts/python_init_code_trigger.js +0 -14
@@ -161,8 +161,9 @@ async function editScript(stay, deploymentMsg) {
161
161
  }
162
162
  script.schema = script.schema ?? emptySchema();
163
163
  try {
164
- const noMainFunc = await inferArgs(script.language, script.content, script.schema);
165
- script.no_main_func = noMainFunc || undefined;
164
+ const result = await inferArgs(script.language, script.content, script.schema);
165
+ script.no_main_func = result?.no_main_func || undefined;
166
+ script.has_preprocessor = result?.has_preprocessor || undefined;
166
167
  }
167
168
  catch (error) {
168
169
  sendUserToast(`Could not parse code, are you sure it is valid?`, true);
@@ -193,6 +194,7 @@ async function editScript(stay, deploymentMsg) {
193
194
  concurrency_key: emptyString(script.concurrency_key) ? undefined : script.concurrency_key,
194
195
  visible_to_runner_only: script.visible_to_runner_only,
195
196
  no_main_func: script.no_main_func,
197
+ has_preprocessor: script.has_preprocessor,
196
198
  deployment_message: deploymentMsg || undefined
197
199
  }
198
200
  });
@@ -278,8 +280,9 @@ async function saveDraft(forceSave = false) {
278
280
  }
279
281
  script.schema = script.schema ?? emptySchema();
280
282
  try {
281
- const noMainFunc = await inferArgs(script.language, script.content, script.schema);
282
- script.no_main_func = noMainFunc || undefined;
283
+ const result = await inferArgs(script.language, script.content, script.schema);
284
+ script.no_main_func = result?.no_main_func || undefined;
285
+ script.has_preprocessor = result?.has_preprocessor || undefined;
283
286
  }
284
287
  catch (error) {
285
288
  sendUserToast(`Could not parse code, are you sure it is valid?`, true);
@@ -318,7 +321,8 @@ async function saveDraft(forceSave = false) {
318
321
  ? undefined
319
322
  : script.concurrency_key,
320
323
  visible_to_runner_only: script.visible_to_runner_only,
321
- no_main_func: script.no_main_func
324
+ no_main_func: script.no_main_func,
325
+ has_preprocessor: script.has_preprocessor
322
326
  }
323
327
  });
324
328
  }
@@ -560,6 +564,9 @@ function langToLanguage(lang) {
560
564
  >
561
565
  <LanguageIcon {lang} />
562
566
  <span class="ml-2 py-2 truncate">{label}</span>
567
+ {#if lang === 'ansible'}
568
+ <span class="text-tertiary !text-xs"> BETA </span>
569
+ {/if}
563
570
  </Button>
564
571
  <svelte:fragment slot="text"
565
572
  >{label} is only available with an enterprise license</svelte:fragment
@@ -9,6 +9,7 @@ import SchemaForm from './SchemaForm.svelte';
9
9
  import LogPanel from './scriptEditor/LogPanel.svelte';
10
10
  import EditorBar, { EDITOR_BAR_WIDTH_THRESHOLD } from './EditorBar.svelte';
11
11
  import TestJobLoader from './TestJobLoader.svelte';
12
+ import JobProgressBar from './jobs/JobProgressBar.svelte';
12
13
  import { createEventDispatcher, onDestroy, onMount } from 'svelte';
13
14
  import { Button } from './common';
14
15
  import SplitPanesWrapper from './splitPanes/SplitPanesWrapper.svelte';
@@ -20,6 +21,9 @@ import Modal from './common/modal/Modal.svelte';
20
21
  import DiffEditor from './DiffEditor.svelte';
21
22
  import { Clipboard, CornerDownLeft, Github, Play } from 'lucide-svelte';
22
23
  import { setLicense } from '../enterpriseUtils';
24
+ import Tabs from './common/tabs/Tabs.svelte';
25
+ import Tab from './common/tabs/Tab.svelte';
26
+ import { slide } from 'svelte/transition';
23
27
  // Exported
24
28
  export let schema = emptySchema();
25
29
  export let code;
@@ -39,6 +43,7 @@ export let noHistory = false;
39
43
  export let saveToWorkspace = false;
40
44
  export let watchChanges = false;
41
45
  export let customUi = {};
46
+ let jobProgressReset;
42
47
  let websocketAlive = {
43
48
  pyright: false,
44
49
  deno: false,
@@ -55,6 +60,7 @@ let testJobLoader;
55
60
  // Test args input
56
61
  let args = initialArgs;
57
62
  let isValid = true;
63
+ let scriptProgress = undefined;
58
64
  // Test
59
65
  let testIsLoading = false;
60
66
  let testJob;
@@ -79,8 +85,11 @@ function onKeyDown(event) {
79
85
  }
80
86
  }
81
87
  function runTest() {
88
+ // Not defined if JobProgressBar not loaded
89
+ if (jobProgressReset)
90
+ jobProgressReset();
82
91
  //@ts-ignore
83
- testJobLoader.runPreview(path, code, lang, args, tag);
92
+ testJobLoader.runPreview(path, code, lang, selectedTab === 'preprocessor' ? { _ENTRYPOINT_OVERRIDE: 'preprocessor', ...args } : args, tag);
84
93
  }
85
94
  async function loadPastTests() {
86
95
  pastPreviews = await JobService.listCompletedJobs({
@@ -90,10 +99,13 @@ async function loadPastTests() {
90
99
  scriptPathExact: path
91
100
  });
92
101
  }
102
+ let hasPreprocessor = false;
93
103
  export async function inferSchema(code, nlang) {
94
104
  let nschema = schema ?? emptySchema();
95
105
  try {
96
- await inferArgs(nlang ?? lang, code, nschema);
106
+ const result = await inferArgs(nlang ?? lang, code, nschema, selectedTab === 'preprocessor' ? 'preprocessor' : undefined);
107
+ hasPreprocessor =
108
+ (selectedTab === 'preprocessor' ? !result?.no_main_func : result?.has_preprocessor) ?? false;
97
109
  validCode = true;
98
110
  schema = nschema;
99
111
  }
@@ -170,10 +182,15 @@ function collabUrl() {
170
182
  url.search = '';
171
183
  return `${url}?collab=1` + (edit ? '' : `&path=${path}`);
172
184
  }
185
+ let selectedTab = 'main';
186
+ $: showTabs = hasPreprocessor;
187
+ $: !hasPreprocessor && (selectedTab = 'main');
188
+ $: selectedTab && inferSchema(code);
173
189
  </script>
174
190
 
175
191
  <TestJobLoader
176
192
  on:done={loadPastTests}
193
+ bind:scriptProgress
177
194
  bind:this={testJobLoader}
178
195
  bind:isLoading={testIsLoading}
179
196
  bind:job={testJob}
@@ -290,6 +307,14 @@ function collabUrl() {
290
307
  </Pane>
291
308
  <Pane size={40} minSize={10}>
292
309
  <div class="flex flex-col h-full">
310
+ {#if showTabs}
311
+ <div transition:slide={{ duration: 200 }}>
312
+ <Tabs bind:selected={selectedTab}>
313
+ <Tab value="main">Main</Tab>
314
+ <Tab value="preprocessor">Preprocessor</Tab>
315
+ </Tabs>
316
+ </div>
317
+ {/if}
293
318
  <div class="flex justify-center pt-1">
294
319
  {#if testIsLoading}
295
320
  <Button on:click={testJobLoader?.cancelJob} btnClasses="w-full" color="red" size="xs">
@@ -353,7 +378,12 @@ function collabUrl() {
353
378
  {editor}
354
379
  {diffEditor}
355
380
  {args}
356
- />
381
+ >
382
+ {#if scriptProgress}
383
+ <!-- Put to the slot in logpanel -->
384
+ <JobProgressBar job={testJob} bind:scriptProgress bind:reset={jobProgressReset} compact={true} />
385
+ {/if}
386
+ </LogPanel>
357
387
  </Pane>
358
388
  </Splitpanes>
359
389
  </div>
@@ -42,7 +42,7 @@ export type ScriptEditorProps = typeof __propDef.props;
42
42
  export type ScriptEditorEvents = typeof __propDef.events;
43
43
  export type ScriptEditorSlots = typeof __propDef.slots;
44
44
  export default class ScriptEditor extends SvelteComponent<ScriptEditorProps, ScriptEditorEvents, ScriptEditorSlots> {
45
- get inferSchema(): (code: string, nlang?: "python3" | "deno" | "go" | "bash" | "powershell" | "postgresql" | "mysql" | "bigquery" | "snowflake" | "mssql" | "graphql" | "nativets" | "bun" | "php" | "rust" | undefined) => Promise<void>;
45
+ get inferSchema(): (code: string, nlang?: "python3" | "deno" | "go" | "bash" | "powershell" | "postgresql" | "mysql" | "bigquery" | "snowflake" | "mssql" | "graphql" | "nativets" | "bun" | "php" | "rust" | "ansible" | undefined) => Promise<void>;
46
46
  get setCollaborationMode(): () => Promise<void>;
47
47
  get disableCollaboration(): () => void;
48
48
  }
@@ -1,5 +1,4 @@
1
1
  <script>import { Pane, Splitpanes } from 'svelte-splitpanes';
2
- import PanelSection from './apps/editor/settingsPanel/common/PanelSection.svelte';
3
2
  import { classNames, emptyString } from '../utils';
4
3
  import { ScriptService } from '../gen';
5
4
  import { workspaceStore } from '../stores';
@@ -52,70 +51,66 @@ let previousHash = undefined;
52
51
 
53
52
  <Splitpanes class="!overflow-visible">
54
53
  <Pane size={20}>
55
- <PanelSection title="Past Versions">
56
- <div class="flex flex-col gap-2 w-full">
57
- {#if !loading}
58
- {#if versions && versions.length > 0}
59
- <div class="flex gap-2 flex-col">
60
- {#each versions ?? [] as version, versionIndex}
61
- <!-- svelte-ignore a11y-click-events-have-key-events -->
62
- <!-- svelte-ignore a11y-no-static-element-interactions -->
63
- <div
64
- class={classNames(
65
- 'border flex gap-1 truncate justify-between flex-row w-full items-center p-2 rounded-md cursor-pointer ',
66
- selectedVersion?.script_hash == version.script_hash
67
- ? 'bg-surface-selected'
68
- : '',
69
- 'hover:bg-surface-hover'
70
- )}
71
- on:click={() => {
72
- selectedVersion = version
73
- selectedVersionIndex = versionIndex
54
+ <div class="flex flex-col gap-2 px-2 pt-2 w-full">
55
+ {#if !loading}
56
+ {#if versions && versions.length > 0}
57
+ <div class="flex gap-2 flex-col">
58
+ {#each versions ?? [] as version, versionIndex}
59
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
60
+ <!-- svelte-ignore a11y-no-static-element-interactions -->
61
+ <div
62
+ class={classNames(
63
+ 'border flex gap-1 truncate justify-between flex-row w-full items-center p-2 rounded-md cursor-pointer ',
64
+ selectedVersion?.script_hash == version.script_hash ? 'bg-surface-selected' : '',
65
+ 'hover:bg-surface-hover'
66
+ )}
67
+ on:click={() => {
68
+ selectedVersion = version
69
+ selectedVersionIndex = versionIndex
74
70
 
75
- if (showDiff && versions && selectedVersionIndex === versions.length - 1) {
76
- showDiff = false
77
- }
71
+ if (showDiff && versions && selectedVersionIndex === versions.length - 1) {
72
+ showDiff = false
73
+ }
78
74
 
79
- const availableVersions = versions?.slice(selectedVersionIndex + 1)
75
+ const availableVersions = versions?.slice(selectedVersionIndex + 1)
80
76
 
81
- if (
82
- previousHash &&
83
- !availableVersions?.find((v) => v.script_hash === previousHash)
84
- ) {
85
- previousHash = availableVersions?.[0]?.script_hash
86
- }
77
+ if (
78
+ previousHash &&
79
+ !availableVersions?.find((v) => v.script_hash === previousHash)
80
+ ) {
81
+ previousHash = availableVersions?.[0]?.script_hash
82
+ }
87
83
 
88
- deploymentMsgUpdate = undefined
89
- deploymentMsgUpdateMode = false
90
- }}
91
- >
92
- <span class="text-xs truncate">
93
- {#if emptyString(version.deployment_msg)}Version {version.script_hash}{:else}{version.deployment_msg}{/if}
94
- </span>
95
- {#if openDetails}
96
- <Button
97
- on:click={() => {
98
- dispatch('openDetails', { version: version.script_hash })
99
- }}
100
- class="ml-2 inline-flex gap-1 text-xs items-center"
101
- size="xs"
102
- color="light"
103
- variant="border"
104
- >
105
- Run page<ExternalLink size={14} />
106
- </Button>
107
- {/if}
108
- </div>
109
- {/each}
110
- </div>
111
- {:else}
112
- <div class="text-sm text-tertiary">No items</div>
113
- {/if}
84
+ deploymentMsgUpdate = undefined
85
+ deploymentMsgUpdateMode = false
86
+ }}
87
+ >
88
+ <span class="text-xs truncate">
89
+ {#if emptyString(version.deployment_msg)}Version {version.script_hash}{:else}{version.deployment_msg}{/if}
90
+ </span>
91
+ {#if openDetails}
92
+ <Button
93
+ on:click={() => {
94
+ dispatch('openDetails', { version: version.script_hash })
95
+ }}
96
+ class="ml-2 inline-flex gap-1 text-xs items-center"
97
+ size="xs"
98
+ color="light"
99
+ variant="border"
100
+ >
101
+ Run page<ExternalLink size={14} />
102
+ </Button>
103
+ {/if}
104
+ </div>
105
+ {/each}
106
+ </div>
114
107
  {:else}
115
- <Skeleton layout={[[40], [40], [40], [40], [40]]} />
108
+ <div class="text-sm text-tertiary">No items</div>
116
109
  {/if}
117
- </div>
118
- </PanelSection>
110
+ {:else}
111
+ <Skeleton layout={[[40], [40], [40], [40], [40]]} />
112
+ {/if}
113
+ </div>
119
114
  </Pane>
120
115
  <Pane size={80}>
121
116
  <div class="h-full w-full overflow-auto">
@@ -0,0 +1,47 @@
1
+ <script>import { onMount, onDestroy } from 'svelte';
2
+ import { twMerge } from 'tailwind-merge';
3
+ let isAtBottom = false;
4
+ let isScrollable = false;
5
+ export let scrollableClass = '';
6
+ export let shiftedShadow = false;
7
+ let mutationObserver;
8
+ let el;
9
+ function handleScroll(event) {
10
+ const scrollableElement = event.target;
11
+ isAtBottom =
12
+ scrollableElement.scrollTop + scrollableElement.offsetHeight >=
13
+ scrollableElement.scrollHeight - 2;
14
+ }
15
+ function checkIfScrollable(el) {
16
+ return el.scrollHeight > el.clientHeight;
17
+ }
18
+ function observeScrollability(el) {
19
+ isScrollable = checkIfScrollable(el);
20
+ mutationObserver = new MutationObserver(() => {
21
+ isScrollable = checkIfScrollable(el);
22
+ });
23
+ mutationObserver?.observe(el, { childList: true, subtree: true, characterData: true });
24
+ }
25
+ export function scrollIntoView(top) {
26
+ el.scrollTo({ top, behavior: 'smooth' });
27
+ }
28
+ onMount(() => {
29
+ observeScrollability(el);
30
+ });
31
+ onDestroy(() => {
32
+ mutationObserver?.disconnect();
33
+ });
34
+ </script>
35
+
36
+ <div class={twMerge('relative pb-1', scrollableClass)}>
37
+ <div bind:this={el} on:scroll={handleScroll} class="w-full h-full overflow-y-auto">
38
+ <slot />
39
+ </div>
40
+ {#if !isAtBottom && isScrollable}
41
+ <div
42
+ class="pointer-events-none absolute bottom-0 {shiftedShadow
43
+ ? 'left-2'
44
+ : 'right-0'} h-14 w-full bg-gradient-to-t from-surface to-transparent"
45
+ />
46
+ {/if}
47
+ </div>
@@ -0,0 +1,21 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ scrollableClass?: string | undefined;
5
+ shiftedShadow?: boolean | undefined;
6
+ scrollIntoView?: ((top: number) => void) | undefined;
7
+ };
8
+ events: {
9
+ [evt: string]: CustomEvent<any>;
10
+ };
11
+ slots: {
12
+ default: {};
13
+ };
14
+ };
15
+ export type ScrollableProps = typeof __propDef.props;
16
+ export type ScrollableEvents = typeof __propDef.events;
17
+ export type ScrollableSlots = typeof __propDef.slots;
18
+ export default class Scrollable extends SvelteComponent<ScrollableProps, ScrollableEvents, ScrollableSlots> {
19
+ get scrollIntoView(): (top: number) => void;
20
+ }
21
+ export {};
@@ -1,7 +1,7 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
- openDrawer?: ((newPath: string, kind_l: "script" | "flow" | "resource" | "schedule" | "app" | "variable" | "group_" | "raw_app") => Promise<void>) | undefined;
4
+ openDrawer?: ((newPath: string, kind_l: "script" | "flow" | "resource" | "schedule" | "app" | "variable" | "group_" | "raw_app" | "http_trigger") => Promise<void>) | undefined;
5
5
  };
6
6
  events: {
7
7
  change: CustomEvent<any>;
@@ -14,6 +14,6 @@ export type ShareModalProps = typeof __propDef.props;
14
14
  export type ShareModalEvents = typeof __propDef.events;
15
15
  export type ShareModalSlots = typeof __propDef.slots;
16
16
  export default class ShareModal extends SvelteComponent<ShareModalProps, ShareModalEvents, ShareModalSlots> {
17
- get openDrawer(): (newPath: string, kind_l: "script" | "flow" | "resource" | "schedule" | "app" | "variable" | "group_" | "raw_app") => Promise<void>;
17
+ get openDrawer(): (newPath: string, kind_l: "script" | "flow" | "resource" | "schedule" | "app" | "variable" | "group_" | "raw_app" | "http_trigger") => Promise<void>;
18
18
  }
19
19
  export {};
@@ -19,7 +19,6 @@ import { ExternalLink } from 'lucide-svelte';
19
19
  import { settingsKeys } from './instanceSettings';
20
20
  import ConfirmationModal from './common/confirmationModal/ConfirmationModal.svelte';
21
21
  import ChangeInstanceUsername from './ChangeInstanceUsername.svelte';
22
- import Tooltip from './Tooltip.svelte';
23
22
  import { isCloudHosted } from '../cloud';
24
23
  import InstanceNameEditor from './InstanceNameEditor.svelte';
25
24
  let drawer;
@@ -89,7 +88,7 @@ async function updateName(name, email) {
89
88
  />
90
89
 
91
90
  <Drawer bind:this={drawer} on:open={listUsers} size="1200px" on:close={removeHash}>
92
- <DrawerContent overflow_y={true} title="Instance Settings" on:close={closeDrawer}>
91
+ <DrawerContent overflow_y={true} title="Instance settings" on:close={closeDrawer}>
93
92
  <div class="flex flex-col h-full w-full">
94
93
  <div>
95
94
  <div class="flex justify-between">
@@ -112,7 +111,7 @@ async function updateName(name, email) {
112
111
  </div>
113
112
  <div class="pt-4 h-full">
114
113
  <Tabs bind:selected={tab}>
115
- <Tab value="users">Global Users</Tab>
114
+ <Tab value="users">Global users</Tab>
116
115
  {#each settingsKeys as category}
117
116
  <Tab value={category}>{category}</Tab>
118
117
  {/each}
@@ -124,11 +123,10 @@ async function updateName(name, email) {
124
123
  <div class="mb-4">
125
124
  <h3 class="mb-2">
126
125
  Automatic username creation
127
- <Tooltip>
128
- Automatically create a username for new users based on their email, shared
129
- across workspaces.
130
- </Tooltip>
131
126
  </h3>
127
+ <div class="mb-2">
128
+ <span class="text-primary text-sm">Automatically create a username for new users based on their email, shared across workspaces. <a target="_blank" href="https://www.windmill.dev/docs/advanced/instance_settings#automatic-username-creation">Learn more</a></span>
129
+ </div>
132
130
  <Button
133
131
  btnClasses="w-auto"
134
132
  size="sm"
@@ -49,6 +49,7 @@ export async function main(s3: S3) {
49
49
  },
50
50
  body: JSON.stringify({
51
51
  type: "S3",
52
+ region: s3.region,
52
53
  bucket: s3.bucket,
53
54
  endpoint: s3.endPoint,
54
55
  port: s3.port,
@@ -10,6 +10,16 @@ export let notfound = false;
10
10
  export let jobUpdateLastFetch = undefined;
11
11
  export let toastError = false;
12
12
  export let lazyLogs = false;
13
+ // Will be set to number if job is not a flow
14
+ // If you want to find out progress of subjobs of a flow, check job.flow_status.progress
15
+ export let scriptProgress = undefined;
16
+ /// Last time asked for job progress
17
+ let lastTimeCheckedProgress = undefined;
18
+ /// Will try to poll progress every 5s and if once progress returned was not undefined, will be ignored
19
+ /// and getProgressRate will be used instead
20
+ const getProgressRetryRate = 5000;
21
+ /// How often loader poll progress
22
+ const getProgressRate = 1000;
13
23
  const dispatch = createEventDispatcher();
14
24
  $: workspace = workspaceOverride ?? $workspaceStore;
15
25
  let syncIteration = 0;
@@ -56,19 +66,20 @@ export async function runScriptByPath(path, args) {
56
66
  return abstractRun(() => JobService.runScriptByPath({
57
67
  workspace: $workspaceStore,
58
68
  path: path ?? '',
59
- requestBody: args
69
+ requestBody: args,
70
+ skipPreprocessor: true
60
71
  }));
61
72
  }
62
73
  export async function runFlowByPath(path, args) {
63
74
  return abstractRun(() => JobService.runFlowByPath({
64
75
  workspace: $workspaceStore,
65
76
  path: path ?? '',
66
- requestBody: args
77
+ requestBody: args,
78
+ skipPreprocessor: true
67
79
  }));
68
80
  }
69
81
  export async function getLogs() {
70
82
  if (job) {
71
- console.log('getLogs');
72
83
  const getUpdate = await JobService.getJobUpdates({
73
84
  workspace: workspace,
74
85
  id: job.id,
@@ -82,6 +93,9 @@ export async function getLogs() {
82
93
  }
83
94
  }
84
95
  export async function runPreview(path, code, lang, args, tag, lock) {
96
+ // Reset in case we rerun job without reloading
97
+ scriptProgress = undefined;
98
+ lastTimeCheckedProgress = undefined;
85
99
  return abstractRun(() => JobService.runScriptPreview({
86
100
  workspace: $workspaceStore,
87
101
  requestBody: {
@@ -135,14 +149,41 @@ async function loadTestJob(id) {
135
149
  if (currentId === id) {
136
150
  try {
137
151
  if (job && `running` in job) {
152
+ let getProgress = undefined;
153
+ // We only pull individual job progress this way
154
+ // Flow's progress we are getting from FlowStatusModule of flow job
155
+ if (job.job_kind == 'script' || job.job_kind == 'preview') {
156
+ // First time, before running job, lastTimeCheckedProgress is always undefined
157
+ if (lastTimeCheckedProgress) {
158
+ const lastTimeCheckedMs = Date.now() - lastTimeCheckedProgress;
159
+ // Ask for progress if the last time we asked is >5s OR the progress was once not undefined
160
+ if (lastTimeCheckedMs > getProgressRetryRate ||
161
+ (scriptProgress != undefined && lastTimeCheckedMs > getProgressRate)) {
162
+ lastTimeCheckedProgress = Date.now();
163
+ getProgress = true;
164
+ }
165
+ }
166
+ else {
167
+ // Make it think we asked for progress, but in reality we didnt. First 5s we want to wait without putting extra work on db
168
+ // 99.99% of the jobs won't have progress be set so we have to do a balance between having low-latency for jobs that use it and job that don't
169
+ // we would usually not care to have progress the first 5s and jobs that are less than 5s
170
+ lastTimeCheckedProgress = Date.now();
171
+ }
172
+ }
138
173
  const offset = logOffset == 0 ? (job.logs?.length ? job.logs?.length + 1 : 0) : logOffset;
139
- console.log('getLogs');
140
174
  let previewJobUpdates = await JobService.getJobUpdates({
141
175
  workspace: workspace,
142
176
  id,
143
177
  running: job.running,
144
- logOffset: offset
178
+ logOffset: offset,
179
+ getProgress: getProgress
145
180
  });
181
+ // Clamp number between two values with the following line:
182
+ const clamp = (num, min, max) => Math.min(Math.max(num, min), max);
183
+ if (previewJobUpdates.progress) {
184
+ // Progress cannot go back and cannot be set to 100
185
+ scriptProgress = clamp(previewJobUpdates.progress, scriptProgress ?? 0, 99);
186
+ }
146
187
  if (previewJobUpdates.new_logs) {
147
188
  if (offset == 0) {
148
189
  job.logs = previewJobUpdates.new_logs ?? '';
@@ -10,6 +10,7 @@ declare const __propDef: {
10
10
  jobUpdateLastFetch?: Date | undefined;
11
11
  toastError?: boolean | undefined;
12
12
  lazyLogs?: boolean | undefined;
13
+ scriptProgress?: number | undefined;
13
14
  abstractRun?: ((fn: () => Promise<string>) => Promise<string>) | undefined;
14
15
  runScriptByPath?: ((path: string | undefined, args: Record<string, any>) => Promise<string>) | undefined;
15
16
  runFlowByPath?: ((path: string | undefined, args: Record<string, any>) => Promise<string>) | undefined;
@@ -51,7 +52,7 @@ export default class TestJobLoader extends SvelteComponent<TestJobLoaderProps, T
51
52
  get runScriptByPath(): (path: string | undefined, args: Record<string, any>) => Promise<string>;
52
53
  get runFlowByPath(): (path: string | undefined, args: Record<string, any>) => Promise<string>;
53
54
  get getLogs(): () => Promise<void>;
54
- get runPreview(): (path: string | undefined, code: string, lang: "python3" | "deno" | "go" | "bash" | "powershell" | "postgresql" | "mysql" | "bigquery" | "snowflake" | "mssql" | "graphql" | "nativets" | "bun" | "php" | "rust" | undefined, args: Record<string, any>, tag: string | undefined, lock?: string | undefined) => Promise<string>;
55
+ get runPreview(): (path: string | undefined, code: string, lang: "python3" | "deno" | "go" | "bash" | "powershell" | "postgresql" | "mysql" | "bigquery" | "snowflake" | "mssql" | "graphql" | "nativets" | "bun" | "php" | "rust" | "ansible" | undefined, args: Record<string, any>, tag: string | undefined, lock?: string | undefined) => Promise<string>;
55
56
  get cancelJob(): () => Promise<void>;
56
57
  get clearCurrentJob(): () => Promise<void>;
57
58
  get watchJob(): (testId: string) => Promise<void>;
@@ -2,8 +2,8 @@
2
2
  import { displayDate } from '../utils';
3
3
  import { onDestroy, onMount } from 'svelte';
4
4
  export let date;
5
- export let withDate = false;
6
5
  export let agoOnlyIfRecent = false;
6
+ export let noDate = false;
7
7
  let computedTimeAgo = undefined;
8
8
  let isRecent = true;
9
9
  let interval;
@@ -52,22 +52,21 @@ async function displayDaysAgo(dateString) {
52
52
  if (dAgo == 0) {
53
53
  return `yesterday at ${date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}`;
54
54
  }
55
- else if (dAgo > 7 && withDate) {
55
+ else if (dAgo > 7 && !noDate) {
56
56
  return `${dAgo + 1} days ago at ${date.toLocaleTimeString([], {
57
57
  hour: '2-digit',
58
58
  minute: '2-digit'
59
59
  })}`;
60
60
  }
61
61
  else {
62
- return !withDate ? displayDate(dateString, false, withDate) : '';
62
+ return displayDate(dateString, false, !noDate);
63
63
  }
64
64
  }
65
65
  }
66
66
  </script>
67
67
 
68
- {#if withDate}
69
- {displayDate(date)}
70
- {/if}
71
68
  {#if computedTimeAgo && (!agoOnlyIfRecent || isRecent)}
72
69
  {computedTimeAgo}
70
+ {:else}
71
+ {displayDate(date)}
73
72
  {/if}
@@ -2,8 +2,8 @@ import { SvelteComponent } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
4
  date: string;
5
- withDate?: boolean | undefined;
6
5
  agoOnlyIfRecent?: boolean | undefined;
6
+ noDate?: boolean | undefined;
7
7
  };
8
8
  events: {
9
9
  [evt: string]: CustomEvent<any>;
@@ -0,0 +1,14 @@
1
+ <script>import { WindmillIcon2 } from './icons';
2
+ import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
3
+ import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
4
+ import { Building } from 'lucide-svelte';
5
+ export let selected = 'all';
6
+ </script>
7
+
8
+ <div class="max-w-min">
9
+ <ToggleButtonGroup bind:selected>
10
+ <ToggleButton value="all" label="All" light small />
11
+ <ToggleButton value="hub" icon={WindmillIcon2} label="Hub" light small />
12
+ <ToggleButton value="workspace" icon={Building} label="Workspace" light small />
13
+ </ToggleButtonGroup>
14
+ </div>
@@ -0,0 +1,16 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ selected?: "workspace" | "all" | "hub" | undefined;
5
+ };
6
+ events: {
7
+ [evt: string]: CustomEvent<any>;
8
+ };
9
+ slots: {};
10
+ };
11
+ export type ToggleHubWorkspaceQuickProps = typeof __propDef.props;
12
+ export type ToggleHubWorkspaceQuickEvents = typeof __propDef.events;
13
+ export type ToggleHubWorkspaceQuickSlots = typeof __propDef.slots;
14
+ export default class ToggleHubWorkspaceQuick extends SvelteComponent<ToggleHubWorkspaceQuickProps, ToggleHubWorkspaceQuickEvents, ToggleHubWorkspaceQuickSlots> {
15
+ }
16
+ export {};
@@ -84,7 +84,8 @@ const defaultTags = [
84
84
  'other',
85
85
  'bun',
86
86
  'php',
87
- 'rust'
87
+ 'rust',
88
+ 'ansible'
88
89
  ];
89
90
  const nativeTags = [
90
91
  'nativets',
@@ -436,7 +437,7 @@ let createdTags = [];
436
437
  options={{
437
438
  right: 'Send an alert when the number of alive workers falls below a given threshold'
438
439
  }}
439
- checked={nconfig?.min_alive_workers_alert_threshold !== undefined ?? false}
440
+ checked={nconfig?.min_alive_workers_alert_threshold !== undefined}
440
441
  on:change={(ev) => {
441
442
  if (nconfig !== undefined) {
442
443
  nconfig.min_alive_workers_alert_threshold = ev.detail ? 1 : undefined