windmill-components 1.339.2 → 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 (231) 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/common/button/ButtonDropdown.svelte +1 -0
  137. package/package/components/common/drawer/Disposable.svelte +3 -2
  138. package/package/components/common/drawer/Disposable.svelte.d.ts +1 -0
  139. package/package/components/common/drawer/Drawer.svelte +12 -2
  140. package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
  141. package/package/components/common/fileDownload/FileDownload.svelte +4 -2
  142. package/package/components/common/fileUpload/FileUpload.svelte +4 -3
  143. package/package/components/common/modal/Modal.svelte +4 -1
  144. package/package/components/common/modal/Modal.svelte.d.ts +1 -0
  145. package/package/components/common/popup/Popup.svelte +1 -1
  146. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +4 -1
  147. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
  148. package/package/components/common/waitTimeWarning/WaitTimeWarning.svelte +79 -0
  149. package/package/components/common/waitTimeWarning/WaitTimeWarning.svelte.d.ts +18 -0
  150. package/package/components/flows/content/FlowEditorPanel.svelte +16 -2
  151. package/package/components/flows/content/FlowInput.svelte +63 -53
  152. package/package/components/flows/content/FlowModuleComponent.svelte +26 -3
  153. package/package/components/flows/content/FlowModuleScript.svelte +40 -1
  154. package/package/components/flows/content/FlowModuleScript.svelte.d.ts +2 -0
  155. package/package/components/flows/content/FlowModuleSuspend.svelte +99 -59
  156. package/package/components/flows/content/FlowModuleWrapper.svelte +16 -1
  157. package/package/components/flows/content/FlowSchedules.svelte +11 -8
  158. package/package/components/flows/content/ScriptEditorDrawer.svelte +3 -4
  159. package/package/components/flows/flowStateUtils.js +4 -1
  160. package/package/components/flows/map/FlowModuleSchemaItem.svelte +16 -1
  161. package/package/components/flows/map/FlowModuleSchemaMap.svelte +6 -1
  162. package/package/components/flows/types.d.ts +4 -0
  163. package/package/components/flows/utils.d.ts +5 -1
  164. package/package/components/flows/utils.js +36 -0
  165. package/package/components/graph/FlowGraph.svelte +5 -2
  166. package/package/components/graph/FlowGraph.svelte.d.ts +2 -0
  167. package/package/components/graph/svelvet/container/models/index.d.ts +0 -5
  168. package/package/components/graph/svelvet/container/models/index.js +1 -1
  169. package/package/components/graph/svelvet/container/views/Svelvet.svelte +2 -5
  170. package/package/components/graph/util.d.ts +1 -37
  171. package/package/components/graph/util.js +0 -34
  172. package/package/components/instanceSettings.js +2 -1
  173. package/package/components/jobs/JobPreview.svelte +1 -1
  174. package/package/components/multiselect/MultiSelect.svelte +4 -3
  175. package/package/components/multiselect/MultiSelect.svelte.d.ts +1 -0
  176. package/package/components/multiselect/MultiSelectWrapper.svelte +89 -0
  177. package/package/components/multiselect/MultiSelectWrapper.svelte.d.ts +20 -0
  178. package/package/components/propertyPicker/ObjectViewer.svelte +6 -2
  179. package/package/components/runs/JobPreview.svelte +5 -1
  180. package/package/components/runs/RunRow.svelte +22 -3
  181. package/package/components/runs/RunRow.svelte.d.ts +2 -1
  182. package/package/components/runs/RunsTable.svelte +22 -9
  183. package/package/components/runs/RunsTable.svelte.d.ts +2 -1
  184. package/package/components/schema/AddProperty.svelte +149 -0
  185. package/package/components/schema/AddProperty.svelte.d.ts +23 -0
  186. package/package/components/schema/AddPropertyForm.svelte +33 -0
  187. package/package/components/schema/AddPropertyForm.svelte.d.ts +16 -0
  188. package/package/components/schema/EditableSchemaDrawer.svelte +198 -0
  189. package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +21 -0
  190. package/package/components/schema/EditableSchemaWrapper.svelte +31 -0
  191. package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +22 -0
  192. package/package/components/schema/FlowPropertyEditor.svelte +393 -0
  193. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +47 -0
  194. package/package/components/schema/PropertyEditor.svelte +185 -0
  195. package/package/components/schema/PropertyEditor.svelte.d.ts +46 -0
  196. package/package/components/schema/SchemaFormDND.svelte +75 -0
  197. package/package/components/schema/SchemaFormDND.svelte.d.ts +28 -0
  198. package/package/components/table/AutoDataTable.svelte +90 -104
  199. package/package/components/table/Cell.svelte +4 -1
  200. package/package/components/table/Cell.svelte.d.ts +1 -0
  201. package/package/components/table/DownloadCsv.svelte +30 -0
  202. package/package/components/table/DownloadCsv.svelte.d.ts +17 -0
  203. package/package/components/table/tableUtils.d.ts +8 -0
  204. package/package/components/table/tableUtils.js +37 -0
  205. package/package/consts.js +3 -1
  206. package/package/deno_fetch.d.ts.txt +6 -0
  207. package/package/gen/core/OpenAPI.js +1 -1
  208. package/package/gen/schemas.gen.d.ts +76 -0
  209. package/package/gen/schemas.gen.js +76 -0
  210. package/package/gen/services.gen.d.ts +100 -5
  211. package/package/gen/services.gen.js +216 -16
  212. package/package/gen/types.gen.d.ts +378 -5
  213. package/package/inferArgSig.d.ts +10 -0
  214. package/package/inferArgSig.js +59 -2
  215. package/package/scripts.d.ts +2 -0
  216. package/package/scripts.js +6 -3
  217. package/package/utils.d.ts +4 -3
  218. package/package/utils.js +9 -4
  219. package/package/workspace_settings.d.ts +15 -0
  220. package/package/workspace_settings.js +81 -0
  221. package/package.json +16 -7
  222. package/package/components/ParqetTableRenderer.svelte +0 -117
  223. package/package/components/ParqetTableRenderer.svelte.d.ts +0 -18
  224. package/package/components/PropertyRow.svelte +0 -88
  225. package/package/components/PropertyRow.svelte.d.ts +0 -23
  226. package/package/components/SchemaEditor.svelte +0 -346
  227. package/package/components/SchemaEditor.svelte.d.ts +0 -25
  228. package/package/components/SchemaModal.svelte +0 -443
  229. package/package/components/SchemaModal.svelte.d.ts +0 -33
  230. package/package/components/apps/editor/settingsPanel/Recompute.svelte +0 -55
  231. package/package/components/apps/editor/settingsPanel/Recompute.svelte.d.ts +0 -20
