windmill-components 1.695.1 → 1.698.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 (157) 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/components/AppConnectInner.svelte +38 -5
  74. package/package/components/CompareWorkspaces.svelte +142 -486
  75. package/package/components/Editor.svelte +5 -4
  76. package/package/components/Editor.svelte.d.ts +1 -0
  77. package/package/components/FilterSearchbar.svelte +3 -1
  78. package/package/components/FilterSearchbar.svelte.d.ts +1 -0
  79. package/package/components/ForkWorkspaceBanner.svelte +16 -0
  80. package/package/components/LogViewer.svelte +51 -60
  81. package/package/components/OnBehalfOfSelector.svelte +10 -7
  82. package/package/components/ResourceEditor.svelte +198 -311
  83. package/package/components/ResourceEditor.svelte.d.ts +3 -3
  84. package/package/components/ResourceEditorDrawer.svelte +17 -6
  85. package/package/components/ResourceForm.svelte +235 -0
  86. package/package/components/ResourceForm.svelte.d.ts +25 -0
  87. package/package/components/RunsPage.svelte +1 -0
  88. package/package/components/ScriptBuilder.svelte +1 -0
  89. package/package/components/ScriptEditor.svelte +10 -3
  90. package/package/components/ScriptEditor.svelte.d.ts +1 -0
  91. package/package/components/TaggedTextInput.svelte +4 -1
  92. package/package/components/TaggedTextInput.svelte.d.ts +2 -0
  93. package/package/components/VariableEditor.svelte +177 -199
  94. package/package/components/VariableEditor.svelte.d.ts +1 -2
  95. package/package/components/VariableForm.svelte +133 -0
  96. package/package/components/VariableForm.svelte.d.ts +22 -0
  97. package/package/components/WsSpecificVersions.svelte +39 -0
  98. package/package/components/WsSpecificVersions.svelte.d.ts +9 -0
  99. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +0 -1
  100. package/package/components/apps/editor/AppEditorHeaderDeploy.svelte.d.ts +1 -1
  101. package/package/components/common/table/AppRow.svelte +2 -1
  102. package/package/components/common/table/AppRow.svelte.d.ts +1 -0
  103. package/package/components/common/table/FlowRow.svelte +2 -1
  104. package/package/components/common/table/FlowRow.svelte.d.ts +1 -0
  105. package/package/components/common/table/RawAppRow.svelte +2 -1
  106. package/package/components/common/table/RawAppRow.svelte.d.ts +1 -0
  107. package/package/components/common/table/Row.svelte +11 -3
  108. package/package/components/common/table/Row.svelte.d.ts +2 -1
  109. package/package/components/common/table/RowIcon.svelte +18 -2
  110. package/package/components/common/table/RowIcon.svelte.d.ts +1 -1
  111. package/package/components/common/table/ScriptRow.svelte +2 -1
  112. package/package/components/common/table/ScriptRow.svelte.d.ts +1 -0
  113. package/package/components/copilot/autocomplete/Autocompletor.d.ts +3 -1
  114. package/package/components/copilot/autocomplete/Autocompletor.js +5 -2
  115. package/package/components/copilot/autocomplete/request.d.ts +1 -0
  116. package/package/components/copilot/autocomplete/request.js +1 -1
  117. package/package/components/copilot/chat/AIChatManager.svelte.js +14 -4
  118. package/package/components/copilot/chat/AiChatLayout.svelte +2 -0
  119. package/package/components/copilot/chat/ContextManager.svelte.d.ts +1 -0
  120. package/package/components/copilot/chat/CreatedResourceActionDrawers.svelte +129 -0
  121. package/package/components/copilot/chat/CreatedResourceActionDrawers.svelte.d.ts +4 -0
  122. package/package/components/copilot/chat/ToolExecutionDisplay.svelte +14 -6
  123. package/package/components/copilot/chat/ToolMessageActions.svelte +73 -0
  124. package/package/components/copilot/chat/ToolMessageActions.svelte.d.ts +7 -0
  125. package/package/components/copilot/chat/createdResourceActions.svelte.d.ts +6 -0
  126. package/package/components/copilot/chat/createdResourceActions.svelte.js +29 -0
  127. package/package/components/copilot/chat/script/core.d.ts +6 -2
  128. package/package/components/copilot/chat/script/core.js +13 -7
  129. package/package/components/copilot/chat/script/wacPrompt.test.d.ts +1 -0
  130. package/package/components/copilot/chat/script/wacPrompt.test.js +25 -0
  131. package/package/components/copilot/chat/shared.d.ts +12 -0
  132. package/package/components/copilot/chat/shared.test.js +23 -2
  133. package/package/components/copilot/chat/workspaceTools.js +34 -4
  134. package/package/components/flows/content/ScriptEditorDrawer.svelte +1 -0
  135. package/package/components/graph/wacToFlow.js +1 -1
  136. package/package/components/graph/wacToFlow.test.d.ts +1 -0
  137. package/package/components/graph/wacToFlow.test.js +17 -0
  138. package/package/components/home/Item.svelte +5 -1
  139. package/package/components/home/Item.svelte.d.ts +1 -0
  140. package/package/components/home/ItemsList.svelte +260 -3
  141. package/package/components/instanceSettings/SecretBackendConfig.svelte +457 -88
  142. package/package/components/runs/useJobsLoader.svelte.js +5 -11
  143. package/package/components/sidebar/WorkspaceMenu.svelte +19 -5
  144. package/package/externalDomain.d.ts +2 -0
  145. package/package/externalDomain.js +16 -0
  146. package/package/gen/core/OpenAPI.js +1 -1
  147. package/package/gen/types.gen.d.ts +0 -112
  148. package/package/hubPaths.json +2 -2
  149. package/package/system_prompts/index.d.ts +1 -1
  150. package/package/system_prompts/index.js +22 -3
  151. package/package/system_prompts/prompts.d.ts +2 -2
  152. package/package/system_prompts/prompts.js +6 -3
  153. package/package/utils_deployable.d.ts +162 -638
  154. package/package/utils_deployable.js +75 -143
  155. package/package/utils_workspace_deploy.d.ts +10 -4
  156. package/package/utils_workspace_deploy.js +167 -42
  157. package/package.json +7 -3
