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
@@ -28,7 +28,7 @@
28
28
 
29
29
  @font-face {
30
30
  font-family: 'Inter';
31
- src: url('/Inter-Variable.ttf');
31
+ src: url('/Inter-Variable.woff2') format('woff2');
32
32
  font-weight: 100 900;
33
33
  font-display: swap;
34
34
  }
@@ -120,3 +120,27 @@ svelte-virtual-list-contents > * + * {
120
120
  @apply bg-surface;
121
121
  @apply disabled:placeholder:text-gray-200 disabled:placeholder:dark:text-gray-500 disabled:text-gray-200 disabled:dark:text-gray-500 disabled:border-gray-200 disabled:dark:border-gray-600;
122
122
  }
123
+
124
+ .nonmain-editor .cursor.monaco-mouse-cursor-text {
125
+ width: 1px !important;
126
+ }
127
+
128
+ .bg-locked {
129
+ background-image: repeating-linear-gradient(
130
+ -45deg,
131
+ rgba(128, 128, 128, 0.2),
132
+ rgba(128, 128, 128, 0.2) 10px,
133
+ rgba(192, 192, 192, 0.2) 10px,
134
+ rgba(192, 192, 192, 0.2) 20px
135
+ );
136
+ }
137
+
138
+ .bg-locked-hover {
139
+ background-image: repeating-linear-gradient(
140
+ -45deg,
141
+ rgba(255, 99, 71, 0.2),
142
+ rgba(255, 99, 71, 0.2) 10px,
143
+ rgba(255, 69, 58, 0.2),
144
+ rgba(255, 69, 58, 0.2) 20px
145
+ );
146
+ }
@@ -366,7 +366,8 @@ $: shouldDispatchChanges && debounced(value);
366
366
  />
367
367
  {:else if itemsType?.type == 'resource' && itemsType?.resourceType && resourceTypes?.includes(itemsType.resourceType)}
368
368
  <ObjectResourceInput
369
- bind:value={v}
369
+ value={v ? `$res:${v}` : undefined}
370
+ bind:path={v}
370
371
  format={'resource-' + itemsType?.resourceType}
371
372
  defaultValue={undefined}
372
373
  />
@@ -1,52 +1,9 @@
1
- <script>import { SettingService, UserService } from '../gen';
2
- import { Button, Popup } from './common';
3
- import { sendUserToast } from '../toast';
4
- import Alert from './common/alert/Alert.svelte';
1
+ <script>import { Button, Popup } from './common';
5
2
  import { autoPlacement } from '@floating-ui/core';
6
- import { createEventDispatcher } from 'svelte';
3
+ import ChangeInstanceUsernameInner from './ChangeInstanceUsernameInner.svelte';
7
4
  export let email;
8
5
  export let username;
9
6
  export let isConflict = false;
10
- let loading = false;
11
- let usernameInfo = undefined;
12
- function handleKeyUp(event) {
13
- const key = event.key;
14
- if (key === 'Enter') {
15
- event.preventDefault();
16
- renameUser();
17
- }
18
- }
19
- async function getUsernameInfo() {
20
- usernameInfo = await UserService.globalUsernameInfo({
21
- email
22
- });
23
- if (isConflict) {
24
- username = usernameInfo.username;
25
- }
26
- }
27
- getUsernameInfo();
28
- const dispatch = createEventDispatcher();
29
- async function renameUser() {
30
- loading = true;
31
- try {
32
- const automateUsernameCreation = (await SettingService.getGlobal({ key: 'automate_username_creation' })) ?? false;
33
- if (!automateUsernameCreation) {
34
- sendUserToast('Modifying the username is only possible when the creation of usernames is automated and defined at instance level..');
35
- return;
36
- }
37
- await UserService.globalUserRename({
38
- email,
39
- requestBody: {
40
- new_username: username
41
- }
42
- });
43
- sendUserToast(`Renamed user ${email} to ${username}`);
44
- dispatch('renamed');
45
- }
46
- finally {
47
- loading = false;
48
- }
49
- }
50
7
  </script>
