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
@@ -1,4 +1,4 @@
1
- import type { OpenFlow } from '../../gen';
1
+ import type { Job, OpenFlow } from '../../gen';
2
2
  import type { History } from '../../history.svelte';
3
3
  import type { Writable } from 'svelte/store';
4
4
  import type ScriptEditorDrawer from './content/ScriptEditorDrawer.svelte';
@@ -7,12 +7,13 @@ import type { FlowBuilderWhitelabelCustomUi } from '../custom_ui';
7
7
  import type Editor from '../Editor.svelte';
8
8
  import type SimpleEditor from '../SimpleEditor.svelte';
9
9
  import type { StateStore } from '../../utils';
10
- import type { TestSteps } from './testSteps.svelte';
10
+ import type { StepsInputArgs } from './stepsInputArgs.svelte';
11
11
  import type { Asset, AssetWithAccessType } from '../assets/lib';
12
12
  import type S3FilePicker from '../S3FilePicker.svelte';
13
13
  import type DbManagerDrawer from '../DBManagerDrawer.svelte';
14
14
  import type ResourceEditorDrawer from '../ResourceEditorDrawer.svelte';
15
15
  import type { ModulesTestStates } from '../modulesTest.svelte';
16
+ import type { ButtonProp } from '../DiffEditor.svelte';
16
17
  export type FlowInput = Record<string, {
17
18
  flowStepWarnings?: Record<string, {
18
19
  message: string;
@@ -38,6 +39,8 @@ export type CurrentEditor = (({
38
39
  hideDiffMode: () => void;
39
40
  diffMode: boolean;
40
41
  lastDeployedCode: string | undefined;
42
+ setDiffOriginal?: (code: string) => void;
43
+ setDiffButtons?: (buttons: ButtonProp[]) => void;
41
44
  } | {
42
45
  type: 'iterator';
43
46
  editor: SimpleEditor;
@@ -57,7 +60,7 @@ export type FlowEditorContext = {
57
60
  flowStore: StateStore<ExtendedOpenFlow>;
58
61
  flowInputEditorState: Writable<FlowInputEditorState>;
59
62
  flowStateStore: StateStore<FlowState>;
60
- testSteps: TestSteps;
63
+ stepsInputArgs: StepsInputArgs;
61
64
  saveDraft: () => void;
62
65
  initialPathStore: Writable<string>;
63
66
  fakeInitialPath: string;
@@ -79,3 +82,13 @@ export type FlowGraphAssetContext = StateStore<{
79
82
  additionalAssetsMap: Record<string, AssetWithAccessType[]>;
80
83
  computeAssetsCount: (asset: Asset) => number;
81
84
  }>;
85
+ export type OutputViewerJob = ((Job | {
86
+ id: string;
87
+ result: unknown;
88
+ type: 'CompletedJob';
89
+ workspace_id: string;
90
+ success: boolean;
91
+ }) & {
92
+ result_stream?: string;
93
+ result?: unknown;
94
+ }) | undefined;
@@ -42,6 +42,9 @@ export function evalValue(k, mod, pickableProperties, showError) {
42
42
  v = undefined;
43
43
  }
44
44
  }
45
+ if (v === NEVER_TESTED_THIS_FAR) {
46
+ v = undefined;
47
+ }
45
48
  return v;
46
49
  }
47
50
  export function filteredContentForExport(flow) {
@@ -303,7 +303,7 @@ let graph = $derived.by(() => {
303
303
  suspendStatus,
304
304
  flowHasChanged,
305
305
  additionalAssetsMap: flowGraphAssetsCtx?.val.additionalAssetsMap
306
- }, untrack(() => failureModule), untrack(() => preprocessorModule), eventHandler, success, $useDataflow, untrack(() => $selectedId), moving, simplifiableFlow, triggerNode ? path : undefined, expandedSubflows);
306
+ }, untrack(() => failureModule), preprocessorModule, eventHandler, success, $useDataflow, untrack(() => $selectedId), moving, simplifiableFlow, triggerNode ? path : undefined, expandedSubflows);
307
307
  });
308
308
  $effect(() => {
309
309
  ;
@@ -7,7 +7,7 @@ export const BELOW_ADDITIONAL_OFFSET = 19;
7
7
  export const AI_TOOL_CALL_PREFIX = '_wm_ai_agent_tool_call';
8
8
  export const AI_TOOL_MESSAGE_PREFIX = '_wm_ai_agent_message';
9
9
  const ROW_WIDTH = 275;
10
- const NEW_TOOL_NODE_WIDTH = 40;
10
+ const NEW_TOOL_NODE_WIDTH = 50;
11
11
  const MAX_TOOLS_PER_ROW = 2;
12
12
  let computeAIToolNodesCache;
13
13
  export function getToolCallId(idx, agentModuleId, moduleId) {
@@ -100,13 +100,13 @@ export function computeAIToolNodes(nodes, eventHandlers, insertable, flowModuleS
100
100
  id: `${node.id}-tool-${tool.id}`,
101
101
  width: inputToolWidth,
102
102
  position: {
103
- x: tools.length === 1
103
+ x: (tools.length === 1
104
104
  ? (ROW_WIDTH - inputToolWidth) / 2
105
105
  : (i + 1) % 2 === 0
106
106
  ? inputToolWidth + inputToolXGap
107
107
  : isLastRow && tools.length % 2 === 1
108
108
  ? (ROW_WIDTH - inputToolWidth) / 2
109
- : 0,
109
+ : 0) + node.data.offset,
110
110
  y: baseOffset +
111
111
  rowOffset *
112
112
  (agentActions
@@ -132,7 +132,7 @@ export function computeAIToolNodes(nodes, eventHandlers, insertable, flowModuleS
132
132
  parentId: node.id,
133
133
  width: NEW_TOOL_NODE_WIDTH,
134
134
  position: {
135
- x: (ROW_WIDTH - NEW_TOOL_NODE_WIDTH) / 2,
135
+ x: (ROW_WIDTH - NEW_TOOL_NODE_WIDTH) / 2 + node.data.offset,
136
136
  y: baseOffset + rowOffset
137
137
  }
138
138
  });
@@ -1,64 +1,81 @@
1
- <script lang="ts">import { twMerge } from 'tailwind-merge';
1
+ <script lang="ts">import { preventDefault, stopPropagation } from 'svelte/legacy';
2
+ import { twMerge } from 'tailwind-merge';
2
3
  import {} from '../../graphBuilder.svelte';
3
- import NodeWrapper from './NodeWrapper.svelte';
4
- import Popover from '../../../meltComponents/Popover.svelte';
5
4
  import InsertModuleInner from '../../../flows/map/InsertModuleInner.svelte';
5
+ import { Cross } from 'lucide-svelte';
6
+ import PopupV2 from '../../../common/popup/PopupV2.svelte';
7
+ import { flip, offset } from 'svelte-floating-ui/dom';
6
8
  let funcDesc = $state('');
7
9
  let { data } = $props();
10
+ let floatingConfig = {
11
+ strategy: 'fixed',
12
+ // @ts-ignore
13
+ placement: 'bottom-center',
14
+ middleware: [offset(8), flip()],
15
+ autoUpdate: true
16
+ };
8
17
  </script>
9
18
 
10
- <NodeWrapper>
11
- {#snippet children({ darkMode })}
12
- <!-- svelte-ignore a11y_no_static_element_interactions -->
13
- <Popover
14
- portal={null}
15
- usePointerDownOutside
19
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
20
+ <PopupV2 {floatingConfig} target="#flow-editor">
21
+ {#snippet button({ pointerdown, pointerup })}
22
+ <button
23
+ title={`Add 'tool'
24
+ }`}
25
+ type="button"
16
26
  class={twMerge(
17
- '!w-full text-2xs font-normal bg-surface h-6 pr-0.5 flex justify-center items-center rounded-sm text-tertiary border',
18
- 'hover:bg-surface-hover'
27
+ '!w-full h-6 flex items-center justify-center !outline-[1px] outline dark:outline-gray-500 outline-gray-300 text-secondary bg-surface focus:outline-none hover:bg-surface-hover rounded'
19
28
  )}
20
- placement="top"
29
+ onpointerdown={stopPropagation(
30
+ preventDefault(() => {
31
+ pointerdown()
32
+ })
33
+ )}
34
+ onpointerup={pointerup}
21
35
  >
22
- <svelte:fragment slot="trigger">+tool</svelte:fragment>
23
- <svelte:fragment slot="content" let:close>
24
- <InsertModuleInner
25
- bind:funcDesc
26
- scriptOnly
27
- on:close={() => {
28
- close()
29
- }}
30
- on:new={(e) => {
31
- data.eventHandlers.insert({
32
- index: -1, // ignored when agentId is set
33
- agentId: data.agentModuleId,
34
- ...e.detail
35
- })
36
- close()
37
- }}
38
- on:insert={(e) => {
39
- data.eventHandlers.insert({
40
- index: -1, // ignored when agentId is set
41
- agentId: data.agentModuleId,
42
- ...e.detail
43
- })
44
- close()
45
- }}
46
- on:pickScript={(e) => {
47
- data.eventHandlers.insert({
48
- index: -1, // ignored when agentId is set
49
- agentId: data.agentModuleId,
50
- kind: e.detail.kind,
51
- script: {
52
- ...e.detail,
53
- summary: e.detail.summary
54
- ? e.detail.summary.replace(/\s/, '_').replace(/[^a-zA-Z0-9_]/g, '')
55
- : e.detail.path.split('/').pop()
56
- }
57
- })
58
- close()
59
- }}
60
- />
61
- </svelte:fragment>
62
- </Popover>
36
+ <div class="flex flex-row items-center gap-1 font-medium text-2xs">
37
+ <Cross size={12} />
38
+ tool
39
+ </div>
40
+ </button>
41
+ {/snippet}
42
+ {#snippet children({ close })}
43
+ <InsertModuleInner
44
+ bind:funcDesc
45
+ scriptOnly
46
+ on:close={() => {
47
+ close()
48
+ }}
49
+ on:new={(e) => {
50
+ data.eventHandlers.insert({
51
+ index: -1, // ignored when agentId is set
52
+ agentId: data.agentModuleId,
53
+ ...e.detail
54
+ })
55
+ close()
56
+ }}
57
+ on:insert={(e) => {
58
+ data.eventHandlers.insert({
59
+ index: -1, // ignored when agentId is set
60
+ agentId: data.agentModuleId,
61
+ ...e.detail
62
+ })
63
+ close()
64
+ }}
65
+ on:pickScript={(e) => {
66
+ data.eventHandlers.insert({
67
+ index: -1, // ignored when agentId is set
68
+ agentId: data.agentModuleId,
69
+ kind: e.detail.kind,
70
+ script: {
71
+ ...e.detail,
72
+ summary: e.detail.summary
73
+ ? e.detail.summary.replace(/\s/, '_').replace(/[^a-zA-Z0-9_]/g, '')
74
+ : e.detail.path.split('/').pop()
75
+ }
76
+ })
77
+ close()
78
+ }}
79
+ />
63
80
  {/snippet}
64
- </NodeWrapper>
81
+ </PopupV2>
@@ -40,6 +40,11 @@ export function getTypeAsString(arg) {
40
40
  if (Object.keys(arg).length === 1 && Object.keys(arg).includes('s3')) {
41
41
  return 's3object';
42
42
  }
43
+ if (Object.keys(arg).length === 2 &&
44
+ Object.keys(arg).includes('s3') &&
45
+ Object.keys(arg).includes('filename')) {
46
+ return 's3object';
47
+ }
43
48
  return typeof arg;
44
49
  }
45
50
  function collapse() {
@@ -123,9 +128,12 @@ let fullyCollapsed = $derived(keys.length > 1 && collapsed);
123
128
  </span>
124
129
  {/snippet}
125
130
 
126
- <Portal name="object-viewer">
127
- <S3FilePicker bind:this={s3FileViewer} readOnlyMode={true} />
128
- </Portal>
131
+ {#if getTypeAsString(jsonFiltered) === 's3object'}
132
+ <Portal name="object-viewer">
133
+ <S3FilePicker bind:this={s3FileViewer} readOnlyMode={true} />
134
+ </Portal>
135
+ {/if}
136
+
129
137
  {#if level == 0}
130
138
  <div class="float-right">
131
139
  {#if searchOpen}
@@ -186,7 +186,7 @@ let drawerIsOpen = undefined;
186
186
  <DiffEditor
187
187
  open={false}
188
188
  bind:this={diffEditor}
189
- class="h-full"
189
+ className="h-full"
190
190
  automaticLayout
191
191
  fixedOverflowWidgets
192
192
  defaultLang={scriptLangToEditorLang(inlineScript?.language)}
@@ -1,15 +1,13 @@
1
1
  <script lang="ts">import { modalToSchema } from '../../common';
2
2
  import { emptySchema, sendUserToast } from '../../utils';
3
- import { createEventDispatcher } from 'svelte';
4
3
  import AddPropertyFormV2 from './AddPropertyFormV2.svelte';
5
- let { schema = $bindable(emptySchema()), trigger, noPopover } = $props();
4
+ let { schema = $bindable(emptySchema()), trigger, noPopover, onAddNew } = $props();
6
5
  export const DEFAULT_PROPERTY = {
7
6
  selectedType: 'string',
8
7
  description: '',
9
8
  name: '',
10
9
  required: false
11
10
  };
12
- const dispatch = createEventDispatcher();
13
11
  if (!schema) {
14
12
  schema = emptySchema();
15
13
  }
@@ -89,7 +87,6 @@ export function handleAddOrEditArgument(modalProperty) {
89
87
  editing = false;
90
88
  oldArgName = undefined;
91
89
  schema = $state.snapshot(newSchema);
92
- dispatch('change', schema);
93
90
  }
94
91
  if (argError !== '') {
95
92
  sendUserToast(argError, true);
@@ -117,14 +114,12 @@ export function handleDeleteArgument(argPath, nschema) {
117
114
  if (modifiedObject.order) {
118
115
  modifiedObject.order = modifiedObject.order.filter((arg) => arg !== argName);
119
116
  }
120
- dispatch('change', schema);
121
117
  }
122
118
  else {
123
119
  throw Error('Argument not found!');
124
120
  }
125
121
  syncOrders(modifiedObject);
126
122
  schema = $state.snapshot(modifiedObject);
127
- dispatch('change', schema);
128
123
  }
129
124
  catch (err) {
130
125
  sendUserToast(`Could not delete argument: ${err}`, true);
@@ -142,7 +137,7 @@ const trigger_render = $derived(trigger);
142
137
  selectedType: 'string',
143
138
  name: e.detail.name
144
139
  })
145
- dispatch('addNew', e.detail.name)
140
+ onAddNew?.(e.detail.name)
146
141
  } catch (err) {
147
142
  sendUserToast(`Could not add argument: ${err}`, true)
148
143
  }
@@ -3,29 +3,12 @@ interface Props {
3
3
  schema?: Schema | any;
4
4
  trigger?: import('svelte').Snippet;
5
5
  noPopover?: boolean;
6
+ onAddNew?: (argName: string) => void;
6
7
  }
7
- 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> {
8
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
9
- $$bindings?: Bindings;
10
- } & Exports;
11
- (internal: unknown, props: Props & {
12
- $$events?: Events;
13
- $$slots?: Slots;
14
- }): Exports & {
15
- $set?: any;
16
- $on?: any;
17
- };
18
- z_$$bindings?: Bindings;
19
- }
20
- declare const AddPropertyV2: $$__sveltets_2_IsomorphicComponent<Props, {
21
- addNew: CustomEvent<any>;
22
- change: CustomEvent<any>;
23
- } & {
24
- [evt: string]: CustomEvent<any>;
25
- }, {}, {
8
+ declare const AddPropertyV2: import("svelte").Component<Props, {
26
9
  DEFAULT_PROPERTY: ModalSchemaProperty;
27
10
  handleAddOrEditArgument: (modalProperty: ModalSchemaProperty) => void;
28
11
  handleDeleteArgument: (argPath: string[], nschema?: Schema) => void;
29
12
  }, "schema">;
30
- type AddPropertyV2 = InstanceType<typeof AddPropertyV2>;
13
+ type AddPropertyV2 = ReturnType<typeof AddPropertyV2>;
31
14
  export default AddPropertyV2;
@@ -5,7 +5,7 @@ import { Drawer, DrawerContent } from '../common';
5
5
  import AddProperty from './AddProperty.svelte';
6
6
  import { dragHandle, dragHandleZone } from '@windmill-labs/svelte-dnd-action';
7
7
  import { flip } from 'svelte/animate';
8
- import { emptyString } from '../../utils';
8
+ import { emptyString, generateRandomString } from '../../utils';
9
9
  import Button from '../common/button/Button.svelte';
10
10
  import { createEventDispatcher, tick } from 'svelte';
11
11
  import Label from '../Label.svelte';
@@ -35,16 +35,19 @@ function handleFinalize(e) {
35
35
  };
36
36
  tick().then(() => dispatch('change', schema));
37
37
  }
38
- let { schema = $bindable(), parentId = undefined, jsonView = $bindable(false) } = $props();
38
+ let { schema = $bindable(), jsonView = $bindable(false), hiddenArgs = undefined } = $props();
39
39
  // let schema = $state(structuredClone($state.snapshot(schema)))
40
40
  let schemaString = $state(JSON.stringify(schema, null, '\t'));
41
41
  let editor = $state(undefined);
42
42
  let error = $state(undefined);
43
43
  let items = $derived([
44
- ...new Set((schema?.order ?? Object.keys(schema?.properties ?? {}))?.map((item, index) => {
44
+ ...new Set((schema?.order ?? Object.keys(schema?.properties ?? {}))
45
+ ?.map((item, index) => {
45
46
  return { value: item, id: item };
46
- }) ?? [])
47
+ })
48
+ .filter((item) => !hiddenArgs?.includes(item.value)) ?? [])
47
49
  ]);
50
+ const rnd = generateRandomString();
48
51
  </script>
49
52
 
50
53
  <div class="flex flex-col items-end mb-2 w-full">
@@ -77,124 +80,115 @@ let items = $derived([
77
80
  />
78
81
 
79
82
  {#if !jsonView}
80
- <div
81
- use:dragHandleZone={{
82
- items,
83
- flipDurationMs,
84
- dropTargetStyle: {},
85
- type: parentId ? `app-editor-fields-${parentId}` : 'app-editor-fields'
86
- }}
87
- onconsider={handleConsider}
88
- onfinalize={handleFinalize}
89
- class="gap-1 flex flex-col mt-2"
90
- >
91
- {#if items?.length > 0}
92
- {#each items as item (item.id)}
93
- <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
94
- <div
95
- animate:flip={{ duration: 200 }}
96
- class="w-full flex flex-col justify-between border items-center py-1 px-2 rounded-md bg-surface text-sm"
97
- >
98
- {#if schema.properties?.[item.value]}
99
- <div class="flex flex-row justify-between items-center w-full">
100
- {`${item.value}${
101
- schema.properties?.[item.value]?.title
102
- ? ` (title: ${schema.properties?.[item.value]?.title})`
103
- : ''
104
- } `}
105
- <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
106
- <!-- svelte-ignore a11y_no_static_element_interactions -->
107
- <div class="flex flex-row gap-1 item-center h-full justify-center">
108
- <Button
109
- iconOnly
110
- size="xs2"
111
- color="light"
112
- startIcon={{ icon: Trash }}
113
- on:click={() => {
114
- addPropertyComponent?.handleDeleteArgument([item.value])
115
- }}
116
- />
117
- <Button
118
- iconOnly
119
- size="xs2"
120
- color="light"
121
- startIcon={{ icon: Pen }}
122
- on:click={() => {
123
- schemaFormDrawer?.openDrawer()
83
+ {#key rnd}
84
+ <div
85
+ use:dragHandleZone={{
86
+ items,
87
+ flipDurationMs,
88
+ dropTargetStyle: {},
89
+ type: rnd
90
+ }}
91
+ onconsider={handleConsider}
92
+ onfinalize={handleFinalize}
93
+ class="gap-1 flex flex-col mt-2"
94
+ >
95
+ {#if items?.length > 0}
96
+ {#each items as item (item.id)}
97
+ <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
98
+ <div
99
+ animate:flip={{ duration: 200 }}
100
+ class="w-full flex flex-col justify-between border items-center py-1 px-2 rounded-md bg-surface text-sm"
101
+ >
102
+ {#if schema.properties?.[item.value]}
103
+ <div class="flex flex-row justify-between items-center w-full">
104
+ {`${item.value}${
105
+ schema.properties?.[item.value]?.title
106
+ ? ` (title: ${schema.properties?.[item.value]?.title})`
107
+ : ''
108
+ } `}
109
+ <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
110
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
111
+ <div class="flex flex-row gap-1 item-center h-full justify-center">
112
+ <Button
113
+ iconOnly
114
+ size="xs2"
115
+ color="light"
116
+ startIcon={{ icon: Trash }}
117
+ on:click={() => {
118
+ addPropertyComponent?.handleDeleteArgument([item.value])
119
+ }}
120
+ />
121
+ <Button
122
+ iconOnly
123
+ size="xs2"
124
+ color="light"
125
+ startIcon={{ icon: Pen }}
126
+ on:click={() => {
127
+ schemaFormDrawer?.openDrawer()
124
128
 
125
- tick().then(() => {
126
- editableSchemaForm?.openField(item.value)
127
- })
128
- }}
129
- />
129
+ tick().then(() => {
130
+ editableSchemaForm?.openField(item.value)
131
+ })
132
+ }}
133
+ />
130
134
 
131
- <div class="cursor-move flex items-center handle" use:dragHandle>
132
- <GripVertical size={16} />
135
+ <div class="flex items-center handle" use:dragHandle>
136
+ <GripVertical size={16} />
137
+ </div>
133
138
  </div>
134
139
  </div>
135
- </div>
136
140
 
137
- {#if schema.properties[item.value]?.type === 'object' && !(schema.properties[item.value].oneOf && schema.properties[item.value].oneOf.length >= 2)}
138
- <div class="flex flex-col w-full mt-2">
139
- <Label label="Nested properties">
140
- <EditableSchemaDrawer
141
- on:change={() => {
142
- schema = $state.snapshot(schema)
143
- dispatch('change', schema)
144
- }}
145
- bind:schema={schema.properties[item.value]}
146
- parentId={item.value}
147
- />
148
- </Label>
149
- </div>
141
+ {#if schema.properties[item.value]?.type === 'object' && !(schema.properties[item.value].oneOf && schema.properties[item.value].oneOf.length >= 2)}
142
+ <div class="flex flex-col w-full mt-2">
143
+ <Label label="Nested properties">
144
+ <EditableSchemaDrawer bind:schema={schema.properties[item.value]} />
145
+ </Label>
146
+ </div>
147
+ {/if}
148
+ {:else}
149
+ <div class="text-tertiary"> Value is undefined </div>
150
150
  {/if}
151
- {:else}
152
- <div class="text-tertiary"> Value is undefined </div>
153
- {/if}
154
- </div>
155
- {/each}
156
- {/if}
157
- </div>
158
-
151
+ </div>
152
+ {/each}
153
+ {/if}
154
+ </div>
155
+ {/key}
159
156
  <Drawer bind:this={schemaFormDrawer} size="1200px">
160
- <DrawerContent title="UI Customisation" on:close={schemaFormDrawer.closeDrawer}>
161
- <EditableSchemaForm
162
- on:change={(e) => {
163
- schema = $state.snapshot(schema)
164
- dispatch('change', schema)
165
- }}
166
- bind:this={editableSchemaForm}
167
- bind:schema
168
- isAppInput
169
- on:edit={(e) => {
170
- addPropertyComponent?.openDrawer(e.detail)
171
- }}
172
- on:delete={(e) => {
173
- addPropertyComponent?.handleDeleteArgument([e.detail])
174
- }}
175
- dndType="drawer"
176
- editTab="inputEditor"
177
- >
178
- {#snippet addProperty()}
179
- <AddPropertyV2
180
- bind:schema
181
- on:change
182
- on:addNew={(e) => {
183
- schema = $state.snapshot(schema)
184
- editableSchemaForm?.openField(e.detail)
185
- }}
186
- >
187
- {#snippet trigger()}
188
- <div
189
- class="w-full py-2 flex justify-center items-center border border-dashed rounded-md hover:bg-surface-hover"
190
- >
191
- <Plus size={14} />
192
- </div>
193
- {/snippet}
194
- </AddPropertyV2>
195
- {/snippet}
196
- </EditableSchemaForm>
197
- </DrawerContent>
157
+ {#snippet children()}
158
+ <DrawerContent title="UI Customisation" on:close={() => schemaFormDrawer?.closeDrawer()}>
159
+ <EditableSchemaForm
160
+ schemaFormClassName="h-full"
161
+ bind:this={editableSchemaForm}
162
+ bind:schema
163
+ isAppInput
164
+ on:edit={(e) => {
165
+ addPropertyComponent?.openDrawer(e.detail)
166
+ }}
167
+ on:delete={(e) => {
168
+ addPropertyComponent?.handleDeleteArgument([e.detail])
169
+ }}
170
+ {hiddenArgs}
171
+ editTab="inputEditor"
172
+ >
173
+ {#snippet addProperty()}
174
+ <AddPropertyV2
175
+ bind:schema
176
+ onAddNew={(argName) => {
177
+ editableSchemaForm?.openField(argName)
178
+ }}
179
+ >
180
+ {#snippet trigger()}
181
+ <div
182
+ class="w-full py-2 flex justify-center items-center border border-dashed rounded-md hover:bg-surface-hover"
183
+ >
184
+ <Plus size={14} />
185
+ </div>
186
+ {/snippet}
187
+ </AddPropertyV2>
188
+ {/snippet}
189
+ </EditableSchemaForm>
190
+ </DrawerContent>
191
+ {/snippet}
198
192
  </Drawer>
199
193
  {:else}
200
194
  <div class="mt-2"></div>
@@ -2,8 +2,9 @@ import EditableSchemaDrawer from './EditableSchemaDrawer.svelte';
2
2
  import type { Schema } from '../../common';
3
3
  interface Props {
4
4
  schema: Schema | undefined | any;
5
- parentId?: string | undefined;
6
5
  jsonView?: boolean;
6
+ hiddenArgs?: string[];
7
+ onClose?: () => void;
7
8
  }
8
9
  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> {
9
10
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {