windmill-components 1.504.6 → 1.511.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 (233) hide show
  1. package/package/ata/index.js +1 -1
  2. package/package/components/AppConnectInner.svelte +184 -29
  3. package/package/components/ArgInput.svelte +33 -103
  4. package/package/components/AuthSettings.svelte +45 -1
  5. package/package/components/Dev.svelte +31 -24
  6. package/package/components/DisplayResult.svelte +53 -26
  7. package/package/components/DisplayResult.svelte.d.ts +1 -1
  8. package/package/components/DynSelect.svelte +3 -3
  9. package/package/components/Editor.svelte +115 -88
  10. package/package/components/Editor.svelte.d.ts +30 -55
  11. package/package/components/EditorBar.svelte +2 -2
  12. package/package/components/ErrorOrRecoveryHandler.svelte +73 -67
  13. package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +8 -24
  14. package/package/components/FlowBuilder.svelte +11 -2
  15. package/package/components/FlowJobResult.svelte +12 -17
  16. package/package/components/FlowJobResult.svelte.d.ts +5 -18
  17. package/package/components/FlowPreviewContent.svelte +13 -10
  18. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  19. package/package/components/FlowPreviewResult.svelte +14 -6
  20. package/package/components/FlowStatusViewer.svelte +11 -24
  21. package/package/components/FlowStatusViewer.svelte.d.ts +19 -18
  22. package/package/components/FlowStatusViewerInner.svelte +110 -131
  23. package/package/components/FlowStatusViewerInner.svelte.d.ts +20 -18
  24. package/package/components/GitDiffPreview.svelte +55 -0
  25. package/package/components/GitDiffPreview.svelte.d.ts +13 -0
  26. package/package/components/HistoricInputs.svelte +2 -2
  27. package/package/components/HttpAgentWorkerDrawer.svelte +1 -1
  28. package/package/components/InitGitRepoPopover.svelte +410 -0
  29. package/package/components/InitGitRepoPopover.svelte.d.ts +13 -0
  30. package/package/components/InstanceSetting.svelte +21 -9
  31. package/package/components/InstanceSettings.svelte +16 -3
  32. package/package/components/JobLoader.svelte +567 -0
  33. package/package/components/JobLoader.svelte.d.ts +53 -0
  34. package/package/components/JobLogs.svelte +6 -4
  35. package/package/components/JobLogs.svelte.d.ts +5 -18
  36. package/package/components/JsonEditor.svelte +11 -11
  37. package/package/components/JsonEditor.svelte.d.ts +14 -56
  38. package/package/components/Label.svelte +6 -11
  39. package/package/components/Label.svelte.d.ts +14 -39
  40. package/package/components/LightweightResourcePicker.svelte +18 -39
  41. package/package/components/LightweightResourcePicker.svelte.d.ts +6 -22
  42. package/package/components/LogViewer.svelte +35 -41
  43. package/package/components/LogViewer.svelte.d.ts +6 -20
  44. package/package/components/ModulePreviewResultViewer.svelte +3 -1
  45. package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -0
  46. package/package/components/ModuleTest.svelte +16 -11
  47. package/package/components/NumberTypeNarrowing.svelte +13 -16
  48. package/package/components/NumberTypeNarrowing.svelte.d.ts +4 -18
  49. package/package/components/PullGitRepoPopover.svelte +355 -0
  50. package/package/components/PullGitRepoPopover.svelte.d.ts +18 -0
  51. package/package/components/ResourceTypePicker.svelte +20 -17
  52. package/package/components/ResourceTypePicker.svelte.d.ts +7 -6
  53. package/package/components/S3FilePicker.svelte +5 -3
  54. package/package/components/SavedInputs.svelte +2 -2
  55. package/package/components/ScriptBuilder.svelte +4 -3
  56. package/package/components/ScriptEditor.svelte +34 -31
  57. package/package/components/ScriptEditor.svelte.d.ts +3 -3
  58. package/package/components/Section.svelte +7 -20
  59. package/package/components/Section.svelte.d.ts +20 -47
  60. package/package/components/ServiceLogsInner.svelte +2 -1
  61. package/package/components/ServiceLogsInner.svelte.d.ts +1 -0
  62. package/package/components/SimpleEditor.svelte +4 -4
  63. package/package/components/SimpleEditor.svelte.d.ts +1 -0
  64. package/package/components/SqlRepl.svelte +0 -1
  65. package/package/components/Subsection.svelte +10 -12
  66. package/package/components/Subsection.svelte.d.ts +15 -39
  67. package/package/components/UserSettings.svelte +1 -1
  68. package/package/components/WorkerGroup.svelte +260 -165
  69. package/package/components/WorkerGroup.svelte.d.ts +2 -0
  70. package/package/components/WorkerTagPicker.svelte +3 -3
  71. package/package/components/WorkerTagSelect.svelte +33 -4
  72. package/package/components/apps/components/buttons/AppButton.svelte +7 -1
  73. package/package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
  74. package/package/components/apps/components/display/AppCustomComponent.svelte +1 -1
  75. package/package/components/apps/components/display/AppDisplayComponentByJobId.svelte +16 -11
  76. package/package/components/apps/components/display/AppJobIdLogComponent.svelte +13 -10
  77. package/package/components/apps/components/display/AppMenu.svelte +5 -0
  78. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +3 -3
  79. package/package/components/apps/components/display/dbtable/DeleteRow.svelte +3 -3
  80. package/package/components/apps/components/display/dbtable/InsertRowRunnable.svelte +3 -3
  81. package/package/components/apps/components/display/dbtable/UpdateCell.svelte +3 -3
  82. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +3 -3
  83. package/package/components/apps/components/helpers/RunnableComponent.svelte +65 -54
  84. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +5 -5
  85. package/package/components/apps/components/inputs/AppUserResource.svelte +26 -8
  86. package/package/components/apps/editor/AppEditorHeader.svelte +11 -5
  87. package/package/components/apps/editor/AppJobsDrawer.svelte +5 -5
  88. package/package/components/apps/editor/RunnableJobPanel.svelte +4 -4
  89. package/package/components/apps/editor/component/components.d.ts +12 -0
  90. package/package/components/apps/editor/component/components.js +19 -7
  91. package/package/components/assets/AssetButtons.svelte +38 -0
  92. package/package/components/assets/AssetButtons.svelte.d.ts +15 -0
  93. package/package/components/assets/AssetsDropdownButton.svelte +60 -72
  94. package/package/components/assets/AssetsDropdownButton.svelte.d.ts +3 -4
  95. package/package/components/assets/AssetsUsageDrawer.svelte +10 -10
  96. package/package/components/assets/JobAssetsViewer.svelte +79 -0
  97. package/package/components/assets/JobAssetsViewer.svelte.d.ts +7 -0
  98. package/package/components/assets/README_DEV.md +0 -0
  99. package/package/components/assets/lib.d.ts +9 -1
  100. package/package/components/assets/lib.js +48 -7
  101. package/package/components/common/fileUpload/FileUpload.svelte +126 -84
  102. package/package/components/common/fileUpload/FileUpload.svelte.d.ts +13 -3
  103. package/package/components/common/fileUpload/S3ArgInput.svelte +111 -0
  104. package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +21 -0
  105. package/package/components/common/table/ScriptRow.svelte +3 -1
  106. package/package/components/copilot/AIFormSettings.svelte +3 -4
  107. package/package/components/copilot/AIFormSettings.svelte.d.ts +5 -19
  108. package/package/components/copilot/autocomplete/Autocompletor.d.ts +3 -1
  109. package/package/components/copilot/autocomplete/Autocompletor.js +269 -35
  110. package/package/components/copilot/autocomplete/request.d.ts +3 -0
  111. package/package/components/copilot/autocomplete/request.js +15 -7
  112. package/package/components/copilot/chat/AIChatDisplay.svelte +8 -0
  113. package/package/components/copilot/chat/AIChatManager.svelte.js +13 -8
  114. package/package/components/copilot/chat/flow/ModuleAcceptReject.svelte +5 -5
  115. package/package/components/copilot/chat/flow/core.d.ts +1 -1
  116. package/package/components/copilot/chat/flow/core.js +2 -38
  117. package/package/components/copilot/chat/navigator/apiTools.d.ts +8 -0
  118. package/package/components/copilot/chat/navigator/apiTools.js +95 -15
  119. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  120. package/package/components/copilot/chat/navigator/core.js +2 -1
  121. package/package/components/copilot/chat/script/core.d.ts +11 -2
  122. package/package/components/copilot/chat/script/core.js +165 -23
  123. package/package/components/copilot/chat/shared.d.ts +10 -0
  124. package/package/components/copilot/chat/shared.js +56 -0
  125. package/package/components/copilot/lib.d.ts +1 -0
  126. package/package/components/copilot/lib.js +30 -9
  127. package/package/components/custom_ui.d.ts +1 -0
  128. package/package/components/flows/FlowAssetsHandler.svelte +133 -0
  129. package/package/components/flows/FlowAssetsHandler.svelte.d.ts +14 -0
  130. package/package/components/flows/content/FlowModuleCache.svelte +4 -4
  131. package/package/components/flows/content/FlowModuleCache.svelte.d.ts +4 -18
  132. package/package/components/flows/content/FlowModuleComponent.svelte +16 -19
  133. package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte +3 -4
  134. package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte.d.ts +4 -18
  135. package/package/components/flows/content/FlowModuleSleep.svelte +6 -7
  136. package/package/components/flows/content/FlowModuleSleep.svelte.d.ts +4 -18
  137. package/package/components/flows/content/FlowModuleSuspend.svelte +19 -17
  138. package/package/components/flows/content/FlowModuleSuspend.svelte.d.ts +4 -18
  139. package/package/components/flows/content/FlowModuleTimeout.svelte +4 -4
  140. package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +4 -18
  141. package/package/components/flows/flowStore.d.ts +1 -1
  142. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -0
  143. package/package/components/flows/propPicker/OutputPicker.svelte +9 -4
  144. package/package/components/flows/scheduleUtils.js +1 -1
  145. package/package/components/flows/types.d.ts +2 -1
  146. package/package/components/graph/FlowGraphV2.svelte +8 -104
  147. package/package/components/graph/FlowGraphV2.svelte.d.ts +0 -2
  148. package/package/components/graph/graphBuilder.svelte.d.ts +6 -3
  149. package/package/components/graph/graphBuilder.svelte.js +35 -9
  150. package/package/components/graph/renderers/edges/BaseEdge.svelte +2 -5
  151. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +1 -0
  152. package/package/components/graph/renderers/nodes/AssetNode.svelte +23 -20
  153. package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +5 -10
  154. package/package/components/graph/renderers/nodes/AssetsOverflowedNode.svelte +1 -1
  155. package/package/components/graph/util.js +1 -1
  156. package/package/components/home/ItemsList.svelte +2 -0
  157. package/package/components/icons/AssetGenericIcon.svelte +0 -3
  158. package/package/components/jobs/JobPreview.svelte +10 -6
  159. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +13 -12
  160. package/package/components/runs/BatchReRunOptionsPane.svelte +5 -1
  161. package/package/components/runs/JobPreview.svelte +26 -16
  162. package/package/components/runs/{JobLoader.svelte.d.ts → JobsLoader.svelte.d.ts} +3 -3
  163. package/package/components/runs/NoWorkerWithTagWarning.svelte +2 -2
  164. package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -0
  165. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  166. package/package/components/scriptEditor/LogPanel.svelte +3 -2
  167. package/package/components/script_builder.d.ts +2 -2
  168. package/package/components/settings/CreateToken.svelte +76 -41
  169. package/package/components/settings/CreateToken.svelte.d.ts +1 -1
  170. package/package/components/settings/ScopeSelector.svelte +613 -0
  171. package/package/components/settings/ScopeSelector.svelte.d.ts +8 -0
  172. package/package/components/settings/TokenDisplay.svelte +103 -0
  173. package/package/components/settings/TokenDisplay.svelte.d.ts +10 -0
  174. package/package/components/settings/TokensTable.svelte +70 -349
  175. package/package/components/sidebar/CriticalAlertModal.svelte +3 -0
  176. package/package/components/triggers/DeleteTriggerButton.svelte +1 -1
  177. package/package/components/triggers/TriggerEditorToolbar.svelte +3 -3
  178. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte +55 -0
  179. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +13 -0
  180. package/package/components/triggers/TriggersEditor.svelte +45 -3
  181. package/package/components/triggers/TriggersWrapper.svelte +2 -2
  182. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +47 -6
  183. package/package/components/triggers/gcp/utils.js +9 -1
  184. package/package/components/triggers/http/OpenAPISpecGenerator.svelte +3 -2
  185. package/package/components/triggers/http/RouteEditorConfigSection.svelte +26 -23
  186. package/package/components/triggers/http/RouteEditorConfigSection.svelte.d.ts +5 -19
  187. package/package/components/triggers/http/RouteEditorInner.svelte +219 -175
  188. package/package/components/triggers/http/RouteEditorInner.svelte.d.ts +6 -2
  189. package/package/components/triggers/http/utils.js +9 -3
  190. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +47 -6
  191. package/package/components/triggers/kafka/utils.js +9 -1
  192. package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte +4 -132
  193. package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte.d.ts +2 -5
  194. package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +182 -13
  195. package/package/components/triggers/mqtt/utils.js +9 -1
  196. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +47 -6
  197. package/package/components/triggers/nats/utils.js +9 -1
  198. package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +41 -2
  199. package/package/components/triggers/postgres/utils.js +9 -1
  200. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +38 -92
  201. package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +47 -6
  202. package/package/components/triggers/sqs/utils.js +9 -1
  203. package/package/components/triggers/utils.js +12 -0
  204. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +47 -6
  205. package/package/components/triggers/websocket/utils.js +11 -1
  206. package/package/components/workspaceSettings/AISettings.svelte +0 -2
  207. package/package/components/workspaceSettings/FilterList.svelte +56 -0
  208. package/package/components/workspaceSettings/FilterList.svelte.d.ts +8 -0
  209. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +785 -0
  210. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +18 -0
  211. package/package/gen/core/OpenAPI.js +1 -1
  212. package/package/gen/schemas.gen.d.ts +305 -23
  213. package/package/gen/schemas.gen.js +305 -23
  214. package/package/gen/services.gen.d.ts +33 -1
  215. package/package/gen/services.gen.js +66 -2
  216. package/package/gen/types.gen.d.ts +216 -11
  217. package/package/history.svelte.js +0 -2
  218. package/package/hub.d.ts +1 -0
  219. package/package/hubPaths.json +5 -2
  220. package/package/infer.js +16 -10
  221. package/package/svelte5Utils.svelte.d.ts +1 -0
  222. package/package/svelte5Utils.svelte.js +25 -18
  223. package/package/toast.js +10 -0
  224. package/package/utils.d.ts +3 -2
  225. package/package/utils.js +20 -5
  226. package/package.json +11 -11
  227. package/package/components/ResultJobLoader.svelte +0 -219
  228. package/package/components/ResultJobLoader.svelte.d.ts +0 -52
  229. package/package/components/TestJobLoader.svelte +0 -274
  230. package/package/components/TestJobLoader.svelte.d.ts +0 -43
  231. package/package/components/icons/AssetVarIcon.svelte +0 -31
  232. package/package/components/icons/AssetVarIcon.svelte.d.ts +0 -9
  233. /package/package/components/runs/{JobLoader.svelte → JobsLoader.svelte} +0 -0
