windmill-components 1.291.4 → 1.305.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 (224) hide show
  1. package/package/autosize.d.ts +4 -0
  2. package/package/autosize.js +76 -0
  3. package/package/components/AppConnect.svelte +26 -7
  4. package/package/components/ArgInput.svelte +129 -103
  5. package/package/components/ContentSearch.svelte +8 -2
  6. package/package/components/ContextualVariableEditor.svelte +69 -0
  7. package/package/components/ContextualVariableEditor.svelte.d.ts +21 -0
  8. package/package/components/CronInput.svelte +3 -0
  9. package/package/components/DBSchemaExplorer.svelte +2 -2
  10. package/package/components/DarkModeObserver.svelte +2 -2
  11. package/package/components/DateTimeInput.svelte +9 -3
  12. package/package/components/DefaultScripts.svelte +1 -0
  13. package/package/components/DisplayResult.svelte +83 -41
  14. package/package/components/DisplayResult.svelte.d.ts +1 -0
  15. package/package/components/DurationMs.svelte +1 -10
  16. package/package/components/DurationMs.svelte.d.ts +0 -1
  17. package/package/components/Editor.svelte +40 -10
  18. package/package/components/ErrorOrRecoveryHandler.svelte +5 -2
  19. package/package/components/FlowBuilder.svelte +9 -5
  20. package/package/components/FlowBuilder.svelte.d.ts +1 -0
  21. package/package/components/FlowGraphViewerStep.svelte +5 -4
  22. package/package/components/FlowJobResult.svelte +36 -1
  23. package/package/components/FlowJobResult.svelte.d.ts +2 -1
  24. package/package/components/FlowLoopIterationPreview.svelte +18 -2
  25. package/package/components/FlowLoopIterationPreview.svelte.d.ts +6 -0
  26. package/package/components/FlowStatusViewer.svelte +1 -1
  27. package/package/components/FlowStatusViewerInner.svelte +117 -44
  28. package/package/components/FlowStatusViewerInner.svelte.d.ts +1 -0
  29. package/package/components/FlowStatusWaitingForEvents.svelte +97 -54
  30. package/package/components/GfmMarkdown.svelte +14 -0
  31. package/package/components/GfmMarkdown.svelte.d.ts +16 -0
  32. package/package/components/GroupEditor.svelte +1 -2
  33. package/package/components/HighlightCode.svelte +1 -1
  34. package/package/components/InputTransformForm.svelte +24 -2
  35. package/package/components/InstanceGroupEditor.svelte +1 -2
  36. package/package/components/InstanceSettings.svelte +4 -0
  37. package/package/components/JobArgs.svelte +5 -4
  38. package/package/components/JobArgs.svelte.d.ts +1 -0
  39. package/package/components/JobStatus.svelte +2 -8
  40. package/package/components/LightweightArgInput.svelte +3 -6
  41. package/package/components/LightweightArgInput.svelte.d.ts +0 -1
  42. package/package/components/LogId.svelte +3 -0
  43. package/package/components/LogId.svelte.d.ts +16 -0
  44. package/package/components/LogViewer.svelte +14 -5
  45. package/package/components/MapResult.svelte +151 -0
  46. package/package/components/MapResult.svelte.d.ts +27 -0
  47. package/package/components/MoveDrawer.svelte +2 -1
  48. package/package/components/ObjectStoreConfigSettings.svelte +169 -0
  49. package/package/components/ObjectStoreConfigSettings.svelte.d.ts +32 -0
  50. package/package/components/ParqetTableRenderer.svelte +3 -2
  51. package/package/components/ResourceEditor.svelte +33 -11
  52. package/package/components/RunChart.svelte +0 -1
  53. package/package/components/RunForm.svelte.d.ts +1 -1
  54. package/package/components/RunFormAdvancedPopup.svelte.d.ts +1 -1
  55. package/package/components/SavedInputs.svelte +1 -1
  56. package/package/components/ScriptBuilder.svelte +38 -8
  57. package/package/components/SimpleEditor.svelte +1 -3
  58. package/package/components/SimpleEditor.svelte.d.ts +0 -3
  59. package/package/components/SupabaseConnect.svelte +2 -2
  60. package/package/components/TableSimple.svelte +12 -1
  61. package/package/components/TableSimple.svelte.d.ts +1 -0
  62. package/package/components/TestConnection.svelte +29 -4
  63. package/package/components/TestConnection.svelte.d.ts +2 -0
  64. package/package/components/TestJobLoader.svelte +19 -2
  65. package/package/components/TestJobLoader.svelte.d.ts +3 -0
  66. package/package/components/UserSettings.svelte +5 -2
  67. package/package/components/UserSettings.svelte.d.ts +4 -0
  68. package/package/components/VariableEditor.svelte +2 -3
  69. package/package/components/WorkspaceGroup.svelte +10 -1
  70. package/package/components/apps/components/display/AppCustomComponent.svelte +3 -0
  71. package/package/components/apps/components/display/AppText.svelte +14 -19
  72. package/package/components/apps/components/display/PlotlyHtml.svelte +5 -1
  73. package/package/components/apps/components/display/PlotlyHtmlV2.svelte +4 -1
  74. package/package/components/apps/components/display/VegaLiteHtml.svelte +3 -3
  75. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +18 -2
  76. package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte +8 -5
  77. package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte.d.ts +2 -0
  78. package/package/components/apps/components/display/dbtable/InsertRow.svelte +32 -18
  79. package/package/components/apps/components/display/dbtable/queries/count.js +2 -2
  80. package/package/components/apps/components/display/dbtable/queries/select.js +8 -6
  81. package/package/components/apps/components/display/dbtable/utils.d.ts +10 -5
  82. package/package/components/apps/components/display/dbtable/utils.js +83 -29
  83. package/package/components/apps/components/display/table/AppAggridTable.svelte +1 -1
  84. package/package/components/apps/components/display/table/AppTable.svelte +5 -1
  85. package/package/components/apps/components/helpers/RunnableComponent.svelte +3 -0
  86. package/package/components/apps/components/helpers/eval.d.ts +1 -0
  87. package/package/components/apps/components/inputs/AppFileInput.svelte +8 -1
  88. package/package/components/apps/editor/AppEditorHeader.svelte +1 -1
  89. package/package/components/apps/editor/GridEditorMenu.svelte +11 -1
  90. package/package/components/apps/editor/RunnableJobPanel.svelte +5 -30
  91. package/package/components/apps/editor/appUtils.js +2 -1
  92. package/package/components/apps/editor/component/components.d.ts +78 -78
  93. package/package/components/apps/editor/component/components.js +12 -12
  94. package/package/components/apps/editor/component/default-codes.js +5 -1
  95. package/package/components/apps/editor/componentsPanel/CssEval.svelte +0 -1
  96. package/package/components/apps/editor/componentsPanel/CssProperty.svelte +113 -109
  97. package/package/components/apps/editor/componentsPanel/QuickStyleMenu.svelte +14 -7
  98. package/package/components/apps/editor/componentsPanel/componentControlUtils.js +2 -0
  99. package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +2 -1
  100. package/package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +3 -1
  101. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +6 -0
  102. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +4 -0
  103. package/package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +1 -1
  104. package/package/components/apps/editor/settingsPanel/GridPane.svelte +11 -15
  105. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -1
  106. package/package/components/apps/editor/settingsPanel/StylePanel.svelte +40 -39
  107. package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +2 -0
  108. package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte.d.ts +1 -0
  109. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +0 -1
  110. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +13 -6
  111. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +1 -0
  112. package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +6 -2
  113. package/package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +1 -6
  114. package/package/components/apps/svelte-select/lib/Select.svelte.d.ts +2 -2
  115. package/package/components/apps/types.d.ts +1 -0
  116. package/package/components/apps/utils.js +3 -3
  117. package/package/components/build_workers.js +2 -1
  118. package/package/components/common/FileProgressBar.svelte +1 -1
  119. package/package/components/common/clearableInput/ClearableInput.svelte.d.ts +1 -1
  120. package/package/components/common/fileInput/FileInput.svelte +4 -0
  121. package/package/components/common/fileInput/FileInput.svelte.d.ts +2 -0
  122. package/package/components/common/modal/Modal.svelte +2 -0
  123. package/package/components/copilot/MetadataGen.svelte +17 -12
  124. package/package/components/copilot/MetadataGen.svelte.d.ts +1 -1
  125. package/package/components/copilot/ScriptGen.svelte +61 -27
  126. package/package/components/copilot/lib.d.ts +4 -1
  127. package/package/components/copilot/lib.js +46 -31
  128. package/package/components/copilot/prompts/edit.yaml +1 -0
  129. package/package/components/copilot/prompts/editPrompt.js +1 -1
  130. package/package/components/copilot/prompts/fix.yaml +1 -0
  131. package/package/components/copilot/prompts/fixPrompt.js +1 -1
  132. package/package/components/copilot/prompts/gen.yaml +1 -0
  133. package/package/components/copilot/prompts/genPrompt.js +1 -1
  134. package/package/components/details/WebhooksPanel.svelte +10 -3
  135. package/package/components/flows/content/FlowInputs.svelte +35 -36
  136. package/package/components/flows/content/FlowLoop.svelte +0 -1
  137. package/package/components/flows/content/FlowModuleComponent.svelte +18 -1
  138. package/package/components/flows/content/FlowModuleSuspend.svelte +7 -0
  139. package/package/components/flows/content/FlowModuleWrapper.svelte +4 -1
  140. package/package/components/flows/content/FlowSettings.svelte +32 -4
  141. package/package/components/flows/content/FlowWhileLoop.svelte +137 -0
  142. package/package/components/flows/content/FlowWhileLoop.svelte.d.ts +19 -0
  143. package/package/components/flows/content/SuspendDrawer.svelte +4 -4
  144. package/package/components/flows/dfs.js +1 -1
  145. package/package/components/flows/flowExplorer.js +1 -1
  146. package/package/components/flows/flowStateUtils.d.ts +1 -0
  147. package/package/components/flows/flowStateUtils.js +12 -0
  148. package/package/components/flows/map/FlowModuleSchemaMap.svelte +6 -2
  149. package/package/components/flows/map/InsertModuleButton.svelte +12 -0
  150. package/package/components/flows/map/MapItem.svelte +5 -5
  151. package/package/components/flows/map/MapItem.svelte.d.ts +1 -1
  152. package/package/components/flows/types.d.ts +1 -0
  153. package/package/components/flows/utils.d.ts +1 -0
  154. package/package/components/flows/utils.js +3 -0
  155. package/package/components/graph/FlowGraph.svelte +1 -1
  156. package/package/components/graph/model.d.ts +5 -2
  157. package/package/components/graph/svelvet/container/views/GraphView.svelte +2 -0
  158. package/package/components/home/Item.svelte +7 -2
  159. package/package/components/home/TreeView.svelte +4 -2
  160. package/package/components/home/TreeViewRoot.svelte +1 -1
  161. package/package/components/instanceSettings.d.ts +1 -1
  162. package/package/components/instanceSettings.js +12 -4
  163. package/package/components/jobs/JobPreview.svelte +1 -4
  164. package/package/components/propertyPicker/ObjectViewer.svelte +3 -0
  165. package/package/components/propertyPicker/ObjectViewer.svelte.d.ts +1 -0
  166. package/package/components/runs/JobLoader.svelte +3 -2
  167. package/package/components/runs/JobPreview.svelte +13 -7
  168. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  169. package/package/components/scriptEditor/LogPanel.svelte +6 -8
  170. package/package/components/settings/ChangeWorkspaceId.svelte +98 -0
  171. package/package/components/settings/ChangeWorkspaceId.svelte.d.ts +16 -0
  172. package/package/components/settings/ChangeWorkspaceName.svelte +71 -0
  173. package/package/components/settings/ChangeWorkspaceName.svelte.d.ts +16 -0
  174. package/package/components/settings/PremiumInfo.svelte +2 -1
  175. package/package/components/sidebar/OperatorMenu.svelte +3 -2
  176. package/package/components/sidebar/UserMenu.svelte +13 -2
  177. package/package/components/sidebar/WorkspaceMenu.svelte +30 -1
  178. package/package/components/sidebar/changelogs.js +51 -1
  179. package/package/components/table/AutoDataTable.svelte +62 -41
  180. package/package/components/tutorials/FlowBuilderTutorialSimpleFlow.svelte +2 -2
  181. package/package/es6.d.ts.txt +1 -12395
  182. package/package/gen/core/OpenAPI.js +1 -1
  183. package/package/gen/index.d.ts +2 -0
  184. package/package/gen/models/CacheTtl.d.ts +4 -0
  185. package/package/gen/models/CacheTtl.js +5 -0
  186. package/package/gen/models/ContextualVariable.d.ts +1 -0
  187. package/package/gen/models/CreateWorkspace.d.ts +1 -1
  188. package/package/gen/models/FlowMetadata.d.ts +1 -0
  189. package/package/gen/models/FlowModule.d.ts +2 -0
  190. package/package/gen/models/FlowModuleValue.d.ts +2 -1
  191. package/package/gen/models/FlowStatus.d.ts +1 -0
  192. package/package/gen/models/FlowValue.d.ts +1 -0
  193. package/package/gen/models/GitRepositorySettings.d.ts +2 -1
  194. package/package/gen/models/GlobalUserInfo.d.ts +1 -0
  195. package/package/gen/models/NewScript.d.ts +1 -0
  196. package/package/gen/models/OpenFlowWPath.d.ts +1 -0
  197. package/package/gen/models/Script.d.ts +1 -0
  198. package/package/gen/models/WhileloopFlow.d.ts +8 -0
  199. package/package/gen/models/WhileloopFlow.js +5 -0
  200. package/package/gen/models/WorkspaceGitSyncSettings.d.ts +1 -1
  201. package/package/gen/services/JobService.d.ts +74 -8
  202. package/package/gen/services/JobService.js +55 -8
  203. package/package/gen/services/ScheduleService.d.ts +5 -1
  204. package/package/gen/services/ScheduleService.js +2 -1
  205. package/package/gen/services/SettingService.d.ts +11 -0
  206. package/package/gen/services/SettingService.js +13 -0
  207. package/package/gen/services/UserService.d.ts +29 -1
  208. package/package/gen/services/UserService.js +30 -0
  209. package/package/gen/services/WorkspaceService.d.ts +57 -2
  210. package/package/gen/services/WorkspaceService.js +76 -0
  211. package/package/hub.d.ts +3 -3
  212. package/package/hub.js +6 -6
  213. package/package/infer.d.ts +1 -20
  214. package/package/infer.js +1 -95
  215. package/package/inferArgSig.d.ts +20 -0
  216. package/package/inferArgSig.js +95 -0
  217. package/package/script_helpers.d.ts +3 -3
  218. package/package/script_helpers.js +47 -7
  219. package/package/scripts.d.ts +2 -2
  220. package/package/scripts.js +4 -4
  221. package/package/stores.d.ts +4 -0
  222. package/package/stores.js +2 -0
  223. package/package/utils.js +1 -0
  224. package/package.json +3 -2
