windmill-components 1.339.2 → 1.352.1

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 (232) hide show
  1. package/package/assets/app.css +0 -12
  2. package/package/ata/index.js +1 -0
  3. package/package/autosize.js +1 -1
  4. package/package/common.d.ts +6 -2
  5. package/package/common.js +2 -1
  6. package/package/components/AppConnectDrawer.svelte +1 -1
  7. package/package/components/AppConnectInner.svelte +9 -15
  8. package/package/components/ArgEnum.svelte +4 -1
  9. package/package/components/ArgEnum.svelte.d.ts +3 -1
  10. package/package/components/ArgInput.svelte +184 -141
  11. package/package/components/ArgInput.svelte.d.ts +7 -7
  12. package/package/components/ArrayTypeNarrowing.svelte +29 -27
  13. package/package/components/CenteredPage.svelte +2 -2
  14. package/package/components/DefaultTagsInner.svelte +1 -1
  15. package/package/components/Dev.svelte +2 -1
  16. package/package/components/DiffDrawer.svelte +1 -2
  17. package/package/components/DisplayResult.svelte +293 -233
  18. package/package/components/DurationMs.svelte +11 -3
  19. package/package/components/DurationMs.svelte.d.ts +2 -0
  20. package/package/components/EditableSchemaForm.svelte +447 -103
  21. package/package/components/EditableSchemaForm.svelte.d.ts +16 -6
  22. package/package/components/Editor.svelte +3 -1
  23. package/package/components/EditorBar.svelte +2 -2
  24. package/package/components/FlowBuilder.svelte +14 -6
  25. package/package/components/FlowGraphViewer.svelte +1 -1
  26. package/package/components/FlowGraphViewerStep.svelte +37 -9
  27. package/package/components/FlowGraphViewerStep.svelte.d.ts +2 -7
  28. package/package/components/FlowJobResult.svelte +1 -3
  29. package/package/components/FlowMetadata.svelte +1 -1
  30. package/package/components/FlowPreviewContent.svelte +5 -3
  31. package/package/components/FlowStatusViewer.svelte +4 -0
  32. package/package/components/FlowStatusViewer.svelte.d.ts +3 -0
  33. package/package/components/FlowStatusViewerInner.svelte +50 -17
  34. package/package/components/FlowStatusViewerInner.svelte.d.ts +3 -0
  35. package/package/components/FlowTimeline.svelte +13 -0
  36. package/package/components/FlowTimeline.svelte.d.ts +2 -0
  37. package/package/components/FlowViewer.svelte +0 -5
  38. package/package/components/FolderEditor.svelte +25 -0
  39. package/package/components/FolderEditor.svelte.d.ts +2 -0
  40. package/package/components/GroupEditor.svelte +36 -91
  41. package/package/components/GroupInfo.svelte +1 -1
  42. package/package/components/InputTransformForm.svelte +16 -1
  43. package/package/components/InputTransformForm.svelte.d.ts +2 -0
  44. package/package/components/InputTransformSchemaForm.svelte +6 -0
  45. package/package/components/InputTransformSchemaForm.svelte.d.ts +2 -0
  46. package/package/components/InstanceSettings.svelte +36 -3
  47. package/package/components/InstanceSettings.svelte.d.ts +2 -0
  48. package/package/components/JobStatus.svelte +2 -2
  49. package/package/components/LightweightArgInput.svelte +66 -14
  50. package/package/components/LightweightArgInput.svelte.d.ts +3 -2
  51. package/package/components/LightweightSchemaForm.svelte +24 -15
  52. package/package/components/ModulePreviewForm.svelte +1 -0
  53. package/package/components/NumberTypeNarrowing.svelte +71 -44
  54. package/package/components/ObjectResourceInput.svelte +2 -0
  55. package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
  56. package/package/components/ObjectTypeNarrowing.svelte +0 -1
  57. package/package/components/ParqetCsvTableRenderer.svelte +181 -0
  58. package/package/components/ParqetCsvTableRenderer.svelte.d.ts +21 -0
  59. package/package/components/Path.svelte +2 -2
  60. package/package/components/PersistentScriptDrawer.svelte +6 -3
  61. package/package/components/Range.svelte +88 -286
  62. package/package/components/Range.svelte.d.ts +9 -23
  63. package/package/components/ResourceEditor.svelte +138 -141
  64. package/package/components/ResourceEditor.svelte.d.ts +9 -2
  65. package/package/components/ResourceEditorDrawer.svelte +45 -0
  66. package/package/components/ResourceEditorDrawer.svelte.d.ts +21 -0
  67. package/package/components/ResourcePicker.svelte +5 -2
  68. package/package/components/ResourceTypePicker.svelte +88 -36
  69. package/package/components/RunChart.svelte +55 -5
  70. package/package/components/RunChart.svelte.d.ts +1 -0
  71. package/package/components/RunForm.svelte +1 -1
  72. package/package/components/S3FilePicker.svelte +20 -8
  73. package/package/components/S3FilePicker.svelte.d.ts +2 -0
  74. package/package/components/ScheduleEditorInner.svelte +40 -37
  75. package/package/components/SchemaForm.svelte +192 -103
  76. package/package/components/SchemaForm.svelte.d.ts +16 -2
  77. package/package/components/ScriptBuilder.svelte +13 -8
  78. package/package/components/ScriptSchedules.svelte +11 -8
  79. package/package/components/ScriptSchema.svelte +3 -21
  80. package/package/components/ScriptVersionHistory.svelte +1 -1
  81. package/package/components/StringTypeNarrowing.svelte +217 -174
  82. package/package/components/StringTypeNarrowing.svelte.d.ts +5 -1
  83. package/package/components/Toggle.svelte +6 -3
  84. package/package/components/Toggle.svelte.d.ts +1 -0
  85. package/package/components/UserSettings.svelte +24 -1
  86. package/package/components/WorkspaceGroup.svelte +11 -13
  87. package/package/components/apps/components/buttons/AppButton.svelte +2 -0
  88. package/package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
  89. package/package/components/apps/components/display/AppFlowStatusComponent.svelte +13 -70
  90. package/package/components/apps/components/display/AppFlowStatusComponent.svelte.d.ts +1 -9
  91. package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +21 -8
  92. package/package/components/apps/components/display/AppJobIdFlowStatus.svelte.d.ts +1 -3
  93. package/package/components/apps/components/display/AppJobIdLogComponent.svelte +19 -7
  94. package/package/components/apps/components/display/AppJobIdLogComponent.svelte.d.ts +1 -3
  95. package/package/components/apps/components/display/AppLogsComponent.svelte +13 -70
  96. package/package/components/apps/components/display/AppLogsComponent.svelte.d.ts +1 -9
  97. package/package/components/apps/components/display/charts/AppAgCharts.svelte +25 -15
  98. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +2 -0
  99. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +1 -1
  100. package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -1
  101. package/package/components/apps/components/helpers/RunnableComponent.svelte +18 -8
  102. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -0
  103. package/package/components/apps/components/helpers/RunnableWrapper.svelte +2 -0
  104. package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
  105. package/package/components/apps/components/helpers/eval.js +1 -36
  106. package/package/components/apps/components/inputs/AppFileInput.svelte +3 -1
  107. package/package/components/apps/components/inputs/AppFileInput.svelte.d.ts +1 -0
  108. package/package/components/apps/components/inputs/AppS3FileInput.svelte +3 -1
  109. package/package/components/apps/components/inputs/AppS3FileInput.svelte.d.ts +1 -0
  110. package/package/components/apps/components/layout/AppConditionalWrapper.svelte +3 -1
  111. package/package/components/apps/components/layout/AppConditionalWrapper.svelte.d.ts +1 -0
  112. package/package/components/apps/components/layout/AppStepper.svelte +5 -1
  113. package/package/components/apps/components/layout/AppStepper.svelte.d.ts +2 -0
  114. package/package/components/apps/components/layout/AppTabs.svelte +3 -1
  115. package/package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -0
  116. package/package/components/apps/editor/AppEditorHeader.svelte +6 -7
  117. package/package/components/apps/editor/SettingsPanel.svelte +13 -3
  118. package/package/components/apps/editor/component/Component.svelte +8 -16
  119. package/package/components/apps/editor/component/components.d.ts +11 -2
  120. package/package/components/apps/editor/component/components.js +2 -1
  121. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +1 -1
  122. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +5 -34
  123. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +3 -41
  124. package/package/components/apps/editor/settingsPanel/EventHandlerItem.svelte +33 -0
  125. package/package/components/apps/editor/settingsPanel/EventHandlerItem.svelte.d.ts +19 -0
  126. package/package/components/apps/editor/settingsPanel/EventHandlers.svelte +103 -0
  127. package/package/components/apps/editor/settingsPanel/EventHandlers.svelte.d.ts +18 -0
  128. package/package/components/apps/editor/settingsPanel/GridCondition.svelte +21 -45
  129. package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -23
  130. package/package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +5 -1
  131. package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +0 -2
  132. package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte.d.ts +0 -1
  133. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +7 -1
  134. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +7 -14
  135. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +0 -1
  136. package/package/components/build_workers.js +13 -11
  137. package/package/components/common/button/ButtonDropdown.svelte +1 -0
  138. package/package/components/common/drawer/Disposable.svelte +3 -2
  139. package/package/components/common/drawer/Disposable.svelte.d.ts +1 -0
  140. package/package/components/common/drawer/Drawer.svelte +12 -2
  141. package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
  142. package/package/components/common/fileDownload/FileDownload.svelte +4 -2
  143. package/package/components/common/fileUpload/FileUpload.svelte +4 -3
  144. package/package/components/common/modal/Modal.svelte +4 -1
  145. package/package/components/common/modal/Modal.svelte.d.ts +1 -0
  146. package/package/components/common/popup/Popup.svelte +1 -1
  147. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +4 -1
  148. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
  149. package/package/components/common/waitTimeWarning/WaitTimeWarning.svelte +79 -0
  150. package/package/components/common/waitTimeWarning/WaitTimeWarning.svelte.d.ts +18 -0
  151. package/package/components/flows/content/FlowEditorPanel.svelte +16 -2
  152. package/package/components/flows/content/FlowInput.svelte +63 -53
  153. package/package/components/flows/content/FlowModuleComponent.svelte +26 -3
  154. package/package/components/flows/content/FlowModuleScript.svelte +40 -1
  155. package/package/components/flows/content/FlowModuleScript.svelte.d.ts +2 -0
  156. package/package/components/flows/content/FlowModuleSuspend.svelte +99 -59
  157. package/package/components/flows/content/FlowModuleWrapper.svelte +16 -1
  158. package/package/components/flows/content/FlowSchedules.svelte +11 -8
  159. package/package/components/flows/content/ScriptEditorDrawer.svelte +3 -4
  160. package/package/components/flows/flowStateUtils.js +4 -1
  161. package/package/components/flows/map/FlowModuleSchemaItem.svelte +16 -1
  162. package/package/components/flows/map/FlowModuleSchemaMap.svelte +6 -1
  163. package/package/components/flows/types.d.ts +4 -0
  164. package/package/components/flows/utils.d.ts +5 -1
  165. package/package/components/flows/utils.js +36 -0
  166. package/package/components/graph/FlowGraph.svelte +5 -2
  167. package/package/components/graph/FlowGraph.svelte.d.ts +2 -0
  168. package/package/components/graph/svelvet/container/models/index.d.ts +0 -5
  169. package/package/components/graph/svelvet/container/models/index.js +1 -1
  170. package/package/components/graph/svelvet/container/views/Svelvet.svelte +2 -5
  171. package/package/components/graph/util.d.ts +1 -37
  172. package/package/components/graph/util.js +0 -34
  173. package/package/components/instanceSettings.js +2 -1
  174. package/package/components/jobs/JobPreview.svelte +1 -1
  175. package/package/components/multiselect/MultiSelect.svelte +4 -3
  176. package/package/components/multiselect/MultiSelect.svelte.d.ts +1 -0
  177. package/package/components/multiselect/MultiSelectWrapper.svelte +89 -0
  178. package/package/components/multiselect/MultiSelectWrapper.svelte.d.ts +20 -0
  179. package/package/components/propertyPicker/ObjectViewer.svelte +6 -2
  180. package/package/components/runs/JobPreview.svelte +5 -1
  181. package/package/components/runs/RunRow.svelte +22 -3
  182. package/package/components/runs/RunRow.svelte.d.ts +2 -1
  183. package/package/components/runs/RunsTable.svelte +22 -9
  184. package/package/components/runs/RunsTable.svelte.d.ts +2 -1
  185. package/package/components/schema/AddProperty.svelte +149 -0
  186. package/package/components/schema/AddProperty.svelte.d.ts +23 -0
  187. package/package/components/schema/AddPropertyForm.svelte +33 -0
  188. package/package/components/schema/AddPropertyForm.svelte.d.ts +16 -0
  189. package/package/components/schema/EditableSchemaDrawer.svelte +198 -0
  190. package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +21 -0
  191. package/package/components/schema/EditableSchemaWrapper.svelte +31 -0
  192. package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +22 -0
  193. package/package/components/schema/FlowPropertyEditor.svelte +393 -0
  194. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +47 -0
  195. package/package/components/schema/PropertyEditor.svelte +185 -0
  196. package/package/components/schema/PropertyEditor.svelte.d.ts +46 -0
  197. package/package/components/schema/SchemaFormDND.svelte +75 -0
  198. package/package/components/schema/SchemaFormDND.svelte.d.ts +28 -0
  199. package/package/components/table/AutoDataTable.svelte +90 -104
  200. package/package/components/table/Cell.svelte +4 -1
  201. package/package/components/table/Cell.svelte.d.ts +1 -0
  202. package/package/components/table/DownloadCsv.svelte +30 -0
  203. package/package/components/table/DownloadCsv.svelte.d.ts +17 -0
  204. package/package/components/table/tableUtils.d.ts +8 -0
  205. package/package/components/table/tableUtils.js +37 -0
  206. package/package/consts.js +3 -1
  207. package/package/deno_fetch.d.ts.txt +6 -0
  208. package/package/gen/core/OpenAPI.js +1 -1
  209. package/package/gen/schemas.gen.d.ts +76 -0
  210. package/package/gen/schemas.gen.js +76 -0
  211. package/package/gen/services.gen.d.ts +100 -5
  212. package/package/gen/services.gen.js +216 -16
  213. package/package/gen/types.gen.d.ts +378 -5
  214. package/package/inferArgSig.d.ts +10 -0
  215. package/package/inferArgSig.js +59 -2
  216. package/package/scripts.d.ts +2 -0
  217. package/package/scripts.js +6 -3
  218. package/package/utils.d.ts +4 -3
  219. package/package/utils.js +9 -4
  220. package/package/workspace_settings.d.ts +15 -0
  221. package/package/workspace_settings.js +81 -0
  222. package/package.json +17 -7
  223. package/package/components/ParqetTableRenderer.svelte +0 -117
  224. package/package/components/ParqetTableRenderer.svelte.d.ts +0 -18
  225. package/package/components/PropertyRow.svelte +0 -88
  226. package/package/components/PropertyRow.svelte.d.ts +0 -23
  227. package/package/components/SchemaEditor.svelte +0 -346
  228. package/package/components/SchemaEditor.svelte.d.ts +0 -25
  229. package/package/components/SchemaModal.svelte +0 -443
  230. package/package/components/SchemaModal.svelte.d.ts +0 -33
  231. package/package/components/apps/editor/settingsPanel/Recompute.svelte +0 -55
  232. package/package/components/apps/editor/settingsPanel/Recompute.svelte.d.ts +0 -20