@@ -5,15 +5,17 @@ import { sendUserToast } from '../../../toast';
5
5
  import { workspaceStore } from '../../../stores';
6
6
  import { AppService, HelpersService } from '../../../gen';
7
7
  import { writable } from 'svelte/store';
8
- import { Ban, CheckCheck, FileWarning, Files, RefreshCcw, Trash } from 'lucide-svelte';
8
+ import { Ban, CheckCheck, FileWarning, Files, RefreshCcw, Trash, XIcon } from 'lucide-svelte';
9
9
  import { twMerge } from 'tailwind-merge';
10
10
  import { createEventDispatcher, onDestroy } from 'svelte';
11
11
  import { emptyString } from '../../../utils';
12
- let { acceptedFileTypes = ['*'], allowMultiple = true, allowDelete = true, folderOnly = false, containerText = folderOnly
13
- ? 'Drag and drop a folder here or click to browse'
14
- : allowMultiple
15
- ? 'Drag and drop files here or click to browse'
16
- : 'Drag and drop a file here or click to browse', customResourcePath = undefined, customResourceType = undefined, customClass = '', customStyle = '', randomFileKey = false, pathTransformer = undefined, forceDisplayUploads = $bindable(false), defaultValue = undefined, workspace = undefined, fileUploads = writable([]), appPath = undefined, disabled = false, iconSize = undefined, initialValue = undefined, computeForceViewerPolicies = undefined } = $props();
12
+ let { acceptedFileTypes = ['*'], allowMultiple = true, allowDelete = true, folderOnly = false, containerText: customContainerText = undefined, customResourcePath = undefined, customResourceType = undefined, customClass = '', customStyle = '', randomFileKey = false, pathTransformer = undefined, forceDisplayUploads = $bindable(false), defaultValue = undefined, workspace = undefined, fileUploads = writable([]), appPath = undefined, disabled = false, iconSize = undefined, initialValue = undefined, computeForceViewerPolicies = undefined } = $props();
13
+ const containerText = $derived(customContainerText ??
14
+ (folderOnly
15
+ ? 'Drag and drop a folder here or click to browse'
16
+ : allowMultiple
17
+ ? 'Drag and drop files here or click to browse'
18
+ : 'Drag and drop a file here or click to browse'));
17
19
  const dispatch = createEventDispatcher();
