windmill-components 1.394.7 → 1.405.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 (227) hide show
  1. package/package/ata/edgeCases.d.ts +0 -1
  2. package/package/ata/edgeCases.js +2 -8
  3. package/package/ata/index.js +4 -3
  4. package/package/common.d.ts +1 -1
  5. package/package/common.js +2 -2
  6. package/package/components/ApiConnectForm.svelte +33 -7
  7. package/package/components/ArgInput.svelte +4 -2
  8. package/package/components/CenteredModal.svelte +4 -1
  9. package/package/components/CenteredModal.svelte.d.ts +1 -0
  10. package/package/components/DateInput.svelte +2 -0
  11. package/package/components/DateInput.svelte.d.ts +1 -0
  12. package/package/components/DefaultScripts.svelte +8 -3
  13. package/package/components/DefaultScripts.svelte.d.ts +5 -1
  14. package/package/components/DefaultScriptsInner.svelte +16 -7
  15. package/package/components/DefaultScriptsInner.svelte.d.ts +3 -1
  16. package/package/components/Dev.svelte +68 -11
  17. package/package/components/DropdownV2.svelte.d.ts +3 -3
  18. package/package/components/DropdownV2Inner.svelte.d.ts +3 -3
  19. package/package/components/EditableSchemaForm.svelte +1 -0
  20. package/package/components/Editor.svelte +3 -2
  21. package/package/components/Editor.svelte.d.ts +1 -1
  22. package/package/components/ExecutionDuration.svelte +44 -0
  23. package/package/components/ExecutionDuration.svelte.d.ts +24 -0
  24. package/package/components/FlowBuilder.svelte +20 -12
  25. package/package/components/FlowGraphViewer.svelte +9 -2
  26. package/package/components/FlowGraphViewerStep.svelte +23 -10
  27. package/package/components/FlowJobResult.svelte +0 -1
  28. package/package/components/FlowStatusViewerInner.svelte +17 -4
  29. package/package/components/FlowTimeline.svelte +3 -3
  30. package/package/components/HighlightCode.svelte +3 -0
  31. package/package/components/IconedResourceType.svelte +17 -10
  32. package/package/components/IconedResourceType.svelte.d.ts +2 -0
  33. package/package/components/IdEditorInput.svelte +0 -1
  34. package/package/components/InstanceSettings.svelte +247 -129
  35. package/package/components/InstanceSettings.svelte.d.ts +2 -0
  36. package/package/components/JobArgs.svelte +3 -1
  37. package/package/components/LightweightArgInput.svelte +35 -10
  38. package/package/components/LightweightArgInput.svelte.d.ts +1 -0
  39. package/package/components/LightweightObjectResourceInput.svelte +2 -0
  40. package/package/components/LightweightObjectResourceInput.svelte.d.ts +1 -0
  41. package/package/components/LightweightSchemaForm.svelte +2 -0
  42. package/package/components/LightweightSchemaForm.svelte.d.ts +1 -0
  43. package/package/components/Login.svelte +10 -5
  44. package/package/components/Login.svelte.d.ts +1 -0
  45. package/package/components/ModulePreview.svelte +21 -2
  46. package/package/components/ModuleStatus.svelte +3 -0
  47. package/package/components/ModuleStatus.svelte.d.ts +1 -0
  48. package/package/components/OAuthSetting.svelte +40 -15
  49. package/package/components/ObjectStoreConfigSettings.svelte +78 -76
  50. package/package/components/ParqetCsvTableRenderer.svelte +25 -3
  51. package/package/components/Password.svelte.d.ts +1 -1
  52. package/package/components/Path.svelte +74 -54
  53. package/package/components/Path.svelte.d.ts +2 -1
  54. package/package/components/ResourceEditor.svelte +38 -9
  55. package/package/components/ResultJobLoader.svelte +6 -3
  56. package/package/components/ResultJobLoader.svelte.d.ts +1 -1
  57. package/package/components/ScheduleEditorInner.svelte +2 -2
  58. package/package/components/SchemaForm.svelte +6 -1
  59. package/package/components/ScriptBuilder.svelte +12 -5
  60. package/package/components/ScriptEditor.svelte +33 -3
  61. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  62. package/package/components/Scrollable.svelte +47 -0
  63. package/package/components/Scrollable.svelte.d.ts +21 -0
  64. package/package/components/ShareModal.svelte.d.ts +2 -2
  65. package/package/components/SuperadminSettings.svelte +5 -7
  66. package/package/components/TestJobLoader.svelte +46 -5
  67. package/package/components/TestJobLoader.svelte.d.ts +2 -1
  68. package/package/components/ToggleHubWorkspaceQuick.svelte +14 -0
  69. package/package/components/ToggleHubWorkspaceQuick.svelte.d.ts +16 -0
  70. package/package/components/WorkspaceGroup.svelte +3 -2
  71. package/package/components/apps/components/helpers/DebouncedInput.svelte +9 -1
  72. package/package/components/apps/components/inputs/AppSelect.svelte +1 -1
  73. package/package/components/apps/editor/component/components.d.ts +79 -79
  74. package/package/components/apps/svelte-select/lib/Select.svelte +1 -1
  75. package/package/components/common/fileUpload/FileUpload.svelte +1 -1
  76. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  77. package/package/components/common/menu/Menu.svelte +2 -1
  78. package/package/components/common/menu/MenuV2.svelte +3 -1
  79. package/package/components/common/menu/MenuV2.svelte.d.ts +1 -0
  80. package/package/components/common/popup/Popup.svelte +22 -12
  81. package/package/components/common/popup/Popup.svelte.d.ts +2 -0
  82. package/package/components/common/popup/PopupV2.svelte +58 -0
  83. package/package/components/common/popup/PopupV2.svelte.d.ts +27 -0
  84. package/package/components/copilot/CronGen.svelte +1 -1
  85. package/package/components/copilot/RegexGen.svelte +4 -4
  86. package/package/components/copilot/StepGen.svelte +6 -6
  87. package/package/components/copilot/StepGenQuick.svelte +57 -0
  88. package/package/components/copilot/StepGenQuick.svelte.d.ts +23 -0
  89. package/package/components/copilot/flow.d.ts +2 -0
  90. package/package/components/copilot/flow.js +55 -0
  91. package/package/components/details/DetailPageDetailPanel.svelte +9 -1
  92. package/package/components/details/DetailPageDetailPanel.svelte.d.ts +2 -1
  93. package/package/components/details/DetailPageLayout.svelte +2 -0
  94. package/package/components/details/DetailPageLayout.svelte.d.ts +3 -0
  95. package/package/components/details/utils.d.ts +0 -1
  96. package/package/components/details/utils.js +1 -12
  97. package/package/components/flows/FlowEditor.svelte +2 -1
  98. package/package/components/flows/FlowProgressBar.svelte +16 -1
  99. package/package/components/flows/FlowProgressBar.svelte.d.ts +1 -0
  100. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +8 -0
  101. package/package/components/flows/content/FlowBranchesAllWrapper.svelte.d.ts +1 -0
  102. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +8 -0
  103. package/package/components/flows/content/FlowBranchesOneWrapper.svelte.d.ts +1 -0
  104. package/package/components/flows/content/FlowConstants.svelte +1 -1
  105. package/package/components/flows/content/FlowEditorPanel.svelte +3 -0
  106. package/package/components/flows/content/FlowInputs.svelte +7 -6
  107. package/package/components/flows/content/FlowInputs.svelte.d.ts +1 -0
  108. package/package/components/flows/content/FlowInputsFlowQuick.svelte +65 -0
  109. package/package/components/flows/content/FlowInputsFlowQuick.svelte.d.ts +19 -0
  110. package/package/components/flows/content/FlowInputsQuick.svelte +419 -0
  111. package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +33 -0
  112. package/package/components/flows/content/FlowLoop.svelte +7 -1
  113. package/package/components/flows/content/FlowModuleComponent.svelte +12 -3
  114. package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
  115. package/package/components/flows/content/FlowModuleSkip.svelte +69 -0
  116. package/package/components/flows/content/FlowModuleSkip.svelte.d.ts +20 -0
  117. package/package/components/flows/content/FlowModuleWrapper.svelte +17 -4
  118. package/package/components/flows/content/FlowPreprocessorModule.svelte +16 -0
  119. package/package/components/flows/content/FlowPreprocessorModule.svelte.d.ts +16 -0
  120. package/package/components/flows/content/FlowWhileLoop.svelte +9 -0
  121. package/package/components/flows/content/FlowWhileLoop.svelte.d.ts +1 -0
  122. package/package/components/flows/content/GenAiQuick.svelte +30 -0
  123. package/package/components/flows/content/GenAiQuick.svelte.d.ts +20 -0
  124. package/package/components/flows/content/ScriptEditorDrawer.svelte +3 -2
  125. package/package/components/flows/flowInfers.js +1 -1
  126. package/package/components/flows/header/FlowPreviewButtons.svelte +1 -0
  127. package/package/components/flows/idUtils.js +3 -1
  128. package/package/components/flows/map/FlowCopilotButton.svelte +55 -0
  129. package/package/components/flows/map/FlowCopilotButton.svelte.d.ts +16 -0
  130. package/package/components/flows/map/FlowErrorHandlerItem.svelte +77 -47
  131. package/package/components/flows/map/FlowJobsMenu.svelte +1 -1
  132. package/package/components/flows/map/FlowModuleSchemaItem.svelte +25 -12
  133. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
  134. package/package/components/flows/map/FlowModuleSchemaMap.svelte +61 -18
  135. package/package/components/flows/map/InsertModuleButton.svelte +161 -138
  136. package/package/components/flows/map/InsertModuleButton.svelte.d.ts +7 -4
  137. package/package/components/flows/map/MapItem.svelte +11 -0
  138. package/package/components/flows/map/MapItem.svelte.d.ts +1 -0
  139. package/package/components/flows/pickers/FlowScriptPickerQuick.svelte +48 -0
  140. package/package/components/flows/pickers/FlowScriptPickerQuick.svelte.d.ts +23 -0
  141. package/package/components/flows/pickers/FlowToplevelNode.svelte +19 -0
  142. package/package/components/flows/pickers/FlowToplevelNode.svelte.d.ts +19 -0
  143. package/package/components/flows/pickers/PickHubScriptQuick.svelte +138 -0
  144. package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +33 -0
  145. package/package/components/flows/pickers/TopLevelNode.svelte +58 -0
  146. package/package/components/flows/pickers/TopLevelNode.svelte.d.ts +21 -0
  147. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +120 -0
  148. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte.d.ts +35 -0
  149. package/package/components/flows/types.d.ts +1 -0
  150. package/package/components/graph/FlowGraphV2.svelte +93 -58
  151. package/package/components/graph/FlowGraphV2.svelte.d.ts +2 -1
  152. package/package/components/graph/graphBuilder.d.ts +2 -1
  153. package/package/components/graph/graphBuilder.js +345 -280
  154. package/package/components/graph/model.d.ts +1 -0
  155. package/package/components/graph/renderers/edges/BaseEdge.svelte +36 -14
  156. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
  157. package/package/components/graph/renderers/nodes/InputNode.svelte +31 -51
  158. package/package/components/graph/renderers/nodes/InputNode.svelte.d.ts +6 -1
  159. package/package/components/graph/renderers/nodes/ModuleNode.svelte +2 -1
  160. package/package/components/graph/util.d.ts +1 -1
  161. package/package/components/graph/util.js +7 -2
  162. package/package/components/home/ListFiltersQuick.svelte +51 -0
  163. package/package/components/home/ListFiltersQuick.svelte.d.ts +23 -0
  164. package/package/components/icons/AnsibleIcon.svelte +42 -0
  165. package/package/components/icons/AnsibleIcon.svelte.d.ts +25 -0
  166. package/package/components/icons/WindmillIcon2.svelte +141 -0
  167. package/package/components/icons/WindmillIcon2.svelte.d.ts +20 -0
  168. package/package/components/icons/index.d.ts +2 -1
  169. package/package/components/icons/index.js +2 -1
  170. package/package/components/instanceSettings.d.ts +2 -2
  171. package/package/components/instanceSettings.js +25 -58
  172. package/package/components/jobs/JobProgressBar.svelte +52 -0
  173. package/package/components/jobs/JobProgressBar.svelte.d.ts +23 -0
  174. package/package/components/progressBar/ProgressBar.svelte +18 -1
  175. package/package/components/progressBar/ProgressBar.svelte.d.ts +3 -0
  176. package/package/components/runs/JobPreview.svelte +1 -0
  177. package/package/components/runs/PreprocessedArgsDisplay.svelte +71 -0
  178. package/package/components/runs/PreprocessedArgsDisplay.svelte.d.ts +16 -0
  179. package/package/components/schema/AddProperty.svelte +1 -0
  180. package/package/components/schema/EditableSchemaWrapper.svelte +142 -19
  181. package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +1 -0
  182. package/package/components/schema/FlowPropertyEditor.svelte +12 -0
  183. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -0
  184. package/package/components/scriptEditor/LogPanel.svelte +1 -0
  185. package/package/components/scriptEditor/LogPanel.svelte.d.ts +3 -1
  186. package/package/components/search/GlobalSearchModal.svelte +2 -1
  187. package/package/components/sidebar/SidebarContent.svelte +69 -8
  188. package/package/components/sidebar/changelogs.js +10 -0
  189. package/package/components/triggers/RouteEditor.svelte +19 -0
  190. package/package/components/triggers/RouteEditor.svelte.d.ts +21 -0
  191. package/package/components/triggers/RouteEditorInner.svelte +327 -0
  192. package/package/components/triggers/RouteEditorInner.svelte.d.ts +21 -0
  193. package/package/components/triggers/RoutesPanel.svelte +74 -0
  194. package/package/components/triggers/RoutesPanel.svelte.d.ts +17 -0
  195. package/package/editorUtils.js +2 -0
  196. package/package/gen/core/OpenAPI.js +1 -1
  197. package/package/gen/schemas.gen.d.ts +159 -8
  198. package/package/gen/schemas.gen.js +161 -8
  199. package/package/gen/services.gen.d.ts +139 -1
  200. package/package/gen/services.gen.js +282 -1
  201. package/package/gen/types.gen.d.ts +455 -12
  202. package/package/hubPaths.json +6 -8
  203. package/package/infer.d.ts +4 -2
  204. package/package/infer.js +25 -23
  205. package/package/inferArgSig.js +8 -2
  206. package/package/monaco_workers/build_workers.js +8 -13
  207. package/package/monaco_workers/graphql.worker.bundle.js +45440 -174
  208. package/package/relative_imports.d.ts +3 -0
  209. package/package/relative_imports.js +25 -0
  210. package/package/script_helpers.d.ts +7 -2
  211. package/package/script_helpers.js +151 -3
  212. package/package/scripts.d.ts +1 -1
  213. package/package/scripts.js +5 -1
  214. package/package/stores.d.ts +1 -0
  215. package/package/stores.js +1 -0
  216. package/package/utils.d.ts +1 -0
  217. package/package/utils.js +4 -0
  218. package/package.json +16 -7
  219. package/package/components/flows/map/InsertTriggerButton.svelte +0 -48
  220. package/package/components/flows/map/InsertTriggerButton.svelte.d.ts +0 -24
  221. package/package/monaco_workers/cssWorker-es.js +0 -43763
  222. package/package/monaco_workers/editorWorker-es.d.ts +0 -2
  223. package/package/monaco_workers/editorWorker-es.js +0 -8066
  224. package/package/monaco_workers/htmlWorker-es.js +0 -21551
  225. package/package/monaco_workers/jsonWorker-es.js +0 -13523
  226. package/package/monaco_workers/tsWorker-es.d.ts +0 -103
  227. package/package/monaco_workers/tsWorker-es.js +0 -212193