@@ -0,0 +1,4 @@
1
+ export declare const action: (node: any) => {
2
+ destroy(): void;
3
+ };
4
+ export default action;
@@ -0,0 +1,76 @@
1
+ export const action = (node) => {
2
+ /* Constants */
3
+ const update = new Event('update');
4
+ /* Functions */
5
+ const init = () => {
6
+ addStyles();
7
+ observeElement();
8
+ addEventListeners();
9
+ setInitialHeight();
10
+ };
11
+ const dispatchUpdateEvent = () => {
12
+ node.dispatchEvent(update);
13
+ };
14
+ const setInitialHeight = () => {
15
+ let height = 0;
16
+ if (node.value) {
17
+ height = node.scrollHeight;
18
+ }
19
+ else {
20
+ if (node.placeholder) {
21
+ node.value = node.placeholder;
22
+ height = node.scrollHeight;
23
+ node.value = '';
24
+ }
25
+ else {
26
+ node.value = '|';
27
+ node.style.height = '0px';
28
+ height = node.scrollHeight;
29
+ node.value = '';
30
+ }
31
+ }
32
+ node.style.height = height + 'px';
33
+ };
34
+ const setHeight = () => {
35
+ node.style.height = '0px';
36
+ node.style.height = Math.max(node.scrollHeight, 40) + 5 + 'px';
37
+ };
38
+ const addStyles = () => {
39
+ node.style.boxSizing = 'border-box';
40
+ };
41
+ const observeElement = () => {
42
+ let elementPrototype = Object.getPrototypeOf(node);
43
+ let descriptor = Object.getOwnPropertyDescriptor(elementPrototype, 'value');
44
+ Object.defineProperty(node, 'value', {
45
+ get: function () {
46
+ return descriptor?.get?.apply(this, arguments);
47
+ },
48
+ set: function () {
49
+ descriptor?.set?.apply(this, arguments);
50
+ dispatchUpdateEvent();
51
+ }
52
+ });
53
+ };
54
+ const addEventListeners = () => {
55
+ node.addEventListener('input', (e) => {
56
+ dispatchUpdateEvent();
57
+ });
58
+ node.addEventListener('update', setHeight);
59
+ };
60
+ const removeEventListeners = () => {
61
+ node.removeEventListener('input', dispatchUpdateEvent);
62
+ node.removeEventListener('update', setHeight);
63
+ };
64
+ if (node.tagName.toLowerCase() !== 'textarea') {
65
+ throw new Error('svelte-textarea-auto-height can only be used on textarea elements.');
66
+ }
67
+ else {
68
+ init();
69
+ return {
70
+ destroy() {
71
+ removeEventListeners();
72
+ }
73
+ };
74
+ }
75
+ };
76
+ export default action;
@@ -61,12 +61,16 @@ import { Button, Drawer, Skeleton } from './common';
61
61
  import DrawerContent from './common/drawer/DrawerContent.svelte';
