windmill-components 1.309.7 → 1.352.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 (509) hide show
  1. package/package/assets/app.css +22 -13
  2. package/package/ata/index.js +1 -0
  3. package/package/autosize.js +2 -2
  4. package/package/common.d.ts +14 -2
  5. package/package/common.js +6 -1
  6. package/package/components/AllFlowLogs.svelte +30 -0
  7. package/package/components/AllFlowLogs.svelte.d.ts +18 -0
  8. package/package/components/ApiConnectForm.svelte +10 -4
  9. package/package/components/AppConnectDrawer.svelte +74 -0
  10. package/package/components/AppConnectDrawer.svelte.d.ts +20 -0
  11. package/package/components/AppConnectInner.svelte +507 -0
  12. package/package/components/AppConnectInner.svelte.d.ts +28 -0
  13. package/package/components/ArgEnum.svelte +4 -1
  14. package/package/components/ArgEnum.svelte.d.ts +3 -1
  15. package/package/components/ArgInfo.svelte +19 -3
  16. package/package/components/ArgInput.svelte +222 -122
  17. package/package/components/ArgInput.svelte.d.ts +11 -7
  18. package/package/components/ArrayTypeNarrowing.svelte +29 -27
  19. package/package/components/CenteredPage.svelte +2 -2
  20. package/package/components/ConcurrentJobsChart.svelte +212 -0
  21. package/package/components/ConcurrentJobsChart.svelte.d.ts +23 -0
  22. package/package/components/CustomOauth.svelte +2 -2
  23. package/package/components/DateInput.svelte +47 -0
  24. package/package/components/DateInput.svelte.d.ts +24 -0
  25. package/package/components/DateTimeInput.svelte +25 -3
  26. package/package/components/DefaultScripts.svelte +5 -8
  27. package/package/components/DefaultTags.svelte +3 -2
  28. package/package/components/DefaultTags.svelte.d.ts +3 -1
  29. package/package/components/DefaultTagsInner.svelte +2 -11
  30. package/package/components/DefaultTagsInner.svelte.d.ts +3 -1
  31. package/package/components/Dev.svelte +72 -10
  32. package/package/components/DiffDrawer.svelte +1 -2
  33. package/package/components/DiffEditor.svelte +3 -0
  34. package/package/components/DisplayResult.svelte +467 -344
  35. package/package/components/DisplayResult.svelte.d.ts +1 -0
  36. package/package/components/DropdownV2.svelte.d.ts +2 -2
  37. package/package/components/DurationMs.svelte +11 -3
  38. package/package/components/DurationMs.svelte.d.ts +2 -0
  39. package/package/components/EditableSchemaForm.svelte +447 -100
  40. package/package/components/EditableSchemaForm.svelte.d.ts +16 -6
  41. package/package/components/Editor.svelte +112 -93
  42. package/package/components/Editor.svelte.d.ts +4 -2
  43. package/package/components/EditorBar.svelte +101 -10
  44. package/package/components/EditorBar.svelte.d.ts +0 -1
  45. package/package/components/ErrorOrRecoveryHandler.svelte +0 -1
  46. package/package/components/FlowBuilder.svelte +14 -6
  47. package/package/components/FlowGraphViewer.svelte +2 -1
  48. package/package/components/FlowGraphViewerStep.svelte +56 -10
  49. package/package/components/FlowGraphViewerStep.svelte.d.ts +2 -7
  50. package/package/components/FlowJobResult.svelte +14 -3
  51. package/package/components/FlowJobResult.svelte.d.ts +3 -0
  52. package/package/components/FlowMetadata.svelte +41 -36
  53. package/package/components/FlowMetadata.svelte.d.ts +3 -1
  54. package/package/components/FlowPreviewContent.svelte +18 -9
  55. package/package/components/FlowStatusViewer.svelte +4 -0
  56. package/package/components/FlowStatusViewer.svelte.d.ts +3 -0
  57. package/package/components/FlowStatusViewerInner.svelte +96 -19
  58. package/package/components/FlowStatusViewerInner.svelte.d.ts +3 -0
  59. package/package/components/FlowTimeline.svelte +13 -0
  60. package/package/components/FlowTimeline.svelte.d.ts +2 -0
  61. package/package/components/FlowViewer.svelte +0 -5
  62. package/package/components/FolderEditor.svelte +25 -0
  63. package/package/components/FolderEditor.svelte.d.ts +2 -0
  64. package/package/components/GroupEditor.svelte +36 -91
  65. package/package/components/GroupInfo.svelte +1 -1
  66. package/package/components/HighlightCode.svelte +3 -0
  67. package/package/components/InputTransformForm.svelte +19 -1
  68. package/package/components/InputTransformForm.svelte.d.ts +2 -0
  69. package/package/components/InputTransformSchemaForm.svelte +6 -0
  70. package/package/components/InputTransformSchemaForm.svelte.d.ts +2 -0
  71. package/package/components/InstanceSettings.svelte +196 -16
  72. package/package/components/InstanceSettings.svelte.d.ts +4 -0
  73. package/package/components/JobLogs.svelte +12 -0
  74. package/package/components/JobLogs.svelte.d.ts +16 -0
  75. package/package/components/JobStatus.svelte +3 -3
  76. package/package/components/Label.svelte +1 -1
  77. package/package/components/Label.svelte.d.ts +1 -0
  78. package/package/components/LightweightArgInput.svelte +342 -264
  79. package/package/components/LightweightArgInput.svelte.d.ts +6 -2
  80. package/package/components/LightweightResourcePicker.svelte +74 -26
  81. package/package/components/LightweightSchemaForm.svelte +49 -39
  82. package/package/components/LogViewer.svelte +52 -15
  83. package/package/components/LogViewer.svelte.d.ts +1 -0
  84. package/package/components/Login.svelte +288 -0
  85. package/package/components/Login.svelte.d.ts +19 -0
  86. package/package/components/ModulePreviewForm.svelte +4 -0
  87. package/package/components/NoMainFuncBadge.svelte +8 -0
  88. package/package/components/NoMainFuncBadge.svelte.d.ts +14 -0
  89. package/package/components/NumberTypeNarrowing.svelte +71 -44
  90. package/package/components/OauthExtraParams.svelte +1 -1
  91. package/package/components/OauthScopes.svelte +1 -1
  92. package/package/components/ObjectResourceInput.svelte +2 -0
  93. package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
  94. package/package/components/ObjectStoreConfigSettings.svelte +12 -1
  95. package/package/components/ObjectStoreConfigSettings.svelte.d.ts +1 -0
  96. package/package/components/ObjectTypeNarrowing.svelte +0 -1
  97. package/package/components/ParqetCsvTableRenderer.svelte +181 -0
  98. package/package/components/ParqetCsvTableRenderer.svelte.d.ts +21 -0
  99. package/package/components/Password.svelte +1 -0
  100. package/package/components/Password.svelte.d.ts +2 -0
  101. package/package/components/PasswordArgInput.svelte +49 -0
  102. package/package/components/PasswordArgInput.svelte.d.ts +17 -0
  103. package/package/components/Path.svelte +2 -2
  104. package/package/components/PersistentScriptDrawer.svelte +6 -3
  105. package/package/components/QueueMetricsDrawer.svelte +225 -0
  106. package/package/components/QueueMetricsDrawer.svelte.d.ts +18 -0
  107. package/package/components/Range.svelte +88 -286
  108. package/package/components/Range.svelte.d.ts +9 -23
  109. package/package/components/ResourceEditor.svelte +138 -140
  110. package/package/components/ResourceEditor.svelte.d.ts +9 -2
  111. package/package/components/ResourceEditorDrawer.svelte +45 -0
  112. package/package/components/ResourceEditorDrawer.svelte.d.ts +21 -0
  113. package/package/components/ResourcePicker.svelte +8 -9
  114. package/package/components/ResourceTypePicker.svelte +88 -36
  115. package/package/components/ResultJobLoader.svelte +2 -2
  116. package/package/components/ResultJobLoader.svelte.d.ts +9 -9
  117. package/package/components/RunChart.svelte +55 -5
  118. package/package/components/RunChart.svelte.d.ts +1 -0
  119. package/package/components/RunForm.svelte +1 -1
  120. package/package/components/S3FilePicker.svelte +21 -9
  121. package/package/components/S3FilePicker.svelte.d.ts +2 -0
  122. package/package/components/SavedInputs.svelte +49 -13
  123. package/package/components/ScheduleEditorInner.svelte +294 -264
  124. package/package/components/SchemaForm.svelte +193 -99
  125. package/package/components/SchemaForm.svelte.d.ts +17 -2
  126. package/package/components/ScriptBuilder.svelte +23 -14
  127. package/package/components/ScriptEditor.svelte +1 -2
  128. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  129. package/package/components/ScriptSchedules.svelte +11 -8
  130. package/package/components/ScriptSchema.svelte +3 -21
  131. package/package/components/ScriptVersionHistory.svelte +1 -1
  132. package/package/components/SimpleEditor.svelte +4 -1
  133. package/package/components/StringTypeNarrowing.svelte +229 -167
  134. package/package/components/StringTypeNarrowing.svelte.d.ts +6 -1
  135. package/package/components/TemplateEditor.svelte +1 -0
  136. package/package/components/TestJobLoader.svelte +14 -5
  137. package/package/components/TestJobLoader.svelte.d.ts +1 -1
  138. package/package/components/Toggle.svelte +6 -3
  139. package/package/components/Toggle.svelte.d.ts +1 -0
  140. package/package/components/Tooltip.svelte +8 -2
  141. package/package/components/Tooltip.svelte.d.ts +1 -0
  142. package/package/components/UserSettings.svelte +24 -1
  143. package/package/components/WorkspaceGroup.svelte +84 -21
  144. package/package/components/WorkspaceGroup.svelte.d.ts +1 -0
  145. package/package/components/app_connect.d.ts +7 -0
  146. package/package/components/app_connect.js +78 -0
  147. package/package/components/apps/components/buttons/AppButton.svelte +2 -1
  148. package/package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
  149. package/package/components/apps/components/display/AppAlert.svelte +1 -1
  150. package/package/components/apps/components/display/AppCustomComponent.svelte +1 -1
  151. package/package/components/apps/components/display/AppDisplayComponent.svelte +2 -2
  152. package/package/components/apps/components/display/AppDownload.svelte +1 -1
  153. package/package/components/apps/components/display/AppFlowStatusComponent.svelte +13 -70
  154. package/package/components/apps/components/display/AppFlowStatusComponent.svelte.d.ts +1 -9
  155. package/package/components/apps/components/display/AppIcon.svelte +1 -1
  156. package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +23 -10
  157. package/package/components/apps/components/display/AppJobIdFlowStatus.svelte.d.ts +1 -3
  158. package/package/components/apps/components/display/AppJobIdLogComponent.svelte +22 -10
  159. package/package/components/apps/components/display/AppJobIdLogComponent.svelte.d.ts +1 -3
  160. package/package/components/apps/components/display/AppLogsComponent.svelte +13 -70
  161. package/package/components/apps/components/display/AppLogsComponent.svelte.d.ts +1 -9
  162. package/package/components/apps/components/display/AppMap.svelte +3 -2
  163. package/package/components/apps/components/display/AppMenu.svelte +1 -1
  164. package/package/components/apps/components/display/AppPdf.svelte +3 -11
  165. package/package/components/apps/components/display/AppText.svelte +7 -2
  166. package/package/components/apps/components/display/charts/AppAgCharts.svelte +31 -18
  167. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +32 -30
  168. package/package/components/apps/components/display/dbtable/InsertRow.svelte +3 -6
  169. package/package/components/apps/components/display/dbtable/queries/delete.js +1 -1
  170. package/package/components/apps/components/display/dbtable/queries/insert.js +1 -12
  171. package/package/components/apps/components/display/dbtable/queries/select.js +1 -1
  172. package/package/components/apps/components/display/dbtable/queries/update.js +2 -2
  173. package/package/components/apps/components/display/dbtable/utils.d.ts +0 -1
  174. package/package/components/apps/components/display/dbtable/utils.js +0 -83
  175. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +75 -44
  176. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte.d.ts +5 -1
  177. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +172 -0
  178. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte.d.ts +27 -0
  179. package/package/components/apps/components/display/table/AppAggridInfiniteTableEe.svelte +38 -0
  180. package/package/components/apps/components/display/table/AppAggridInfiniteTableEe.svelte.d.ts +28 -0
  181. package/package/components/apps/components/display/table/AppAggridTable.svelte +189 -56
  182. package/package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -1
  183. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +13 -2
  184. package/package/components/apps/components/display/table/AppAggridTableActions.svelte.d.ts +1 -0
  185. package/package/components/apps/components/display/table/AppCell.svelte +1 -3
  186. package/package/components/apps/components/display/table/AppTable.svelte +320 -281
  187. package/package/components/apps/components/display/table/AppTableFooter.svelte +42 -23
  188. package/package/components/apps/components/display/table/AppTableFooter.svelte.d.ts +2 -2
  189. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +119 -0
  190. package/package/components/apps/components/display/table/SyncColumnDefs.svelte.d.ts +21 -0
  191. package/package/components/apps/components/display/table/theme/windmill-theme.css +656 -0
  192. package/package/components/apps/components/display/table/utils.js +22 -0
  193. package/package/components/apps/components/helpers/DebouncedInput.svelte +3 -2
  194. package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -1
  195. package/package/components/apps/components/helpers/NonRunnableComponent.svelte +35 -0
  196. package/package/components/apps/components/helpers/RefreshButton.svelte +30 -12
  197. package/package/components/apps/components/helpers/RefreshButton.svelte.d.ts +1 -3
  198. package/package/components/apps/components/helpers/RefreshIndicator.svelte +19 -0
  199. package/package/components/apps/components/helpers/RefreshIndicator.svelte.d.ts +16 -0
  200. package/package/components/apps/components/helpers/ResolveConfig.svelte +1 -1
  201. package/package/components/apps/components/helpers/RunnableComponent.svelte +102 -41
  202. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +9 -5
  203. package/package/components/apps/components/helpers/RunnableWrapper.svelte +9 -1
  204. package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +6 -0
  205. package/package/components/apps/components/helpers/eval.js +1 -36
  206. package/package/components/apps/components/inputs/AppDateInput.svelte +5 -1
  207. package/package/components/apps/components/inputs/AppFileInput.svelte +13 -2
  208. package/package/components/apps/components/inputs/AppFileInput.svelte.d.ts +1 -0
  209. package/package/components/apps/components/inputs/AppMultiSelect.svelte +56 -50
  210. package/package/components/apps/components/inputs/AppMultiSelect.svelte.d.ts +1 -0
  211. package/package/components/apps/components/inputs/AppMultiSelectV2.svelte +178 -0
  212. package/package/components/apps/components/inputs/AppMultiSelectV2.svelte.d.ts +24 -0
  213. package/package/components/apps/components/inputs/AppNumberInput.svelte +1 -1
  214. package/package/components/apps/components/inputs/AppQuillEditor.svelte +26 -0
  215. package/package/components/apps/components/inputs/AppRangeInput.svelte +38 -37
  216. package/package/components/apps/components/inputs/AppS3FileInput.svelte +3 -1
  217. package/package/components/apps/components/inputs/AppS3FileInput.svelte.d.ts +1 -0
  218. package/package/components/apps/components/inputs/AppSelect.svelte +21 -10
  219. package/package/components/apps/components/inputs/AppSliderInputs.svelte +26 -31
  220. package/package/components/apps/components/inputs/AppTextInput.svelte +1 -1
  221. package/package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +1 -1
  222. package/package/components/apps/components/layout/AppConditionalWrapper.svelte +10 -3
  223. package/package/components/apps/components/layout/AppConditionalWrapper.svelte.d.ts +1 -0
  224. package/package/components/apps/components/layout/AppContainer.svelte +1 -1
  225. package/package/components/apps/components/layout/AppDecisionTree.svelte +1 -1
  226. package/package/components/apps/components/layout/AppDrawer.svelte +16 -3
  227. package/package/components/apps/components/layout/AppDrawer.svelte.d.ts +2 -0
  228. package/package/components/apps/components/layout/AppModal.svelte +85 -79
  229. package/package/components/apps/components/layout/AppModal.svelte.d.ts +2 -0
  230. package/package/components/apps/components/layout/AppStepper.svelte +7 -2
  231. package/package/components/apps/components/layout/AppStepper.svelte.d.ts +2 -0
  232. package/package/components/apps/components/layout/AppTabs.svelte +4 -2
  233. package/package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -0
  234. package/package/components/apps/editor/AppEditor.svelte +3 -2
  235. package/package/components/apps/editor/AppEditorHeader.svelte +68 -38
  236. package/package/components/apps/editor/AppInputs.svelte +1 -1
  237. package/package/components/apps/editor/AppPreview.svelte +18 -7
  238. package/package/components/apps/editor/ComponentHeader.svelte +37 -1
  239. package/package/components/apps/editor/ComponentHeader.svelte.d.ts +2 -0
  240. package/package/components/apps/editor/GridEditor.svelte +15 -6
  241. package/package/components/apps/editor/GridEditorMenu.svelte +120 -49
  242. package/package/components/apps/editor/GridViewer.svelte +14 -5
  243. package/package/components/apps/editor/GridViewer.svelte.d.ts +5 -1
  244. package/package/components/apps/editor/RecomputeAllComponents.svelte +17 -3
  245. package/package/components/apps/editor/RunnableJobPanel.svelte +9 -5
  246. package/package/components/apps/editor/SettingsPanel.svelte +19 -5
  247. package/package/components/apps/editor/SubGridEditor.svelte +44 -27
  248. package/package/components/apps/editor/appUtils.d.ts +6 -1
  249. package/package/components/apps/editor/appUtils.js +85 -7
  250. package/package/components/apps/editor/component/Component.svelte +86 -18
  251. package/package/components/apps/editor/component/Component.svelte.d.ts +3 -0
  252. package/package/components/apps/editor/component/components.d.ts +285 -23
  253. package/package/components/apps/editor/component/components.js +178 -13
  254. package/package/components/apps/editor/component/default-codes.d.ts +1 -1
  255. package/package/components/apps/editor/component/default-codes.js +241 -9
  256. package/package/components/apps/editor/component/sets.d.ts +3 -0
  257. package/package/components/apps/editor/component/sets.js +12 -2
  258. package/package/components/apps/editor/componentsPanel/ComponentList.svelte +15 -2
  259. package/package/components/apps/editor/componentsPanel/componentControlUtils.js +4 -2
  260. package/package/components/apps/editor/componentsPanel/cssUtils.js +1 -1
  261. package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +5 -0
  262. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +9 -5
  263. package/package/components/apps/editor/contextPanel/components/TableActionsOutput.svelte +1 -1
  264. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +46 -6
  265. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +1 -1
  266. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelWithTable.svelte +1 -1
  267. package/package/components/apps/editor/inlineScriptsPanel/utils.js +3 -1
  268. package/package/components/apps/editor/settingsPanel/AlignmentEditor.svelte +1 -1
  269. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +5 -34
  270. package/package/components/apps/editor/settingsPanel/ComponentControl.svelte +1 -1
  271. package/package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +8 -5
  272. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +41 -29
  273. package/package/components/apps/editor/settingsPanel/ContextVariables.svelte +61 -0
  274. package/package/components/apps/editor/settingsPanel/ContextVariables.svelte.d.ts +16 -0
  275. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +12 -10
  276. package/package/components/apps/editor/settingsPanel/DeleteComponent.svelte +29 -32
  277. package/package/components/apps/editor/settingsPanel/DeleteComponent.svelte.d.ts +0 -5
  278. package/package/components/apps/editor/settingsPanel/EventHandlerItem.svelte +33 -0
  279. package/package/components/apps/editor/settingsPanel/EventHandlerItem.svelte.d.ts +19 -0
  280. package/package/components/apps/editor/settingsPanel/EventHandlers.svelte +103 -0
  281. package/package/components/apps/editor/settingsPanel/EventHandlers.svelte.d.ts +18 -0
  282. package/package/components/apps/editor/settingsPanel/GridCondition.svelte +14 -36
  283. package/package/components/apps/editor/settingsPanel/GridTab.svelte +4 -24
  284. package/package/components/apps/editor/settingsPanel/GridTabDisabled.svelte +2 -1
  285. package/package/components/apps/editor/settingsPanel/GridTabDisabled.svelte.d.ts +1 -0
  286. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +24 -3
  287. package/package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +32 -2
  288. package/package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte.d.ts +1 -0
  289. package/package/components/apps/editor/settingsPanel/StylePanel.svelte +4 -3
  290. package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +0 -2
  291. package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte.d.ts +0 -1
  292. package/package/components/apps/editor/settingsPanel/inputEditor/ColorInput.svelte +3 -2
  293. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +8 -1
  294. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +7 -14
  295. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +0 -1
  296. package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +4 -4
  297. package/package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +6 -3
  298. package/package/components/apps/inputType.d.ts +4 -0
  299. package/package/components/apps/rx.d.ts +1 -1
  300. package/package/components/apps/rx.js +7 -0
  301. package/package/components/apps/svelte-grid/Grid.svelte +13 -4
  302. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +2 -1
  303. package/package/components/apps/svelte-grid/types.d.ts +1 -0
  304. package/package/components/apps/svelte-grid/utils/helper.js +1 -0
  305. package/package/components/apps/svelte-grid/utils/overlap.d.ts +3 -0
  306. package/package/components/apps/svelte-grid/utils/overlap.js +21 -0
  307. package/package/components/apps/svelte-select/lib/Select.svelte.d.ts +2 -2
  308. package/package/components/apps/svelte-select/lib/tailwind.css +1 -1
  309. package/package/components/apps/types.d.ts +1 -0
  310. package/package/components/apps/utils.js +13 -3
  311. package/package/components/auditLogs/AuditLogsTable.svelte +5 -2
  312. package/package/components/build_workers.js +1 -0
  313. package/package/components/common/alert/Alert.svelte +17 -17
  314. package/package/components/common/badge/Badge.svelte +6 -3
  315. package/package/components/common/badge/model.d.ts +1 -1
  316. package/package/components/common/button/Button.svelte +22 -14
  317. package/package/components/common/button/ButtonDropdown.svelte +1 -0
  318. package/package/components/common/calendarPicker/CalendarPicker.svelte +2 -0
  319. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +1 -0
  320. package/package/components/common/drawer/ConditionalPortal.svelte +9 -0
  321. package/package/components/common/drawer/ConditionalPortal.svelte.d.ts +18 -0
  322. package/package/components/common/drawer/Disposable.svelte +67 -0
  323. package/package/components/common/drawer/Disposable.svelte.d.ts +37 -0
  324. package/package/components/common/drawer/Drawer.svelte +40 -56
  325. package/package/components/common/drawer/Drawer.svelte.d.ts +2 -1
  326. package/package/components/common/fileDownload/FileDownload.svelte +4 -2
  327. package/package/components/common/fileInput/FileInput.svelte +3 -3
  328. package/package/components/common/fileInput/FileInput.svelte.d.ts +1 -0
  329. package/package/components/common/fileUpload/FileUpload.svelte +5 -4
  330. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  331. package/package/components/common/modal/Modal.svelte +4 -1
  332. package/package/components/common/modal/Modal.svelte.d.ts +1 -0
  333. package/package/components/common/popup/Popup.svelte +1 -1
  334. package/package/components/common/table/RowIcon.svelte +4 -4
  335. package/package/components/common/table/ScriptRow.svelte +12 -1
  336. package/package/components/common/table/ScriptRow.svelte.d.ts +1 -0
  337. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +4 -1
  338. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
  339. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +45 -0
  340. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +24 -0
  341. package/package/components/common/waitTimeWarning/WaitTimeWarning.svelte +79 -0
  342. package/package/components/common/waitTimeWarning/WaitTimeWarning.svelte.d.ts +18 -0
  343. package/package/components/copilot/CronGen.svelte +2 -2
  344. package/package/components/copilot/FlowCopilotStatus.svelte +1 -1
  345. package/package/components/copilot/RegexGen.svelte +17 -39
  346. package/package/components/copilot/ScriptGen.svelte +14 -5
  347. package/package/components/copilot/StepInputGen.svelte +2 -1
  348. package/package/components/copilot/StepInputsGen.svelte +2 -1
  349. package/package/components/copilot/completion.js +60 -9
  350. package/package/components/copilot/lib.js +5 -3
  351. package/package/components/copilot/prompts/edit.yaml +24 -0
  352. package/package/components/copilot/prompts/editPrompt.d.ts +3 -0
  353. package/package/components/copilot/prompts/editPrompt.js +3 -0
  354. package/package/components/copilot/prompts/fix.yaml +25 -0
  355. package/package/components/copilot/prompts/fixPrompt.d.ts +3 -0
  356. package/package/components/copilot/prompts/fixPrompt.js +3 -0
  357. package/package/components/copilot/prompts/gen.yaml +20 -0
  358. package/package/components/copilot/prompts/genPrompt.d.ts +3 -0
  359. package/package/components/copilot/prompts/genPrompt.js +3 -0
  360. package/package/components/copilot/utils.d.ts +2 -1
  361. package/package/components/copilot/utils.js +38 -0
  362. package/package/components/details/createAppFromScript.d.ts +26 -0
  363. package/package/components/details/createAppFromScript.js +50 -24
  364. package/package/components/flows/CreateActionsApp.svelte +1 -0
  365. package/package/components/flows/CreateActionsFlow.svelte +1 -0
  366. package/package/components/flows/content/FlowEditorPanel.svelte +16 -2
  367. package/package/components/flows/content/FlowInput.svelte +63 -53
  368. package/package/components/flows/content/FlowInputs.svelte +2 -2
  369. package/package/components/flows/content/FlowModuleComponent.svelte +41 -9
  370. package/package/components/flows/content/FlowModuleScript.svelte +40 -1
  371. package/package/components/flows/content/FlowModuleScript.svelte.d.ts +2 -0
  372. package/package/components/flows/content/FlowModuleSuspend.svelte +99 -59
  373. package/package/components/flows/content/FlowModuleWrapper.svelte +16 -1
  374. package/package/components/flows/content/FlowSchedules.svelte +11 -8
  375. package/package/components/flows/content/ScriptEditorDrawer.svelte +6 -6
  376. package/package/components/flows/flowExplorer.js +4 -1
  377. package/package/components/flows/flowStateUtils.js +4 -1
  378. package/package/components/flows/map/FlowConstantsItem.svelte +1 -1
  379. package/package/components/flows/map/FlowErrorHandlerItem.svelte +1 -1
  380. package/package/components/flows/map/FlowModuleSchemaItem.svelte +19 -1
  381. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
  382. package/package/components/flows/map/FlowModuleSchemaMap.svelte +6 -1
  383. package/package/components/flows/map/FlowSettingsItem.svelte +1 -1
  384. package/package/components/flows/map/MapItem.svelte +2 -0
  385. package/package/components/flows/map/MapItem.svelte.d.ts +1 -0
  386. package/package/components/flows/types.d.ts +4 -0
  387. package/package/components/flows/utils.d.ts +5 -1
  388. package/package/components/flows/utils.js +36 -0
  389. package/package/components/graph/FlowGraph.svelte +6 -2
  390. package/package/components/graph/FlowGraph.svelte.d.ts +2 -0
  391. package/package/components/graph/svelvet/container/models/index.d.ts +0 -5
  392. package/package/components/graph/svelvet/container/models/index.js +1 -1
  393. package/package/components/graph/svelvet/container/views/Svelvet.svelte +2 -5
  394. package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte +41 -16
  395. package/package/components/graph/util.d.ts +1 -37
  396. package/package/components/graph/util.js +0 -34
  397. package/package/components/home/ItemsList.svelte +44 -9
  398. package/package/components/home/TreeView.svelte +2 -0
  399. package/package/components/icons/AzureIcon.svelte +25 -1
  400. package/package/components/icons/PHPIcon.svelte +117 -0
  401. package/package/components/icons/PHPIcon.svelte.d.ts +17 -0
  402. package/package/components/instanceSettings.d.ts +1 -1
  403. package/package/components/instanceSettings.js +20 -3
  404. package/package/components/jobs/JobPreview.svelte +6 -1
  405. package/package/components/multiselect/MultiSelect.svelte +783 -0
  406. package/package/components/multiselect/MultiSelect.svelte.d.ts +98 -0
  407. package/package/components/multiselect/MultiSelectWrapper.svelte +89 -0
  408. package/package/components/multiselect/MultiSelectWrapper.svelte.d.ts +20 -0
  409. package/package/components/multiselect/types.d.ts +56 -0
  410. package/package/components/multiselect/types.js +1 -0
  411. package/package/components/multiselect/utils.d.ts +7 -0
  412. package/package/components/multiselect/utils.js +54 -0
  413. package/package/components/propertyPicker/ObjectViewer.svelte +19 -2
  414. package/package/components/runs/JobLoader.svelte +135 -17
  415. package/package/components/runs/JobLoader.svelte.d.ts +7 -2
  416. package/package/components/runs/JobPreview.svelte +44 -4
  417. package/package/components/runs/JobPreview.svelte.d.ts +2 -0
  418. package/package/components/runs/RunRow.svelte +99 -33
  419. package/package/components/runs/RunRow.svelte.d.ts +5 -1
  420. package/package/components/runs/RunsFilter.svelte +125 -9
  421. package/package/components/runs/RunsFilter.svelte.d.ts +4 -2
  422. package/package/components/runs/RunsTable.svelte +71 -10
  423. package/package/components/runs/RunsTable.svelte.d.ts +8 -1
  424. package/package/components/schema/AddProperty.svelte +149 -0
  425. package/package/components/schema/AddProperty.svelte.d.ts +23 -0
  426. package/package/components/schema/AddPropertyForm.svelte +33 -0
  427. package/package/components/schema/AddPropertyForm.svelte.d.ts +16 -0
  428. package/package/components/schema/EditableSchemaDrawer.svelte +198 -0
  429. package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +21 -0
  430. package/package/components/schema/EditableSchemaWrapper.svelte +31 -0
  431. package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +22 -0
  432. package/package/components/schema/FlowPropertyEditor.svelte +393 -0
  433. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +47 -0
  434. package/package/components/schema/PropertyEditor.svelte +185 -0
  435. package/package/components/schema/PropertyEditor.svelte.d.ts +46 -0
  436. package/package/components/schema/SchemaFormDND.svelte +75 -0
  437. package/package/components/schema/SchemaFormDND.svelte.d.ts +28 -0
  438. package/package/components/scriptEditor/LogPanel.svelte +46 -33
  439. package/package/components/scriptEditor/LogPanel.svelte.d.ts +1 -0
  440. package/package/components/scripts/CreateActionsScript.svelte +1 -1
  441. package/package/components/settings/WorkspaceUserSettings.svelte +246 -226
  442. package/package/components/sidebar/MenuButton.svelte +1 -1
  443. package/package/components/sidebar/MenuLink.svelte +1 -1
  444. package/package/components/sidebar/changelogs.js +40 -0
  445. package/package/components/table/AutoDataTable.svelte +124 -163
  446. package/package/components/table/Cell.svelte +4 -1
  447. package/package/components/table/Cell.svelte.d.ts +1 -0
  448. package/package/components/table/DataTable.svelte +13 -5
  449. package/package/components/table/DataTable.svelte.d.ts +1 -0
  450. package/package/components/table/DownloadCsv.svelte +30 -0
  451. package/package/components/table/DownloadCsv.svelte.d.ts +17 -0
  452. package/package/components/table/tableUtils.d.ts +8 -0
  453. package/package/components/table/tableUtils.js +37 -0
  454. package/package/components/vscode.js +1 -1
  455. package/package/components/wizards/AgGridWizard.svelte +27 -2
  456. package/package/components/wizards/AgGridWizard.svelte.d.ts +1 -0
  457. package/package/consts.js +7 -1
  458. package/package/defaults.d.ts +2 -2
  459. package/package/defaults.js +2 -2
  460. package/package/deno_fetch.d.ts.txt +36 -0
  461. package/package/editorUtils.js +2 -0
  462. package/package/gen/core/OpenAPI.js +5 -6
  463. package/package/gen/core/request.js +4 -1
  464. package/package/gen/index.d.ts +0 -1
  465. package/package/gen/index.js +0 -1
  466. package/package/gen/schemas.gen.d.ts +173 -428
  467. package/package/gen/schemas.gen.js +173 -433
  468. package/package/gen/services.gen.d.ts +3182 -1840
  469. package/package/gen/services.gen.js +3652 -2368
  470. package/package/gen/types.gen.d.ts +5445 -1529
  471. package/package/infer.d.ts +1 -1
  472. package/package/infer.js +6 -2
  473. package/package/inferArgSig.d.ts +10 -0
  474. package/package/inferArgSig.js +64 -4
  475. package/package/init_scripts/python_init_code.d.ts +1 -1
  476. package/package/init_scripts/python_init_code.js +1 -1
  477. package/package/process.d.ts.txt +1770 -0
  478. package/package/script_helpers.d.ts +3 -2
  479. package/package/script_helpers.js +28 -3
  480. package/package/scripts.d.ts +3 -1
  481. package/package/scripts.js +10 -3
  482. package/package/utils.d.ts +5 -1
  483. package/package/utils.js +53 -5
  484. package/package/windmill_fetch.d.ts.txt +16966 -0
  485. package/package/workspace_settings.d.ts +15 -0
  486. package/package/workspace_settings.js +81 -0
  487. package/package/zIndexes.d.ts +12 -0
  488. package/package/zIndexes.js +12 -0
  489. package/package.json +19 -10
  490. package/package/components/AppConnect.svelte +0 -566
  491. package/package/components/AppConnect.svelte.d.ts +0 -23
  492. package/package/components/ContextMenu.svelte +0 -89
  493. package/package/components/ContextMenu.svelte.d.ts +0 -28
  494. package/package/components/ParqetTableRenderer.svelte +0 -121
  495. package/package/components/ParqetTableRenderer.svelte.d.ts +0 -18
  496. package/package/components/PropertyRow.svelte +0 -80
  497. package/package/components/PropertyRow.svelte.d.ts +0 -23
  498. package/package/components/SchemaEditor.svelte +0 -344
  499. package/package/components/SchemaEditor.svelte.d.ts +0 -23
  500. package/package/components/SchemaModal.svelte +0 -350
  501. package/package/components/SchemaModal.svelte.d.ts +0 -31
  502. package/package/components/apps/components/display/index.d.ts +0 -17
  503. package/package/components/apps/components/display/index.js +0 -17
  504. package/package/components/apps/components/helpers/index.d.ts +0 -10
  505. package/package/components/apps/components/helpers/index.js +0 -10
  506. package/package/components/apps/components/index.d.ts +0 -5
  507. package/package/components/apps/components/index.js +0 -5
  508. package/package/components/apps/editor/settingsPanel/Recompute.svelte +0 -55
  509. package/package/components/apps/editor/settingsPanel/Recompute.svelte.d.ts +0 -20
