windmill-components 1.21.0 → 1.28.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 (251) hide show
  1. package/components/AppConnect.svelte +93 -47
  2. package/components/AppConnect.svelte.d.ts +2 -2
  3. package/components/ArgInfo.svelte +0 -5
  4. package/components/ArgInput.svelte +91 -66
  5. package/components/ArgInput.svelte.d.ts +8 -3
  6. package/components/Button.svelte +4 -4
  7. package/components/CenteredPage.svelte +1 -1
  8. package/components/CollapseLink.svelte +12 -0
  9. package/components/CollapseLink.svelte.d.ts +19 -0
  10. package/components/CronInput.svelte +84 -0
  11. package/components/CronInput.svelte.d.ts +18 -0
  12. package/components/DisplayResult.svelte +23 -7
  13. package/components/Editor.svelte +144 -61
  14. package/components/Editor.svelte.d.ts +2 -0
  15. package/components/EditorBar.svelte +215 -0
  16. package/components/EditorBar.svelte.d.ts +23 -0
  17. package/components/FlowBuilder.svelte +151 -79
  18. package/components/FlowEditor.svelte +77 -130
  19. package/components/FlowEditor.svelte.d.ts +3 -2
  20. package/components/FlowJobResult.svelte +1 -1
  21. package/components/FlowPreview.svelte +18 -24
  22. package/components/FlowPreviewContent.svelte +68 -0
  23. package/components/FlowPreviewContent.svelte.d.ts +21 -0
  24. package/components/FlowStatusViewer.svelte +85 -37
  25. package/components/FlowStatusViewer.svelte.d.ts +3 -2
  26. package/components/FlowViewer.svelte +100 -26
  27. package/components/FlowViewer.svelte.d.ts +8 -3
  28. package/components/IconedResourceType.svelte +30 -5
  29. package/components/InputTransformForm.svelte +209 -0
  30. package/components/InputTransformForm.svelte.d.ts +26 -0
  31. package/components/InviteGlobalUser.svelte +2 -2
  32. package/components/InviteUser.svelte +2 -2
  33. package/components/JobStatus.svelte +32 -25
  34. package/components/Modal.svelte +47 -43
  35. package/components/ModuleStep.svelte +100 -54
  36. package/components/ObjectResourceInput.svelte +58 -38
  37. package/components/ObjectTypeNarrowing.svelte +4 -19
  38. package/components/Path.svelte +3 -3
  39. package/components/Path.svelte.d.ts +1 -1
  40. package/components/RadioButton.svelte +11 -96
  41. package/components/RadioButton.svelte.d.ts +4 -2
  42. package/components/ResourceEditor.svelte +5 -6
  43. package/components/ResourceEditor.svelte.d.ts +2 -2
  44. package/components/ResourcePicker.svelte +25 -2
  45. package/components/ResourcePicker.svelte.d.ts +3 -0
  46. package/components/ResourceTypePicker.svelte +17 -29
  47. package/components/ResourceTypePicker.svelte.d.ts +1 -0
  48. package/components/RunForm.svelte +14 -15
  49. package/components/RunForm.svelte.d.ts +1 -1
  50. package/components/SchemaEditor.svelte +87 -71
  51. package/components/SchemaEditor.svelte.d.ts +2 -0
  52. package/components/SchemaEditorProperty.svelte +11 -0
  53. package/components/SchemaEditorProperty.svelte.d.ts +17 -0
  54. package/components/SchemaForm.svelte +21 -127
  55. package/components/SchemaForm.svelte.d.ts +3 -4
  56. package/components/SchemaModal.svelte +20 -33
  57. package/components/SchemaModal.svelte.d.ts +1 -1
  58. package/components/SchemaViewer.svelte +5 -7
  59. package/components/ScriptBuilder.svelte +41 -44
  60. package/components/ScriptEditor.svelte +76 -248
  61. package/components/ScriptPicker.svelte +13 -26
  62. package/components/ScriptPicker.svelte.d.ts +1 -1
  63. package/components/ScriptSchema.svelte +0 -5
  64. package/components/ShareModal.svelte +1 -1
  65. package/components/SharedBadge.svelte +12 -10
  66. package/components/StringTypeNarrowing.svelte +8 -4
  67. package/components/StringTypeNarrowing.svelte.d.ts +1 -0
  68. package/components/TableCustom.svelte +7 -9
  69. package/components/TableSimple.svelte +1 -1
  70. package/components/Toggle.svelte +8 -10
  71. package/components/Toggle.svelte.d.ts +5 -11
  72. package/components/Tooltip.svelte +56 -82
  73. package/components/Tooltip.svelte.d.ts +1 -5
  74. package/components/VariableEditor.svelte +21 -6
  75. package/components/flows/CopyFirstStepSchema.svelte +7 -5
  76. package/components/flows/DynamicInputHelpBox.svelte +1 -1
  77. package/components/flows/FlowBox.svelte +3 -0
  78. package/components/flows/FlowBox.svelte.d.ts +23 -0
  79. package/components/flows/FlowBoxHeader.svelte +9 -0
  80. package/components/flows/FlowBoxHeader.svelte.d.ts +18 -0
  81. package/components/flows/FlowInput.svelte +20 -0
  82. package/components/flows/FlowInput.svelte.d.ts +14 -0
  83. package/components/flows/FlowInputs.svelte +7 -3
  84. package/components/flows/FlowModuleHeader.svelte +44 -41
  85. package/components/flows/FlowModuleHeader.svelte.d.ts +1 -1
  86. package/components/flows/FlowSettings.svelte +174 -0
  87. package/components/flows/FlowSettings.svelte.d.ts +21 -0
  88. package/components/flows/flowStore.d.ts +5 -2
  89. package/components/flows/flowStore.js +65 -9
  90. package/components/flows/pickers/FlowScriptPicker.svelte +6 -1
  91. package/components/flows/pickers/FlowScriptPicker.svelte.d.ts +1 -0
  92. package/components/flows/utils.d.ts +11 -11
  93. package/components/flows/utils.js +103 -63
  94. package/components/icons/AirtableIcon.svelte +17 -0
  95. package/components/icons/AirtableIcon.svelte.d.ts +17 -0
  96. package/components/icons/GCloudIcon.svelte +16 -0
  97. package/components/icons/GCloudIcon.svelte.d.ts +17 -0
  98. package/components/icons/GItlabIcon.svelte +16 -0
  99. package/components/icons/GItlabIcon.svelte.d.ts +17 -0
  100. package/components/icons/GSheetsIcon.svelte +16 -0
  101. package/components/icons/GSheetsIcon.svelte.d.ts +17 -0
  102. package/components/icons/GcalIcon.svelte +16 -0
  103. package/components/icons/GcalIcon.svelte.d.ts +17 -0
  104. package/components/icons/GdriveIcon.svelte +16 -0
  105. package/components/icons/GdriveIcon.svelte.d.ts +17 -0
  106. package/components/icons/GmailIcon.svelte +16 -0
  107. package/components/icons/GmailIcon.svelte.d.ts +17 -0
  108. package/components/icons/PostgresIcon.svelte +8 -49
  109. package/components/icons/Slack.svelte +9 -18
  110. package/components/icons/TogglIcon.svelte +59 -0
  111. package/components/icons/TogglIcon.svelte.d.ts +17 -0
  112. package/components/propertyPicker/ObjectViewer.svelte +35 -37
  113. package/components/propertyPicker/ObjectViewer.svelte.d.ts +1 -0
  114. package/components/propertyPicker/OverlayPropertyPicker.svelte +53 -53
  115. package/components/propertyPicker/OverlayPropertyPicker.svelte.d.ts +5 -2
  116. package/components/propertyPicker/PropPicker.svelte +13 -15
  117. package/components/propertyPicker/PropPicker.svelte.d.ts +1 -1
  118. package/components/propertyPicker/WarningMessage.svelte +14 -41
  119. package/components/propertyPicker/WarningMessage.svelte.d.ts +11 -8
  120. package/components/propertyPicker/utils.d.ts +1 -0
  121. package/components/propertyPicker/utils.js +25 -0
  122. package/gen/core/OpenAPI.js +1 -1
  123. package/gen/index.d.ts +12 -2
  124. package/gen/index.js +1 -2
  125. package/gen/models/CompletedJob.d.ts +1 -1
  126. package/gen/models/Flow.d.ts +3 -13
  127. package/gen/models/FlowMetadata.d.ts +9 -0
  128. package/gen/models/FlowMetadata.js +4 -0
  129. package/gen/models/FlowModuleValue.d.ts +5 -22
  130. package/gen/models/FlowModuleValue.js +1 -15
  131. package/gen/models/ForloopFlow.d.ts +8 -0
  132. package/gen/models/ForloopFlow.js +4 -0
  133. package/gen/models/InputTransform.d.ts +3 -12
  134. package/gen/models/InputTransform.js +1 -8
  135. package/gen/models/JavascriptTransform.d.ts +4 -0
  136. package/gen/models/JavascriptTransform.js +4 -0
  137. package/gen/models/MainArgSignature.d.ts +1 -1
  138. package/gen/models/NewSchedule.d.ts +1 -0
  139. package/gen/models/OpenFlow.d.ts +7 -0
  140. package/gen/models/OpenFlow.js +4 -0
  141. package/gen/models/OpenFlowWPath.d.ts +4 -0
  142. package/gen/models/OpenFlowWPath.js +4 -0
  143. package/gen/models/PathFlow.d.ts +4 -0
  144. package/gen/models/PathFlow.js +4 -0
  145. package/gen/models/PathScript.d.ts +4 -0
  146. package/gen/models/PathScript.js +4 -0
  147. package/gen/models/RawScript.d.ts +12 -0
  148. package/gen/models/RawScript.js +11 -0
  149. package/gen/models/Schedule.d.ts +1 -1
  150. package/gen/models/StaticTransform.d.ts +4 -0
  151. package/gen/models/StaticTransform.js +4 -0
  152. package/gen/models/TokenResponse.d.ts +3 -3
  153. package/gen/models/Usage.d.ts +5 -0
  154. package/gen/models/Usage.js +4 -0
  155. package/gen/models/User.d.ts +2 -0
  156. package/gen/schemas/$AuditLog.d.ts +32 -0
  157. package/gen/schemas/$AuditLog.js +35 -0
  158. package/gen/schemas/$CompletedJob.d.ts +98 -0
  159. package/gen/schemas/$CompletedJob.js +103 -0
  160. package/gen/schemas/$ContextualVariable.d.ts +16 -0
  161. package/gen/schemas/$ContextualVariable.js +19 -0
  162. package/gen/schemas/$CreateResource.d.ts +22 -0
  163. package/gen/schemas/$CreateResource.js +25 -0
  164. package/gen/schemas/$CreateVariable.d.ts +26 -0
  165. package/gen/schemas/$CreateVariable.js +29 -0
  166. package/gen/schemas/$CreateWorkspace.d.ts +20 -0
  167. package/gen/schemas/$CreateWorkspace.js +23 -0
  168. package/gen/schemas/$EditResource.d.ts +13 -0
  169. package/gen/schemas/$EditResource.js +16 -0
  170. package/gen/schemas/$EditResourceType.d.ts +10 -0
  171. package/gen/schemas/$EditResourceType.js +13 -0
  172. package/gen/schemas/$EditSchedule.d.ts +20 -0
  173. package/gen/schemas/$EditSchedule.js +23 -0
  174. package/gen/schemas/$EditVariable.d.ts +16 -0
  175. package/gen/schemas/$EditVariable.js +19 -0
  176. package/gen/schemas/$EditWorkspaceUser.d.ts +7 -0
  177. package/gen/schemas/$EditWorkspaceUser.js +10 -0
  178. package/gen/schemas/$Flow.d.ts +23 -0
  179. package/gen/schemas/$Flow.js +26 -0
  180. package/gen/schemas/$FlowMetadata.d.ts +31 -0
  181. package/gen/schemas/$FlowMetadata.js +34 -0
  182. package/gen/schemas/$FlowPreview.d.ts +80 -0
  183. package/gen/schemas/$FlowPreview.js +83 -0
  184. package/gen/schemas/$GlobalUserInfo.d.ts +26 -0
  185. package/gen/schemas/$GlobalUserInfo.js +29 -0
  186. package/gen/schemas/$Group.d.ts +23 -0
  187. package/gen/schemas/$Group.js +26 -0
  188. package/gen/schemas/$Job.d.ts +17 -0
  189. package/gen/schemas/$Job.js +20 -0
  190. package/gen/schemas/$ListableVariable.d.ts +35 -0
  191. package/gen/schemas/$ListableVariable.js +38 -0
  192. package/gen/schemas/$Login.d.ts +12 -0
  193. package/gen/schemas/$Login.js +15 -0
  194. package/gen/schemas/$MainArgSignature.d.ts +50 -0
  195. package/gen/schemas/$MainArgSignature.js +53 -0
  196. package/gen/schemas/$NewSchedule.d.ts +30 -0
  197. package/gen/schemas/$NewSchedule.js +33 -0
  198. package/gen/schemas/$NewToken.d.ts +11 -0
  199. package/gen/schemas/$NewToken.js +14 -0
  200. package/gen/schemas/$NewUser.d.ts +16 -0
  201. package/gen/schemas/$NewUser.js +19 -0
  202. package/gen/schemas/$Preview.d.ts +19 -0
  203. package/gen/schemas/$Preview.js +22 -0
  204. package/gen/schemas/$QueuedJob.d.ts +139 -0
  205. package/gen/schemas/$QueuedJob.js +144 -0
  206. package/gen/schemas/$Resource.d.ts +31 -0
  207. package/gen/schemas/$Resource.js +34 -0
  208. package/gen/schemas/$ResourceType.d.ts +17 -0
  209. package/gen/schemas/$ResourceType.js +20 -0
  210. package/gen/schemas/$Schedule.d.ts +47 -0
  211. package/gen/schemas/$Schedule.js +50 -0
  212. package/gen/schemas/$Script.d.ts +77 -0
  213. package/gen/schemas/$Script.js +80 -0
  214. package/gen/schemas/$ScriptArgs.d.ts +6 -0
  215. package/gen/schemas/$ScriptArgs.js +9 -0
  216. package/gen/schemas/$SlackToken.d.ts +24 -0
  217. package/gen/schemas/$SlackToken.js +27 -0
  218. package/gen/schemas/$TokenResponse.d.ts +23 -0
  219. package/gen/schemas/$TokenResponse.js +26 -0
  220. package/gen/schemas/$TruncatedToken.d.ts +25 -0
  221. package/gen/schemas/$TruncatedToken.js +28 -0
  222. package/gen/schemas/$Usage.d.ts +13 -0
  223. package/gen/schemas/$Usage.js +16 -0
  224. package/gen/schemas/$User.d.ts +42 -0
  225. package/gen/schemas/$User.js +45 -0
  226. package/gen/schemas/$UserWorkspaceList.d.ts +28 -0
  227. package/gen/schemas/$UserWorkspaceList.js +31 -0
  228. package/gen/schemas/$WorkerPing.d.ts +31 -0
  229. package/gen/schemas/$WorkerPing.js +34 -0
  230. package/gen/schemas/$Workspace.d.ts +19 -0
  231. package/gen/schemas/$Workspace.js +22 -0
  232. package/gen/schemas/$WorkspaceInvite.d.ts +16 -0
  233. package/gen/schemas/$WorkspaceInvite.js +19 -0
  234. package/gen/services/FlowService.d.ts +30 -16
  235. package/gen/services/FlowService.js +25 -0
  236. package/gen/services/JobService.d.ts +1 -1
  237. package/gen/services/ScriptService.d.ts +13 -8
  238. package/gen/services/WorkspaceService.d.ts +1 -1
  239. package/gen/services/WorkspaceService.js +1 -1
  240. package/infer.js +8 -1
  241. package/package.json +87 -15
  242. package/script_helpers.d.ts +1 -1
  243. package/script_helpers.js +7 -6
  244. package/sql.d.ts +89 -0
  245. package/sql.js +817 -0
  246. package/stores.d.ts +1 -1
  247. package/stores.js +0 -6
  248. package/utils.d.ts +26 -6
  249. package/utils.js +94 -7
  250. package/components/RadioButtonV2.svelte +0 -38
  251. package/components/RadioButtonV2.svelte.d.ts +0 -20
