windmill-components 1.352.9 → 1.362.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 (208) hide show
  1. package/package/assets/app.css +8 -45
  2. package/package/components/ApiConnectForm.svelte +1 -0
  3. package/package/components/ArgInput.svelte +5 -1
  4. package/package/components/ChangeInstanceUsername.svelte +20 -12
  5. package/package/components/ContentSearchInner.svelte +359 -0
  6. package/package/components/{ContentSearch.svelte.d.ts → ContentSearchInner.svelte.d.ts} +9 -5
  7. package/package/components/CustomPopover.svelte +73 -0
  8. package/package/components/CustomPopover.svelte.d.ts +29 -0
  9. package/package/components/DateTimeInput.svelte +29 -3
  10. package/package/components/DateTimeInput.svelte.d.ts +4 -0
  11. package/package/components/Dev.svelte +8 -3
  12. package/package/components/DurationMs.svelte +2 -2
  13. package/package/components/FlowBuilder.svelte +122 -24
  14. package/package/components/FlowBuilder.svelte.d.ts +1 -0
  15. package/package/components/FlowGraphViewerStep.svelte +2 -2
  16. package/package/components/FlowJobResult.svelte +5 -3
  17. package/package/components/FlowStatusViewer.svelte +4 -3
  18. package/package/components/FlowStatusViewerInner.svelte +265 -160
  19. package/package/components/FlowStatusViewerInner.svelte.d.ts +15 -2
  20. package/package/components/HighlightTheme.svelte +75 -77
  21. package/package/components/InputTransformForm.svelte +2 -0
  22. package/package/components/JobArgs.svelte +59 -44
  23. package/package/components/JobArgs.svelte.d.ts +2 -0
  24. package/package/components/LightweightArgInput.svelte +27 -2
  25. package/package/components/Path.svelte +3 -8
  26. package/package/components/Popover.svelte +1 -1
  27. package/package/components/ResourceEditor.svelte +3 -2
  28. package/package/components/ResourceEditorDrawer.svelte +4 -1
  29. package/package/components/ResourcePicker.svelte +1 -0
  30. package/package/components/RunChart.svelte +6 -3
  31. package/package/components/RunChart.svelte.d.ts +1 -0
  32. package/package/components/RunForm.svelte +24 -23
  33. package/package/components/RunForm.svelte.d.ts +0 -2
  34. package/package/components/SavedInputs.svelte +50 -39
  35. package/package/components/ScheduleEditorInner.svelte +26 -4
  36. package/package/components/ScriptBuilder.svelte +47 -22
  37. package/package/components/ScriptBuilder.svelte.d.ts +1 -0
  38. package/package/components/SearchItems.svelte +5 -4
  39. package/package/components/Summary.svelte +74 -0
  40. package/package/components/Summary.svelte.d.ts +16 -0
  41. package/package/components/apps/components/display/AppMarkdown.svelte +3 -2
  42. package/package/components/apps/components/display/AppMenu.svelte +2 -2
  43. package/package/components/apps/components/display/AppNavbar.svelte +94 -0
  44. package/package/components/apps/components/display/AppNavbar.svelte.d.ts +24 -0
  45. package/package/components/apps/components/display/AppNavbarItem.svelte +146 -0
  46. package/package/components/apps/components/display/AppNavbarItem.svelte.d.ts +27 -0
  47. package/package/components/apps/components/display/ResolveNavbarItemPath.svelte +21 -0
  48. package/package/components/apps/components/display/ResolveNavbarItemPath.svelte.d.ts +20 -0
  49. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +16 -0
  50. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +12 -16
  51. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte.d.ts +1 -0
  52. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +5 -0
  53. package/package/components/apps/components/display/table/AppAggridTable.svelte +28 -6
  54. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +68 -43
  55. package/package/components/apps/components/inputs/AppDateSelect.svelte +284 -0
  56. package/package/components/apps/components/inputs/AppDateSelect.svelte.d.ts +21 -0
  57. package/package/components/apps/components/inputs/AppDateTimeInput.svelte +2 -0
  58. package/package/components/apps/components/inputs/AppFileInput.svelte +22 -27
  59. package/package/components/apps/components/inputs/AppFileInput.svelte.d.ts +1 -0
  60. package/package/components/apps/components/inputs/AppTextInput.svelte +1 -1
  61. package/package/components/apps/components/layout/AppDecisionTree.svelte +32 -30
  62. package/package/components/apps/components/layout/AppModal.svelte +17 -6
  63. package/package/components/apps/editor/AppDeploymentHistory.svelte +2 -3
  64. package/package/components/apps/editor/AppDeploymentHistory.svelte.d.ts +3 -2
  65. package/package/components/apps/editor/AppEditor.svelte +9 -2
  66. package/package/components/apps/editor/AppEditorHeader.svelte +7 -10
  67. package/package/components/apps/editor/AppPreview.svelte +12 -3
  68. package/package/components/apps/editor/AppPreview.svelte.d.ts +2 -0
  69. package/package/components/apps/editor/DecisionTreeDebug.svelte +92 -68
  70. package/package/components/apps/editor/DeploymentHistory.svelte +0 -2
  71. package/package/components/apps/editor/appUtils.d.ts +1 -0
  72. package/package/components/apps/editor/appUtils.js +17 -0
  73. package/package/components/apps/editor/component/Component.svelte +23 -0
  74. package/package/components/apps/editor/component/components.d.ts +205 -3
  75. package/package/components/apps/editor/component/components.js +160 -1
  76. package/package/components/apps/editor/component/default-codes.js +13 -13
  77. package/package/components/apps/editor/component/sets.js +4 -2
  78. package/package/components/apps/editor/componentsPanel/ComponentList.svelte +12 -12
  79. package/package/components/apps/editor/componentsPanel/cssUtils.js +39 -3
  80. package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +6 -0
  81. package/package/components/apps/editor/contextPanel/ComponentOutput.svelte +2 -2
  82. package/package/components/apps/editor/contextPanel/ContextPanel.svelte +6 -0
  83. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +11 -0
  84. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +4 -0
  85. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +21 -8
  86. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +64 -20
  87. package/package/components/apps/editor/settingsPanel/ContextVariables.svelte +48 -15
  88. package/package/components/apps/editor/settingsPanel/ContextVariables.svelte.d.ts +1 -0
  89. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +25 -5
  90. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte +2 -1
  91. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte.d.ts +1 -0
  92. package/package/components/apps/editor/settingsPanel/DocLink.svelte +33 -0
  93. package/package/components/apps/editor/settingsPanel/DocLink.svelte.d.ts +19 -0
  94. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +192 -0
  95. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte.d.ts +18 -0
  96. package/package/components/apps/editor/settingsPanel/GridTab.svelte +2 -2
  97. package/package/components/apps/editor/settingsPanel/RefreshDatabaseStudioTable.svelte +17 -0
  98. package/package/components/apps/editor/settingsPanel/RefreshDatabaseStudioTable.svelte.d.ts +16 -0
  99. package/package/components/apps/editor/settingsPanel/TableActions.svelte +81 -38
  100. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +12 -5
  101. package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +11 -12
  102. package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +4 -2
  103. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +4 -1
  104. package/package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +7 -1
  105. package/package/components/apps/inputType.d.ts +2 -2
  106. package/package/components/apps/svelte-select/lib/Select.svelte +2 -3
  107. package/package/components/apps/types.d.ts +3 -0
  108. package/package/components/auditLogs/AuditLogsTable.svelte +2 -2
  109. package/package/components/common/CloseButton.svelte +10 -10
  110. package/package/components/common/CloseButton.svelte.d.ts +6 -14
  111. package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -0
  112. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +2 -0
  113. package/package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +7 -1
  114. package/package/components/common/fileInput/FileInput.svelte +2 -0
  115. package/package/components/common/fileInput/FileInput.svelte.d.ts +1 -0
  116. package/package/components/common/popup/Popup.svelte +4 -3
  117. package/package/components/common/popup/Popup.svelte.d.ts +1 -0
  118. package/package/components/common/table/AppRow.svelte +3 -10
  119. package/package/components/common/table/FlowRow.svelte +12 -1
  120. package/package/components/copilot/IteratorGen.svelte +1 -1
  121. package/package/components/copilot/PredicateGen.svelte +1 -1
  122. package/package/components/copilot/StepInputGen.svelte +8 -3
  123. package/package/components/copilot/StepInputsGen.svelte +5 -2
  124. package/package/components/details/WebhooksPanel.svelte +32 -1
  125. package/package/components/details/WebhooksPanel.svelte.d.ts +2 -11
  126. package/package/components/flows/FlowHistory.svelte +208 -0
  127. package/package/components/flows/FlowHistory.svelte.d.ts +21 -0
  128. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +1 -1
  129. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +1 -1
  130. package/package/components/flows/content/FlowEditorPanel.svelte +1 -1
  131. package/package/components/flows/content/FlowLoop.svelte +23 -26
  132. package/package/components/flows/content/FlowModuleComponent.svelte +2 -18
  133. package/package/components/flows/content/FlowModuleEarlyStop.svelte +10 -4
  134. package/package/components/flows/content/FlowModuleHeader.svelte +3 -4
  135. package/package/components/flows/content/FlowModuleScript.svelte +1 -1
  136. package/package/components/flows/content/FlowModuleSleep.svelte +1 -0
  137. package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
  138. package/package/components/flows/content/SuspendDrawer.svelte +7 -7
  139. package/package/components/flows/flowStateUtils.js +2 -1
  140. package/package/components/flows/flowStore.js +1 -1
  141. package/package/components/flows/header/FlowImportExportMenu.svelte +3 -16
  142. package/package/components/flows/header/FlowImportExportMenu.svelte.d.ts +4 -1
  143. package/package/components/flows/map/FlowJobsMenu.svelte +69 -0
  144. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +22 -0
  145. package/package/components/flows/map/FlowModuleSchemaItem.svelte +7 -4
  146. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
  147. package/package/components/flows/map/MapItem.svelte +20 -0
  148. package/package/components/flows/map/MapItem.svelte.d.ts +9 -0
  149. package/package/components/flows/map/VirtualItem.svelte +4 -2
  150. package/package/components/flows/map/VirtualItem.svelte.d.ts +1 -0
  151. package/package/components/flows/previousResults.d.ts +9 -0
  152. package/package/components/flows/previousResults.js +42 -8
  153. package/package/components/flows/propPicker/PropPickerWrapper.svelte +2 -0
  154. package/package/components/flows/propPicker/PropPickerWrapper.svelte.d.ts +1 -0
  155. package/package/components/flows/types.d.ts +1 -1
  156. package/package/components/graph/FlowGraph.svelte +80 -42
  157. package/package/components/graph/FlowGraph.svelte.d.ts +1 -0
  158. package/package/components/graph/model.d.ts +6 -1
  159. package/package/components/graph/svelvet/container/controllers/middleware.js +4 -4
  160. package/package/components/graph/svelvet/container/views/GraphView.svelte +2 -0
  161. package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +24 -25
  162. package/package/components/graph/util.d.ts +1 -1
  163. package/package/components/graph/util.js +1 -2
  164. package/package/components/home/ItemsList.svelte +22 -19
  165. package/package/components/jobs/JobPreview.svelte +11 -2
  166. package/package/components/propertyPicker/PropPicker.svelte +30 -0
  167. package/package/components/propertyPicker/PropPickerResult.svelte +14 -1
  168. package/package/components/propertyPicker/PropPickerResult.svelte.d.ts +1 -0
  169. package/package/components/runs/JobLoader.svelte +21 -8
  170. package/package/components/runs/JobLoader.svelte.d.ts +2 -0
  171. package/package/components/runs/JobPreview.svelte +5 -1
  172. package/package/components/runs/RunRow.svelte +12 -8
  173. package/package/components/runs/RunsFilter.svelte +2 -4
  174. package/package/components/runs/RunsFilter.svelte.d.ts +0 -1
  175. package/package/components/runs/RunsTable.svelte +63 -29
  176. package/package/components/runs/RunsTable.svelte.d.ts +1 -0
  177. package/package/components/schema/EditableSchemaWrapper.svelte +9 -1
  178. package/package/components/schema/PropertyEditor.svelte +1 -1
  179. package/package/components/search/GlobalSearchModal.svelte +559 -0
  180. package/package/components/search/GlobalSearchModal.svelte.d.ts +17 -0
  181. package/package/components/search/QuickMenuItem.svelte +76 -0
  182. package/package/components/search/QuickMenuItem.svelte.d.ts +27 -0
  183. package/package/components/sidebar/MenuButton.svelte +11 -0
  184. package/package/components/sidebar/MenuButton.svelte.d.ts +4 -0
  185. package/package/components/sidebar/changelogs.js +35 -0
  186. package/package/components/wizards/AppPicker.svelte +68 -0
  187. package/package/components/wizards/AppPicker.svelte.d.ts +17 -0
  188. package/package/components/wizards/NavbarWizard.svelte +131 -0
  189. package/package/components/wizards/NavbarWizard.svelte.d.ts +19 -0
  190. package/package/defaults.d.ts +1 -1
  191. package/package/defaults.js +1 -1
  192. package/package/es6.d.ts.txt +370 -1
  193. package/package/gen/core/OpenAPI.js +1 -1
  194. package/package/gen/schemas.gen.d.ts +42 -3
  195. package/package/gen/schemas.gen.js +42 -3
  196. package/package/gen/services.gen.d.ts +80 -5
  197. package/package/gen/services.gen.js +149 -8
  198. package/package/gen/types.gen.d.ts +265 -11
  199. package/package/inferArgSig.js +4 -0
  200. package/package/script_helpers.d.ts +3 -3
  201. package/package/script_helpers.js +46 -22
  202. package/package/stores.d.ts +1 -1
  203. package/package/stores.js +1 -1
  204. package/package/utils.d.ts +7 -23
  205. package/package/utils.js +54 -33
  206. package/package/windmill_fetch.d.ts.txt +6 -6
  207. package/package.json +3 -11
  208. package/package/components/ContentSearch.svelte +0 -355
