windmill-components 1.383.9 → 1.389.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 (189) hide show
  1. package/package/assets/app.css +25 -1
  2. package/package/components/ArgInput.svelte +2 -1
  3. package/package/components/ChangeInstanceUsername.svelte +9 -108
  4. package/package/components/ChangeInstanceUsernameInner.svelte +112 -0
  5. package/package/components/ChangeInstanceUsernameInner.svelte.d.ts +21 -0
  6. package/package/components/DiffDrawer.svelte +27 -20
  7. package/package/components/DiffEditor.svelte +5 -1
  8. package/package/components/DisplayResult.svelte +39 -9
  9. package/package/components/DropdownV2.svelte +4 -26
  10. package/package/components/DropdownV2.svelte.d.ts +9 -1
  11. package/package/components/DropdownV2Inner.svelte +42 -0
  12. package/package/components/DropdownV2Inner.svelte.d.ts +40 -0
  13. package/package/components/Editor.svelte +24 -4
  14. package/package/components/Editor.svelte.d.ts +5 -4
  15. package/package/components/EditorBar.svelte +9 -11
  16. package/package/components/EditorSettings.svelte +44 -0
  17. package/package/components/EditorSettings.svelte.d.ts +17 -0
  18. package/package/components/EditorTheme.svelte +1 -1
  19. package/package/components/ErrorOrRecoveryHandler.svelte +27 -20
  20. package/package/components/FlowBuilder.svelte +17 -3
  21. package/package/components/FlowBuilder.svelte.d.ts +3 -0
  22. package/package/components/FlowGraphViewerStep.svelte +1 -1
  23. package/package/components/FlowStatusViewer.svelte +3 -1
  24. package/package/components/FlowStatusViewer.svelte.d.ts +1 -0
  25. package/package/components/FlowStatusViewerInner.svelte +5 -2
  26. package/package/components/FlowViewerInner.svelte +3 -7
  27. package/package/components/FormatOnSave.svelte +12 -29
  28. package/package/components/GraphqlSchemaViewer.svelte +1 -1
  29. package/package/components/GraphqlSchemaViewer.svelte.d.ts +1 -1
  30. package/package/components/HighlightCode.svelte +3 -0
  31. package/package/components/InstanceNameEditor.svelte +64 -0
  32. package/package/components/InstanceNameEditor.svelte.d.ts +23 -0
  33. package/package/components/LightweightArgInput.svelte +6 -11
  34. package/package/components/LogViewer.svelte +37 -29
  35. package/package/components/LogViewer.svelte.d.ts +2 -0
  36. package/package/components/ObjectResourceInput.svelte +1 -1
  37. package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
  38. package/package/components/Path.svelte +3 -3
  39. package/package/components/QueueMetricsDrawer.svelte +6 -218
  40. package/package/components/QueueMetricsDrawer.svelte.d.ts +2 -3
  41. package/package/components/QueueMetricsDrawerInner.svelte +211 -0
  42. package/package/components/QueueMetricsDrawerInner.svelte.d.ts +15 -0
  43. package/package/components/ResourceEditorDrawer.svelte +14 -11
  44. package/package/components/ResourceEditorDrawer.svelte.d.ts +1 -1
  45. package/package/components/ResultJobLoader.svelte.d.ts +1 -1
  46. package/package/components/S3FilePicker.svelte +20 -8
  47. package/package/components/ScheduleEditorInner.svelte +497 -469
  48. package/package/components/ScriptBuilder.svelte +12 -1
  49. package/package/components/ScriptBuilder.svelte.d.ts +3 -0
  50. package/package/components/ScriptEditor.svelte +1 -0
  51. package/package/components/ScriptEditor.svelte.d.ts +2 -1
  52. package/package/components/ServiceLogsInner.svelte +511 -0
  53. package/package/components/ServiceLogsInner.svelte.d.ts +20 -0
  54. package/package/components/SimpleEditor.svelte +27 -2
  55. package/package/components/SimpleEditor.svelte.d.ts +5 -3
  56. package/package/components/Summary.svelte +33 -31
  57. package/package/components/Summary.svelte.d.ts +1 -0
  58. package/package/components/SuperadminSettings.svelte +28 -10
  59. package/package/components/TemplateEditor.svelte +1 -1
  60. package/package/components/TestJobLoader.svelte.d.ts +1 -1
  61. package/package/components/VimMode.svelte +16 -0
  62. package/package/components/VimMode.svelte.d.ts +14 -0
  63. package/package/components/WorkerTagPicker.svelte +4 -1
  64. package/package/components/WorkspaceGroup.svelte +139 -68
  65. package/package/components/WorkspaceGroup.svelte.d.ts +3 -0
  66. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +19 -2
  67. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +1 -0
  68. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte.d.ts +2 -1
  69. package/package/components/apps/components/display/table/AppAggridInfiniteTableEe.svelte +2 -0
  70. package/package/components/apps/components/display/table/AppAggridInfiniteTableEe.svelte.d.ts +2 -1
  71. package/package/components/apps/components/display/table/AppAggridTable.svelte +45 -3
  72. package/package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +2 -1
  73. package/package/components/apps/components/display/table/AppAggridTableEe.svelte +2 -0
  74. package/package/components/apps/components/display/table/AppAggridTableEe.svelte.d.ts +2 -1
  75. package/package/components/apps/editor/AppEditor.svelte +239 -92
  76. package/package/components/apps/editor/AppEditorBottomPanel.svelte +22 -0
  77. package/package/components/apps/editor/AppEditorBottomPanel.svelte.d.ts +24 -0
  78. package/package/components/apps/editor/AppEditorHeader.svelte +44 -2
  79. package/package/components/apps/editor/AppEditorHeader.svelte.d.ts +9 -0
  80. package/package/components/apps/editor/AppExportButton.svelte +1 -1
  81. package/package/components/apps/editor/AppPreview.svelte +4 -0
  82. package/package/components/apps/editor/DeploymentHistory.svelte +7 -3
  83. package/package/components/apps/editor/GridEditor.svelte +4 -13
  84. package/package/components/apps/editor/RunnableJobPanel.svelte +25 -58
  85. package/package/components/apps/editor/RunnableJobPanel.svelte.d.ts +10 -1
  86. package/package/components/apps/editor/RunnalbeJobPanelInner.svelte +56 -0
  87. package/package/components/apps/editor/RunnalbeJobPanelInner.svelte.d.ts +18 -0
  88. package/package/components/apps/editor/SubGridEditor.svelte +3 -1
  89. package/package/components/apps/editor/component/Component.svelte +26 -4
  90. package/package/components/apps/editor/component/Component.svelte.d.ts +1 -0
  91. package/package/components/apps/editor/component/components.d.ts +5 -0
  92. package/package/components/apps/editor/componentsPanel/CssProperty.svelte +2 -0
  93. package/package/components/apps/editor/componentsPanel/tailwindUtils.js +267 -1
  94. package/package/components/apps/editor/contextPanel/ContextPanel.svelte +9 -1
  95. package/package/components/apps/editor/contextPanel/ContextPanel.svelte.d.ts +2 -0
  96. package/package/components/apps/editor/inlineScriptsPanel/CacheTtlPopup.svelte +1 -0
  97. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +3 -0
  98. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +7 -2
  99. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte.d.ts +5 -1
  100. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +14 -2
  101. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte.d.ts +1 -0
  102. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +25 -5
  103. package/package/components/apps/editor/settingsPanel/HideButton.svelte +47 -0
  104. package/package/components/apps/editor/settingsPanel/HideButton.svelte.d.ts +22 -0
  105. package/package/components/apps/editor/settingsPanel/TableActions.svelte +43 -4
  106. package/package/components/apps/editor/settingsPanel/TableActions.svelte.d.ts +2 -1
  107. package/package/components/apps/svelte-grid/Grid.svelte +6 -2
  108. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +1 -0
  109. package/package/components/apps/svelte-grid/MoveResize.svelte +11 -3
  110. package/package/components/apps/svelte-grid/MoveResize.svelte.d.ts +1 -0
  111. package/package/components/apps/svelte-grid/utils/item.d.ts +4 -1
  112. package/package/components/apps/svelte-grid/utils/item.js +11 -4
  113. package/package/components/common/button/Button.svelte.d.ts +2 -2
  114. package/package/components/common/calendarPicker/CalendarPicker.svelte +6 -2
  115. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +2 -0
  116. package/package/components/common/drawer/ConditionalPortal.svelte +2 -1
  117. package/package/components/common/drawer/ConditionalPortal.svelte.d.ts +1 -0
  118. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  119. package/package/components/common/popup/Popup.svelte +2 -1
  120. package/package/components/common/popup/Popup.svelte.d.ts +1 -0
  121. package/package/components/common/table/AppRow.svelte +11 -8
  122. package/package/components/common/table/AppRow.svelte.d.ts +1 -2
  123. package/package/components/common/table/FlowRow.svelte +3 -3
  124. package/package/components/common/table/FlowRow.svelte.d.ts +1 -2
  125. package/package/components/common/table/RawAppRow.svelte +3 -3
  126. package/package/components/common/table/RawAppRow.svelte.d.ts +1 -2
  127. package/package/components/common/table/ScriptRow.svelte +3 -3
  128. package/package/components/common/table/ScriptRow.svelte.d.ts +1 -2
  129. package/package/components/copilot/CodeCompletionStatus.svelte +21 -46
  130. package/package/components/copilot/StepGen.svelte +2 -1
  131. package/package/components/custom_ui.d.ts +4 -1
  132. package/package/components/flows/CreateActionsApp.svelte +11 -8
  133. package/package/components/flows/CreateActionsFlow.svelte +11 -8
  134. package/package/components/flows/FlowEditor.svelte +1 -2
  135. package/package/components/flows/FlowEditor.svelte.d.ts +0 -1
  136. package/package/components/flows/FlowHistory.svelte +6 -3
  137. package/package/components/flows/content/FlowModuleScript.svelte +15 -11
  138. package/package/components/flows/content/FlowSettings.svelte +1 -4
  139. package/package/components/flows/content/ScriptEditorDrawer.svelte +3 -0
  140. package/package/components/flows/header/FlowYamlEditor.svelte +55 -0
  141. package/package/components/flows/header/FlowYamlEditor.svelte.d.ts +17 -0
  142. package/package/components/flows/map/InsertTriggerButton.svelte +1 -1
  143. package/package/components/flows/map/InsertTriggerButton.svelte.d.ts +1 -0
  144. package/package/components/flows/map/VirtualItem.svelte +1 -1
  145. package/package/components/flows/pickers/PickHubScript.svelte +1 -0
  146. package/package/components/flows/types.d.ts +7 -6
  147. package/package/components/flows/utils.d.ts +9 -0
  148. package/package/components/flows/utils.js +21 -0
  149. package/package/components/graph/graphBuilder.js +1 -0
  150. package/package/components/graph/model.d.ts +1 -0
  151. package/package/components/graph/renderers/edges/BaseEdge.svelte +16 -0
  152. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
  153. package/package/components/graph/renderers/nodes/NoBranchNode.svelte +5 -1
  154. package/package/components/graph/renderers/nodes/NoBranchNode.svelte.d.ts +1 -0
  155. package/package/components/home/Item.svelte +0 -17
  156. package/package/components/home/deploy_ui.d.ts +2 -0
  157. package/package/components/home/deploy_ui.js +21 -0
  158. package/package/components/icons/RustIcon.svelte +70 -0
  159. package/package/components/icons/RustIcon.svelte.d.ts +25 -0
  160. package/package/components/icons/rust-logo.svg +1 -0
  161. package/package/components/instanceSettings.js +2 -2
  162. package/package/components/monaco_keybindings.d.ts +3 -0
  163. package/package/components/monaco_keybindings.js +9 -0
  164. package/package/components/preview/FlowPreviewStatus.svelte +6 -2
  165. package/package/components/runs/JobLoader.svelte +12 -3
  166. package/package/components/runs/JobLoader.svelte.d.ts +1 -1
  167. package/package/components/runs/ManuelDatePicker.svelte +31 -44
  168. package/package/components/runs/ManuelDatePicker.svelte.d.ts +6 -2
  169. package/package/components/runs/RunsFilter.svelte +4 -1
  170. package/package/components/runs/RunsFilter.svelte.d.ts +1 -0
  171. package/package/components/search/GlobalSearchModal.svelte +36 -25
  172. package/package/components/wizards/TableActionsWizard.svelte +84 -0
  173. package/package/components/wizards/TableActionsWizard.svelte.d.ts +22 -0
  174. package/package/editorUtils.js +2 -0
  175. package/package/gen/core/OpenAPI.js +1 -1
  176. package/package/gen/schemas.gen.d.ts +8 -8
  177. package/package/gen/schemas.gen.js +8 -8
  178. package/package/gen/services.gen.d.ts +4 -0
  179. package/package/gen/services.gen.js +16 -0
  180. package/package/gen/types.gen.d.ts +20 -8
  181. package/package/infer.d.ts +1 -1
  182. package/package/infer.js +48 -7
  183. package/package/script_helpers.d.ts +1 -0
  184. package/package/script_helpers.js +39 -1
  185. package/package/scripts.d.ts +1 -1
  186. package/package/scripts.js +11 -3
  187. package/package/stores.d.ts +5 -1
  188. package/package/stores.js +7 -2
  189. package/package.json +13 -7