18
20
  let initialS3 = $derived(Array.isArray(initialValue)
19
21
  ? initialValue?.map((v) => v.s3)
@@ -21,16 +23,15 @@ let initialS3 = $derived(Array.isArray(initialValue)
21
23
  ? [initialValue?.s3]
22
24
  : undefined);
23
25
  init();
26
+ function transform(initialValue) {
27
+ return {
28
+ name: initialValue?.filename ?? initialValue?.s3 ?? 'Unknown file',
29
+ path: initialValue?.s3,
30
+ fromBucket: true
31
+ };
32
+ }
24
33
  function init() {
25
34
  if (initialS3) {
26
- function transform(initialValue) {
27
- return {
28
- name: initialValue.filename,
29
- size: 0,
30
- progress: 100,
31
- path: initialValue?.s3
32
- };
33
- }
34
35
  for (const s3 of initialS3) {
35
36
  if (!$fileUploads.find((fileUpload) => fileUpload.path === s3)) {
36
37
  let initialFileUploads = initialValue
@@ -43,6 +44,12 @@ function init() {
43
44
  }
44
45
  }
45
46
  }
47
+ export function addUpload(upload) {
48
+ $fileUploads = [...$fileUploads, transform(upload)];
49
+ }
50
+ export function setUpload(upload) {
51
+ $fileUploads = [transform(upload)];
52
+ }
46
53
  async function handleChange(files) {
47
54
  if (folderOnly) {
48
55
  uniqueFolderPrefix = getRandomFolderPrefix();
@@ -278,8 +285,28 @@ onDestroy(() => {
278
285
  });
279
286
  </script>
280
287
 
288
+ {#snippet fileInput()}
289
+ <FileInput
290
+ {folderOnly}
291
+ {disabled}
292
+ accept={acceptedFileTypes?.join(',')}
293
+ multiple={allowMultiple}
294
+ returnFileNames
295
+ {iconSize}
296
+ on:change={({ detail }) => {
297
+ forceDisplayUploads = false
298
+ handleChange(detail)
299
+ }}
300
+ class={twMerge('w-full h-full', customClass, 'wm-file-input')}
301
+ style={customStyle}
302
+ defaultFile={defaultValue}
303
+ >
304
+ {containerText}{#if disabled}<br />(Disabled){/if}
305
+ </FileInput>
306
+ {/snippet}
307
+
281
308
  <div class="w-full h-full p-0 flex flex-col">
282
- {#if $fileUploads.length > 0 && !forceDisplayUploads}
309
+ {#if $fileUploads.length > 0}
283
310
  <div class="border rounded-md flex flex-col gap-1 divide-y h-full w-full p-1">
284
311
  <div class="flex h-full overflow-y-auto flex-col">
285
312
  {#each $fileUploads as fileUpload}
@@ -352,7 +379,7 @@ onDestroy(() => {
352
379
  Remove from list
353
380
  </Button>
354
381
  {/if}
355
- {#if fileUpload.progress < 100 && !fileUpload.cancelled && !fileUpload.errorMessage}
382
+ {#if fileUpload.progress !== undefined && fileUpload.progress < 100 && !fileUpload.cancelled && !fileUpload.errorMessage}
356
383
  <Button
357
384
  size="xs2"
358
385
  color="light"
@@ -390,100 +417,115 @@ onDestroy(() => {
390
417
  >
391
418
  Delete
392
419
  </Button>
420
+ {:else if fileUpload.fromBucket}
421
+ <Button
422
+ size="xs2"
423
+ color="red"
424
+ variant="border"
425
+ on:click={() => {
426
+ $fileUploads = $fileUploads.filter(
427
+ (_fileUpload) => _fileUpload.name !== fileUpload.name
428
+ )
429
+
430
+ if (fileUpload.path) {
431
+ dispatch('deletion', { path: fileUpload.path })
432
+ }
433
+ }}
434
+ startIcon={{
435
+ icon: XIcon
436
+ }}
437
+ >
438
+ Remove
439
+ </Button>
393
440
  {/if}
394
441
  </div>
395
442
  </div>
396
- <FileProgressBar
397
- progress={fileUpload.progress}
398
- color={fileUpload.errorMessage
399
- ? '#ef4444'
400
- : fileUpload.cancelled
401
- ? '#eab308'
402
- : fileUpload.progress === 100
403
- ? '#22c55e'
404
- : '#3b82f6'}
405
- ended={fileUpload.cancelled || fileUpload.errorMessage !== undefined}
406
- >
407
- {#if fileUpload.errorMessage}
408
- <span class="text-xs text-red-600">{fileUpload.errorMessage}</span>
409
- {:else if fileUpload.cancelled}
410
- <span class="text-xs text-yellow-600">Upload cancelled</span>
411
- {/if}
412
- </FileProgressBar>
443
+ {#if !fileUpload.fromBucket}
444
+ <FileProgressBar
445
+ progress={fileUpload.progress}
446
+ color={fileUpload.errorMessage
447
+ ? '#ef4444'
448
+ : fileUpload.cancelled
449
+ ? '#eab308'
450
+ : fileUpload.progress === 100
451
+ ? '#22c55e'
452
+ : '#3b82f6'}
453
+ ended={fileUpload.cancelled || fileUpload.errorMessage !== undefined}
454
+ >
455
+ {#if fileUpload.errorMessage}
456
+ <span class="text-xs text-red-600">{fileUpload.errorMessage}</span>
457
+ {:else if fileUpload.cancelled}
458
+ <span class="text-xs text-yellow-600">Upload cancelled</span>
459
+ {/if}
460
+ </FileProgressBar>
461
+ {/if}
413
462
  {#if !(fileUpload.cancelled || fileUpload.errorMessage !== undefined)}
414
463
  <span class="text-xs text-gray-500 dark:text-gray-200">
415
- {fileUpload.progress === 100 ? 'Upload finished' : `Uploading`} to path: {fileUpload.path ??
416
- 'N/A'}
464
+ {#if fileUpload.fromBucket}
465
+ {fileUpload.path ?? 'N/A'}
466
+ {:else}
467
+ {fileUpload.progress === 100 ? 'Upload finished' : `Uploading`} to path: {fileUpload.path ??
468
+ 'N/A'}
469
+ {/if}
417
470
  </span>
418
471
  {/if}
419
472
  </div>
420
473
  {/each}
421
474
  </div>
422
- {#if allowMultiple}
423
- <div class="flex flex-row gap-1 items-center justify-end p-1">
424
- {#if !$fileUploads.every((fileUpload) => fileUpload.progress === 100 || fileUpload.cancelled)}
475
+ <div class="flex flex-row gap-1 items-center justify-end p-1">
476
+ {#if !forceDisplayUploads && (allowMultiple || folderOnly) && !$fileUploads.every((fileUpload) => fileUpload.progress === 100 || fileUpload.cancelled || fileUpload.fromBucket)}
477
+ <Button
478
+ size="xs2"
479
+ color="light"
480
+ on:click={() => {
481
+ $fileUploads = $fileUploads.map((fileUpload) => {
482
+ if (fileUpload.progress === 100 || fileUpload.cancelled) {
483
+ return fileUpload
484
+ }
485
+
486
+ fileUpload.cancelled = true
487
+ fileUpload.progress = 0
488
+ return fileUpload
489
+ })
490
+ }}
491
+ startIcon={{
492
+ icon: Ban
493
+ }}
494
+ >
495
+ Cancel all uploads
496
+ </Button>
497
+ {/if}
498
+ {#if allowMultiple}
499
+ {#if forceDisplayUploads}
500
+ {@render fileInput()}
501
+ {:else}
425
502
  <Button
426
503
  size="xs2"
427
504
  color="light"
428
505
  on:click={() => {
429
- $fileUploads = $fileUploads.map((fileUpload) => {
430
- if (fileUpload.progress === 100 || fileUpload.cancelled) {
431
- return fileUpload
432
- }
433
-
434
- fileUpload.cancelled = true
435
- fileUpload.progress = 0
436
- return fileUpload
437
- })
506
+ forceDisplayUploads = true
438
507
  }}
439
508
  startIcon={{
440
- icon: Ban
509
+ icon: Files
441
510
  }}
511
+ disabled={$fileUploads.some(
512
+ (fileUpload) =>
513
+ fileUpload.progress !== 100 && !fileUpload.cancelled && !fileUpload.fromBucket
514
+ )}
442
515
  >
443
- Cancel all uploads
516
+ Upload more files
444
517
  </Button>
445
518
  {/if}
446
- <Button
447
- size="xs2"
448
- color="light"
449
- on:click={() => {
450
- forceDisplayUploads = true
451
- }}
452
- startIcon={{
453
- icon: Files
454
- }}
455
- disabled={$fileUploads.some(
456
- (fileUpload) => fileUpload.progress !== 100 && !fileUpload.cancelled
457
- )}
458
- >
459
- Upload more files
460
- </Button>
461
- </div>
462
- {/if}
519
+ {/if}
520
+ </div>
463
521
  </div>
464
522
  {:else}
465
- <FileInput
466
- {folderOnly}
467
- {disabled}
468
- accept={acceptedFileTypes?.join(',')}
469
- multiple={allowMultiple}
470
- returnFileNames
471
- {iconSize}
472
- on:change={({ detail }) => {
473
- forceDisplayUploads = false
474
- handleChange(detail)
475
- }}
476
- class={twMerge('w-full h-full', customClass, 'wm-file-input')}
477
- style={customStyle}
478
- defaultFile={defaultValue}
479
- >
480
- {containerText}{#if disabled}<br />(Disabled){/if}
481
- </FileInput>
523
+ {@render fileInput()}
482
524
  {/if}
483
525
  {#if initialS3 && initialS3.length > 0 && $fileUploads.length == 0}
484
526
  <div class="flex flex-row gap-1 items-center p-1">
485
527
  <span class="text-sm">
486
- File currently selected: {initialS3?.join(', ')}
528
+ File{initialS3.length > 1 ? 's' : ''} currently selected: {initialS3?.join(', ')}
487
529
  </span>
488
530
  </div>
489
531
  {/if}
@@ -1,13 +1,14 @@
1
1
  import { type Writable } from 'svelte/store';
2
2
  type FileUploadData = {
3
3
  name: string;
4
- size: number;
5
- progress: number;
4
+ size?: number;
5
+ progress?: number;
6
6
  cancelled?: boolean;
7
7
  errorMessage?: string;
8
8
  path?: string;
9
9
  file?: File;
10
10
  deleteToken?: string;
11
+ fromBucket?: boolean;
11
12
  };
12
13
  interface Props {
13
14
  acceptedFileTypes?: string[] | undefined;
@@ -65,6 +66,15 @@ declare const FileUpload: $$__sveltets_2_IsomorphicComponent<Props, {
65
66
  }>;
66
67
  } & {
67
68
  [evt: string]: CustomEvent<any>;
68
- }, {}, {}, "forceDisplayUploads">;
69
+ }, {}, {
70
+ addUpload: (upload: {
71
+ s3: string;
72
+ filename?: string;
73
+ }) => void;
74
+ setUpload: (upload: {
75
+ s3: string;
76
+ filename?: string;
77
+ }) => void;
78
+ }, "forceDisplayUploads">;
69
79
  type FileUpload = InstanceType<typeof FileUpload>;
70
80
  export default FileUpload;
@@ -0,0 +1,111 @@
1
+ <script lang="ts">import S3FilePicker from '../../S3FilePicker.svelte';
2
+ import Toggle from '../../Toggle.svelte';
3
+ import { Loader2, Pipette } from 'lucide-svelte';
4
+ import FileUpload from './FileUpload.svelte';
5
+ import Button from '../button/Button.svelte';
6
+ import { userStore } from '../../../stores';
7
+ let { multiple, value = $bindable(), defaultValue, setNewValueFromCode, onFocus, onBlur, computeS3ForceViewerPolicies, workspace, editor = $bindable(), appPath } = $props();
8
+ let s3FileUploadRawMode = $state(false);
9
+ let s3FilePicker = $state(undefined);
10
+ let fileUpload = $state(undefined);
11
+ </script>
12
+
13
+ {#if $userStore}
14
+ <S3FilePicker
15
+ bind:this={s3FilePicker}
16
+ on:selectAndClose={(ev) => {
17
+ if (multiple) {
18
+ if (Array.isArray(value)) {
19
+ value.push(ev.detail)
20
+ } else {
21
+ value = [ev.detail]
22
+ }
23
+ fileUpload?.addUpload(ev.detail)
24
+ } else {
25
+ value = ev.detail
26
+ fileUpload?.setUpload(value)
27
+ }
28
+ editor?.setCode(JSON.stringify(value))
29
+ }}
30
+ readOnlyMode={false}
31
+ />
32
+ {/if}
33
+
34
+ <div class="flex flex-col w-full gap-1">
35
+ <Toggle
36
+ class="flex justify-end"
37
+ bind:checked={s3FileUploadRawMode}
38
+ size="xs"
39
+ options={{ left: `Raw S3 object${multiple ? 's' : ''} input` }}
40
+ />
41
+ {#if s3FileUploadRawMode}
42
+ {#await import('../../JsonEditor.svelte')}
43
+ <Loader2 class="animate-spin" />
44
+ {:then Module}
45
+ <Module.default
46
+ bind:editor
47
+ on:focus={(e) => {
48
+ onFocus()
49
+ }}
50
+ on:blur={(e) => {
51
+ onBlur()
52
+ }}
53
+ code={JSON.stringify(value ?? defaultValue ?? (multiple ? [] : { s3: '' }), null, 2)}
54
+ on:changeValue={(e) => {
55
+ setNewValueFromCode(e.detail)
56
+ }}
57
+ />
58
+ {/await}
59
+ {:else}
60
+ <FileUpload
61
+ bind:this={fileUpload}
62
+ {appPath}
63
+ computeForceViewerPolicies={computeS3ForceViewerPolicies}
64
+ {workspace}
65
+ allowMultiple={multiple}
66
+ randomFileKey={true}
67
+ on:addition={(evt) => {
68
+ const s3Object = {
69
+ s3: evt.detail?.path ?? '',
70
+ filename: evt.detail?.filename ?? ''
71
+ }
72
+ if (multiple) {
73
+ if (Array.isArray(value)) {
74
+ value.push(s3Object)
75
+ } else {
76
+ value = [s3Object]
77
+ }
78
+ } else {
79
+ value = s3Object
80
+ }
81
+ }}
82
+ on:deletion={(evt) => {
83
+ if (multiple) {
84
+ if (Array.isArray(value)) {
85
+ value = value.filter((v) => v.s3 !== evt.detail?.path)
86
+ }
87
+ } else {
88
+ value = {
89
+ s3: ''
90
+ }
91
+ }
92
+ }}
93
+ defaultValue={multiple ? defaultValue?.map((v) => v.s3) : defaultValue?.s3}
94
+ initialValue={value}
95
+ />
96
+ {/if}
97
+ {#if $userStore}
98
+ <Button
99
+ variant="border"
100
+ color="light"
101
+ size="xs"
102
+ btnClasses="mt-1"
103
+ on:click={() => {
104
+ s3FilePicker?.open?.(value)
105
+ }}
106
+ startIcon={{ icon: Pipette }}
107
+ >
108
+ {multiple ? 'Add' : 'Choose'} an object from the catalog
109
+ </Button>
110
+ {/if}
111
+ </div>
@@ -0,0 +1,21 @@
1
+ import type SimpleEditor from '../../SimpleEditor.svelte';
2
+ type $$ComponentProps = {
3
+ multiple: boolean;
4
+ value: any;
5
+ defaultValue: any;
6
+ setNewValueFromCode: (v: any) => void;
7
+ onFocus: () => void;
8
+ onBlur: () => void;
9
+ computeS3ForceViewerPolicies: (() => {
10
+ allowed_resources: string[];
11
+ allow_user_resources: boolean;
12
+ allow_workspace_resource: boolean;
13
+ file_key_regex: string;
14
+ } | undefined) | undefined;
15
+ workspace: string | undefined;
16
+ editor: SimpleEditor | undefined;
17
+ appPath: string | undefined;
18
+ };
19
+ declare const S3ArgInput: import("svelte").Component<$$ComponentProps, {}, "value" | "editor">;
20
+ type S3ArgInput = ReturnType<typeof S3ArgInput>;
21
+ export default S3ArgInput;
@@ -84,7 +84,9 @@ let versionsDrawerOpen = $state(false);
84
84
  <NoMainFuncBadge />
85
85
  {/if}
86
86
  {#if script.kind !== 'script'}
87
- <Badge color="blue" baseClass="border">{capitalize(script.kind)}</Badge>
87
+ <Badge color="blue" baseClass="border"
88
+ >{script.kind === 'failure' ? 'Error handler' : capitalize(script.kind)}</Badge
89
+ >
88
90
  {/if}
89
91
  <SharedBadge canWrite={script.canWrite} extraPerms={script.extra_perms} />
90
92
  <DraftBadge has_draft={script.has_draft} draft_only={script.draft_only} />
@@ -1,8 +1,7 @@
1
1
  <script lang="ts">import Label from '../Label.svelte';
2
2
  import Toggle from '../Toggle.svelte';
3
3
  import Tooltip from '../Tooltip.svelte';
4
- export let prompt = undefined;
5
- export let type = 'script';
4
+ let { prompt = $bindable(undefined), type = 'script' } = $props();
6
5
  </script>
7
6
 
8
7
  <div class="flex flex-col gap-2">
@@ -22,13 +21,13 @@ export let type = 'script';
22
21
  />
23
22
  {#if prompt !== undefined}
24
23
  <Label label="Additional prompt for AI">
25
- <svelte:fragment slot="header">
24
+ {#snippet header()}
26
25
  <Tooltip>
27
26
  AI will use script description and each field description to fill the inputs form. In
28
27
  addition, any prompt passed here will be used by AI to guide it. You can mention specific
29
28
  fields and interaction between fields here.
30
29
  </Tooltip>
31
- </svelte:fragment>
30
+ {/snippet}
32
31
  <textarea bind:value={prompt} placeholder="Instructions for the AI about how to fill the form"
33
32
  ></textarea>
34
33
  </Label>
@@ -1,21 +1,7 @@
1
- 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> {
2
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
- $$bindings?: Bindings;
4
- } & Exports;
5
- (internal: unknown, props: Props & {
6
- $$events?: Events;
7
- $$slots?: Slots;
8
- }): Exports & {
9
- $set?: any;
10
- $on?: any;
11
- };
12
- z_$$bindings?: Bindings;
13
- }
14
- declare const AiFormSettings: $$__sveltets_2_IsomorphicComponent<{
1
+ interface Props {
15
2
  prompt?: string | undefined;
16
- type?: "flow" | "script";
17
- }, {
18
- [evt: string]: CustomEvent<any>;
19
- }, {}, {}, string>;
20
- type AiFormSettings = InstanceType<typeof AiFormSettings>;
3
+ type?: 'flow' | 'script';
4
+ }
5
+ declare const AiFormSettings: import("svelte").Component<Props, {}, "prompt">;
6
+ type AiFormSettings = ReturnType<typeof AiFormSettings>;
21
7
  export default AiFormSettings;
@@ -1,8 +1,10 @@
1
1
  import type { AIProviderModel, ScriptLang } from '../../../gen';
2
- import { type editor as meditor } from 'monaco-editor';
2
+ import { editor as meditor } from 'monaco-editor';
3
+ import type { MonacoLanguageClient } from 'monaco-languageclient';
3
4
  export declare class Autocompletor {
4
5
  #private;
5
6
  constructor(editor: meditor.IStandaloneCodeEditor, scriptLang: ScriptLang | 'bunnative' | 'jsx' | 'tsx' | 'json');
6
7
  static isProviderModelSupported(providerModel: AIProviderModel | undefined): boolean | undefined;
7
8
  dispose(): void;
9
+ setLanguageClient(client: MonacoLanguageClient): void;
8
10
  }