@@ -0,0 +1,69 @@
1
+ <script>import { Menu } from '../../common';
2
+ import { createEventDispatcher } from 'svelte';
3
+ import { ListFilter } from 'lucide-svelte';
4
+ const dispatch = createEventDispatcher();
5
+ export let open = undefined;
6
+ export let index;
7
+ export let flowJobs;
8
+ export let flowJobsSuccess;
9
+ export let selected;
10
+ let filter = undefined;
11
+ function onKeydown(event) {
12
+ if (event.key === 'Enter' &&
13
+ filter != undefined &&
14
+ flowJobs &&
15
+ filter < flowJobs.length &&
16
+ filter > 0) {
17
+ event.preventDefault();
18
+ dispatch('selectedIteration', { index: filter - 1, id: flowJobs[filter - 1] });
19
+ }
20
+ }
21
+ </script>
22
+
23
+ <Menu
24
+ transitionDuration={0}
25
+ pointerDown
26
+ bind:show={open}
27
+ noMinW
28
+ placement="bottom-center"
29
+ let:close
30
+ >
31
+ <button
32
+ title="Pick an interation"
33
+ slot="trigger"
34
+ id={`flow-editor-iteration picker-${index}`}
35
+ type="button"
36
+ class=" text-xs bg-surface border-[1px] border-gray-300 dark:border-gray-500 focus:outline-none
37
+ hover:bg-surface-hover focus:ring-4 focus:ring-surface-selected font-medium rounded-sm w-[40px] gap-1 h-[20px]
38
+ flex items-center justify-center {flowJobsSuccess?.[selected] == false
39
+ ? 'text-red-400'
40
+ : 'text-secondary'}"
41
+ >
42
+ #{selected == -1 ? '?' : selected + 1}
43
+ <ListFilter size={15} />
44
+ </button>
45
+ <div id="flow-editor-insert-module">
46
+ <div class="font-mono divide-y text-xs w-full text-secondary max-h-[200px] overflow-auto">
47
+ <input autofocus type="number" bind:value={filter} on:keydown={onKeydown} />
48
+ {#each flowJobs ?? [] as id, idx (id)}
49
+ {#if filter == undefined || (idx + 1).toString().includes(filter.toString())}
50
+ <button
51
+ class="w-full text-left py-1 pl-2 min-w-20 hover:bg-surface-hover whitespace-nowrap flex flex-row gap-2 items-center {flowJobsSuccess?.[
52
+ idx
53
+ ] == false
54
+ ? 'text-red-400'
55
+ : ''}"
56
+ on:pointerdown={() => {
57
+ close()
58
+ dispatch('selectedIteration', { index: idx, id })
59
+ }}
60
+ role="menuitem"
61
+ tabindex="-1"
62
+ >
63
+ #{idx + 1}
64
+ </button>
65
+ {/if}
66
+ {/each}
67
+ </div>
68
+ </div>
69
+ </Menu>
@@ -0,0 +1,22 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ open?: boolean | undefined;
5
+ index: number;
6
+ flowJobs: string[] | undefined;
7
+ flowJobsSuccess: (boolean | undefined)[] | undefined;
8
+ selected: number;
9
+ };
10
+ events: {
11
+ selectedIteration: CustomEvent<any>;
12
+ } & {
13
+ [evt: string]: CustomEvent<any>;
14
+ };
15
+ slots: {};
16
+ };
17
+ export type FlowJobsMenuProps = typeof __propDef.props;
18
+ export type FlowJobsMenuEvents = typeof __propDef.events;
19
+ export type FlowJobsMenuSlots = typeof __propDef.slots;
20
+ export default class FlowJobsMenu extends SvelteComponent<FlowJobsMenuProps, FlowJobsMenuEvents, FlowJobsMenuSlots> {
21
+ }
22
+ export {};
@@ -19,6 +19,7 @@ export let modType = undefined;
19
19
  export let bgColor = '';