@@ -1,7 +1,6 @@
1
1
  <script>import { VariableService } from '../gen';
2
2
  import { workspaceStore } from '../stores';
3
3
  import { allTrue, computeShow } from '../utils';
4
- import ArgInput from './ArgInput.svelte';
5
4
  import { Button } from './common';
6
5
  import ItemPicker from './ItemPicker.svelte';
7
6
  import VariableEditor from './VariableEditor.svelte';
@@ -9,6 +8,12 @@ import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte
9
8
  import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
10
9
  import { getResourceTypes } from './resourceTypesStore';
11
10
  import { Plus } from 'lucide-svelte';
11
+ import ArgInput from './ArgInput.svelte';
12
+ import { createEventDispatcher } from 'svelte';
13
+ import LightweightArgInput from './LightweightArgInput.svelte';
14
+ import { deepEqual } from 'fast-equals';
15
+ import { dragHandleZone } from '@windmill-labs/svelte-dnd-action';
16
+ import { flip } from 'svelte/animate';
12
17
  export let schema;
13
18
  export let schemaSkippedValues = [];
14
19
  export let schemaFieldTooltip = {};
@@ -29,8 +34,10 @@ export let disablePortal = false;
29
34
  export let showSchemaExplorer = false;
30
35
  export let showReset = false;
31
36
  export let onlyMaskPassword = false;
32
- let clazz = '';
33
- export { clazz as class };
37
+ export let lightweightMode = false;
38
+ export let dndConfig = undefined;
39
+ export let items = undefined;
40
+ const dispatch = createEventDispatcher();
34
41
  let inputCheck = {};
