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
@@ -11,7 +11,8 @@ export let componentContainerHeight;
11
11
  export let customCss = undefined;
12
12
  export let render;
13
13
  export let conditions;
14
- const { app, focusedGrid, selectedComponent, worldStore, connectingInput, componentControl } = getContext('AppViewerContext');
14
+ export let onTabChange = undefined;
15
+ const { app, focusedGrid, selectedComponent, worldStore, connectingInput, componentControl, runnableComponents } = getContext('AppViewerContext');
15
16
  const outputs = initOutput($worldStore, id, {
16
17
  conditions: [],
17
18
  selectedTabIndex: 0
@@ -38,6 +39,7 @@ function setSelectedIndex(index) {
38
39
  };
39
40
  selectedConditionIndex = index;
40
41
  outputs.selectedTabIndex.set(index);
42
+ onTabChange?.forEach((id) => $runnableComponents?.[id]?.cb?.forEach((cb) => cb?.()));
41
43
  }
42
44
  $: resolvedConditions && handleResolvedConditions();
43
45
  $componentControl[id] = {
@@ -7,6 +7,7 @@ declare const __propDef: {
7
7
  customCss?: ComponentCustomCSS<'conditionalwrapper'> | undefined;
8
8
  render: boolean;
9
9
  conditions: RichConfiguration[];
10
+ onTabChange?: string[] | undefined;
10
11
  };
11
12
  events: {
12
13
  [evt: string]: CustomEvent<any>;
@@ -18,7 +18,9 @@ export let render;
18
18
  export let recomputeIds = undefined;
19
19
  export let extraQueryParams = {};
20
20
  export let componentInput;
21
- const { app, worldStore, focusedGrid, selectedComponent, componentControl, connectingInput, mode } = getContext('AppViewerContext');
21
+ export let onNext = undefined;
22
+ export let onPrevious = undefined;
23
+ const { app, worldStore, focusedGrid, selectedComponent, componentControl, connectingInput, mode, runnableComponents } = getContext('AppViewerContext');
22
24
  let selected = tabs[0];
23
25
  let tabHeight = 0;
24
26
  let footerHeight = 0;
@@ -179,6 +181,7 @@ let directionClicked = undefined;
179
181
  on:click={(e) => {
180
182
  e.preventDefault()
181
183
  directionClicked = 'left'
184
+ onPrevious?.forEach((id) => $runnableComponents?.[id]?.cb?.forEach((cb) => cb?.()))
182
185
  runStep(selectedIndex - 1)
183
186
  }}
184
187
  >
@@ -200,6 +203,7 @@ let directionClicked = undefined;
200
203
  on:click={(e) => {
201
204
  e.preventDefault()
202
205
  directionClicked = 'right'
206
+ onNext?.forEach((id) => $runnableComponents?.[id]?.cb?.forEach((cb) => cb?.()))
203
207
  runStep(selectedIndex + 1)
204
208
  }}
205
209
  >
@@ -11,6 +11,8 @@ declare const __propDef: {
11
11
  recomputeIds?: string[] | undefined;
12
12
  extraQueryParams?: Record<string, any> | undefined;
13
13
  componentInput: AppInput | undefined;
14
+ onNext?: string[] | undefined;
15
+ onPrevious?: string[] | undefined;
14
16
  };
15
17
  events: {
16
18
  [evt: string]: CustomEvent<any>;
@@ -15,8 +15,9 @@ export let tabs;
15
15
  export let customCss = undefined;
16
16
  export let render;
17
17
  export let disabledTabs;
18
+ export let onTabChange = undefined;
18
19
  let resolvedConfig = initConfig(components['tabscomponent'].initialData.configuration, configuration);
19
- const { app, worldStore, focusedGrid, selectedComponent, mode, componentControl, connectingInput } = getContext('AppViewerContext');
20
+ const { app, worldStore, focusedGrid, selectedComponent, mode, componentControl, connectingInput, runnableComponents } = getContext('AppViewerContext');
20
21
  let selected = tabs[0];
21
22
  let tabHeight = 0;
22
23
  let outputs = initOutput($worldStore, id, {
@@ -25,6 +26,7 @@ let outputs = initOutput($worldStore, id, {
25
26
  function handleTabSelection() {
26
27
  selectedIndex = tabs?.indexOf(selected);
27
28
  outputs?.selectedTabIndex.set(selectedIndex);
29
+ onTabChange?.forEach((id) => $runnableComponents?.[id]?.cb?.forEach((cb) => cb?.()));
28
30
  if ($focusedGrid?.parentComponentId != id || $focusedGrid?.subGridIndex != selectedIndex) {
29
31
  $focusedGrid = {
30
32
  parentComponentId: id,
@@ -9,6 +9,7 @@ declare const __propDef: {
9
9
  customCss?: ComponentCustomCSS<'tabscomponent'> | undefined;
10
10
  render: boolean;
11
11
  disabledTabs: RichConfiguration[];
12
+ onTabChange?: string[] | undefined;
12
13
  };
13
14
  events: {
14
15
  pointerdown: PointerEvent;
@@ -35,7 +35,6 @@ import ButtonDropdown from '../../common/button/ButtonDropdown.svelte';
35
35
  import { MenuItem } from '@rgossiaux/svelte-headlessui';
36
36
  import AppEditorTutorial from './AppEditorTutorial.svelte';
37
37
  import AppTimeline from './AppTimeline.svelte';
38
- import { cloneDeep } from 'lodash';
39
38
  import AppReportsDrawer from './AppReportsDrawer.svelte';
40
39
  import HighlightCode from '../../HighlightCode.svelte';
41
40
  import { getPrimaryKeys } from '../components/display/dbtable/utils';
@@ -229,7 +228,7 @@ async function createApp(path) {
229
228
  });
230
229
  savedApp = {
231
230
  summary: $summary,
232
- value: cloneDeep($app),
231
+ value: structuredClone($app),
233
232
  path: path,
234
233
  policy: policy
235
234
  };
@@ -262,7 +261,7 @@ async function updateApp(npath) {
262
261
  });
263
262
  savedApp = {
264
263
  summary: $summary,
265
- value: cloneDeep($app),
264
+ value: structuredClone($app),
266
265
  path: npath,
267
266
  policy
268
267
  };
@@ -339,13 +338,13 @@ async function saveInitialDraft() {
339
338
  });
340
339
  savedApp = {
341
340
  summary: $summary,
342
- value: cloneDeep($app),
341
+ value: structuredClone($app),
343
342
  path: newPath,
344
343
  policy,
345
344
  draft_only: true,
346
345
  draft: {
347
346
  summary: $summary,
348
- value: cloneDeep($app),
347
+ value: structuredClone($app),
349
348
  path: newPath,
350
349
  policy
351
350
  }
@@ -422,14 +421,14 @@ async function saveDraft(forceSave = false) {
422
421
  ...(savedApp?.draft_only
423
422
  ? {
424
423
  summary: $summary,
425
- value: cloneDeep($app),
424
+ value: structuredClone($app),
426
425
  path: savedApp.draft_only ? newPath || path : path,
427
426
  policy
428
427
  }
429
428
  : savedApp),
430
429
  draft: {
431
430
  summary: $summary,
432
- value: cloneDeep($app),
431
+ value: structuredClone($app),
433
432
  path: newPath || path,
434
433
  policy
435
434
  }
@@ -5,8 +5,8 @@ import PanelSection from './settingsPanel/common/PanelSection.svelte';
5
5
  import ComponentPanel from './settingsPanel/ComponentPanel.svelte';
6
6
  import InputsSpecsEditor from './settingsPanel/InputsSpecsEditor.svelte';
7
7
  import BackgroundScriptSettings from './settingsPanel/script/BackgroundScriptSettings.svelte';
8
- import Recompute from './settingsPanel/Recompute.svelte';
9
- const { selectedComponent, app, stateId } = getContext('AppViewerContext');
8
+ import EventHandlerItem from './settingsPanel/EventHandlerItem.svelte';
9
+ const { selectedComponent, app, stateId, runnableComponents } = getContext('AppViewerContext');
10
10
  let firstComponent = $selectedComponent?.[0];
11
11
  $: $selectedComponent?.[0] != firstComponent && (firstComponent = $selectedComponent?.[0]);
12
12
  $: hiddenInlineScript = $app?.hiddenInlineScripts
@@ -142,7 +142,17 @@ const dispatch = createEventDispatcher();
142
142
  </PanelSection>
143
143
  </div>
144
144
  {/if}
145
- <Recompute bind:recomputeIds={hiddenInlineScript.script.recomputeIds} ownId={id} />
145
+ <PanelSection
146
+ title={`Event handlers`}
147
+ tooltip="Event handlers are used to trigger actions on other components when a specific event occurs. For example, you can trigger a recompute on a component when a script has successfully run."
148
+ >
149
+ <EventHandlerItem
150
+ title="on success"
151
+ tooltip="This event is triggered when the script runs successfully."
152
+ items={Object.keys($runnableComponents).filter((_id) => _id !== id)}
153
+ bind:value={hiddenInlineScript.script.recomputeIds}
154
+ />
155
+ </PanelSection>
146
156
  <div class="grow shrink" />
147
157
  {/key}
148
158
  {/if}
@@ -180,37 +180,23 @@ function mouseOut() {
180
180
  {render}
181
181
  />
182
182
  {:else if component.type === 'logcomponent'}
183
- <AppLogsComponent
184
- id={component.id}
185
- customCss={component.customCss}
186
- bind:initializing
187
- componentInput={component.componentInput}
188
- {render}
189
- />
183
+ <AppLogsComponent />
190
184
  {:else if component.type === 'jobidlogcomponent'}
191
185
  <AppJobIdLogComponent
192
186
  id={component.id}
193
187
  customCss={component.customCss}
194
188
  bind:initializing
195
189
  configuration={component.configuration}
196
- componentInput={component.componentInput}
197
190
  {render}
198
191
  />
199
192
  {:else if component.type === 'flowstatuscomponent'}
200
- <AppFlowStatusComponent
201
- id={component.id}
202
- customCss={component.customCss}
203
- bind:initializing
204
- componentInput={component.componentInput}
205
- {render}
206
- />
193
+ <AppFlowStatusComponent />
207
194
  {:else if component.type === 'jobidflowstatuscomponent'}
208
195
  <AppJobIdFlowStatus
209
196
  id={component.id}
210
197
  customCss={component.customCss}
211
198
  bind:initializing
212
199
  configuration={component.configuration}
213
- componentInput={component.componentInput}
214
200
  {render}
215
201
  />
216
202
  {:else if component.type === 'barchartcomponent'}
@@ -609,6 +595,7 @@ function mouseOut() {
609
595
  id={component.id}
610
596
  tabs={component.tabs}
611
597
  disabledTabs={component.disabledTabs}
598
+ onTabChange={component.onTabChange}
612
599
  customCss={component.customCss}
613
600
  {componentContainerHeight}
614
601
  {render}
@@ -620,6 +607,8 @@ function mouseOut() {
620
607
  customCss={component.customCss}
621
608
  {componentContainerHeight}
622
609
  componentInput={component.componentInput}
610
+ onNext={component.onNext}
611
+ onPrevious={component.onPrevious}
623
612
  {render}
624
613
  />
625
614
  {:else if component.type === 'conditionalwrapper' && component.conditions}
@@ -627,6 +616,7 @@ function mouseOut() {
627
616
  id={component.id}
628
617
  conditions={component.conditions}
629
618
  customCss={component.customCss}
619
+ onTabChange={component.onTabChange}
630
620
  {componentContainerHeight}
631
621
  {render}
632
622
  />
@@ -678,6 +668,7 @@ function mouseOut() {
678
668
  configuration={component.configuration}
679
669
  id={component.id}
680
670
  customCss={component.customCss}
671
+ onFileChange={component.onFileChange}
681
672
  {render}
682
673
  />
683
674
  {:else if component.type === 's3fileinputcomponent'}
@@ -685,6 +676,7 @@ function mouseOut() {
685
676
  configuration={component.configuration}
686
677
  id={component.id}
687
678
  customCss={component.customCss}
679
+ onFileChange={component.onFileChange}
688
680
  {render}
689
681
  />
690
682
  {:else if component.type === 'imagecomponent'}
@@ -104,10 +104,13 @@ export type RadioComponent = BaseComponent<'radiocomponent'>;
104
104
  export type IconComponent = BaseComponent<'iconcomponent'>;
105
105
  export type HorizontalDividerComponent = BaseComponent<'horizontaldividercomponent'>;
106
106
  export type VerticalDividerComponent = BaseComponent<'verticaldividercomponent'>;
107
- export type FileInputComponent = BaseComponent<'fileinputcomponent'>;
107
+ export type FileInputComponent = BaseComponent<'fileinputcomponent'> & {
108
+ onFileChange?: string[];
109
+ };
108
110
  export type TabsComponent = BaseComponent<'tabscomponent'> & {
109
111
  tabs: string[];
110
112
  disabledTabs: RichConfiguration[];
113
+ onTabChange?: string[];
111
114
  };
112
115
  export type ListComponent = BaseComponent<'listcomponent'>;
113
116
  export type ContainerComponent = BaseComponent<'containercomponent'> & {
@@ -131,9 +134,12 @@ export type ModalComponent = BaseComponent<'modalcomponent'> & {
131
134
  };
132
135
  export type StepperComponent = BaseComponent<'steppercomponent'> & {
133
136
  tabs: string[];
137
+ onNext?: string[];
138
+ onPrevious?: string[];
134
139
  };
135
140
  export type ConditionalWrapperComponent = BaseComponent<'conditionalwrapper'> & {
136
141
  conditions: RichConfiguration[];
142
+ onTabChange?: string[];
137
143
  };
138
144
  export type Schemaformcomponent = BaseComponent<'schemaformcomponent'>;
139
145
  export type SelectTabComponent = BaseComponent<'selecttabcomponent'>;
@@ -147,7 +153,9 @@ export type DBExplorerComponent = BaseComponent<'dbexplorercomponent'> & {
147
153
  columns: RichConfiguration;
148
154
  actions: TableAction[];
149
155
  };
150
- export type S3FileInputComponent = BaseComponent<'s3fileinputcomponent'>;
156
+ export type S3FileInputComponent = BaseComponent<'s3fileinputcomponent'> & {
157
+ onFileChange?: string[];
158
+ };
151
159
  export type DecisionTreeNode = {
152
160
  id: string;
153
161
  label: string;
@@ -3903,6 +3911,7 @@ export declare const components: {
3903
3911
  readonly type: "static";
3904
3912
  readonly fieldType: "text";
3905
3913
  readonly value: "";
3914
+ readonly allowTypeChange: false;
3906
3915
  };
3907
3916
  readonly flex: {
3908
3917
  readonly type: "static";
@@ -3175,7 +3175,8 @@ See date-fns format for more information. By default, it is 'dd.MM.yyyy HH:mm'
3175
3175
  whereClause: {
3176
3176
  type: 'static',
3177
3177
  fieldType: 'text',
3178
- value: ''
3178
+ value: '',
3179
+ allowTypeChange: false
3179
3180
  },
3180
3181
  flex: {
3181
3182
  type: 'static',
@@ -203,7 +203,7 @@ $: refresh(runnable);
203
203
  class="!text-xs !rounded-xs"
204
204
  />
205
205
  </div>
206
- <div class="w-full">
206
+ <div class="w-full grow overflow-y-auto">
207
207
  {#key $stateId}
208
208
  {#if notFound}
209
209
  <div class="text-red-400"
@@ -2,7 +2,7 @@
2
2
  import { GripVertical, Loader2, Plus, X } from 'lucide-svelte';
3
3
  import { createEventDispatcher } from 'svelte';
4
4
  import SubTypeEditor from './SubTypeEditor.svelte';
5
- import { dndzone, SOURCES, TRIGGERS } from 'svelte-dnd-action';
5
+ import { dragHandle, dragHandleZone } from '@windmill-labs/svelte-dnd-action';
6
6
  import { generateRandomString, pluralize } from '../../../../utils';
7
7
  import Toggle from '../../../Toggle.svelte';
8
8
  import QuickAddColumn from './QuickAddColumn.svelte';
@@ -181,36 +181,15 @@ function deleteElementByType(index) {
181
181
  dispatch('deleteArrayItem', { index });
182
182
  }
183
183
  }
184
- let dragDisabled = true;
185
- let dragging = false;
186
184
  function handleConsider(e) {
187
- const { items: newItems, info: { source, trigger } } = e.detail;
185
+ const { items: newItems } = e.detail;
188
186
  items = newItems;
189
- // Ensure dragging is stopped on drag finish via keyboard
190
- if (source === SOURCES.KEYBOARD && trigger === TRIGGERS.DRAG_STOPPED) {
191
- dragDisabled = true;
192
- }
193
187
  }
194
188
  function handleFinalize(e) {
195
- const { items: newItems, info: { source } } = e.detail;
189
+ const { items: newItems } = e.detail;
196
190
  items = newItems;
197
- // Ensure dragging is stopped on drag finish via pointer (mouse, touch)
198
- if (source === SOURCES.POINTER) {
199
- dragDisabled = true;
200
- }
201
191
  const reorderedValues = items.map((item) => item.value);
202
192
  componentInput.value = reorderedValues;
203
- dragging = false;
204
- }
205
- function startDrag(e) {
206
- dragging = true;
207
- // preventing default to prevent lag on touch devices (because of the browser checking for screen scrolling)
208
- e.preventDefault();
209
- dragDisabled = false;
210
- }
211
- function handleKeyDown(e) {
212
- if ((e.key === 'Enter' || e.key === ' ') && dragDisabled)
213
- dragDisabled = false;
214
193
  }
215
194
  let items = (Array.isArray(componentInput.value) ? componentInput.value : [])
216
195
  .filter((x) => x != undefined)
@@ -256,9 +235,8 @@ let raw = false;
256
235
  {/if}
257
236
  </div>
258
237
  <section
259
- use:dndzone={{
238
+ use:dragHandleZone={{
260
239
  items,
261
- dragDisabled,
262
240
  flipDurationMs,
263
241
  dropTargetStyle: {}
264
242
  }}
@@ -277,19 +255,12 @@ let raw = false;
277
255
  bind:componentInput
278
256
  bind:value={item.value}
279
257
  on:remove={() => deleteElementByType(index)}
280
- {dragging}
281
258
  />
282
259
  </div>
283
260
 
284
261
  <div class="flex justify-between flex-col items-center">
285
262
  <!-- svelte-ignore a11y-no-static-element-interactions -->
286
- <div
287
- tabindex={dragDisabled ? 0 : -1}
288
- class="w-4 h-4 cursor-move"
289
- on:mousedown={startDrag}
290
- on:touchstart={startDrag}
291
- on:keydown={handleKeyDown}
292
- >
263
+ <div class="w-4 h-4 cursor-move handle" use:dragHandle>
293
264
  <GripVertical size={16} />
294
265
  </div>
295
266
  {#if subFieldType !== 'db-explorer'}
@@ -7,7 +7,6 @@ import StaticInputEditor from './inputEditor/StaticInputEditor.svelte';
7
7
  import ConnectedInputEditor from './inputEditor/ConnectedInputEditor.svelte';
8
8
  import { classNames, getModifierKey, isMac } from '../../../../utils';
9
9
  import { buildExtraLib } from '../../utils';
10
- import Recompute from './Recompute.svelte';
11
10
  import Tooltip from '../../../Tooltip.svelte';
12
11
  import ComponentInputTypeEditor from './ComponentInputTypeEditor.svelte';
13
12
  import AlignmentEditor from './AlignmentEditor.svelte';
@@ -36,6 +35,7 @@ import DecisionTreeGraphEditor from './DecisionTreeGraphEditor.svelte';
36
35
  import GridAgChartsLicenseKe from './GridAgChartsLicenseKe.svelte';
37
36
  import Toggle from '../../../Toggle.svelte';
38
37
  import ContextVariables from './ContextVariables.svelte';
38
+ import EventHandlers from './EventHandlers.svelte';
39
39
  export let componentSettings = undefined;
40
40
  export let onDelete = undefined;
41
41
  export let noGrid = false;
@@ -362,46 +362,8 @@ function transformToFrontend() {
362
362
  {ccomponents[component.type].name} has no configuration
363
363
  </div>
364
364
  {/if}
365
- {#if (`recomputeIds` in componentSettings.item.data && Array.isArray(componentSettings.item.data.recomputeIds)) || componentSettings.item.data.type === 'buttoncomponent' || componentSettings.item.data.type === 'formcomponent' || componentSettings.item.data.type === 'formbuttoncomponent' || componentSettings.item.data.type === 'checkboxcomponent'}
366
- <Recompute
367
- bind:recomputeIds={componentSettings.item.data.recomputeIds}
368
- ownId={component.id}
369
- />
370
- {/if}
371
- {#if (`onOpenRecomputeIds` in componentSettings.item.data && Array.isArray(componentSettings.item.data.onOpenRecomputeIds)) || componentSettings.item.data.type === 'modalcomponent' || componentSettings.item.data.type === 'drawercomponent'}
372
- <Recompute
373
- bind:recomputeIds={componentSettings.item.data.onOpenRecomputeIds}
374
- ownId={component.id}
375
- title="Trigger runnables on open"
376
- tooltip="Select components to recompute after this component was opened"
377
- />
378
- {/if}
379
- {#if (`onCloseRecomputeIds` in componentSettings.item.data && Array.isArray(componentSettings.item.data.onCloseRecomputeIds)) || componentSettings.item.data.type === 'modalcomponent' || componentSettings.item.data.type === 'drawercomponent'}
380
- <Recompute
381
- bind:recomputeIds={componentSettings.item.data.onCloseRecomputeIds}
382
- ownId={component.id}
383
- title="Trigger runnables on close"
384
- tooltip="Select components to recompute after this component was closed"
385
- />
386
- {/if}
387
- {#if componentSettings.item.data.type === 'checkboxcomponent'}
388
- <Recompute
389
- title="Recompute on toggle"
390
- tooltip={'Contrary to onSuccess, this will only trigger recompute when a human toggle the change, not if it set by a default value or by setValue'}
391
- documentationLink={undefined}
392
- bind:recomputeIds={componentSettings.item.data.onToggle}
393
- ownId={component.id}
394
- />
395
- {/if}
396
- {#if componentSettings.item.data.type === 'resourceselectcomponent' || componentSettings.item.data.type === 'selectcomponent'}
397
- <Recompute
398
- title="Recompute on select"
399
- tooltip={'Contrary to onSuccess, this will only trigger recompute when a human select an item, not if it set by a default value or by setValue'}
400
- documentationLink={undefined}
401
- bind:recomputeIds={componentSettings.item.data.onSelect}
402
- ownId={component.id}
403
- />
404
- {/if}
365
+
366
+ <EventHandlers bind:item={componentSettings.item} ownId={component.id} />
405
367
 
406
368
  <div class="grow shrink" />
407
369
 
@@ -0,0 +1,33 @@
1
+ <script>import Tooltip from '../../../Tooltip.svelte';
2
+ import MultiSelect from '../../../multiselect/MultiSelectWrapper.svelte';
3
+ import { twMerge } from 'tailwind-merge';
4
+ export let items;
5
+ export let value = undefined;
6
+ export let title;
7
+ export let tooltip;
8
+ $: width = 0;
9
+ const inputWidth = 280;
10
+ </script>
11
+
12
+ <div
13
+ class={twMerge(
14
+ 'flex flex-col justify-between w-full',
15
+ width < inputWidth ? 'flex-col gap-2' : 'flex-row gap-16 '
16
+ )}
17
+ bind:clientWidth={width}
18
+ >
19
+ <div class="flex items-center text-xs h-8 whitespace-nowrap">
20
+ {title}
21
+ <Tooltip light small>{tooltip}</Tooltip>
22
+ </div>
23
+
24
+ <div class="w-full">
25
+ {#if items.length === 0}
26
+ <div class="text-xs text-secondary w-full flex items-center justify-end h-8">
27
+ No components to recompute.
28
+ </div>
29
+ {:else}
30
+ <MultiSelect {items} bind:value />
31
+ {/if}
32
+ </div>
33
+ </div>
@@ -0,0 +1,19 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ items: string[];
5
+ value?: string[] | undefined;
6
+ title: string;
7
+ tooltip: string;
8
+ };
9
+ events: {
10
+ [evt: string]: CustomEvent<any>;
11
+ };
12
+ slots: {};
13
+ };
14
+ export type EventHandlerItemProps = typeof __propDef.props;
15
+ export type EventHandlerItemEvents = typeof __propDef.events;
16
+ export type EventHandlerItemSlots = typeof __propDef.slots;
17
+ export default class EventHandlerItem extends SvelteComponent<EventHandlerItemProps, EventHandlerItemEvents, EventHandlerItemSlots> {
18
+ }
19
+ export {};
@@ -0,0 +1,103 @@
1
+ <script>import { getContext } from 'svelte';
2
+ import EventHandlerItem from './EventHandlerItem.svelte';
3
+ import PanelSection from './common/PanelSection.svelte';
4
+ const { runnableComponents } = getContext('AppViewerContext');
5
+ export let item;
6
+ export let ownId;
7
+ const componentsWithEventHandler = [
8
+ 'modalcomponent',
9
+ 'drawercomponent',
10
+ 'buttoncomponent',
11
+ 'formcomponent',
12
+ 'formbuttoncomponent',
13
+ 'checkboxcomponent',
14
+ 'resourceselectcomponent',
15
+ 'selectcomponent',
16
+ 'tabscomponent',
17
+ 'conditionalwrapper',
18
+ 'fileinputcomponent',
19
+ 's3fileinputcomponent',
20
+ 'steppercomponent'
21
+ ];
22
+ </script>
23
+
24
+ {#if componentsWithEventHandler.includes(item.data.type)}
25
+ <PanelSection
26
+ title="Event handlers"
27
+ tooltip="Event handlers are used to trigger actions on other components when a specific event occurs. For example, you can trigger a recompute on a component when a button is clicked."
28
+ >
29
+ {#if (`onOpenRecomputeIds` in item.data && Array.isArray(item.data.onOpenRecomputeIds)) || item.data.type === 'modalcomponent' || item.data.type === 'drawercomponent'}
30
+ <EventHandlerItem
31
+ title="on open"
32
+ tooltip="Select components to recompute after this component was opened"
33
+ items={Object.keys($runnableComponents).filter((id) => id !== ownId)}
34
+ bind:value={item.data.onOpenRecomputeIds}
35
+ />
36
+ {/if}
37
+
38
+ {#if (`onCloseRecomputeIds` in item.data && Array.isArray(item.data.onCloseRecomputeIds)) || item.data.type === 'modalcomponent' || item.data.type === 'drawercomponent'}
39
+ <EventHandlerItem
40
+ title="on close"
41
+ tooltip="Select components to recompute after this component was closed"
42
+ items={Object.keys($runnableComponents).filter((id) => id !== ownId)}
43
+ bind:value={item.data.onCloseRecomputeIds}
44
+ />
45
+ {/if}
46
+ {#if (`recomputeIds` in item.data && Array.isArray(item.data.recomputeIds)) || item.data.type === 'buttoncomponent' || item.data.type === 'formcomponent' || item.data.type === 'formbuttoncomponent' || item.data.type === 'checkboxcomponent'}
47
+ <EventHandlerItem
48
+ title="on success"
49
+ tooltip="Select components to recompute after this runnable has successfully run"
50
+ items={Object.keys($runnableComponents).filter((id) => id !== ownId)}
51
+ bind:value={item.data.recomputeIds}
52
+ />
53
+ {/if}
54
+ {#if item.data.type === 'checkboxcomponent'}
55
+ <EventHandlerItem
56
+ title="on toggle"
57
+ tooltip="Contrary to onSuccess, this will only trigger recompute when a human toggle the change, not if it set by a default value or by setValue"
58
+ items={Object.keys($runnableComponents).filter((id) => id !== ownId)}
59
+ bind:value={item.data.onToggle}
60
+ />
61
+ {/if}
62
+ {#if item.data.type === 'resourceselectcomponent' || item.data.type === 'selectcomponent'}
63
+ <EventHandlerItem
64
+ title="on select"
65
+ tooltip="Contrary to onSuccess, this will only trigger recompute when a human select an item, not if it set by a default value or by setValue"
66
+ items={Object.keys($runnableComponents).filter((id) => id !== ownId)}
67
+ bind:value={item.data.onSelect}
68
+ />
69
+ {/if}
70
+ {#if item.data.type === 'tabscomponent' || item.data.type === 'conditionalwrapper'}
71
+ <EventHandlerItem
72
+ title="on tab change"
73
+ tooltip="Select components to recompute after the selected tab was changed"
74
+ items={Object.keys($runnableComponents).filter((id) => id !== ownId)}
75
+ bind:value={item.data.onTabChange}
76
+ />
77
+ {/if}
78
+ {#if item.data.type === 'fileinputcomponent' || item.data.type === 's3fileinputcomponent'}
79
+ <EventHandlerItem
80
+ title="on file change"
81
+ tooltip="Select components to recompute after a file was selected"
82
+ items={Object.keys($runnableComponents).filter((id) => id !== ownId)}
83
+ bind:value={item.data.onFileChange}
84
+ />
85
+ {/if}
86
+ {#if item.data.type === 'steppercomponent'}
87
+ <EventHandlerItem
88
+ title="on next"
89
+ tooltip="Select components to recompute after the next button was clicked"
90
+ items={Object.keys($runnableComponents).filter((id) => id !== ownId)}
91
+ bind:value={item.data.onNext}
92
+ />
93
+ {/if}
94
+ {#if item.data.type === 'steppercomponent'}
95
+ <EventHandlerItem
96
+ title="on previous"
97
+ tooltip="Select components to recompute after the previous button was clicked"
98
+ items={Object.keys($runnableComponents).filter((id) => id !== ownId)}
99
+ bind:value={item.data.onPrevious}
100
+ />
101
+ {/if}
102
+ </PanelSection>
103
+ {/if}
@@ -0,0 +1,18 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { GridItem } from '../../types';
3
+ declare const __propDef: {
4
+ props: {
5
+ item: GridItem;
6
+ ownId: string;
7
+ };
8
+ events: {
9
+ [evt: string]: CustomEvent<any>;
10
+ };
11
+ slots: {};
12
+ };
13
+ export type EventHandlersProps = typeof __propDef.props;
14
+ export type EventHandlersEvents = typeof __propDef.events;
15
+ export type EventHandlersSlots = typeof __propDef.slots;
16
+ export default class EventHandlers extends SvelteComponent<EventHandlersProps, EventHandlersEvents, EventHandlersSlots> {
17
+ }
18
+ export {};