windmill-components 1.109.8 → 1.121.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 (216) hide show
  1. package/package/cloud.js +0 -14
  2. package/package/common.d.ts +1 -0
  3. package/package/components/ArgEnum.svelte +53 -0
  4. package/package/components/ArgEnum.svelte.d.ts +24 -0
  5. package/package/components/ArgInfo.svelte +26 -14
  6. package/package/components/ArgInput.svelte +69 -83
  7. package/package/components/ArgInput.svelte.d.ts +2 -0
  8. package/package/components/ArrayTypeNarrowing.svelte +73 -0
  9. package/package/components/ArrayTypeNarrowing.svelte.d.ts +20 -0
  10. package/package/components/CenteredModal.svelte +7 -9
  11. package/package/components/DeployToSetting.svelte +35 -0
  12. package/package/components/DeployToSetting.svelte.d.ts +16 -0
  13. package/package/components/DeployWorkspace.svelte +555 -0
  14. package/package/components/DeployWorkspace.svelte.d.ts +23 -0
  15. package/package/components/DeployWorkspaceDrawer.svelte +35 -0
  16. package/package/components/DeployWorkspaceDrawer.svelte.d.ts +17 -0
  17. package/package/components/DiffDrawer.svelte +60 -0
  18. package/package/components/DiffDrawer.svelte.d.ts +23 -0
  19. package/package/components/DisplayResult.svelte +17 -24
  20. package/package/components/DraftBadge.svelte +1 -1
  21. package/package/components/Editor.svelte +0 -4
  22. package/package/components/EditorBar.svelte +127 -26
  23. package/package/components/EditorBar.svelte.d.ts +1 -0
  24. package/package/components/FieldHeader.svelte +2 -2
  25. package/package/components/FlowBuilder.svelte +9 -0
  26. package/package/components/FlowBuilder.svelte.d.ts +6 -0
  27. package/package/components/FlowJobResult.svelte +3 -2
  28. package/package/components/FlowJobResult.svelte.d.ts +1 -0
  29. package/package/components/FlowStatusViewer.svelte +6 -39
  30. package/package/components/FlowStatusWaitingForEvents.svelte +64 -0
  31. package/package/components/FlowStatusWaitingForEvents.svelte.d.ts +19 -0
  32. package/package/components/InputTransformForm.svelte +21 -11
  33. package/package/components/InputTransformForm.svelte.d.ts +1 -1
  34. package/package/components/InputTransformSchemaForm.svelte +1 -1
  35. package/package/components/JobArgs.svelte +120 -27
  36. package/package/components/LightweightArgInput.svelte +28 -15
  37. package/package/components/LightweightArgInput.svelte.d.ts +1 -0
  38. package/package/components/LightweightSchemaForm.svelte +24 -24
  39. package/package/components/LogViewer.svelte +23 -11
  40. package/package/components/LogViewer.svelte.d.ts +1 -0
  41. package/package/components/ModulePreview.svelte +7 -1
  42. package/package/components/ModulePreviewForm.svelte +8 -0
  43. package/package/components/ModulePreviewForm.svelte.d.ts +1 -1
  44. package/package/components/MoveDrawer.svelte +3 -3
  45. package/package/components/Path.svelte +27 -7
  46. package/package/components/Popover.svelte +11 -2
  47. package/package/components/Popover.svelte.d.ts +1 -0
  48. package/package/components/Required.svelte +1 -1
  49. package/package/components/ResourcePicker.svelte +7 -1
  50. package/package/components/RunForm.svelte +15 -8
  51. package/package/components/RunForm.svelte.d.ts +2 -0
  52. package/package/components/SchemaEditor.svelte +14 -12
  53. package/package/components/SchemaForm.svelte +9 -2
  54. package/package/components/SchemaModal.svelte +9 -5
  55. package/package/components/ScriptBuilder.svelte +21 -19
  56. package/package/components/ScriptEditor.svelte +6 -19
  57. package/package/components/ScriptPicker.svelte +13 -7
  58. package/package/components/ScriptVersionHistory.svelte +57 -0
  59. package/package/components/ScriptVersionHistory.svelte.d.ts +16 -0
  60. package/package/components/SimpleEditor.svelte +3 -1
  61. package/package/components/SimpleEditor.svelte.d.ts +1 -0
  62. package/package/components/Slider.svelte +2 -1
  63. package/package/components/Slider.svelte.d.ts +1 -0
  64. package/package/components/SuperadminSettings.svelte +12 -14
  65. package/package/components/SuperadminSettings.svelte.d.ts +0 -2
  66. package/package/components/Toast.svelte +1 -1
  67. package/package/components/Uptodate.svelte +26 -0
  68. package/package/components/Uptodate.svelte.d.ts +14 -0
  69. package/package/components/UserSettings.svelte +8 -12
  70. package/package/components/UserSettings.svelte.d.ts +0 -2
  71. package/package/components/Version.svelte +9 -0
  72. package/package/components/Version.svelte.d.ts +14 -0
  73. package/package/components/apps/components/buttons/AppButton.svelte +2 -2
  74. package/package/components/apps/components/buttons/AppForm.svelte +1 -2
  75. package/package/components/apps/components/buttons/AppFormButton.svelte +35 -38
  76. package/package/components/apps/components/buttons/AppSchemaForm.svelte +5 -0
  77. package/package/components/apps/components/display/AppChartJs.svelte +4 -3
  78. package/package/components/apps/components/display/AppFlowStatusComponent.svelte +2 -2
  79. package/package/components/apps/components/display/AppLogsComponent.svelte +7 -1
  80. package/package/components/apps/components/display/AppMap.svelte +11 -7
  81. package/package/components/apps/components/display/PlotlyHtml.svelte +1 -1
  82. package/package/components/apps/components/display/VegaLiteHtml.svelte +1 -1
  83. package/package/components/apps/components/display/table/AppAggridTable.svelte +86 -39
  84. package/package/components/apps/components/display/table/AppTable.svelte +29 -3
  85. package/package/components/apps/components/display/table/AppTableFooter.svelte +48 -43
  86. package/package/components/apps/components/display/table/AppTableFooter.svelte.d.ts +1 -0
  87. package/package/components/apps/components/helpers/InputValue.svelte +25 -3
  88. package/package/components/apps/components/helpers/RunnableComponent.svelte +14 -3
  89. package/package/components/apps/components/helpers/eval.d.ts +1 -0
  90. package/package/components/apps/components/helpers/eval.js +3 -1
  91. package/package/components/apps/components/inputs/AppCheckbox.svelte +5 -0
  92. package/package/components/apps/components/inputs/AppMultiSelect.svelte +1 -1
  93. package/package/components/apps/components/inputs/AppNumberInput.svelte +8 -1
  94. package/package/components/apps/components/inputs/AppQuillEditor.svelte +78 -0
  95. package/package/components/apps/components/inputs/AppQuillEditor.svelte.d.ts +27 -0
  96. package/package/components/apps/components/inputs/AppRangeInput.svelte +8 -1
  97. package/package/components/apps/components/inputs/AppSelect.svelte +17 -2
  98. package/package/components/apps/components/inputs/AppSliderInputs.svelte +18 -5
  99. package/package/components/apps/components/inputs/AppTextInput.svelte +66 -57
  100. package/package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +5 -0
  101. package/package/components/apps/components/layout/AppDrawer.svelte +2 -2
  102. package/package/components/apps/components/layout/AppList.svelte +112 -0
  103. package/package/components/apps/components/layout/AppList.svelte.d.ts +23 -0
  104. package/package/components/apps/components/layout/AppModal.svelte +35 -33
  105. package/package/components/apps/components/layout/ListWrapper.svelte +23 -0
  106. package/package/components/apps/components/layout/ListWrapper.svelte.d.ts +23 -0
  107. package/package/components/apps/editor/AppEditor.svelte +3 -2
  108. package/package/components/apps/editor/AppEditorHeader.svelte +14 -9
  109. package/package/components/apps/editor/AppPreview.svelte +2 -2
  110. package/package/components/apps/editor/RecomputeAllComponents.svelte +4 -0
  111. package/package/components/apps/editor/SettingsPanel.svelte +1 -1
  112. package/package/components/apps/editor/SubGridEditor.svelte +4 -2
  113. package/package/components/apps/editor/appUtils.d.ts +1 -1
  114. package/package/components/apps/editor/appUtils.js +2 -2
  115. package/package/components/apps/editor/component/Component.svelte +13 -0
  116. package/package/components/apps/editor/component/ComponentNavigation.svelte +9 -7
  117. package/package/components/apps/editor/component/ComponentWrapper.svelte +1 -4
  118. package/package/components/apps/editor/component/components.d.ts +138 -3
  119. package/package/components/apps/editor/component/components.js +131 -4
  120. package/package/components/apps/editor/component/default-codes.js +65 -35
  121. package/package/components/apps/editor/component/sets.js +2 -0
  122. package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +6 -0
  123. package/package/components/apps/editor/contextPanel/components/IdEditor.svelte +2 -2
  124. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +2 -1
  125. package/package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +3 -2
  126. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +1 -1
  127. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +3 -3
  128. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +1 -1
  129. package/package/components/apps/editor/settingsPanel/GridCondition.svelte +1 -1
  130. package/package/components/apps/editor/settingsPanel/GridPane.svelte +1 -2
  131. package/package/components/apps/editor/settingsPanel/GridTab.svelte +2 -2
  132. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +6 -2
  133. package/package/components/apps/editor/settingsPanel/Recompute.svelte +1 -1
  134. package/package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte +16 -2
  135. package/package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte.d.ts +1 -0
  136. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +7 -4
  137. package/package/components/apps/editor/settingsPanel/script/shared/ScriptRunConfiguration.svelte +2 -2
  138. package/package/components/apps/types.d.ts +8 -0
  139. package/package/components/apps/utils.js +2 -0
  140. package/package/components/common/badge/Badge.svelte +2 -1
  141. package/package/components/common/badge/Badge.svelte.d.ts +1 -0
  142. package/package/components/common/fileInput/FileInput.svelte +1 -1
  143. package/package/components/common/modal/AlwaysMountedModal.svelte +52 -54
  144. package/package/components/common/modal/AlwaysMountedModal.svelte.d.ts +1 -0
  145. package/package/components/common/table/AppRow.svelte +28 -1
  146. package/package/components/common/table/AppRow.svelte.d.ts +2 -0
  147. package/package/components/common/table/FlowRow.svelte +29 -2
  148. package/package/components/common/table/FlowRow.svelte.d.ts +2 -0
  149. package/package/components/common/table/RawAppRow.svelte +16 -0
  150. package/package/components/common/table/RawAppRow.svelte.d.ts +2 -0
  151. package/package/components/common/table/ScriptRow.svelte +29 -2
  152. package/package/components/common/table/ScriptRow.svelte.d.ts +2 -0
  153. package/package/components/common/tabs/Tab.svelte +2 -2
  154. package/package/components/common/tabs/Tabs.svelte +3 -6
  155. package/package/components/common/tabs/Tabs.svelte.d.ts +1 -1
  156. package/package/components/common/toggleButton-v2/ToggleButton.svelte +3 -1
  157. package/package/components/common/toggleButton-v2/ToggleButton.svelte.d.ts +1 -0
  158. package/package/components/flows/common/FlowCardHeader.svelte +13 -15
  159. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +8 -1
  160. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +8 -1
  161. package/package/components/flows/content/FlowLoop.svelte +8 -1
  162. package/package/components/flows/content/FlowModuleCache.svelte +1 -1
  163. package/package/components/flows/content/FlowModuleComponent.svelte +13 -4
  164. package/package/components/flows/content/FlowModuleHeader.svelte +27 -18
  165. package/package/components/flows/content/FlowModuleHeader.svelte.d.ts +1 -0
  166. package/package/components/flows/content/FlowModuleMock.svelte +51 -0
  167. package/package/components/flows/content/FlowModuleMock.svelte.d.ts +17 -0
  168. package/package/components/flows/content/FlowModuleSuspend.svelte +49 -2
  169. package/package/components/flows/flowExplorer.d.ts +11 -0
  170. package/package/components/flows/flowExplorer.js +137 -0
  171. package/package/components/flows/map/FlowErrorHandlerItem.svelte +3 -2
  172. package/package/components/flows/map/FlowModuleSchemaItem.svelte +13 -1
  173. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
  174. package/package/components/flows/map/FlowModuleSchemaMap.svelte +1 -1
  175. package/package/components/flows/map/MapItem.svelte +2 -1
  176. package/package/components/flows/previousResults.d.ts +0 -2
  177. package/package/components/flows/previousResults.js +1 -67
  178. package/package/components/graph/FlowGraph.svelte +71 -13
  179. package/package/components/graph/svelvet/container/views/GraphView.svelte +22 -0
  180. package/package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +2 -0
  181. package/package/components/graph/svelvet/container/views/Svelvet.svelte +13 -1
  182. package/package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +2 -0
  183. package/package/components/graph/svelvet/edges/models/Edge.d.ts +2 -1
  184. package/package/components/graph/svelvet/edges/models/Edge.js +3 -1
  185. package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte +2 -13
  186. package/package/components/graph/svelvet/store/controllers/util.js +1 -1
  187. package/package/components/graph/svelvet/types/types.d.ts +1 -0
  188. package/package/components/home/ItemsList.svelte +50 -41
  189. package/package/components/home/ListFilters.svelte +0 -1
  190. package/package/components/jobs/JobDetail.svelte +1 -1
  191. package/package/components/jobs/JobPreview.svelte +29 -13
  192. package/package/components/jobs/JobPreview.svelte.d.ts +1 -2
  193. package/package/components/scriptEditor/LogPanel.svelte +6 -1
  194. package/package/components/scriptEditor/LogPanel.svelte.d.ts +1 -1
  195. package/package/gen/core/OpenAPI.js +1 -1
  196. package/package/gen/index.d.ts +1 -0
  197. package/package/gen/models/EditResourceType.d.ts +1 -1
  198. package/package/gen/models/FlowModule.d.ts +7 -0
  199. package/package/gen/models/ScheduleWJobs.d.ts +8 -0
  200. package/package/gen/models/ScheduleWJobs.js +4 -0
  201. package/package/gen/services/DraftService.d.ts +10 -0
  202. package/package/gen/services/DraftService.js +16 -0
  203. package/package/gen/services/JobService.d.ts +24 -3
  204. package/package/gen/services/JobService.js +21 -3
  205. package/package/gen/services/ScheduleService.d.ts +17 -0
  206. package/package/gen/services/ScheduleService.js +18 -0
  207. package/package/gen/services/SettingsService.d.ts +6 -0
  208. package/package/gen/services/SettingsService.js +11 -0
  209. package/package/gen/services/WorkspaceService.d.ts +22 -0
  210. package/package/gen/services/WorkspaceService.js +30 -0
  211. package/package/infer.js +17 -3
  212. package/package/script_helpers.js +16 -5
  213. package/package/scripts.js +11 -1
  214. package/package/utils.d.ts +1 -0
  215. package/package/utils.js +1 -0
  216. package/package.json +21 -12
