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
@@ -0,0 +1,393 @@
1
+ <script>import Alert from '../common/alert/Alert.svelte';
2
+ import Label from '../Label.svelte';
3
+ import Toggle from '../Toggle.svelte';
4
+ import SimpleEditor from '../SimpleEditor.svelte';
5
+ import { createEventDispatcher } from 'svelte';
6
+ import ArgInput from '../ArgInput.svelte';
7
+ import ObjectTypeNarrowing from '../ObjectTypeNarrowing.svelte';
8
+ import Tabs from '../common/tabs/Tabs.svelte';
9
+ import { Tab, TabContent } from '../common';
10
+ import LightweightArgInput from '../LightweightArgInput.svelte';
11
+ import EditableSchemaDrawer from './EditableSchemaDrawer.svelte';
12
+ import ToggleButtonGroup from '../common/toggleButton-v2/ToggleButtonGroup.svelte';
13
+ import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
14
+ import Button from '../common/button/Button.svelte';
15
+ import { Pen, Plus, Trash2 } from 'lucide-svelte';
16
+ import Popup from '../common/popup/Popup.svelte';
17
+ import { deepEqual } from 'fast-equals';
18
+ export let format = '';
19
+ export let contentEncoding = undefined;
20
+ export let type = undefined;
21
+ export let oneOf = undefined;
22
+ export let required = false;
23
+ export let pattern = undefined;
24
+ export let password = false;
25
+ export let variableEditor = undefined;
26
+ export let itemPicker = undefined;
27
+ export let nullable = false;
28
+ export let defaultValue = undefined;
29
+ export let propsNames = [];
30
+ export let showExpr = undefined;
31
+ export let extra = {};
32
+ export let customErrorMessage = undefined;
33
+ export let itemsType = undefined;
34
+ export let properties = {};
35
+ export let order = [];
36
+ export let requiredProperty = [];
37
+ export let displayWebhookWarning = true;
38
+ export let lightweightMode = false;
39
+ function getOneOfWithoutLabel(oneOf) {
40
+ return oneOf.map((v) => ({
41
+ ...v,
42
+ properties: Object.fromEntries(Object.entries(v.properties ?? {}).filter(([k, v]) => k !== 'label'))
43
+ }));
44
+ }
45
+ let oneOfSelected = undefined;
46
+ function oneOfUpdate(oneOf) {
47
+ if (oneOf && oneOf.length >= 2) {
48
+ if (!oneOfSelected) {
49
+ oneOfSelected = oneOf[0].title;
50
+ }
51
+ if (!schema.oneOf ||
52
+ !deepEqual(oneOf.map((v) => [v.title, v.order]), schema.oneOf.map((v) => [v.title, v.order]))) {
53
+ // update schema if not exists or order changed
54
+ schema.oneOf = getOneOfWithoutLabel(oneOf);
55
+ }
56
+ }
57
+ else if (!oneOf) {
58
+ schema.oneOf = undefined;
59
+ }
60
+ }
61
+ $: oneOfUpdate(oneOf);
62
+ function orderUpdate(order) {
63
+ if (order && !deepEqual(order, schema.order)) {
64
+ // update from external reordering
65
+ schema.order = order;
66
+ }
67
+ }
68
+ $: orderUpdate(order);
69
+ const dispatch = createEventDispatcher();
70
+ function getResourceTypesFromFormat(format) {
71
+ if (format?.startsWith('resource-')) {
72
+ return [format.split('-')[1]];
73
+ }
74
+ return [];
75
+ }
76
+ let schema = {
77
+ properties,
78
+ order,
79
+ required: requiredProperty,
80
+ oneOf: oneOf ? getOneOfWithoutLabel(oneOf) : undefined
81
+ };
82
+ console.log('initial schema', schema);
83
+ function schemaUpdate(changedSchema) {
84
+ if (!deepEqual(changedSchema, {
85
+ properties,
86
+ order,
87
+ required: requiredProperty,
88
+ oneOf: oneOf ? getOneOfWithoutLabel(oneOf) : undefined
89
+ })) {
90
+ properties = changedSchema.properties;
91
+ order = changedSchema.order;
92
+ requiredProperty = changedSchema.required;
93
+ oneOf = changedSchema.oneOf?.map((v) => {
94
+ return {
95
+ ...v,
96
+ properties: {
97
+ ...v.properties,
98
+ label: {
99
+ type: 'string',
100
+ enum: [v.title ?? '']
101
+ }
102
+ }
103
+ };
104
+ });
105
+ dispatch('schemaChange');
106
+ }
107
+ }
108
+ $: schemaUpdate(schema);
109
+ let variantName = '';
110
+ function createVariant(name) {
111
+ if (schema.oneOf) {
112
+ if (schema.oneOf.some((obj) => obj.title === name)) {
113
+ throw new Error('Variant name already exists');
114
+ }
115
+ const idx = schema.oneOf.findIndex((obj) => obj.title === name);
116
+ if (idx === -1) {
117
+ schema.oneOf = [
118
+ ...schema.oneOf,
119
+ {
120
+ title: name,
121
+ type: 'object',
122
+ properties: {}
123
+ }
124
+ ];
125
+ oneOfSelected = name;
126
+ }
127
+ variantName = '';
128
+ }
129
+ }
130
+ function renameVariant(name, selected) {
131
+ if (schema.oneOf) {
132
+ if (schema.oneOf.some((obj) => obj.title === name)) {
133
+ throw new Error('Variant name already exists');
134
+ }
135
+ const idx = schema.oneOf.findIndex((obj) => obj.title === selected);
136
+ if (idx !== -1) {
137
+ schema.oneOf[idx].title = name;
138
+ oneOfSelected = name;
139
+ }
140
+ variantName = '';
141
+ }
142
+ }
143
+ </script>
144
+
145
+ <div class="flex flex-col gap-2">
146
+ {#if type === 'object' && schema.oneOf && schema.oneOf.length >= 2}
147
+ <div class="flex flex-row gap-2 items-center justify-start">
148
+ <ToggleButtonGroup bind:selected={oneOfSelected} class="w-auto">
149
+ {#each schema.oneOf as obj}
150
+ <ToggleButton value={obj.title} label={obj.title} />
151
+ {/each}
152
+ </ToggleButtonGroup>
153
+
154
+ <Popup
155
+ floatingConfig={{ strategy: 'absolute', placement: 'bottom-end' }}
156
+ containerClasses="border rounded-lg shadow-lg p-4 bg-surface"
157
+ let:close
158
+ >
159
+ <svelte:fragment slot="button">
160
+ <Button size="xs2" color="light" nonCaptureEvent startIcon={{ icon: Plus }} />
161
+ </svelte:fragment>
162
+ <Label label="Label">
163
+ <div class="flex flex-col gap-2">
164
+ <input
165
+ type="text"
166
+ class="w-full !bg-surface"
167
+ on:keydown={(event) => {
168
+ if (event.key === 'Enter') {
169
+ createVariant(variantName)
170
+ close(null)
171
+ }
172
+ }}
173
+ bind:value={variantName}
174
+ />
175
+ <Button
176
+ variant="border"
177
+ color="light"
178
+ size="xs"
179
+ on:click={() => {
180
+ createVariant(variantName)
181
+ close(null)
182
+ }}
183
+ disabled={!variantName}
184
+ >
185
+ Add
186
+ </Button>
187
+ </div>
188
+ </Label>
189
+ </Popup>
190
+ </div>
191
+ <div class="flex flex-row gap-2 items-center">
192
+ <span class="font-semibold text-sm">{oneOfSelected}</span>
193
+
194
+ <Popup
195
+ floatingConfig={{ strategy: 'absolute', placement: 'bottom-end' }}
196
+ containerClasses="border rounded-lg shadow-lg p-4 bg-surface"
197
+ let:close
198
+ >
199
+ <svelte:fragment slot="button">
200
+ <Button
201
+ size="xs2"
202
+ color="light"
203
+ startIcon={{ icon: Pen }}
204
+ propagateEvent
205
+ iconOnly={false}
206
+ on:click={() => {
207
+ if (oneOfSelected) {
208
+ variantName = oneOfSelected
209
+ }
210
+ }}
211
+ />
212
+ </svelte:fragment>
213
+ <Label label="Label">
214
+ <div class="flex flex-col gap-2">
215
+ <input
216
+ type="text"
217
+ class="w-full !bg-surface"
218
+ on:keydown={(event) => {
219
+ if (event.key === 'Enter') {
220
+ if (oneOfSelected) {
221
+ renameVariant(variantName, oneOfSelected)
222
+ close(null)
223
+ }
224
+ }
225
+ }}
226
+ bind:value={variantName}
227
+ />
228
+ <Button
229
+ variant="border"
230
+ color="light"
231
+ size="xs"
232
+ on:click={() => {
233
+ if (oneOfSelected) {
234
+ renameVariant(variantName, oneOfSelected)
235
+ close(null)
236
+ }
237
+ }}
238
+ disabled={!variantName}
239
+ >
240
+ Rename
241
+ </Button>
242
+ </div>
243
+ </Label>
244
+ </Popup>
245
+ <Button
246
+ size="xs2"
247
+ color="red"
248
+ startIcon={{ icon: Trash2 }}
249
+ iconOnly
250
+ disabled={schema.oneOf.length <= 2}
251
+ on:click={() => {
252
+ if (schema.oneOf && oneOfSelected) {
253
+ const idx = schema.oneOf.findIndex((obj) => obj.title === oneOfSelected)
254
+ schema.oneOf = schema.oneOf.filter((_, i) => i !== idx)
255
+ oneOfSelected = schema.oneOf[0].title
256
+ }
257
+ }}
258
+ />
259
+ </div>
260
+ {#if oneOfSelected && schema.oneOf}
261
+ {@const idx = schema.oneOf.findIndex((obj) => obj.title === oneOfSelected)}
262
+ <EditableSchemaDrawer bind:schema={schema.oneOf[idx]} />
263
+ {/if}
264
+ {:else if type === 'object' && format !== 'resource-s3_object'}
265
+ <Tabs
266
+ selected="resource"
267
+ on:selected={(e) => {
268
+ if (e.detail === 'custom-object') {
269
+ format = ''
270
+ }
271
+ }}
272
+ >
273
+ <Tab value="resource">Resource</Tab>
274
+ <Tab value="custom-object">Custom Object</Tab>
275
+ <svelte:fragment slot="content">
276
+ <div class="pt-2">
277
+ <TabContent value="custom-object">
278
+ <EditableSchemaDrawer bind:schema />
279
+ </TabContent>
280
+
281
+ <TabContent value="resource">
282
+ <ObjectTypeNarrowing bind:format />
283
+ </TabContent>
284
+ </div>
285
+ </svelte:fragment>
286
+ </Tabs>
287
+ {/if}
288
+
289
+ {#if !(type === 'object' && oneOf && oneOf.length >= 2)}
290
+ <Label label="Default">
291
+ {#if lightweightMode}
292
+ <LightweightArgInput
293
+ bind:value={defaultValue}
294
+ type={password ? 'string' : type}
295
+ displayHeader={false}
296
+ {pattern}
297
+ {customErrorMessage}
298
+ {itemsType}
299
+ {contentEncoding}
300
+ {format}
301
+ {extra}
302
+ />
303
+ {:else}
304
+ <ArgInput
305
+ {itemPicker}
306
+ resourceTypes={getResourceTypesFromFormat(format)}
307
+ bind:value={defaultValue}
308
+ type={password ? 'string' : type}
309
+ displayHeader={false}
310
+ {pattern}
311
+ {customErrorMessage}
312
+ {itemsType}
313
+ {contentEncoding}
314
+ {format}
315
+ {extra}
316
+ {nullable}
317
+ {variableEditor}
318
+ compact
319
+ noMargin
320
+ />
321
+ {/if}
322
+ </Label>
323
+ {/if}
324
+
325
+ <div class="flex flex-row gap-2">
326
+ <Toggle
327
+ options={{ right: 'Required' }}
328
+ size="xs"
329
+ disabled={type === 'boolean'}
330
+ on:change={(event) => {
331
+ dispatch('requiredChange', { required: event?.detail })
332
+ }}
333
+ checked={required}
334
+ on:change={(event) => {
335
+ if (event?.detail) {
336
+ nullable = false
337
+ }
338
+ }}
339
+ />
340
+ {#if type === 'string'}
341
+ <Toggle
342
+ options={{
343
+ right: 'Nullable',
344
+ rightTooltip: 'If enabled, the default value will be null and not an empty string.'
345
+ }}
346
+ lightMode
347
+ size="xs"
348
+ bind:checked={nullable}
349
+ disabled={required}
350
+ />
351
+ {/if}
352
+ </div>
353
+
354
+ {#if displayWebhookWarning && !(type === 'object' && oneOf && oneOf.length >= 2)}
355
+ <Alert type="info" title="Default not used by webhooks" size="xs" collapsible>
356
+ If this flow is triggered by a webhook, the default value will not replace a missing value
357
+ from the payload. It will only be used as the default value in the autogenerated UI. We
358
+ recommend using default values in the signature of the steps where this value is used (using
359
+ `x=default`) to have the desired behavior.
360
+ </Alert>
361
+ {/if}
362
+ </div>
363
+ <div>
364
+ <Toggle
365
+ size="xs"
366
+ options={{ right: 'Show this field only when conditions are met' }}
367
+ checked={Boolean(showExpr)}
368
+ on:change={() => {
369
+ showExpr = showExpr ? undefined : 'true //fields.foo == 42'
370
+ }}
371
+ />
372
+ {#if showExpr != undefined}
373
+ <div class="border">
374
+ <SimpleEditor
375
+ extraLib={`declare const fields: Record<${propsNames
376
+ ?.filter((x) => x != name)
377
+ .map((x) => `"${x}"`)
378
+ .join(' | ')}, any>;\n`}
379
+ lang="javascript"
380
+ bind:code={showExpr}
381
+ shouldBindKey={false}
382
+ fixedOverflowWidgets={false}
383
+ autoHeight
384
+ />
385
+ </div>
386
+ <div class="flex flex-row-reverse text-2xs text-tertiary">
387
+ <div>
388
+ Other fields are available under <code>fields</code> (e.g:
389
+ <code>fields.foo == 42</code>)
390
+ </div>
391
+ </div>
392
+ {/if}
393
+ </div>
@@ -0,0 +1,47 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type ItemPicker from '../ItemPicker.svelte';
3
+ import type VariableEditor from '../VariableEditor.svelte';
4
+ import type { SchemaProperty } from '../../common';
5
+ declare const __propDef: {
6
+ props: {
7
+ format?: string | undefined;
8
+ contentEncoding?: 'base64' | 'binary' | undefined;
9
+ type?: string | undefined;
10
+ oneOf?: SchemaProperty[] | undefined;
11
+ required?: boolean | undefined;
12
+ pattern?: undefined | string;
13
+ password?: boolean | undefined;
14
+ variableEditor?: VariableEditor | undefined;
15
+ itemPicker?: ItemPicker | undefined;
16
+ nullable?: boolean | undefined;
17
+ defaultValue?: any;
18
+ propsNames?: any;
19
+ showExpr?: string | undefined;
20
+ extra?: Record<string, any> | undefined;
21
+ customErrorMessage?: string | undefined;
22
+ itemsType?: {
23
+ type?: "string" | "number" | "object" | "bytes" | undefined;
24
+ contentEncoding?: "base64" | undefined;
25
+ enum?: string[] | undefined;
26
+ multiselect?: string[] | undefined;
27
+ } | undefined;
28
+ properties?: Record<string, any> | undefined;
29
+ order?: string[] | undefined;
30
+ requiredProperty?: string[] | undefined;
31
+ displayWebhookWarning?: boolean | undefined;
32
+ lightweightMode?: boolean | undefined;
33
+ };
34
+ events: {
35
+ requiredChange: CustomEvent<any>;
36
+ schemaChange: CustomEvent<any>;
37
+ } & {
38
+ [evt: string]: CustomEvent<any>;
39
+ };
40
+ slots: {};
41
+ };
42
+ export type FlowPropertyEditorProps = typeof __propDef.props;
43
+ export type FlowPropertyEditorEvents = typeof __propDef.events;
44
+ export type FlowPropertyEditorSlots = typeof __propDef.slots;
45
+ export default class FlowPropertyEditor extends SvelteComponent<FlowPropertyEditorProps, FlowPropertyEditorEvents, FlowPropertyEditorSlots> {
46
+ }
47
+ export {};
@@ -0,0 +1,185 @@
1
+ <script>import autosize from '../../autosize';
2
+ import { shouldDisplayPlaceholder } from '../../utils';
3
+ import { twMerge } from 'tailwind-merge';
4
+ import ArrayTypeNarrowing from '../ArrayTypeNarrowing.svelte';
5
+ import Label from '../Label.svelte';
6
+ import NumberTypeNarrowing from '../NumberTypeNarrowing.svelte';
7
+ import StringTypeNarrowing from '../StringTypeNarrowing.svelte';
8
+ import Tooltip from '../Tooltip.svelte';
9
+ import EditableSchemaForm from '../EditableSchemaForm.svelte';
10
+ import { deepEqual } from 'fast-equals';
11
+ import ToggleButtonGroup from '../common/toggleButton-v2/ToggleButtonGroup.svelte';
12
+ import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
13
+ export let description = '';
14
+ export let format = '';
15
+ export let contentEncoding = undefined;
16
+ export let type = undefined;
17
+ export let oneOf = undefined;
18
+ export let pattern = undefined;
19
+ export let enum_ = undefined;
20
+ export let extra = {};
21
+ export let minW = true;
22
+ export let customErrorMessage = undefined;
23
+ export let title = undefined;
24
+ export let placeholder = undefined;
25
+ export let properties = {};
26
+ export let isFlowInput = false;
27
+ export let isAppInput = false;
28
+ export let order = [];
29
+ export let itemsType = undefined;
30
+ let el = undefined;
31
+ let oneOfSelected = (oneOf && oneOf.length >= 2 && oneOf[0]['title']) || undefined;
32
+ let oneOfSchemas = undefined;
33
+ function updateOneOfSchemas(oneOf) {
34
+ if (oneOf && oneOf.length >= 2) {
35
+ oneOfSchemas = oneOf.map((obj) => {
36
+ return {
37
+ properties: obj.properties
38
+ ? Object.fromEntries(Object.entries(obj.properties).filter(([k, v]) => k !== 'label'))
39
+ : {},
40
+ order: obj.order
41
+ };
42
+ });
43
+ }
44
+ }
45
+ $: updateOneOfSchemas(oneOf);
46
+ export function focus() {
47
+ el?.focus();
48
+ if (el) {
49
+ el.style.height = '5px';
50
+ el.style.height = el.scrollHeight + 50 + 'px';
51
+ }
52
+ }
53
+ function onKeyDown(e) {
54
+ if ((e.ctrlKey || e.metaKey) && e.key == 'Enter') {
55
+ return;
56
+ }
57
+ e.stopPropagation();
58
+ }
59
+ let schema = {
60
+ properties,
61
+ order
62
+ };
63
+ $: (properties || order) && updateSchema();
64
+ function updateSchema() {
65
+ if (!deepEqual(schema.properties, properties) || !deepEqual(schema.order, order)) {
66
+ schema = {
67
+ properties,
68
+ order
69
+ };
70
+ }
71
+ }
72
+ </script>
73
+
74
+ <div class="flex flex-row items-center justify-between w-full gap-2">
75
+ <!-- svelte-ignore a11y-autofocus -->
76
+ <div class={twMerge('flex flex-col w-full', 'gap-4', minW ? 'min-w-[250px]' : '')}>
77
+ <slot name="typeeditor" />
78
+
79
+ <Label label="Description">
80
+ <textarea
81
+ use:autosize
82
+ rows="2"
83
+ bind:value={description}
84
+ on:keydown={onKeyDown}
85
+ placeholder="Field description"
86
+ />
87
+ </Label>
88
+
89
+ <Label label="Custom Title" class="w-full">
90
+ <svelte:fragment slot="header">
91
+ <Tooltip light>Will be displayed in the UI instead of the field name.</Tooltip>
92
+ </svelte:fragment>
93
+ <input bind:value={title} on:keydown={onKeyDown} placeholder="Field title" />
94
+ </Label>
95
+
96
+ <Label label="Placeholder">
97
+ <svelte:fragment slot="header">
98
+ <Tooltip light>
99
+ Will be displayed in the input field when the field is empty. If not set, the default
100
+ value will be used. The placeholder is disabled depending on the field typ, format, etc.
101
+ </Tooltip>
102
+ </svelte:fragment>
103
+
104
+ <textarea
105
+ placeholder="Enter a placeholder"
106
+ rows="1"
107
+ bind:value={placeholder}
108
+ disabled={!shouldDisplayPlaceholder(type, format, enum_, contentEncoding, pattern, extra)}
109
+ />
110
+ </Label>
111
+
112
+ {#if type == 'array'}
113
+ <ArrayTypeNarrowing bind:itemsType />
114
+ {:else if type == 'string' || ['number', 'integer', 'object'].includes(type ?? '')}
115
+ <div>
116
+ <Label label="Field settings">
117
+ <div>
118
+ {#if type == 'string'}
119
+ <StringTypeNarrowing
120
+ bind:customErrorMessage
121
+ bind:format
122
+ bind:pattern
123
+ bind:enum_
124
+ bind:contentEncoding
125
+ bind:password={extra['password']}
126
+ bind:minRows={extra['minRows']}
127
+ bind:disableCreate={extra['disableCreate']}
128
+ bind:disableVariablePicker={extra['disableVariablePicker']}
129
+ bind:dateFormat={extra['dateFormat']}
130
+ bind:enumLabels={extra['enumLabels']}
131
+ originalType={extra['originalType']}
132
+ overrideAllowKindChange={isFlowInput || isAppInput}
133
+ />
134
+ {:else if type == 'number' || type == 'integer'}
135
+ <NumberTypeNarrowing
136
+ bind:min={extra['min']}
137
+ bind:max={extra['max']}
138
+ bind:currency={extra['currency']}
139
+ bind:currencyLocale={extra['currencyLocale']}
140
+ />
141
+ {:else if type == 'object' && oneOf && oneOf.length >= 2 && !isFlowInput && !isAppInput}
142
+ <ToggleButtonGroup bind:selected={oneOfSelected} class="mb-2">
143
+ {#each oneOf as obj}
144
+ <ToggleButton value={obj.title} label={obj.title} />
145
+ {/each}
146
+ </ToggleButtonGroup>
147
+ {#if oneOfSelected && oneOfSchemas}
148
+ {@const idx = oneOf.findIndex((obj) => obj.title === oneOfSelected)}
149
+ <div class="border">
150
+ <EditableSchemaForm
151
+ on:change
152
+ noPreview
153
+ bind:schema={oneOfSchemas[idx]}
154
+ uiOnly
155
+ jsonEnabled={false}
156
+ />
157
+ </div>
158
+ {/if}
159
+ {:else if type == 'object' && !format?.startsWith('resource-') && !isFlowInput && !isAppInput}
160
+ <div class="border">
161
+ <EditableSchemaForm on:change noPreview bind:schema uiOnly jsonEnabled={false} />
162
+ </div>
163
+ {:else}
164
+ <div class="text-tertiary text-xs">No settings available for this field type</div>
165
+ {/if}
166
+ </div>
167
+ </Label>
168
+ </div>
169
+ {/if}
170
+
171
+ <slot />
172
+ </div>
173
+ </div>
174
+
175
+ <style>
176
+ input::-webkit-outer-spin-button,
177
+ input::-webkit-inner-spin-button {
178
+ -webkit-appearance: none !important;
179
+ margin: 0;
180
+ }
181
+
182
+ /* Firefox */
183
+ input[type='number'] {
184
+ -moz-appearance: textfield !important;
185
+ }</style>
@@ -0,0 +1,46 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { EnumType } from '../../common';
3
+ import type { SchemaProperty } from '../../common';
4
+ declare const __propDef: {
5
+ props: {
6
+ description?: string | undefined;
7
+ format?: string | undefined;
8
+ contentEncoding?: 'base64' | 'binary' | undefined;
9
+ type?: string | undefined;
10
+ oneOf?: SchemaProperty[] | undefined;
11
+ pattern?: undefined | string;
12
+ enum_?: EnumType;
13
+ extra?: Record<string, any> | undefined;
14
+ minW?: boolean | undefined;
15
+ customErrorMessage?: string | undefined;
16
+ title?: string | undefined;
17
+ placeholder?: string | undefined;
18
+ properties?: Record<string, any> | undefined;
19
+ isFlowInput?: boolean | undefined;
20
+ isAppInput?: boolean | undefined;
21
+ order?: string[] | undefined;
22
+ itemsType?: {
23
+ type?: "string" | "number" | "object" | "bytes" | undefined;
24
+ contentEncoding?: "base64" | undefined;
25
+ enum?: string[] | undefined;
26
+ multiselect?: string[] | undefined;
27
+ } | undefined;
28
+ focus?: (() => void) | undefined;
29
+ };
30
+ events: {
31
+ change: CustomEvent<any>;
32
+ } & {
33
+ [evt: string]: CustomEvent<any>;
34
+ };
35
+ slots: {
36
+ typeeditor: {};
37
+ default: {};
38
+ };
39
+ };
40
+ export type PropertyEditorProps = typeof __propDef.props;
41
+ export type PropertyEditorEvents = typeof __propDef.events;
42
+ export type PropertyEditorSlots = typeof __propDef.slots;
43
+ export default class PropertyEditor extends SvelteComponent<PropertyEditorProps, PropertyEditorEvents, PropertyEditorSlots> {
44
+ get focus(): () => void;
45
+ }
46
+ export {};