@@ -0,0 +1,138 @@
1
+ <script>import { createEventDispatcher } from 'svelte';
2
+ import { Skeleton } from '../../common';
3
+ import { classNames } from '../../../utils';
4
+ import { APP_TO_ICON_COMPONENT } from '../../icons';
5
+ import { IntegrationService, ScriptService } from '../../../gen';
6
+ import { Circle } from 'lucide-svelte';
7
+ export let kind = 'script';
8
+ export let filter = '';
9
+ export let loading = false;
10
+ export let selected = undefined;
11
+ let hubNotAvailable = false;
12
+ const dispatch = createEventDispatcher();
13
+ export let appFilter = undefined;
14
+ export let items = [];
15
+ export let apps = [];
16
+ let allApps = [];
17
+ $: applyFilter(filter, kind, appFilter);
18
+ $: getAllApps(kind);
19
+ async function getAllApps(filterKind) {
20
+ try {
21
+ hubNotAvailable = false;
22
+ allApps = (await IntegrationService.listHubIntegrations({
23
+ kind: filterKind
24
+ })).map((x) => x.name);
25
+ apps = allApps;
26
+ }
27
+ catch (err) {
28
+ console.error('Hub is not available');
29
+ allApps = [];
30
+ apps = [];
31
+ hubNotAvailable = true;
32
+ }
33
+ }
34
+ let startTs = 0;
35
+ async function applyFilter(filter, filterKind, appFilter) {
36
+ try {
37
+ loading = true;
38
+ hubNotAvailable = false;
39
+ const ts = Date.now();
40
+ startTs = ts;
41
+ await new Promise((resolved, rejected) => setTimeout(resolved, 200));
42
+ if (ts < startTs)
43
+ return;
44
+ const scripts = filter.length > 0
45
+ ? await ScriptService.queryHubScripts({
46
+ text: `${filter}`,
47
+ limit: 40,
48
+ kind: filterKind
49
+ })
50
+ : (await ScriptService.getTopHubScripts({
51
+ limit: 40,
52
+ kind: filterKind,
53
+ app: appFilter
54
+ })).asks ?? [];
55
+ const mappedItems = scripts.map((x) => ({
56
+ ...x,
57
+ path: `hub/${x.version_id}/${x.app}/${x.summary.toLowerCase().replaceAll(/\s+/g, '_')}`,
58
+ summary: `${x.summary} (${x.app})`
59
+ }));
60
+ if (filter.length > 0) {
61
+ apps = Array.from(new Set(mappedItems?.map((x) => x.app) ?? [])).sort();
62
+ }
63
+ else {
64
+ apps = allApps;
65
+ }
66
+ items = appFilter ? mappedItems.filter((x) => x.app === appFilter) : mappedItems;
67
+ if (ts === startTs) {
68
+ loading = false;
69
+ }
70
+ hubNotAvailable = false;
71
+ }
72
+ catch (err) {
73
+ hubNotAvailable = true;
74
+ console.error('Hub not available');
75
+ loading = false;
76
+ }
77
+ }
78
+ function onKeyDown(e) {
79
+ if (selected != undefined &&
80
+ items &&
81
+ selected >= 0 &&
82
+ selected < items?.length &&
83
+ e.key === 'Enter') {
84
+ e.preventDefault();
85
+ let item = items[selected];
86
+ dispatch('pickScript', item);
87
+ }
88
+ }
89
+ </script>
90
+
91
+ <svelte:window on:keydown={onKeyDown} />
92
+ {#if hubNotAvailable}
93
+ <div class="text-2xs text-red-400 ftext-2xs font-light text-center py-2 px-3 items-center">
94
+ Hub not available
95
+ </div>
96
+ {:else if loading}
97
+ {#each Array(15).fill(0) as _}
98
+ <Skeleton layout={[0.1, [1.5]]} />
99
+ {/each}
100
+ {:else if items.length > 0 && apps.length > 0}
101
+ <ul>
102
+ {#each items as item, index (item.path)}
103
+ <li class="w-full">
104
+ <button
105
+ class="px-3 py-2 gap-2 flex flex-row w-full hover:bg-surface-hover transition-all items-center rounded-md {index ===
106
+ selected
107
+ ? 'bg-surface-hover'
108
+ : ''}"
109
+ on:click={() => dispatch('pickScript', item)}
110
+ >
111
+ <div class={classNames('flex justify-center items-center')}>
112
+ {#if item['app'] in APP_TO_ICON_COMPONENT}
113
+ <svelte:component this={APP_TO_ICON_COMPONENT[item['app']]} height={14} width={14} />
114
+ {:else}
115
+ <div
116
+ class="w-[14px] h-[14px] text-gray-400 flex flex-row items-center justify-center"
117
+ >
118
+ <Circle size="12" />
119
+ </div>
120
+ {/if}
121
+ </div>
122
+
123
+ <span class="grow truncate text-left text-2xs text-primary font-normal">
124
+ {item.summary ?? ''}
125
+ </span>
126
+ {#if index === selected}
127
+ <kbd class="!text-xs">&crarr;</kbd>
128
+ {/if}
129
+ </button>
130
+ </li>
131
+ {/each}
132
+ </ul>
133
+ {#if items.length == 40}
134
+ <div class="text-2xs text-tercary font-extralight text-center py-2 px-3 items-center">
135
+ There are more items than being displayed. Refine your search.
136
+ </div>
137
+ {/if}
138
+ {/if}
@@ -0,0 +1,33 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import { type HubScriptKind } from '../../../gen';
3
+ declare const __propDef: {
4
+ props: {
5
+ kind?: string | undefined;
6
+ filter?: string | undefined;
7
+ loading?: boolean | undefined;
8
+ selected?: number | undefined;
9
+ appFilter?: string | undefined;
10
+ items?: {
11
+ path: string;
12
+ summary: string;
13
+ id: number;
14
+ version_id: number;
15
+ ask_id: number;
16
+ app: string;
17
+ kind: HubScriptKind;
18
+ }[] | undefined;
19
+ apps?: string[] | undefined;
20
+ };
21
+ events: {
22
+ pickScript: CustomEvent<any>;
23
+ } & {
24
+ [evt: string]: CustomEvent<any>;
25
+ };
26
+ slots: {};
27
+ };
28
+ export type PickHubScriptQuickProps = typeof __propDef.props;
29
+ export type PickHubScriptQuickEvents = typeof __propDef.events;
30
+ export type PickHubScriptQuickSlots = typeof __propDef.slots;
31
+ export default class PickHubScriptQuick extends SvelteComponent<PickHubScriptQuickProps, PickHubScriptQuickEvents, PickHubScriptQuickSlots> {
32
+ }
33
+ export {};
@@ -0,0 +1,58 @@
1
+ <script>import BarsStaggered from '../../icons/BarsStaggered.svelte';
2
+ import { CheckCircle2, ChevronRight, Code, GitBranch, Repeat, Square, Zap } from 'lucide-svelte';
3
+ import { createEventDispatcher } from 'svelte';
4
+ import { twMerge } from 'tailwind-merge';
5
+ export let label;
6
+ export let selected = false;
7
+ export let returnIcon = false;
8
+ const dispatch = createEventDispatcher();
9
+ </script>
10
+
11
+ <button
12
+ class={twMerge(
13
+ 'w-full text-left py-2 px-1.5 hover:bg-surface-hover text-xs font-medium transition-all whitespace-nowrap flex flex-row gap-2 items-center rounded-md',
14
+ selected ? 'bg-surface-hover' : '',
15
+ $$props.class
16
+ )}
17
+ on:pointerdown={() => dispatch('select', label)}
18
+ role="menuitem"
19
+ tabindex="-1"
20
+ >
21
+ <span class="grow flex items-center gap-2">
22
+ {#if label === 'Action'}
23
+ <Code size={14} />
24
+ Action
25
+ <ChevronRight size={12} class="ml-auto" color="#4c566a" />
26
+ {:else if label === 'Trigger'}
27
+ <Zap size={14} />
28
+ Trigger
29
+ <ChevronRight size={12} class="ml-auto" color="#4c566a" />
30
+ {:else if label === 'Approval/Prompt'}
31
+ <CheckCircle2 size={14} />
32
+ Approval/Prompt
33
+ <ChevronRight size={12} class="ml-auto" color="#4c566a" />
34
+ {:else if label === 'Flow'}
35
+ <BarsStaggered size={14} />
36
+ Flow
37
+ <ChevronRight size={12} class="ml-auto" color="#4c566a" />
38
+ {:else if label === 'End Flow'}
39
+ <Square size={14} />
40
+ End Flow
41
+ {:else if label === 'For Loop'}
42
+ <Repeat size={14} />
43
+ For Loop
44
+ {:else if label === 'While Loop'}
45
+ <Repeat size={14} />
46
+ While Loop
47
+ {:else if label === 'Branch to one'}
48
+ <GitBranch size={14} />
49
+ Branch to one
50
+ {:else if label === 'Branch to all'}
51
+ <GitBranch size={14} />
52
+ Branch to all
53
+ {/if}
54
+ </span>
55
+ {#if returnIcon && selected}
56
+ <kbd class="!text-xs text-right">&crarr;</kbd>
57
+ {/if}
58
+ </button>
@@ -0,0 +1,21 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ [x: string]: any;
5
+ label: string;
6
+ selected?: boolean | undefined;
7
+ returnIcon?: boolean | undefined;
8
+ };
9
+ events: {
10
+ select: CustomEvent<any>;
11
+ } & {
12
+ [evt: string]: CustomEvent<any>;
13
+ };
14
+ slots: {};
15
+ };
16
+ export type TopLevelNodeProps = typeof __propDef.props;
17
+ export type TopLevelNodeEvents = typeof __propDef.events;
18
+ export type TopLevelNodeSlots = typeof __propDef.slots;
19
+ export default class TopLevelNode extends SvelteComponent<TopLevelNodeProps, TopLevelNodeEvents, TopLevelNodeSlots> {
20
+ }
21
+ export {};
@@ -0,0 +1,120 @@
1
+ <script>import { workspaceStore } from '../../../stores';
2
+ import { createEventDispatcher } from 'svelte';
3
+ import { FlowService, ScriptService } from '../../../gen';
4
+ import SearchItems from '../../SearchItems.svelte';
5
+ import { Skeleton } from '../../common';
6
+ import { emptyString } from '../../../utils';
7
+ import { Code2 } from 'lucide-svelte';
8
+ import BarsStaggered from '../../icons/BarsStaggered.svelte';
9
+ export let kind = 'script';
10
+ export let isTemplate = undefined;
11
+ export let selected = undefined;
12
+ let items = undefined;
13
+ let filteredItems = undefined;
14
+ export let filteredWithOwner = undefined;
15
+ export let filter = '';
16
+ export let owners = [];
17
+ $: $workspaceStore && kind && loadItems();
18
+ async function loadItems() {
19
+ items =
20
+ kind == 'flow'
21
+ ? await FlowService.listFlows({ workspace: $workspaceStore })
22
+ : await ScriptService.listScripts({
23
+ workspace: $workspaceStore,
24
+ kinds: kind,
25
+ isTemplate
26
+ });
27
+ }
28
+ export let ownerFilter = undefined;
29
+ $: if ($workspaceStore) {
30
+ ownerFilter = undefined;
31
+ }
32
+ $: owners = Array.from(new Set(filteredItems?.map((x) => x.path.split('/').slice(0, 2).join('/')) ?? [])).sort((a, b) => {
33
+ if (a.startsWith('u/') && !b.startsWith('u/'))
34
+ return -1;
35
+ if (b.startsWith('u/') && !a.startsWith('u/'))
36
+ return 1;
37
+ if (a.startsWith('f/') && !b.startsWith('f/'))
38
+ return -1;
39
+ if (b.startsWith('f/') && !a.startsWith('f/'))
40
+ return 1;
41
+ return a.localeCompare(b);
42
+ });
43
+ const dispatch = createEventDispatcher();
44
+ let lockHash = false;
45
+ $: filteredWithOwner =
46
+ ownerFilter != undefined
47
+ ? filteredItems?.filter((x) => x.path.startsWith(ownerFilter?.name))
48
+ : filteredItems;
49
+ function onKeyDown(e) {
50
+ if (selected != undefined &&
51
+ filteredWithOwner &&
52
+ selected >= 0 &&
53
+ selected < filteredWithOwner.length &&
54
+ e.key === 'Enter') {
55
+ e.preventDefault();
56
+ let item = filteredWithOwner[selected];
57
+ if (kind == 'flow') {
58
+ dispatch('pickFlow', { path: item.path });
59
+ }
60
+ else {
61
+ dispatch('pickScript', { path: item.path, hash: lockHash ? item.hash : undefined });
62
+ }
63
+ }
64
+ }
65
+ </script>
66
+
67
+ <SearchItems
68
+ {filter}
69
+ {items}
70
+ bind:filteredItems
71
+ f={(x) => (emptyString(x.summary) ? x.path : x.summary + ' (' + x.path + ')')}
72
+ />
73
+
74
+ <svelte:window on:keydown={onKeyDown} />
75
+ {#if filteredItems}
76
+ {#if filteredItems.length == 0}
77
+ <div class="text-2xs text-tertiary font-light text-center py-2 px-3 items-center">
78
+ {kind == 'flow' ? 'No flows found.' : 'No scripts found.'}
79
+ </div>
80
+ {/if}
81
+ <ul>
82
+ {#each filteredWithOwner ?? [] as { path, hash, summary, marked }, index}
83
+ <li class="w-full">
84
+ <button
85
+ class="px-3 py-2 gap-2 flex flex-row w-full hover:bg-surface-hover transition-all items-center rounded-md {index ===
86
+ selected
87
+ ? 'bg-surface-hover'
88
+ : ''}"
89
+ on:click={() => {
90
+ if (kind == 'flow') {
91
+ dispatch('pickFlow', { path: path })
92
+ } else {
93
+ dispatch('pickScript', { path: path, hash: lockHash ? hash : undefined })
94
+ }
95
+ }}
96
+ >
97
+ {#if kind == 'flow'}
98
+ <BarsStaggered size={14} />
99
+ {:else}
100
+ <Code2 size={14} />
101
+ {/if}
102
+ <span class="grow min-w-0 truncate text-left text-2xs text-primary font-normal">
103
+ {#if marked}
104
+ {@html marked}
105
+ {:else}
106
+ {!summary || summary.length == 0 ? path : summary}
107
+ {/if}</span
108
+ >
109
+ {#if index === selected}
110
+ <kbd class="!text-xs">&crarr;</kbd>
111
+ {/if}
112
+ </button>
113
+ </li>
114
+ {/each}
115
+ </ul>
116
+ {:else}
117
+ {#each Array(10).fill(0) as _}
118
+ <Skeleton layout={[0.5, [1.5]]} />
119
+ {/each}
120
+ {/if}
@@ -0,0 +1,35 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ kind?: "script" | "failure" | "trigger" | "approval" | "flow" | "preprocessor" | undefined;
5
+ isTemplate?: boolean | undefined;
6
+ selected?: number | undefined;
7
+ filteredWithOwner?: ({
8
+ path: string;
9
+ summary?: string | undefined;
10
+ description?: string | undefined;
11
+ hash?: string | undefined;
12
+ } & {
13
+ marked?: string | undefined;
14
+ })[] | undefined;
15
+ filter?: string | undefined;
16
+ owners?: string[] | undefined;
17
+ ownerFilter?: {
18
+ kind: 'inline' | 'owner' | 'integrations';
19
+ name: string | undefined;
20
+ } | undefined;
21
+ };
22
+ events: {
23
+ pickFlow: CustomEvent<any>;
24
+ pickScript: CustomEvent<any>;
25
+ } & {
26
+ [evt: string]: CustomEvent<any>;
27
+ };
28
+ slots: {};
29
+ };
30
+ export type WorkspaceScriptPickerQuickProps = typeof __propDef.props;
31
+ export type WorkspaceScriptPickerQuickEvents = typeof __propDef.events;
32
+ export type WorkspaceScriptPickerQuickSlots = typeof __propDef.slots;
33
+ export default class WorkspaceScriptPickerQuick extends SvelteComponent<WorkspaceScriptPickerQuickProps, WorkspaceScriptPickerQuickEvents, WorkspaceScriptPickerQuickSlots> {
34
+ }
35
+ export {};
@@ -36,4 +36,5 @@ export type FlowEditorContext = {
36
36
  initialPath: string;
37
37
  flowInputsStore: Writable<FlowInput>;
38
38
  customUi: FlowBuilderWhitelabelCustomUi;
39
+ insertButtonOpen: Writable<boolean>;
39
40
  };
@@ -21,17 +21,21 @@ import DataflowEdge from './renderers/edges/DataflowEdge.svelte';
21
21
  import { encodeState } from '../../utils';
22
22
  import BranchOneStart from './renderers/nodes/BranchOneStart.svelte';
23
23
  import NoBranchNode from './renderers/nodes/NoBranchNode.svelte';
24
+ import { Alert, Drawer } from '../common';
25
+ import Button from '../common/button/Button.svelte';
26
+ import FlowYamlEditor from '../flows/header/FlowYamlEditor.svelte';
24
27
  export let success = undefined;
25
28
  export let modules = [];
26
29
  export let failureModule = undefined;
30
+ export let preprocessorModule = undefined;
27
31
  export let minHeight = 0;
28
32
  export let maxHeight = undefined;
29
33
  export let notSelectable = false;
30
34
  export let flowModuleStates = undefined;
31
35
  export let selectedId = writable(undefined);
32
36
  export let insertable = false;
33
- export let moving = undefined;
34
37
  export let scroll = false;
38
+ export let moving = undefined;
35
39
  // Download: display a top level button to open the graph in a new tab
36
40
  export let download = false;
37
41
  export let fullSize = false;
@@ -94,7 +98,7 @@ $: graph = graphBuilder(modules, {
94
98
  insertable,
95
99
  flowModuleStates,
96
100
  selectedId: $selectedId
97
- }, failureModule, {
101
+ }, failureModule, preprocessorModule, {
98
102
  deleteBranch: (detail, label) => {
99
103
  $selectedId = label;
100
104
  dispatch('deleteBranch', detail);
@@ -131,6 +135,9 @@ const nodes = writable([]);
131
135
  const edges = writable([]);
132
136
  let height = 0;
133
137
  function updateStores() {
138
+ if (graph.error) {
139
+ return;
140
+ }
134
141
  $nodes = layoutNodes(graph?.nodes);
135
142
  $edges = graph.edges;
136
143
  height = Math.max(...$nodes.map((n) => n.position.y + NODE.height + 40), minHeight);
@@ -161,10 +168,11 @@ $: showDataflow =
161
168
  !$selectedId.startsWith('constants') &&
162
169
  !$selectedId.startsWith('settings') &&
163
170
  $selectedId !== 'failure' &&
171
+ $selectedId !== 'preprocessor' &&
164
172
  $selectedId !== 'Result';
165
173
  const viewport = writable({
166
174
  x: 0,
167
- y: 5,
175
+ y: 35,
168
176
  zoom: 1
169
177
  });
170
178
  function centerViewport(width) {
@@ -178,66 +186,93 @@ $: width && centerViewport(width);
178
186
  onMount(() => {
179
187
  centerViewport(width);
180
188
  });
189
+ let yamlEditorDrawer = undefined;
181
190
  </script>
182
191
 
192
+ {#if insertable}
193
+ <FlowYamlEditor bind:drawer={yamlEditorDrawer} />
194
+ {/if}
195
+
183
196
  <div style={`height: ${height}px; max-height: ${maxHeight}px;`} bind:clientWidth={width}>
184
- <SvelteFlow
185
- {nodes}
186
- {edges}
187
- {edgeTypes}
188
- {nodeTypes}
189
- {viewport}
190
- {height}
191
- minZoom={0.5}
192
- connectionLineType={ConnectionLineType.SmoothStep}
193
- defaultEdgeOptions={{ type: 'smoothstep' }}
194
- preventScrolling={scroll}
195
- zoomOnDoubleClick={false}
196
- elementsSelectable={false}
197
- {proOptions}
198
- nodesDraggable={false}
199
- >
200
- <div class="absolute inset-0 !bg-surface-secondary" />
201
- <Controls position="top-right" orientation="horizontal" showLock={false}>
202
- {#if download}
203
- <ControlButton
204
- on:click={() => {
205
- try {
206
- localStorage.setItem('svelvet', encodeState({ modules, failureModule }))
207
- } catch (e) {
208
- console.error('error interacting with local storage', e)
209
- }
210
- window.open('/view_graph', '_blank')
211
- }}
212
- class="!bg-surface"
213
- >
214
- <Expand size="14" />
215
- </ControlButton>
216
- {/if}
217
- </Controls>
197
+ {#if graph?.error}
198
+ <div class="center-center">
199
+ <Alert title="Error parsing the flow" type="error" class="max-w-1/2">
200
+ {graph.error}
218
201
 
219
- <Controls
220
- position="top-left"
221
- orientation="horizontal"
222
- showLock={false}
223
- showZoom={false}
224
- showFitView={false}
225
- class="!shadow-none"
226
- >
227
- {#if showDataflow}
228
- <Toggle
229
- value={$useDataflow}
230
- on:change={() => {
231
- $useDataflow = !$useDataflow
232
- }}
202
+ <Button
203
+ color="red"
233
204
  size="xs"
234
- options={{
235
- right: 'Dataflow'
236
- }}
237
- />
238
- {/if}
239
- </Controls>
240
- </SvelteFlow>
205
+ btnClasses="mt-2 w-min"
206
+ on:click={() => yamlEditorDrawer?.openDrawer()}>Open YAML editor</Button
207
+ >
208
+ </Alert>
209
+ </div>
210
+ {:else}
211
+ <SvelteFlow
212
+ on:paneclick={(e) => {
213
+ window.dispatchEvent(new Event('focus'))
214
+ }}
215
+ {nodes}
216
+ {edges}
217
+ {edgeTypes}
218
+ {nodeTypes}
219
+ {viewport}
220
+ {height}
221
+ minZoom={0.5}
222
+ connectionLineType={ConnectionLineType.SmoothStep}
223
+ defaultEdgeOptions={{ type: 'smoothstep' }}
224
+ preventScrolling={scroll}
225
+ zoomOnDoubleClick={false}
226
+ elementsSelectable={false}
227
+ {proOptions}
228
+ nodesDraggable={false}
229
+ --background-color={false}
230
+ >
231
+ <div class="absolute inset-0 !bg-surface-secondary" />
232
+ <Controls position="top-right" orientation="horizontal" showLock={false}>
233
+ {#if download}
234
+ <ControlButton
235
+ on:click={() => {
236
+ try {
237
+ localStorage.setItem(
238
+ 'svelvet',
239
+ encodeState({ modules, failureModule, preprocessorModule })
240
+ )
241
+ } catch (e) {
242
+ console.error('error interacting with local storage', e)
243
+ }
244
+ window.open('/view_graph', '_blank')
245
+ }}
246
+ class="!bg-surface"
247
+ >
248
+ <Expand size="14" />
249
+ </ControlButton>
250
+ {/if}
251
+ </Controls>
252
+
253
+ <Controls
254
+ position="top-left"
255
+ orientation="horizontal"
256
+ showLock={false}
257
+ showZoom={false}
258
+ showFitView={false}
259
+ class="!shadow-none"
260
+ >
261
+ {#if showDataflow}
262
+ <Toggle
263
+ value={$useDataflow}
264
+ on:change={() => {
265
+ $useDataflow = !$useDataflow
266
+ }}
267
+ size="xs"
268
+ options={{
269
+ right: 'Dataflow'
270
+ }}
271
+ />
272
+ {/if}
273
+ </Controls>
274
+ </SvelteFlow>
275
+ {/if}
241
276
  </div>
242
277
 
243
278
  <style>
@@ -9,14 +9,15 @@ declare const __propDef: {
9
9
  success?: boolean | undefined;
10
10
  modules?: FlowModule[] | undefined;
11
11
  failureModule?: FlowModule | undefined;
12
+ preprocessorModule?: FlowModule | undefined;
12
13
  minHeight?: number | undefined;
13
14
  maxHeight?: number | undefined;
14
15
  notSelectable?: boolean | undefined;
15
16
  flowModuleStates?: Record<string, GraphModuleState> | undefined;
16
17
  selectedId?: Writable<string | undefined> | undefined;
17
18
  insertable?: boolean | undefined;
18
- moving?: string | undefined;
19
19
  scroll?: boolean | undefined;
20
+ moving?: string | undefined;
20
21
  download?: boolean | undefined;
21
22
  fullSize?: boolean | undefined;
22
23
  disableAi?: boolean | undefined;
@@ -10,7 +10,8 @@ export type GraphEventHandlers = {
10
10
  selectedIteration: (detail: any, moduleId: string) => void;
11
11
  changeId: (newId: string) => void;
12
12
  };
13
- export default function graphBuilder(modules: FlowModule[] | undefined, extra: Record<string, any>, failureModule: FlowModule | undefined, eventHandlers: GraphEventHandlers, success: boolean | undefined, useDataflow: boolean | undefined, selectedId: string | undefined, moving: string | undefined): {
13
+ export default function graphBuilder(modules: FlowModule[] | undefined, extra: Record<string, any>, failureModule: FlowModule | undefined, preprocessorModule: FlowModule | undefined, eventHandlers: GraphEventHandlers, success: boolean | undefined, useDataflow: boolean | undefined, selectedId: string | undefined, moving: string | undefined): {
14
14
  nodes: Node[];
15
15
  edges: Edge[];
16
+ error?: string | undefined;
16
17
  };