windmill-components 1.352.8 → 1.362.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 (210) 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 +6 -3
  28. package/package/components/ResourceEditor.svelte.d.ts +2 -0
  29. package/package/components/ResourceEditorDrawer.svelte +4 -1
  30. package/package/components/ResourcePicker.svelte +1 -0
  31. package/package/components/RunChart.svelte +6 -3
  32. package/package/components/RunChart.svelte.d.ts +1 -0
  33. package/package/components/RunForm.svelte +24 -23
  34. package/package/components/RunForm.svelte.d.ts +0 -2
  35. package/package/components/SavedInputs.svelte +50 -39
  36. package/package/components/ScheduleEditorInner.svelte +26 -4
  37. package/package/components/ScriptBuilder.svelte +47 -22
  38. package/package/components/ScriptBuilder.svelte.d.ts +1 -0
  39. package/package/components/SearchItems.svelte +5 -4
  40. package/package/components/Summary.svelte +74 -0
  41. package/package/components/Summary.svelte.d.ts +16 -0
  42. package/package/components/apps/components/display/AppMarkdown.svelte +3 -2
  43. package/package/components/apps/components/display/AppMenu.svelte +2 -2
  44. package/package/components/apps/components/display/AppNavbar.svelte +94 -0
  45. package/package/components/apps/components/display/AppNavbar.svelte.d.ts +24 -0
  46. package/package/components/apps/components/display/AppNavbarItem.svelte +146 -0
  47. package/package/components/apps/components/display/AppNavbarItem.svelte.d.ts +27 -0
  48. package/package/components/apps/components/display/ResolveNavbarItemPath.svelte +21 -0
  49. package/package/components/apps/components/display/ResolveNavbarItemPath.svelte.d.ts +20 -0
  50. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +16 -0
  51. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +12 -16
  52. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte.d.ts +1 -0
  53. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +5 -0
  54. package/package/components/apps/components/display/table/AppAggridTable.svelte +28 -6
  55. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +68 -43
  56. package/package/components/apps/components/inputs/AppDateSelect.svelte +284 -0
  57. package/package/components/apps/components/inputs/AppDateSelect.svelte.d.ts +21 -0
  58. package/package/components/apps/components/inputs/AppDateTimeInput.svelte +2 -0
  59. package/package/components/apps/components/inputs/AppFileInput.svelte +22 -27
  60. package/package/components/apps/components/inputs/AppFileInput.svelte.d.ts +1 -0
  61. package/package/components/apps/components/inputs/AppTextInput.svelte +1 -1
  62. package/package/components/apps/components/layout/AppDecisionTree.svelte +32 -30
  63. package/package/components/apps/components/layout/AppModal.svelte +17 -6
  64. package/package/components/apps/editor/AppDeploymentHistory.svelte +2 -3
  65. package/package/components/apps/editor/AppDeploymentHistory.svelte.d.ts +3 -2
  66. package/package/components/apps/editor/AppEditor.svelte +9 -2
  67. package/package/components/apps/editor/AppEditorHeader.svelte +7 -10
  68. package/package/components/apps/editor/AppPreview.svelte +12 -3
  69. package/package/components/apps/editor/AppPreview.svelte.d.ts +2 -0
  70. package/package/components/apps/editor/DecisionTreeDebug.svelte +92 -68
  71. package/package/components/apps/editor/DeploymentHistory.svelte +0 -2
  72. package/package/components/apps/editor/appUtils.d.ts +1 -0
  73. package/package/components/apps/editor/appUtils.js +17 -0
  74. package/package/components/apps/editor/component/Component.svelte +23 -0
  75. package/package/components/apps/editor/component/components.d.ts +205 -3
  76. package/package/components/apps/editor/component/components.js +160 -1
  77. package/package/components/apps/editor/component/default-codes.js +13 -13
  78. package/package/components/apps/editor/component/sets.js +4 -2
  79. package/package/components/apps/editor/componentsPanel/ComponentList.svelte +12 -12
  80. package/package/components/apps/editor/componentsPanel/cssUtils.js +39 -3
  81. package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +6 -0
  82. package/package/components/apps/editor/contextPanel/ComponentOutput.svelte +2 -2
  83. package/package/components/apps/editor/contextPanel/ContextPanel.svelte +6 -0
  84. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +11 -0
  85. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +4 -0
  86. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +21 -8
  87. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +64 -20
  88. package/package/components/apps/editor/settingsPanel/ContextVariables.svelte +48 -15
  89. package/package/components/apps/editor/settingsPanel/ContextVariables.svelte.d.ts +1 -0
  90. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +25 -5
  91. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte +2 -1
  92. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte.d.ts +1 -0
  93. package/package/components/apps/editor/settingsPanel/DocLink.svelte +33 -0
  94. package/package/components/apps/editor/settingsPanel/DocLink.svelte.d.ts +19 -0
  95. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +192 -0
  96. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte.d.ts +18 -0
  97. package/package/components/apps/editor/settingsPanel/GridTab.svelte +2 -2
  98. package/package/components/apps/editor/settingsPanel/RefreshDatabaseStudioTable.svelte +17 -0
  99. package/package/components/apps/editor/settingsPanel/RefreshDatabaseStudioTable.svelte.d.ts +16 -0
  100. package/package/components/apps/editor/settingsPanel/TableActions.svelte +81 -38
  101. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +12 -5
  102. package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +11 -12
  103. package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +4 -2
  104. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +4 -1
  105. package/package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +7 -1
  106. package/package/components/apps/inputType.d.ts +2 -2
  107. package/package/components/apps/svelte-select/lib/Select.svelte +2 -3
  108. package/package/components/apps/types.d.ts +3 -0
  109. package/package/components/auditLogs/AuditLogsTable.svelte +2 -2
  110. package/package/components/common/CloseButton.svelte +10 -10
  111. package/package/components/common/CloseButton.svelte.d.ts +6 -14
  112. package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -0
  113. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +2 -0
  114. package/package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +7 -1
  115. package/package/components/common/fileInput/FileInput.svelte +2 -0
  116. package/package/components/common/fileInput/FileInput.svelte.d.ts +1 -0
  117. package/package/components/common/popup/Popup.svelte +4 -3
  118. package/package/components/common/popup/Popup.svelte.d.ts +1 -0
  119. package/package/components/common/table/AppRow.svelte +3 -10
  120. package/package/components/common/table/FlowRow.svelte +12 -1
  121. package/package/components/copilot/IteratorGen.svelte +1 -1
  122. package/package/components/copilot/PredicateGen.svelte +1 -1
  123. package/package/components/copilot/StepInputGen.svelte +8 -3
  124. package/package/components/copilot/StepInputsGen.svelte +5 -2
  125. package/package/components/details/WebhooksPanel.svelte +32 -1
  126. package/package/components/details/WebhooksPanel.svelte.d.ts +2 -11
  127. package/package/components/flows/FlowHistory.svelte +208 -0
  128. package/package/components/flows/FlowHistory.svelte.d.ts +21 -0
  129. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +1 -1
  130. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +1 -1
  131. package/package/components/flows/content/FlowEditorPanel.svelte +1 -1
  132. package/package/components/flows/content/FlowLoop.svelte +23 -26
  133. package/package/components/flows/content/FlowModuleComponent.svelte +2 -18
  134. package/package/components/flows/content/FlowModuleEarlyStop.svelte +10 -4
  135. package/package/components/flows/content/FlowModuleHeader.svelte +3 -4
  136. package/package/components/flows/content/FlowModuleScript.svelte +1 -1
  137. package/package/components/flows/content/FlowModuleSleep.svelte +1 -0
  138. package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
  139. package/package/components/flows/content/SuspendDrawer.svelte +7 -7
  140. package/package/components/flows/flowStateUtils.js +2 -1
  141. package/package/components/flows/flowStore.js +1 -1
  142. package/package/components/flows/header/FlowImportExportMenu.svelte +3 -16
  143. package/package/components/flows/header/FlowImportExportMenu.svelte.d.ts +4 -1
  144. package/package/components/flows/map/FlowJobsMenu.svelte +69 -0
  145. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +22 -0
  146. package/package/components/flows/map/FlowModuleSchemaItem.svelte +7 -4
  147. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
  148. package/package/components/flows/map/MapItem.svelte +20 -0
  149. package/package/components/flows/map/MapItem.svelte.d.ts +9 -0
  150. package/package/components/flows/map/VirtualItem.svelte +4 -2
  151. package/package/components/flows/map/VirtualItem.svelte.d.ts +1 -0
  152. package/package/components/flows/previousResults.d.ts +9 -0
  153. package/package/components/flows/previousResults.js +42 -8
  154. package/package/components/flows/propPicker/PropPickerWrapper.svelte +2 -0
  155. package/package/components/flows/propPicker/PropPickerWrapper.svelte.d.ts +1 -0
  156. package/package/components/flows/types.d.ts +1 -1
  157. package/package/components/graph/FlowGraph.svelte +80 -42
  158. package/package/components/graph/FlowGraph.svelte.d.ts +1 -0
  159. package/package/components/graph/model.d.ts +6 -1
  160. package/package/components/graph/svelvet/container/controllers/middleware.js +4 -4
  161. package/package/components/graph/svelvet/container/views/GraphView.svelte +2 -0
  162. package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +24 -25
  163. package/package/components/graph/util.d.ts +1 -1
  164. package/package/components/graph/util.js +1 -2
  165. package/package/components/home/ItemsList.svelte +22 -19
  166. package/package/components/jobs/JobPreview.svelte +11 -2
  167. package/package/components/propertyPicker/PropPicker.svelte +30 -0
  168. package/package/components/propertyPicker/PropPickerResult.svelte +14 -1
  169. package/package/components/propertyPicker/PropPickerResult.svelte.d.ts +1 -0
  170. package/package/components/runs/JobLoader.svelte +21 -8
  171. package/package/components/runs/JobLoader.svelte.d.ts +2 -0
  172. package/package/components/runs/JobPreview.svelte +5 -1
  173. package/package/components/runs/RunRow.svelte +12 -8
  174. package/package/components/runs/RunsFilter.svelte +2 -4
  175. package/package/components/runs/RunsFilter.svelte.d.ts +0 -1
  176. package/package/components/runs/RunsTable.svelte +63 -29
  177. package/package/components/runs/RunsTable.svelte.d.ts +1 -0
  178. package/package/components/schema/EditableSchemaWrapper.svelte +12 -0
  179. package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +3 -0
  180. package/package/components/schema/PropertyEditor.svelte +1 -1
  181. package/package/components/search/GlobalSearchModal.svelte +559 -0
  182. package/package/components/search/GlobalSearchModal.svelte.d.ts +17 -0
  183. package/package/components/search/QuickMenuItem.svelte +76 -0
  184. package/package/components/search/QuickMenuItem.svelte.d.ts +27 -0
  185. package/package/components/sidebar/MenuButton.svelte +11 -0
  186. package/package/components/sidebar/MenuButton.svelte.d.ts +4 -0
  187. package/package/components/sidebar/changelogs.js +35 -0
  188. package/package/components/wizards/AppPicker.svelte +68 -0
  189. package/package/components/wizards/AppPicker.svelte.d.ts +17 -0
  190. package/package/components/wizards/NavbarWizard.svelte +131 -0
  191. package/package/components/wizards/NavbarWizard.svelte.d.ts +19 -0
  192. package/package/defaults.d.ts +1 -1
  193. package/package/defaults.js +1 -1
  194. package/package/es6.d.ts.txt +370 -1
  195. package/package/gen/core/OpenAPI.js +1 -1
  196. package/package/gen/schemas.gen.d.ts +42 -3
  197. package/package/gen/schemas.gen.js +42 -3
  198. package/package/gen/services.gen.d.ts +80 -5
  199. package/package/gen/services.gen.js +149 -8
  200. package/package/gen/types.gen.d.ts +265 -11
  201. package/package/inferArgSig.js +4 -0
  202. package/package/script_helpers.d.ts +3 -3
  203. package/package/script_helpers.js +46 -22
  204. package/package/stores.d.ts +1 -1
  205. package/package/stores.js +1 -1
  206. package/package/utils.d.ts +7 -23
  207. package/package/utils.js +54 -33
  208. package/package/windmill_fetch.d.ts.txt +6 -6
  209. package/package.json +3 -11
  210. package/package/components/ContentSearch.svelte +0 -355