@@ -25,11 +25,9 @@ import FlowCopilotStatus from './copilot/FlowCopilotStatus.svelte';
25
25
  import { fade } from 'svelte/transition';
26
26
  import { loadFlowModuleState, pickScript } from './flows/flowStateUtils';
27
27
  import FlowCopilotInputsModal from './copilot/FlowCopilotInputsModal.svelte';
28
- import { snakeCase } from 'lodash';
29
28
  import FlowBuilderTutorials from './FlowBuilderTutorials.svelte';
30
29
  import FlowTutorials from './FlowTutorials.svelte';
31
30
  import { ignoredTutorials } from './tutorials/ignoredTutorials';
32
- import { cloneDeep } from 'lodash';
33
31
  export let initialPath = '';
34
32
  export let pathStoreInit = undefined;
35
33
  export let newFlow;
@@ -129,13 +127,13 @@ async function saveDraft(forceSave = false) {
129
127
  savedFlow = {
130
128
  ...(newFlow || savedFlow?.draft_only
131
129
  ? {
132
- ...cloneDeep($flowStore),
130
+ ...structuredClone($flowStore),
133
131
  path: $pathStore,
134
132
  draft_only: true
135
133
  }
136
134
  : savedFlow),
137
135
  draft: {
138
- ...cloneDeep($flowStore),
136
+ ...structuredClone($flowStore),
139
137
  path: $pathStore
140
138
  }
141
139
  };
@@ -252,7 +250,7 @@ async function saveFlow() {
252
250
  });