@@ -3,7 +3,7 @@ import '@codingame/monaco-vscode-standalone-languages';
3
3
  import '@codingame/monaco-vscode-standalone-json-language-features';
4
4
  import '@codingame/monaco-vscode-standalone-css-language-features';
5
5
  import '@codingame/monaco-vscode-standalone-typescript-language-features';
6
- import { editor as meditor } from 'monaco-editor';
6
+ import { editor as meditor, type IDisposable } from 'monaco-editor';
7
7
  import '@codingame/monaco-vscode-standalone-languages';
8
8
  import '@codingame/monaco-vscode-standalone-json-language-features';
9
9
  import '@codingame/monaco-vscode-standalone-css-language-features';
@@ -24,13 +24,15 @@ declare const __propDef: {
24
24
  small?: boolean | undefined;
25
25
  domLib?: boolean | undefined;
26
26
  autofocus?: boolean | undefined;
27
+ allowVim?: boolean | undefined;
28
+ tailwindClasses?: string[] | undefined;
27
29
  getCode?: (() => string) | undefined;
28
30
  insertAtCursor?: ((code: string) => void) | undefined;
29
31
  setCode?: ((ncode: string) => void) | undefined;
30
32
  format?: (() => void) | undefined;
31
33
  focus?: (() => void) | undefined;
32
34
  getSelectedLines?: (() => string | undefined) | undefined;
33
- onDidChangeCursorSelection?: ((f: (e: meditor.ICursorSelectionChangedEvent) => void) => import("monaco-editor").IDisposable | undefined) | undefined;
35
+ onDidChangeCursorSelection?: ((f: (e: meditor.ICursorSelectionChangedEvent) => void) => IDisposable | undefined) | undefined;
34
36
  show?: (() => void) | undefined;
35
37
  hide?: (() => void) | undefined;
36
38
  setSuggestion?: ((value: string) => void) | undefined;
@@ -54,7 +56,7 @@ export default class SimpleEditor extends SvelteComponent<SimpleEditorProps, Sim
54
56
  get format(): () => void;
55
57
  get focus(): () => void;
56
58
  get getSelectedLines(): () => string | undefined;
57
- get onDidChangeCursorSelection(): (f: (e: meditor.ICursorSelectionChangedEvent) => void) => import("monaco-editor").IDisposable | undefined;
59
+ get onDidChangeCursorSelection(): (f: (e: meditor.ICursorSelectionChangedEvent) => void) => IDisposable | undefined;
58
60
  get show(): () => void;
59
61
  get hide(): () => void;
60
62
  get setSuggestion(): (value: string) => void;
@@ -1,5 +1,6 @@
1
1
  <script>import { Pen } from 'lucide-svelte';
2
2
  export let value;
3
+ export let disabled = false;
3
4
  function blur(e) {
4
5
  e.key === 'Enter' && e?.target?.blur();
5
6
  }
@@ -13,51 +14,52 @@ function blur(e) {
13
14
  placeholder="Untitled"
14
15
  class="windmillapp app-title text-sm w-full font-semibold"
15
16
  bind:value
17
+ {disabled}
16
18
  on:keydown={blur}
17
19
  />
18
- <Pen class="absolute top-2 right-2 pen-icon -z-10 opacity-60" size={14} />
20
+ {#if !disabled}
21
+ <Pen class="absolute top-2 right-2 pen-icon -z-10 opacity-60" size={14} />
22
+ {/if}
19
23
  </div>
20
24
  </div>
21
25
 
22
26
  <style global>
23
27
  :global(.app-title) {
24
- display: block;
25
- width: 100%;
26
- border-radius: 0.25rem;
27
- border-width: 0px;
28
- padding: 0.25rem;
29
- padding-left: 0.5rem;
30
- padding-right: 0.5rem;
31
- font-size: 0.875rem;
32
- line-height: 1.25rem;
33
- font-weight: 600
28
+ display: block !important;
29
+ width: 100% !important;
30
+ border-radius: 0.25rem !important;
31
+ border-width: 0px !important;
32
+ padding: 0.25rem !important;
33
+ padding-left: 0.5rem !important;
34
+ padding-right: 0.5rem !important;
35
+ font-size: 0.875rem !important;
36
+ line-height: 1.25rem !important;
37
+ font-weight: 600 !important
34
38
  }
35
39
 
36
40
  :global(.app-title:hover) {
37
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
38
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
39
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
40
- --tw-ring-opacity: 1;
41
- --tw-ring-color: rgb(234 238 244 / var(--tw-ring-opacity));
42
- --tw-ring-offset-width: 0px
41
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;
42
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;
43
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000) !important;
44
+ --tw-ring-opacity: 1 !important;
45
+ --tw-ring-color: rgb(234 238 244 / var(--tw-ring-opacity)) !important;
46
+ --tw-ring-offset-width: 0px !important
43
47
  }
44
48
 
45
49
  :global(.app-title:focus) {
46
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
47
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
48
- --tw-ring-opacity: 1;
49
- --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity));
50
- --tw-ring-offset-width: 0px;
50
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;
51
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;
52
+ --tw-ring-opacity: 1 !important;
53
+ --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity)) !important;
54
+ --tw-ring-offset-width: 0px !important;
51
55
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000)
52
56
  }
