windmill-components 1.532.0 → 1.537.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 (135) hide show
  1. package/package/components/ArgInput.svelte +25 -18
  2. package/package/components/Auth0Setting.svelte +8 -3
  3. package/package/components/Dev.svelte +5 -4
  4. package/package/components/DiffDrawer.svelte +2 -2
  5. package/package/components/DiffEditor.svelte +34 -37
  6. package/package/components/DiffEditor.svelte.d.ts +23 -39
  7. package/package/components/EditableSchemaForm.svelte +42 -51
  8. package/package/components/EditableSchemaForm.svelte.d.ts +2 -3
  9. package/package/components/Editor.svelte +30 -9
  10. package/package/components/Editor.svelte.d.ts +5 -0
  11. package/package/components/FlowBuilder.svelte +7 -4
  12. package/package/components/FlowPreviewContent.svelte +3 -3
  13. package/package/components/FlowStatusViewer.svelte +28 -0
  14. package/package/components/FlowStatusViewerInner.svelte +72 -20
  15. package/package/components/FlowStatusViewerInner.svelte.d.ts +7 -0
  16. package/package/components/ModulePreview.svelte +2 -1
  17. package/package/components/ModulePreview.svelte.d.ts +1 -0
  18. package/package/components/ModulePreviewForm.svelte +72 -65
  19. package/package/components/ModulePreviewResultViewer.svelte +13 -18
  20. package/package/components/ModuleTest.svelte +6 -5
  21. package/package/components/ModuleTest.svelte.d.ts +1 -0
  22. package/package/components/OktaSetting.svelte +8 -3
  23. package/package/components/Portal.svelte +11 -7
  24. package/package/components/Portal.svelte.d.ts +19 -39
  25. package/package/components/RunForm.svelte +2 -2
  26. package/package/components/RunForm.svelte.d.ts +1 -1
  27. package/package/components/RunFormAdvancedPopup.svelte +13 -1
  28. package/package/components/SchemaForm.svelte +1 -2
  29. package/package/components/ScriptBuilder.svelte +1 -1
  30. package/package/components/ScriptEditor.svelte +21 -7
  31. package/package/components/SimpleEditor.svelte +0 -1
  32. package/package/components/apps/components/layout/AppModal.svelte +2 -2
  33. package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -2
  34. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +1 -1
  35. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +0 -1
  36. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +3 -1
  37. package/package/components/apps/editor/settingsPanel/GridCondition.svelte +3 -1
  38. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +3 -1
  39. package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -1
  40. package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +55 -53
  41. package/package/components/apps/editor/settingsPanel/TableActions.svelte +3 -1
  42. package/package/components/common/button/model.d.ts +1 -1
  43. package/package/components/common/drawer/Disposable.svelte +51 -30
  44. package/package/components/common/drawer/Disposable.svelte.d.ts +12 -44
  45. package/package/components/common/drawer/Drawer.svelte +15 -11
  46. package/package/components/copilot/MetadataGen.svelte +14 -3
  47. package/package/components/copilot/chat/AIChatInput.svelte +0 -1
  48. package/package/components/copilot/chat/AIChatManager.svelte.js +3 -3
  49. package/package/components/copilot/chat/AvailableContextList.svelte +192 -66
  50. package/package/components/copilot/chat/AvailableContextList.svelte.d.ts +2 -2
  51. package/package/components/copilot/chat/ContextElementBadge.svelte +3 -3
  52. package/package/components/copilot/chat/ContextManager.svelte.js +36 -13
  53. package/package/components/copilot/chat/ContextTextarea.svelte +21 -48
  54. package/package/components/copilot/chat/ToolContentDisplay.svelte +10 -1
  55. package/package/components/copilot/chat/ToolExecutionDisplay.svelte +3 -3
  56. package/package/components/copilot/chat/context.d.ts +7 -2
  57. package/package/components/copilot/chat/flow/FlowAIChat.svelte +110 -8
  58. package/package/components/copilot/chat/flow/core.d.ts +11 -0
  59. package/package/components/copilot/chat/flow/core.js +121 -3
  60. package/package/components/copilot/chat/flow/uiIntents.d.ts +8 -0
  61. package/package/components/copilot/chat/flow/uiIntents.js +5 -0
  62. package/package/components/copilot/chat/flow/useUiIntent.d.ts +5 -0
  63. package/package/components/copilot/chat/flow/useUiIntent.js +12 -0
  64. package/package/components/copilot/chat/monaco-adapter.d.ts +22 -4
  65. package/package/components/copilot/chat/monaco-adapter.js +55 -16
  66. package/package/components/copilot/chat/script/core.js +3 -2
  67. package/package/components/copilot/chat/shared.d.ts +3 -2
  68. package/package/components/copilot/chat/shared.js +24 -12
  69. package/package/components/copilot/lib.js +12 -7
  70. package/package/components/copilot/shared.d.ts +1 -1
  71. package/package/components/copilot/shared.js +16 -10
  72. package/package/components/flows/FlowEditor.svelte +4 -2
  73. package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
  74. package/package/components/flows/FlowModuleIcon.svelte +8 -8
  75. package/package/components/flows/common/FlowCardHeader.svelte +4 -1
  76. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +6 -0
  77. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +6 -0
  78. package/package/components/flows/content/FlowEditorPanel.svelte +2 -1
  79. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -0
  80. package/package/components/flows/content/FlowInput.svelte +31 -34
  81. package/package/components/flows/content/FlowInput.svelte.d.ts +1 -0
  82. package/package/components/flows/content/FlowLoop.svelte +7 -0
  83. package/package/components/flows/content/FlowModuleComponent.svelte +37 -44
  84. package/package/components/flows/content/FlowModuleScript.svelte +1 -1
  85. package/package/components/flows/content/FlowModuleSuspend.svelte +16 -18
  86. package/package/components/flows/content/FlowWhileLoop.svelte +6 -0
  87. package/package/components/flows/content/ScriptEditorDrawer.svelte +9 -11
  88. package/package/components/flows/dfs.d.ts +1 -1
  89. package/package/components/flows/dfs.js +6 -6
  90. package/package/components/flows/flowInfers.js +7 -7
  91. package/package/components/flows/flowStateUtils.svelte.js +1 -2
  92. package/package/components/flows/map/FlowModuleSchemaItem.svelte +12 -26
  93. package/package/components/flows/map/MapItem.svelte +8 -4
  94. package/package/components/flows/map/VirtualItem.svelte +1 -1
  95. package/package/components/flows/pickers/TopLevelNode.svelte +1 -1
  96. package/package/components/flows/propPicker/InputPickerInner.svelte +5 -5
  97. package/package/components/flows/propPicker/OutputPickerInner.svelte +143 -118
  98. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +7 -16
  99. package/package/components/flows/{testSteps.svelte.d.ts → stepsInputArgs.svelte.d.ts} +2 -1
  100. package/package/components/flows/{testSteps.svelte.js → stepsInputArgs.svelte.js} +15 -3
  101. package/package/components/flows/types.d.ts +16 -3
  102. package/package/components/flows/utils.js +3 -0
  103. package/package/components/graph/FlowGraphV2.svelte +1 -1
  104. package/package/components/graph/renderers/nodes/AIToolNode.svelte +4 -4
  105. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +71 -54
  106. package/package/components/propertyPicker/ObjectViewer.svelte +11 -3
  107. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +1 -1
  108. package/package/components/schema/AddPropertyV2.svelte +2 -7
  109. package/package/components/schema/AddPropertyV2.svelte.d.ts +3 -20
  110. package/package/components/schema/EditableSchemaDrawer.svelte +109 -115
  111. package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +2 -1
  112. package/package/components/schema/EditableSchemaSdkWrapper.svelte +16 -3
  113. package/package/components/schema/EditableSchemaSdkWrapper.svelte.d.ts +4 -1
  114. package/package/components/schema/EditableSchemaWrapper.svelte +3 -10
  115. package/package/components/schema/FlowPropertyEditor.svelte +9 -41
  116. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  117. package/package/components/schema/SchemaFormDND.svelte +11 -10
  118. package/package/components/schema/SchemaFormDND.svelte.d.ts +3 -2
  119. package/package/components/schema/editable_schema_wrapper.d.ts +0 -3
  120. package/package/components/settings/PremiumInfo.svelte +7 -2
  121. package/package/components/triggers/CaptureWrapper.svelte +2 -13
  122. package/package/components/triggers/CaptureWrapper.svelte.d.ts +1 -1
  123. package/package/components/triggers/TriggersWrapper.svelte +1 -0
  124. package/package/components/triggers/http/RouteEditorInner.svelte +1 -1
  125. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +23 -20
  126. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte +15 -27
  127. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte.d.ts +7 -5
  128. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +16 -16
  129. package/package/hubPaths.json +3 -1
  130. package/package/script_helpers.d.ts +2 -2
  131. package/package/script_helpers.js +2 -0
  132. package/package/stores.d.ts +1 -0
  133. package/package/stores.js +8 -1
  134. package/package.json +2 -2
  135. package/package/components/ModulePreviewResultViewer.svelte.d.ts +0 -28