@@ -1,9 +1,8 @@
1
1
  <script>import { Highlight } from 'svelte-highlight';
2
2
  import { json } from 'svelte-highlight/languages';
3
- import TableCustom from './TableCustom.svelte';
4
- import { copyToClipboard, roughSizeOfObject, truncate } from '../utils';
3
+ import { copyToClipboard, roughSizeOfObject } from '../utils';
5
4
  import { Button, Drawer, DrawerContent } from './common';
6
- import { ClipboardCopy, Download, Expand, PanelRightOpen, Table2, Braces, Highlighter } from 'lucide-svelte';
5
+ import { ClipboardCopy, Download, Expand, PanelRightOpen, Table2, Braces, Highlighter, InfoIcon, ArrowDownFromLine } from 'lucide-svelte';
7
6
  import Portal from 'svelte-portal';
8
7
  import ObjectViewer from './propertyPicker/ObjectViewer.svelte';
9
8
  import S3FilePicker from './S3FilePicker.svelte';
@@ -12,10 +11,14 @@ import AutoDataTable from './table/AutoDataTable.svelte';
12
11
  import Markdown from 'svelte-exmarkdown';
13
12
  import Toggle from './Toggle.svelte';
14
13
  import FileDownload from './common/fileDownload/FileDownload.svelte';
