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
@@ -7,18 +7,16 @@ import { Pane, Splitpanes } from 'svelte-splitpanes';
7
7
  import { getContext } from 'svelte';
8
8
  import { getStringError } from './copilot/chat/utils';
9
9
  import AiAgentLogViewer from './AIAgentLogViewer.svelte';
10
- let { lang, editor, diffEditor, loopStatus = undefined, lastJob = undefined, scriptProgress = $bindable(undefined), testJob = undefined, mod, testIsLoading = false, disableMock = false, disableHistory = false, onUpdateMock, loadingJob = false, tagLabel = undefined } = $props();
11
- const { testSteps } = getContext('FlowEditorContext');
12
- let selectedJob = $state(undefined);
13
- let preview = $state(undefined);
10
+ let { lang, editor, diffEditor, loopStatus = undefined, scriptProgress = $bindable(undefined), testJob = undefined, mod, testIsLoading = false, disableMock = false, disableHistory = false, onUpdateMock, loadingJob = false, tagLabel = undefined } = $props();
11
+ const { stepsInputArgs } = getContext('FlowEditorContext');
14
12
  let jobProgressReset = $state(() => { });
15
- $effect(() => {
16
- if (preview != undefined && testJob) {
17
- preview = undefined;
18
- }
19
- });
20
- let forceJson = $state(false);
13
+ let outputPickerInner = $state(undefined);
14
+ export function getOutputPickerInner() {
15
+ return outputPickerInner;
16
+ }
17
+ const selectedJob = $derived.by(() => outputPickerInner?.getSelectedJob?.() ?? undefined);
21
18
  const logJob = $derived(testJob ?? selectedJob);
19
+ const preview = $derived.by(() => outputPickerInner?.getPreview?.());
22
20
  </script>
23
21
 
24
22
  <Splitpanes horizontal>
@@ -33,7 +31,6 @@ const logJob = $derived(testJob ?? selectedJob);
33
31
  {/if}
34
32
 
35
33
  <OutputPickerInner
36
- {lastJob}
37
34
  {testJob}
38
35
  fullResult
39
36
  moduleId={mod.id}
@@ -41,24 +38,22 @@ const logJob = $derived(testJob ?? selectedJob);
41
38
  getLogs
42
39
  {onUpdateMock}
43
40
  mock={mod.mock}
44
- bind:forceJson
45
- bind:selectedJob
46
41
  isLoading={testIsLoading || loadingJob}
47
- bind:preview
48
42
  path={`path` in mod.value ? mod.value.path : ''}
49
43
  {loopStatus}
50
44
  {disableMock}
51
45
  {disableHistory}
46
+ bind:this={outputPickerInner}
52
47
  >