62
62
  import ApiConnectForm from './ApiConnectForm.svelte';
63
63
  import SearchItems from './SearchItems.svelte';
64
- import autosize from 'svelte-autosize';
65
64
  import WhitelistIp from './WhitelistIp.svelte';
66
65
  import { sendUserToast } from '../toast';
67
66
  import OauthScopes from './OauthScopes.svelte';
68
67
  import DarkModeObserver from './DarkModeObserver.svelte';
69
68
  import Markdown from 'svelte-exmarkdown';
69
+ import autosize from '../autosize';
70
+ import Required from './Required.svelte';
71
+ import Toggle from './Toggle.svelte';
72
+ import { Pen } from 'lucide-svelte';
73
+ import GfmMarkdown from './GfmMarkdown.svelte';
70
74
  export let newPageOAuth = false;
71
75
  const nativeLanguagesCategory = [
72
76
  'postgresql',
@@ -83,6 +87,7 @@ let valueToken = undefined;
83
87
  let connects = undefined;
84
88
  let connectsManual = undefined;
85
89
  let args = {};
90
+ let renderDescription = true;
86
91
  $: linkedSecretCandidates = apiTokenApps[resourceType]?.linkedSecret
87
92
  ? [apiTokenApps[resourceType]?.linkedSecret]
88
93
  : args != undefined
@@ -468,7 +473,7 @@ let darkMode = false;
468
473
  </div>
469
474
  {/if}
470
475
  {:else if !emptyString(resourceTypeInfo?.description)}
471
- <h3 class="mt-6 mb-2">{resourceTypeInfo?.name} description</h3>
476
+ <h4 class="mt-8 mb-2">{resourceTypeInfo?.name} description</h4>
472
477
  <div class="text-sm">
473
478
  <Markdown md={urlize(resourceTypeInfo?.description ?? '', 'md')} />
474
479
  </div>
@@ -477,8 +482,25 @@ let darkMode = false;
477
482
  <WhitelistIp />
478
483
  {/if}
479
484
 
480
- <h2 class="mt-4">Value</h2>
481
- <div class="mt-4">
485
+ <h4 class="mt-8 inline-flex items-center gap-4"
486
+ >Resource description <Required required={false} />
487
+ <div class="flex gap-1 items-center">
488
+ <Toggle size="xs" bind:checked={renderDescription} />
489
+ <Pen size={14} />
490
+ </div>
491
+ </h4>
492
+ {#if renderDescription}
493
+ <div>
494
+ <div class="flex flex-row-reverse text-2xs text-tertiary -mt-1">GH Markdown</div>
495
+ <textarea use:autosize bind:value={description} placeholder={'Resource description'} />
496
+ </div>
497
+ {:else if description == undefined || description == ''}
498
+ <div class="text-sm text-tertiary">No description provided</div>
499
+ {:else}
500
+ <div class="mt-2" />
501
+ <GfmMarkdown md={description} />
502
+ {/if}
503
+ <div class="mt-12">
482
504
  {#key resourceTypeInfo}
483
505
  <ApiConnectForm
484
506
  {linkedSecret}
@@ -490,9 +512,6 @@ let darkMode = false;
490
512
  />
491
513
  {/key}
492
514
  </div>
493
-
494
- <h2 class="mt-4 mb-2">Description</h2>
495
- <textarea type="text" autocomplete="off" use:autosize bind:value={description} />
496
515
  {:else}
497
516
  <Path
498
517
  initialPath=""
@@ -1,7 +1,6 @@
1
1
  <script>import { setInputCat as computeInputCat, emptyString } from '../utils';
2
2
  import { ChevronDown, DollarSign, Pipette, Plus, X } from 'lucide-svelte';
3
3
  import { createEventDispatcher } from 'svelte';
4
- import autosize from 'svelte-autosize';
5
4
  import Multiselect from 'svelte-multiselect';
6
5
  import { fade } from 'svelte/transition';
7
6
  import JsonEditor from './apps/editor/settingsPanel/inputEditor/JsonEditor.svelte';
@@ -24,6 +23,7 @@ import DateTimeInput from './DateTimeInput.svelte';
24
23
  import S3FilePicker from './S3FilePicker.svelte';
25
24
  import CurrencyInput from './apps/components/inputs/currency/CurrencyInput.svelte';
26
25
  import FileUpload from './common/fileUpload/FileUpload.svelte';
26
+ import autosize from '../autosize';
27
27
  export let label = '';
28
28
  export let value;
29
29
  export let defaultValue = undefined;
@@ -62,6 +62,7 @@ let ignoreValueUndefined = false;
62
62
  let error = '';
63
63
  let s3FilePicker;
64
64
  let s3FileUploadRawMode;
65
+ let isListJson = false;
65
66
  let el = undefined;
66
67
  export let editor = undefined;
67
68
  let inputCat = computeInputCat(type, format, itemsType?.type, enum_, contentEncoding);
@@ -101,7 +102,7 @@ function handleDefaultValueChange() {
101
102
  }
102
103
  function evalValueToRaw() {
103
104
  rawValue =
104
- inputCat === 'object' || inputCat === 'resource-object'
105
+ inputCat === 'object' || inputCat === 'resource-object' || (inputCat == 'list' && !isListJson)
105
106
  ? JSON.stringify(value, null, 2)
106
107
  : undefined;
107
108
  }
@@ -276,7 +277,6 @@ function changePosition(i, up) {
276
277
  {/if}
277
278
  <span class="text-2xs font-semibold">Preview:</span>
278
279
  {/if}
279
-
280
280
  {#if description}
281
281
  <div class="text-xs italic pb-1 text-secondary">
282
282
  <pre class="font-main">{description}</pre>
@@ -343,107 +343,121 @@ function changePosition(i, up) {
343
343
  {#if type == 'boolean' && value == undefined}
344
344
  <span>&nbsp; Not set</span>
345
345
  {/if}
346
- {:else if inputCat == 'list'}
347
- <div class="w-full">
348
- {#if Array.isArray(itemsType?.multiselect) && Array.isArray(value)}
349
- <div class="items-start">
350
- <Multiselect
351
- ulOptionsClass={'p-2 !bg-surface-secondary'}
352
- {disabled}
353
- bind:selected={value}
354
- options={itemsType?.multiselect ?? []}
355
- selectedOptionsDraggable={true}
356
- />
357
- </div>
358
- {:else if itemsType?.enum != undefined && Array.isArray(itemsType?.enum) && Array.isArray(value)}
359
- <div class="items-start">
360
- <Multiselect
361
- ulOptionsClass={'p-2 !bg-surface-secondary'}
362
- {disabled}
363
- bind:selected={value}
364
- options={itemsType?.enum ?? []}
365
- selectedOptionsDraggable={true}
366
- />
367
- </div>
368
- {:else}
369
- <div class="w-full">
370
- {#key redraw}
371
- {#if Array.isArray(value)}
372
- {#each value ?? [] as v, i}
373
- {#if i < itemsLimit}
374
- <div class="flex max-w-md mt-1 w-full items-center">
375
- {#if itemsType?.type == 'number'}
376
- <input type="number" bind:value={v} id="arg-input-number-array" />
377
- {:else if itemsType?.type == 'string' && itemsType?.contentEncoding == 'base64'}
378
- <input
379
- type="file"
380
- class="my-6"
381
- on:change={(x) => fileChanged(x, (val) => (value[i] = val))}
382
- multiple={false}
383
- />
384
- {:else if itemsType?.type == 'object'}
385
- <JsonEditor code={JSON.stringify(v, null, 2)} bind:value={v} />
386
- {:else if Array.isArray(itemsType?.enum)}
387
- <ArgEnum
388
- required
389
- create={extra['disableCreate'] != true}
390
- on:focus={() => {
391
- dispatch('focus')
392
- }}
393
- on:blur={(e) => {
394
- dispatch('blur')
346
+ {:else if inputCat == 'list' && !isListJson}
347
+ <div class="w-full flex gap-4">
348
+ <div class="w-full">
349
+ {#if Array.isArray(itemsType?.multiselect) && Array.isArray(value)}
350
+ <div class="items-start">
351
+ <Multiselect
352
+ ulOptionsClass={'p-2 !bg-surface-secondary'}
353
+ {disabled}
354
+ bind:selected={value}
355
+ options={itemsType?.multiselect ?? []}
356
+ selectedOptionsDraggable={true}
357
+ />
358
+ </div>
359
+ {:else if itemsType?.enum != undefined && Array.isArray(itemsType?.enum) && Array.isArray(value)}
360
+ <div class="items-start">
361
+ <Multiselect
362
+ ulOptionsClass={'p-2 !bg-surface-secondary'}
363
+ {disabled}
364
+ bind:selected={value}
365
+ options={itemsType?.enum ?? []}
366
+ selectedOptionsDraggable={true}
367
+ />
368
+ </div>
369
+ {:else}
370
+ <div class="w-full">
371
+ {#key redraw}
372
+ {#if Array.isArray(value)}
373
+ {#each value ?? [] as v, i}
374
+ {#if i < itemsLimit}
375
+ <div class="flex max-w-md mt-1 w-full items-center">
376
+ {#if itemsType?.type == 'number'}
377
+ <input type="number" bind:value={v} id="arg-input-number-array" />
378
+ {:else if itemsType?.type == 'string' && itemsType?.contentEncoding == 'base64'}
379
+ <input
380
+ type="file"
381
+ class="my-6"
382
+ on:change={(x) => fileChanged(x, (val) => (value[i] = val))}
383
+ multiple={false}
384
+ />
385
+ {:else if itemsType?.type == 'object'}
386
+ <JsonEditor code={JSON.stringify(v, null, 2)} bind:value={v} />
387
+ {:else if Array.isArray(itemsType?.enum)}
388
+ <ArgEnum
389
+ required
390
+ create={extra['disableCreate'] != true}
391
+ on:focus={() => {
392
+ dispatch('focus')
393
+ }}
394
+ on:blur={(e) => {
395
+ dispatch('blur')
396
+ }}
397
+ {defaultValue}
398
+ {valid}
399
+ {disabled}
400
+ {autofocus}
401
+ bind:value={v}
402
+ enum_={itemsType?.enum ?? []}
403
+ />
404
+ {:else}
405
+ <input type="text" bind:value={v} id="arg-input-array" />
406
+ {/if}
407
+ <button
408
+ transition:fade|local={{ duration: 100 }}
409
+ class="rounded-full p-1 bg-surface-secondary duration-200 hover:bg-surface-hover ml-2"
410
+ aria-label="Clear"
411
+ on:click={() => {
412
+ value.splice(i, 1)
413
+ redraw += 1
395
414
  }}
396
- {defaultValue}
397
- {valid}
398
- {disabled}
399
- {autofocus}
400
- bind:value={v}
401
- enum_={itemsType?.enum ?? []}
402
- />
403
- {:else}
404
- <input type="text" bind:value={v} id="arg-input-array" />
405
- {/if}
406
- <button
407
- transition:fade|local={{ duration: 100 }}
408
- class="rounded-full p-1 bg-surface-secondary duration-200 hover:bg-surface-hover ml-2"
409
- aria-label="Clear"
410
- on:click={() => {
411
- value.splice(i, 1)
412
- redraw += 1
413
- }}
414
- >
415
- <X size={14} />
416
- </button>
417
- </div>
415
+ >
416
+ <X size={14} />
417
+ </button>
418
+ </div>
419
+ {/if}
420
+ {/each}
421
+ {#if value.length > itemsLimit}
422
+ <button on:click={() => (itemsLimit += 50)} class="text-xs py-2 text-blue-600"
423
+ >{itemsLimit}/{value.length}: Load 50 more...</button
424
+ >
418
425
  {/if}
419
- {/each}
420
- {#if value.length > itemsLimit}
421
- <button on:click={() => (itemsLimit += 50)} class="text-xs py-2 text-blue-600"
422
- >{itemsLimit}/{value.length}: Load 50 more...</button
423
- >
424
426
  {/if}
425
- {/if}
426
- {/key}
427
- </div>
428
- <div class="flex mt-2">
429
- <Button
430
- variant="border"
431
- color="light"
432
- size="xs"
433
- btnClasses="mt-1"
434
- on:click={() => {
435
- if (value == undefined || !Array.isArray(value)) {
436
- value = []
437
- }
438
- value = value.concat('')
439
- }}
440
- id="arg-input-add-item"
441
- startIcon={{ icon: Plus }}
442
- >
443
- Add item
444
- </Button>
445
- </div>
446
- {/if}
427
+ {/key}
428
+ </div>
429
+ <div class="flex mt-2 gap-20 items-baseline">
430
+ <Button
431
+ variant="border"
432
+ color="light"
433
+ size="xs"
434
+ btnClasses="mt-1"
435
+ on:click={() => {
436
+ if (value == undefined || !Array.isArray(value)) {
437
+ value = []
438
+ }
439
+ value = value.concat('')
440
+ }}
441
+ id="arg-input-add-item"
442
+ startIcon={{ icon: Plus }}
443
+ >
444
+ Add item
445
+ </Button>
446
+ </div>
447
+ {/if}
448
+ </div>
449
+ <div class="mt-2 mr-4">
450
+ <Toggle
451
+ on:change={(e) => {
452
+ evalValueToRaw()
453
+ isListJson = !isListJson
454
+ }}
455
+ checked={isListJson}
456
+ textClass="text-secondary"
457
+ size="xs"
458
+ options={{ right: 'json' }}
459
+ />
460
+ </div>
447
461
  </div>
448
462
  {:else if inputCat == 'resource-object' && resourceTypes == undefined}
449
463
  <span class="text-2xs text-tertiary">Loading resource types...</span>
@@ -502,7 +516,7 @@ function changePosition(i, up) {
502
516
  />
503
517
  {/if}
504
518
  </div>
505
- {:else if inputCat == 'object' || inputCat == 'resource-object'}
519
+ {:else if inputCat == 'object' || inputCat == 'resource-object' || isListJson}
506
520
  {#if properties && Object.keys(properties).length > 0}
507
521
  <div class="p-4 pl-8 border rounded w-full">
508
522
  <SchemaForm
@@ -527,6 +541,19 @@ function changePosition(i, up) {
527
541
  bind:value
528
542
  />
529
543
  {/if}
544
+ {#if inputCat == 'list'}
545
+ <div class="block">
546
+ <Toggle
547
+ on:change={(e) => {
548
+ isListJson = !isListJson
549
+ }}
550
+ checked={isListJson}
551
+ textClass="text-secondary"
552
+ size="xs"
553
+ options={{ right: 'json' }}
554
+ />
555
+ </div>
556
+ {/if}
530
557
  {:else if inputCat == 'enum'}
531
558
  <div class="flex flex-row w-full gap-1">
532
559
  <ArgEnum
@@ -611,7 +638,6 @@ function changePosition(i, up) {
611
638
  }}
612
639
  use:autosize
613
640
  on:keydown={onKeyDown}
614
- type="text"
615
641
  {disabled}
616
642
  class={twMerge(
617
643
  'w-full',
@@ -33,6 +33,12 @@ export async function loadFlows() {
33
33
  }
34
34
  let searchKind = 'all';
35
35
  let isOpen = false;
36
+ let inputElement;
37
+ // Reactive statement to focus the input when the modal opens
38
+ $: if (isOpen && inputElement) {
39
+ // Use a timeout to ensure focus after any animations or rendering
40
+ setTimeout(() => inputElement.focus(), 0);
41
+ }
36
42
  let scripts = undefined;
37
43
  let filteredScriptItems = [];
38
44
  let resources = undefined;
@@ -178,8 +184,8 @@ $: counts =
178
184
  <div class="relative text-tertiary grow min-w-[100px]">
179
185
  <!-- svelte-ignore a11y-autofocus -->
180
186
  <input
181
- autofocus
182
- placeholder={'Search in the content of resources, scripts, flows and apps'}
187
+ bind:this={inputElement}
188
+ placeholder="Search in the content of resources, scripts, flows and apps"
183
189
  bind:value={search}
184
190
  class="bg-surface !h-10 !px-4 !pr-10 !rounded-lg text-sm focus:outline-none"
185
191
  />
@@ -0,0 +1,69 @@
1
+ <script>import { WorkspaceService } from '../gen';
2
+ import { createEventDispatcher } from 'svelte';
3
+ import { workspaceStore } from '../stores';
4
+ import { Button } from './common';
5
+ import Drawer from './common/drawer/Drawer.svelte';
6
+ import DrawerContent from './common/drawer/DrawerContent.svelte';
7
+ import { sendUserToast } from '../toast';
8
+ import Section from './Section.svelte';
9
+ import { Save } from 'lucide-svelte';
10
+ import autosize from '../autosize';
11
+ const dispatch = createEventDispatcher();
12
+ let edit = false;
13
+ let name = '';
14
+ let value = '';
15
+ export function initNew() {
16
+ edit = false;
17
+ name = '';
18
+ value = '';
19
+ drawer.openDrawer();
20
+ }
21
+ export function editVariable(editName, editValue) {
22
+ edit = true;
23
+ name = editName;
24
+ value = editValue;
25
+ drawer.openDrawer();
26
+ }
27
+ let drawer;
28
+ async function updateVariable() {
29
+ await WorkspaceService.setEnvironmentVariable({
30
+ workspace: $workspaceStore,
31
+ requestBody: {
32
+ value: value,
33
+ name: name
34
+ }
35
+ });
36
+ sendUserToast(`${edit ? 'Updated' : 'Created'} contextual variable ${name}`);
37
+ dispatch('update');
38
+ drawer.closeDrawer();
39
+ }
40
+ </script>
41
+
42
+ <Drawer bind:this={drawer} size="900px">
43
+ <DrawerContent
44
+ title={edit ? `Update contextual variable ${name}` : 'Create a contextual variable'}
45
+ on:close={drawer.closeDrawer}
46
+ >
47
+ <div class="flex flex-col gap-8">
48
+ {#if !edit}
49
+ <Section label="Name">
50
+ <input type="text" bind:value={name} placeholder="Variable name" />
51
+ </Section>
52
+ {/if}
53
+ <Section label="Value">
54
+ <textarea rows="4" use:autosize bind:value placeholder="Variable value" />
55
+ </Section>
56
+ </div>
57
+ <svelte:fragment slot="actions">
58
+ <Button
59
+ on:click={() => updateVariable()}
60
+ disabled={value === '' || name === ''}
61
+ startIcon={{ icon: Save }}
62
+ color="dark"
63
+ size="sm"
64
+ >
65
+ {edit ? 'Update' : 'Save'}
66
+ </Button>
67
+ </svelte:fragment>
68
+ </DrawerContent>
69
+ </Drawer>
@@ -0,0 +1,21 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ initNew?: (() => void) | undefined;
5
+ editVariable?: ((editName: string, editValue: string) => void) | undefined;
6
+ };
7
+ events: {
8
+ update: CustomEvent<any>;
9
+ } & {
10
+ [evt: string]: CustomEvent<any>;
11
+ };
12
+ slots: {};
13
+ };
14
+ export type ContextualVariableEditorProps = typeof __propDef.props;
15
+ export type ContextualVariableEditorEvents = typeof __propDef.events;
16
+ export type ContextualVariableEditorSlots = typeof __propDef.slots;
17
+ export default class ContextualVariableEditor extends SvelteComponent<ContextualVariableEditorProps, ContextualVariableEditorEvents, ContextualVariableEditorSlots> {
18
+ get initNew(): () => void;
19
+ get editVariable(): (editName: string, editValue: string) => void;
20
+ }
21
+ export {};
@@ -11,6 +11,7 @@ import { onMount } from 'svelte';
11
11
  import CronBuilder from './CronBuilder.svelte';
12
12
  import Label from './Label.svelte';
13
13
  import CronGen from './copilot/CronGen.svelte';
14
+ import DarkModeObserver from './DarkModeObserver.svelte';
14
15
  export let schedule;
15
16
  // export let offset: number = -60 * Math.floor(new Date().getTimezoneOffset() / 60)
16
17
  export let timezone; // = Intl.DateTimeFormat().resolvedOptions().timeZone
@@ -192,6 +193,8 @@ const items = Object.keys(timezones)
192
193
  .flat();
193
194
  </script>
194
195
 
196
+ <DarkModeObserver on:change={onThemeChange} />
197
+
195
198
  <div class="w-full flex space-x-8">
196
199
  <div class="w-full flex flex-col gap-4">
197
200
  <Label label="Cron">
@@ -76,9 +76,9 @@ $: shouldDisplayError = resourcePath && resourcePath in $dbSchemas && !$dbSchema
76
76
  </ToggleButtonGroup>
77
77
  {/if}
78
78
  {#if dbSchema.lang === 'graphql'}
79
- <GraphqlSchemaViewer code={formatGraphqlSchema(dbSchema)} class="h-full" />
79
+ <GraphqlSchemaViewer code={formatGraphqlSchema(dbSchema.schema)} class="h-full" />
80
80
  {:else}
81
- <ObjectViewer json={formatSchema(dbSchema)} pureViewer />
81
+ <ObjectViewer json={formatSchema(dbSchema)} pureViewer collapseLevel={1} />
82
82
  {/if}
83
83
  </DrawerContent>
84
84
  </Drawer>
@@ -2,7 +2,7 @@
2
2
  import { createEventDispatcher } from 'svelte';
3
3
  export let darkMode = false;
4
4
  const dispatch = createEventDispatcher();
5
- let observer;
5
+ let observer = undefined;
6
6
  onMount(() => {
7
7
  darkMode = document.documentElement.classList.contains('dark');
8
8
  observer = new MutationObserver((mutationsList, observer) => {
@@ -17,6 +17,6 @@ onMount(() => {
17
17
  observer.observe(document.documentElement, { attributes: true });
18
18
  });
19
19
  onDestroy(() => {
20
- observer.disconnect();
20
+ observer?.disconnect();
21
21
  });
22
22
  </script>
@@ -9,7 +9,11 @@ let date = undefined;
9
9
  let time = undefined;
10
10
  function parseValue(value = undefined) {
11
11
  let dateFromValue = value ? new Date(value) : undefined;
12
- date = isValidDate(dateFromValue) ? dateFromValue.toISOString().split('T')[0] : undefined;
12
+ date = isValidDate(dateFromValue)
13
+ ? `${dateFromValue.getFullYear().toString()}-${(dateFromValue.getMonth() + 1)
14
+ .toString()
15
+ .padStart(2, '0')}-${dateFromValue.getDate().toString().padStart(2, '0')}`
16
+ : undefined;
13
17
  time = isValidDate(dateFromValue)
14
18
  ? `${dateFromValue.getHours().toString().padStart(2, '0')}:${dateFromValue
15
19
  .getMinutes()
@@ -23,8 +27,10 @@ let initialTime = time;
23
27
  function parseDateAndTime(date, time) {
24
28
  if (date && time && (initialDate != date || initialTime != time)) {
25
29
  let newDate = new Date(`${date}T${time}`);
26
- value = newDate.toISOString();
27
- dispatch('change', value);
30
+ if (newDate.toString() != 'Invalid Date') {
31
+ value = newDate.toISOString();
32
+ dispatch('change', value);
33
+ }
28
34
  }
29
35
  }
30
36
  $: parseDateAndTime(date, time);
@@ -21,6 +21,7 @@ let drawer;
21
21
  startIcon={{ icon: SettingsIcon }}
22
22
  color="light"
23
23
  size="xs2"
24
+ btnClasses="!text-tertiary"
24
25
  variant="contained">defaults</Button
25
26
  >
26
27
  {/if}