@@ -1,13 +1,17 @@
1
1
  <script>import { createEventDispatcher } from 'svelte';
2
2
  import { Button } from './common';
3
- import { Clock } from 'lucide-svelte';
3
+ import { Clock, X } from 'lucide-svelte';
4
+ import { twMerge } from 'tailwind-merge';
4
5
  // import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte'
5
6
  // import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte'
6
7
  export let value = undefined;
8
+ export let clearable = false;
7
9
  export let autofocus = false;
8
10
  export let useDropdown = false;
9
11
  export let minDate = undefined;
10
12
  export let maxDate = undefined;
13
+ export let disabled = undefined;
14
+ export let inputClass = undefined;
11
15
  let date = undefined;
12
16
  let time = undefined;
13
17
  // let format: 'local' | 'utc' = 'local'
@@ -57,17 +61,25 @@ let randomId = 'datetarget-' + Math.random().toString(36).substring(7);
57
61
  type="date"
58
62
  bind:value={date}
59
63
  {autofocus}
60
- class="!w-3/4 app-editor-input"
64
+ {disabled}
65
+ class={twMerge('h-8 text-sm !w-3/4 ', inputClass)}
61
66
  min={minDate}
62
67
  max={maxDate}
63
68
  />
64
- <input type="time" bind:value={time} class="!w-1/4 min-w-[100px] app-editor-input" />
69
+ <input
70
+ type="time"
71
+ bind:value={time}
72
+ class={twMerge('h-8 text-sm !w-1/4 min-w-[100px] ', inputClass)}
73
+ {disabled}
74
+ />
65
75
  <Button