@@ -3,16 +3,18 @@ export let open = false;
3
3
  export let z = 'z-30';
4
4
  const dispatch = createEventDispatcher();
5
5
  export function closeModal() {
6
+ document.body.style.overflow = 'auto';
6
7
  open = false;
7
8
  dispatch('close');
8
9
  }
9
10
  export function openModal() {
11
+ document.body.style.overflow = 'hidden';
10
12
  open = true;
11
13
  dispatch('open');
12
14
  }
13
15
  function handleKeyUp(event) {
14
- const key = event.key || event.keyCode;
15
- if (key === 27 || key === 'Escape' || key === 'Esc') {
16
+ const key = event.key;
17
+ if (key === 'Escape' || key === 'Esc') {
16
18
  if (open) {
17
19
  event.preventDefault();
18
20
  closeModal();
@@ -23,45 +25,18 @@ function handleKeyUp(event) {
23
25
 
24
26
  <svelte:window on:keyup={handleKeyUp} />
25
27
 
26
- <div class="blurred-background z-0 {open ? '' : 'hidden'}" />
28
+ {#if open}
29
+ <div class="blurred-background" />
27
30
 
28
- <div class="fixed top-0 w-screen h-screen {open ? '' : 'hidden'} {z}">
29
- <div
30
- class="fixed right-0 flex flex-col w-3/4 sm:w-2/3 lg:w-1/2 h-screen border border-gray-300 shadow-xl"
31
- >
32
- {#if open}
33
- <div class="flex flex-row justify-between p-2 bg-white border-b border-gray-200">
34
- <button
35
- on:click={() => {
36
- open = false
37
- closeModal()
38
- }}
39
- >
40
- <svg
41
- class="w-6 h-6"
42
- fill="none"
43
- stroke="currentColor"
44
- viewBox="0 0 24 24"
45
- xmlns="http://www.w3.org/2000/svg"
46
- >
47
- <path
48
- stroke-linecap="round"
49
- stroke-linejoin="round"
50
- stroke-width="2"
51
- d="M6 18L18 6M6 6l12 12"
52
- />
53
- </svg>
54
- </button>
55
- <p class="font-semibold text-gray-800"><slot name="title" /></p>
56
- <div />
57
- </div>
58
- <div class="flex flex-col bg-gray-50 pt-3 px-6 grow overflow-y-auto">
59
- <slot name="content" />
60
- </div>
61
- <div class="flex flex-col bg-white border-gray-200 p-2">
62
- <div class="flex flex-row justify-between p-2 ">
31
+ <div class="fixed top-0 w-screen h-screen {z}">
32
+ <div
33
+ class="fixed right-0 top-0 flex flex-col w-3/4 sm:w-2/3 lg:w-1/2 h-screen border border-gray-300 shadow-xl"
34
+ >
35
+ {#if open}
36
+ <div class="flex flex-row justify-between p-2 bg-white border-b border-gray-200">
63
37
  <button
64
38
  on:click={() => {
39
+ open = false
65
40
  closeModal()
66
41
  }}
67
42
  >
@@ -80,15 +55,44 @@ function handleKeyUp(event) {
80
55
  />
81
56
  </svg>
82
57
  </button>
83
- <span class="mr-4"><slot name="submission">&nbsp;</slot></span>
58
+ <p class="font-semibold text-gray-800"><slot name="title" /></p>
59
+ <div />
60
+ </div>
61
+ <div class="flex flex-col bg-gray-50 pt-3 px-6 grow overflow-y-auto">
62
+ <slot name="content" />
63
+ </div>
64
+ <div class="flex flex-col bg-white border-gray-200 p-2">
65
+ <div class="flex flex-row justify-between p-2 ">
66
+ <button
67
+ on:click={() => {
68
+ closeModal()
69
+ }}
70
+ >
71
+ <svg
72
+ class="w-6 h-6"
73
+ fill="none"
74
+ stroke="currentColor"
75
+ viewBox="0 0 24 24"
76
+ xmlns="http://www.w3.org/2000/svg"
77
+ >
78
+ <path
79
+ stroke-linecap="round"
80
+ stroke-linejoin="round"
81
+ stroke-width="2"
82
+ d="M6 18L18 6M6 6l12 12"
83
+ />
84
+ </svg>
85
+ </button>
86
+ <span class="mr-4"><slot name="submission">&nbsp;</slot></span>
87
+ </div>
84
88
  </div>
85
- </div>
86
- {/if}
89
+ {/if}
90
+ </div>
87
91
  </div>
88
- </div>
92
+ {/if}
89
93
 
90
94
  <style>
91
95
  .blurred-background {
92
96
  /* @apply absolute sm:top-6 lg:top-8 left-28 sm:left-40 md:left-48; */ /* If we wanted to make the navbars visible */ position: fixed; top: 0px; left: 0px; --tw-bg-opacity: 1; background-color: rgb(156 163 175 / var(--tw-bg-opacity)); opacity: 0.75; width: 100vw; height: 100vh;
93
- z-index: 1;
97
+ z-index: 10;
94
98
  }</style>
@@ -1,70 +1,110 @@
1
- <script>import { FlowModuleValue } from '../gen';
2
- import { addPreviewResult, previewResults } from '../stores';
3
- import { buildExtraLib, objectToTsType, schemaToObject, schemaToTsType } from '../utils';
4
- import { faRobot } from '@fortawesome/free-solid-svg-icons';
1
+ <script>import { RawScript } from '../gen';
2
+ import { previewResults } from '../stores';
3
+ import { buildExtraLib, objectToTsType, schemaToTsType } from '../utils';
4
+ import { faChevronDown, faChevronUp, faPlus } from '@fortawesome/free-solid-svg-icons';
5
5
  import Icon from 'svelte-awesome';
6
6
  import Editor from './Editor.svelte';
7
+ import EditorBar from './EditorBar.svelte';
7
8
  import FlowPreview from './FlowPreview.svelte';
9
+ import FlowBox from './flows/FlowBox.svelte';
8
10
  import FlowInputs from './flows/FlowInputs.svelte';
9
11
  import FlowModuleHeader from './flows/FlowModuleHeader.svelte';
10
- import { createInlineScriptModule, flowStore, loadSchema, pickScript, schemasStore } from './flows/flowStore';
12
+ import { addModule, createInlineScriptModule, flowStore, loadSchema, pickScript, schemasStore } from './flows/flowStore';
13
+ import { getPickableProperties, jobsToResults } from './flows/utils';
11
14
  import SchemaForm from './SchemaForm.svelte';
15
+ import Tooltip from './Tooltip.svelte';
12
16
  export let open;
13
17
  export let mode;
14
18
  export let i;
15
19
  export let mod;
16
20
  export let args = {};
21
+ let editor;
22
+ let websocketAlive = { pyright: false, black: false, deno: false };
23
+ let pickableProperties = undefined;
24
+ let bigEditor = false;
17
25
  $: schema = $schemasStore[i];
18
- $: shouldPick = mod.value.path === '' && mod.value.language === undefined;
19
- $: previousSchema = i === 0 ? schemaToObject($flowStore?.schema) : $previewResults[i];
20
- $: extraLib = buildExtraLib(i === 0 ? schemaToTsType($flowStore?.schema) : objectToTsType($previewResults[i]));
26
+ $: shouldPick = 'path' in mod.value && mod.value.path === '' && !('language' in mod.value);
27
+ $: pickableProperties = getPickableProperties($flowStore?.schema, args, $previewResults, mode, i);
28
+ $: extraLib = buildExtraLib(schemaToTsType($flowStore?.schema), i === 0 ? schemaToTsType($flowStore?.schema) : objectToTsType($previewResults[i]));
29
+ const isTrigger = mode === 'pull' && i === 0;
21
30
  </script>
22
31
 
23
- <li class="flex flex-row flex-shrink max-w-full mx-auto mt-16">
24
- <div
25
- class="bg-white border border-gray xl-rounded shadow-lg w-full max-w-4xl mx-4 md:mx-auto"
26
- id="module-{i}"
27
- >
28
- <div class="flex items-center justify-between flex-wra p-4 sm:px-6 z-10">
29
- <FlowModuleHeader bind:open {mod} {i} {shouldPick}>
30
- <div>
31
- <h3 class="text-lg font-bold text-gray-900">Step {i + 1}</h3>
32
- <p>
33
- {#if mod.value.path}
34
- {mod.value.path}
35
- {/if}
36
- {#if mod.value.language}
37
- Inline {mod.value.language}
38
- {/if}
39
- {#if !mod.value.path && !mod.value.language}
40
- Select a script
41
- {/if}
42
- </p>
43
- </div>
44
- </FlowModuleHeader>
45
- </div>
46
- <div class="border-b border-gray-200" />
32
+ <button
33
+ class="rounded-full h-10 w-10 bg-white border-2 border-gray-400"
34
+ on:click={() => {
35
+ addModule(i)
36
+ open = i
37
+ }}
38
+ >
39
+ <Icon class="text-gray-400 mb-1" data={faPlus} />
40
+ </button>
41
+ <FlowBox>
42
+ <div id="module-{i}">
43
+ <FlowModuleHeader bind:open {mod} {i} {shouldPick}>
44
+ <div>
45
+ <h3 class="text-lg font-bold text-gray-900">Step {i + 1}</h3>
46
+ {#if isTrigger}
47
+ <h3 class="font-bold">
48
+ Trigger Script
49
+ <Tooltip>
50
+ When a flow is 'Pull', the first step is a trigger script. Trigger scripts are scripts
51
+ that must return a list which are the new items to be treated one by one by the rest
52
+ of the flow, usually the list of new items since last time the flow was run. One can
53
+ retrieve the item in the next step using `previous_result._value`. To easily compute
54
+ the diff, windmill provides some helpers under the form of `getInternalState` and
55
+ `setInternalState`.
56
+ </Tooltip>
57
+ </h3>
58
+ {/if}
59
+ <p>
60
+ {#if 'path' in mod.value && mod.value.path}
61
+ {mod.value.path}
62
+ {/if}
63
+ {#if 'language' in mod.value && mod.value.language}
64
+ Inline {mod.value.language}
65
+ {/if}
66
+ {#if !('path' in mod.value) && !('language' in mod.value)}
67
+ Select a script
68
+ {/if}
69
+ </p>
70
+ </div>
71
+ </FlowModuleHeader>
47
72
  {#if open == i}
48
73
  <div class="p-6">
49
74
  {#if shouldPick}
50
75
  <FlowInputs
51
- isTrigger={mode == 'pull' && i == 0}
76
+ {isTrigger}
52
77
  on:pick={(e) => pickScript(e.detail.path, i)}
53
78
  on:new={(e) => createInlineScriptModule(e.detail.language, i, mode)}
54
79
  />
55
80
  {/if}
56
- {#if mod.value.type === FlowModuleValue.type.RAWSCRIPT}
57
- <Editor
58
- class="h-80 border p-2 rounded"
59
- bind:code={mod.value.content}
60
- deno={mod.value.language === FlowModuleValue.language.DENO}
61
- />
81
+ {#if mod.value.type === 'rawscript'}
82
+ <div class="mb-2 overflow-hidden">
83
+ <EditorBar {editor} {websocketAlive} lang={mod.value.language ?? 'deno'} />
84
+ </div>
85
+ <div>
86
+ <Editor
87
+ bind:websocketAlive
88
+ bind:this={editor}
89
+ class="{bigEditor ? 'h-2/3' : 'h-80'} border p-2 rounded"
90
+ bind:code={mod.value.content}
91
+ deno={mod.value.language === RawScript.language.DENO}
92
+ automaticLayout={true}
93
+ on:blur={() => loadSchema(i)}
94
+ formatAction={() => loadSchema(i)}
95
+ />
96
+ <button
97
+ class="w-full text-center"
98
+ on:click={() => {
99
+ bigEditor = !bigEditor
100
+ }}><Icon data={bigEditor ? faChevronUp : faChevronDown} scale={1.0} /></button
101
+ >
102
+ </div>
62
103
  <div class="mt-2 mb-8">
63
- <button class="default-primary-button-v2" on:click={() => loadSchema(i)}>
64
- <Icon data={faRobot} class="w-4 h-4 mr-2 -ml-2" />
65
-
66
- Infer step inputs from code
67
- </button>
104
+ <p class="text-gray-500 italic">
105
+ Move the focus outside of the text editor to recompute the input schema or press
106
+ Ctrl/Cmd+S
107
+ </p>
68
108
  </div>
69
109
  {/if}
70
110
  {#if !shouldPick}
@@ -74,7 +114,7 @@ $: extraLib = buildExtraLib(i === 0 ? schemaToTsType($flowStore?.schema) : objec
74
114
  {schema}
75
115
  {extraLib}
76
116
  {i}
77
- {previousSchema}
117
+ bind:pickableProperties
78
118
  bind:args={mod.input_transform}
79
119
  />
80
120
  {/if}
@@ -90,18 +130,24 @@ $: extraLib = buildExtraLib(i === 0 ? schemaToTsType($flowStore?.schema) : objec
90
130
  {mode}
91
131
  schemas={$schemasStore}
92
132
  on:change={(e) => {
93
- addPreviewResult(e.detail.result, i + 1)
133
+ previewResults.set(jobsToResults(e.detail))
94
134
  }}
95
135
  />
96
136
  </div>
97
- <div>
98
- <button class="w-full h-full" on:click={() => (open = -1)}>(-)</button>
99
- </div>
100
- {:else}
101
- <div>
102
- <button class="w-full h-full" on:click={() => (open = i)}>(+)</button>
103
- </div>
104
137
  {/if}
105
138
  {/if}
139
+ {#if open == i}
140
+ <div>
141
+ <button class="w-full h-full" on:click={() => (open = -1)}>
142
+ <Icon data={faChevronUp} scale={1.0} />
143
+ </button>
144
+ </div>
145
+ {:else}
146
+ <div>
147
+ <button class="w-full h-full" on:click={() => (open = i)}>
148
+ <Icon data={faChevronDown} scale={1.0} />
149
+ </button>
150
+ </div>
151
+ {/if}
106
152
  </div>
107
- </li>
153
+ </FlowBox>
@@ -1,61 +1,81 @@
1
1
  <script>import { ResourceService } from '../gen';
2
- import ResourcePicker from './ResourcePicker.svelte';
3
2
  import { workspaceStore } from '../stores';
4
- import SchemaForm from './SchemaForm.svelte';
5
3
  import RadioButton from './RadioButton.svelte';
4
+ import ResourcePicker from './ResourcePicker.svelte';
5
+ import SchemaForm from './SchemaForm.svelte';
6
6
  export let format;
7
7
  export let value;
8
8
  function isString(value) {
9
9
  return typeof value === 'string' || value instanceof String;
10
10
  }
11
- let path = isString(value) && value.length >= '$res:'.length ? value.substr('$res:'.length) : undefined;
11
+ let path = '';
12
12
  let args = {};
13
- if (!isString(value) && value) {
14
- args = value;
15
- }
16
13
  let schema = undefined;
17
14
  let isValid = true;
18
15
  let resourceTypeName = '';
16
+ let option = isString(value) || value == undefined ? 'resource' : 'raw';
17
+ $: format.startsWith('resource-') && loadSchema(format);
19
18
  async function loadSchema(format) {
20
19
  resourceTypeName = format.substring('resource-'.length);
21
20
  schema = (await ResourceService.getResourceType({ workspace: $workspaceStore, path: resourceTypeName })).schema;
22
21
  }
23
- let option = isString(value) || value == undefined ? 'resource' : 'raw';
24
- $: {
25
- if (option == 'resource') {
26
- value = `$res:${path}`;
22
+ function argToValue() {
23
+ value = args;
24
+ }
25
+ function resourceToValue() {
26
+ value = `$res:${path}`;
27
+ }
28
+ function isResource() {
29
+ return isString(value) && value.length >= '$res:'.length;
30
+ }
31
+ function valueToPath() {
32
+ if (!isString(value) && value) {
33
+ args = value;
34
+ }
35
+ if (isResource()) {
36
+ path = value.substr('$res:'.length);
27
37
  }
28
- else {
29
- value = args;
38
+ else if (value !== undefined && value !== '') {
39
+ option = 'raw';
30
40
  }
31
41
  }
32
- $: format.startsWith('resource-') && loadSchema(format);
42
+ $: value && valueToPath();
33
43
  </script>
34
44
 
35
- <div class="max-w-lg">
36
- <RadioButton
37
- options={[
38
- [`Resource (${resourceTypeName})`, 'resource'],
39
- [`Raw object value`, 'raw']
40
- ]}
41
- small={true}
42
- bind:value={option}
43
- />
44
- </div>
45
- <div class="mt-1" />
46
- {#if option == 'resource'}
47
- <ResourcePicker
48
- bind:value={path}
49
- resourceType={format.split('-').length > 1 ? format.substring('resource-'.length) : undefined}
50
- />
51
- {:else}
52
- <div class="border rounded p-5">
53
- <h2 class="mb-5">
54
- Object of <a target="_blank" href="/resources">resource type</a>
55
- {resourceTypeName}
56
- </h2>
57
- {#if !isString(args)}
58
- <SchemaForm {schema} bind:isValid bind:args />
45
+ <div class="flex flex-row w-full gap-2">
46
+ <div class="shrink w-40">
47
+ <RadioButton
48
+ options={[
49
+ [`Resource (${resourceTypeName})`, 'resource'],
50
+ [`Raw object value`, 'raw']
51
+ ]}
52
+ on:change={argToValue}
53
+ bind:value={option}
54
+ />
55
+ </div>
56
+ <div class="grow">
57
+ {#if option == 'resource'}
58
+ <ResourcePicker
59
+ on:refresh={() => loadSchema(format)}
60
+ on:change={(e) => {
61
+ path = e.detail
62
+ resourceToValue()
63
+ }}
64
+ bind:value={path}
65
+ resourceType={format.split('-').length > 1
66
+ ? format.substring('resource-'.length)
67
+ : undefined}
68
+ />
69
+ {:else}
70
+ <div class="border rounded p-5 w-full">
71
+ <h2 class="mb-5">
72
+ Object of <a target="_blank" href="/resources">resource type</a>
73
+ {resourceTypeName}
74
+ </h2>
75
+ {#if !isString(args)}
76
+ <SchemaForm {schema} bind:isValid bind:args />
77
+ {/if}
78
+ </div>
59
79
  {/if}
60
80
  </div>
61
- {/if}
81
+ </div>
@@ -1,25 +1,10 @@
1
- <script>import RadioButton from './RadioButton.svelte';
2
- import ResourceTypePicker from './ResourceTypePicker.svelte';
1
+ <script>import ResourceTypePicker from './ResourceTypePicker.svelte';
3
2
  export let format;
4
- let kind = format?.startsWith('resource') ? 'resource' : 'none';
5
3
  let resource = format?.startsWith('resource-')
6
4
  ? format.substring('resource-'.length)
7
5
  : undefined;
8
- $: format =
9
- kind == 'resource' ? (resource != undefined ? `resource-${resource}` : 'resource') : undefined;
6
+ $: format = resource != undefined ? `resource-${resource}` : undefined;
10
7
  </script>
11
8
 
12
- <RadioButton
13
- label="Kind"
14
- small={true}
15
- options={[
16
- ['None', 'none'],
17
- ['Resource Type', 'resource']
18
- ]}
19
- bind:value={kind}
20
- />
21
-
22
- {#if kind == 'resource'}
23
- <div class="mt-1" />
24
- <ResourceTypePicker bind:value={resource} />
25
- {/if}
9
+ <div class="mt-2" />
10
+ <ResourceTypePicker bind:value={resource} nonePickable={true} />
@@ -4,7 +4,6 @@ import { GroupService } from '../gen';
4
4
  import Tooltip from './Tooltip.svelte';
5
5
  import { userStore, workspaceStore } from '../stores';
6
6
  import { sleep } from '../utils';
7
- import { workspace } from 'vscode';
8
7
  export let meta = {
9
8
  ownerKind: 'user',
10
9
  owner: '',
@@ -114,8 +113,8 @@ $: {
114
113
  <div>
115
114
  <div class="flex flex-col sm:grid sm:grid-cols-4 sm:gap-4 pb-0 mb-1">
116
115
  <label class="block">
117
- <span class="text-gray-700 text-sm">
118
- Owner Kind<Tooltip class="mx-1">
116
+ <span class="text-gray-700 text-sm whitespace-nowrap">
117
+ Owner Kind <Tooltip>
119
118
  <slot name="ownerToolkit" />
120
119
  </Tooltip>
121
120
  </span>
@@ -156,6 +155,7 @@ $: {
156
155
  <label class="block col-span-2">
157
156
  <span class="text-gray-700 text-sm">Name<span class="text-red-600 text-sm">*</span></span>
158
157
  <input
158
+ autofocus
159
159
  bind:value={meta.name}
160
160
  placeholder={namePlaceholder}
161
161
  class={error === ''
@@ -7,7 +7,7 @@ declare const __propDef: {
7
7
  initialPath: string;
8
8
  path?: string | undefined;
9
9
  error?: string | undefined;
10
- kind: "resource" | "script" | "schedule" | "variable" | "flow";
10
+ kind: "flow" | "script" | "resource" | "schedule" | "variable";
11
11
  getPath?: (() => string) | undefined;
12
12
  reset?: (() => Promise<void>) | undefined;
13
13
  };
@@ -1,16 +1,19 @@
1
1
  <script>export let label = '';
2
2
  export let options;
3
3
  export let value;
4
- export let small = false;
5
4
  import { createEventDispatcher } from 'svelte';
5
+ import Tooltip from './Tooltip.svelte';
6
6
  const dispatch = createEventDispatcher();
7
7
  </script>
8
8
 
9
- <fieldset>
9
+ <fieldset class="w-full">
10
10
  <legend class="sr-only">{label}</legend>
11
- <div class="flex flex-row gap-2">
11
+ <div class="flex flex-row flex-wrap gap-2 items-center mb-2 w-full">
12
12
  {#each options as [label, val]}
13
- <label class:selected={val == value} class={small ? 'py-0' : 'py-3'}>
13
+ <label
14
+ class:item-button-selected={val == value}
15
+ class="item-button text-center text-sm h-full p-2 grow"
16
+ >
14
17
  <input
15
18
  type="radio"
16
19
  value={val}
@@ -19,99 +22,11 @@ const dispatch = createEventDispatcher();
19
22
  aria-labelledby="memory-option-0-label"
20
23
  on:click={() => dispatch('change', val)}
21
24
  />
22
- <p>{label}</p>
25
+ <p>
26
+ {#if typeof label !== 'string'}{label.title} <Tooltip>{label.desc}</Tooltip>
27
+ {:else}{label}{/if}
28
+ </p>
23
29
  </label>
24
30
  {/each}
25
31
  </div>
26
32
  </fieldset>
27
-
28
- <style>
29
- label {
30
-
31
- display: flex;
32
-
33
- cursor: pointer;
34
-
35
- align-items: center;
36
-
37
- justify-content: center;
38
-
39
- border-radius: 0.375rem;
40
-
41
- border-width: 1px;
42
-
43
- padding-left: 0.75rem;
44
-
45
- padding-right: 0.75rem;
46
-
47
- font-size: 0.875rem;
48
-
49
- line-height: 1.25rem;
50
-
51
- font-weight: 500;
52
-
53
- text-transform: uppercase
54
- }
55
-
56
- label:focus {
57
-
58
- outline: 2px solid transparent;
59
-
60
- outline-offset: 2px
61
- }
62
-
63
- @media (min-width: 640px) {
64
-
65
- label {
66
-
67
- flex: 1 1 0%
68
- }
69
- }
70
-
71
- label.selected {
72
-
73
- display: flex;
74
-
75
- cursor: pointer;
76
-
77
- align-items: center;
78
-
79
- justify-content: center;
80
-
81
- border-radius: 0.375rem;
82
-
83
- border-width: 1px;
84
-
85
- background-color: rgb(59 130 246 / 0.7);
86
-
87
- padding-left: 0.75rem;
88
-
89
- padding-right: 0.75rem;
90
-
91
- font-size: 0.875rem;
92
-
93
- line-height: 1.25rem;
94
-
95
- font-weight: 500;
96
-
97
- text-transform: uppercase;
98
-
99
- --tw-text-opacity: 1;
100
-
101
- color: rgb(255 255 255 / var(--tw-text-opacity))
102
- }
103
-
104
- label.selected:focus {
105
-
106
- outline: 2px solid transparent;
107
-
108
- outline-offset: 2px
109
- }
110
-
111
- @media (min-width: 640px) {
112
-
113
- label.selected {
114
-
115
- flex: 1 1 0%
116
- }
117
- }</style>
@@ -2,9 +2,11 @@ import { SvelteComponentTyped } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
4
  label?: string | undefined;
5
- options: [string, any][];
5
+ options: [string | {
6
+ title: string;
7
+ desc: string;
8
+ }, any][];
6
9
  value: any;
7
- small?: boolean | undefined;
8
10
  };
9
11
  events: {
10
12
  change: CustomEvent<any>;