@@ -766,11 +766,21 @@ onDestroy(() => {
766
766
  selected={oneOfSelected}
767
767
  on:selected={({ detail }) => {
768
768
  oneOfSelected = detail
769
- const prevValueKeys = Object.keys(
769
+ const selectedObjProperties =
770
770
  oneOf?.find((o) => o.title == detail)?.properties ?? {}
771
- )
771
+ const newValueKeys = Object.keys(selectedObjProperties)
772
772
  const toKeep = {}
773
- for (const key of prevValueKeys) {
773
+ for (const key of newValueKeys) {
774
+ // Check if there is a select (enum) in the newly selected oneOf and if the current value is not in the enum, skip it
775
+ if (
776
+ !['kind', 'label'].includes(key) &&
777
+ selectedObjProperties[key]?.enum &&
778
+ value &&
779
+ value[key] !== undefined &&
780
+ !selectedObjProperties[key].enum.includes(value[key])
781
+ ) {
782
+ continue
783
+ }
774
784
  toKeep[key] = value[key]
775
785
  }
776
786
  const tagKey = oneOf.find((o) => Object.keys(o.properties ?? {}).includes('kind'))
@@ -811,8 +821,11 @@ onDestroy(() => {
811
821
  }
812
822
  }
813
823
  bind:args={value}
814
- dndType={`nested-${title}`}
815
- hiddenArgs={['label', 'kind']}
824
+ hiddenArgs={[
825
+ oneOf?.find((o) => Object.keys(o.properties ?? {}).includes('kind'))
826
+ ? 'kind'
827
+ : 'label'
828
+ ]}
816
829
  on:reorder={(e) => {
817
830
  if (oneOf && oneOf[objIdx]) {
818
831
  const keys = e.detail
@@ -905,20 +918,14 @@ onDestroy(() => {
905
918
  {disablePortal}
906
919
  {disabled}
907
920
  {prettifyHeader}
908
- bind:schema={
909
- () => ({
910
- properties,
911
- $schema: '',
912
- required: nestedRequired ?? [],
913
- type: 'object',
914
- order
915
- }),
916
- (newSchema) => {
917
- dispatch('nestedChange')
918
- }
919
- }
921
+ schema={{
922
+ properties,
923
+ $schema: '',
924
+ required: nestedRequired ?? [],
925
+ type: 'object',
926
+ order
927
+ }}
920
928
  bind:args={value}
921
- dndType={`nested-${title}`}
922
929
  on:reorder={(e) => {
923
930
  const keys = e.detail
924
931
  order = keys
@@ -1,4 +1,5 @@
1
- <script lang="ts">import CollapseLink from './CollapseLink.svelte';
1
+ <script lang="ts">import { untrack } from 'svelte';
2
+ import CollapseLink from './CollapseLink.svelte';
2
3
  import IconedResourceType from './IconedResourceType.svelte';
3
4
  import Toggle from './Toggle.svelte';
4
5
  import Tooltip from './Tooltip.svelte';
@@ -25,8 +26,12 @@ function changeDomain(domain, custom) {
25
26
  }
26
27
  }
27
28
  let enabled = $derived(value != undefined);
28
- $effect(() => {
29
- changeDomain(value?.['domain'], value?.['custom']);
29
+ let lastValues = { domain: undefined, custom: undefined };
30
+ $effect.pre(() => {
31
+ if (value?.['domain'] != lastValues.domain || value?.['custom'] != lastValues.custom) {
32
+ lastValues = { domain: value?.['domain'], custom: value?.['custom'] };
33
+ untrack(() => changeDomain(value?.['domain'], value?.['custom']));
34
+ }
30
35
  });
31
36
  </script>
32
37
 
@@ -27,7 +27,7 @@ import { approximateFindPythonRelativePath, isTypescriptRelativePath, parseTypes
27
27
  import Tooltip from './Tooltip.svelte';
28
28
  import { workspaceAIClients } from './copilot/lib';
29
29
  import { Triggers } from './triggers/triggers.svelte';
30
- import { TestSteps } from './flows/testSteps.svelte';
30
+ import { StepsInputArgs } from './flows/stepsInputArgs.svelte';
31
31
  import { ModulesTestStates } from './modulesTest.svelte';
32
32
  let flowCopilotContext = {
33
33
  shouldUpdatePropertyType: writable({}),
@@ -374,7 +374,7 @@ const previewArgsStore = $state({ val: {} });
374
374
  const scriptEditorDrawer = writable(undefined);
375
375
  const moving = writable(undefined);
376
376
  const history = initHistory(flowStore.val);
377
- const testSteps = new TestSteps();
377
+ const stepsInputArgs = new StepsInputArgs();
378
378
  const selectedIdStore = writable('settings-metadata');
379
379
  const triggersCount = writable(undefined);
380
380
  const modulesTestStates = new ModulesTestStates((moduleId) => {
@@ -397,7 +397,7 @@ setContext('FlowEditorContext', {
397
397
  pathStore: writable(''),
398
398
  flowStateStore,
399
399
  flowStore,
400
- testSteps,
400
+ stepsInputArgs,
401
401
  saveDraft: () => { },
402
402
  initialPathStore: writable(''),
403
403
  fakeInitialPath: '',
@@ -708,7 +708,7 @@ const flowHasChanged = $derived(flowPreviewContent?.flowHasChanged());
708
708
  noEditor
709
709
  on:applyArgs={(ev) => {
710
710
  if (ev.detail.kind === 'preprocessor') {
711
- testSteps.setStepArgs('preprocessor', ev.detail.args ?? {})
711
+ stepsInputArgs.setStepArgs('preprocessor', ev.detail.args ?? {})
712
712
  $selectedIdStore = 'preprocessor'
713
713
  } else {
714
714
  previewArgsStore.val = ev.detail.args ?? {}
@@ -720,6 +720,7 @@ const flowHasChanged = $derived(flowPreviewContent?.flowHasChanged());
720
720
  isOwner={flowPreviewContent?.getIsOwner()}
721
721
  {suspendStatus}
722
722
  onOpenDetails={flowPreviewButtons?.openPreview}
723
+ previewOpen={flowPreviewButtons?.getPreviewOpen()}
723
724
  />
724
725
  {/key}
725
726
  </Pane>
@@ -155,7 +155,7 @@ export function setDiff(diff) {
155
155
  <Module.default
156
156
  open={true}
157
157
  automaticLayout
158
- class="h-full"
158
+ className="h-full"
159
159
  defaultLang={lang}
160
160
  defaultModifiedLang={data.current.lang}
161
161
  defaultOriginal={content}
@@ -170,7 +170,7 @@ export function setDiff(diff) {
170
170
  <Module.default
171
171
  open={true}
172
172
  automaticLayout
173
- class="h-full"
173
+ className="h-full"
174
174
  defaultLang="yaml"
175
175
  defaultOriginal={metadata}
176
176
  defaultModified={data.current.metadata}
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">import { BROWSER } from 'esm-env';
2
- import { createEventDispatcher, onMount } from 'svelte';
2
+ import { onMount } from 'svelte';
3
3
  import '@codingame/monaco-vscode-standalone-languages';
4
4
  import '@codingame/monaco-vscode-standalone-json-language-features';
5
5
  import '@codingame/monaco-vscode-standalone-typescript-language-features';
@@ -7,20 +7,12 @@ import { editor as meditor } from 'monaco-editor';
7
7
  import { initializeVscode } from './vscode';
8
8
  import EditorTheme from './EditorTheme.svelte';
9
9
  import Button from './common/button/Button.svelte';
10
+ import { twMerge } from 'tailwind-merge';
10
11
  const SIDE_BY_SIDE_MIN_WIDTH = 700;
11
- export let automaticLayout = true;
12
- export let fixedOverflowWidgets = true;
13
- export let defaultLang = undefined;
14
- export let defaultModifiedLang = undefined;
15
- export let defaultOriginal = undefined;
16
- export let defaultModified = undefined;
17
- export let readOnly = false;
18
- export let showButtons = false;
19
- export let showHistoryButton = true;
20
- let diffEditor;
21
- let diffDivEl = null;
22
- let editorWidth = SIDE_BY_SIDE_MIN_WIDTH;
23
- export let open = false;
12
+ let { open = false, className = '', automaticLayout = true, fixedOverflowWidgets = true, defaultLang, defaultModifiedLang, defaultOriginal = undefined, defaultModified = undefined, readOnly = false, buttons = [], modifiedModel } = $props();
13
+ let diffEditor = $state(undefined);
14
+ let diffDivEl = $state(null);
15
+ let editorWidth = $state(SIDE_BY_SIDE_MIN_WIDTH);
24
16
  async function loadDiffEditor() {
25
17
  await initializeVscode();
26
18
  if (!diffDivEl) {
@@ -40,23 +32,17 @@ async function loadDiffEditor() {
40
32
  lineNumbersMinChars: 2,
41
33
  scrollbar: { alwaysConsumeMouseWheel: false }
42
34
  });
43
- if (defaultOriginal !== undefined &&
44
- defaultModified !== undefined &&
45
- defaultLang !== undefined) {
35
+ if (defaultLang !== undefined) {
46
36
  setupModel(defaultLang, defaultOriginal, defaultModified, defaultModifiedLang);
47
37
  }
48
38
  }
49
39
  export function setupModel(lang, original, modified, modifiedLang) {
40
+ const o = meditor.createModel(original ?? '', lang);
41
+ const m = modifiedModel ?? meditor.createModel(modified ?? '', modifiedLang ?? lang);
50
42
  diffEditor?.setModel({
51
- original: meditor.createModel('', lang),
52
- modified: meditor.createModel('', modifiedLang ?? lang)
43
+ original: o,
44
+ modified: m
53
45
  });
54
- if (original) {
55
- setOriginal(original);
56
- }
57
- if (modified) {
58
- setModified(modified);
59
- }
60
46
  }
61
47
  export function setOriginal(code) {
62
48
  diffEditor?.getModel()?.original?.setValue(code);
@@ -69,6 +55,15 @@ export function setModified(code) {
69
55
  diffEditor?.getModel()?.modified?.setValue(code);
70
56
  defaultModified = code;
71
57
  }
58
+ export function setModifiedModel(model) {
59
+ const curr = diffEditor?.getModel();
60
+ if (!curr)
61
+ return;
62
+ diffEditor?.setModel({
63
+ original: curr.original,
64
+ modified: model
65
+ });
66
+ }
72
67
  export function getModified() {
73
68
  return diffEditor?.getModel()?.modified.getValue() ?? '';
74
69
  }
@@ -81,8 +76,14 @@ export function hide() {
81
76
  function onWidthChange(editorWidth) {
82
77
  diffEditor?.updateOptions({ renderSideBySide: editorWidth >= SIDE_BY_SIDE_MIN_WIDTH });
83
78
  }
84
- $: onWidthChange(editorWidth);
85
- $: open && diffDivEl && loadDiffEditor();
79
+ $effect(() => {
80
+ if (open && diffDivEl) {
81
+ loadDiffEditor();
82
+ }
83
+ });
84
+ $effect(() => {
85
+ onWidthChange(editorWidth);
86
+ });
86
87
  onMount(() => {
87
88
  if (BROWSER) {
88
89
  return () => {
@@ -90,28 +91,24 @@ onMount(() => {
90
91
  };
91
92
  }
92
93
  });
93
- const dispatch = createEventDispatcher();
94
94
  </script>
95
95
 
96
96
  {#if open}
97
97
  <EditorTheme />
98
98
  <div
99
99
  bind:this={diffDivEl}
100
- class="{$$props.class} editor nonmain-editor"
100
+ class={twMerge('editor nonmain-editor', className)}
101
101
  bind:clientWidth={editorWidth}
102
102
  ></div>
103
- {#if showButtons}
103
+ {#if buttons.length > 0}
104
104
  <div
105
105
  class="absolute flex flex-row gap-2 bottom-10 left-1/2 z-10 -translate-x-1/2 rounded-md p-1 w-full justify-center"
106
106
  >
107
- {#if showHistoryButton}
108
- <Button on:click={() => dispatch('seeHistory')} variant="contained" size="sm"
109
- >See changes history</Button
107
+ {#each buttons as button}
108
+ <Button on:click={button.onClick} variant="contained" size="sm" color={button.color}
109
+ >{button.text}</Button
110
110
  >
111
- {/if}
112
- <Button on:click={() => dispatch('hideDiffMode')} variant="contained" size="sm" color="red"
113
- >Quit diff mode</Button
114
- >
111
+ {/each}
115
112
  </div>
116
113
  {/if}
117
114
  {/if}
@@ -1,51 +1,35 @@
1
1
  import '@codingame/monaco-vscode-standalone-languages';
2
2
  import '@codingame/monaco-vscode-standalone-json-language-features';
3
3
  import '@codingame/monaco-vscode-standalone-typescript-language-features';
4
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
5
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
6
- $$bindings?: Bindings;
7
- } & Exports;
8
- (internal: unknown, props: Props & {
9
- $$events?: Events;
10
- $$slots?: Slots;
11
- }): Exports & {
12
- $set?: any;
13
- $on?: any;
14
- };
15
- z_$$bindings?: Bindings;
4
+ import { editor as meditor } from 'monaco-editor';
5
+ import type { ButtonType } from './common';
6
+ export interface ButtonProp {
7
+ text: string;
8
+ color?: ButtonType.Color;
9
+ onClick: () => void;
16
10
  }
17
- declare const DiffEditor: $$__sveltets_2_IsomorphicComponent<{
18
- [x: string]: any;
19
- automaticLayout?: boolean | undefined;
20
- fixedOverflowWidgets?: boolean | undefined;
21
- defaultLang?: string | undefined | undefined;
22
- defaultModifiedLang?: string | undefined | undefined;
23
- defaultOriginal?: string | undefined | undefined;
24
- defaultModified?: string | undefined | undefined;
25
- readOnly?: boolean | undefined;
26
- showButtons?: boolean | undefined;
27
- showHistoryButton?: boolean | undefined;
28
- open?: boolean | undefined;
29
- setupModel?: ((lang: string, original?: string, modified?: string, modifiedLang?: string) => void) | undefined;
30
- setOriginal?: ((code: string) => void) | undefined;
31
- getOriginal?: (() => string) | undefined;
32
- setModified?: ((code: string) => void) | undefined;
33
- getModified?: (() => string) | undefined;
34
- show?: (() => void) | undefined;
35
- hide?: (() => void) | undefined;
36
- }, {
37
- hideDiffMode: CustomEvent<void>;
38
- seeHistory: CustomEvent<void>;
39
- } & {
40
- [evt: string]: CustomEvent<any>;
41
- }, {}, {
11
+ interface Props {
12
+ open?: boolean;
13
+ className?: string;
14
+ automaticLayout?: boolean;
15
+ fixedOverflowWidgets?: boolean;
16
+ defaultLang?: string;
17
+ defaultModifiedLang?: string;
18
+ defaultOriginal?: string;
19
+ defaultModified?: string;
20
+ readOnly?: boolean;
21
+ buttons?: ButtonProp[];
22
+ modifiedModel?: meditor.ITextModel;
23
+ }
24
+ declare const DiffEditor: import("svelte").Component<Props, {
42
25
  setupModel: (lang: string, original?: string, modified?: string, modifiedLang?: string) => void;
43
26
  setOriginal: (code: string) => void;
44
27
  getOriginal: () => string;
45
28
  setModified: (code: string) => void;
29
+ setModifiedModel: (model: meditor.ITextModel) => void;
46
30
  getModified: () => string;
47
31
  show: () => void;
48
32
  hide: () => void;
49
- }, string>;
50
- type DiffEditor = InstanceType<typeof DiffEditor>;
33
+ }, "">;
34
+ type DiffEditor = ReturnType<typeof DiffEditor>;
51
35
  export default DiffEditor;
@@ -11,13 +11,13 @@ import { twMerge } from 'tailwind-merge';
11
11
  import FlowPropertyEditor from './schema/FlowPropertyEditor.svelte';
12
12
  import PropertyEditor from './schema/PropertyEditor.svelte';
13
13
  import SimpleEditor from './SimpleEditor.svelte';
14
- import { createEventDispatcher, tick, untrack } from 'svelte';
14
+ import { createEventDispatcher, untrack } from 'svelte';
15
15
  import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
16
16
  import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
17
17
  import Label from './Label.svelte';
18
18
  import { sendUserToast } from '../toast';
19
19
  import Toggle from './Toggle.svelte';
20
- import { DynamicSelect, emptyString } from '../utils';
20
+ import { DynamicSelect, emptyString, generateRandomString, readFieldsRecursively } from '../utils';
21
21
  import Popover from './meltComponents/Popover.svelte';
22
22
  import SchemaFormDnd from './schema/SchemaFormDND.svelte';
23
23
  import { deepEqual } from 'fast-equals';
@@ -27,7 +27,7 @@ import Editor from './Editor.svelte';
27
27
  import AddPropertyV2 from './schema/AddPropertyV2.svelte';
28
28
  // export let openEditTab: () => void = () => {}
29
29
  const dispatch = createEventDispatcher();
30
- let { schema = $bindable(), hiddenArgs = [], args = $bindable(undefined), shouldHideNoInputs = false, noVariablePicker = false, flexWrap = false, uiOnly = false, isFlowInput = false, noPreview = false, jsonEnabled = true, isAppInput = false, displayWebhookWarning = false, onlyMaskPassword = false, dndType = undefined, editTab, previewSchema = undefined, editPanelInitialSize = undefined, editPanelSize = $bindable(0), diff = {}, disableDnd = false, shouldDispatchChanges = false, isValid = $bindable(true), customUi = undefined, pannelExtraButtonWidth = 0, class: clazz = '', dynSelectCode = $bindable(), dynSelectLang = $bindable(), showDynSelectOpt = false, addPropertyInEditorTab = false, openEditTab, addProperty, runButton, extraTab } = $props();
30
+ let { schema = $bindable(), hiddenArgs = [], args = $bindable(undefined), shouldHideNoInputs = false, noVariablePicker = false, flexWrap = false, uiOnly = false, isFlowInput = false, noPreview = false, jsonEnabled = true, isAppInput = false, displayWebhookWarning = false, onlyMaskPassword = false, editTab, previewSchema = undefined, editPanelInitialSize = undefined, editPanelSize = $bindable(0), diff = {}, disableDnd = false, shouldDispatchChanges = false, isValid = $bindable(true), customUi = undefined, pannelExtraButtonWidth = 0, class: clazz = '', dynSelectCode = $bindable(), dynSelectLang = $bindable(), showDynSelectOpt = false, addPropertyInEditorTab = false, openEditTab, addProperty, runButton, extraTab, schemaFormClassName = undefined, onChange = undefined } = $props();
31
31
  $effect.pre(() => {
32
32
  if (args == undefined) {
33
33
  args = {};
@@ -39,6 +39,12 @@ $effect.pre(() => {
39
39
  dynSelectCode = schema?.['x-windmill-dyn-select-code'] || '';
40
40
  }
41
41
  });
42
+ $effect(() => {
43
+ if (onChange) {
44
+ readFieldsRecursively(args);
45
+ onChange(args ?? {});
46
+ }
47
+ });
42
48
  $effect(() => {
43
49
  if (schema && dynSelectCode !== undefined && dynSelectLang !== undefined) {
44
50
  if (dynSelectCode && dynSelectCode.trim()) {
@@ -64,9 +70,9 @@ export function setDefaults() {
64
70
  let pickForField;
65
71
  let itemPicker = $state(undefined);
66
72
  let variableEditor = $state(undefined);
67
- let keys = $state(Array.isArray(schema?.order)
73
+ let keys = $state((Array.isArray(schema?.order)
68
74
  ? [...schema.order]
69
- : (Object.keys(schema?.properties ?? {}) ?? Object.keys(schema?.properties ?? {})));
75
+ : (Object.keys(schema?.properties ?? {}) ?? Object.keys(schema?.properties ?? {}))).filter((x) => !hiddenArgs?.includes(x)));
70
76
  function alignOrderWithProperties(schema) {
71
77
  if (schema.order == undefined && !Array.isArray(schema.order)) {
72
78
  schema.order = [];
@@ -92,22 +98,16 @@ function alignOrderWithProperties(schema) {
92
98
  return hasChanged;
93
99
  }
94
100
  function onSchemaChange() {
95
- let editSchema = false;
96
101
  if (alignOrderWithProperties(schema)) {
97
- console.log('alignOrderWithProperties', JSON.stringify(schema, null, 2));
98
- editSchema = true;
102
+ // console.log('alignOrderWithProperties', JSON.stringify(schema, null, 2))
99
103
  }
100
- let lkeys = schema?.order ?? Object.keys(schema?.properties ?? {});
104
+ let lkeys = (schema?.order ?? Object.keys(schema?.properties ?? {})).filter((x) => !hiddenArgs?.includes(x));
101
105
  if (schema?.properties && !deepEqual(lkeys, keys)) {
102
106
  keys = [...lkeys];
103
- editSchema = true;
104
107
  if (opened == undefined) {
105
108
  opened = keys[0];
106
109
  }
107
110
  }
108
- if (editSchema) {
109
- schema = schema;
110
- }
111
111
  }
112
112
  let opened = $state(untrack(() => keys[0]));
113
113
  function computeSelected(property) {
@@ -148,25 +148,25 @@ function renameProperty(oldName, key) {
148
148
  el.value = oldName;
149
149
  }
150
150
  else {
151
+ let newSchema = $state.snapshot(schema);
151
152
  if (args) {
152
153
  args[newName] = args[oldName];
153
154
  delete args[oldName];
154
155
  }
155
- schema.properties[newName] = schema.properties[oldName];
156
- delete schema.properties[oldName];
157
- if (schema.required?.includes(oldName)) {
158
- schema.required = schema.required?.map((x) => (x === oldName ? newName : x));
156
+ newSchema.properties[newName] = newSchema.properties[oldName];
157
+ delete newSchema.properties[oldName];
158
+ if (newSchema.required?.includes(oldName)) {
159
+ newSchema.required = newSchema.required?.map((x) => (x === oldName ? newName : x));
159
160
  }
160
161
  // Replace the old name with the new name in the order array
161
- if (schema.order) {
162
- const index = schema.order.indexOf(oldName);
162
+ if (newSchema.order) {
163
+ const index = newSchema.order.indexOf(oldName);
163
164
  if (index !== -1) {
164
- schema.order[index] = newName;
165
+ newSchema.order[index] = newName;
165
166
  }
166
167
  }
167
168
  opened = newName;
168
- schema = $state.snapshot(schema);
169
- dispatch('change', schema);
169
+ schema = newSchema;
170
170
  sendUserToast('Argument renamed');
171
171
  }
172
172
  }
@@ -247,6 +247,7 @@ function updateDynSelectCode(functionName, lang = 'bun') {
247
247
  const code = generateFn(functionName);
248
248
  dynSelectCode = dynSelectCode ? dynSelectCode.concat(code) : code;
249
249
  }
250
+ let dndType = $state(generateRandomString());
250
251
  </script>
251
252
 
252
253
  <div class="w-full h-full">
@@ -283,15 +284,15 @@ function updateDynSelectCode(functionName, lang = 'bun') {
283
284
  class="min-h-0 overflow-y-auto grow rounded-md {runButton ? 'flex flex-col gap-2' : ''}"
284
285
  >
285
286
  <SchemaFormDnd
286
- nestedClasses={'flex flex-col gap-1'}
287
+ {dndType}
288
+ nestedClasses={'flex flex-col gap-1 ' + (schemaFormClassName ?? '')}
287
289
  bind:schema={
288
290
  () => (previewSchema ? previewSchema : schema),
289
291
  (newSchema) => {
290
292
  schema = newSchema
291
- tick().then(() => dispatch('change', schema))
292
293
  }
293
294
  }
294
- {dndType}
295
+ {hiddenArgs}
295
296
  {disableDnd}
296
297
  {onlyMaskPassword}
297
298
  bind:args
@@ -299,11 +300,16 @@ function updateDynSelectCode(functionName, lang = 'bun') {
299
300
  opened = e.detail
300
301
  }}
301
302
  on:reorder={(e) => {
303
+ let order = e.detail
304
+ let newProperties = {}
305
+ for (let key of order) {
306
+ newProperties[key] = schema.properties[key]
307
+ }
302
308
  schema = {
303
309
  ...schema,
310
+ properties: newProperties,
304
311
  order: e.detail
305
312
  }
306
- tick().then(() => dispatch('change', schema))
307
313
  }}
308
314
  helperScript={{
309
315
  type: 'inline',
@@ -315,9 +321,6 @@ function updateDynSelectCode(functionName, lang = 'bun') {
315
321
  {diff}
316
322
  on:acceptChange
317
323
  on:rejectChange
318
- on:nestedChange={() => {
319
- dispatch('change', schema)
320
- }}
321
324
  {shouldDispatchChanges}
322
325
  bind:isValid
323
326
  noVariablePicker={noVariablePicker || customUi?.disableVariablePicker === true}
@@ -325,8 +328,8 @@ function updateDynSelectCode(functionName, lang = 'bun') {
325
328
 
326
329
  {@render runButton?.()}
327
330
 
328
- <div class="h-full">
329
- {#if dynSelectFunctions.length > 0}
331
+ {#if dynSelectFunctions.length > 0}
332
+ <div class="grow">
330
333
  <Section
331
334
  label="Dynamic select functions"
332
335
  collapsable={true}
@@ -373,8 +376,8 @@ function updateDynSelectCode(functionName, lang = 'bun') {
373
376
  {/key}
374
377
  </div>
375
378
  </Section>
376
- {/if}
377
- </div>
379
+ </div>
380
+ {/if}
378
381
  </div>
379
382
  </div>
380
383
  </Pane>
@@ -393,7 +396,7 @@ function updateDynSelectCode(functionName, lang = 'bun') {
393
396
  {#if jsonEnabled && customUi?.jsonOnly != true}
394
397
  <div class="w-full p-3 flex gap-4 justify-end items-center">
395
398
  {#if addPropertyInEditorTab}
396
- <AddPropertyV2 bind:schema on:change>
399
+ <AddPropertyV2 bind:schema>
397
400
  {#snippet trigger()}
398
401
  <Button color="light" size="xs" iconOnly startIcon={{ icon: Plus }} />
399
402
  {/snippet}
@@ -508,7 +511,7 @@ function updateDynSelectCode(functionName, lang = 'bun') {
508
511
  </div>
509
512
  {#if opened === argName}
510
513
  <div class="p-4 border-t">
511
- {#if !hiddenArgs.includes(argName) && Object.keys(schema?.properties ?? {}).includes(argName)}
514
+ {#if Object.keys(schema?.properties ?? {}).includes(argName)}
512
515
  {#if typeof args == 'object' && schema?.properties[argName]}
513
516
  <PropertyEditor
514
517
  bind:description={schema.properties[argName].description}
@@ -529,10 +532,6 @@ function updateDynSelectCode(functionName, lang = 'bun') {
529
532
  bind:order={schema.properties[argName].order}
530
533
  {isFlowInput}
531
534
  {isAppInput}
532
- on:change={() => {
533
- schema = $state.snapshot(schema)
534
- dispatch('change', schema)
535
- }}
536
535
  >
537
536
  {#snippet typeeditor()}
538
537
  {#if isFlowInput || isAppInput}
@@ -621,13 +620,9 @@ function updateDynSelectCode(functionName, lang = 'bun') {
621
620
  type: v
622
621
  }
623
622
  }
623
+ schema.properties = schema.properties
624
624
  }
625
625
  }
626
- on:selected={(e) => {
627
- schema = schema
628
- dispatch('change', schema)
629
- dispatch('schemaChange')
630
- }}
631
626
  >
632
627
  {#snippet children({ item })}
633
628
  {#each typeOptions as x}
@@ -641,6 +636,9 @@ function updateDynSelectCode(functionName, lang = 'bun') {
641
636
 
642
637
  {#if isFlowInput || isAppInput}
643
638
  <FlowPropertyEditor
639
+ onDrawerClose={() => {
640
+ dndType = generateRandomString()
641
+ }}
644
642
  bind:defaultValue={schema.properties[argName].default}
645
643
  {variableEditor}
646
644
  {itemPicker}
@@ -671,12 +669,6 @@ function updateDynSelectCode(functionName, lang = 'bun') {
671
669
  (x) => x !== argName
672
670
  )
673
671
  }
674
- dispatch('change', schema)
675
- }}
676
- on:schemaChange={(e) => {
677
- schema = $state.snapshot(schema)
678
- dispatch('change', schema)
679
- dispatch('schemaChange')
680
672
  }}
681
673
  />
682
674
  {/if}
@@ -701,7 +693,6 @@ function updateDynSelectCode(functionName, lang = 'bun') {
701
693
  on:change={() => {
702
694
  try {
703
695
  schema = JSON.parse(schemaString)
704
- dispatch('change', schema)
705
696
  error = ''
706
697
  } catch (err) {
707
698
  error = err.message
@@ -16,7 +16,6 @@ interface Props {
16
16
  isAppInput?: boolean;
17
17
  displayWebhookWarning?: boolean;
18
18
  onlyMaskPassword?: boolean;
19
- dndType?: string | undefined;
20
19
  editTab: 'inputEditor' | 'history' | 'savedInputs' | 'json' | 'captures' | 'firstStepInputs' | undefined;
21
20
  previewSchema?: Record<string, any> | undefined;
22
21
  editPanelInitialSize?: number | undefined;
@@ -36,6 +35,8 @@ interface Props {
36
35
  addProperty?: import('svelte').Snippet;
37
36
  runButton?: import('svelte').Snippet;
38
37
  extraTab?: import('svelte').Snippet;
38
+ schemaFormClassName?: string;
39
+ onChange?: (args: Record<string, any>) => void;
39
40
  }
40
41
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
41
42
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
@@ -53,9 +54,7 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
53
54
  declare const EditableSchemaForm: $$__sveltets_2_IsomorphicComponent<Props, {
54
55
  acceptChange: CustomEvent<any>;
55
56
  rejectChange: CustomEvent<any>;
56
- change: CustomEvent<any>;
57
57
  delete: CustomEvent<any>;
58
- schemaChange: CustomEvent<any>;
59
58
  editPanelSizeChanged: CustomEvent<any>;
60
59
  } & {
61
60
  [evt: string]: CustomEvent<any>;