66
76
  variant="border"
67
77
  color="light"
78
+ wrapperClasses="h-8"
68
79
  startIcon={{
69
80
  icon: Clock
70
81
  }}
82
+ {disabled}
71
83
  size="xs"
72
84
  portalTarget={`#${randomId}`}
73
85
  dropdownItems={useDropdown
@@ -104,6 +116,20 @@ let randomId = 'datetarget-' + Math.random().toString(36).substring(7);
104
116
  >
105
117
  Now
106
118
  </Button>
119
+ {#if clearable}
120
+ <Button
121
+ variant="border"
122
+ color="light"
123
+ wrapperClasses="h-8"
124
+ {disabled}
125
+ on:click={() => {
126
+ value = undefined
127
+ dispatch('clear')
128
+ }}
129
+ >
130
+ <X size={14} />
131
+ </Button>
132
+ {/if}
107
133
  <!-- <div>
108
134
  <ToggleButtonGroup bind:selected={format}>
109
135
  <ToggleButton light small value={'local'} label="local" />
@@ -2,14 +2,18 @@ import { SvelteComponent } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
4
  value?: string | undefined;
5
+ clearable?: boolean | undefined;
5
6
  autofocus?: boolean | null | undefined;
6
7
  useDropdown?: boolean | undefined;
7
8
  minDate?: string | undefined;
8
9
  maxDate?: string | undefined;
10
+ disabled?: boolean | undefined;
11
+ inputClass?: string | undefined;
9
12
  };
10
13
  events: {
11
14
  pointerdown: PointerEvent;
12
15
  focus: FocusEvent;
16
+ clear: CustomEvent<any>;
13
17
  change: CustomEvent<any>;
14
18
  } & {
15
19
  [evt: string]: CustomEvent<any>;
@@ -83,8 +83,13 @@ $: if (workspace && token) {
83
83
  loadUser();
84
84
  }
85
85
  async function loadUser() {
86
- const user = await getUserExt(workspace);
87
- $userStore = user;
86
+ try {
87
+ const user = await getUserExt(workspace);
88
+ $userStore = user;
89
+ }
90
+ catch (e) {
91
+ sendUserToast(`Failed to load user ${e}`, true);
92
+ }
88
93
  }
89
94
  let darkModeToggle;
90
95
  let darkMode = undefined;
@@ -353,7 +358,7 @@ setContext('FlowEditorContext', {
353
358
  testStepStore,
354
359
  saveDraft: () => { },
355
360
  initialPath: '',
356
- flowInputsStore: writable(undefined)
361
+ flowInputsStore: writable({})
357
362
  });
358
363
  $: updateFlow($flowStore);
359
364
  let lastSent = undefined;
@@ -1,4 +1,4 @@
1
- <script>import { msToSec } from '../utils';
1
+ <script>import { msToReadableTime } from '../utils';
2
2
  import { Badge } from './common';
3
3
  import { Hourglass } from 'lucide-svelte';
4
4
  import WaitTimeWarning from './common/waitTimeWarning/WaitTimeWarning.svelte';
@@ -9,7 +9,7 @@ export let aggregate_wait_time_ms = undefined;
9
9
 
10
10
  <div>
11
11
  <Badge large icon={{ icon: Hourglass, position: 'left' }}>
12
- Ran in {msToSec(duration_ms)}s
12
+ Ran in {msToReadableTime(duration_ms)}
13
13
  {#if self_wait_time_ms || aggregate_wait_time_ms}
14
14
  <WaitTimeWarning {self_wait_time_ms} {aggregate_wait_time_ms} variant="alert" />
15
15
  {/if}
@@ -3,6 +3,7 @@ import { initHistory, push, redo, undo } from '../history';
3
3
  import { copilotInfo, enterpriseLicense, tutorialsToDo, userStore, workspaceStore } from '../stores';
4
4
  import { cleanValueProperties, encodeState, formatCron, orderedJsonStringify, sleep } from '../utils';
5
5
  import { sendUserToast } from '../toast';
6
+ import { Drawer } from './common';
6
7
  import { setContext, tick } from 'svelte';
7
8
  import { writable } from 'svelte/store';
8
9
  import CenteredPage from './CenteredPage.svelte';
@@ -15,7 +16,7 @@ import FlowImportExportMenu from './flows/header/FlowImportExportMenu.svelte';
15
16
  import FlowPreviewButtons from './flows/header/FlowPreviewButtons.svelte';
16
17
  import { loadFlowSchedule } from './flows/scheduleUtils';
17
18
  import { cleanInputs, emptyFlowModuleState } from './flows/utils';
18
- import { Calendar, Pen, Save, DiffIcon } from 'lucide-svelte';
19
+ import { Calendar, Pen, Save, DiffIcon, MoreVertical, HistoryIcon, FileJson, CornerDownLeft } from 'lucide-svelte';
19
20
  import { createEventDispatcher } from 'svelte';
20
21
  import Awareness from './Awareness.svelte';
21
22
  import { getAllModules } from './flows/flowExplorer';
@@ -28,6 +29,12 @@ import FlowCopilotInputsModal from './copilot/FlowCopilotInputsModal.svelte';
28
29
  import FlowBuilderTutorials from './FlowBuilderTutorials.svelte';
29
30
  import FlowTutorials from './FlowTutorials.svelte';
30
31
  import { ignoredTutorials } from './tutorials/ignoredTutorials';
32
+ import FlowHistory from './flows/FlowHistory.svelte';
33
+ import ButtonDropdown from './common/button/ButtonDropdown.svelte';
34
+ import { MenuItem } from '@rgossiaux/svelte-headlessui';
35
+ import { twMerge } from 'tailwind-merge';
36
+ import CustomPopover from './CustomPopover.svelte';
37
+ import Summary from './Summary.svelte';
31
38
  export let initialPath = '';
32
39
  export let pathStoreInit = undefined;
33
40
  export let newFlow;
@@ -157,7 +164,7 @@ export function computeUnlockedSteps(flow) {
157
164
  .filter((m) => m.value.type == 'script' && m.value.hash == null)
158
165
  .map((m) => [m.id, m.value.path]));
159
166
  }
160
- async function saveFlow() {
167
+ async function saveFlow(deploymentMsg) {
161
168
  loadingSave = true;
162
169
  try {
163
170
  const flow = cleanInputs($flowStore);
@@ -184,7 +191,8 @@ async function saveFlow() {
184
191
  ws_error_handler_muted: flow.ws_error_handler_muted,
185
192
  tag: flow.tag,
186
193
  dedicated_worker: flow.dedicated_worker,
187
- visible_to_runner_only: flow.visible_to_runner_only
194
+ visible_to_runner_only: flow.visible_to_runner_only,
195
+ deployment_message: deploymentMsg || undefined
188
196
  }
189
197
  });
190
198
  if (enabled) {
@@ -245,7 +253,8 @@ async function saveFlow() {
245
253
  tag: flow.tag,
246
254
  dedicated_worker: flow.dedicated_worker,
247
255
  ws_error_handler_muted: flow.ws_error_handler_muted,
248
- visible_to_runner_only: flow.visible_to_runner_only
256
+ visible_to_runner_only: flow.visible_to_runner_only,
257
+ deployment_message: deploymentMsg || undefined
249
258
  }
250
259
  });
251
260
  }
@@ -809,6 +818,8 @@ function blurCopilot() {
809
818
  $: $copilotCurrentStepStore === undefined && blurCopilot();
810
819
  let renderCount = 0;
811
820
  let flowTutorials = undefined;
821
+ let jsonViewerDrawer = undefined;
822
+ let flowHistory = undefined;
812
823
  export function triggerTutorial() {
813
824
  const urlParams = new URLSearchParams(window.location.search);
814
825
  const tutorial = urlParams.get('tutorial');
@@ -819,6 +830,23 @@ export function triggerTutorial() {
819
830
  flowTutorials?.runTutorialById('action');
820
831
  }
821
832
  }
833
+ const moreItems = [
834
+ {
835
+ displayName: 'Deployment History',
836
+ icon: HistoryIcon,
837
+ action: () => {
838
+ flowHistory?.open();
839
+ },
840
+ disabled: newFlow
841
+ },
842
+ {
843
+ displayName: 'Export',
844
+ icon: FileJson,
845
+ action: () => jsonViewerDrawer?.openDrawer()
846
+ }
847
+ ];
848
+ let deploymentMsg = '';
849
+ let msgInput = undefined;
822
850
  </script>
823
851
 
824
852
  <svelte:window on:keydown={onKeyDown} />
@@ -828,6 +856,10 @@ export function triggerTutorial() {
828
856
  {#key renderCount}
829
857
  {#if !$userStore?.operator}
830
858
  <FlowCopilotDrawer {getHubCompletions} {genFlow} bind:flowCopilotMode />
859
+ {#if $pathStore}
860
+ <FlowHistory bind:this={flowHistory} path={$pathStore} on:historyRestore />
861
+ {/if}
862
+ <FlowImportExportMenu bind:drawer={jsonViewerDrawer} />
831
863
  <FlowCopilotInputsModal
832
864
  on:confirmed={async () => {
833
865
  applyCopilotFlowInputs()
@@ -851,19 +883,31 @@ export function triggerTutorial() {
851
883
  <div transition:fade class="absolute inset-0 bg-gray-500 bg-opacity-75 z-[900] !m-0" />
852
884
  {/if}
853
885
  <div class="flex w-full max-w-md gap-4 items-center">
854
- <div class="min-w-64 w-full">
855
- <input
856
- type="text"
857
- placeholder="Flow summary"
858
- class="text-sm w-full font-semibold"
859
- bind:value={$flowStore.summary}
860
- />
861
- </div>
886
+ <Summary bind:value={$flowStore.summary} />
887
+
862
888
  <UndoRedo
863
889
  undoProps={{ disabled: $history.index === 0 }}
864
890
  redoProps={{ disabled: $history.index === $history.history.length - 1 }}
865
891
  on:undo={() => {
892
+ const currentModules = $flowStore?.value?.modules
893
+
866
894
  $flowStore = undo(history, $flowStore)
895
+
896
+ const newModules = $flowStore?.value?.modules
897
+ const restoredModules = newModules?.filter(
898
+ (node) => !currentModules?.some((currentNode) => currentNode?.id === node?.id)
899
+ )
900
+
901
+ for (const mod of restoredModules) {
902
+ if (mod) {
903
+ try {
904
+ loadFlowModuleState(mod).then((state) => ($flowStateStore[mod.id] = state))
905
+ } catch (e) {
906
+ console.error('Error loading state for restored node', e)
907
+ }
908
+ }
909
+ }
910
+
867
911
  $selectedIdStore = 'Input'
868
912
  }}
869
913
  on:redo={() => {
@@ -914,10 +958,40 @@ export function triggerTutorial() {
914
958
  />
915
959
  </div>
916
960
  </div>
917
- <div class="flex flex-row space-x-2">
961
+ <div class="flex flex-row gap-2 items-center">
918
962
  {#if $enterpriseLicense && !newFlow}
919
963
  <Awareness />
920
964
  {/if}
965
+ <div>
966
+ <ButtonDropdown hasPadding={false}>
967
+ <svelte:fragment slot="buttonReplacement">
968
+ <Button nonCaptureEvent size="xs" color="light">
969
+ <div class="flex flex-row items-center">
970
+ <MoreVertical size={14} />
971
+ </div>
972
+ </Button>
973
+ </svelte:fragment>
974
+ <svelte:fragment slot="items">
975
+ {#each moreItems as item}
976
+ <MenuItem
977
+ on:click={item.action}
978
+ disabled={item.disabled}
979
+ class={item.disabled ? 'opacity-50' : ''}
980
+ >
981
+ <div
982
+ class={twMerge(
983
+ 'text-primary flex flex-row items-center text-left px-4 py-2 gap-2 cursor-pointer hover:bg-surface-hover !text-xs font-semibold'
984
+ )}
985
+ >
986
+ <svelte:component this={item.icon} size={14} />
987
+ {item.displayName}
988
+ </div>
989
+ </MenuItem>
990
+ {/each}
991
+ </svelte:fragment>
992
+ </ButtonDropdown>
993
+ </div>
994
+
921
995
  <FlowBuilderTutorials
922
996
  on:reload={() => {
923
997
  renderCount += 1
@@ -955,8 +1029,6 @@ export function triggerTutorial() {
955
1029
  {abortController}
956
1030
  />
957
1031
 
958
- <FlowImportExportMenu />
959
-
960
1032
  <FlowPreviewButtons />
961
1033
  <Button
962
1034
  loading={loadingDraft}
@@ -970,15 +1042,41 @@ export function triggerTutorial() {
970
1042
  >
971
1043
  Draft
972
1044
  </Button>
973
- <Button
974
- loading={loadingSave}
975
- size="xs"
976
- startIcon={{ icon: Save }}
977
- on:click={() => saveFlow()}
978
- dropdownItems={!newFlow ? dropdownItems : undefined}
979
- >
980
- Deploy
981
- </Button>
1045
+
1046
+ <CustomPopover appearTimeout={0} focusEl={msgInput}>
1047
+ <Button
1048
+ loading={loadingSave}
1049
+ size="xs"
1050
+ startIcon={{ icon: Save }}
1051
+ on:click={() => saveFlow()}
1052
+ dropdownItems={!newFlow ? dropdownItems : undefined}
1053
+ >
1054
+ Deploy
1055
+ </Button>
1056
+ <svelte:fragment slot="overlay">
1057
+ <div class="flex flex-row gap-2 w-80">
1058
+ <input
1059
+ type="text"
1060
+ placeholder="Deployment message"
1061
+ bind:value={deploymentMsg}
1062
+ on:keydown={(e) => {
1063
+ if (e.key === 'Enter') {
1064
+ saveFlow(deploymentMsg)
1065
+ }
1066
+ }}
1067
+ bind:this={msgInput}
1068
+ />
1069
+ <Button
1070
+ size="xs"
1071
+ on:click={() => saveFlow(deploymentMsg)}
1072
+ endIcon={{ icon: CornerDownLeft }}
1073
+ loading={loadingSave}
1074
+ >
1075
+ Deploy
1076
+ </Button>
1077
+ </div>
1078
+ </svelte:fragment>
1079
+ </CustomPopover>
982
1080
  </div>
983
1081
  </div>
984
1082
 
@@ -24,6 +24,7 @@ declare const __propDef: {
24
24
  triggerTutorial?: (() => void) | undefined;
25
25
  };
26
26
  events: {
27
+ historyRestore: CustomEvent<any>;
27
28
  saveInitial: CustomEvent<any>;
28
29
  saveDraftOnlyAtNewPath: CustomEvent<any>;
29
30
  deploy: CustomEvent<any>;
@@ -61,7 +61,7 @@ let codeViewer;
61
61
  <span class="!text-xs">
62
62
  <HighlightCode language={stepDetail.value.language} code={stepDetail.value.content} />
63
63
  </span>
64
- <h3 class="mb-2">Lockfile</h3>
64
+ <h3 class="mt-4 mb-2">Lockfile</h3>
65
65
  <div>
66
66
  {#if stepDetail.value.lock}
67
67
  <pre class="bg-surface-secondary text-sm p-2 h-full overflow-auto w-full"
@@ -166,7 +166,7 @@ let codeViewer;
166
166
  >{stepDetail.value.lock}</pre
167
167
  >
168
168
  {:else}
169
- <p class="bg-surface-secondary text-sm p-2">
169
+ <p class="bg-surface-secondary text-sm p-2 rounded">
170
170
  There is no lockfile for this inline script
171
171
  </p>
172
172
  {/if}
@@ -56,9 +56,11 @@ async function getLogs() {
56
56
  </Drawer>
57
57
  <div
58
58
  class:border={!noBorder}
59
- class="grid {!col ? 'grid-cols-2' : 'grid-rows-2'} shadow border border-tertiary-inverse h-full"
59
+ class="grid {!col
60
+ ? 'grid-cols-2'
61
+ : 'grid-rows-2'} shadow border border-tertiary-inverse grow overflow-hidden"
60
62
  >
61
- <div class="bg-surface {col ? '' : 'max-h-80'} h-full p-1 overflow-auto relative">
63
+ <div class="bg-surface {col ? '' : 'max-h-80'} p-1 overflow-auto relative">
62
64
  <span class="text-tertiary">Result</span>
63
65
  {#if result !== undefined}
64
66
  <DisplayResult {workspaceId} {jobId} {filename} {result} />
@@ -68,7 +70,7 @@ async function getLogs() {
68
70
  <div class="text-gray-400">No result (result is undefined)</div>
69
71
  {/if}
70
72
  </div>
71
- <div class="overflow-auto {col ? '' : 'max-h-80'} h-full relative">
73
+ <div class="overflow-auto {col ? '' : 'max-h-80'} relative">
72
74
  <div class="absolute z-40 text-sm top-1.5 left-2"
73
75
  ><button class="" on:click={drawer.openDrawer}>explore all steps' logs</button></div
74
76
  >
@@ -34,11 +34,12 @@ $: jobId && updateJobId();
34
34
 
35
35
  <FlowStatusViewerInner
36
36
  on:jobsLoaded={({ detail }) => {
37
- if (detail.script_path != lastScriptPath && detail.script_path) {
38
- lastScriptPath = detail.script_path
37
+ let { job } = detail
38
+ if (job.script_path != lastScriptPath && job.script_path) {
39
+ lastScriptPath = job.script_path
39
40
  loadOwner(lastScriptPath ?? '')
40
41
  }
41
- dispatch('jobsLoaded', detail)
42
+ dispatch('jobsLoaded', job)
42
43
  }}
43
44
  globalDurationStatuses={[]}
44
45
  globalModuleStates={[]}