53
48
  {#snippet copilot_fix()}
54
- {#if lang && editor && diffEditor && testSteps.getStepArgs(mod.id) && selectedJob?.type === 'CompletedJob' && !selectedJob.success && getStringError(selectedJob.result)}
49
+ {#if lang && editor && diffEditor && stepsInputArgs.getStepArgs(mod.id) && selectedJob?.type === 'CompletedJob' && !selectedJob.success && getStringError(selectedJob.result)}
55
50
  <ScriptFix {lang} />
56
51
  {/if}
57
52
  {/snippet}
58
53
  </OutputPickerInner>
59
54
  </Pane>
60
55
  <Pane size={35} minSize={10}>
61
- {#if (mod.mock?.enabled && preview != 'job') || preview == 'mock'}
56
+ {#if (mod.mock?.enabled && preview !== 'job' && testJob?.type !== 'QueuedJob') || preview === 'mock'}
62
57
  <LogViewer
63
58
  small
64
59
  content={undefined}
@@ -82,9 +77,9 @@ const logJob = $derived(testJob ?? selectedJob);
82
77
  jobId={logJob?.id}
83
78
  duration={logJob?.['duration_ms']}
84
79
  mem={logJob?.['mem_peak']}
85
- content={logJob?.logs}
80
+ content={logJob?.['logs']}
86
81
  isLoading={(testIsLoading && logJob?.['running'] == false) || loadingJob}
87
- tag={logJob?.tag}
82
+ tag={logJob?.['tag']}
88
83
  {tagLabel}
89
84
  />
90
85
  {/if}
@@ -5,17 +5,17 @@ import { getContext } from 'svelte';
5
5
  import JobLoader, {} from './JobLoader.svelte';
6
6
  import { getStepHistoryLoaderContext } from './stepHistoryLoader.svelte';
7
7
  import { loadSchemaFromModule } from './flows/flowInfers';
8
- let { mod, testJob = $bindable(undefined), testIsLoading = $bindable(false), noEditor = false, scriptProgress = $bindable(undefined) } = $props();
9
- const { flowStore, flowStateStore, pathStore, testSteps, previewArgs, modulesTestStates } = getContext('FlowEditorContext');
8
+ let { mod, testJob = $bindable(undefined), testIsLoading = $bindable(false), noEditor = false, scriptProgress = $bindable(undefined), onJobDone } = $props();
9
+ const { flowStore, flowStateStore, pathStore, stepsInputArgs, previewArgs, modulesTestStates } = getContext('FlowEditorContext');
10
10
  let jobLoader = $state(undefined);
11
11
  let jobProgressReset = () => { };
12
12
  let stepHistoryLoader = getStepHistoryLoaderContext();
13
13
  export function runTestWithStepArgs() {
14
- runTest(testSteps.getStepArgs(mod.id));
14
+ runTest(stepsInputArgs.getStepArgs(mod.id));
15
15
  }
16
16
  export function loadArgsAndRunTest() {
17
- testSteps?.updateStepArgs(mod.id, flowStateStore.val, flowStore?.val, previewArgs?.val);
18
- runTest(testSteps.getStepArgs(mod.id));
17
+ stepsInputArgs?.updateStepArgs(mod.id, flowStateStore.val, flowStore?.val, previewArgs?.val);
18
+ runTest(stepsInputArgs.getStepArgs(mod.id));
19
19
  }
20
20
  export async function runTest(args) {
21
21
  // Not defined if JobProgressBar not loaded
@@ -92,6 +92,7 @@ function jobDone(testJob) {
92
92
  if (modulesTestStates.states[mod.id]) {
93
93
  modulesTestStates.states[mod.id].testJob = testJob;
94
94
  }
95
+ onJobDone?.();
95
96
  }
96
97
  export function cancelJob() {
97
98
  modulesTestStates.states[mod.id]?.cancel?.();
@@ -5,6 +5,7 @@ interface Props {
5
5
  testIsLoading?: boolean;
6
6
  noEditor?: boolean;
7
7
  scriptProgress?: any;
8
+ onJobDone?: () => void;
8
9
  }
9
10
  declare const ModuleTest: import("svelte").Component<Props, {
10
11
  runTestWithStepArgs: () => void;
@@ -1,10 +1,12 @@
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';
5
6
  import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
6
7
  import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
7
8
  let { value = $bindable() } = $props();
9
+ let lastValues = { domain: undefined, custom: undefined };
8
10
  function changeDomain(domain, custom) {
9
11
  if (value) {
10
12
  let baseUrl = custom ? `https://${domain}` : `https://${domain}.okta.com`;
@@ -25,8 +27,11 @@ function changeDomain(domain, custom) {
25
27
  }
26
28
  }
27
29
  let enabled = $derived(value != undefined);
28
- $effect(() => {
29
- changeDomain(value?.['domain'], value?.['custom']);
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
 
@@ -1,4 +1,4 @@
1
- <script context="module">
1
+ <script module>
2
2
  import { tick } from 'svelte'
3
3
 
4
4
  export function portal(el, options) {
@@ -50,13 +50,17 @@
50
50
 
51
51
  <script>
52
52
  /**
53
- * DOM Element or CSS Selector
54
- * @type { HTMLElement|string}
53
+ * @typedef {Object} Props
54
+ * @property { HTMLElement|string} [target] - DOM Element or CSS Selector
55
+ * @property {any} [name]
56
+ * @property {string|undefined} [class]
57
+ * @property {import('svelte').Snippet} [children]
55
58
  */
56
- export let target = 'body'
57
- export let name = undefined
59
+
60
+ /** @type {Props} */
61
+ let { target = 'body', name = undefined, class: clazz = undefined, children } = $props()
58
62
  </script>
59
63
 
60
- <div use:portal={{ target, name }} hidden class={$$props.class}>
61
- <slot />
64
+ <div use:portal={{ target, name }} hidden class={clazz}>
65
+ {@render children?.()}
62
66
  </div>
@@ -3,45 +3,25 @@ export function portal(el: any, options: any): {
3
3
  destroy: () => void;
4
4
  };
5
5
  export default Portal;
6
- type Portal = SvelteComponent<$$__sveltets_2_PropsWithChildren<{
7
- [x: string]: any;
8
- name?: any;
9
- target?: string | HTMLElement | undefined;
10
- }, {
11
- default: {};
12
- }>, {
13
- [evt: string]: CustomEvent<any>;
14
- }, {
15
- default: {};
16
- }> & {
17
- $$bindings?: string | undefined;
6
+ type Portal = {
7
+ $on?(type: string, callback: (e: any) => void): () => void;
8
+ $set?(props: Partial<Props>): void;
18
9
  };
19
- declare const Portal: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
20
- [x: string]: any;
10
+ declare const Portal: import("svelte").Component<{
11
+ /**
12
+ * - DOM Element or CSS Selector
13
+ */
14
+ target?: string | HTMLElement | undefined;
21
15
  name?: any;
16
+ class?: string | undefined;
17
+ children?: import("svelte").Snippet<[]> | undefined;
18
+ }, {}, "">;
19
+ type Props = {
20
+ /**
21
+ * - DOM Element or CSS Selector
22
+ */
22
23
  target?: string | HTMLElement | undefined;
23
- }, {
24
- default: {};
25
- }>, {
26
- [evt: string]: CustomEvent<any>;
27
- }, {
28
- default: {};
29
- }, {}, string>;
30
- type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
31
- default: any;
32
- } ? Props extends Record<string, never> ? any : {
33
- children?: any;
34
- } : {});
35
- 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> {
36
- new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
37
- $$bindings?: Bindings;
38
- } & Exports;
39
- (internal: unknown, props: Props & {
40
- $$events?: Events;
41
- $$slots?: Slots;
42
- }): Exports & {
43
- $set?: any;
44
- $on?: any;
45
- };
46
- z_$$bindings?: Bindings;
47
- }
24
+ name?: any;
25
+ class?: string | undefined;
26
+ children?: import("svelte").Snippet<[]> | undefined;
27
+ };
@@ -25,7 +25,7 @@ export async function setArgs(nargs) {
25
25
  export function run() {
26
26
  runAction(scheduledForStr, args ?? {}, invisible_to_owner, overrideTag);
27
27
  }
28
- let { runnable = $bindable(), runAction, buttonText = 'Run', schedulable = true, detailed = true, autofocus = false, topButton = false, loading = false, noVariablePicker = false, viewKeybinding = false, scheduledForStr = $bindable(), invisible_to_owner = $bindable(), overrideTag = $bindable(), args = $bindable(), jsonView = false, isValid = $bindable(true) } = $props();
28
+ let { runnable, runAction, buttonText = 'Run', schedulable = true, detailed = true, autofocus = false, topButton = false, loading = false, noVariablePicker = false, viewKeybinding = false, scheduledForStr = $bindable(), invisible_to_owner = $bindable(), overrideTag = $bindable(), args = $bindable(), jsonView = false, isValid = $bindable(true) } = $props();
29
29
  $effect.pre(() => {
30
30
  if (args == undefined) {
31
31
  args = {};
@@ -238,7 +238,7 @@ $effect(() => {
238
238
  bind:scheduledForStr
239
239
  bind:invisible_to_owner
240
240
  bind:overrideTag
241
- bind:runnable
241
+ {runnable}
242
242
  />
243
243
  {/snippet}
244
244
  </Popover>
@@ -33,6 +33,6 @@ declare const RunForm: import("svelte").Component<Props, {
33
33
  setArgs: (nargs: Record<string, any>) => Promise<void>;
34
34
  run: () => void;
35
35
  setCode: (code: string) => void;
36
- }, "args" | "invisible_to_owner" | "runnable" | "isValid" | "scheduledForStr" | "overrideTag">;
36
+ }, "args" | "invisible_to_owner" | "isValid" | "scheduledForStr" | "overrideTag">;
37
37
  type RunForm = ReturnType<typeof RunForm>;
38
38
  export default RunForm;
@@ -53,7 +53,19 @@ async function loadWorkerGroups() {
53
53
  {#if !$userStore?.operator}
54
54
  {#if $workerTags && $workerTags?.length > 0}
55
55
  <div class="w-full">
56
- <select placeholder="Worker group" bind:value={overrideTag}>
56
+ <select
57
+ placeholder="Worker group"
58
+ bind:value={
59
+ () => overrideTag ?? '',
60
+ (v) => {
61
+ if (v == '') {
62
+ overrideTag = undefined
63
+ } else {
64
+ overrideTag = v
65
+ }
66
+ }
67
+ }
68
+ >
57
69
  {#if overrideTag}
58
70
  <option value="">reset to default</option>
59
71
  {:else}
@@ -14,7 +14,7 @@ import ArgInput from './ArgInput.svelte';
14
14
  import { createEventDispatcher, untrack } from 'svelte';
15
15
  import { deepEqual } from 'fast-equals';
16
16
  import { dragHandleZone } from '@windmill-labs/svelte-dnd-action';
17
- let { schema = $bindable(), hiddenArgs = [], schemaFieldTooltip = {}, args = $bindable(undefined), disabledArgs = [], disabled = false, isValid = $bindable(true), autofocus = false, defaultValues = {}, shouldHideNoInputs = false, compact = false, linkedSecret = $bindable(undefined), linkedSecretCandidates = undefined, noVariablePicker = false, flexWrap = false, noDelete = false, prettifyHeader = false, disablePortal = false, showSchemaExplorer = false, showReset = false, onlyMaskPassword = false, dndConfig = undefined, items = undefined, helperScript = undefined, lightHeader = false, diff = {}, nestedParent = undefined, shouldDispatchChanges = false, nestedClasses = '', dynamicEnums = {}, largeGap = false, css = undefined, displayType = true, appPath = undefined, className = '', computeS3ForceViewerPolicies = undefined, workspace = undefined, actions } = $props();
17
+ let { schema = $bindable(), hiddenArgs = [], schemaFieldTooltip = {}, args = $bindable(undefined), disabledArgs = [], disabled = false, isValid = $bindable(true), autofocus = false, defaultValues = {}, shouldHideNoInputs = false, compact = false, linkedSecret = $bindable(undefined), linkedSecretCandidates = undefined, noVariablePicker = false, flexWrap = false, noDelete = false, prettifyHeader = false, disablePortal = false, showSchemaExplorer = false, showReset = false, onlyMaskPassword = false, dndConfig = undefined, items = undefined, helperScript = undefined, lightHeader = false, diff = {}, nestedParent = undefined, shouldDispatchChanges = false, nestedClasses = '', dynamicEnums = {}, largeGap = false, css = undefined, displayType = true, appPath = undefined, className = '', computeS3ForceViewerPolicies = undefined, workspace = undefined, actions: actions_render = undefined } = $props();
18
18
  const dispatch = createEventDispatcher();
19
19
  let inputCheck = $state({});
20
20
  export function setDefaults() {
@@ -135,7 +135,6 @@ $effect.pre(() => {
135
135
  $effect.pre(() => {
136
136
  isValid = allTrue(inputCheck ?? {});
137
137
  });
138
- const actions_render = $derived(actions);
139
138
  </script>
140
139
 
141
140
  {#if showReset}
@@ -908,7 +908,7 @@ async function loadWorkerTags() {
908
908
  >
909
909
  <LanguageIcon {lang} />
910
910
  <span class="ml-2 py-2 truncate">{label}</span>
911
- {#if lang === 'nu' || lang === 'ruby'}
911
+ {#if lang === 'ruby'}
912
912
  <span class="text-tertiary !text-xs"> BETA </span>
913
913
  {/if}
914
914
  </Button>
@@ -35,6 +35,7 @@ import { aiChatManager, AIMode } from './copilot/chat/AIChatManager.svelte';
35
35
  import { triggerableByAI } from '../actions/triggerableByAI.svelte';
36
36
  import AssetsDropdownButton from './assets/AssetsDropdownButton.svelte';
37
37
  import { assetEq } from './assets/lib';
38
+ import { editor as meditor } from 'monaco-editor';
38
39
  let { schema = $bindable(), code = $bindable(), path, lang, kind = undefined, template = 'script', tag, fixedOverflowWidgets = true, noSyncFromGithub = false, editor = $bindable(undefined), diffEditor = $bindable(undefined), collabMode = false, edit = true, noHistory = false, saveToWorkspace = false, watchChanges = false, customUi = undefined, args = $bindable(), selectedTab = $bindable('main'), hasPreprocessor = $bindable(false), captureTable = $bindable(undefined), showCaptures = true, stablePathForCaptures = '', lastSavedCode = undefined, lastDeployedCode = undefined, disableAi = false, assets = $bindable(), editor_bar_right } = $props();
39
40
  $effect.pre(() => {
40
41
  if (schema == undefined) {
@@ -273,7 +274,7 @@ function getError(job) {
273
274
  function showDiffMode() {
274
275
  diffMode = true;
275
276
  diffEditor?.setOriginal(lastDeployedCode ?? '');
276
- diffEditor?.setModified(editor?.getCode() ?? '');
277
+ diffEditor?.setModifiedModel(editor?.getModel());
277
278
  diffEditor?.show();
278
279
  editor?.hide();
279
280
  }
@@ -493,16 +494,29 @@ $effect(() => {
493
494
  {args}
494
495
  />
495
496
  <DiffEditor
496
- class="h-full"
497
+ className="h-full"
497
498
  bind:this={diffEditor}
499
+ modifiedModel={editor?.getModel() as meditor.ITextModel}
498
500
  automaticLayout
499
501
  defaultLang={scriptLangToEditorLang(lang)}
500
502
  {fixedOverflowWidgets}
501
- showButtons={diffMode}
502
- on:hideDiffMode={hideDiffMode}
503
- on:seeHistory={() => {
504
- showHistoryDrawer = true
505
- }}
503
+ buttons={diffMode
504
+ ? [
505
+ {
506
+ text: 'See changes history',
507
+ onClick: () => {
508
+ showHistoryDrawer = true
509
+ }
510
+ },
511
+ {
512
+ text: 'Quit diff mode',
513
+ onClick: () => {
514
+ hideDiffMode()
515
+ },
516
+ color: 'red'
517
+ }
518
+ ]
519
+ : []}
506
520
  />
507
521
  {/key}
508
522
  </div>
@@ -289,7 +289,6 @@ async function loadMonaco() {
289
289
  return;
290
290
  }
291
291
  try {
292
- console.log('fixedOverflowWidgets', fixedOverflowWidgets);
293
292
  editor = meditor.create(divEl, {
294
293
  ...editorConfig(code ?? '', lang, automaticLayout, fixedOverflowWidgets, $relativeLineNumbers),
295
294
  model,
@@ -121,11 +121,11 @@ async function getMenuElements() {
121
121
  <Disposable
122
122
  {id}
123
123
  bind:this={disposable}
124
- on:open={() => {
124
+ onOpen={() => {
125
125
  outputs?.open.set(true)
126
126
  onOpenRecomputeIds?.forEach((id) => $runnableComponents?.[id]?.cb?.map((cb) => cb?.()))
127
127
  }}
128
- on:close={() => {
128
+ onClose={() => {
129
129
  outputs?.open.set(false)
130
130
  onCloseRecomputeIds?.forEach((id) => $runnableComponents?.[id]?.cb?.map((cb) => cb?.()))
131
131
  }}
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">import { getContext } from 'svelte';
2
2
  import { handleEscape, handlePaste, handleArrowUp, handleCut, handleCopy, down, right, left } from './componentCallbacks.svelte';
3
- const { history, movingcomponents, jobsDrawerOpen } = getContext('AppEditorContext');
3
+ const { history, movingcomponents, jobsDrawerOpen, runnableJobEditorPanel } = getContext('AppEditorContext');
4
4
  const { app, selectedComponent, focusedGrid, componentControl } = getContext('AppViewerContext');
5
5
  const ctx = {
6
6
  history,
@@ -16,7 +16,8 @@ function keydown(event) {
16
16
  // Ignore keydown events if the user is typing in monaco
17
17
  let classes = event.target?.['className'];
18
18
  if ((typeof classes === 'string' && classes.includes('inputarea')) ||
19
- ['INPUT', 'TEXTAREA'].includes(document.activeElement?.tagName)) {
19
+ ['INPUT', 'TEXTAREA'].includes(document.activeElement?.tagName) ||
20
+ $runnableJobEditorPanel.focused) {
20
21
  return;
21
22
  }
22
23
  switch (event.key) {
@@ -350,7 +350,7 @@ let extraLib = $derived(isFrontend && worldStore
350
350
  <DiffEditor
351
351
  open={false}
352
352
  bind:this={diffEditor}
353
- class="h-full"
353
+ className="h-full"
354
354
  automaticLayout
355
355
  fixedOverflowWidgets
356
356
  defaultLang={scriptLangToEditorLang(inlineScript?.language)}
@@ -79,7 +79,6 @@ function refresh(runnable) {
79
79
  if (deepEqual(runnable, lastRunnable)) {
80
80
  return;
81
81
  }
82
- console.log('runnable', runnable);
83
82
  notFound = false;
84
83
  if (runnable.runType == 'script') {
85
84
  refreshScript(runnable);
@@ -218,6 +218,7 @@ $effect(() => {
218
218
  $effect(() => {
219
219
  items != undefined && handleItemsChange();
220
220
  });
221
+ const rnd = generateRandomString();
221
222
  </script>
222
223
 
223
224
  <div class="flex gap-2 flex-col mt-2 w-full">
@@ -267,7 +268,8 @@ $effect(() => {
267
268
  use:dragHandleZone={{
268
269
  items,
269
270
  flipDurationMs,
270
- dropTargetStyle: {}
271
+ dropTargetStyle: {},
272
+ type: rnd
271
273
  }}
272
274
  onconsider={handleConsider}
273
275
  onfinalize={handleFinalize}
@@ -92,6 +92,7 @@ function addCondition() {
92
92
  });
93
93
  component.numberOfSubgrids = items.length + 1;
94
94
  }
95
+ const rnd = generateRandomString();
95
96
  </script>
96
97
 
97
98
  <PanelSection title={'Conditions'}>
@@ -107,7 +108,8 @@ function addCondition() {
107
108
  use:dragHandleZone={{
108
109
  items: items,
109
110
  flipDurationMs: 200,
110
- dropTargetStyle: {}
111
+ dropTargetStyle: {},
112
+ type: rnd
111
113
  }}
112
114
  onconsider={handleConsider}
113
115
  onfinalize={handleFinalize}
@@ -94,6 +94,7 @@ function handleFinalize(e) {
94
94
  }
95
95
  let resolvedPaths = $state([]);
96
96
  let resolvedLabels = $state([]);
97
+ const rnd = generateRandomString();
97
98
  </script>
98
99
 
99
100
  <PanelSection
@@ -107,7 +108,8 @@ let resolvedLabels = $state([]);
107
108
  use:dragHandleZone={{
108
109
  items,
109
110
  flipDurationMs: 200,
110
- dropTargetStyle: {}
111
+ dropTargetStyle: {},
112
+ type: rnd
111
113
  }}
112
114
  onconsider={handleConsider}
113
115
  onfinalize={handleFinalize}
@@ -112,6 +112,7 @@ function handleFinalize(e) {
112
112
  });
113
113
  }
114
114
  }
115
+ const rnd = generateRandomString();
115
116
  </script>
116
117
 
117
118
  <PanelSection title={`${word}s ${tabs && tabs.length > 0 ? `(${tabs.length})` : ''}`}>
@@ -123,7 +124,8 @@ function handleFinalize(e) {
123
124
  use:dragHandleZone={{
124
125
  items,
125
126
  flipDurationMs: 200,
126
- dropTargetStyle: {}
127
+ dropTargetStyle: {},
128
+ type: rnd
127
129
  }}
128
130
  onconsider={handleConsider}
129
131
  onfinalize={handleFinalize}
@@ -3,7 +3,7 @@ import { addWhitespaceBeforeCapitals, capitalize } from '../../../../utils';
3
3
  import { cleanseOneOfConfiguration } from '../appUtils';
4
4
  import InputsSpecEditor from './InputsSpecEditor.svelte';
5
5
  let { key, oneOf = $bindable(), inputSpecsConfiguration, labels, shouldCapitalize, id, resourceOnly, tooltip, disabledOptions = [], acceptSelf = false, recomputeOnInputChanged = true, showOnDemandOnlyToggle = true } = $props();
6
- $effect(() => {
6
+ $effect.pre(() => {
7
7
  if (oneOf == undefined) {
8
8
  oneOf = { configuration: {}, selected: '' };
9
9
  }
@@ -35,59 +35,61 @@ function getValueOfDeprecated(obj) {
35
35
  </script>
36
36
 
37
37
  <div class="p-2 border">
38
- <div class="mb-2 text-sm font-semibold">
39
- {capitalize(addWhitespaceBeforeCapitals(key))}&nbsp;
40
- {#if tooltip}
41
- <Tooltip light>{tooltip}</Tooltip>
42
- {/if}
43
- </div>
44
- <select
45
- class="w-full border border-gray-300 rounded-md p-2"
46
- value={oneOf.selected}
47
- onchange={(e) => {
48
- oneOf = { ...oneOf, selected: e?.target?.['value'] }
49
- }}
50
- >
51
- {#each Object.keys(inputSpecsConfiguration ?? {}) as choice}
52
- {#if (!disabledOptions.includes(choice) && !getValueOfDeprecated(inputSpecsConfiguration[choice])) || oneOf.selected === choice}
53
- <option value={choice}>{labels?.[choice] ?? choice}</option>
38
+ {#if oneOf}
39
+ <div class="mb-2 text-sm font-semibold">
40
+ {capitalize(addWhitespaceBeforeCapitals(key))}&nbsp;
41
+ {#if tooltip}
42
+ <Tooltip light>{tooltip}</Tooltip>
54
43
  {/if}
55
- {/each}
56
- </select>
57
- {#if oneOf.selected !== 'none' && oneOf.selected !== 'errorOverlay'}
58
- <div class="mb-4"></div>
59
- {/if}
60
- <div class="flex flex-col gap-4">
61
- {#each Object.keys(inputSpecsConfiguration?.[oneOf.selected] ?? {}) as nestedKey}
62
- {@const config = {
63
- ...inputSpecsConfiguration?.[oneOf.selected]?.[nestedKey],
64
- ...oneOf.configuration?.[oneOf.selected]?.[nestedKey]
44
+ </div>
45
+ <select
46
+ class="w-full border border-gray-300 rounded-md p-2"
47
+ value={oneOf.selected}
48
+ onchange={(e) => {
49
+ oneOf = { ...oneOf, selected: e?.target?.['value'] }
65
50
  }}
51
+ >
52
+ {#each Object.keys(inputSpecsConfiguration ?? {}) as choice}
53
+ {#if (!disabledOptions.includes(choice) && !getValueOfDeprecated(inputSpecsConfiguration[choice])) || oneOf.selected === choice}
54
+ <option value={choice}>{labels?.[choice] ?? choice}</option>
55
+ {/if}
56
+ {/each}
57
+ </select>
58
+ {#if oneOf.selected !== 'none' && oneOf.selected !== 'errorOverlay'}
59
+ <div class="mb-4"></div>
60
+ {/if}
61
+ <div class="flex flex-col gap-4">
62
+ {#each Object.keys(inputSpecsConfiguration?.[oneOf.selected] ?? {}) as nestedKey}
63
+ {@const config = {
64
+ ...inputSpecsConfiguration?.[oneOf.selected]?.[nestedKey],
65
+ ...oneOf.configuration?.[oneOf.selected]?.[nestedKey]
66
+ }}
66
67
 
67
- {#if config && oneOf.configuration[oneOf.selected]}
68
- <InputsSpecEditor
69
- {recomputeOnInputChanged}
70
- key={nestedKey}
71
- bind:componentInput={oneOf.configuration[oneOf.selected][nestedKey]}
72
- {id}
73
- {acceptSelf}
74
- userInputEnabled={false}
75
- {shouldCapitalize}
76
- {resourceOnly}
77
- fieldType={config?.['fieldType']}
78
- subFieldType={config?.['subFieldType']}
79
- format={config?.['format']}
80
- selectOptions={config?.['selectOptions']}
81
- placeholder={config?.['placeholder']}
82
- customTitle={config?.['customTitle']}
83
- tooltip={config?.['tooltip']}
84
- fileUpload={config?.['fileUpload']}
85
- loading={config?.['loading']}
86
- documentationLink={config?.['documentationLink']}
87
- allowTypeChange={config?.['allowTypeChange']}
88
- {showOnDemandOnlyToggle}
89
- />
90
- {/if}
91
- {/each}
92
- </div>
68
+ {#if config && oneOf.configuration[oneOf.selected]}
69
+ <InputsSpecEditor
70
+ {recomputeOnInputChanged}
71
+ key={nestedKey}
72
+ bind:componentInput={oneOf.configuration[oneOf.selected][nestedKey]}
73
+ {id}
74
+ {acceptSelf}
75
+ userInputEnabled={false}
76
+ {shouldCapitalize}
77
+ {resourceOnly}
78
+ fieldType={config?.['fieldType']}
79
+ subFieldType={config?.['subFieldType']}
80
+ format={config?.['format']}
81
+ selectOptions={config?.['selectOptions']}
82
+ placeholder={config?.['placeholder']}
83
+ customTitle={config?.['customTitle']}
84
+ tooltip={config?.['tooltip']}
85
+ fileUpload={config?.['fileUpload']}
86
+ loading={config?.['loading']}
87
+ documentationLink={config?.['documentationLink']}
88
+ allowTypeChange={config?.['allowTypeChange']}
89
+ {showOnDemandOnlyToggle}
90
+ />
91
+ {/if}
92
+ {/each}
93
+ </div>
94
+ {/if}
93
95
  </div>
@@ -72,6 +72,7 @@ function handleFinalize(e) {
72
72
  const { items: newItems } = e.detail;
73
73
  items = newItems;
74
74
  }
75
+ const rnd = generateRandomString();
75
76
  </script>
76
77
 
77
78
  {#if components}
@@ -101,7 +102,8 @@ function handleFinalize(e) {
101
102
  use:dragHandleZone={{
102
103
  items,
103
104
  flipDurationMs: 200,
104
- dropTargetStyle: {}
105
+ dropTargetStyle: {},
106
+ type: rnd
105
107
  }}
106
108
  onconsider={handleConsider}
107
109
  onfinalize={handleFinalize}