53
57
 
54
58
  :global(.dark) :global(.app-title) {
55
- --tw-border-opacity: 1;
56
- border-color: rgb(75 85 99 / var(--tw-border-opacity));
57
- --tw-bg-opacity: 1;
58
- background-color: rgb(55 65 81 / var(--tw-bg-opacity));
59
- --tw-text-opacity: 1;
60
- color: rgb(var(--color-text-secondary) / var(--tw-text-opacity))
59
+ --tw-border-opacity: 1 !important;
60
+ border-color: rgb(75 85 99 / var(--tw-border-opacity)) !important;
61
+ --tw-text-opacity: 1 !important;
62
+ color: rgb(var(--color-text-secondary) / var(--tw-text-opacity)) !important
61
63
  }
62
64
 
63
65
  :global(.dark) :global(.app-title:focus) {
@@ -66,9 +68,9 @@ function blur(e) {
66
68
  }
67
69
 
68
70
  :global(.dark) :global(.app-title:hover) {
69
- --tw-ring-opacity: 1;
70
- --tw-ring-color: rgb(54 77 110 / var(--tw-ring-opacity))
71
+ --tw-ring-opacity: 1 !important;
72
+ --tw-ring-color: rgb(54 77 110 / var(--tw-ring-opacity)) !important
71
73
  }
72
74
  :global(.app-title:focus) + :global(.pen-icon) {
73
- display: none
75
+ display: none !important
74
76
  }</style>
@@ -2,6 +2,7 @@ import { SvelteComponent } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
4
  value: string;
5
+ disabled?: boolean | undefined;
5
6
  };