@@ -58,7 +58,7 @@ import { resource, useDebounce, watch } from 'runed';
58
58
  // import EditorTheme from './EditorTheme.svelte'
59
59
  let divEl = $state(null);
60
60
  let editor = $state(null);
61
- let { code = $bindable(), cmdEnterAction = undefined, formatAction = undefined, automaticLayout = true, websocketAlive = $bindable(), shouldBindKey = true, fixedOverflowWidgets = true, path = undefined, yContent = undefined, awareness = undefined, folding = false, args = undefined, useWebsockets = true, small = false, scriptLang, disabled = false, lineNumbersMinChars = 3, files = {}, extraLib = undefined, changeTimeout = 500, loadAsync = false, key = undefined, class: clazz = undefined, moduleId = undefined, enablePreprocessorSnippet = false, rawAppRunnableKey = undefined, preparedAssetsSqlQueries, customTag } = $props();
61
+ let { code = $bindable(), cmdEnterAction = undefined, formatAction = undefined, automaticLayout = true, websocketAlive = $bindable(), shouldBindKey = true, fixedOverflowWidgets = true, path = undefined, yContent = undefined, awareness = undefined, folding = false, args = undefined, useWebsockets = true, small = false, scriptLang, workflowAsCode = false, disabled = false, lineNumbersMinChars = 3, files = {}, extraLib = undefined, changeTimeout = 500, loadAsync = false, key = undefined, class: clazz = undefined, moduleId = undefined, enablePreprocessorSnippet = false, rawAppRunnableKey = undefined, preparedAssetsSqlQueries, customTag } = $props();
62
62
  $effect.pre(() => {
63
63
  if (websocketAlive == undefined) {
64
64
  websocketAlive = {
@@ -627,11 +627,11 @@ function addChatHandler(editor) {
627
627
  }
628
628
  }
629
629
  let autocompletor = $state(undefined);
630
- function addAutoCompletor(editor, scriptLang) {
630
+ function addAutoCompletor(editor, scriptLang, workflowAsCode) {
631
631
  if (autocompletor) {
632
632
  autocompletor.dispose();
633
633
  }
634
- autocompletor = new Autocompletor(editor, scriptLang);
634
+ autocompletor = new Autocompletor(editor, scriptLang, { workflowAsCode });
635
635
  }
636
636
  const outputChannel = {
637
637
  name: 'Language Server Client',
@@ -1543,13 +1543,14 @@ $effect(() => {
1543
1543
  (!dbSchema || lang !== 'graphql') && untrack(() => disposeGaphqlService());
1544
1544
  });
1545
1545
  $effect(() => {
1546
+ const currentWorkflowAsCode = workflowAsCode;
1546
1547
  $copilotInfo.enabled &&
1547
1548
  $codeCompletionSessionEnabled &&
1548
1549
  Autocompletor.isProviderModelSupported($copilotInfo.codeCompletionModel) &&
1549
1550
  initialized &&
1550
1551
  editor &&
1551
1552
  scriptLang &&
1552
- untrack(() => editor && addAutoCompletor(editor, scriptLang));
1553
+ untrack(() => editor && addAutoCompletor(editor, scriptLang, currentWorkflowAsCode));
1553
1554
  });
1554
1555
  $effect(() => {
1555
1556
  $copilotInfo.enabled && initialized && editor && untrack(() => editor && addChatHandler(editor));
@@ -23,6 +23,7 @@ interface Props {
23
23
  useWebsockets?: boolean;
24
24
  small?: boolean;
25
25
  scriptLang: Preview['language'] | 'bunnative' | 'tsx' | 'jsx' | 'json' | undefined;
26
+ workflowAsCode?: boolean;
26
27
  disabled?: boolean;
27
28
  lineNumbersMinChars?: number;
28
29
  files?: Record<string, {
@@ -185,7 +185,7 @@ import Button from './common/button/Button.svelte';
185
185
  import Badge from './common/badge/Badge.svelte';
186
186
  import InlineCalendarInput, { fromCalendarDate, toCalendarDate } from './common/InlineCalendarInput.svelte';
187
187
  import { ButtonType } from './common';
188
- let { schema, value: valueInput = $bindable(), presets: _presets = [], class: className, placeholder = 'Filter...' } = $props();
188
+ let { schema, value: valueInput = $bindable(), presets: _presets = [], class: className, placeholder = 'Filter...', autofocus } = $props();
189
189
  let _value = new DebouncedTempValue(() => clone(valueInput), (v) => !errors.length && (valueInput = clone(v)), (t) => Object.entries(t));
190
190
  let value = $derived(_value.current);
191
191
  let errors = $derived(validateFilterInstance(schema, value));
@@ -493,6 +493,8 @@ function appendFilterAsText(presetValue) {
493
493
  inputSizeClasses.md
494
494
  )}
495
495
  {placeholder}
496
+ onKeyDown={() => (open = true)}
497
+ {autofocus}
496
498
  />
497
499
  {#if asText.val}
498
500
  <CloseButton small class="mr-1.5" onClick={() => (_value.current = {})} />
@@ -81,6 +81,7 @@ type Props<SchemaT extends FilterSchemaRec> = {
81
81
  }[];
82
82
  class?: string;
83
83
  placeholder?: string;
84
+ autofocus?: boolean;
84
85
  };
85
86
  declare const FilterSearchbar: import("svelte").Component<Props<FilterSchemaRec>, {}, "value">;
86
87
  type FilterSearchbar = ReturnType<typeof FilterSearchbar>;
@@ -213,6 +213,22 @@ function forkAheadBehindMessage(changesAhead, changesBehind) {
213
213
  : ''}
214
214
  </span>
215
215
  {/if}
216
+ {#if comparison.summary.schedules_changed > 0}
217
+ <span class="text-blue-700 dark:text-blue-100">
218
+ {comparison.summary.schedules_changed} schedule{comparison.summary
219
+ .schedules_changed !== 1
220
+ ? 's'
221
+ : ''}
222
+ </span>
223
+ {/if}
224
+ {#if comparison.summary.triggers_changed > 0}
225
+ <span class="text-blue-700 dark:text-blue-100">
226
+ {comparison.summary.triggers_changed} trigger{comparison.summary
227
+ .triggers_changed !== 1
228
+ ? 's'
229
+ : ''}
230
+ </span>
231
+ {/if}
216
232
  </div>
217
233
 
218
234
  {#if ciTestTotal > 0}
@@ -12,6 +12,7 @@ const S3_LOG_SEARCH_LIMIT = 2000;
12
12
  import { Button, Drawer, DrawerContent } from './common';
13
13
  import { copyToClipboard } from '../utils';
14
14
  import { base } from '../base';
15
+ import { withExternalDomain } from '../externalDomain';
15
16
  import { workspaceStore } from '../stores';
16
17
  import { AnsiUp } from 'ansi_up';
17
18
  import NoWorkerWithTagWarning from './runs/NoWorkerWithTagWarning.svelte';
@@ -24,7 +25,7 @@ let { content, isLoading, duration = undefined, mem = undefined, wrapperClass =
24
25
  const ansi_up = $state(new AnsiUp());
25
26
  ansi_up.use_classes = true;
26
27
  let scroll = $state(true);
27
- let div = $state(null);
28
+ let preEl = $state(null);
28
29
  // let downloadStartUrl: string | undefined = undefined
29
30
  let LOG_INC = 10000;
30
31
  let LOG_LIMIT = $state(LOG_INC);
@@ -95,8 +96,8 @@ function truncateContent(jobContent, loadedFromObjectStore, limit) {
95
96
  return content;
96
97
  }
97
98
  export function scrollToBottom() {
98
- // console.log('scrollToBottom', scroll, div)
99
- scroll && setTimeout(() => div?.scroll({ top: div?.scrollHeight, behavior: 'smooth' }), 100);
99
+ scroll &&
100
+ setTimeout(() => preEl?.scroll({ top: preEl?.scrollHeight, behavior: 'smooth' }), 100);
100
101
  }
101
102
  let logViewer = $state();
102
103
  async function getStoreLogs() {
@@ -132,6 +133,7 @@ $effect.pre(() => {
132
133
  scroll = true;
133
134
  }
134
135
  });
136
+ let downloadHref = $derived(withExternalDomain(`${base}/api/w/${$workspaceStore}/jobs_u/get_logs/${jobId}`));
135
137
  let truncatedContent = $derived(truncateContent(content, loadedFromObjectStore, LOG_LIMIT));
136
138
  let prefixInfo = $derived(findPrefixInfo(truncatedContent));
137
139
  let downloadStartUrl = $derived(findStartUrl(truncatedContent, prefixInfo));
@@ -170,7 +172,7 @@ let html = $derived.by(() => {
170
172
  {#snippet actions()}
171
173
  {#if jobId && download}
172
174
  <Button
173
- href="{base}/api/w/{$workspaceStore}/jobs_u/get_logs/{jobId}"
175
+ href={downloadHref}
174
176
  download="windmill_logs_{jobId}.txt"
175
177
  color="light"
176
178
  size="xs"
@@ -199,12 +201,12 @@ let html = $derived.by(() => {
199
201
  >{#if content}{@const len =
200
202
  (content?.length ?? 0) +
201
203
  (loadedFromObjectStore?.length ?? 0)}{#if splitHtml}{@html splitHtml.before}<button
202
- onclick={getStoreLogs}
203
- >Show more... <Tooltip>{tooltipText(prefixInfo)}</Tooltip></button
204
- >{@html splitHtml.after}{:else if downloadStartUrl}<button
205
204
  onclick={getStoreLogs}
206
205
  >Show more... <Tooltip>{tooltipText(prefixInfo)}</Tooltip></button
207
- ><br />{@html html}{:else if len > LOG_LIMIT}(truncated to the last {LOG_LIMIT} characters)...<br
206
+ >{@html splitHtml.after}{:else if downloadStartUrl}<button onclick={getStoreLogs}
207
+ >Show more... <Tooltip>{tooltipText(prefixInfo)}</Tooltip></button
208
+ ><br
209
+ />{@html html}{:else if len > LOG_LIMIT}(truncated to the last {LOG_LIMIT} characters)...<br
208
210
  /><button onclick={() => showMoreTruncate(len)}>Show more..</button><br
209
211
  />{@html html}{:else}{@html html}{/if}{:else if isLoading}Waiting for job to start...{:else}No logs are available yet{/if}</pre
210
212
  >
@@ -215,18 +217,41 @@ let html = $derived.by(() => {
215
217
  <div class="w-full h-full {wrapperClass}">
216
218
  <div class="w-full h-full relative">
217
219
  <div
218
- bind:this={div}
219
- class="w-full h-full overflow-auto bg-surface-secondary pt-4 {noMaxH ? '' : 'max-h-screen'}"
220
+ class="w-full h-full bg-surface-secondary flex flex-col {noMaxH ? '' : 'max-h-screen'}"
220
221
  data-nav-id={navigationId}
221
222
  >
222
- <div class="absolute z-10 top-0 right-0 flex flex-row-reverse justify-between text-xs">
223
- <div class="flex gap-2">
223
+ <div class="flex gap-2 ml-2 {small ? 'py-1' : 'py-2'} border-b">
224
+ {#if isLoading}
225
+ <div class="flex gap-2 items-center">
226
+ <Loader2 class="animate-spin" />
227
+ {#if tag}
228
+ <div class="flex flex-row items-center gap-1">
229
+ <div class="text-secondary text-2xs">{tagLabel ?? 'tag'}: {tag}</div>
230
+ <NoWorkerWithTagWarning {tagLabel} {tag} />
231
+ </div>
232
+ {/if}
233
+ {#if jobId}
234
+ <QueuePosition {jobId} />
235
+ {/if}
236
+ </div>
237
+ {:else if duration}
238
+ <span
239
+ class={twMerge('text-secondary dark:text-gray-400', small ? '!text-2xs' : '!text-xs')}
240
+ >took {duration}ms</span
241
+ >
242
+ {/if}
243
+ {#if mem}
244
+ <span class="{small ? '!text-2xs' : '!text-xs'} text-secondary dark:text-gray-400"
245
+ >mem peak: {(mem / 1024).toPrecision(4)}MB</span
246
+ >
247
+ {/if}
248
+ <div class="flex gap-2 justify-end flex-1">
224
249
  {#if jobId && download}
225
250
  <div class="flex items-center">
226
251
  <a
227
252
  class="text-primary pb-0.5"
228
253
  target="_blank"
229
- href="{base}/api/w/{$workspaceStore}/jobs_u/get_logs/{jobId}"
254
+ href={downloadHref}
230
255
  download="windmill_logs_{jobId}.txt"
231
256
  ><Download size="14" />
232
257
  </a>
@@ -234,67 +259,33 @@ let html = $derived.by(() => {
234
259
  {/if}
235
260
  <button onclick={logViewer.openDrawer}><Expand size="12" /></button>
236
261
  {#if !noAutoScroll}
237
- <label
238
- class="{small
239
- ? ''
240
- : 'py-2'} pr-2 text-2xs flex gap-2 font-normal text-primary items-center"
241
- >
262
+ <label class="pr-2 text-2xs flex gap-2 font-normal text-primary items-center">
242
263
  Auto scroll
243
264
  <input class="windmillapp" type="checkbox" bind:checked={scroll} />
244
265
  </label>
245
266
  {/if}
246
267
  </div>
247
268
  </div>
248
- {#if isLoading}
249
- <div class="flex gap-2 absolute top-2 left-2 items-center z-10">
250
- <Loader2 class="animate-spin" />
251
- {#if tag}
252
- <div class="flex flex-row items-center gap-1">
253
- <div class="text-primary text-2xs">{tagLabel ?? 'tag'}: {tag}</div>
254
- <NoWorkerWithTagWarning {tagLabel} {tag} />
255
- </div>
256
- {/if}
257
- {#if jobId}
258
- <QueuePosition {jobId} />
259
- {/if}
260
- </div>
261
- {:else if duration}
262
- <span
263
- class={twMerge(
264
- 'absolute text-primary dark:text-gray-400',
265
- small ? '!text-2xs' : '!text-xs',
266
- small ? 'top-0' : 'top-2',
267
- noPadding ? '' : 'left-2'
268
- )}>took {duration}ms</span
269
- >
270
- {/if}
271
- {#if mem}
272
- <span
273
- class="absolute {small ? '!text-2xs' : '!text-xs'} text-primary dark:text-gray-400 {small
274
- ? 'top-0'
275
- : 'top-2'} left-36">mem peak: {(mem / 1024).toPrecision(4)}MB</span
276
- >
277
- {/if}
278
269
  <pre
270
+ bind:this={preEl}
279
271
  class={twMerge(
280
- 'whitespace-pre break-words w-full ',
272
+ 'whitespace-pre break-words w-full flex-1 overflow-auto',
281
273
  small ? '!text-2xs' : '!text-xs',
282
274
  noPadding ? '' : 'p-2'
283
275
  )}
284
276
  >{#if content}{@const len =
285
- (content?.length ?? 0) +
286
- (loadedFromObjectStore?.length ?? 0)}{#if splitHtml}<span>{@html splitHtml.before}</span><button
287
- onclick={getStoreLogs}
288
- >Show more... &nbsp;<Tooltip>{tooltipText(prefixInfo)}</Tooltip></button
289
- ><span>{@html splitHtml.after}</span
290
- >{:else if downloadStartUrl}<button
277
+ (content?.length ?? 0) + (loadedFromObjectStore?.length ?? 0)}{#if splitHtml}<span
278
+ >{@html splitHtml.before}</span
279
+ ><button onclick={getStoreLogs}
280
+ >Show more... &nbsp;<Tooltip>{tooltipText(prefixInfo)}</Tooltip></button
281
+ ><span>{@html splitHtml.after}</span>{:else if downloadStartUrl}<button
291
282
  onclick={getStoreLogs}
292
283
  >Show more... &nbsp;<Tooltip>{tooltipText(prefixInfo)}</Tooltip></button
293
- ><br /><span>{@html html}</span
294
- >{:else if len > LOG_LIMIT}<button onclick={() => showMoreTruncate(len)}
295
- >Show more..</button
296
- >&nbsp;({LOG_LIMIT}/{len} chars)<br /><span>{@html html}</span
297
- >{:else}<span>{@html html}</span>{/if}{:else if !isLoading}<span>{customEmptyMessage}</span>{/if}</pre
284
+ ><br /><span>{@html html}</span>{:else if len > LOG_LIMIT}<button
285
+ onclick={() => showMoreTruncate(len)}>Show more..</button
286
+ >&nbsp;({LOG_LIMIT}/{len} chars)<br /><span>{@html html}</span>{:else}<span
287
+ >{@html html}</span
288
+ >{/if}{:else if !isLoading}<span>{customEmptyMessage}</span>{/if}</pre
298
289
  >
299
290
  </div>
300
291
  </div>
@@ -1,13 +1,16 @@
1
- <script lang="ts" module>/**
1
+ <script lang="ts" module>import { isTriggerOrScheduleKind } from 'windmill-utils-internal';
2
+ /**
2
3
  * Check if an item needs on_behalf_of selection.
3
4
  * Shows the selector when the source item has an on_behalf_of value set.
4
5
  */
5
6
  export function needsOnBehalfOfSelection(kind, sourceValue) {
6
- if (kind !== 'flow' &&
7
- kind !== 'script' &&
8
- kind !== 'app' &&
9
- kind !== 'raw_app' &&
10
- kind !== 'trigger')
7
+ const supported = kind === 'flow' ||
8
+ kind === 'script' ||
9
+ kind === 'app' ||
10
+ kind === 'raw_app' ||
11
+ kind === 'trigger' ||
12
+ isTriggerOrScheduleKind(kind);
13
+ if (!supported)
11
14
  return false;
12
15
  return !!sourceValue;
13
16
  }
@@ -20,7 +23,7 @@ import { userStore } from '../stores';
20
23
  import { UserService } from '../gen';
21
24
  import TextInput from './text_input/TextInput.svelte';
22
25
  let { targetWorkspace, targetValue, selected, onSelect, kind, canPreserve, customValue, isDeployment = true, folderDefault = undefined } = $props();
23
- const isTrigger = $derived(kind === 'trigger');
26
+ const isTrigger = $derived(kind === 'trigger' || isTriggerOrScheduleKind(kind));
24
27
  let label = $derived(isTrigger
25
28
  ? 'Set the user this will be permissioned as:'
26
29
  : 'Set the user this will be run on behalf of:');