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
@@ -2,7 +2,6 @@
2
2
  import { userStore, workspaceStore } from '../stores';
3
3
  import AutoComplete from 'simple-svelte-autocomplete';
4
4
  import { createEventDispatcher } from 'svelte';
5
- import autosize from '../autosize';
6
5
  import { Button } from './common';
7
6
  import Skeleton from './common/skeleton/Skeleton.svelte';
8
7
  import TableCustom from './TableCustom.svelte';
@@ -10,6 +9,8 @@ import { sendUserToast } from '../toast';
10
9
  import { canWrite } from '../utils';
11
10
  import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
12
11
  import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
12
+ import Section from './Section.svelte';
13
+ import Label from './Label.svelte';
13
14
  export let name;
14
15
  let can_write = false;
15
16
  let group;
@@ -17,6 +18,7 @@ let instance_group;
17
18
  let members = undefined;
18
19
  let usernames = [];
19
20
  let username = '';
21
+ let summary = '';
20
22
  const dispatch = createEventDispatcher();
21
23
  async function loadUsernames() {
22
24
  usernames = await UserService.listUsernames({ workspace: $workspaceStore });
@@ -58,10 +60,12 @@ async function loadGroup() {
58
60
  role: getRole(x)
59
61
  };
60
62
  });
63
+ summary = group.summary ?? '';
61
64
  }