6
7
  events: {
7
8
  [evt: string]: CustomEvent<any>;
@@ -21,6 +21,7 @@ import ConfirmationModal from './common/confirmationModal/ConfirmationModal.svel
21
21
  import ChangeInstanceUsername from './ChangeInstanceUsername.svelte';
22
22
  import Tooltip from './Tooltip.svelte';
23
23
  import { isCloudHosted } from '../cloud';
24
+ import InstanceNameEditor from './InstanceNameEditor.svelte';
24
25
  let drawer;
25
26
  let filter = '';
26
27
  export function openDrawer() {
@@ -63,6 +64,21 @@ async function enableAutomateUsernameCreationSetting() {
63
64
  sendUserToast('Automatic username creation enabled');
64
65
  listUsers();
65
66
  }
67
+ async function updateName(name, email) {
68
+ try {
69
+ await UserService.globalUserUpdate({
70
+ email,
71
+ requestBody: {
72
+ name
73
+ }
74
+ });
75
+ sendUserToast('User updated');
76
+ listUsers();
77
+ }
78
+ catch (e) {
79
+ sendUserToast('Error updating user', true);
80
+ }
81
+ }
66
82
  </script>
67
83
 
68
84
  <SearchItems
@@ -213,15 +229,18 @@ async function enableAutomateUsernameCreationSetting() {
213
229
  </td>
214
230
  <td>
215
231
  <div class="flex flex-row gap-x-1 justify-end">
216
- {#if automateUsernameCreation && username}
217
- <ChangeInstanceUsername
218
- {username}
219
- {email}
220
- on:renamed={() => {
221
- listUsers()
222
- }}
223
- />
224
- {/if}
232
+ <InstanceNameEditor
233
+ value={name}
234
+ {username}
235
+ {email}
236
+ on:save={(e) => {
237
+ updateName(e.detail, email)
238
+ }}
239
+ on:renamed={() => {
240
+ listUsers()
241
+ }}
242
+ {automateUsernameCreation}
243
+ />
225
244
  <Button
226
245
  color="light"
227
246
  variant="contained"
@@ -230,7 +249,6 @@ async function enableAutomateUsernameCreationSetting() {
230
249
  btnClasses="text-red-500"
231
250
  on:click={() => {
232
251
  deleteConfirmedCallback = async () => {
233
- console.log(email)
234
252
  await UserService.globalUserDelete({ email })
235
253
  sendUserToast(`User ${email} removed`)
236
254
  listUsers()
@@ -536,7 +536,7 @@ onDestroy(() => {
536
536
  <div
537
537
  bind:this={divEl}
538
538
  style="height: 18px;"
539
- class="{$$props.class ?? ''} border template rounded min-h-4 mx-0.5 overflow-clip"
539
+ class="{$$props.class ?? ''} border template nonmain-editor rounded min-h-4 mx-0.5 overflow-clip"
540
540
  bind:clientWidth={width}
541
541
  />
542
542
 
@@ -51,7 +51,7 @@ export default class TestJobLoader extends SvelteComponent<TestJobLoaderProps, T
51
51
  get runScriptByPath(): (path: string | undefined, args: Record<string, any>) => Promise<string>;
52
52
  get runFlowByPath(): (path: string | undefined, args: Record<string, any>) => Promise<string>;
53
53
  get getLogs(): () => Promise<void>;
54
- get runPreview(): (path: string | undefined, code: string, lang: "python3" | "deno" | "go" | "bash" | "powershell" | "postgresql" | "mysql" | "bigquery" | "snowflake" | "mssql" | "graphql" | "nativets" | "bun" | "php" | undefined, args: Record<string, any>, tag: string | undefined, lock?: string | undefined) => Promise<string>;
54
+ get runPreview(): (path: string | undefined, code: string, lang: "python3" | "deno" | "go" | "bash" | "powershell" | "postgresql" | "mysql" | "bigquery" | "snowflake" | "mssql" | "graphql" | "nativets" | "bun" | "php" | "rust" | undefined, args: Record<string, any>, tag: string | undefined, lock?: string | undefined) => Promise<string>;
55
55
  get cancelJob(): () => Promise<void>;
56
56
  get clearCurrentJob(): () => Promise<void>;
57
57
  get watchJob(): (testId: string) => Promise<void>;
@@ -0,0 +1,16 @@
1
+ <script>import { VIM_MODE_SETTING_NAME, vimMode } from '../stores';
2
+ import { storeLocalSetting } from '../utils';
3
+ import Toggle from './Toggle.svelte';
4
+ function storeSetting() {
5
+ storeLocalSetting(VIM_MODE_SETTING_NAME, $vimMode.toString());
6
+ }
7
+ </script>
8
+
9
+ <Toggle
10
+ size="xs"
11
+ bind:checked={$vimMode}
12
+ on:change={() => {
13
+ storeSetting()
14
+ }}
15
+ options={{ right: 'vim mode' }}
16
+ />
@@ -0,0 +1,14 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: Record<string, never>;
4
+ events: {
5
+ [evt: string]: CustomEvent<any>;
6
+ };
7
+ slots: {};
8
+ };
9
+ export type VimModeProps = typeof __propDef.props;
10
+ export type VimModeEvents = typeof __propDef.events;
11
+ export type VimModeSlots = typeof __propDef.slots;
12
+ export default class VimMode extends SvelteComponent<VimModeProps, VimModeEvents, VimModeSlots> {
13
+ }
14
+ export {};
@@ -15,7 +15,7 @@ async function loadWorkerGroups() {
15
15
 
16
16
  <div class="flex gap-2 items-center">
17
17
  <div class="max-w-sm grow">
18
- {#if workerTags}
18
+ {#if $workerTags}
19
19
  {#if $workerTags?.length ?? 0 > 0}
20
20
  <select
21
21
  value={tag}
@@ -32,6 +32,9 @@ async function loadWorkerGroups() {
32
32
  {:else}
33
33
  <option value="" disabled selected>Worker Group Tag</option>
34
34
  {/if}
35
+ {#if tag && tag != '' && !($workerTags ?? []).includes(tag)}
36
+ <option value={tag} selected>{tag}</option>
37
+ {/if}
35
38
  {#each $workerTags ?? [] as tag (tag)}
36
39
  <option value={tag}>{tag}</option>
37
40
  {/each}
@@ -7,7 +7,7 @@ import { ConfigService, WorkspaceService } from '../gen';
7
7
  import ConfirmationModal from './common/confirmationModal/ConfirmationModal.svelte';
8
8
  import { createEventDispatcher } from 'svelte';
9
9
  import { sendUserToast } from '../toast';
10
- import { emptyString } from '../utils';
10
+ import { emptyString, pluralize } from '../utils';
11
11
  import { enterpriseLicense, superadmin } from '../stores';
12
12
  import Tooltip from './Tooltip.svelte';
13
13
  import Editor from './Editor.svelte';
@@ -16,10 +16,28 @@ import Section from './Section.svelte';
16
16
  import Label from './Label.svelte';
17
17
  import AutoComplete from 'simple-svelte-autocomplete';
18
18
  import YAML from 'yaml';
19
+ import Toggle from './Toggle.svelte';
19
20
  export let name;
20
21
  export let config;
21
22
  export let activeWorkers;
22
23
  export let customTags;
24
+ export let workers;
25
+ $: vcpus_memory = computeVCpuAndMemory(workers);
26
+ function computeVCpuAndMemory(workers) {
27
+ let vcpus = 0;
28
+ let memory = 0;
29
+ for (const [_, pings] of workers) {
30
+ for (const ping of pings) {
31
+ if (ping.vcpus) {
32
+ vcpus += ping.vcpus;
33
+ }
34
+ if (ping.memory) {
35
+ memory += ping.memory;
36
+ }
37
+ }
38
+ }
39
+ return { vcpus, memory };
40
+ }
23
41
  let nconfig = {};
24
42
  function loadNConfig() {
25
43
  nconfig = config
@@ -65,7 +83,8 @@ const defaultTags = [
65
83
  'flow',
66
84
  'other',
67
85
  'bun',
68
- 'php'
86
+ 'php',
87
+ 'rust'
69
88
  ];
70
89
  const nativeTags = [
71
90
  'nativets',
@@ -409,6 +428,42 @@ let createdTags = [];
409
428
  {/if}
410
429
  {/if}
411
430
  </Section>
431
+ {#if nconfig !== undefined}
432
+ <div class="mt-8" />
433
+ <Section label="Alerts" tooltip="Alert is sent to the configured critical error channels">
434
+ <Toggle
435
+ size="sm"
436
+ options={{
437
+ right: 'Send an alert when the number of alive workers falls below a given threshold'
438
+ }}
439
+ checked={nconfig?.min_alive_workers_alert_threshold !== undefined ?? false}
440
+ on:change={(ev) => {
441
+ if (nconfig !== undefined) {
442
+ nconfig.min_alive_workers_alert_threshold = ev.detail ? 1 : undefined
443
+ dirty = true
444
+ }
445
+ }}
446
+ disabled{!$enterpriseLicense}
447
+ />
448
+ {#if nconfig.min_alive_workers_alert_threshold !== undefined}
449
+ <div class="flex flex-row items-center justify-between">
450
+ <div class="flex flex-row items-center text-sm gap-2">
451
+ <p>Triggered when number of workers in group is lower than</p>
452
+ <input
453
+ type="number"
454
+ class="!w-14 text-center"
455
+ disabled={!$enterpriseLicense}
456
+ min="1"
457
+ bind:value={nconfig.min_alive_workers_alert_threshold}
458
+ on:change={(ev) => {
459
+ dirty = true
460
+ }}
461
+ />
462
+ </div>
463
+ </div>
464
+ {/if}
465
+ </Section>
466
+ {/if}
412
467
  {:else if selected == 'dedicated'}
413
468
  {#if nconfig?.dedicated_worker != undefined}
414
469
  <input
@@ -733,6 +788,13 @@ let createdTags = [];
733
788
  variant="contained"
734
789
  color="dark"
735
790
  on:click={async () => {
791
+ if (
792
+ nconfig?.min_alive_workers_alert_threshold &&
793
+ nconfig?.min_alive_workers_alert_threshold < 1
794
+ ) {
795
+ sendUserToast('Minimum alive workers alert threshold must be at least 1', true)
796
+ return
797
+ }
736
798
  customEnvVars.forEach((envvar) => {
737
799
  if (
738
800
  nconfig.env_vars_static !== undefined &&
@@ -764,81 +826,90 @@ let createdTags = [];
764
826
  </DrawerContent>
765
827
  </Drawer>
766
828
 
767
- <div class="flex gap-2 items-center justify-end flex-row my-2">
768
- {#if $superadmin}
769
- <Button
770
- color="light"
771
- size="xs"
772
- on:click={() => {
773
- dirty = false
774
- loadNConfig()
775
- drawer.openDrawer()
776
- }}
777
- startIcon={{ icon: config == undefined ? Plus : Settings }}
778
- >
779
- <div class="flex flex-row gap-1 items-center">
780
- {config == undefined ? 'Create' : 'Edit'} config
781
- </div>
782
- </Button>
829
+ <div class=" flex items-center justify-between pt-1">
830
+ <div class="text-xs"
831
+ >{pluralize(activeWorkers, 'worker')}
832
+ {#if vcpus_memory?.vcpus}
833
+ - {(vcpus_memory?.vcpus / 100000).toFixed(2)} vCPUs{/if}
834
+ {#if vcpus_memory?.memory}
835
+ - {((vcpus_memory?.memory * 1.0) / 1024 / 1024 / 1024).toFixed(2)} GB{/if}</div
836
+ >
837
+ <div class="flex gap-2 items-center justify-end flex-row my-2">
838
+ {#if $superadmin}
839
+ <Button
840
+ color="light"
841
+ size="xs"
842
+ on:click={() => {
843
+ dirty = false
844
+ loadNConfig()
845
+ drawer.openDrawer()
846
+ }}
847
+ startIcon={{ icon: config == undefined ? Plus : Settings }}
848
+ >
849
+ <div class="flex flex-row gap-1 items-center">
850
+ {config == undefined ? 'Create' : 'Edit'} config
851
+ </div>
852
+ </Button>
783
853
 
784
- <Button
785
- color="light"
786
- size="xs"
787
- on:click={() => {
788
- navigator.clipboard.writeText(
789
- YAML.stringify({
790
- name,
791
- ...config
792
- })
793
- )
794
- sendUserToast('Worker config copied to clipboard as YAML')
795
- }}
796
- startIcon={{ icon: Copy }}
797
- >
798
- Copy config
799
- </Button>
854
+ <Button
855
+ color="light"
856
+ size="xs"
857
+ on:click={() => {
858
+ navigator.clipboard.writeText(
859
+ YAML.stringify({
860
+ name,
861
+ ...config
862
+ })
863
+ )
864
+ sendUserToast('Worker config copied to clipboard as YAML')
865
+ }}
866
+ startIcon={{ icon: Copy }}
867
+ >
868
+ Copy config
869
+ </Button>
870
+
871
+ {#if config}
872
+ <Button
873
+ color="light"
874
+ size="xs"
875
+ on:click={() => {
876
+ if (!$enterpriseLicense) {
877
+ sendUserToast('Worker Management UI is an EE feature', true)
878
+ } else {
879
+ openDelete = true
880
+ }
881
+ }}
882
+ startIcon={{ icon: Trash }}
883
+ btnClasses="text-red-400"
884
+ >
885
+ Delete config
886
+ </Button>
887
+ {/if}
800
888
 
801
- {#if config}
802
889
  <Button
803
890
  color="light"
804
891
  size="xs"
805
892
  on:click={() => {
806
- if (!$enterpriseLicense) {
807
- sendUserToast('Worker Management UI is an EE feature', true)
808
- } else {
809
- openDelete = true
810
- }
893
+ loadNConfig()
894
+
895
+ openClean = true
811
896
  }}
812
- startIcon={{ icon: Trash }}
813
897
  btnClasses="text-red-400"
898
+ startIcon={{ icon: RefreshCcwIcon }}
814
899
  >
815
- Delete config
900
+ Clean cache
901
+ </Button>
902
+ {:else if config}
903
+ <Button
904
+ color="light"
905
+ size="xs"
906
+ on:click={() => {
907
+ loadNConfig()
908
+ drawer.openDrawer()
909
+ }}
910
+ >
911
+ <div class="flex flex-row gap-1 items-center"> config </div>
816
912
  </Button>
817
913
  {/if}
818
-
819
- <Button
820
- color="light"
821
- size="xs"
822
- on:click={() => {
823
- loadNConfig()
824
-
825
- openClean = true
826
- }}
827
- btnClasses="text-red-400"
828
- startIcon={{ icon: RefreshCcwIcon }}
829
- >
830
- Clean cache
831
- </Button>
832
- {:else if config}
833
- <Button
834
- color="light"
835
- size="xs"
836
- on:click={() => {
837
- loadNConfig()
838
- drawer.openDrawer()
839
- }}
840
- >
841
- <div class="flex flex-row gap-1 items-center"> config </div>
842
- </Button>
843
- {/if}
914
+ </div>
844
915
  </div>
@@ -1,4 +1,5 @@
1
1
  import { SvelteComponent } from "svelte";
2
+ import { type WorkerPing } from '../gen';
2
3
  declare const __propDef: {
3
4
  props: {
4
5
  name: string;
@@ -10,9 +11,11 @@ declare const __propDef: {
10
11
  init_bash?: string;
11
12
  additional_python_paths?: string[];
12
13
  pip_local_dependencies?: string[];
14
+ min_alive_workers_alert_threshold?: number;
13
15
  };
14
16
  activeWorkers: number;
15
17
  customTags: string[] | undefined;
18
+ workers: [string, WorkerPing[]][];
16
19
  defaultTagPerWorkspace?: boolean | undefined;
17
20
  };
18
21
  events: {
@@ -27,7 +27,7 @@ export let allowColumnDefsActions = true;
27
27
  let inputs = {};
28
28
  const context = getContext('AppViewerContext');
29
29
  const contextPanel = getContext('ContextPanel');
30
- const { app, selectedComponent, componentControl, darkMode } = context;
30
+ const { app, selectedComponent, componentControl, darkMode, mode } = context;
31
31
  let css = initCss($app.css?.aggridcomponent, customCss);
32
32
  let selectedRowIndex = -1;
33
33
  function toggleRow(row) {
@@ -382,7 +382,24 @@ function updateOptions() {
382
382
  class="ag-theme-alpine"
383
383
  class:ag-theme-alpine-dark={$darkMode}
384
384
  >
385
- <div bind:this={eGui} style:height="100%" />
385
+ <!-- svelte-ignore a11y-no-static-element-interactions -->
386
+ <div
387
+ bind:this={eGui}
388
+ style:height="100%"
389
+ on:keydown={(e) => {
390
+ if ((e.ctrlKey || e.metaKey) && e.key === 'c' && $mode !== 'dnd') {
391
+ const selectedCell = api?.getFocusedCell()
392
+ if (selectedCell) {
393
+ const rowIndex = selectedCell.rowIndex
394
+ const colId = selectedCell.column?.getId()
395
+ const rowNode = api?.getDisplayedRowAtIndex(rowIndex)
396
+ const selectedValue = rowNode?.data?.[colId]
397
+ navigator.clipboard.writeText(selectedValue)
398
+ sendUserToast('Copied cell value to clipboard', false)
399
+ }
400
+ }
401
+ }}
402
+ />
386
403
  </div>
387
404
  {#if resolvedConfig && 'footer' in resolvedConfig && resolvedConfig.footer}
388
405
  <div class="flex gap-1 w-full justify-between items-center text-xs text-primary p-2">
@@ -19,6 +19,7 @@ export let initializing = undefined;
19
19
  export let render;
20
20
  export let customCss = undefined;
21
21
  export let actions = undefined;
22
+ export let actionsOrder = undefined;
22
23
  let runnableComponent = undefined;
23
24
  function clear() {
24
25
  setTimeout(() => {
@@ -1,6 +1,6 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  import type { AppInput } from '../../../inputType';
3
- import type { ComponentCustomCSS, RichConfigurations } from '../../../types';
3
+ import type { ComponentCustomCSS, RichConfiguration, RichConfigurations } from '../../../types';
4
4
  import { type TableAction } from '../../../editor/component';
5
5
  import 'ag-grid-community/styles/ag-grid.css';
6
6
  import './theme/windmill-theme.css';
@@ -13,6 +13,7 @@ declare const __propDef: {
13
13
  render: boolean;
14
14
  customCss?: ComponentCustomCSS<'aggridinfinitecomponent'> | undefined;
15
15
  actions?: TableAction[] | undefined;
16
+ actionsOrder?: RichConfiguration | undefined;
16
17
  };
17
18
  events: {
18
19
  [evt: string]: CustomEvent<any>;
@@ -13,6 +13,7 @@ export let initializing = undefined;
13
13
  export let render;
14
14
  export let customCss = undefined;
15
15
  export let actions = [];
16
+ export let actionsOrder = undefined;
16
17
  let loaded = false;
17
18
  async function load() {
18
19
  await import('ag-grid-enterprise');
@@ -32,6 +33,7 @@ load();
32
33
  {render}
33
34
  {customCss}
34
35
  {actions}
36
+ {actionsOrder}
35
37
  />
36
38
  {:else}
37
39
  <Loader2 class="animate-spin" />
@@ -1,6 +1,6 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  import type { AppInput } from '../../../inputType';
3
- import type { ComponentCustomCSS, RichConfigurations } from '../../../types';
3
+ import type { ComponentCustomCSS, RichConfiguration, RichConfigurations } from '../../../types';
4
4
  import 'ag-grid-community/styles/ag-grid.css';
5
5
  import 'ag-grid-community/styles/ag-theme-alpine.css';
6
6
  import type { TableAction } from '../../../editor/component';
@@ -14,6 +14,7 @@ declare const __propDef: {
14
14
  render: boolean;
15
15
  customCss?: ComponentCustomCSS<'aggridinfinitecomponentee'> | undefined;
16
16
  actions?: TableAction[] | undefined;
17
+ actionsOrder?: RichConfiguration | undefined;
17
18
  };
18
19
  events: {
19
20
  [evt: string]: CustomEvent<any>;