20
20
  export let concurrency = false;
21
21
  export let retries = undefined;
22
+ export let warningMessage = undefined;
22
23
  const { flowInputsStore } = getContext('FlowGraphContext');
23
24
  const dispatch = createEventDispatcher();
24
25
  const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotContext') || {};
@@ -29,7 +30,7 @@ const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotCon
29
30
  <div
30
31
  class={classNames(
31
32
  'w-full module flex rounded-sm cursor-pointer',
32
- selected ? 'outline outline-offset-1 outline-2 outline-gray-600' : '',
33
+ selected ? 'outline outline-offset-1 outline-2 outline-gray-600 dark:outline-gray-400' : '',
33
34
  'flex relative',
34
35
  $copilotCurrentStepStore === id ? 'z-[901]' : ''
35
36
  )}
@@ -120,7 +121,7 @@ const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotCon
120
121
 
121
122
  <div
122
123
  class="flex gap-1 justify-between items-center w-full overflow-hidden rounded-sm
123
- border border-gray-400 p-2 text-2xs module text-primary"
124
+ border border-gray-400 dark:border-gray-600 p-2 text-2xs module text-primary"
124
125
  >
125
126
  {#if $$slots.icon}
126
127
  <slot name="icon" />
@@ -153,10 +154,12 @@ hover:border-blue-700 {selected ? '' : '!hidden'}"
153
154
  <Move class="mx-[3px]" size={14} strokeWidth={2} />
154
155
  </button>
155
156
 
156
- {#if id && !Object.values($flowInputsStore?.[id]?.requiredInputsFilled || {}).every(Boolean)}
157
+ {#if (id && !Object.values($flowInputsStore?.[id]?.requiredInputsFilled || {}).every(Boolean)) || Boolean(warningMessage)}
157
158
  <div class="absolute -top-[10px] -left-[10px]">
158
159
  <Popover>
159
- <svelte:fragment slot="text">At least one required input is not set.</svelte:fragment>
160
+ <svelte:fragment slot="text"
161
+ >{warningMessage ?? 'At least one required input is not set.'}
162
+ </svelte:fragment>
160
163
  <div
161
164
  class="flex items-center justify-center h-full w-full rounded-md p-0.5 border border-yellow-600 text-yellow-600 bg-yellow-100 duration-150 hover:bg-yellow-300"
162
165
  >
@@ -16,6 +16,7 @@ declare const __propDef: {
16
16
  bgColor?: string | undefined;
17
17
  concurrency?: boolean | undefined;
18
18
  retries?: number | undefined;
19
+ warningMessage?: string | undefined;
19
20
  };
20
21
  events: {
21
22
  click: MouseEvent;
@@ -8,6 +8,7 @@ import InsertModuleButton from './InsertModuleButton.svelte';
8
8
  import { prettyLanguage } from '../../../common';
9
9
  import { msToSec } from '../../../utils';
10
10
  import BarsStaggered from '../../icons/BarsStaggered.svelte';
11
+ import FlowJobsMenu from './FlowJobsMenu.svelte';
11
12
  export let mod;
12
13
  export let trigger;
13
14
  export let insertable;
@@ -21,6 +22,7 @@ export let duration_ms = undefined;
21
22
  export let disableAi = false;
22
23
  export let wrapperId = undefined;
23
24
  export let retries = undefined;
25
+ export let flowJobs;
24
26
  $: idx = modules.findIndex((m) => m.id === mod.id);
25
27
  const { selectedId } = getContext('FlowGraphContext');
26
28
  const dispatch = createEventDispatcher();
@@ -96,6 +98,19 @@ let openMenu2 = undefined;
96
98
  {annotation}
97
99
  </div>
98
100
  {/if}
101
+ {#if flowJobs && !insertable}
102
+ <div class="absolute z-10 right-8 -top-5">
103
+ <FlowJobsMenu
104
+ on:selectedIteration={(e) => {
105
+ dispatch('selectedIteration', e.detail)
106
+ }}
107
+ flowJobsSuccess={flowJobs.flowJobsSuccess}
108
+ flowJobs={flowJobs.flowJobs}
109
+ selected={flowJobs.selected}
110
+ index={idx}
111
+ />
112
+ </div>
113
+ {/if}
99
114
 
100
115
  <div class={moving == mod.id ? 'opacity-50' : ''}>
101
116
  {#if mod.value.type === 'forloopflow' || mod.value.type === 'whileloopflow'}
@@ -111,6 +126,11 @@ let openMenu2 = undefined;
111
126
  on:click={() => dispatch('select', mod.id)}
112
127
  {...itemProps}
113
128
  {bgColor}
129
+ warningMessage={mod?.value?.type === 'forloopflow' &&
130
+ mod?.value?.iterator?.type === 'javascript' &&
131
+ mod?.value?.iterator?.expr === ''
132
+ ? 'Iterator expression is empty'
133
+ : ''}
114
134
  >
115
135
  <div slot="icon">
116
136
  <Repeat size={16} />
@@ -15,6 +15,11 @@ declare const __propDef: {
15
15
  disableAi?: boolean | undefined;
16
16
  wrapperId?: string | undefined;
17
17
  retries?: number | undefined;
18
+ flowJobs: {
19
+ flowJobs: string[];
20
+ selected: number;
21
+ flowJobsSuccess: (boolean | undefined)[];
22
+ } | undefined;
18
23
  };
19
24
  events: {
20
25
  delete: CustomEvent<CustomEvent<MouseEvent>>;
@@ -35,6 +40,10 @@ declare const __propDef: {
35
40
  move: CustomEvent<{
36
41
  module: FlowModule;
37
42
  } | undefined>;
43
+ selectedIteration: CustomEvent<{
44
+ index: number;
45
+ id: string;
46
+ }>;
38
47
  } & {
39
48
  [evt: string]: CustomEvent<any>;
40
49
  };
@@ -19,6 +19,7 @@ export let moving = undefined;
19
19
  export let center = true;
20
20
  export let disableAi = false;
21
21
  export let wrapperNode = undefined;
22
+ export let borderColor = undefined;
22
23
  const dispatch = createEventDispatcher();
23
24
  let openMenu = false;
24
25
  let triggerOpenMenu = false;
@@ -36,7 +37,7 @@ const { drawerStore: copilotDrawerStore, currentStepStore: copilotCurrentStepSto
36
37
  }
37
38
  }}
38
39
  type="button"
39
- class="text-primary bg-surface border mx-[1px] border-gray-300 dark:border-gray-500 focus:outline-none hover:bg-surface-hover focus:ring-4 focus:ring-gray-200 font-medium rounded-full text-sm w-[25px] h-[25px] flex items-center justify-center"
40
+ class="text-primary bg-surface border mx-[1px] 'border-gray-300 dark:border-gray-500 focus:outline-none hover:bg-surface-hover focus:ring-4 focus:ring-gray-200 font-medium rounded-full text-sm w-[25px] h-[25px] flex items-center justify-center"
40
41
  >
41
42
  <X class="m-[5px]" size={15} />
42
43
  </button>
@@ -64,9 +65,10 @@ const { drawerStore: copilotDrawerStore, currentStepStore: copilotCurrentStepSto
64
65
  id={`flow-editor-virtual-${label}`}
65
66
  >
66
67
  <div
68
+ style={borderColor ? `border-color: ${borderColor};` : ''}
67
69
  class="flex gap-1 justify-between {center
68
70
  ? 'items-center'
69
- : 'items-baseline'} w-full overflow-hidden rounded-sm border p-2 text-2xs module text-primary border-gray-400"
71
+ : 'items-baseline'} w-full overflow-hidden rounded-sm border p-2 text-2xs module text-primary border-gray-400 dark:border-gray-600"
70
72
  >
71
73
  {#if $$slots.icon}
72
74
  <slot name="icon" />
@@ -19,6 +19,7 @@ declare const __propDef: {
19
19
  center?: boolean | undefined;
20
20
  disableAi?: boolean | undefined;
21
21
  wrapperNode?: FlowModule | undefined;
22
+ borderColor?: string | undefined;
22
23
  };
23
24
  events: {
24
25
  insert: CustomEvent<{
@@ -12,6 +12,15 @@ type StepPropPicker = {
12
12
  };
13
13
  export declare function dfs(id: string | undefined, flow: OpenFlow, getParents?: boolean): FlowModule[];
14
14
  export declare function getPreviousIds(id: string, flow: OpenFlow, include_node: boolean): string[];
15
+ export declare function getFailureStepPropPicker(flowState: FlowState, flow: OpenFlow, args: any): {
16
+ pickableProperties: {
17
+ flow_input: Object;
18
+ priorIds: any;
19
+ previousId: undefined;
20
+ hasResume: boolean;
21
+ };
22
+ extraLib: string;
23
+ };
15
24
  export declare function getStepPropPicker(flowState: FlowState, parentModule: FlowModule | undefined, previousModule: FlowModule | undefined, id: string, flow: OpenFlow, args: any, include_node: boolean): StepPropPicker;
16
25
  export declare function buildExtraLib(flowInput: Record<string, any>, results: Record<string, any>, resume: boolean): string;
17
26
  export {};
@@ -30,21 +30,22 @@ function getFlowInput(parentModules, flowState, args, schema) {
30
30
  const topFlowInput = schemaToObject(schema, args);
31
31
  const parentState = parentModule ? flowState[parentModule.id] : undefined;
32
32
  if (parentState && parentModule) {
33
- if (parentState.previewArgs) {
33
+ if (parentState.previewArgs &&
34
+ !(parentModule.value?.type === 'forloopflow' && parentModule.value?.modules?.length === 1)) {
34
35
  return { ...topFlowInput, ...parentState.previewArgs };
35
36
  }
36
37
  else {
37
38
  let parentFlowInput = getFlowInput(parentModules, flowState, args, schema);
38
39
  if (parentModule.value.type === 'forloopflow') {
39
40
  let parentFlowInputIter = { ...parentFlowInput };
40
- if (parentFlowInputIter.hasOwnProperty("iter")) {
41
- parentFlowInputIter["iter_parent"] = parentFlowInputIter["iter"];
42
- delete parentFlowInputIter["iter"];
41
+ if (parentFlowInputIter.hasOwnProperty('iter')) {
42
+ parentFlowInputIter['iter_parent'] = parentFlowInputIter['iter'];
43
+ delete parentFlowInputIter['iter'];
43
44
  }
44
45
  let topFlowInputIter = { ...topFlowInput };
45
- if (topFlowInputIter.hasOwnProperty("iter")) {
46
- topFlowInputIter["iter_parent"] = topFlowInputIter["iter"];
47
- delete topFlowInputIter["iter"];
46
+ if (topFlowInputIter.hasOwnProperty('iter')) {
47
+ topFlowInputIter['iter_parent'] = topFlowInputIter['iter'];
48
+ delete topFlowInputIter['iter'];
48
49
  }
49
50
  return {
50
51
  ...topFlowInputIter,
@@ -52,7 +53,7 @@ function getFlowInput(parentModules, flowState, args, schema) {
52
53
  iter: {
53
54
  value: "Iteration's value",
54
55
  index: "Iteration's index"
55
- },
56
+ }
56
57
  };
57
58
  }
58
59
  else {
@@ -83,6 +84,39 @@ export function getPreviousIds(id, flow, include_node) {
83
84
  })
84
85
  .flat();
85
86
  }
87
+ export function getFailureStepPropPicker(flowState, flow, args) {
88
+ const allIds = flow.value.modules.map((x) => x.id);
89
+ let priorIds = Object.fromEntries(allIds.map((id) => [id, flowState[id]?.previewResult ?? {}]).reverse());
90
+ const flowInput = getFlowInput(dfs(flow.value.modules[0].id, flow), flowState, args, flow.schema);
91
+ return {
92
+ pickableProperties: {
93
+ flow_input: schemaToObject(flow.schema, args),
94
+ priorIds: priorIds,
95
+ previousId: undefined,
96
+ hasResume: false
97
+ },
98
+ extraLib: `
99
+ /**
100
+ * Error object
101
+ */
102
+ declare const error: {
103
+ message: string
104
+ name: string
105
+ stack: string
106
+ }
107
+
108
+ /**
109
+ * result by id
110
+ */
111
+ declare const results = ${JSON.stringify(priorIds)}
112
+
113
+ /**
114
+ * flow input as an object
115
+ */
116
+ declare const flow_input = ${JSON.stringify(flowInput)};
117
+ `
118
+ };
119
+ }
86
120
  export function getStepPropPicker(flowState, parentModule, previousModule, id, flow, args, include_node) {
87
121
  const flowInput = getFlowInput(dfs(parentModule?.id, flow), flowState, args, flow.schema);
88
122
  const previousIds = getPreviousIds(id, flow, include_node);
@@ -10,6 +10,7 @@ import { writable } from 'svelte/store';
10
10
  import { twMerge } from 'tailwind-merge';
11
11
  export let pickableProperties;
12
12
  export let result = undefined;
13
+ export let flow_input = undefined;
13
14
  export let error = false;
14
15
  export let displayContext = true;
15
16
  export let notSelectable = false;
@@ -52,6 +53,7 @@ setContext('PropPickerWrapper', {
52
53
  {#if result}
53
54
  <PropPickerResult
54
55
  {result}
56
+ {flow_input}
55
57
  on:select={({ detail }) => {
56
58
  if (!notSelectable && !$propPickerConfig) {
57
59
  sendUserToast('Set cursor within an input or click on the plug first', true)
@@ -17,6 +17,7 @@ declare const __propDef: {
17
17
  props: {
18
18
  pickableProperties: PickableProperties | undefined;
19
19
  result?: any;
20
+ flow_input?: any;
20
21
  error?: boolean | undefined;
21
22
  displayContext?: boolean | undefined;
22
23
  notSelectable?: boolean | undefined;
@@ -29,5 +29,5 @@ export type FlowEditorContext = {
29
29
  testStepStore: Writable<Record<string, any>>;
30
30
  saveDraft: () => void;
31
31
  initialPath: string;
32
- flowInputsStore: Writable<FlowInput | undefined>;
32
+ flowInputsStore: Writable<FlowInput>;
33
33
  };
@@ -54,6 +54,7 @@ $: {
54
54
  }
55
55
  $: rebuildOnChange && triggerRebuild();
56
56
  let oldRebuildOnChange = rebuildOnChange ? JSON.parse(JSON.stringify(rebuildOnChange)) : undefined;
57
+ let darkMode = false;
57
58
  function triggerRebuild() {
58
59
  if (!deepEqual(oldRebuildOnChange, rebuildOnChange)) {
59
60
  oldRebuildOnChange = JSON.parse(JSON.stringify(rebuildOnChange));
@@ -75,12 +76,12 @@ async function createGraph() {
75
76
  return;
76
77
  }
77
78
  nestedNodes = nodes = [];
78
- nestedNodes.push(createVirtualNode(getParentIds(), 'Input', modules, undefined, undefined, 0, 0, true, undefined, undefined, 'Input'));
79
+ nestedNodes.push(createVirtualNode(getParentIds(), 'Input', modules, undefined, undefined, 0, 0, true, undefined, undefined, 'Input', undefined, undefined));
79
80
  modules.forEach((m, i) => {
80
81
  const item = getConvertedFlowModule(m, undefined, undefined, 0, i + 1 == modules?.length, modules);
81
82
  item && nestedNodes.push(item);
82
83
  });
83
- nestedNodes.push(createVirtualNode(getParentIds(), 'Result', undefined, undefined, undefined, 0, modules.length, true, undefined, undefined, undefined));
84
+ nestedNodes.push(createVirtualNode(getParentIds(), 'Result', undefined, undefined, undefined, 0, modules.length, true, undefined, undefined, undefined, success == undefined ? undefined : success ? 'Success' : 'Failure', undefined));
84
85
  if (!flowModuleStates) {
85
86
  if (failureModule)
86
87
  nestedNodes.push(createErrorHandler(failureModule));
@@ -89,7 +90,7 @@ async function createGraph() {
89
90
  Object.entries(flowModuleStates ?? [])
90
91
  .filter(([k, v]) => k.startsWith('failure'))
91
92
  .forEach(([k, v]) => {
92
- nestedNodes.push(createErrorHandler({ id: k }, v.parent_module));
93
+ nestedNodes.push(createErrorHandler({ id: k }, v.parent_module, k));
93
94
  });
94
95
  }
95
96
  const flatNodes = flattenNestedNodes(nestedNodes);
@@ -109,7 +110,8 @@ async function createGraph() {
109
110
  id: `dep-${pid}-${$selectedId}`,
110
111
  source: pid,
111
112
  target: $selectedId,
112
- labelBgColor: 'white',
113
+ labelBgColor: darkMode ? '#999' : 'white',
114
+ edgeColor: darkMode ? 'white' : 'black',
113
115
  arrow: false,
114
116
  animate: true,
115
117
  noHandle: true,
@@ -124,7 +126,8 @@ async function createGraph() {
124
126
  id: `dep-${pid}-${$selectedId}`,
125
127
  source: $selectedId,
126
128
  target: pid,
127
- labelBgColor: 'white',
129
+ labelBgColor: darkMode ? '#999' : 'white',
130
+ edgeColor: darkMode ? 'white' : 'black',
128
131
  arrow: false,
129
132
  animate: true,
130
133
  noHandle: true,
@@ -169,7 +172,7 @@ function getConvertedFlowModule(module, parent, edgeLabel, loopDepth, insertable
169
172
  }));
170
173
  return flowModuleToBranch(module, modules, branches, [], parent, loopDepth, true);
171
174
  }
172
- return flowModuleToNode(parentIds, module, edgeLabel, undefined, loopDepth, insertableEnd, false, modules, wrapper);
175
+ return flowModuleToNode(parentIds, module, edgeLabel, undefined, loopDepth, insertableEnd, false, modules, wrapper, undefined);
173
176
  }
174
177
  function getParentIds(items = undefined) {
175
178
  if (typeof items == 'string') {
@@ -190,18 +193,11 @@ function getParentIds(items = undefined) {
190
193
  }
191
194
  return [];
192
195
  }
193
- function getResultColor() {
194
- const isDark = document.documentElement.classList.contains('dark');
195
- switch (success) {
196
- case true:
197
- return getStateColor('Success');
198
- case false:
199
- return getStateColor('Failure');
200
- default:
201
- return isDark ? '#2e3440' : '#fff';
196
+ function flowModuleToNode(parentIds, mod, edgeLabel, annotation, loopDepth, insertableEnd, branchable, modules, wrapper, flowJobs) {
197
+ let type = flowModuleStates?.[mod.id]?.type;
198
+ if (!type && flowJobs) {
199
+ type = 'InProgress';
202
200
  }
203
- }
204
- function flowModuleToNode(parentIds, mod, edgeLabel, annotation, loopDepth, insertableEnd, branchable, modules, wrapper = undefined) {
205
201
  return {
206
202
  type: 'node',
207
203
  id: mod.id,
@@ -217,12 +213,13 @@ function flowModuleToNode(parentIds, mod, edgeLabel, annotation, loopDepth, inse
217
213
  branchable,
218
214
  retries: flowModuleStates?.[mod.id]?.retries,
219
215
  duration_ms: flowModuleStates?.[mod.id]?.duration_ms,
220
- bgColor: getStateColor(flowModuleStates?.[mod.id]?.type),
221
- annotation,
216
+ bgColor: getStateColor(type, darkMode),
217
+ annotation: annotation,
222
218
  modules,
223
219
  moving,
224
220
  disableAi,
225
- wrapperId: wrapper?.id
221
+ wrapperId: wrapper?.id,
222
+ flowJobs
226
223
  },
227
224
  cb: (e, detail) => {
228
225
  if (e == 'delete') {
@@ -245,6 +242,9 @@ function flowModuleToNode(parentIds, mod, edgeLabel, annotation, loopDepth, inse
245
242
  else if (e == 'move') {
246
243
  dispatch('move', { module: mod, modules });
247
244
  }
245
+ else if (e == 'selectedIteration') {
246
+ dispatch('selectedIteration', { ...detail, moduleId: mod.id });
247
+ }
248
248
  }
249
249
  }
250
250
  },
@@ -258,39 +258,69 @@ function flowModuleToNode(parentIds, mod, edgeLabel, annotation, loopDepth, inse
258
258
  };
259
259
  }
260
260
  function flowModuleToLoop(modules, module, parent, loopDepth) {
261
+ let state = flowModuleStates?.[module.id];
261
262
  const loop = {
262
263
  type: 'loop',
263
264
  items: [
264
- flowModuleToNode(getParentIds(parent), module, undefined, flowModuleStates?.[module.id]?.iteration
265
- ? 'Iteration ' +
266
- flowModuleStates?.[module.id]?.iteration +
267
- '/' +
268
- (flowModuleStates?.[module.id]?.iteration_total ?? '?')
269
- : '', loopDepth, false, false, modules)
265
+ flowModuleToNode(getParentIds(parent), module, undefined, state?.flow_jobs
266
+ ? 'iterations ' + state?.flow_jobs?.length + '/' + (state?.iteration_total ?? '?')
267
+ : '', loopDepth, false, false, modules, undefined, state?.flow_jobs
268
+ ? {
269
+ flowJobs: state?.flow_jobs,
270
+ selected: state?.selectedForloopIndex ?? -1,
271
+ flowJobsSuccess: state?.flow_jobs_success
272
+ }
273
+ : undefined)
270
274
  ]
271
275
  };
272
276
  const innerModules = module.value.modules;
273
- loop.items.push(createVirtualNode(getParentIds(loop.items), `Do one iteration`, innerModules, undefined, 1000, loopDepth + 1, 0, false, undefined, undefined, undefined, true, module));
277
+ let borderStatus = undefined;
278
+ let success = state?.flow_jobs_success?.[state?.selectedForloopIndex ?? 0];
279
+ if (success != undefined) {
280
+ borderStatus = success ? 'Success' : 'Failure';
281
+ }
282
+ loop.items.push(createVirtualNode(getParentIds(loop.items), `Do one iteration`, innerModules, undefined, 1000, loopDepth + 1, 0, false, undefined, undefined, undefined, undefined, borderStatus, true, module));
274
283
  innerModules.forEach((innerModule, i) => {
275
284
  const item = getConvertedFlowModule(innerModule, loop.items, undefined, loopDepth + 1, i + 1 == innerModules?.length, innerModules, module);
276
285
  item && loop.items.push(item);
277
286
  });
278
- loop.items.push(createVirtualNode(getParentIds(loop.items), `Collect result of each iteration`, modules, undefined, 1000, loopDepth, modules.findIndex((m) => m.id == module.id) + 1, true, undefined, module.id, undefined));
287
+ loop.items.push(createVirtualNode(getParentIds(loop.items), `Collect result of each iteration`, modules, undefined, 1000, loopDepth, modules.findIndex((m) => m.id == module.id) + 1, true, undefined, module.id, undefined, undefined, flowModuleStates?.[module.id]?.type));
279
288
  return loop;
280
289
  }
281
290
  function flowModuleToBranch(module, modules, branches, edgesLabel, parent = undefined, loopDepth, branchall) {
282
291
  const wrapper = JSON.parse(JSON.stringify(module));
283
- const node = flowModuleToNode(getParentIds(parent), module, undefined, undefined, loopDepth, false, true, modules);
292
+ const node = flowModuleToNode(getParentIds(parent), module, undefined, undefined, loopDepth, false, true, modules, undefined, undefined);
284
293
  const bitems = [];
285
294
  const branchParent = [node.id];
286
295
  if (branches.length == 0) {
287
296
  bitems.push([
288
- createVirtualNode(branchParent, 'No branches', undefined, undefined, 0, loopDepth, 0, false, undefined, undefined, undefined)
297
+ createVirtualNode(branchParent, 'No branches', undefined, undefined, 0, loopDepth, 0, false, undefined, undefined, undefined, undefined, undefined)
289
298
  ]);
290
299
  }
291
300
  branches.forEach(({ summary, modules, removable }, i) => {
292
301
  const items = [];
293
- items.push(createVirtualNode(branchParent, summary, modules, edgesLabel[i], undefined, loopDepth, 0, false, removable ? { module, index: i } : undefined, undefined, undefined, false, wrapper));
302
+ let borderStatus = undefined;
303
+ if (module.value.type == 'branchall' || module.value.type == 'forloopflow') {
304
+ let flow_jobs_success = flowModuleStates?.[module.id]?.flow_jobs_success;
305
+ if (!flow_jobs_success) {
306
+ borderStatus = 'WaitingForPriorSteps';
307
+ }
308
+ else {
309
+ let status = flow_jobs_success?.[i];
310
+ if (status == undefined) {
311
+ borderStatus = 'WaitingForExecutor';
312
+ }
313
+ else {
314
+ borderStatus = status ? 'Success' : 'Failure';
315
+ }
316
+ }
317
+ }
318
+ else if (module.value.type == 'branchone') {
319
+ if (flowModuleStates?.[module.id]?.branchChosen == i) {
320
+ borderStatus = flowModuleStates?.[module.id]?.type;
321
+ }
322
+ }
323
+ items.push(createVirtualNode(branchParent, summary, modules, edgesLabel[i], undefined, loopDepth, 0, false, removable ? { module, index: i } : undefined, undefined, undefined, undefined, borderStatus, false, wrapper));
294
324
  if (modules.length) {
295
325
  modules.forEach((innerModule, j) => {
296
326
  const item = getConvertedFlowModule(innerModule, items, undefined, loopDepth, j + 1 == modules?.length, modules, module);
@@ -302,7 +332,7 @@ function flowModuleToBranch(module, modules, branches, edgesLabel, parent = unde
302
332
  return {
303
333
  type: 'branch',
304
334
  node,
305
- nodeEnd: createVirtualNode(bitems.map((i) => getParentIds(i)).flat(), branchall ? 'Collect result of each branch' : 'Result of the chosen branch', modules, undefined, 0, loopDepth, modules.findIndex((m) => m.id == module.id) + 1, true, undefined, module.id, undefined),
335
+ nodeEnd: createVirtualNode(bitems.map((i) => getParentIds(i)).flat(), branchall ? 'Collect result of each branch' : 'Result of the chosen branch', modules, undefined, 0, loopDepth, modules.findIndex((m) => m.id == module.id) + 1, true, undefined, module.id, undefined, undefined, flowModuleStates?.[module.id]?.type),
306
336
  items: bitems
307
337
  };
308
338
  }
@@ -418,8 +448,15 @@ function createEdges(nodes) {
418
448
  });
419
449
  return edges;
420
450
  }
421
- function createVirtualNode(parentIds, label, modules, edgeLabel, offset, loopDepth, index, selectable, deleteBranch, mid, fixed_id, center = true, wrapperNode = undefined) {
451
+ function createVirtualNode(parentIds, label, modules, edgeLabel, offset, loopDepth, index, selectable, deleteBranch, mid, fixed_id, module_status, borderStatus, center = true, wrapperNode = undefined) {
422
452
  const id = fixed_id ?? -idGenerator.next().value - 2 + (offset ?? 0);
453
+ let bgColor;
454
+ if (module_status) {
455
+ bgColor = getStateColor(module_status, darkMode);
456
+ }
457
+ else {
458
+ bgColor = darkMode ? '#2e3440' : '#dfe6ee';
459
+ }
423
460
  return {
424
461
  type: 'node',
425
462
  id: id.toString(),
@@ -436,11 +473,10 @@ function createVirtualNode(parentIds, label, modules, edgeLabel, offset, loopDep
436
473
  label,
437
474
  insertable,
438
475
  modules,
439
- bgColor: label == 'Result'
440
- ? getResultColor()
441
- : document.documentElement.classList.contains('dark')
442
- ? '#2e3440'
443
- : '#dfe6ee',
476
+ bgColor,
477
+ borderColor: borderStatus
478
+ ? getStateColor(borderStatus, darkMode) + (!darkMode ? '; border-width: 3px' : '')
479
+ : undefined,
444
480
  selected: $selectedId == label,
445
481
  index,
446
482
  selectable,
@@ -476,8 +512,10 @@ function createVirtualNode(parentIds, label, modules, edgeLabel, offset, loopDep
476
512
  loopDepth
477
513
  };
478
514
  }
479
- function createErrorHandler(mod, parent_module) {
480
- const nId = (-idGenerator.next().value - 1 + 1100).toString();
515
+ function createErrorHandler(mod, parent_module, customNodeId) {
516
+ // When needed, we can add a custom node id to the error handler
517
+ // used for nested error handlers in for loop for example
518
+ const nId = customNodeId ?? 'failure';
481
519
  parent_module && (errorHandlers[parent_module] = nId);
482
520
  let label = 'Error handler';
483
521
  return {
@@ -491,7 +529,7 @@ function createErrorHandler(mod, parent_module) {
491
529
  label,
492
530
  insertable: false,
493
531
  modules: undefined,
494
- bgColor: getStateColor(flowModuleStates?.[mod.id]?.type),
532
+ bgColor: getStateColor(flowModuleStates?.[mod.id]?.type, darkMode),
495
533
  selected: $selectedId == mod.id,
496
534
  index: 0,
497
535
  selectable: true,
@@ -522,7 +560,7 @@ onMount(() => {
522
560
  });
523
561
  </script>
524
562
 
525
- <DarkModeObserver on:change={onThemeChange} />
563
+ <DarkModeObserver bind:darkMode on:change={onThemeChange} />
526
564
 
527
565
  <!-- {JSON.stringify(flowModuleStates)} -->
528
566
  <div
@@ -28,6 +28,7 @@ declare const __propDef: {
28
28
  insert: CustomEvent<any>;
29
29
  newBranch: CustomEvent<any>;
30
30
  move: CustomEvent<any>;
31
+ selectedIteration: CustomEvent<any>;
31
32
  deleteBranch: CustomEvent<any>;
32
33
  } & {
33
34
  [evt: string]: CustomEvent<any>;