62
65
  catch (e) {
63
66
  can_write = false;
64
67
  members = [];
68
+ summary = '';
65
69
  group = {
66
70
  name
67
71
  };
@@ -82,37 +86,28 @@ function getRole(x) {
82
86
  }
83
87
  </script>
84
88
 
85
- <div class="flex flex-col gap-6">
86
- <h1>{name}</h1>
87
- {#if group}
88
- <div class="flex flex-col gap-1">
89
- <textarea
90
- disabled={!can_write}
91
- rows="2"
92
- use:autosize
93
- bind:value={group.summary}
94
- placeholder="Summary of the group"
95
- />
96
- <div class="flex justify-end">
97
- <Button
98
- disabled={!can_write}
99
- size="xs"
100
- on:click={async () => {
101
- await GroupService.updateGroup({
102
- workspace: $workspaceStore ?? '',
103
- name,
104
- requestBody: { summary: group?.summary }
105
- })
106
- dispatch('update')
107
- sendUserToast('New summary saved')
108
- }}>Save Summary</Button
109
- >
110
- </div>
89
+ <Section label="Metadata" class="mb-4">
90
+ <Label label="Summary">
91
+ <div class="flex flex-row gap-2">
92
+ <input placeholder="Short summary to be displayed when listed" bind:value={summary} />
93
+ <Button
94
+ size="sm"
95
+ on:click={async () => {
96
+ await GroupService.updateGroup({
97
+ workspace: $workspaceStore ?? '',
98
+ name,
99
+ requestBody: { summary }
100
+ })
101
+ dispatch('update')
102
+ sendUserToast('Group summary updated')
103
+ loadGroup()
104
+ }}>Save</Button
105
+ >
111
106
  </div>
112
- {:else}
113
- <Skeleton layout={[[4]]} />
114
- {/if}
115
- <h2>Members ({members?.length ?? 0})</h2>
107
+ </Label>
108
+ </Section>
109
+
110
+ <Section label={`Members (${members?.length ?? 0})`}>
116
111
  {#if can_write}
117
112
  <div class="flex items-start">
118
113
  <AutoComplete required noInputStyles items={usernames} bind:selectedItem={username} />
@@ -202,13 +197,6 @@ function getRole(x) {
202
197
  label="Member"
203
198
  tooltip="A Member of a group can see everything the group can see, write to everything the group can write, and generally act on behalf of the group"
204
199
  />
205
-
206
- <!-- <ToggleButton position="center" value="manager" size="xs"
207
- >Manager <Tooltip
208
- >A manager of a group can manage the group, adding and removing users and
209
- change their roles. Being a manager does not make you a member.</Tooltip
210
- ></ToggleButton
211
- > -->
212
200
  <ToggleButton
213
201
  position="right"
214
202
  value="admin"
@@ -216,6 +204,15 @@ function getRole(x) {
216
204
  label="Admin"
217
205
  tooltip="An admin of a group is a member of a group that can also add and remove members to the group, or make them admin."
218
206
  />
207
+ {#if role === 'manager'}
208
+ <ToggleButton
209
+ value="manager"
210
+ size="xs"
211
+ label="Manager"
212
+ tooltip="A manager of a group can manage the group, adding and removing users and
213
+ change their roles. Being a manager does not make you a member"
214
+ />
215
+ {/if}
219
216
  </ToggleButtonGroup>
220
217
  </div>
221
218
  {:else}
@@ -262,58 +259,6 @@ function getRole(x) {
262
259
  </tbody>
263
260
  </TableCustom>
264
261
  {/if}
265
-
266
- <!-- <h2 class="mt-10"
267
- >Groups managing this group <Tooltip>Any member of those groups can manage this group</Tooltip
268
- ></h2
269
- >
270
- {#if can_write}
271
- <div class="flex items-start">
272
- <AutoComplete items={groups} bind:selectedItem={new_managing_group} />
273
- <Button
274
- variant="contained"
275
- color="blue"
276
- size="sm"
277
- btnClasses="!ml-4"
278
- on:click={addToManagingGroup}
279
- >
280
- Add group managing this group
281
- </Button>
282
- </div>
283
- {/if}
284
- {#if managing_groups.length == 0}
285
- <p class="text-tertiary text-sm">No group is managing this group</p>
286
- {:else}
287
- <TableCustom>
288
- <tr slot="header-row">
289
- <th>group</th>
290
- <th />
291
- </tr>
292
- <tbody slot="body">
293
- {#each managing_groups as managing_group}<tr>
294
- <td>{managing_group.split('/')[1]}</td>
295
- <td>
296
- {#if can_write}
297
- <button
298
- class="ml-2 text-red-500"
299
- on:click={async () => {
300
- await GranularAclService.removeGranularAcls({
301
- workspace: $workspaceStore ?? '',
302
- path: name,
303
- kind: 'group_',
304
- requestBody: {
305
- owner: managing_group
306
- }
307
- })
308
- loadGroup()
309
- }}>remove</button
310
- >
311
- {/if}</td
312
- >
313
- </tr>{/each}
314
- </tbody>
315
- </TableCustom>
316
- {/if} -->
317
262
  {:else}
318
263
  <div class="flex flex-col">
319
264
  {#each new Array(6) as _}
@@ -321,4 +266,4 @@ function getRole(x) {
321
266
  {/each}
322
267
  </div>
323
268
  {/if}
324
- </div>
269
+ </Section>
@@ -12,7 +12,7 @@ async function loadMembers() {
12
12
  {#if members}
13
13
  <Popover
14
14
  ><div class="inline-flex gap-1 items-end"
15
- ><span class="text-tertiary text-xs mb-0.5">({members.length})</span>
15
+ ><span class="text-tertiary text-xs">({members.length})</span>
16
16
  <div class="max-w-xs truncate"
17
17
  ><span class="text-tertiary text-xs">{members?.join(', ')}</span></div
18
18
  ></div
@@ -1,4 +1,4 @@
1
- <script>import { getContext } from 'svelte';
1
+ <script>import { createEventDispatcher, getContext } from 'svelte';
2
2
  import ArgInput from './ArgInput.svelte';
3
3
  import FieldHeader from './FieldHeader.svelte';
4
4
  import DynamicInputHelpBox from './flows/content/DynamicInputHelpBox.svelte';
@@ -28,6 +28,7 @@ export let enableAi = false;
28
28
  let monaco = undefined;
29
29
  let monacoTemplate = undefined;
30
30
  let argInput = undefined;
31
+ const dispatch = createEventDispatcher();
31
32
  $: inputCat = computeInputCat(schema.properties[argName].type, schema.properties[argName].format, schema.properties[argName].items?.type, schema.properties[argName].enum, schema.properties[argName].contentEncoding);
32
33
  let propertyType = getPropertyType(arg);
33
34
  const { shouldUpdatePropertyType, exprsToSet } = getContext('FlowCopilotContext') || {};
@@ -325,6 +326,9 @@ loadResourceTypes();
325
326
  }}
326
327
  bind:code={arg.value}
327
328
  fontSize={14}
329
+ on:change={() => {
330
+ dispatch('change', { argName })
331
+ }}
328
332
  />
329
333
  {/if}
330
334
  </div>
@@ -338,11 +342,16 @@ loadResourceTypes();
338
342
  on:blur={() => {
339
343
  focused = false
340
344
  }}
345
+ shouldDispatchChanges
346
+ on:change={() => {
347
+ dispatch('change', { argName })
348
+ }}
341
349
  label={argName}
342
350
  bind:editor={monaco}
343
351
  bind:description={schema.properties[argName].description}
344
352
  bind:value={arg.value}
345
353
  type={schema.properties[argName].type}
354
+ oneOf={schema.properties[argName].oneOf}
346
355
  required={schema.required.includes(argName)}
347
356
  bind:pattern={schema.properties[argName].pattern}
348
357
  bind:valid={inputCheck}
@@ -368,6 +377,9 @@ loadResourceTypes();
368
377
  <SimpleEditor
369
378
  bind:this={monaco}
370
379
  bind:code={arg.expr}
380
+ on:change={() => {
381
+ dispatch('change', { argName })
382
+ }}
371
383
  {extraLib}
372
384
  lang="javascript"
373
385
  shouldBindKey={false}
@@ -378,6 +390,9 @@ loadResourceTypes();
378
390
  return false
379
391
  })
380
392
  }}
393
+ on:change={() => {
394
+ dispatch('change', { argName })
395
+ }}
381
396
  on:blur={() => {
382
397
  focused = false
383
398
  }}
@@ -22,6 +22,8 @@ declare const __propDef: {
22
22
  enableAi?: boolean | undefined;
23
23
  };
24
24
  events: {
25
+ change: CustomEvent<any>;
26
+ } & {
25
27
  [evt: string]: CustomEvent<any>;
26
28
  };
27
29
  slots: {};
@@ -1,6 +1,7 @@
1
1
  <script>import { VariableService } from '../gen';
2
2
  import { workspaceStore } from '../stores';
3
3
  import { allTrue } from '../utils';
4
+ import { createEventDispatcher } from 'svelte';
4
5
  import { Button } from './common';
5
6
  import StepInputsGen from './copilot/StepInputsGen.svelte';
6
7
  import InputTransformForm from './InputTransformForm.svelte';
@@ -19,6 +20,7 @@ export let enableAi = false;
19
20
  let clazz = '';
20
21
  export { clazz as class };
21
22
  let inputCheck = {};
23
+ const dispatch = createEventDispatcher();
22
24
  $: isValid = allTrue(inputCheck) ?? false;
23
25
  $: if (args == undefined || typeof args !== 'object') {
24
26
  args = {};
@@ -81,6 +83,10 @@ $: {
81
83
  {noDynamicToggle}
82
84
  {pickableProperties}
83
85
  {enableAi}
86
+ on:change={(e) => {
87
+ const { argName } = e.detail
88
+ dispatch('changeArg', { argName })
89
+ }}
84
90
  />
85
91
  </div>
86
92
  {/if}
@@ -17,6 +17,8 @@ declare const __propDef: {
17
17
  setArgs?: ((nargs: Record<string, InputTransform | any>) => void) | undefined;
18
18
  };
19
19
  events: {
20
+ changeArg: CustomEvent<any>;
21
+ } & {
20
22
  [evt: string]: CustomEvent<any>;
21
23
  };
22
24
  slots: {};
@@ -156,7 +156,9 @@ async function sendStats() {
156
156
  }
157
157
  let clientName = '';
158
158
  let licenseKeyChanged = false;
159
+ let renewing = false;
159
160
  export async function renewLicenseKey() {
161
+ renewing = true;
160
162
  try {
161
163
  await SettingService.renewLicenseKey();
162
164
  sendUserToast('Key renewal successful');
@@ -166,6 +168,20 @@ export async function renewLicenseKey() {
166
168
  latestKeyRenewalAttempt = await SettingService.getLatestKeyRenewalAttempt();
167
169
  throw err;
168
170
  }
171
+ finally {
172
+ renewing = false;
173
+ }
174
+ }
175
+ let opening = false;
176
+ export async function openCustomerPortal() {
177
+ opening = true;
178
+ try {
179
+ const url = await SettingService.createCustomerPortalSession();
180
+ window.open(url, '_blank');
181
+ }
182
+ finally {
183
+ opening = false;
184
+ }
169
185
  }
170
186
  </script>
171
187
 
@@ -468,9 +484,6 @@ export async function renewLicenseKey() {
468
484
  >
469
485
  Test Key
470
486
  </Button>
471
- {#if $enterpriseLicense}
472
- <Button on:click={renewLicenseKey} size="xs">Renew key</Button>
473
- {/if}
474
487
  </div>
475
488
  <div class="mt-1 flex flex-col gap-1 items-start">
476
489
  {#if values[setting.key]?.length > 0}
@@ -538,6 +551,26 @@ export async function renewLicenseKey() {
538
551
  </span>
539
552
  </div>
540
553
  {/if}
554
+
555
+ {#if $enterpriseLicense}
556
+ <div class="flex flex-row gap-2 mt-1">
557
+ <Button
558
+ on:click={renewLicenseKey}
559
+ loading={renewing}
560
+ size="xs"
561
+ color="dark"
562
+ >Renew key
563
+ </Button>
564
+ <Button
565
+ color="dark"
566
+ size="xs"
567
+ loading={opening}
568
+ on:click={openCustomerPortal}
569
+ >
570
+ Open customer portal
571
+ </Button>
572
+ </div>
573
+ {/if}
541
574
  </div>
542
575
  {:else if setting.fieldType == 'email'}
543
576
  <input
@@ -6,6 +6,7 @@ declare const __propDef: {
6
6
  hideSave?: boolean | undefined;
7
7
  saveSettings?: (() => Promise<void>) | undefined;
8
8
  renewLicenseKey?: (() => Promise<void>) | undefined;
9
+ openCustomerPortal?: (() => Promise<void>) | undefined;
9
10
  };
10
11
  events: {
11
12
  [evt: string]: CustomEvent<any>;
@@ -18,5 +19,6 @@ export type InstanceSettingsSlots = typeof __propDef.slots;
18
19
  export default class InstanceSettings extends SvelteComponent<InstanceSettingsProps, InstanceSettingsEvents, InstanceSettingsSlots> {
19
20
  get saveSettings(): () => Promise<void>;
20
21
  get renewLicenseKey(): () => Promise<void>;
22
+ get openCustomerPortal(): () => Promise<void>;
21
23
  }
22
24
  export {};
@@ -13,12 +13,12 @@ export let job;
13
13
  <Badge large color="green" icon={{ icon: CheckCircle2, position: 'left' }}>
14
14
  Success {job.is_skipped ? '(Skipped)' : ''}
15
15
  </Badge>
16
- <DurationMs duration_ms={job.duration_ms} />
16
+ <DurationMs duration_ms={job.duration_ms} self_wait_time_ms={job?.self_wait_time_ms} aggregate_wait_time_ms={job?.aggregate_wait_time_ms} />
17
17
  </div>
18
18
  {:else if job && 'success' in job}
19
19
  <div class="flex flex-row flex-wrap gap-y-1 mb-1 gap-x-2">
20
20
  <Badge large color="red" icon={{ icon: XCircle, position: 'left' }}>Failed</Badge>
21
- <DurationMs duration_ms={job.duration_ms} />
21
+ <DurationMs duration_ms={job.duration_ms} self_wait_time_ms={job?.self_wait_time_ms} aggregate_wait_time_ms={job?.aggregate_wait_time_ms} />
22
22
  </div>
23
23
  {:else if job && 'running' in job && job.running}
24
24
  <div>
@@ -1,6 +1,6 @@
1
1
  <script>import { setInputCat as computeInputCat, emptyString } from '../utils';
2
- import { Badge, Button } from './common';
3
- import { createEventDispatcher } from 'svelte';
2
+ import { Button } from './common';
3
+ import { createEventDispatcher, tick } from 'svelte';
4
4
  import FieldHeader from './FieldHeader.svelte';
5
5
  import autosize from '../autosize';
6
6
  import Toggle from './Toggle.svelte';
@@ -16,6 +16,8 @@ import DateInput from './DateInput.svelte';
16
16
  import CurrencyInput from './apps/components/inputs/currency/CurrencyInput.svelte';
17
17
  import Multiselect from 'svelte-multiselect';
18
18
  import Password from './Password.svelte';
19
+ import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
20
+ import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
19
21
  export let css = undefined;
20
22
  export let label = '';
21
23
  export let value;
@@ -24,6 +26,7 @@ export let description = '';
24
26
  export let format = '';
25
27
  export let contentEncoding = undefined;
26
28
  export let type = undefined;
29
+ export let oneOf = undefined;
27
30
  export let required = false;
28
31
  export let pattern = undefined;
29
32
  export let valid = required ? false : true;
@@ -38,6 +41,29 @@ export let customErrorMessage = undefined;
38
41
  export let render = true;
39
42
  export let title = undefined;
40
43
  export let placeholder = undefined;
44
+ let oneOfSelected = undefined;
45
+ async function updateOneOfSelected(oneOf) {
46
+ if (oneOf &&
47
+ oneOf.length >= 2 &&
48
+ (!oneOfSelected || !oneOf.some((o) => o.title === oneOfSelected))) {
49
+ if (value && value['label'] && oneOf.some((o) => o.title === value['label'])) {
50
+ const existingValue = JSON.parse(JSON.stringify(value));
51
+ oneOfSelected = value['label'];
52
+ await tick();
53
+ value = existingValue;
54
+ }
55
+ else {
56
+ oneOfSelected = oneOf[0]['title'];
57
+ }
58
+ }
59
+ }
60
+ $: updateOneOfSelected(oneOf);
61
+ function updateOneOfSelectedValue(oneOfSelected) {
62
+ if (oneOfSelected) {
63
+ value = { label: oneOfSelected };
64
+ }
65
+ }
66
+ $: updateOneOfSelectedValue(oneOfSelected);
41
67
  const dispatch = createEventDispatcher();
42
68
  export let error = '';
43
69
  let el = undefined;
@@ -176,14 +202,7 @@ function onRenderFalse() {
176
202
  <div class="flex space-x-1">
177
203
  {#if inputCat == 'number'}
178
204
  {#if extra['min'] != undefined && extra['max'] != undefined}
179
- <div class="flex w-full gap-1">
180
- <span>{extra['min']}</span>
181
- <div class="grow">
182
- <Range bind:value min={extra['min']} max={extra['max']} />
183
- </div>
184
- <span>{extra['max']}</span>
185
- <span class="mx-2"><Badge large color="blue">{value}</Badge></span>
186
- </div>
205
+ <Range bind:value min={extra['min']} max={extra['max']} {defaultValue} />
187
206
  {:else if extra?.currency}
188
207
  <CurrencyInput
189
208
  inputClasses={{
@@ -218,9 +237,12 @@ function onRenderFalse() {
218
237
  on:pointerdown={(e) => {
219
238
  e?.stopPropagation()
220
239
  }}
221
- class={valid && error == ''
222
- ? ''
223
- : 'border !border-red-700 !border-opacity-70 focus:!border-red-700 focus:!border-opacity-30'}
240
+ class={twMerge(
241
+ valid && error == ''
242
+ ? ''
243
+ : 'border !border-red-700 !border-opacity-70 focus:!border-red-700 focus:!border-opacity-30',
244
+ 'w-full'
245
+ )}
224
246
  bind:checked={value}
225
247
  />
226
248
  {#if type == 'boolean' && value == undefined}
@@ -327,6 +349,36 @@ function onRenderFalse() {
327
349
  </div>
328
350
  {:else if inputCat == 'resource-object'}
329
351
  <LightweightObjectResourceInput {format} bind:value />
352
+ {:else if inputCat == 'object' && oneOf && oneOf.length >= 2}
353
+ <div class="flex flex-col gap-2 w-full">
354
+ {#if oneOf && oneOf.length >= 2}
355
+ <ToggleButtonGroup bind:selected={oneOfSelected}>
356
+ {#each oneOf as obj}
357
+ <ToggleButton value={obj.title} label={obj.title} />
358
+ {/each}
359
+ </ToggleButtonGroup>
360
+
361
+ {#if oneOfSelected}
362
+ {@const objIdx = oneOf.findIndex((o) => o.title === oneOfSelected)}
363
+ {@const obj = oneOf[objIdx]}
364
+ {#if obj && obj.properties && Object.keys(obj.properties).length > 0}
365
+ <div class="p-4 pl-8 border rounded w-full">
366
+ <LightweightSchemaForm
367
+ schema={{
368
+ properties: Object.fromEntries(
369
+ Object.entries(obj.properties).filter(([k, v]) => k !== 'label')
370
+ ),
371
+ $schema: '',
372
+ required: obj.required ?? [],
373
+ type: 'object'
374
+ }}
375
+ bind:args={value}
376
+ />
377
+ </div>
378
+ {/if}
379
+ {/if}
380
+ {/if}
381
+ </div>
330
382
  {:else if inputCat == 'object'}
331
383
  {#if properties && Object.keys(properties).length > 0}
332
384
  <div class="p-4 pl-8 border rounded w-full">
@@ -364,7 +416,7 @@ function onRenderFalse() {
364
416
  bind:value
365
417
  >
366
418
  {#each enum_ ?? [] as e}
367
- <option>{e}</option>
419
+ <option value={e}>{extra?.['enumLabels']?.[e] ?? e}</option>
368
420
  {/each}
369
421
  </select>
370
422
  {:else if inputCat == 'date'}
@@ -1,5 +1,5 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import type { SchemaProperty } from '../common';
2
+ import type { EnumType, SchemaProperty } from '../common';
3
3
  import type { ComponentCustomCSS } from './apps/types';
4
4
  declare const __propDef: {
5
5
  props: {
@@ -11,10 +11,11 @@ declare const __propDef: {
11
11
  format?: string | undefined;
12
12
  contentEncoding?: 'base64' | 'binary' | undefined;
13
13
  type?: string | undefined;
14
+ oneOf?: SchemaProperty[] | undefined;
14
15
  required?: boolean | undefined;
15
16
  pattern?: undefined | string;
16
17
  valid?: boolean | undefined;
17
- enum_?: string[] | undefined;
18
+ enum_?: EnumType;
18
19
  itemsType?: {
19
20
  type?: "string" | "number" | "object" | "bytes" | undefined;
20
21
  contentEncoding?: "base64" | undefined;
@@ -1,6 +1,7 @@
1
1
  <script>import { twMerge } from 'tailwind-merge';
2
2
  import LightweightArgInput from './LightweightArgInput.svelte';
3
3
  import { allTrue, computeShow } from '../utils';
4
+ import { deepEqual } from 'fast-equals';
4
5
  export let css = undefined;
5
6
  export let schema;
6
7
  export let args = undefined;
@@ -15,7 +16,6 @@ $: isValid = allTrue(inputCheck) ?? false;
15
16
  $: if (args === undefined) {
16
17
  args = {};
17
18
  }
18
- reorder();
19
19
  export function invalidate(key, error) {
20
20
  inputCheck[key] = false;
21
21
  errors[key] = error;
@@ -28,27 +28,35 @@ export function validateAll() {
28
28
  inputCheck = Object.fromEntries(Object.entries(inputCheck).map((x) => [x[0], true]));
29
29
  errors = Object.fromEntries(Object.entries(errors).map((x) => [x[0], '']));
30
30
  }
31
+ let keys = Array.isArray(schema?.order)
32
+ ? schema?.order
33
+ : Object.keys(schema?.properties ?? {});
34
+ $: schema && reorder();
31
35
  function reorder() {
32
- console.log('reorder');
33
- if (schema?.order && Array.isArray(schema.order)) {
34
- const n = {};
35
- schema.order.forEach((x) => {
36
- if (schema.properties && schema.properties[x] != undefined) {
36
+ let lkeys = Object.keys(schema?.properties ?? {});
37
+ if (!deepEqual(schema?.order, lkeys) || !deepEqual(keys, lkeys)) {
38
+ console.debug('reorder');
39
+ if (schema?.order && Array.isArray(schema.order)) {
40
+ const n = {};
41
+ schema.order.forEach((x) => {
42
+ if (schema.properties && schema.properties[x] != undefined) {
43
+ n[x] = schema.properties[x];
44
+ }
45
+ });
46
+ Object.keys(schema.properties ?? {})
47
+ .filter((x) => !schema.order?.includes(x))
48
+ .forEach((x) => {
37
49
  n[x] = schema.properties[x];
38
- }
39
- });
40
- Object.keys(schema.properties ?? {})
41
- .filter((x) => !schema.order?.includes(x))
42
- .forEach((x) => {
43
- n[x] = schema.properties[x];
44
- });
45
- schema.properties = n;
50
+ });
51
+ schema.properties = n;
52
+ }
53
+ keys = Object.keys(schema.properties ?? {});
46
54
  }
47
55
  }
48
56
  </script>
49
57
 
50
58
  <div class={twMerge('w-full flex flex-col px-0.5 pb-2', largeGap ? 'gap-8' : 'gap-2')}>
51
- {#each Object.keys(schema.properties ?? {}) as argName (argName)}
59
+ {#each keys as argName (argName)}
52
60
  {#if typeof args == 'object' && schema?.properties[argName] && args}
53
61
  <LightweightArgInput
54
62
  render={computeShow(argName, schema?.properties[argName].showExpr, args)}
@@ -58,6 +66,7 @@ function reorder() {
58
66
  bind:valid={inputCheck[argName]}
59
67
  bind:error={errors[argName]}
60
68
  type={schema.properties[argName].type}
69
+ oneOf={schema.properties[argName].oneOf}
61
70
  required={schema.required?.includes(argName) ?? false}
62
71
  pattern={schema.properties[argName].pattern}
63
72
  defaultValue={defaultValues?.[argName] ?? schema.properties[argName].default}
@@ -65,6 +65,7 @@ loadResourceTypes();
65
65
  description={schema.properties[argName].description}
66
66
  bind:value={args[argName]}
67
67
  type={schema.properties[argName].type}
68
+ oneOf={schema.properties[argName].oneOf}
68
69
  required={schema.required.includes(argName)}
69
70
  pattern={schema.properties[argName].pattern}
70
71
  bind:editor={editor[argName]}