35
42
  $: if (args == undefined || typeof args !== 'object') {
36
43
  args = {};
@@ -39,12 +46,15 @@ export function setDefaults() {
39
46
  const nargs = {};
40
47
  Object.keys(schema?.properties ?? {}).forEach((key) => {
41
48
  if (schema?.properties[key].default != undefined && args[key] == undefined) {
42
- nargs[key] = schema?.properties[key].default;
49
+ let value = schema?.properties[key].default;
50
+ nargs[key] = value === 'object' ? JSON.parse(JSON.stringify(value)) : value;
43
51
  }
44
52
  });
45
53
  args = nargs;
46
54
  }
47
- let keys = [];
55
+ let keys = Array.isArray(schema?.order)
56
+ ? schema?.order
57
+ : Object.keys(schema?.properties ?? {});
48
58
  function removeExtraKey() {
49
59
  const nargs = {};
50
60
  Object.keys(args ?? {}).forEach((key) => {
@@ -57,15 +67,6 @@ function removeExtraKey() {
57
67
  let pickForField;
58
68
  let itemPicker = undefined;
59
69
  let variableEditor = undefined;
60
- $: {
61
- let lkeys = Object.keys(schema?.properties ?? {});
62
- if (schema?.properties && JSON.stringify(lkeys) != JSON.stringify(keys)) {
63
- keys = lkeys;
64
- if (!noDelete) {
65
- removeExtraKey();
66
- }
67
- }
68
- }
69
70
  $: isValid = allTrue(inputCheck ?? {});
70
71
  let resourceTypes = undefined;
71
72
  async function loadResourceTypes() {
@@ -73,113 +74,201 @@ async function loadResourceTypes() {
73
74
  }
74
75
  loadResourceTypes();
75
76
  $: schema && reorder();
77
+ function hasExtraKeys() {
78
+ return Object.keys(args ?? {}).some((x) => !keys.includes(x));
79
+ }
76
80
  function reorder() {
77
- if (schema?.order && Array.isArray(schema.order)) {
78
- const n = {};
79
- schema.order.forEach((x) => {
80
- if (schema.properties && schema.properties[x] != undefined) {
81
+ dispatch('change');
82
+ let lkeys = Object.keys(schema?.properties ?? {});
83
+ if (!deepEqual(schema?.order, lkeys) || !deepEqual(keys, lkeys)) {
84
+ if (schema?.order && Array.isArray(schema.order)) {
85
+ const n = {};
86
+ schema.order.forEach((x) => {
87
+ if (schema.properties && schema.properties[x] != undefined) {
88
+ n[x] = schema.properties[x];
89
+ }
90
+ });
91
+ Object.keys(schema.properties ?? {})
92
+ .filter((x) => !schema.order?.includes(x))
93
+ .forEach((x) => {
81
94
  n[x] = schema.properties[x];
82
- }
83
- });
84
- Object.keys(schema.properties ?? {})
85
- .filter((x) => !schema.order?.includes(x))
86
- .forEach((x) => {
87
- n[x] = schema.properties[x];
88
- });
89
- schema.properties = n;
95
+ });
96
+ schema.properties = n;
97
+ }
90
98
  keys = Object.keys(schema.properties ?? {});
91
99
  }
100
+ if (!noDelete && hasExtraKeys()) {
101
+ removeExtraKey();
102
+ }
92
103
  }
104
+ $: fields = items ?? keys.map((x) => ({ id: x, value: x }));
93
105
  </script>
94
106
 
95
107
  {#if showReset}
96
108
  <div class="flex flex-row-reverse w-full">
97
- <Button size="xs" color="light" on:click={() => setDefaults()}
98
- >Reset args to runnable's defaults</Button
99
- >
109
+ <Button size="xs" color="light" on:click={() => setDefaults()}>
110
+ Reset args to runnable's defaults
111
+ </Button>
100
112
  </div>
101
113
  {/if}
102
- <div class="w-full {clazz} {flexWrap ? 'flex flex-row flex-wrap gap-x-6 ' : ''}">
114
+
115
+ <div
116
+ class="w-full {$$props.class} {flexWrap ? 'flex flex-row flex-wrap gap-x-6 ' : ''}"
117
+ use:dragHandleZone={dndConfig ?? { items: [], dragDisabled: true }}
118
+ on:finalize
119
+ on:consider
120
+ >
103
121
  {#if keys.length > 0}
104
- {#each keys as argName, i (argName)}
105
- {#if !schemaSkippedValues.includes(argName) && Object.keys(schema?.properties ?? {}).includes(argName)}
106
- <div>
107
- {#if typeof args == 'object' && schema?.properties[argName]}
108
- {#if computeShow(argName, schema?.properties[argName].showExpr, args)}
109
- <ArgInput
110
- {disablePortal}
111
- {resourceTypes}
112
- {prettifyHeader}
113
- autofocus={i == 0 && autofocus ? true : null}
114
- label={argName}
115
- description={schema.properties[argName].description}
116
- bind:value={args[argName]}
117
- type={schema.properties[argName].type}
118
- required={schema.required.includes(argName)}
119
- pattern={schema.properties[argName].pattern}
120
- bind:valid={inputCheck[argName]}
121
- defaultValue={schema.properties[argName].default}
122
- enum_={schema.properties[argName].enum}
123
- format={schema.properties[argName].format}
124
- contentEncoding={schema.properties[argName].contentEncoding}
125
- customErrorMessage={schema.properties[argName].customErrorMessage}
126
- properties={schema.properties[argName].properties}
127
- nestedRequired={schema.properties[argName].required}
128
- itemsType={schema.properties[argName].items}
129
- disabled={disabledArgs.includes(argName) || disabled}
130
- {compact}
131
- {variableEditor}
132
- {itemPicker}
133
- bind:pickForField
134
- password={linkedSecret == argName}
135
- extra={schema.properties[argName]}
136
- {showSchemaExplorer}
137
- simpleTooltip={schemaFieldTooltip[argName]}
138
- {onlyMaskPassword}
139
- nullable={schema.properties[argName].nullable}
140
- title={schema.properties[argName].title}
141
- placeholder={schema.properties[argName].placeholder}
142
- >
143
- <svelte:fragment slot="actions">
144
- {#if linkedSecretCandidates?.includes(argName)}
145
- <div>
146
- <ToggleButtonGroup
147
- selected={linkedSecret == argName}
148
- on:selected={(e) => {
149
- if (e.detail) {
150
- linkedSecret = argName
151
- } else if (linkedSecret == argName) {
152
- linkedSecret = undefined
153
- }
154
- }}
155
- >
156
- <ToggleButton
157
- value={false}
158
- size="sm"
159
- label="Inlined"
160
- tooltip="The value is inlined in the resource and thus has no special treatment."
161
- />
162
- <ToggleButton
163
- position="right"
164
- value={true}
165
- size="sm"
166
- label="Secret"
167
- tooltip="The value will be stored in a newly created linked secret variable at the same path. That variable can be permissioned differently, will be treated as a secret the UI, operators will not be able to load it and every access will generate a corresponding audit log."
168
- />
169
- </ToggleButtonGroup>
170
- </div>{/if}</svelte:fragment
171
- >
172
- </ArgInput>
122
+ {#each fields as item, i (item.id)}
123
+ {@const argName = item.value}
124
+ <div animate:flip={{ duration: 200 }}>
125
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
126
+ {#if !schemaSkippedValues.includes(argName) && Object.keys(schema?.properties ?? {}).includes(argName)}
127
+ <!-- svelte-ignore a11y-no-static-element-interactions -->
128
+ <div
129
+ class="flex flex-row items-center bg-surface"
130
+ on:click={() => {
131
+ dispatch('click', argName)
132
+ }}
133
+ >
134
+ {#if typeof args == 'object' && schema?.properties[argName]}
135
+ {#if computeShow(argName, schema?.properties[argName].showExpr, args)}
136
+ {#if lightweightMode}
137
+ <LightweightArgInput
138
+ label={argName}
139
+ description={schema.properties[argName].description}
140
+ bind:value={args[argName]}
141
+ type={schema.properties[argName].type}
142
+ oneOf={schema.properties[argName].oneOf}
143
+ required={schema?.required?.includes(argName)}
144
+ pattern={schema.properties[argName].pattern}
145
+ bind:valid={inputCheck[argName]}
146
+ defaultValue={schema.properties[argName].default}
147
+ enum_={schema.properties[argName].enum}
148
+ format={schema.properties[argName].format}
149
+ contentEncoding={schema.properties[argName].contentEncoding}
150
+ customErrorMessage={schema.properties[argName].customErrorMessage}
151
+ bind:properties={schema.properties[argName].properties}
152
+ nestedRequired={schema.properties[argName]?.required}
153
+ itemsType={schema.properties[argName].items}
154
+ extra={schema.properties[argName]}
155
+ title={schema.properties[argName].title}
156
+ placeholder={schema.properties[argName].placeholder}
157
+ >
158
+ <svelte:fragment slot="actions">
159
+ <slot name="actions" />
160
+ {#if linkedSecretCandidates?.includes(argName)}
161
+ <div>
162
+ <ToggleButtonGroup
163
+ selected={linkedSecret == argName}
164
+ on:selected={(e) => {
165
+ if (e.detail) {
166
+ linkedSecret = argName
167
+ } else if (linkedSecret == argName) {
168
+ linkedSecret = undefined
169
+ }
170
+ }}
171
+ >
172
+ <ToggleButton
173
+ value={false}
174
+ size="sm"
175
+ label="Inlined"
176
+ tooltip="The value is inlined in the resource and thus has no special treatment."
177
+ />
178
+ <ToggleButton
179
+ position="right"
180
+ value={true}
181
+ size="sm"
182
+ label="Secret"
183
+ tooltip="The value will be stored in a newly created linked secret variable at the same path. That variable can be permissioned differently, will be treated as a secret the UI, operators will not be able to load it and every access will generate a corresponding audit log."
184
+ />
185
+ </ToggleButtonGroup>
186
+ </div>{/if}
187
+ </svelte:fragment>
188
+ </LightweightArgInput>
189
+ {:else}
190
+ <ArgInput
191
+ on:change={() => dispatch('change')}
192
+ {disablePortal}
193
+ {resourceTypes}
194
+ {prettifyHeader}
195
+ autofocus={i == 0 && autofocus ? true : null}
196
+ label={argName}
197
+ description={schema.properties[argName].description}
198
+ bind:value={args[argName]}
199
+ type={schema.properties[argName].type}
200
+ oneOf={schema.properties[argName].oneOf}
201
+ required={schema?.required?.includes(argName)}
202
+ pattern={schema.properties[argName].pattern}
203
+ bind:valid={inputCheck[argName]}
204
+ defaultValue={schema.properties[argName].default}
205
+ enum_={schema.properties[argName].enum}
206
+ format={schema.properties[argName].format}
207
+ contentEncoding={schema.properties[argName].contentEncoding}
208
+ customErrorMessage={schema.properties[argName].customErrorMessage}
209
+ bind:properties={schema.properties[argName].properties}
210
+ bind:order={schema.properties[argName].order}
211
+ nestedRequired={schema.properties[argName]?.required}
212
+ itemsType={schema.properties[argName].items}
213
+ disabled={disabledArgs.includes(argName) || disabled}
214
+ {compact}
215
+ {variableEditor}
216
+ {itemPicker}
217
+ bind:pickForField
218
+ password={linkedSecret == argName}
219
+ extra={schema.properties[argName]}
220
+ {showSchemaExplorer}
221
+ simpleTooltip={schemaFieldTooltip[argName]}
222
+ {onlyMaskPassword}
223
+ nullable={schema.properties[argName].nullable}
224
+ title={schema.properties[argName].title}
225
+ placeholder={schema.properties[argName].placeholder}
226
+ orderEditable={dndConfig != undefined}
227
+ >
228
+ <svelte:fragment slot="actions">
229
+ <slot name="actions" />
230
+ {#if linkedSecretCandidates?.includes(argName)}
231
+ <div>
232
+ <ToggleButtonGroup
233
+ selected={linkedSecret == argName}
234
+ on:selected={(e) => {
235
+ if (e.detail) {
236
+ linkedSecret = argName
237
+ } else if (linkedSecret == argName) {
238
+ linkedSecret = undefined
239
+ }
240
+ }}
241
+ >
242
+ <ToggleButton
243
+ value={false}
244
+ size="sm"
245
+ label="Inlined"
246
+ tooltip="The value is inlined in the resource and thus has no special treatment."
247
+ />
248
+ <ToggleButton
249
+ position="right"
250
+ value={true}
251
+ size="sm"
252
+ label="Secret"
253
+ tooltip="The value will be stored in a newly created linked secret variable at the same path. That variable can be permissioned differently, will be treated as a secret the UI, operators will not be able to load it and every access will generate a corresponding audit log."
254
+ />
255
+ </ToggleButtonGroup>
256
+ </div>{/if}</svelte:fragment
257
+ >
258
+ </ArgInput>
259
+ {/if}
260
+ <!-- svelte-ignore a11y-no-noninteractive-tabindex -->
261
+ <!-- svelte-ignore a11y-no-static-element-interactions -->
262
+ {/if}
173
263
  {/if}
174
- {/if}
175
- </div>
176
- {/if}
264
+ </div>
265
+ {/if}
266
+ </div>
177
267
  {/each}
178
268
  {:else if !shouldHideNoInputs}
179
269
  <div class="text-secondary text-sm">No inputs</div>
180
270
  {/if}
181
271
  </div>
182
-
183
272
  {#if !noVariablePicker}
184
273
  <ItemPicker
185
274
  bind:this={itemPicker}
@@ -1,7 +1,9 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  import type { Schema } from '../common';
3
+ import { type Options as DndOptions } from '@windmill-labs/svelte-dnd-action';
3
4
  declare const __propDef: {
4
5
  props: {
6
+ [x: string]: any;
5
7
  schema: Schema | any;
6
8
  schemaSkippedValues?: string[] | undefined;
7
9
  schemaFieldTooltip?: Record<string, string> | undefined;
@@ -22,13 +24,25 @@ declare const __propDef: {
22
24
  showSchemaExplorer?: boolean | undefined;
23
25
  showReset?: boolean | undefined;
24
26
  onlyMaskPassword?: boolean | undefined;
25
- class?: string | undefined;
27
+ lightweightMode?: boolean | undefined;
28
+ dndConfig?: DndOptions | undefined;
29
+ items?: {
30
+ id: string;
31
+ value: string;
32
+ }[] | undefined;
26
33
  setDefaults?: (() => void) | undefined;
27
34
  };
28
35
  events: {
36
+ finalize: Event | ClipboardEvent | CompositionEvent | UIEvent | FocusEvent | InputEvent | SubmitEvent | FormDataEvent | KeyboardEvent | MouseEvent | DragEvent | TouchEvent | PointerEvent | WheelEvent | AnimationEvent | TransitionEvent | ErrorEvent | ProgressEvent<EventTarget> | SecurityPolicyViolationEvent;
37
+ consider: Event | ClipboardEvent | CompositionEvent | UIEvent | FocusEvent | InputEvent | SubmitEvent | FormDataEvent | KeyboardEvent | MouseEvent | DragEvent | TouchEvent | PointerEvent | WheelEvent | AnimationEvent | TransitionEvent | ErrorEvent | ProgressEvent<EventTarget> | SecurityPolicyViolationEvent;
38
+ click: CustomEvent<any>;
39
+ change: CustomEvent<any>;
40
+ } & {
29
41
  [evt: string]: CustomEvent<any>;
30
42
  };
31
- slots: {};
43
+ slots: {
44
+ actions: {};
45
+ };
32
46
  };
33
47
  export type SchemaFormProps = typeof __propDef.props;
34
48
  export type SchemaFormEvents = typeof __propDef.events;
@@ -22,7 +22,6 @@ import Toggle from './Toggle.svelte';
22
22
  import ScriptSchema from './ScriptSchema.svelte';
23
23
  import Section from './Section.svelte';
24
24
  import Label from './Label.svelte';
25
- import { cloneDeep } from 'lodash';
26
25
  import WorkerTagPicker from './WorkerTagPicker.svelte';
27
26
  import MetadataGen from './copilot/MetadataGen.svelte';
28
27
  import ScriptSchedules from './ScriptSchedules.svelte';
@@ -225,7 +224,7 @@ async function editScript(stay) {
225
224
  else if (enabled) {
226
225
  await createSchedule(script.path);
227
226
  }
228
- savedScript = cloneDeep(script);
227
+ savedScript = structuredClone(script);
229
228
  if (!disableHistoryChange) {
230
229
  history.replaceState(history.state, '', `/scripts/edit/${script.path}`);
231
230
  }
@@ -324,9 +323,9 @@ async function saveDraft(forceSave = false) {
324
323
  });
325
324
  savedScript = {
326
325
  ...(initialPath == '' || savedScript?.draft_only
327
- ? { ...cloneDeep(script), draft_only: true }
326
+ ? { ...structuredClone(script), draft_only: true }
328
327
  : savedScript),
329
- draft: cloneDeep(script)
328
+ draft: structuredClone(script)
330
329
  };
331
330
  if (initialPath == '' || (savedScript?.draft_only && script.path !== initialPath)) {
332
331
  initialPath = script.path;
@@ -387,7 +386,11 @@ let selectedTab = 'metadata';
387
386
  <slot />
388
387
 
389
388
  {#if !$userStore?.operator}
390
- <Drawer placement="right" bind:open={metadataOpen} size="800px">
389
+ <Drawer
390
+ placement="right"
391
+ bind:open={metadataOpen}
392
+ size={selectedTab === 'ui' ? '1200px' : '800px'}
393
+ >
391
394
  <DrawerContent noPadding title="Settings" on:close={() => (metadataOpen = false)}>
392
395
  <!-- svelte-ignore a11y-autofocus -->
393
396
  <Tabs bind:selected={selectedTab}>
@@ -404,7 +407,10 @@ let selectedTab = 'metadata';
404
407
  </Tab>
405
408
  <Tab value="schedule" active={$scheduleStore.enabled}>Schedule</Tab>
406
409
  <svelte:fragment slot="content">
407
- <div class="p-4">
410
+ <div
411
+ class={selectedTab === 'ui' ? 'p-0' : 'p-4'}
412
+ style={selectedTab === 'ui' ? `height: calc(100% - 32px);` : ''}
413
+ >
408
414
  <TabContent value="metadata">
409
415
  <div class="flex flex-col gap-8">
410
416
  <Section label="Metadata">
@@ -896,8 +902,7 @@ let selectedTab = 'metadata';
896
902
  {/if}
897
903
  </div>
898
904
  </TabContent>
899
- <TabContent value="ui">
900
- <div class="mt-4" />
905
+ <TabContent value="ui" class="h-full">
901
906
  <ScriptSchema bind:schema={script.schema} />
902
907
  </TabContent>
903
908
  <TabContent value="schedule">
@@ -7,6 +7,7 @@ import ScheduleEditor from './ScheduleEditor.svelte';
7
7
  import { ScheduleService } from '../gen';
8
8
  import { workspaceStore } from '../stores';
9
9
  import { Calendar } from 'lucide-svelte';
10
+ import Label from './Label.svelte';
10
11
  export let initialPath;
11
12
  export let schema;
12
13
  export let schedule;
@@ -29,15 +30,17 @@ let scheduleEditor;
29
30
  $: initialPath && loadSchedules();
30
31
  </script>
31
32
 
32
- <div class="w-full py-2">
33
+ <div class="w-full flex flex-col gap-4 mb-4">
33
34
  <!-- svelte-ignore a11y-autofocus -->
34
- <input
35
- autofocus
36
- type="text"
37
- placeholder="Schedule summary"
38
- class="text-sm w-full font-semibold mb-4"
39
- bind:value={$schedule.summary}
40
- />
35
+ <Label label="Summary">
36
+ <input
37
+ autofocus
38
+ type="text"
39
+ placeholder="Short summary to be displayed when listed"
40
+ class="text-sm w-full"
41
+ bind:value={$schedule.summary}
42
+ />
43
+ </Label>
41
44
  </div>
42
45
 
43
46
  <CronInput bind:schedule={$schedule.cron} bind:timezone={$schedule.timezone} />
@@ -1,27 +1,9 @@
1
- <script>import Tab from './common/tabs/Tab.svelte';
2
- import Tabs from './common/tabs/Tabs.svelte';
3
- import TabContent from './common/tabs/TabContent.svelte';
4
- import Highlight from 'svelte-highlight';
5
- import json from 'svelte-highlight/languages/json';
6
- import EditableSchemaForm from './EditableSchemaForm.svelte';
1
+ <script>import EditableSchemaForm from './EditableSchemaForm.svelte';
7
2
  export let schema;
8
3
  export function setSchema(newSchema) {
9
4
  schema = newSchema;
10
5
  }
6
+ const yOffset = 80;
11
7
  </script>
12
8
 
13
- <div class="w-full">
14
- <Tabs selected="ui">
15
- <Tab value="ui">Arguments</Tab>
16
- <Tab value="jsonschema">JSON Schema</Tab>
17
- <svelte:fragment slot="content">
18
- <TabContent value="ui">
19
- <div class="mt-4" />
20
- <EditableSchemaForm bind:schema />
21
- </TabContent>
22
- <TabContent value="jsonschema">
23
- <Highlight language={json} code={JSON.stringify(schema, null, 4)} />
24
- </TabContent>
25
- </svelte:fragment>
26
- </Tabs>
27
- </div>
9
+ <EditableSchemaForm bind:schema uiOnly offset={yOffset} />
@@ -158,7 +158,7 @@ loadVersions();
158
158
  </button>
159
159
  {/if}
160
160
  </span>
161
- <FlowModuleScript path={scriptPath} hash={selectedVersion.script_hash} />
161
+ <FlowModuleScript showDate path={scriptPath} hash={selectedVersion.script_hash} />
162
162
  </div>
163
163
  {/key}
164
164
  {:else}