253
251
  }
254
252
  savedFlow = {
255
- ...cloneDeep($flowStore),
253
+ ...structuredClone($flowStore),
256
254
  path: $pathStore
257
255
  };
258
256
  loadingSave = false;
@@ -317,7 +315,8 @@ setContext('FlowEditorContext', {
317
315
  pathStore,
318
316
  testStepStore,
319
317
  saveDraft,
320
- initialPath
318
+ initialPath,
319
+ flowInputsStore: writable({})
321
320
  });
322
321
  async function loadSchedule() {
323
322
  loadFlowSchedule(initialPath, $workspaceStore)
@@ -512,6 +511,15 @@ async function finishStepGen() {
512
511
  await sleep(3000);
513
512
  copilotStatus = '';
514
513
  }
514
+ function snakeCase(e) {
515
+ if (e.toLowerCase() === e) {
516
+ return e;
517
+ }
518
+ return (e
519
+ .match(/([A-Z])/g)
520
+ ?.reduce((str, c) => str.replace(new RegExp(c), '_' + c.toLowerCase()), e)
521
+ ?.substring(e.slice(0, 1).match(/([A-Z])/g) ? 1 : 0) ?? e);
522
+ }
515
523
  async function genFlow(idx, flowModules, stepOnly = false) {
516
524
  try {
517
525
  push(history, $flowStore);
@@ -37,7 +37,7 @@ const dispatch = createEventDispatcher();
37
37
  noGraph ? 'border-0 w-max' : ''
38
38
  )}
39
39
  >
40
- <FlowGraphViewerStep {flow} {stepDetail} />
40
+ <FlowGraphViewerStep schema={flow.schema} {stepDetail} />
41
41
  </div>
42
42
  {/if}
43
43
  </div>
@@ -13,7 +13,7 @@ import { hubBaseUrlStore } from '../stores';
13
13
  import { twMerge } from 'tailwind-merge';
14
14
  import FlowModuleScript from './flows/content/FlowModuleScript.svelte';
15
15
  import { Copy } from 'lucide-svelte';
16
- export let flow;
16
+ export let schema = undefined;
17
17
  export let stepDetail = undefined;
18
18
  let codeViewer;
19
19
  </script>
@@ -32,7 +32,7 @@ let codeViewer;
32
32
  <IconedPath path={stepDetail?.value?.path ?? ''} />
33
33
  </a>
34
34
  </div>
35
- <div class="text-2xs mb-4">
35
+ <div class="text-2xs mb-4 mt-2">
36
36
  <h3 class="mb-2">Step Inputs</h3>
37
37
 
38
38
  <InputTransformsViewer inputTransforms={stepDetail?.value?.input_transforms ?? {}} />
@@ -49,7 +49,7 @@ let codeViewer;
49
49
  </div>
50
50
  {/if}
51
51
  {:else if stepDetail.value.type == 'rawscript'}
52
- <div class="text-2xs mb-4">
52
+ <div class="text-2xs mb-4 mt-2">
53
53
  <h3 class="mb-2">Step Inputs</h3>
54
54
  <InputTransformsViewer inputTransforms={stepDetail?.value?.input_transforms ?? {}} />
55
55
  </div>
@@ -58,6 +58,16 @@ let codeViewer;
58
58
  <span class="!text-xs">
59
59
  <HighlightCode language={stepDetail.value.language} code={stepDetail.value.content} />
60
60
  </span>
61
+ <h3 class="mb-2">Lockfile</h3>
62
+ <div>
63
+ {#if stepDetail.value.lock}
64
+ <pre class="bg-surface-secondary text-sm p-2 h-full overflow-auto w-full"
65
+ >{stepDetail.value.lock}</pre
66
+ >
67
+ {:else}
68
+ <p class="bg-surface-secondary text-sm p-2"> There is no lock file for this script </p>
69
+ {/if}
70
+ </div>
61
71
  {/if}
62
72
  {/if}
63
73
  </DrawerContent>
@@ -69,11 +79,17 @@ let codeViewer;
69
79
  <p class="font-medium text-secondary text-center pt-4 pb-8">
70
80
  Click on a step to see its details
71
81
  </p>
72
- <h3 class="mb-2 font-semibold">Flow Inputs</h3>
73
- <SchemaViewer schema={flow?.schema} />
82
+ {#if schema}
83
+ <h3 class="mb-2 font-semibold">Flow Inputs</h3>
84
+ <SchemaViewer {schema} />
85
+ {/if}
74
86
  </div>
75
87
  {:else if stepDetail == 'Input'}
76
- <SchemaViewer schema={flow?.schema} />
88
+ {#if schema}
89
+ <SchemaViewer {schema} />
90
+ {:else}
91
+ <p class="font-medium text-secondary text-center pt-4 pb-8"> No input schema </p>
92
+ {/if}
77
93
  {:else if stepDetail == 'Result'}
78
94
  <p class="font-medium text-secondary text-center pt-4 pb-8"> End of the flow </p>
79
95
  {:else if typeof stepDetail != 'string' && stepDetail.value}
@@ -122,12 +138,12 @@ let codeViewer;
122
138
  </p>
123
139
  {:else if stepDetail.value.type == 'rawscript'}
124
140
  <div class="text-xs">
125
- <h3 class="mb-2 font-semibold">Step Inputs</h3>
141
+ <h3 class="mb-2 font-semibold mt-2">Step Inputs</h3>
126
142
  <InputTransformsViewer inputTransforms={stepDetail?.value?.input_transforms ?? {}} />
127
143
  </div>
128
144
 
129
145
  <div>
130
- <div class="mb-2 flex justify-between items-center">
146
+ <div class="mb-2 mt-4 flex justify-between items-center">
131
147
  <h3 class="font-semibold">Code</h3>
132
148
  <Button size="xs2" color="light" variant="contained" on:click={codeViewer.openDrawer}>
133
149
  Expand
@@ -140,10 +156,22 @@ let codeViewer;
140
156
  class="whitespace-pre-wrap"
141
157
  />
142
158
  </div>
159
+ <h3 class="mb-2 mt-4">Lockfile</h3>
160
+ <div>
161
+ {#if stepDetail.value.lock}
162
+ <pre class="bg-surface-secondary text-xs p-2 h-full overflow-auto w-full"
163
+ >{stepDetail.value.lock}</pre
164
+ >
165
+ {:else}
166
+ <p class="bg-surface-secondary text-sm p-2">
167
+ There is no lockfile for this inline script
168
+ </p>
169
+ {/if}
170
+ </div>
143
171
  </div>
144
172
  {:else if stepDetail.value.type == 'script'}
145
173
  <div class="text-2xs">
146
- <h3 class="mb-2 font-semibold">Step Inputs</h3>
174
+ <h3 class="mb-2 font-semibold mt-2">Step Inputs</h3>
147
175
  <InputTransformsViewer inputTransforms={stepDetail?.value?.input_transforms ?? {}} />
148
176
  </div>
149
177
  {#if stepDetail.value.path.startsWith('hub/')}
@@ -1,13 +1,8 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import type { FlowModule, FlowValue } from '../gen';
2
+ import type { FlowModule } from '../gen';
3
3
  declare const __propDef: {
4
4
  props: {
5
- flow: {
6
- summary: string;
7
- description?: string;
8
- value: FlowValue;
9
- schema?: any;
10
- };
5
+ schema?: any | undefined;
11
6
  stepDetail?: FlowModule | string | undefined;
12
7
  };
13
8
  events: {
@@ -56,9 +56,7 @@ async function getLogs() {
56
56
  </Drawer>
57
57
  <div
58
58
  class:border={!noBorder}
59
- class="grid {!col
60
- ? 'grid-cols-2'
61
- : 'grid-rows-2'} shadow border border-tertiary-inverse h-full max-h-[70vh]"
59
+ class="grid {!col ? 'grid-cols-2' : 'grid-rows-2'} shadow border border-tertiary-inverse h-full"
62
60
  >
63
61
  <div class="bg-surface {col ? '' : 'max-h-80'} h-full p-1 overflow-auto relative">
64
62
  <span class="text-tertiary">Result</span>
@@ -23,7 +23,7 @@ export let scheduleEditor;
23
23
  {#if job['success'] != undefined}
24
24
  Received job: {displayDate(job.created_at ?? '')}
25
25
  {:else}
26
- Received job <TimeAgo date={job.created_at ?? ''} />
26
+ Received job <TimeAgo withDate date={job.created_at ?? ''} />
27
27
  {/if}
28
28
  <Tooltip small>{job?.created_at}</Tooltip>
29
29
  </span>
@@ -292,8 +292,9 @@ let inputLibraryDrawer;
292
292
  {/if}
293
293
  <FlowProgressBar {job} bind:reset={jobProgressReset} />
294
294
  </div>
295
- <div class="overflow-y-auto grow pr-4">
296
- <div class="max-h-1/2 overflow-auto border-b">
295
+
296
+ <div class="overflow-y-auto grow flex flex-col pr-4">
297
+ <div class="border-b">
297
298
  <SchemaForm
298
299
  noVariablePicker
299
300
  compact
@@ -302,9 +303,10 @@ let inputLibraryDrawer;
302
303
  bind:args={$previewArgs}
303
304
  />
304
305
  </div>
305
- <div class="pt-4 grow">
306
+ <div class="pt-4 flex flex-col grow">
306
307
  {#if jobId}
307
308
  <FlowStatusViewer
309
+ wideResults
308
310
  {flowStateStore}
309
311
  {jobId}
310
312
  on:jobsLoaded={({ detail }) => {
@@ -8,6 +8,7 @@ export let workspaceId = undefined;
8
8
  export let flowStateStore = writable({});
9
9
  export let selectedJobStep = undefined;
10
10
  export let isOwner = false;
11
+ export let wideResults = false;
11
12
  let lastJobId = jobId;
12
13
  let retryStatus = writable({});
13
14
  let suspendStatus = writable({});
@@ -42,7 +43,10 @@ $: jobId && updateJobId();
42
43
  globalDurationStatuses={[]}
43
44
  globalModuleStates={[]}
44
45
  bind:selectedNode={selectedJobStep}
46
+ on:start
47
+ on:done
45
48
  {jobId}
46
49
  {workspaceId}
47
50
  {isOwner}
51
+ {wideResults}
48
52
  />
@@ -8,8 +8,11 @@ declare const __propDef: {
8
8
  flowStateStore?: Writable<FlowState> | undefined;
9
9
  selectedJobStep?: string | undefined;
10
10
  isOwner?: boolean | undefined;
11
+ wideResults?: boolean | undefined;
11
12
  };
12
13
  events: {
14
+ start: CustomEvent<any>;
15
+ done: CustomEvent<any>;
13
16
  jobsLoaded: CustomEvent<any>;
14
17
  } & {
15
18
  [evt: string]: CustomEvent<any>;
@@ -17,6 +17,8 @@ import { deepEqual } from 'fast-equals';
17
17
  import FlowTimeline from './FlowTimeline.svelte';
18
18
  import { dfs } from './flows/dfs';
19
19
  import { writable } from 'svelte/store';
20
+ import Alert from './common/alert/Alert.svelte';
21
+ import FlowGraphViewerStep from './FlowGraphViewerStep.svelte';
20
22
  const dispatch = createEventDispatcher();
21
23
  let { flowStateStore, retryStatus, suspendStatus } = getContext('FlowStatusViewer');
22
24
  export let jobId;
@@ -32,6 +34,7 @@ export let globalModuleStates;
32
34
  export let globalDurationStatuses;
33
35
  export let childFlow = false;
34
36
  export let reducedPolling = false;
37
+ export let wideResults = false;
35
38
  let jobResults = [];
36
39
  let jobFailures = [];
37
40
  let forloop_selected = '';
@@ -95,6 +98,7 @@ function updateStatus(status) {
95
98
  }
96
99
  else if ($retryStatus[jobId ?? ''] != undefined) {
97
100
  delete $retryStatus[jobId ?? ''];
101
+ $retryStatus = $retryStatus;
98
102
  }
99
103
  let jobStatus = job?.flow_status?.modules?.[job?.flow_status.step];
100
104
  if (jobStatus && jobStatus.count != undefined) {
@@ -102,6 +106,7 @@ function updateStatus(status) {
102
106
  }
103
107
  else if ($suspendStatus[jobId ?? ''] != undefined) {
104
108
  delete $suspendStatus[jobId ?? ''];
109
+ $suspendStatus = $suspendStatus;
105
110
  }
106
111
  }
107
112
  function updateInnerModules() {
@@ -138,7 +143,9 @@ function updateInnerModules() {
138
143
  }
139
144
  }
140
145
  let errorCount = 0;
146
+ let notAnonynmous = false;
141
147
  async function loadJobInProgress() {
148
+ dispatch('start');
142
149
  if (jobId != '00000000-0000-0000-0000-000000000000') {
143
150
  try {
144
151
  const newJob = await JobService.getJob({
@@ -152,15 +159,24 @@ async function loadJobInProgress() {
152
159
  dispatch('jobsLoaded', job);
153
160
  }
154
161
  errorCount = 0;
162
+ notAnonynmous = false;
155
163
  }
156
164
  catch (e) {
157
- errorCount += 1;
158
- console.error(e);
165
+ if (e?.body?.includes('As a non logged in user, you can only see jobs ran by anonymous users')) {
166
+ notAnonynmous = true;
167
+ }
168
+ else {
169
+ errorCount += 1;
170
+ console.error(e);
171
+ }
159
172
  }
160
173
  }
161
174
  if (job?.type !== 'CompletedJob' && errorCount < 4 && !destroyed) {
162
175
  timeout = setTimeout(() => loadJobInProgress(), reducedPolling ? 5000 : 1000);
163
176
  }
177
+ else {
178
+ dispatch('done', job);
179
+ }
164
180
  }
165
181
  let destroyed = false;
166
182
  async function updateJobId() {
@@ -170,11 +186,12 @@ async function updateJobId() {
170
186
  timeout && clearTimeout(timeout);
171
187
  innerModules = [];
172
188
  if (flowJobIds) {
189
+ let modId = flowJobIds?.moduleId ?? '';
173
190
  let common = {
174
- iteration_from: Math.max(flowJobIds.flowJobs.length - 20, 0),
175
- iteration_total: flowJobIds?.length
191
+ iteration_from: $localDurationStatuses?.[modId]?.iteration_from ??
192
+ Math.max(flowJobIds.flowJobs.length - 20, 0),
193
+ iteration_total: $localDurationStatuses?.[modId]?.iteration_total ?? flowJobIds?.length
176
194
  };
177
- let modId = flowJobIds?.moduleId ?? '';
178
195
  $localDurationStatuses[modId] = {
179
196
  ...($localDurationStatuses[modId] ?? { byJob: {} }),
180
197
  ...common
@@ -361,10 +378,15 @@ function loadPreviousIters(lenToAdd) {
361
378
  jobResults = [...new Array(lenToAdd), ...jobResults];
362
379
  updateSlicedListJobIds();
363
380
  }
381
+ let stepDetail = undefined;
364
382
  </script>
365
383
 
366
- {#if job}
367
- <div class="flow-root w-full space-y-4">
384
+ {#if notAnonynmous}
385
+ <Alert type="error" title="Required Auth">
386
+ As a non logged in user, you can only see jobs ran by anonymous users like you
387
+ </Alert>
388
+ {:else if job}
389
+ <div class="flow-root w-full space-y-4 {wideResults ? '' : 'max-w-7xl'} mx-auto px-4">
368
390
  <!-- {#if innerModules.length > 0 && true}
369
391
  <h3 class="text-md leading-6 font-bold text-primay border-b pb-2">Flow result</h3>
370
392
  {:else}
@@ -398,7 +420,7 @@ function loadPreviousIters(lenToAdd) {
398
420
  </p>
399
421
  {/if}
400
422
  {#if render}
401
- <div class="w-full h-full border border-secondary bg-surface p-1 overflow-auto">
423
+ <div class="w-full h-full border rounded-sm bg-surface p-1 overflow-auto">
402
424
  <DisplayResult workspaceId={job?.workspace_id} {jobId} result={jobResults} />
403
425
  </div>
404
426
  {/if}
@@ -469,13 +491,13 @@ function loadPreviousIters(lenToAdd) {
469
491
  {/if}
470
492
  {#if render}
471
493
  {#if innerModules.length > 0 && !isListJob}
472
- <Tabs bind:selected>
494
+ <Tabs class="mx-auto {wideResults ? '' : 'max-w-7xl'}" bind:selected>
473
495
  <Tab value="graph"><span class="font-semibold text-md">Graph</span></Tab>
474
496
  <Tab value="sequence"><span class="font-semibold">Details</span></Tab>
475
497
  </Tabs>
476
498
  {/if}
477
499
  {/if}
478
- <div class={selected != 'sequence' ? 'hidden' : ''}>
500
+ <div class="{selected != 'sequence' ? 'hidden' : ''} max-w-7xl mx-auto">
479
501
  {#if isListJob}
480
502
  {@const lenToAdd = Math.min(
481
503
  20,
@@ -662,8 +684,8 @@ function loadPreviousIters(lenToAdd) {
662
684
  </div>
663
685
  {#if render}
664
686
  {#if job.raw_flow && !isListJob}
665
- <div class="{selected != 'graph' ? 'hidden' : ''} mt-4">
666
- <div class="grid grid-cols-3 border">
687
+ <div class="{selected != 'graph' ? 'hidden' : ''} grow mt-4">
688
+ <div class="grid grid-cols-3 border h-full">
667
689
  <div class="col-span-2 bg-surface-secondary">
668
690
  <div class="flex flex-col">
669
691
  {#each Object.values($retryStatus) as count}
@@ -687,16 +709,22 @@ function loadPreviousIters(lenToAdd) {
687
709
  success={jobId != undefined && isSuccess(job?.['success'])}
688
710
  flowModuleStates={$localModuleStates}
689
711
  on:select={(e) => {
690
- rightColumnSelect = 'detail'
712
+ if (rightColumnSelect != 'node_definition') {
713
+ rightColumnSelect = 'node_status'
714
+ }
691
715
  if (typeof e.detail == 'string') {
692
716
  if (e.detail == 'Input') {
693
717
  selectedNode = 'start'
718
+ stepDetail = undefined
694
719
  } else if (e.detail == 'Result') {
695
720
  selectedNode = 'end'
721
+ stepDetail = 'end'
696
722
  } else {
697
723
  selectedNode = e.detail
724
+ stepDetail = e.detail
698
725
  }
699
726
  } else {
727
+ stepDetail = e.detail
700
728
  selectedNode = e.detail.id
701
729
  }
702
730
  }}
@@ -705,24 +733,27 @@ function loadPreviousIters(lenToAdd) {
705
733
  />
706
734
  </div>
707
735
  <div
708
- class="border-l border-tertiary-inverse pt-1 overflow-auto min-h-[700px] flex flex-col"
736
+ class="border-l border-tertiary-inverse pt-1 overflow-auto min-h-[700px] flex flex-col z-0"
709
737
  >
710
738
  <Tabs bind:selected={rightColumnSelect}>
711
739
  <Tab value="timeline"><span class="font-semibold text-md">Timeline</span></Tab>
712
- <Tab value="detail"><span class="font-semibold">Details</span></Tab>
740
+ <Tab value="node_status"><span class="font-semibold">Node status</span></Tab>
741
+ <Tab value="node_definition"><span class="font-semibold">Node definition</span></Tab>
713
742
  {#if Object.keys(job?.flow_status?.user_states ?? {}).length > 0}
714
743
  <Tab value="user_states"><span class="font-semibold">User States</span></Tab>
715
744
  {/if}
716
745
  </Tabs>
717
746
  {#if rightColumnSelect == 'timeline'}
718
747
  <FlowTimeline
748
+ selfWaitTime={job?.self_wait_time_ms}
749
+ aggregateWaitTime={job?.aggregate_wait_time_ms}
719
750
  flowDone={job?.['success'] != undefined}
720
751
  bind:this={flowTimeline}
721
752
  flowModules={dfs(job.raw_flow?.modules ?? [], (x) => x.id)}
722
753
  durationStatuses={localDurationStatuses}
723
754
  />
724
- {:else if rightColumnSelect == 'detail'}
725
- <div class="pt-2 h-full">
755
+ {:else if rightColumnSelect == 'node_status'}
756
+ <div class="pt-2 max-h-[80vh]">
726
757
  {#if selectedNode}
727
758
  {@const node = $localModuleStates[selectedNode]}
728
759
 
@@ -793,6 +824,8 @@ function loadPreviousIters(lenToAdd) {
793
824
  {:else}<p class="p-2 text-tertiary italic">Select a node to see its details here</p
794
825
  >{/if}
795
826
  </div>
827
+ {:else if rightColumnSelect == 'node_definition'}
828
+ <FlowGraphViewerStep {stepDetail} />
796
829
  {:else if rightColumnSelect == 'user_states'}
797
830
  <div class="p-2">
798
831
  <JobArgs argLabel="Key" args={job?.flow_status?.user_states ?? {}} />
@@ -20,9 +20,12 @@ declare const __propDef: {
20
20
  globalDurationStatuses: Writable<Record<string, DurationStatus>>[];
21
21
  childFlow?: boolean | undefined;
22
22
  reducedPolling?: boolean | undefined;
23
+ wideResults?: boolean | undefined;
23
24
  };
24
25
  events: {
26
+ start: CustomEvent<any>;
25
27
  jobsLoaded: CustomEvent<any>;
28
+ done: CustomEvent<any>;
26
29
  } & {
27
30
  [evt: string]: CustomEvent<any>;
28
31
  };
@@ -3,6 +3,9 @@ import { onDestroy } from 'svelte';
3
3
  import { getDbClockNow } from '../forLater';
4
4
  import { Loader2 } from 'lucide-svelte';
5
5
  import TimelineBar from './TimelineBar.svelte';
6
+ import WaitTimeWarning from './common/waitTimeWarning/WaitTimeWarning.svelte';
7
+ export let selfWaitTime = undefined;
8
+ export let aggregateWaitTime = undefined;
6
9
  export let flowModules;
7
10
  export let durationStatuses;
8
11
  export let flowDone = false;
@@ -113,6 +116,16 @@ onDestroy(() => {
113
116
  </div>
114
117
  </div>
115
118
  </div>
119
+ {#if selfWaitTime}
120
+ <div class="px-2 py-2 grid grid-cols-6 w-full">
121
+ root:
122
+ <WaitTimeWarning
123
+ self_wait_time_ms={selfWaitTime}
124
+ aggregate_wait_time_ms={aggregateWaitTime}
125
+ variant="badge-self-wait"
126
+ />
127
+ </div>
128
+ {/if}
116
129
  {#each Object.values(flowModules) as k (k)}
117
130
  <div class="overflow-auto max-h-60 shadow-inner dark:shadow-gray-700 relative">
118
131
  {#if ($durationStatuses?.[k]?.iteration_from ?? 0) > 0}
@@ -2,6 +2,8 @@ import { SvelteComponent } from "svelte";
2
2
  import type { Writable } from 'svelte/store';
3
3
  declare const __propDef: {
4
4
  props: {
5
+ selfWaitTime?: number | undefined;
6
+ aggregateWaitTime?: number | undefined;
5
7
  flowModules: string[];
6
8
  durationStatuses: Writable<Record<string, {
7
9
  byJob: Record<string, {
@@ -5,14 +5,9 @@ import SchemaViewer from './SchemaViewer.svelte';
5
5
  import FieldHeader from './FieldHeader.svelte';
6
6
  import { copyToClipboard } from '../utils';
7
7
  import FlowGraphViewer from './FlowGraphViewer.svelte';
8
- import { setContext } from 'svelte';
9
- import { SVELVET_CONTEXT_KEY } from './graph/svelvet/container/models';
10
8
  import { Clipboard } from 'lucide-svelte';
11
9
  import YAML from 'yaml';
12
10
  import { yaml } from 'svelte-highlight/languages';
13
- setContext(SVELVET_CONTEXT_KEY, {
14
- fullHeight: true
15
- });
16
11
  export let flow;
17
12
  export let initialOpen = undefined;
18
13
  export let noSide = false;
@@ -9,6 +9,9 @@ import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte
9
9
  import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
10
10
  import Section from './Section.svelte';
11
11
  import { Eye, Plus } from 'lucide-svelte';
12
+ import Label from './Label.svelte';
13
+ import { sendUserToast } from '../toast';
14
+ import { createEventDispatcher } from 'svelte';
12
15
  export let name;
13
16
  let can_write = false;
14
17
  let folder;
@@ -49,6 +52,7 @@ let folderNotFound = undefined;
49
52
  async function loadFolder() {
50
53
  try {
51
54
  folder = await FolderService.getFolder({ workspace: $workspaceStore, name });
55
+ summary = folder.summary ?? '';
52
56
  can_write =
53
57
  $userStore != undefined &&
54
58
  (folder?.owners.includes('u/' + $userStore.username) ||
@@ -85,6 +89,7 @@ function getRole(x) {
85
89
  let ownerKind = 'user';
86
90
  let groupCreated = undefined;
87
91
  let newGroupName = '';
92
+ let summary = '';
88
93
  async function addGroup() {
89
94
  await GroupService.createGroup({
90
95
  workspace: $workspaceStore ?? '',
@@ -95,6 +100,17 @@ async function addGroup() {
95
100
  loadGroups();
96
101
  ownerItem = newGroupName;
97
102
  }
103
+ const dispatch = createEventDispatcher();
104
+ async function updateFolder() {
105
+ await FolderService.updateFolder({
106
+ workspace: $workspaceStore ?? '',
107
+ name,
108
+ requestBody: { summary }
109
+ });
110
+ sendUserToast('Folder summary updated');
111
+ dispatch('update');
112
+ loadFolder();
113
+ }
98
114
  </script>
99
115
 
100
116
  <Drawer bind:this={newGroup}>
@@ -124,6 +140,15 @@ async function addGroup() {
124
140
  </DrawerContent>
125
141
  </Drawer>
126
142
 
143
+ <Section label="Metadata" class="mb-4">
144
+ <Label label="Summary">
145
+ <div class="flex flex-row gap-2">
146
+ <input placeholder="Short summary to be displayed when listed" bind:value={summary} />
147
+ <Button size="sm" on:click={updateFolder} disabled={!can_write}>Save</Button>
148
+ </div>
149
+ </Label>
150
+ </Section>
151
+
127
152
  <Section label={`Permissions (${perms?.length ?? 0})`}>
128
153
  <div class="flex flex-col gap-6">
129
154
  {#if can_write}
@@ -4,6 +4,8 @@ declare const __propDef: {
4
4
  name: string;
5
5
  };
6
6
  events: {
7
+ update: CustomEvent<any>;
8
+ } & {
7
9
  [evt: string]: CustomEvent<any>;
8
10
  };
9
11
  slots: {};