15
- import ParqetTableRenderer from './ParqetTableRenderer.svelte';
14
+ import ParqetTableRenderer from './ParqetCsvTableRenderer.svelte';
16
15
  import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
17
16
  import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
18
17
  import MapResult from './MapResult.svelte';
18
+ import Popover from './Popover.svelte';
19
+ import DownloadCsv from './table/DownloadCsv.svelte';
20
+ import { convertJsonToCsv } from './table/tableUtils';
21
+ import Tooltip from './Tooltip.svelte';
19
22
  export let result;
20
23
  export let requireHtmlApproval = false;
21
24
  export let filename = undefined;
@@ -24,39 +27,49 @@ export let jobId = undefined;
24
27
  export let workspaceId = undefined;
25
28
  export let hideAsJson = false;
26
29
  export let noControls = false;
30
+ export let drawerOpen = false;
31
+ const IMG_MAX_SIZE = 10000000;
32
+ const TABLE_MAX_SIZE = 5000000;
33
+ const DISPLAY_MAX_SIZE = 100000;
27
34
  let resultKind;
28
35
  $: resultKind = inferResultKind(result);
29
36
  export let forceJson = false;
30
37
  let enableHtml = false;
31
38
  let s3FileDisplayRawMode = false;
32
- function isRectangularArray(obj) {
33
- if (!Array.isArray(obj) || obj.length == 0) {
34
- return false;
35
- }
36
- if (!Object.values(obj)
37
- .map(Array.isArray)
38
- .reduce((a, b) => a && b)) {
39
- return false;
40
- }
41
- let innerSize = obj[0].length;
42
- return Object.values(obj)
43
- .map((x) => x.length == innerSize)
44
- .reduce((a, b) => a && b);
39
+ function isTableRow(result) {
40
+ return Array.isArray(result) && result.every((x) => Array.isArray(x));
45
41
  }
46
- function asListOfList(obj) {
47
- return obj;
42
+ function isTableCol(result, keys) {
43
+ return (!Array.isArray(result) &&
44
+ keys.map((k) => Array.isArray(result[k])).reduce((a, b) => a && b, true));
48
45
  }
49
- function isObjectOfArray(result, keys) {
50
- return keys.map((k) => Array.isArray(result[k])).reduce((a, b) => a && b);
46
+ function isTableRowObject(json) {
47
+ // check array of objects (with possible a first row of headers)
48
+ return (Array.isArray(json) &&
49
+ json.length > 0 &&
50
+ (json.every((item) => item && typeof item === 'object' && Object.keys(item).length > 0 && !Array.isArray(item)) ||
51
+ (Array.isArray(json[0]) &&
52
+ json[0].every((item) => typeof item === 'string') &&
53
+ json
54
+ .slice(1)
55
+ .every((item) => item &&
56
+ typeof item === 'object' &&
57
+ Object.keys(item).length > 0 &&
58
+ !Array.isArray(item)))));
51
59
  }
52
60
  let largeObject = undefined;
61
+ function checkIfS3(result, keys) {
62
+ return keys.includes('s3') && typeof result.s3 === 'string';
63
+ }
53
64
  let is_render_all = false;
65
+ let download_as_csv = false;
54
66
  function inferResultKind(result) {
55
67
  if (result == 'WINDMILL_TOO_BIG') {
56
68
  largeObject = true;
57
69
  return 'json';
58
70
  }
59
71
  if (result !== undefined) {
72
+ download_as_csv = false;
60
73
  if (typeof result === 'string') {
61
74
  length = 0;
62
75
  largeObject = false;
@@ -68,32 +81,53 @@ function inferResultKind(result) {
68
81
  is_render_all =
69
82
  keys.length == 1 && keys.includes('render_all') && Array.isArray(result['render_all']);
70
83
  // Check if the result is an image
71
- if (['png', 'svg', 'jpeg', 'html'].includes(keys[0]) && keys.length == 1) {
84
+ if (['png', 'svg', 'jpeg', 'html', 'gif'].includes(keys[0]) && keys.length == 1) {
72
85
  // Check if the image is too large (10mb)
73
- largeObject = roughSizeOfObject(result) > 10000000;
86
+ largeObject = roughSizeOfObject(result) > IMG_MAX_SIZE;
74
87
  return keys[0];
75
88
  }
76
- let length = roughSizeOfObject(result);
89
+ let size = roughSizeOfObject(result);
77
90
  // Otherwise, check if the result is too large (10kb) for json
78
- largeObject = length > 50000;
79
- if (largeObject) {
91
+ if (size > TABLE_MAX_SIZE) {
92
+ largeObject = true;
93
+ if (Array.isArray(result) && isTableRowObject(result)) {
94
+ download_as_csv = true;
95
+ }
80
96
  return 'json';
81
97
  }
82
- if (keys.length != 0) {
83
- if (Array.isArray(result) && result.every((elt) => inferResultKind(elt) === 's3object')) {
84
- return 's3object-list';
98
+ else {
99
+ largeObject = size > DISPLAY_MAX_SIZE;
100
+ }
101
+ if (Array.isArray(result)) {
102
+ if (result.length === 0) {
103
+ return 'json';
85
104
  }
86
- else if (isRectangularArray(result)) {
87
- return 'table-col';
105
+ else if (result.every((elt) => typeof elt === 'object' && checkIfS3(elt, Object.keys(elt)))) {
106
+ largeObject = result.length > 100;
107
+ if (largeObject) {
108
+ return 'json';
109
+ }
110
+ return 's3object-list';
88
111
  }
89
- else if (keys.length == 1 && keys[0] == 'table-row') {
112
+ else if (isTableRow(result)) {
90
113
  return 'table-row';
91
114
  }
92
- else if ((keys.length == 1 && keys[0] == 'table-col') ||
93
- isObjectOfArray(result, keys)) {
94
- return 'table-col';
115
+ else if (isTableRowObject(result)) {
116
+ return 'table-row-object';
117
+ }
118
+ else {
119
+ return 'json';
95
120
  }
96
- else if (keys.length == 1 && keys[0] == 'html') {
121
+ }
122
+ else if (keys.length === 1 &&
123
+ ['table-row', 'table-row-object', 'table-col'].includes(keys[0])) {
124
+ return keys[0];
125
+ }
126
+ if (largeObject) {
127
+ return 'json';
128
+ }
129
+ if (keys.length != 0) {
130
+ if (keys.length == 1 && keys[0] == 'html') {
97
131
  return 'html';
98
132
  }
99
133
  else if (keys.length == 1 && keys[0] == 'map') {
@@ -129,12 +163,15 @@ function inferResultKind(result) {
129
163
  keys.includes('approvalPage')) {
130
164
  return 'approval';
131
165
  }
132
- else if (keys.length === 1 && keys.includes('s3')) {
166
+ else if (checkIfS3(result, keys)) {
133
167
  return 's3object';
134
168
  }
135
169
  else if (keys.length === 1 && (keys.includes('md') || keys.includes('markdown'))) {
136
170
  return 'markdown';
137
171
  }
172
+ else if (isTableCol(result, keys)) {
173
+ return 'table-col';
174
+ }
138
175
  }
139
176
  }
140
177
  catch (err) { }
@@ -158,14 +195,29 @@ function contentOrRootString(obj) {
158
195
  return obj.content;
159
196
  }
160
197
  }
161
- function isArrayWithObjects(json) {
162
- return (Array.isArray(json) &&
198
+ function handleArrayOfObjectsHeaders(json) {
199
+ // handle possible a first row of headers
200
+ if (Array.isArray(json) &&
163
201
  json.length > 0 &&
164
- json.every((item) => item && typeof item === 'object' && Object.keys(item).length > 0 && !Array.isArray(item)));
202
+ Array.isArray(json[0]) &&
203
+ json[0].every((item) => typeof item === 'string') &&
204
+ json
205
+ .slice(1)
206
+ .every((item) => item && typeof item === 'object' && Object.keys(item).length > 0 && !Array.isArray(item))) {
207
+ const headers = json[0];
208
+ const rows = json.slice(1);
209
+ const result = rows.map((row) => {
210
+ const obj = {};
211
+ for (const header of headers) {
212
+ obj[header] = row[header];
213
+ }
214
+ return obj;
215
+ });
216
+ return result;
217
+ }
218
+ return json;
165
219
  }
166
- $: isTableDisplay = isArrayWithObjects(result);
167
- let richRender = !forceJson;
168
- function transform(input) {
220
+ function objectOfArraysToObjects(input) {
169
221
  const maxLength = Math.max(...Object.values(input).map((arr) => arr.length));
170
222
  const result = [];
171
223
  for (let i = 0; i < maxLength; i++) {
@@ -182,14 +234,47 @@ function transform(input) {
182
234
  }
183
235
  return result;
184
236
  }
237
+ function arrayOfRowsToObjects(input) {
238
+ if (Array.isArray(input) && input.length > 0) {
239
+ // handle possible first row of headers
240
+ if (input.length > 1 &&
241
+ Array.isArray(input[0]) &&
242
+ input[0].every((item) => typeof item === 'string')) {
243
+ const headers = input[0];
244
+ const rows = input.slice(1);
245
+ return rows.map((row) => {
246
+ const obj = {};
247
+ for (let i = 0; i < headers.length; i++) {
248
+ obj[headers[i]] = row[i];
249
+ }
250
+ return obj;
251
+ });
252
+ }
253
+ else {
254
+ return input;
255
+ }
256
+ }
257
+ return [];
258
+ }
185
259
  let globalForceJson = false;
260
+ let seeS3PreviewFileFromList = '';
186
261
  </script>
187
262
 
188
263
  {#if is_render_all}
189
264
  <div class="flex flex-col w-full gap-6">
190
265
  {#if !noControls}
191
- <div class="mb-2 text-tertiary text-sm">
192
- as JSON&nbsp;<input class="windmillapp" type="checkbox" bind:checked={globalForceJson} />
266
+ <div class="text-tertiary text-sm">
267
+ <ToggleButtonGroup
268
+ class="h-6"
269
+ selected={globalForceJson ? 'json' : 'pretty'}
270
+ on:selected={(ev) => {
271
+ globalForceJson = ev.detail === 'json'
272
+ }}
273
+ >
274
+ <ToggleButton class="px-1.5" value="pretty" label="Pretty" icon={Highlighter} />
275
+
276
+ <ToggleButton class="px-1.5" value="json" label="JSON" icon={Braces} />
277
+ </ToggleButtonGroup>
193
278
  </div>
194
279
  {/if}
195
280
  {#each result['render_all'] as res}
@@ -213,306 +298,346 @@ let globalForceJson = false;
213
298
  : 'min-h-[200px]'}"
214
299
  >
215
300
  {#if result != undefined && length != undefined && largeObject != undefined}
216
- <div class="flex justify-between items-center w-full pb-1">
217
- <div class="text-tertiary text-sm flex items-center">
218
- {#if (resultKind && typeof result == 'object' && !['json', 's3object', 's3object-list', 'table-col', 'table-row'].includes(resultKind) && !hideAsJson) || isTableDisplay}
301
+ <div class="flex justify-between items-center w-full">
302
+ <div class="text-tertiary text-sm">
303
+ {#if !hideAsJson && !['json', 's3object'].includes(resultKind ?? '') && typeof result === 'object'}
219
304
  <ToggleButtonGroup
220
305
  class="h-6"
221
- selected={isTableDisplay
222
- ? richRender
223
- ? 'table'
224
- : 'json'
225
- : forceJson
226
- ? 'json'
227
- : 'pretty'}
306
+ selected={forceJson ? 'json' : resultKind?.startsWith('table-') ? 'table' : 'pretty'}
228
307
  on:selected={(ev) => {
229
- if (isTableDisplay) {
230
- richRender = ev.detail === 'table'
231
- }
232
308
  forceJson = ev.detail === 'json'
233
309
  }}
234
310
  >
235
- {#if resultKind && !['json', 's3object', 's3object-list', 'table-col', 'table-row'].includes(resultKind) && !hideAsJson}
236
- <ToggleButton class="px-1.5" value="pretty" label="Pretty" icon={Highlighter} />
237
- {/if}
238
- {#if isTableDisplay}
311
+ {#if ['table-col', 'table-row', 'table-row-object'].includes(resultKind ?? '')}
239
312
  <ToggleButton class="px-1.5" value="table" label="Table" icon={Table2} />
313
+ {:else}
314
+ <ToggleButton class="px-1.5" value="pretty" label="Pretty" icon={Highlighter} />
240
315
  {/if}
241
316
  <ToggleButton class="px-1.5" value="json" label="JSON" icon={Braces} />
242
317
  </ToggleButtonGroup>
243
318
  {/if}
244
319
  </div>
245
- <div class="text-tertiary text-xs flex gap-2 z-10 items-center">
320
+ <div class="text-secondary text-xs flex gap-2.5 z-10 items-center">
246
321
  <slot name="copilot-fix" />
247
322
  {#if !disableExpand && !noControls}
248
- <button on:click={() => copyToClipboard(toJsonStr(result))}
249
- ><ClipboardCopy size={16} /></button
323
+ <Popover
324
+ documentationLink="https://www.windmill.dev/docs/core_concepts/rich_display_rendering"
250
325
  >
251
- <button on:click={jsonViewer.openDrawer}><Expand size={16} /></button>
326
+ <svelte:fragment slot="text">
327
+ The result renderer in Windmill supports rich display rendering, allowing you to
328
+ customize the display format of your results.
329
+ </svelte:fragment>
330
+ <div class="-mt-1">
331
+ <InfoIcon size={14} />
332
+ </div>
333
+ </Popover>
334
+ <button on:click={() => copyToClipboard(toJsonStr(result))} class="-mt-1">
335
+ <ClipboardCopy size={14} />
336
+ </button>
337
+ <button on:click={jsonViewer.openDrawer} class="-mt-1">
338
+ <Expand size={14} />
339
+ </button>
252
340
  {/if}
253
341
  </div>
254
- </div>{#if !forceJson && resultKind == 'table-col'}
255
- {@const data = 'table-col' in result ? result['table-col'] : result}
256
- <AutoDataTable objects={transform(data)} />
257
- {:else if !forceJson && resultKind == 'table-row'}
258
- {@const data = 'table-row' in result ? result['table-row'] : result}
259
- <div class="grid grid-flow-col-dense border border-gray-200 dark:border-gray-600">
260
- <TableCustom>
261
- <tbody slot="body">
262
- {#each Array.isArray(asListOfList(data)) ? asListOfList(data) : [] as row}
263
- <tr>
264
- {#each row as v}
265
- <td class="!text-xs">{truncate(JSON.stringify(v), 200) ?? ''}</td>
266
- {/each}
267
- </tr>
268
- {/each}
269
- </tbody>
270
- </TableCustom>
271
- </div>
272
- {:else if !forceJson && resultKind == 'html'}
273
- <div class="h-full">
274
- {#if !requireHtmlApproval || enableHtml}
275
- {@html result.html}
276
- {:else}
277
- <div class="font-main text-sm">
278
- <div class="flex flex-col">
279
- <div class="bg-red-400 py-1 rounded-t text-white font-bold text-center">
280
- Warning
342
+ </div><div class="grow"
343
+ >{#if !forceJson && resultKind == 'table-col'}
344
+ {@const data = 'table-col' in result ? result['table-col'] : result}
345
+ <AutoDataTable objects={objectOfArraysToObjects(data)} />
346
+ {:else if !forceJson && resultKind == 'table-row'}
347
+ {@const data = 'table-row' in result ? result['table-row'] : result}
348
+ <AutoDataTable objects={arrayOfRowsToObjects(data)} />
349
+ {:else if !forceJson && resultKind == 'table-row-object'}
350
+ {@const data = 'table-row-object' in result ? result['table-row-object'] : result}
351
+ <AutoDataTable objects={handleArrayOfObjectsHeaders(data)} />
352
+ {:else if !forceJson && resultKind == 'html'}
353
+ <div class="h-full">
354
+ {#if !requireHtmlApproval || enableHtml}
355
+ {@html result.html}
356
+ {:else}
357
+ <div class="font-main text-sm">
358
+ <div class="flex flex-col">
359
+ <div class="bg-red-400 py-1 rounded-t text-white font-bold text-center">
360
+ Warning
361
+ </div>
362
+ <p
363
+ class="text-tertiary mb-2 text-left border-2 !border-t-0 rounded-b border-red-400 overflow-auto p-1"
364
+ >Rendering HTML can expose you to <a
365
+ href="https://owasp.org/www-community/attacks/xss/"
366
+ target="_blank"
367
+ rel="noreferrer"
368
+ class="hover:underline">XSS attacks</a
369
+ >. Only enable it if you trust the author of the script.
370
+ </p>
371
+ </div>
372
+ <div class="center-center">
373
+ <Button size="sm" color="dark" on:click={() => (enableHtml = true)}>
374
+ Enable HTML rendering
375
+ </Button>
281
376
  </div>
282
- <p
283
- class="text-tertiary mb-2 text-left border-2 !border-t-0 rounded-b border-red-400 overflow-auto p-1"
284
- >Rendering HTML can expose you to <a
285
- href="https://owasp.org/www-community/attacks/xss/"
286
- target="_blank"
287
- rel="noreferrer"
288
- class="hover:underline">XSS attacks</a
289
- >. Only enable it if you trust the author of the script.
290
- </p>
291
- </div>
292
- <div class="center-center">
293
- <Button size="sm" color="dark" on:click={() => (enableHtml = true)}>
294
- Enable HTML rendering
295
- </Button>
296
377
  </div>
297
- </div>
298
- {/if}
299
- </div>
300
- {:else if !forceJson && resultKind == 'map'}
301
- <div class="h-full">
302
- <MapResult
303
- lat={result.map.lat}
304
- lon={result.map.lon}
305
- zoom={result.map.zoom}
306
- markers={result.map.markers}
307
- />
308
- </div>
309
- {:else if !forceJson && resultKind == 'png'}
310
- <div class="h-full">
311
- <img
312
- alt="png rendered"
313
- class="w-auto h-full"
314
- src="data:image/png;base64,{contentOrRootString(result.png)}"
315
- />
316
- </div>
317
- {:else if !forceJson && resultKind == 'jpeg'}
318
- <div class="h-full">
319
- <img
320
- alt="jpeg rendered"
321
- class="w-auto h-full"
322
- src="data:image/jpeg;base64,{contentOrRootString(result.jpeg)}"
323
- />
324
- </div>
325
- {:else if !forceJson && resultKind == 'svg'}
326
- <div
327
- ><a download="windmill.svg" href="data:text/plain;base64,{btoa(result.svg)}">Download</a>
328
- </div>
329
- <div class="h-full overflow-auto">{@html result.svg} </div>
330
- {:else if !forceJson && resultKind == 'gif'}
331
- <div class="h-full">
332
- <img
333
- alt="gif rendered"
334
- class="w-auto h-full"
335
- src="data:image/gif;base64,{contentOrRootString(result.gif)}"
336
- />
337
- </div>
338
- {:else if !forceJson && resultKind == 'plain'}<div class="h-full text-2xs"
339
- ><pre>{typeof result == 'string' ? result : result?.['result']}</pre>{#if !noControls}
340
- <div class="flex">
341
- <Button
342
- on:click={() =>
343
- copyToClipboard(typeof result == 'string' ? result : result?.['result'])}
344
- color="light"
345
- size="xs"
346
- >
347
- <div class="flex gap-2 items-center">Copy <ClipboardCopy size={12} /> </div>
348
- </Button>
349
- </div>
350
- {/if}
351
- </div>
352
- {:else if !forceJson && resultKind == 'file'}
353
- <div>
354
- <a
355
- download={result.filename ?? result.file?.filename ?? 'windmill.file'}
356
- href="data:application/octet-stream;base64,{contentOrRootString(result.file)}"
357
- >Download</a
358
- >
359
- </div>
360
- {:else if !forceJson && resultKind == 'error' && result?.error}
361
- <div class="flex flex-col items-start">
362
- <span class="text-red-500 font-semibold text-sm whitespace-pre-wrap"
363
- >{#if result.error.name || result.error.message}{result.error.name}: {result.error
364
- .message}{:else}{JSON.stringify(result.error, null, 4)}{/if}</span
365
- >
366
- <pre class="text-sm whitespace-pre-wrap text-primary">{result.error.stack ?? ''}</pre>
367
- <slot />
368
- </div>
369
- {:else if !forceJson && resultKind == 'approval'}<div class="flex flex-col gap-3 mt-2 mx-4">
370
- <Button
371
- color="green"
372
- variant="border"
373
- on:click={() =>
374
- fetch(result['resume'], {
375
- method: 'POST',
376
- body: JSON.stringify({}),
377
- headers: { 'Content-Type': 'application/json' }
378
- })}
379
- >
380
- Resume</Button
381
- >
382
- <Button color="red" variant="border" on:click={() => fetch(result['cancel'])}
383
- >Cancel</Button
384
- >
385
- <div class="center-center"
386
- ><a rel="noreferrer" target="_blank" href={result['approvalPage']}>Approval Page</a
387
- ></div
388
- >
389
- </div>
390
- {:else if !forceJson && resultKind == 's3object'}
391
- <div
392
- class="h-full w-full {typeof result?.s3 == 'string' && result?.s3?.endsWith('.parquet')
393
- ? 'h-min-[600px]'
394
- : ''}"
395
- >
396
- <div class="flex flex-col gap-2">
397
- <Toggle
398
- class="flex"
399
- bind:checked={s3FileDisplayRawMode}
400
- size="xs"
401
- options={{ right: 'Raw S3 object input' }}
378
+ {/if}
379
+ </div>
380
+ {:else if !forceJson && resultKind == 'map'}
381
+ <div class="h-full">
382
+ <MapResult
383
+ lat={result.map.lat}
384
+ lon={result.map.lon}
385
+ zoom={result.map.zoom}
386
+ markers={result.map.markers}
402
387
  />
403
- {#if s3FileDisplayRawMode}
404
- <Highlight class="" language={json} code={toJsonStr(result).replace(/\\n/g, '\n')} />
405
- <button
406
- class="text-secondary underline text-2xs whitespace-nowrap"
407
- on:click={() => {
408
- s3FileViewer?.open?.(result)
409
- }}
410
- ><span class="flex items-center gap-1"
411
- ><PanelRightOpen size={12} />open preview</span
412
- >
413
- </button>
414
- {:else}
415
- <FileDownload s3object={result} />
416
- <button
417
- class="text-secondary underline text-2xs whitespace-nowrap"
418
- on:click={() => {
419
- s3FileViewer?.open?.(result)
420
- }}
421
- ><span class="flex items-center gap-1"
422
- ><PanelRightOpen size={12} />open preview</span
388
+ </div>
389
+ {:else if !forceJson && resultKind == 'png'}
390
+ <div class="h-full">
391
+ <img
392
+ alt="png rendered"
393
+ class="w-auto h-full"
394
+ src="data:image/png;base64,{contentOrRootString(result.png)}"
395
+ />
396
+ </div>
397
+ {:else if !forceJson && resultKind == 'jpeg'}
398
+ <div class="h-full">
399
+ <img
400
+ alt="jpeg rendered"
401
+ class="w-auto h-full"
402
+ src="data:image/jpeg;base64,{contentOrRootString(result.jpeg)}"
403
+ />
404
+ </div>
405
+ {:else if !forceJson && resultKind == 'svg'}
406
+ <div
407
+ ><a download="windmill.svg" href="data:text/plain;base64,{btoa(result.svg)}">Download</a
408
+ >
409
+ </div>
410
+ <div class="h-full overflow-auto">{@html result.svg} </div>
411
+ {:else if !forceJson && resultKind == 'gif'}
412
+ <div class="h-full">
413
+ <img
414
+ alt="gif rendered"
415
+ class="w-auto h-full"
416
+ src="data:image/gif;base64,{contentOrRootString(result.gif)}"
417
+ />
418
+ </div>
419
+ {:else if !forceJson && resultKind == 'plain'}<div class="h-full text-2xs"
420
+ ><pre>{typeof result == 'string' ? result : result?.['result']}</pre>{#if !noControls}
421
+ <div class="flex">
422
+ <Button
423
+ on:click={() =>
424
+ copyToClipboard(typeof result == 'string' ? result : result?.['result'])}
425
+ color="light"
426
+ size="xs"
423
427
  >
424
- </button>
428
+ <div class="flex gap-2 items-center">Copy <ClipboardCopy size={12} /> </div>
429
+ </Button>
430
+ </div>
425
431
  {/if}
426
432
  </div>
427
- {#if typeof result?.s3 == 'string' && result?.s3?.endsWith('.parquet')}
428
- <ParqetTableRenderer s3resource={result?.s3} />
429
- {/if}
430
- </div>
431
- {:else if !forceJson && resultKind == 's3object-list'}
432
- <div class="h-full w-full">
433
- <div class="flex flex-col gap-2">
434
- <Toggle
435
- class="flex"
436
- bind:checked={s3FileDisplayRawMode}
437
- size="xs"
438
- options={{ right: 'Raw S3 object input' }}
439
- />
440
- {#each result as s3object}
433
+ {:else if !forceJson && resultKind == 'file'}
434
+ <div>
435
+ <a
436
+ download={result.filename ?? result.file?.filename ?? 'windmill.file'}
437
+ href="data:application/octet-stream;base64,{contentOrRootString(result.file)}"
438
+ >Download</a
439
+ >
440
+ </div>
441
+ {:else if !forceJson && resultKind == 'error' && result?.error}
442
+ <div class="flex flex-col items-start">
443
+ <span class="text-red-500 font-semibold text-sm whitespace-pre-wrap"
444
+ >{#if result.error.name || result.error.message}{result.error.name}: {result.error
445
+ .message}{:else}{JSON.stringify(result.error, null, 4)}{/if}</span
446
+ >
447
+ <pre class="text-sm whitespace-pre-wrap text-primary">{result.error.stack ?? ''}</pre>
448
+ <slot />
449
+ </div>
450
+ {:else if !forceJson && resultKind == 'approval'}<div class="flex flex-col gap-3 mt-2 mx-4">
451
+ <Button
452
+ color="green"
453
+ variant="border"
454
+ on:click={() =>
455
+ fetch(result['resume'], {
456
+ method: 'POST',
457
+ body: JSON.stringify({}),
458
+ headers: { 'Content-Type': 'application/json' }
459
+ })}
460
+ >
461
+ Resume</Button
462
+ >
463
+ <Button color="red" variant="border" on:click={() => fetch(result['cancel'])}
464
+ >Cancel</Button
465
+ >
466
+ <div class="center-center"
467
+ ><a rel="noreferrer" target="_blank" href={result['approvalPage']}>Approval Page</a
468
+ ></div
469
+ >
470
+ </div>
471
+ {:else if !forceJson && resultKind == 's3object'}
472
+ <div
473
+ class="h-full w-full {typeof result?.s3 == 'string' && result?.s3?.endsWith('.parquet')
474
+ ? 'h-min-[600px]'
475
+ : ''}"
476
+ >
477
+ <div class="flex flex-col gap-2">
478
+ <Toggle
479
+ class="flex"
480
+ bind:checked={s3FileDisplayRawMode}
481
+ size="xs"
482
+ options={{ right: 'Raw S3 object' }}
483
+ />
484
+
441
485
  {#if s3FileDisplayRawMode}
442
486
  <Highlight
443
487
  class=""
444
488
  language={json}
445
- code={toJsonStr(s3object).replace(/\\n/g, '\n')}
489
+ code={toJsonStr(result).replace(/\\n/g, '\n')}
446
490
  />
447
491
  <button
448
- class="text-secondary text-2xs whitespace-nowrap"
492
+ class="text-secondary underline text-2xs whitespace-nowrap"
449
493
  on:click={() => {
450
- s3FileViewer?.open?.(s3object)
494
+ s3FileViewer?.open?.(result)
451
495
  }}
452
496
  ><span class="flex items-center gap-1"
453
- ><PanelRightOpen size={12} />open preview</span
497
+ ><PanelRightOpen size={12} />object store explorer<Tooltip
498
+ >Require admin privilege or "S3 resource details and content can be accessed
499
+ by all users of this workspace" of S3 Storage to be set in the workspace
500
+ settings</Tooltip
501
+ ></span
502
+ >
503
+ </button>
504
+ {:else if !result?.disable_download}
505
+ <FileDownload s3object={result} />
506
+ <button
507
+ class="text-secondary underline text-2xs whitespace-nowrap"
508
+ on:click={() => {
509
+ s3FileViewer?.open?.(result)
510
+ }}
511
+ ><span class="flex items-center gap-1"
512
+ ><PanelRightOpen size={12} />object store explorer<Tooltip
513
+ >Require admin privilege or "S3 resource details and content can be accessed
514
+ by all users of this workspace" of S3 Storage to be set in the workspace
515
+ settings</Tooltip
516
+ ></span
454
517
  >
455
518
  </button>
456
- {:else}
457
- <FileDownload {s3object} />
458
519
  {/if}
459
- {/each}
520
+ </div>
521
+ {#if typeof result?.s3 == 'string' && (result?.s3?.endsWith('.parquet') || result?.s3?.endsWith('.csv'))}
522
+ {#key result.s3}
523
+ <ParqetTableRenderer
524
+ disable_download={result?.disable_download}
525
+ {workspaceId}
526
+ s3resource={result?.s3}
527
+ storage={result?.storage}
528
+ />
529
+ {/key}
530
+ {/if}
460
531
  </div>
461
- </div>
462
- {:else if !forceJson && resultKind == 'markdown'}
463
- <div class="prose-xs dark:prose-invert">
464
- <Markdown md={result?.md ?? result?.markdown} />
465
- </div>
466
- {:else if !forceJson && isTableDisplay && richRender}
467
- <AutoDataTable objects={result} />
468
- {:else if largeObject}
469
- {#if result && typeof result == 'object' && 'file' in result}
470
- <div
471
- ><a
472
- download={result.filename ?? result.file?.filename ?? 'windmill.file'}
473
- href="data:application/octet-stream;base64,{contentOrRootString(result.file)}"
474
- >Download</a
475
- >
532
+ {:else if !forceJson && resultKind == 's3object-list'}
533
+ <div class="h-full w-full">
534
+ <div class="flex flex-col gap-2">
535
+ <Toggle
536
+ class="flex mt-1"
537
+ bind:checked={s3FileDisplayRawMode}
538
+ size="xs"
539
+ options={{ right: 'Raw S3 object' }}
540
+ />
541
+ {#each result as s3object}
542
+ {#if s3FileDisplayRawMode}
543
+ <Highlight
544
+ class=""
545
+ language={json}
546
+ code={toJsonStr(s3object).replace(/\\n/g, '\n')}
547
+ />
548
+ <button
549
+ class="text-secondary text-2xs whitespace-nowrap"
550
+ on:click={() => {
551
+ s3FileViewer?.open?.(s3object)
552
+ }}
553
+ ><span class="flex items-center gap-1"
554
+ ><PanelRightOpen size={12} />open preview</span
555
+ >
556
+ </button>
557
+ {:else if !s3object?.disable_download}
558
+ <FileDownload {s3object} />
559
+ {:else}
560
+ <div class="flex text-secondary pt-2">{s3object?.s3} (download disabled)</div>
561
+ {/if}
562
+ {#if s3object?.s3?.endsWith('.parquet') || s3object?.s3?.endsWith('.csv')}
563
+ {#if seeS3PreviewFileFromList == s3object?.s3}
564
+ <ParqetTableRenderer
565
+ disable_download={s3object?.disable_download}
566
+ {workspaceId}
567
+ s3resource={s3object?.s3}
568
+ storage={s3object?.storage}
569
+ />{:else}
570
+ <button
571
+ class="text-secondary whitespace-nowrap flex gap-2 items-center"
572
+ on:click={() => {
573
+ seeS3PreviewFileFromList = s3object?.s3
574
+ }}
575
+ >open table preview <ArrowDownFromLine />
576
+ </button>
577
+ {/if}
578
+ {/if}
579
+ {/each}
580
+ </div>
476
581
  </div>
477
- {:else}
478
- <div class="text-sm text-tertiary"
479
- ><a
480
- download="{filename ?? 'result'}.json"
481
- href={workspaceId && jobId
482
- ? `/api/w/${workspaceId}/jobs_u/completed/get_result/${jobId}`
483
- : `data:text/json;charset=utf-8,${encodeURIComponent(toJsonStr(result))}`}
484
- >
485
- Download {filename ? '' : 'as JSON'}
486
- </a>
582
+ {:else if !forceJson && resultKind == 'markdown'}
583
+ <div class="prose-xs dark:prose-invert !list-disc !list-outside">
584
+ <Markdown md={result?.md ?? result?.markdown} />
487
585
  </div>
586
+ {:else if largeObject}
587
+ {#if result && typeof result == 'object' && 'file' in result}
588
+ <div
589
+ ><a
590
+ download={result.filename ?? result.file?.filename ?? 'windmill.file'}
591
+ href="data:application/octet-stream;base64,{contentOrRootString(result.file)}"
592
+ >Download</a
593
+ >
594
+ </div>
595
+ {:else}
596
+ <div class="text-sm text-tertiary"
597
+ ><a
598
+ download="{filename ?? 'result'}.json"
599
+ href={workspaceId && jobId
600
+ ? `/api/w/${workspaceId}/jobs_u/completed/get_result/${jobId}`
601
+ : `data:text/json;charset=utf-8,${encodeURIComponent(toJsonStr(result))}`}
602
+ >
603
+ Download {filename ? '' : 'as JSON'}
604
+ </a>
605
+ {#if download_as_csv}
606
+ <DownloadCsv
607
+ getContent={() => convertJsonToCsv(result)}
608
+ customText="Download as CSV"
609
+ />
610
+ {/if}
611
+ </div>
488
612
 
489
- <div class="mt-1 mb-2">
490
- <Alert
491
- size="xs"
492
- title="Large result detected"
493
- type="warning"
494
- tooltip="We recommend using persistent object storage for large result. See docs for setting up an object storage service integration using s3 or any other s3 compatible services."
495
- documentationLink="https://www.windmill.dev/docs/core_concepts/persistent_storage#large-data-files-s3-r2-minio-azure-blob"
496
- />
497
- </div>
498
- {#if result && result != 'WINDMILL_TOO_BIG'}
499
- <ObjectViewer json={result} />
613
+ <div class="mt-1 mb-2">
614
+ <Alert
615
+ size="xs"
616
+ title="Large result detected"
617
+ type="warning"
618
+ tooltip="We recommend using persistent object storage for large result. See docs for setting up an object storage service integration using s3 or any other s3 compatible services."
619
+ documentationLink="https://www.windmill.dev/docs/core_concepts/persistent_storage#object-storage-for-large-data-s3-r2-minio-azure-blob"
620
+ />
621
+ </div>
622
+ {#if result && result != 'WINDMILL_TOO_BIG'}
623
+ <ObjectViewer json={result} />
624
+ {/if}
500
625
  {/if}
626
+ {:else if typeof result == 'string' && result.length > 0}
627
+ <pre class="text-sm">{result}</pre>{#if !noControls}<div class="flex">
628
+ <Button on:click={() => copyToClipboard(result)} color="light" size="xs">
629
+ <div class="flex gap-2 items-center">Copy <ClipboardCopy size={12} /> </div>
630
+ </Button>
631
+ </div>
632
+ {/if}
633
+ {:else}
634
+ <Highlight
635
+ class={forceJson ? '' : 'h-full w-full'}
636
+ language={json}
637
+ code={toJsonStr(result).replace(/\\n/g, '\n')}
638
+ />
501
639
  {/if}
502
- {:else if typeof result == 'string' && result.length > 0}
503
- <pre class="text-sm">{result}</pre>{#if !noControls}<div class="flex">
504
- <Button on:click={() => copyToClipboard(result)} color="light" size="xs">
505
- <div class="flex gap-2 items-center">Copy <ClipboardCopy size={12} /> </div>
506
- </Button>
507
- </div>
508
- {/if}
509
- {:else}
510
- <Highlight
511
- class={forceJson ? '' : 'h-full w-full'}
512
- language={json}
513
- code={toJsonStr(result).replace(/\\n/g, '\n')}
514
- />
515
- {/if}
640
+ </div>
516
641
  {:else if typeof result == 'string' && resultKind == 'plain'}
517
642
  <div class="h-full text-xs">
518
643
  <pre>{result}</pre>
@@ -530,46 +655,44 @@ let globalForceJson = false;
530
655
  </div>
531
656
 
532
657
  {#if !disableExpand && !noControls}
533
- <Portal>
534
- <Drawer bind:this={jsonViewer} size="900px">
535
- <DrawerContent title="Expanded Result" on:close={jsonViewer.closeDrawer}>
536
- <svelte:fragment slot="actions">
537
- <Button
538
- download="{filename ?? 'result'}.json"
539
- href={workspaceId && jobId
540
- ? `/api/w/${workspaceId}/jobs_u/completed/get_result/${jobId}`
541
- : `data:text/json;charset=utf-8,${encodeURIComponent(toJsonStr(result))}`}
542
- startIcon={{ icon: Download }}
543
- color="light"
544
- size="xs"
545
- >
546
- Download
547
- </Button>
548
- <Button
549
- on:click={() => copyToClipboard(toJsonStr(result))}
550
- color="light"
551
- size="xs"
552
- startIcon={{
553
- icon: ClipboardCopy
554
- }}
555
- >
556
- Copy to clipboard
557
- </Button>
558
- </svelte:fragment>
559
- <svelte:self
560
- {noControls}
561
- {result}
562
- {requireHtmlApproval}
563
- {filename}
564
- {jobId}
565
- {workspaceId}
566
- {hideAsJson}
567
- {forceJson}
568
- disableExpand={true}
569
- />
570
- </DrawerContent>
571
- </Drawer>
572
- </Portal>
658
+ <Drawer bind:this={jsonViewer} bind:open={drawerOpen} size="900px">
659
+ <DrawerContent title="Expanded Result" on:close={jsonViewer.closeDrawer}>
660
+ <svelte:fragment slot="actions">
661
+ <Button
662
+ download="{filename ?? 'result'}.json"
663
+ href={workspaceId && jobId
664
+ ? `/api/w/${workspaceId}/jobs_u/completed/get_result/${jobId}`
665
+ : `data:text/json;charset=utf-8,${encodeURIComponent(toJsonStr(result))}`}
666
+ startIcon={{ icon: Download }}
667
+ color="light"
668
+ size="xs"
669
+ >
670
+ Download
671
+ </Button>
672
+ <Button
673
+ on:click={() => copyToClipboard(toJsonStr(result))}
674
+ color="light"
675
+ size="xs"
676
+ startIcon={{
677
+ icon: ClipboardCopy
678
+ }}
679
+ >
680
+ Copy to clipboard
681
+ </Button>
682
+ </svelte:fragment>
683
+ <svelte:self
684
+ {noControls}
685
+ {result}
686
+ {requireHtmlApproval}
687
+ {filename}
688
+ {jobId}
689
+ {workspaceId}
690
+ {hideAsJson}
691
+ {forceJson}
692
+ disableExpand={true}
693
+ />
694
+ </DrawerContent>
695
+ </Drawer>
573
696
 
574
697
  <Portal>
575
698
  <S3FilePicker bind:this={s3FileViewer} readOnlyMode={true} />