package/package/cloud.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { BROWSER } from 'esm-env';
2
- import { get } from 'svelte/store';
3
2
  import { premiumStore, userStore, workspaceStore } from './stores';
4
3
  import { getUserExt } from './user';
5
4
  import { WorkspaceService } from './gen';
@@ -25,17 +24,4 @@ if (BROWSER) {
25
24
  userStore.set(undefined);
26
25
  }
27
26
  });
28
- setInterval(async () => {
29
- try {
30
- const workspace = get(workspaceStore);
31
- const user = get(userStore);
32
- if (workspace && user && !user.is_super_admin && !user.is_admin) {
33
- userStore.set(await getUserExt(workspace));
34
- console.log('refreshed user');
35
- }
36
- }
37
- catch (e) {
38
- console.error('Could not refresh user', e);
39
- }
40
- }, 30000);
41
27
  }
@@ -21,6 +21,7 @@ export interface SchemaProperty {
21
21
  items?: {
22
22
  type?: 'string' | 'number' | 'bytes' | 'object';
23
23
  contentEncoding?: 'base64';
24
+ enum?: string[];
24
25
  };
25
26
  properties?: {
26
27
  [name: string]: SchemaProperty;
@@ -0,0 +1,53 @@
1
+ <script>import { Pen } from 'lucide-svelte';
2
+ import { createEventDispatcher } from 'svelte';
3
+ import { twMerge } from 'tailwind-merge';
4
+ export let customValue;
5
+ export let disabled;
6
+ export let value;
7
+ export let enum_;
8
+ export let autofocus;
9
+ export let defaultValue;
10
+ export let valid;
11
+ const dispatch = createEventDispatcher();
12
+ </script>
13
+
14
+ {#if !customValue}
15
+ <select
16
+ on:focus={(e) => {
17
+ dispatch('focus')
18
+ }}
19
+ {disabled}
20
+ class="px-6"
21
+ bind:value
22
+ >
23
+ {#each enum_ ?? [] as e}
24
+ <option>{e}</option>
25
+ {/each}
26
+ </select>
27
+ {:else}
28
+ <input
29
+ {autofocus}
30
+ on:focus
31
+ type="text"
32
+ class={twMerge(
33
+ 'secondaryBackground',
34
+ valid
35
+ ? ''
36
+ : 'border border-red-700 border-opacity-30 focus:border-red-700 focus:border-opacity-30 bg-red-100'
37
+ )}
38
+ placeholder={defaultValue ?? ''}
39
+ bind:value
40
+ />
41
+ {/if}
42
+
43
+ {#if !disabled}
44
+ <button
45
+ class="min-w-min !px-2 items-center text-gray-800 bg-gray-100 border rounded center-center hover:bg-gray-300 transition-all cursor-pointer"
46
+ on:click={() => {
47
+ customValue = !customValue
48
+ }}
49
+ title="Custom Value"
50
+ >
51
+ <Pen size={14} />
52
+ </button>
53
+ {/if}
@@ -0,0 +1,24 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ customValue: boolean;
5
+ disabled: boolean;
6
+ value: any;
7
+ enum_: string[] | undefined;
8
+ autofocus: boolean;
9
+ defaultValue: string | undefined;
10
+ valid: boolean;
11
+ };
12
+ events: {
13
+ focus: CustomEvent<any>;
14
+ } & {
15
+ [evt: string]: CustomEvent<any>;
16
+ };
17
+ slots: {};
18
+ };
19
+ export type ArgEnumProps = typeof __propDef.props;
20
+ export type ArgEnumEvents = typeof __propDef.events;
21
+ export type ArgEnumSlots = typeof __propDef.slots;
22
+ export default class ArgEnum extends SvelteComponentTyped<ArgEnumProps, ArgEnumEvents, ArgEnumSlots> {
23
+ }
24
+ export {};
@@ -1,7 +1,8 @@
1
1
  <script>import { ResourceService } from '../gen';
2
2
  import { workspaceStore } from '../stores';
3
- import { truncate } from '../utils';
4
- import { DrawerContent } from './common';
3
+ import { copyToClipboard, truncate } from '../utils';
4
+ import { ClipboardCopy, Expand } from 'lucide-svelte';
5
+ import { Button, DrawerContent } from './common';
5
6
  import Drawer from './common/drawer/Drawer.svelte';
6
7
  import ObjectViewer from './propertyPicker/ObjectViewer.svelte';
7
8
  import Tooltip from './Tooltip.svelte';
@@ -18,7 +19,16 @@ async function getResource(path) {
18
19
  </script>
19
20
 
20
21
  <Drawer bind:this={jsonViewer} size="800px">
21
- <DrawerContent title="Argument Details" on:close={jsonViewer.toggleDrawer}>
22
+ <DrawerContent title="Argument Details" on:close={jsonViewer.closeDrawer}>
23
+ <svelte:fragment slot="actions">
24
+ <Button
25
+ on:click={() => copyToClipboard(JSON.stringify(jsonViewerContent, null, 4))}
26
+ color="light"
27
+ size="xs"
28
+ >
29
+ <div class="flex gap-2 items-center">Copy to clipboard <ClipboardCopy /> </div>
30
+ </Button>
31
+ </svelte:fragment>
22
32
  {#if isString(jsonViewerContent)}
23
33
  <pre>{jsonViewerContent}</pre>
24
34
  {:else}
@@ -54,16 +64,18 @@ async function getResource(path) {
54
64
  >
55
65
  {/if}
56
66
  {:else}
57
- <div class="max-h-40 overflow-auto">
58
- <ObjectViewer collapsed={false} topBrackets={true} pureViewer={true} json={value} />
67
+ <div class="relative">
68
+ {#if JSON.stringify(value).length > 120}
69
+ <button
70
+ class="text-xs absolute top-0 right-4 text-gray-500"
71
+ on:click={() => {
72
+ jsonViewerContent = value
73
+ jsonViewer.toggleDrawer()
74
+ }}><Expand size={18} /></button
75
+ >
76
+ {/if}
77
+ <div class="max-h-40 overflow-auto">
78
+ <ObjectViewer collapsed={false} topBrackets={true} pureViewer={true} json={value} />
79
+ </div>
59
80
  </div>
60
- {#if JSON.stringify(value).length > 120}
61
- <button
62
- class="text-xs text-blue-500"
63
- on:click={() => {
64
- jsonViewerContent = value
65
- jsonViewer.toggleDrawer()
66
- }}>See JSON</button
67
- >
68
- {/if}
69
81
  {/if}
@@ -1,6 +1,6 @@
1
1
  <script>import { faChevronDown, faChevronUp, faPlus } from '@fortawesome/free-solid-svg-icons';
2
2
  import { setInputCat as computeInputCat } from '../utils';
3
- import { DollarSign, Pen, X } from 'lucide-svelte';
3
+ import { DollarSign, X } from 'lucide-svelte';
4
4
  import { createEventDispatcher } from 'svelte';
5
5
  import autosize from 'svelte-autosize';
6
6
  import Icon from 'svelte-awesome';
@@ -18,6 +18,9 @@ import SchemaForm from './SchemaForm.svelte';
18
18
  import SimpleEditor from './SimpleEditor.svelte';
19
19
  import StringTypeNarrowing from './StringTypeNarrowing.svelte';
20
20
  import Toggle from './Toggle.svelte';
21
+ import { twMerge } from 'tailwind-merge';
22
+ import ArgEnum from './ArgEnum.svelte';
23
+ import ArrayTypeNarrowing from './ArrayTypeNarrowing.svelte';
21
24
  export let label = '';
22
25
  export let value;
23
26
  export let defaultValue = undefined;
@@ -44,6 +47,7 @@ export let noMargin = false;
44
47
  export let extra = {};
45
48
  export let minW = true;
46
49
  export let prettifyHeader = false;
50
+ export let resourceTypes;
47
51
  let seeEditable = enum_ != undefined || pattern != undefined;
48
52
  const dispatch = createEventDispatcher();
49
53
  let error = '';
@@ -76,6 +80,14 @@ function computeDefaultValue(nvalue, inputCat, defaultValue) {
76
80
  }
77
81
  computeDefaultValue();
78
82
  $: computeDefaultValue(value, inputCat, defaultValue);
83
+ $: defaultValue != undefined && handleDefaultValueChange();
84
+ let oldDefaultValue = defaultValue;
85
+ function handleDefaultValueChange() {
86
+ if (value == oldDefaultValue) {
87
+ value = defaultValue;
88
+ }
89
+ oldDefaultValue = defaultValue;
90
+ }
79
91
  function evalValueToRaw() {
80
92
  rawValue = inputCat === 'object' ? JSON.stringify(value, null, 2) : undefined;
81
93
  }
@@ -144,52 +156,47 @@ $: validateInput(pattern, value);
144
156
  <FieldHeader prettify={prettifyHeader} {label} {required} {type} {contentEncoding} {format} />
145
157
  {/if}
146
158
  {#if editableSchema}
147
- <div class="p-2 my-1 text-xs border-solid border border-gray-400">
148
- <!-- svelte-ignore a11y-click-events-have-key-events -->
149
- <span
150
- class="underline"
151
- on:click={() => {
152
- seeEditable = !seeEditable
153
- }}
154
- >
155
- Customize property
156
- <Icon class="ml-2" data={seeEditable ? faChevronUp : faChevronDown} scale={0.7} />
157
- </span>
159
+ <label class="text-gray-700">
160
+ Description
161
+ <textarea
162
+ class="mb-1"
163
+ use:autosize
164
+ rows="1"
165
+ bind:value={description}
166
+ on:keydown={onKeyDown}
167
+ placeholder="Field description"
168
+ />
169
+ </label>
158
170
 
159
- {#if seeEditable}
160
- <div class="mt-2">
161
- <label class="text-gray-700">
162
- Description
163
- <textarea
164
- class="mb-1"
165
- use:autosize
166
- rows="1"
167
- bind:value={description}
168
- on:keydown={onKeyDown}
169
- placeholder="Field description"
170
- />
171
+ {#if type == 'array'}
172
+ <ArrayTypeNarrowing bind:itemsType />
173
+ {:else if (type == 'string' && format != 'date-time') || ['number', 'object'].includes(type ?? '')}
174
+ <div class="p-2 my-1 text-xs border-solid border border-gray-200 rounded-lg">
175
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
176
+ <span
177
+ class="underline"
178
+ on:click={() => {
179
+ seeEditable = !seeEditable
180
+ }}
181
+ >
182
+ Customize
183
+ <Icon class="ml-2" data={seeEditable ? faChevronUp : faChevronDown} scale={0.7} />
184
+ </span>
185
+
186
+ {#if seeEditable}
187
+ <div class="mt-2">
171
188
  {#if type == 'string' && format != 'date-time'}
172
189
  <StringTypeNarrowing bind:format bind:pattern bind:enum_ bind:contentEncoding />
173
190
  {:else if type == 'number'}
174
191
  <NumberTypeNarrowing bind:min={extra['min']} bind:max={extra['max']} />
175
192
  {:else if type == 'object'}
176
193
  <ObjectTypeNarrowing bind:format />
177
- {:else if type == 'array'}
178
- <select bind:value={itemsType}>
179
- <option value={undefined}>No specific item type</option>
180
- <option value={{ type: 'string' }}> Items are strings</option>
181
- <option value={{ type: 'object' }}> Items are objects (JSON)</option>
182
- <option value={{ type: 'number' }}>Items are numbers</option>
183
- <option value={{ type: 'string', contentEncoding: 'base64' }}
184
- >Items are bytes</option
185
- >
186
- </select>
187
194
  {/if}
188
- </label>
189
- </div>
190
- {/if}
191
- </div>
192
- <span class="text-2xs">Input preview:</span>
195
+ </div>
196
+ {/if}
197
+ </div>
198
+ {/if}
199
+ <span class="text-2xs font-semibold">Preview:</span>
193
200
  {/if}
194
201
 
195
202
  {#if description}
@@ -259,12 +266,24 @@ $: validateInput(pattern, value);
259
266
  />
260
267
  {:else if itemsType?.type == 'object'}
261
268
  <JsonEditor code={JSON.stringify(v, null, 2)} bind:value={v} />
269
+ {:else if Array.isArray(itemsType?.enum)}
270
+ <select
271
+ on:focus={(e) => {
272
+ dispatch('focus')
273
+ }}
274
+ class="px-6"
275
+ bind:value={v}
276
+ >
277
+ {#each itemsType?.enum ?? [] as e}
278
+ <option>{e}</option>
279
+ {/each}
280
+ </select>
262
281
  {:else}
263
282
  <input type="text" bind:value={v} />
264
283
  {/if}
265
284
  <button
266
285
  transition:fade|local={{ duration: 100 }}
267
- class="rounded-full p-1 bg-white/60 duration-200 hover:bg-gray-200"
286
+ class="rounded-full p-1 bg-white/60 duration-200 hover:bg-gray-200 ml-2"
268
287
  aria-label="Clear"
269
288
  on:click={() => {
270
289
  value.splice(i, 1)
@@ -287,7 +306,7 @@ $: validateInput(pattern, value);
287
306
  <div class="flex mt-2">
288
307
  <Button
289
308
  variant="border"
290
- color="dark"
309
+ color="light"
291
310
  size="xs"
292
311
  btnClasses="mt-1"
293
312
  on:click={() => {
@@ -302,9 +321,9 @@ $: validateInput(pattern, value);
302
321
  </Button>
303
322
  </div>
304
323
  </div>
305
- {:else if inputCat == 'resource-object'}
324
+ {:else if inputCat == 'resource-object' && (resourceTypes == undefined || (format.split('-').length > 1 && resourceTypes.includes(format.substring('resource-'.length))))}
306
325
  <ObjectResourceInput {format} bind:value />
307
- {:else if inputCat == 'object'}
326
+ {:else if inputCat == 'object' || inputCat == 'resource-object'}
308
327
  {#if properties && Object.keys(properties).length > 0}
309
328
  <div class="p-4 pl-8 border rounded w-full">
310
329
  <SchemaForm
@@ -327,43 +346,7 @@ $: validateInput(pattern, value);
327
346
  {/if}
328
347
  {:else if inputCat == 'enum'}
329
348
  <div class="flex flex-row w-full gap-1">
330
- {#if !customValue}
331
- <select
332
- on:focus={(e) => {
333
- dispatch('focus')
334
- }}
335
- {disabled}
336
- class="px-6"
337
- bind:value
338
- >
339
- {#each enum_ ?? [] as e}
340
- <option>{e}</option>
341
- {/each}
342
- </select>
343
- {:else}
344
- <input
345
- {autofocus}
346
- on:focus
347
- type="text"
348
- class={valid
349
- ? ''
350
- : 'border border-red-700 border-opacity-30 focus:border-red-700 focus:border-opacity-30 bg-red-100'}
351
- placeholder={defaultValue ?? ''}
352
- bind:value
353
- />
354
- {/if}
355
-
356
- {#if !disabled}
357
- <button
358
- class="min-w-min !px-2 items-center text-gray-800 bg-gray-100 border rounded center-center hover:bg-gray-300 transition-all cursor-pointer"
359
- on:click={() => {
360
- customValue = !customValue
361
- }}
362
- title="Custom Value"
363
- >
364
- <Pen size={14} />
365
- </button>
366
- {/if}
349
+ <ArgEnum {defaultValue} {valid} {customValue} {disabled} bind:value {enum_} {autofocus} />
367
350
  </div>
368
351
  {:else if inputCat == 'date'}
369
352
  <input {autofocus} class="inline-block" type="datetime-local" bind:value />
@@ -411,9 +394,12 @@ $: validateInput(pattern, value);
411
394
  on:keydown={onKeyDown}
412
395
  type="text"
413
396
  {disabled}
414
- class="w-full {valid
415
- ? ''
416
- : 'border border-red-700 border-opacity-30 focus:border-red-700 focus:border-opacity-30 bg-red-100'}"
397
+ class={twMerge(
398
+ 'w-full',
399
+ valid
400
+ ? ''
401
+ : 'border border-red-700 border-opacity-30 focus:border-red-700 focus:border-opacity-30 bg-red-100'
402
+ )}
417
403
  placeholder={defaultValue ?? ''}
418
404
  bind:value
419
405
  />
@@ -21,6 +21,7 @@ declare const __propDef: {
21
21
  itemsType?: {
22
22
  type?: "string" | "number" | "object" | "bytes" | undefined;
23
23
  contentEncoding?: "base64" | undefined;
24
+ enum?: string[] | undefined;
24
25
  } | undefined;
25
26
  displayHeader?: boolean | undefined;
26
27
  properties?: {
@@ -36,6 +37,7 @@ declare const __propDef: {
36
37
  extra?: Record<string, any> | undefined;
37
38
  minW?: boolean | undefined;
38
39
  prettifyHeader?: boolean | undefined;
40
+ resourceTypes: string[] | undefined;
39
41
  editor?: SimpleEditor | undefined;
40
42
  focus?: (() => void) | undefined;
41
43
  };
@@ -0,0 +1,73 @@
1
+ <script>import { Button } from './common';
2
+ export let itemsType;
3
+ let selected = itemsType?.type != 'string'
4
+ ? itemsType?.type
5
+ : Array.isArray(itemsType?.enum)
6
+ ? 'enum'
7
+ : 'string';
8
+ </script>
9
+
10
+ <select
11
+ bind:value={selected}
12
+ on:change={() => {
13
+ if (selected == 'enum') {
14
+ itemsType = { type: 'string', enum: [] }
15
+ } else if (selected == 'string') {
16
+ itemsType = { type: 'string' }
17
+ } else if (selected == 'number') {
18
+ itemsType = { type: 'number' }
19
+ } else if (selected == 'object') {
20
+ itemsType = { type: 'object' }
21
+ } else if (selected == 'bytes') {
22
+ itemsType = { type: 'string', contentEncoding: 'base64' }
23
+ } else {
24
+ itemsType = undefined
25
+ }
26
+ }}
27
+ >
28
+ <option value="string"> Items are strings</option>
29
+ <option value="enum">Items are strings from an enum</option>
30
+ <option value="object"> Items are objects (JSON)</option>
31
+ <option value="number">Items are numbers</option>
32
+ <option value="bytes">Items are bytes</option>
33
+ </select>
34
+ {#if Array.isArray(itemsType?.enum)}
35
+ <div class="pt-1" />
36
+ <label for="input" class="mb-2 text-gray-700 text-xs">
37
+ Enums
38
+ <div class="flex flex-col gap-1">
39
+ {#each itemsType?.enum || [] as e}
40
+ <div class="flex flex-row max-w-md">
41
+ <input id="input" type="text" bind:value={e} />
42
+ <Button
43
+ size="sm"
44
+ btnClasses="ml-6"
45
+ on:click={() => {
46
+ if (itemsType?.enum) {
47
+ itemsType.enum = (itemsType.enum || []).filter((el) => el !== e)
48
+ }
49
+ }}>-</Button
50
+ >
51
+ </div>
52
+ {/each}
53
+ </div>
54
+ <div class="flex flex-row my-1">
55
+ <Button
56
+ size="sm"
57
+ on:click={() => {
58
+ if (itemsType?.enum) {
59
+ itemsType.enum = itemsType.enum ? itemsType.enum.concat('') : ['']
60
+ }
61
+ }}>+</Button
62
+ >
63
+ <Button
64
+ variant="border"
65
+ size="sm"
66
+ btnClasses="ml-2"
67
+ on:click={() => itemsType?.enum && (itemsType.enum = undefined)}
68
+ >
69
+ Clear
70
+ </Button>
71
+ </div>
72
+ </label>
73
+ {/if}
@@ -0,0 +1,20 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ itemsType: {
5
+ type?: 'string' | 'number' | 'bytes' | 'object';
6
+ contentEncoding?: 'base64';
7
+ enum?: string[];
8
+ } | undefined;
9
+ };
10
+ events: {
11
+ [evt: string]: CustomEvent<any>;
12
+ };
13
+ slots: {};
14
+ };
15
+ export type ArrayTypeNarrowingProps = typeof __propDef.props;
16
+ export type ArrayTypeNarrowingEvents = typeof __propDef.events;
17
+ export type ArrayTypeNarrowingSlots = typeof __propDef.slots;
18
+ export default class ArrayTypeNarrowing extends SvelteComponentTyped<ArrayTypeNarrowingProps, ArrayTypeNarrowingEvents, ArrayTypeNarrowingSlots> {
19
+ }
20
+ export {};
@@ -1,13 +1,9 @@
1
- <script>import { SettingsService } from '../gen';
2
- import { onMount } from 'svelte';
3
- import WindmillIcon from './icons/WindmillIcon.svelte';
1
+ <script>import WindmillIcon from './icons/WindmillIcon.svelte';
2
+ import Uptodate from './Uptodate.svelte';
3
+ import Version from './Version.svelte';
4
4
  export let subtitle = undefined;
5
5
  export let title = 'Windmill';
6
6
  export let disableLogo = false;
7
- let version = '';
8
- onMount(async () => {
9
- version = await SettingsService.backendVersion();
10
- });
11
7
  </script>
12
8
 
13
9
  <div class="center-center min-h-screen p-4 relative bg-gray-50">
@@ -39,7 +35,9 @@ onMount(async () => {
39
35
  </div>
40
36
  </div>
41
37
 
42
- <div class="absolute top-0 right-0 text-2xs text-gray-800 italic px-3 py-1">
43
- <span class="font-mono">{version}</span>
38
+ <div class="absolute top-0 right-0 text-2xs text-gray-600 italic px-3 py-1">
39
+ <span class="font-mono flex flex-col">
40
+ <div>Windmill <Version /></div><div><Uptodate /></div>
41
+ </span>
44
42
  </div>
45
43
  </div>
@@ -0,0 +1,35 @@
1
+ <script>import { WorkspaceService } from '../gen';
2
+ import { usersWorkspaceStore, workspaceStore } from '../stores';
3
+ import { sendUserToast } from '../toast';
4
+ export let workspaceToDeployTo;
5
+ $: deployableWorkspaces = $usersWorkspaceStore?.workspaces
6
+ .map((w) => w.id)
7
+ .filter((w) => w != $workspaceStore);
8
+ </script>
9
+
10
+ <h3 class="mt-8">Workspace to link to</h3>
11
+ <div class="flex min-w-0 mt-2">
12
+ <select
13
+ bind:value={workspaceToDeployTo}
14
+ on:change={async (e) => {
15
+ await WorkspaceService.editDeployTo({
16
+ workspace: $workspaceStore ?? '',
17
+ requestBody: { deploy_to: workspaceToDeployTo == '' ? undefined : workspaceToDeployTo }
18
+ })
19
+ if (workspaceToDeployTo == '') {
20
+ workspaceToDeployTo = undefined
21
+ sendUserToast('Disabled setting deployable workspace')
22
+ } else {
23
+ sendUserToast('Set deployable workspace to ' + workspaceToDeployTo)
24
+ }
25
+ }}
26
+ >
27
+ {#if deployableWorkspaces?.length == 0}
28
+ <option disabled>No workspace deployable to</option>
29
+ {/if}
30
+ <option value="">Disable deployment</option>
31
+ {#each deployableWorkspaces ?? [] as name}
32
+ <option value={name}>{name}</option>
33
+ {/each}
34
+ </select>
35
+ </div>
@@ -0,0 +1,16 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ workspaceToDeployTo: string | undefined;
5
+ };
6
+ events: {
7
+ [evt: string]: CustomEvent<any>;
8
+ };
9
+ slots: {};
10
+ };
11
+ export type DeployToSettingProps = typeof __propDef.props;
12
+ export type DeployToSettingEvents = typeof __propDef.events;
13
+ export type DeployToSettingSlots = typeof __propDef.slots;
14
+ export default class DeployToSetting extends SvelteComponentTyped<DeployToSettingProps, DeployToSettingEvents, DeployToSettingSlots> {
15
+ }
16
+ export {};