51
8
 
52
9
  <Popup
@@ -65,67 +22,11 @@ async function renameUser() {
65
22
  >{isConflict ? 'Fix username conflict' : 'Change username'}</Button
66
23
  >
67
24
  </svelte:fragment>
68
- <div class="flex flex-col max-w-2xl p-2">
69
- <span class="text-sm mb-2 leading-6 font-semibold"
70
- >{isConflict ? 'Fix username conflict' : 'Change username'}</span
71
- >
72
-
73
- <span class="text-xs mb-1 leading-6"
74
- >{isConflict ? 'Auto-generated instance username' : 'New username'}</span
75
- >
76
- <input
77
- type="text"
78
- class="mb-4"
79
- on:keyup={handleKeyUp}
80
- bind:value={username}
81
- disabled={isConflict}
82
- />
83
-
84
- {#if isConflict}
85
- <Alert title="Username conflict" class="mb-4">
86
- Users are required to have an instance-wide username that is shared across all workspaces.
87
- However, this user has different usernames in different workspaces.
88
-
89
- {#if usernameInfo?.workspace_usernames && usernameInfo.workspace_usernames.filter((w) => w.username !== username).length > 0}
90
- <br />
91
- <br />
92
- Workspaces requiring username modification: {usernameInfo.workspace_usernames
93
- .filter((w) => w.username !== username)
94
- .map((wu) => `${wu.workspace_id} (${wu.username})`)
95
- .join(', ')}
96
- {/if}
97
- </Alert>
98
- {/if}
99
-
100
- {#if !isConflict && usernameInfo?.workspace_usernames && usernameInfo.workspace_usernames.filter((w) => w.username !== username).length > 0}
101
- <Alert title="Concerned workspaces" class="mb-4">
102
- {usernameInfo.workspace_usernames
103
- .filter((w) => w.username !== username)
104
- .map((wu) => `${wu.workspace_id}`)
105
- .join(', ')}
106
- </Alert>
107
- {/if}
108
-
109
- <Alert type="warning" title="Manual action required" class="mb-4">
110
- This operation does not handle references in scripts, workflows and applications to scripts in
111
- the workspace, and references in resources to variables. You will have to handle those
112
- manually.
113
- <br />
114
- </Alert>
115
-
116
- <Button
117
- variant="contained"
118
- color="blue"
119
- size="xs"
120
- on:click={() => {
121
- renameUser().then(() => {
122
- close(null)
123
- })
124
- }}
125
- disabled={email === undefined || !username}
126
- {loading}
127
- >
128
- Confirm username change
129
- </Button>
130
- </div>
25
+ <ChangeInstanceUsernameInner
26
+ {email}
27
+ {username}
28
+ {isConflict}
29
+ on:close={() => close(null)}
30
+ on:renamed
31
+ />
131
32
  </Popup>
@@ -0,0 +1,112 @@
1
+ <script>import { SettingService, UserService } from '../gen';
2
+ import { Button } from './common';
3
+ import { sendUserToast } from '../toast';
4
+ import Alert from './common/alert/Alert.svelte';
5
+ import { createEventDispatcher } from 'svelte';
6
+ export let email;
7
+ export let username;
8
+ export let isConflict = false;
9
+ let loading = false;
10
+ let usernameInfo = undefined;
11
+ function handleKeyUp(event) {
12
+ const key = event.key;
13
+ if (key === 'Enter') {
14
+ event.preventDefault();
15
+ renameUser();
16
+ }
17
+ }
18
+ async function getUsernameInfo() {
19
+ usernameInfo = await UserService.globalUsernameInfo({
20
+ email
21
+ });
22
+ if (isConflict) {
23
+ username = usernameInfo.username;
24
+ }
25
+ }
26
+ getUsernameInfo();
27
+ const dispatch = createEventDispatcher();
28
+ async function renameUser() {
29
+ loading = true;
30
+ try {
31
+ const automateUsernameCreation = (await SettingService.getGlobal({ key: 'automate_username_creation' })) ?? false;
32
+ if (!automateUsernameCreation) {
33
+ sendUserToast('Modifying the username is only possible when the creation of usernames is automated and defined at instance level..');
34
+ return;
35
+ }
36
+ await UserService.globalUserRename({
37
+ email,
38
+ requestBody: {
39
+ new_username: username
40
+ }
41
+ });
42
+ sendUserToast(`Renamed user ${email} to ${username}`);
43
+ dispatch('renamed');
44
+ }
45
+ finally {
46
+ loading = false;
47
+ }
48
+ }
49
+ </script>
50
+
51
+ <div class="flex flex-col max-w-2xl p-2">
52
+ <span class="text-sm mb-2 leading-6 font-semibold"
53
+ >{isConflict ? 'Fix username conflict' : 'Change username'}</span
54
+ >
55
+
56
+ <span class="text-xs mb-1 leading-6"
57
+ >{isConflict ? 'Auto-generated instance username' : 'New username'}</span
58
+ >
59
+ <input
60
+ type="text"
61
+ class="mb-4"
62
+ on:keyup={handleKeyUp}
63
+ bind:value={username}
64
+ disabled={isConflict}
65
+ />
66
+
67
+ {#if isConflict}
68
+ <Alert title="Username conflict" class="mb-4">
69
+ Users are required to have an instance-wide username that is shared across all workspaces.
70
+ However, this user has different usernames in different workspaces.
71
+
72
+ {#if usernameInfo?.workspace_usernames && usernameInfo.workspace_usernames.filter((w) => w.username !== username).length > 0}
73
+ <br />
74
+ <br />
75
+ Workspaces requiring username modification: {usernameInfo.workspace_usernames
76
+ .filter((w) => w.username !== username)
77
+ .map((wu) => `${wu.workspace_id} (${wu.username})`)
78
+ .join(', ')}
79
+ {/if}
80
+ </Alert>
81
+ {/if}
82
+
83
+ {#if !isConflict && usernameInfo?.workspace_usernames && usernameInfo.workspace_usernames.filter((w) => w.username !== username).length > 0}
84
+ <Alert title="Concerned workspaces" class="mb-4">
85
+ {usernameInfo.workspace_usernames
86
+ .filter((w) => w.username !== username)
87
+ .map((wu) => `${wu.workspace_id}`)
88
+ .join(', ')}
89
+ </Alert>
90
+ {/if}
91
+
92
+ <Alert type="warning" title="Manual action required" class="mb-4">
93
+ This operation does not handle references in scripts, workflows and applications to scripts in
94
+ the workspace, and references in resources to variables. You will have to handle those manually.
95
+ <br />
96
+ </Alert>
97
+
98
+ <Button
99
+ variant="contained"
100
+ color="blue"
101
+ size="xs"
102
+ on:click={() => {
103
+ renameUser().then(() => {
104
+ dispatch('close')
105
+ })
106
+ }}
107
+ disabled={email === undefined || !username}
108
+ {loading}
109
+ >
110
+ Confirm username change
111
+ </Button>
112
+ </div>
@@ -0,0 +1,21 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ email: string;
5
+ username: string;
6
+ isConflict?: boolean | undefined;
7
+ };
8
+ events: {
9
+ close: CustomEvent<any>;
10
+ renamed: CustomEvent<any>;
11
+ } & {
12
+ [evt: string]: CustomEvent<any>;
13
+ };
14
+ slots: {};
15
+ };
16
+ export type ChangeInstanceUsernameInnerProps = typeof __propDef.props;
17
+ export type ChangeInstanceUsernameInnerEvents = typeof __propDef.events;
18
+ export type ChangeInstanceUsernameInnerSlots = typeof __propDef.slots;
19
+ export default class ChangeInstanceUsernameInner extends SvelteComponent<ChangeInstanceUsernameInnerProps, ChangeInstanceUsernameInnerEvents, ChangeInstanceUsernameInnerSlots> {
20
+ }
21
+ export {};
@@ -1,6 +1,5 @@
1
1
  <script>import { Alert, Button, Drawer, DrawerContent } from './common';
2
2
  import { Loader2 } from 'lucide-svelte';
3
- import DiffEditor from './DiffEditor.svelte';
4
3
  import { scriptLangToEditorLang } from '../scripts';
5
4
  import Tabs from './common/tabs/Tabs.svelte';
6
5
  import Tab from './common/tabs/Tab.svelte';
@@ -157,26 +156,34 @@ $: updateContentType(data, diffType);
157
156
  <div class="flex-1">
158
157
  {#key diffType}
159
158
  {#if contentType === 'content'}
160
- <DiffEditor
161
- open={true}
162
- automaticLayout
163
- class="h-full"
164
- defaultLang={lang}
165
- defaultModifiedLang={data.current.lang}
166
- defaultOriginal={content}
167
- defaultModified={data.current.content}
168
- readOnly
169
- />
159
+ {#await import('./DiffEditor.svelte')}
160
+ <Loader2 class="animate-spin" />
161
+ {:then Module}
162
+ <Module.default
163
+ open={true}
164
+ automaticLayout
165
+ class="h-full"
166
+ defaultLang={lang}
167
+ defaultModifiedLang={data.current.lang}
168
+ defaultOriginal={content}
169
+ defaultModified={data.current.content}
170
+ readOnly
171
+ />
172
+ {/await}
170
173
  {:else if contentType === 'metadata'}
171
- <DiffEditor
172
- open={true}
173
- automaticLayout
174
- class="h-full"
175
- defaultLang="yaml"
176
- defaultOriginal={metadata}
177
- defaultModified={data.current.metadata}
178
- readOnly
179
- />
174
+ {#await import('./DiffEditor.svelte')}
175
+ <Loader2 class="animate-spin" />
176
+ {:then Module}
177
+ <Module.default
178
+ open={true}
179
+ automaticLayout
180
+ class="h-full"
181
+ defaultLang="yaml"
182
+ defaultOriginal={metadata}
183
+ defaultModified={data.current.metadata}
184
+ readOnly
185
+ />
186
+ {/await}
180
187
  {/if}
181
188
  {/key}
182
189
  </div>
@@ -99,5 +99,9 @@ onMount(() => {
99
99
 
100
100
  {#if open}
101
101
  <EditorTheme />
102
- <div bind:this={diffDivEl} class="{$$props.class} editor" bind:clientWidth={editorWidth} />
102
+ <div
103
+ bind:this={diffDivEl}
104
+ class="{$$props.class} editor nonmain-editor"
105
+ bind:clientWidth={editorWidth}
106
+ />
103
107
  {/if}
@@ -555,15 +555,26 @@ let seeS3PreviewFileFromList = '';
555
555
  </button>
556
556
  {/if}
557
557
  </div>
558
- {#if typeof result?.s3 == 'string' && (result?.s3?.endsWith('.parquet') || result?.s3?.endsWith('.csv'))}
559
- {#key result.s3}
560
- <ParqetTableRenderer
561
- disable_download={result?.disable_download}
562
- {workspaceId}
563
- s3resource={result?.s3}
564
- storage={result?.storage}
565
- />
566
- {/key}
558
+ {#if typeof result?.s3 === 'string'}
559
+ {#if result?.s3?.endsWith('.parquet') || result?.s3?.endsWith('.csv')}
560
+ {#key result.s3}
561
+ <ParqetTableRenderer
562
+ disable_download={result?.disable_download}
563
+ {workspaceId}
564
+ s3resource={result?.s3}
565
+ storage={result?.storage}
566
+ />
567
+ {/key}
568
+ {:else if result?.s3?.endsWith('.png') || result?.s3?.endsWith('.jpeg') || result?.s3?.endsWith('.jpg') || result?.s3?.endsWith('.webp')}
569
+ <div class="h-full mt-2">
570
+ <img
571
+ alt="preview rendered"
572
+ class="w-auto h-full"
573
+ src={`/api/w/${workspaceId}/job_helpers/load_image_preview?file_key=${result.s3}` +
574
+ (result.storage ? `&storage=${result.storage}` : '')}
575
+ />
576
+ </div>
577
+ {/if}
567
578
  {/if}
568
579
  </div>
569
580
  {:else if !forceJson && resultKind == 's3object-list'}
@@ -612,6 +623,25 @@ let seeS3PreviewFileFromList = '';
612
623
  >open table preview <ArrowDownFromLine />
613
624
  </button>
614
625
  {/if}
626
+ {:else if s3object?.s3?.endsWith('.png') || s3object?.s3?.endsWith('.jpeg') || s3object?.s3?.endsWith('.jpg') || s3object?.s3?.endsWith('.webp')}
627
+ {#if seeS3PreviewFileFromList == s3object?.s3}
628
+ <div class="h-full mt-2">
629
+ <img
630
+ alt="preview rendered"
631
+ class="w-auto h-full"
632
+ src={`/api/w/${workspaceId}/job_helpers/load_image_preview?file_key=${s3object.s3}` +
633
+ (s3object.storage ? `&storage=${s3object.storage}` : '')}
634
+ />
635
+ </div>
636
+ {:else}
637
+ <button
638
+ class="text-secondary whitespace-nowrap flex gap-2 items-center"
639
+ on:click={() => {
640
+ seeS3PreviewFileFromList = s3object?.s3
641
+ }}
642
+ >open image preview <ArrowDownFromLine />
643
+ </button>
644
+ {/if}
615
645
  {/if}
616
646
  {/each}
617
647
  </div>
@@ -1,12 +1,11 @@
1
1
  <script>import { MoreVertical } from 'lucide-svelte';
2
2
  import Menu from './common/menu/MenuV2.svelte';
3
- import { MenuItem } from '@rgossiaux/svelte-headlessui';
4
- import { twMerge } from 'tailwind-merge';
3
+ import DropdownV2Inner from './DropdownV2Inner.svelte';
5
4
  export let items = [];
6
5
  export let justifyEnd = true;
7
- function computeItems() {
6
+ async function computeItems() {
8
7
  if (typeof items === 'function') {
9
- return (items() ?? []).filter((item) => !item.hide);
8
+ return ((await items()) ?? []).filter((item) => !item.hide);
10
9
  }
11
10
  else {
12
11
  return items.filter((item) => !item.hide);
@@ -26,26 +25,5 @@ function computeItems() {
26
25
  {/if}
27
26
  </div>
28
27
 
29
- <div class="flex flex-col">
30
- {#each computeItems() ?? [] as item}
31
- <MenuItem
32
- on:click={(e) => item?.action?.(e)}
33
- href={item?.href}
34
- disabled={item?.disabled}
35
- class={twMerge(
36
- 'px-4 py-2 text-primary hover:bg-surface-hover hover:text-primary cursor-pointer text-xs transition-all',
37
- 'flex flex-row gap-2 items-center',
38
- item?.disabled && 'text-gray-400 cursor-not-allowed',
39
- item?.type === 'delete' &&
40
- !item?.disabled &&
41
- 'text-red-500 hover:bg-red-100 hover:text-red-500'
42
- )}
43
- >
44
- {#if item.icon}
45
- <svelte:component this={item.icon} size={14} />
46
- {/if}
47
- {item.displayName}
48
- </MenuItem>
49
- {/each}
50
- </div>
28
+ <DropdownV2Inner items={computeItems} />
51
29
  </Menu>
@@ -17,7 +17,15 @@ declare const __propDef: {
17
17
  disabled?: boolean | undefined;
18
18
  type?: "action" | "delete" | undefined;
19
19
  hide?: boolean | undefined;
20
- }[]) | undefined;
20
+ }[]) | (() => Promise<{
21
+ displayName: string;
22
+ action?: ((e: CustomEvent<any>) => void) | undefined;
23
+ icon?: any;
24
+ href?: string | undefined;
25
+ disabled?: boolean | undefined;
26
+ type?: "action" | "delete" | undefined;
27
+ hide?: boolean | undefined;
28
+ }[]>) | undefined;
21
29
  justifyEnd?: boolean | undefined;
22
30
  };
23
31
  events: {
@@ -0,0 +1,42 @@
1
+ <script>import { MenuItem } from '@rgossiaux/svelte-headlessui';
2
+ import { Loader2 } from 'lucide-svelte';
3
+ import { twMerge } from 'tailwind-merge';
4
+ export let items = [];
5
+ let computedItems = undefined;
6
+ async function computeItems() {
7
+ if (typeof items === 'function') {
8
+ computedItems = ((await items()) ?? []).filter((item) => !item.hide);
9
+ }
10
+ else {
11
+ computedItems = items.filter((item) => !item.hide);
12
+ }
13
+ }
14
+ computeItems();
15
+ </script>
16
+
17
+ {#if computedItems}
18
+ <div class="flex flex-col">
19
+ {#each computedItems ?? [] as item}
20
+ <MenuItem
21
+ on:click={(e) => item?.action?.(e)}
22
+ href={item?.href}
23
+ disabled={item?.disabled}
24
+ class={twMerge(
25
+ 'px-4 py-2 text-primary hover:bg-surface-hover hover:text-primary cursor-pointer text-xs transition-all',
26
+ 'flex flex-row gap-2 items-center',
27
+ item?.disabled && 'text-gray-400 cursor-not-allowed',
28
+ item?.type === 'delete' &&
29
+ !item?.disabled &&
30
+ 'text-red-500 hover:bg-red-100 hover:text-red-500'
31
+ )}
32
+ >
33
+ {#if item.icon}
34
+ <svelte:component this={item.icon} size={14} />
35
+ {/if}
36
+ {item.displayName}
37
+ </MenuItem>
38
+ {/each}
39
+ </div>
40
+ {:else}
41
+ <Loader2 class="animate-spin mx-auto p-4" size={24} />
42
+ {/if}
@@ -0,0 +1,40 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ items?: {
5
+ displayName: string;
6
+ action?: ((e: CustomEvent<any>) => void) | undefined;
7
+ icon?: any;
8
+ href?: string | undefined;
9
+ disabled?: boolean | undefined;
10
+ type?: "action" | "delete" | undefined;
11
+ hide?: boolean | undefined;
12
+ }[] | (() => {
13
+ displayName: string;
14
+ action?: ((e: CustomEvent<any>) => void) | undefined;
15
+ icon?: any;
16
+ href?: string | undefined;
17
+ disabled?: boolean | undefined;
18
+ type?: "action" | "delete" | undefined;
19
+ hide?: boolean | undefined;
20
+ }[]) | (() => Promise<{
21
+ displayName: string;
22
+ action?: ((e: CustomEvent<any>) => void) | undefined;
23
+ icon?: any;
24
+ href?: string | undefined;
25
+ disabled?: boolean | undefined;
26
+ type?: "action" | "delete" | undefined;
27
+ hide?: boolean | undefined;
28
+ }[]>) | undefined;
29
+ };
30
+ events: {
31
+ [evt: string]: CustomEvent<any>;
32
+ };
33
+ slots: {};
34
+ };
35
+ export type DropdownV2InnerProps = typeof __propDef.props;
36
+ export type DropdownV2InnerEvents = typeof __propDef.events;
37
+ export type DropdownV2InnerSlots = typeof __propDef.slots;
38
+ export default class DropdownV2Inner extends SvelteComponent<DropdownV2InnerProps, DropdownV2InnerEvents, DropdownV2InnerSlots> {
39
+ }
40
+ export {};
@@ -3,7 +3,6 @@
3
3
  <script context="module">
4
4
  import '@codingame/monaco-vscode-standalone-languages'
5
5
  import '@codingame/monaco-vscode-standalone-typescript-language-features'
6
-
7
6
  import processStdContent from '../process.d.ts.txt?raw'
8
7
  import windmillFetchContent from '../windmill_fetch.d.ts.txt?raw'
9
8
 
@@ -115,7 +114,7 @@ import { MonacoLanguageClient } from 'monaco-languageclient';
115
114
  import { toSocket, WebSocketMessageReader, WebSocketMessageWriter } from 'vscode-ws-jsonrpc';
116
115
  import { CloseAction, ErrorAction, RequestType } from 'vscode-languageclient';
117
116
  import { MonacoBinding } from 'y-monaco';
118
- import { dbSchemas, copilotInfo, codeCompletionSessionEnabled, lspTokenStore, formatOnSave } from '../stores';
117
+ import { dbSchemas, copilotInfo, codeCompletionSessionEnabled, lspTokenStore, formatOnSave, vimMode } from '../stores';
119
118
  import { createHash as randomHash, editorConfig, langToExt, updateOptions } from '../editorUtils';
120
119
  import { buildWorkerDefinition } from './build_workers';
121
120
  import { workspaceStore } from '../stores';
@@ -128,7 +127,8 @@ import { editor as meditor, languages, KeyCode, KeyMod, Uri as mUri } from 'mona
128
127
  import EditorTheme from './EditorTheme.svelte';
129
128
  import { BIGQUERY_TYPES, MSSQL_TYPES, MYSQL_TYPES, POSTGRES_TYPES, SNOWFLAKE_TYPES } from '../consts';
130
129
  import { setupTypeAcquisition } from '../ata/index';
131
- import { initWasm, parseDeps } from '../infer';
130
+ import { initWasmTs, parseDeps } from '../infer';
131
+ import { initVim } from './monaco_keybindings';
132
132
  // import EditorTheme from './EditorTheme.svelte'
133
133
  let divEl = null;
134
134
  let editor = null;
@@ -856,6 +856,21 @@ $: if (yContent && awareness && model && editor) {
856
856
  }
857
857
  let initialized = false;
858
858
  let ata = undefined;
859
+ let statusDiv = null;
860
+ function saveDraft() {
861
+ dispatch('saveDraft', code);
862
+ }
863
+ let vimDisposable = undefined;
864
+ $: editor && $vimMode && statusDiv && onVimMode();
865
+ $: !$vimMode && vimDisposable && onVimDisable();
866
+ function onVimDisable() {
867
+ vimDisposable?.dispose();
868
+ }
869
+ function onVimMode() {
870
+ if (editor && statusDiv) {
871
+ vimDisposable = initVim(editor, statusDiv, saveDraft);
872
+ }
873
+ }
859
874
  async function loadMonaco() {
860
875
  try {
861
876
  console.log("Loading Monaco's language client");
@@ -888,6 +903,7 @@ async function loadMonaco() {
888
903
  tabSize: lang == 'python' ? 4 : 2,
889
904
  folding
890
905
  });
906
+ // updateEditorKeybindingsMode(editor, 'vim', undefined)
891
907
  let timeoutModel = undefined;
892
908
  let ataModel = undefined;
893
909
  editor?.onDidChangeModelContent((event) => {
@@ -939,6 +955,7 @@ async function loadMonaco() {
939
955
  ata = undefined;
940
956
  try {
941
957
  closeWebsockets();
958
+ vimDisposable?.dispose();
942
959
  model?.dispose();
943
960
  editor && editor.dispose();
944
961
  console.log('disposed editor');
@@ -1009,7 +1026,7 @@ async function setTypescriptExtraLibs() {
1009
1026
  }
1010
1027
  }
1011
1028
  };
1012
- await initWasm();
1029
+ await initWasmTs();
1013
1030
  const root = await genRoot(hostname);
1014
1031
  console.log('SETUP TYPE ACQUISITION', { root, path });
1015
1032
  ata = setupTypeAcquisition({
@@ -1082,6 +1099,9 @@ async function genRoot(hostname) {
1082
1099
 
1083
1100
  <EditorTheme />
1084
1101
  <div bind:this={divEl} class="{$$props.class} editor {disabled ? 'disabled' : ''}" />
1102
+ {#if $vimMode}
1103
+ <div class="fixed bottom-0 z-30" bind:this={statusDiv} />
1104
+ {/if}
1085
1105
 
1086
1106
  <style global>
1087
1107
  :global(.editor) {