windmill-components 1.531.1 → 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 (153) hide show
  1. package/package/components/ArgInput.svelte +69 -19
  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 +67 -67
  8. package/package/components/EditableSchemaForm.svelte.d.ts +3 -3
  9. package/package/components/Editor.svelte +32 -11
  10. package/package/components/Editor.svelte.d.ts +6 -0
  11. package/package/components/EditorBar.svelte +2 -2
  12. package/package/components/EditorBar.svelte.d.ts +1 -0
  13. package/package/components/FieldHeader.svelte +1 -1
  14. package/package/components/FlowBuilder.svelte +7 -4
  15. package/package/components/FlowPreviewContent.svelte +3 -3
  16. package/package/components/FlowStatusViewer.svelte +28 -0
  17. package/package/components/FlowStatusViewerInner.svelte +72 -20
  18. package/package/components/FlowStatusViewerInner.svelte.d.ts +7 -0
  19. package/package/components/ModulePreview.svelte +2 -1
  20. package/package/components/ModulePreview.svelte.d.ts +1 -0
  21. package/package/components/ModulePreviewForm.svelte +72 -65
  22. package/package/components/ModulePreviewResultViewer.svelte +13 -18
  23. package/package/components/ModuleTest.svelte +10 -6
  24. package/package/components/ModuleTest.svelte.d.ts +1 -0
  25. package/package/components/OktaSetting.svelte +8 -3
  26. package/package/components/Portal.svelte +11 -7
  27. package/package/components/Portal.svelte.d.ts +19 -39
  28. package/package/components/ResourceEditor.svelte +4 -0
  29. package/package/components/RunForm.svelte +2 -2
  30. package/package/components/RunForm.svelte.d.ts +1 -1
  31. package/package/components/RunFormAdvancedPopup.svelte +13 -1
  32. package/package/components/SchemaForm.svelte +1 -2
  33. package/package/components/ScriptBuilder.svelte +1 -1
  34. package/package/components/ScriptEditor.svelte +22 -7
  35. package/package/components/SimpleEditor.svelte +0 -1
  36. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  37. package/package/components/apps/components/layout/AppModal.svelte +2 -2
  38. package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -2
  39. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +1 -1
  40. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +0 -1
  41. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +3 -1
  42. package/package/components/apps/editor/settingsPanel/GridCondition.svelte +3 -1
  43. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +3 -1
  44. package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -1
  45. package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +55 -53
  46. package/package/components/apps/editor/settingsPanel/TableActions.svelte +3 -1
  47. package/package/components/common/button/model.d.ts +1 -1
  48. package/package/components/common/drawer/Disposable.svelte +51 -30
  49. package/package/components/common/drawer/Disposable.svelte.d.ts +12 -44
  50. package/package/components/common/drawer/Drawer.svelte +15 -11
  51. package/package/components/copilot/FlowInlineScriptAIButton.svelte +4 -2
  52. package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +4 -1
  53. package/package/components/copilot/MetadataGen.svelte +14 -3
  54. package/package/components/copilot/autocomplete/Autocompletor.js +0 -2
  55. package/package/components/copilot/chat/AIChat.svelte +2 -4
  56. package/package/components/copilot/chat/AIChatInput.svelte +3 -3
  57. package/package/components/copilot/chat/AIChatManager.svelte.js +24 -12
  58. package/package/components/copilot/chat/AvailableContextList.svelte +243 -26
  59. package/package/components/copilot/chat/AvailableContextList.svelte.d.ts +2 -1
  60. package/package/components/copilot/chat/ContextElementBadge.svelte +31 -15
  61. package/package/components/copilot/chat/ContextElementBadge.svelte.d.ts +5 -20
  62. package/package/components/copilot/chat/ContextManager.svelte.d.ts +15 -2
  63. package/package/components/copilot/chat/ContextManager.svelte.js +134 -24
  64. package/package/components/copilot/chat/ContextTextarea.svelte +22 -49
  65. package/package/components/copilot/chat/ToolContentDisplay.svelte +10 -1
  66. package/package/components/copilot/chat/ToolExecutionDisplay.svelte +3 -3
  67. package/package/components/copilot/chat/context.d.ts +19 -1
  68. package/package/components/copilot/chat/context.js +1 -0
  69. package/package/components/copilot/chat/flow/FlowAIChat.svelte +109 -7
  70. package/package/components/copilot/chat/flow/core.d.ts +13 -1
  71. package/package/components/copilot/chat/flow/core.js +171 -19
  72. package/package/components/copilot/chat/flow/uiIntents.d.ts +8 -0
  73. package/package/components/copilot/chat/flow/uiIntents.js +5 -0
  74. package/package/components/copilot/chat/flow/useUiIntent.d.ts +5 -0
  75. package/package/components/copilot/chat/flow/useUiIntent.js +12 -0
  76. package/package/components/copilot/chat/monaco-adapter.d.ts +22 -4
  77. package/package/components/copilot/chat/monaco-adapter.js +55 -16
  78. package/package/components/copilot/chat/script/core.d.ts +2 -2
  79. package/package/components/copilot/chat/script/core.js +54 -124
  80. package/package/components/copilot/chat/shared.d.ts +14 -2
  81. package/package/components/copilot/chat/shared.js +170 -7
  82. package/package/components/copilot/lib.js +12 -7
  83. package/package/components/copilot/shared.d.ts +1 -1
  84. package/package/components/copilot/shared.js +16 -10
  85. package/package/components/flows/FlowEditor.svelte +15 -1
  86. package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
  87. package/package/components/flows/FlowModuleIcon.svelte +39 -0
  88. package/package/components/flows/FlowModuleIcon.svelte.d.ts +10 -0
  89. package/package/components/flows/common/FlowCardHeader.svelte +4 -1
  90. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +6 -0
  91. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +6 -0
  92. package/package/components/flows/content/FlowEditorPanel.svelte +2 -1
  93. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -0
  94. package/package/components/flows/content/FlowInput.svelte +31 -34
  95. package/package/components/flows/content/FlowInput.svelte.d.ts +1 -0
  96. package/package/components/flows/content/FlowLoop.svelte +7 -0
  97. package/package/components/flows/content/FlowModuleComponent.svelte +39 -44
  98. package/package/components/flows/content/FlowModuleScript.svelte +1 -1
  99. package/package/components/flows/content/FlowModuleSuspend.svelte +16 -18
  100. package/package/components/flows/content/FlowWhileLoop.svelte +6 -0
  101. package/package/components/flows/content/ScriptEditorDrawer.svelte +9 -11
  102. package/package/components/flows/dfs.d.ts +1 -1
  103. package/package/components/flows/dfs.js +6 -6
  104. package/package/components/flows/flowInfers.js +7 -7
  105. package/package/components/flows/flowStateUtils.svelte.js +1 -2
  106. package/package/components/flows/map/FlowModuleSchemaItem.svelte +12 -26
  107. package/package/components/flows/map/MapItem.svelte +12 -39
  108. package/package/components/flows/map/VirtualItem.svelte +1 -1
  109. package/package/components/flows/pickers/TopLevelNode.svelte +1 -1
  110. package/package/components/flows/propPicker/InputPickerInner.svelte +5 -5
  111. package/package/components/flows/propPicker/OutputPickerInner.svelte +143 -118
  112. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +7 -16
  113. package/package/components/flows/{testSteps.svelte.d.ts → stepsInputArgs.svelte.d.ts} +2 -1
  114. package/package/components/flows/{testSteps.svelte.js → stepsInputArgs.svelte.js} +15 -3
  115. package/package/components/flows/types.d.ts +16 -3
  116. package/package/components/flows/utils.js +3 -0
  117. package/package/components/graph/FlowGraphV2.svelte +1 -1
  118. package/package/components/graph/renderers/nodes/AIToolNode.svelte +4 -4
  119. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +71 -54
  120. package/package/components/propertyPicker/ObjectViewer.svelte +11 -3
  121. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +1 -1
  122. package/package/components/schema/AddPropertyV2.svelte +2 -7
  123. package/package/components/schema/AddPropertyV2.svelte.d.ts +3 -20
  124. package/package/components/schema/EditableSchemaDrawer.svelte +109 -115
  125. package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +2 -1
  126. package/package/components/schema/EditableSchemaSdkWrapper.svelte +16 -3
  127. package/package/components/schema/EditableSchemaSdkWrapper.svelte.d.ts +4 -1
  128. package/package/components/schema/EditableSchemaWrapper.svelte +3 -10
  129. package/package/components/schema/FlowPropertyEditor.svelte +83 -57
  130. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  131. package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
  132. package/package/components/schema/SchemaFormDND.svelte +11 -10
  133. package/package/components/schema/SchemaFormDND.svelte.d.ts +3 -2
  134. package/package/components/schema/editable_schema_wrapper.d.ts +0 -3
  135. package/package/components/schema/jsonSchemaResource.svelte.d.ts +2 -0
  136. package/package/components/schema/jsonSchemaResource.svelte.js +40 -0
  137. package/package/components/settings/PremiumInfo.svelte +7 -2
  138. package/package/components/triggers/CaptureWrapper.svelte +2 -13
  139. package/package/components/triggers/CaptureWrapper.svelte.d.ts +1 -1
  140. package/package/components/triggers/TriggersWrapper.svelte +1 -0
  141. package/package/components/triggers/http/RouteEditorInner.svelte +1 -1
  142. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +23 -20
  143. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte +15 -27
  144. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte.d.ts +7 -5
  145. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +16 -16
  146. package/package/hubPaths.json +3 -1
  147. package/package/script_helpers.d.ts +2 -2
  148. package/package/script_helpers.js +2 -0
  149. package/package/stores.d.ts +1 -0
  150. package/package/stores.js +8 -1
  151. package/package/utils.d.ts +1 -1
  152. package/package.json +14 -14
  153. package/package/components/ModulePreviewResultViewer.svelte.d.ts +0 -28
@@ -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> & {
@@ -1,6 +1,19 @@
1
- <script lang="ts">import EditableSchemaWrapper from './EditableSchemaWrapper.svelte';
2
- let { schema: oldSchema, ...props } = $props();
1
+ <script lang="ts">import { readFieldsRecursively } from '../../utils';
2
+ import { deepEqual } from 'fast-equals';
3
+ import EditableSchemaWrapper from './EditableSchemaWrapper.svelte';
4
+ let { schema: oldSchema, onSchemaChange, ...props } = $props();
3
5
  let schema = $state(oldSchema);
6
+ let lastSchema = $state.snapshot(schema);
7
+ $effect(() => {
8
+ if (onSchemaChange) {
9
+ readFieldsRecursively(schema);
10
+ let newSchema = $state.snapshot(schema);
11
+ if (!deepEqual(lastSchema, newSchema)) {
12
+ lastSchema = newSchema;
13
+ onSchemaChange(newSchema);
14
+ }
15
+ }
16
+ });
4
17
  </script>
5
18
 
6
- <EditableSchemaWrapper {schema} {...props} />
19
+ <EditableSchemaWrapper bind:schema {...props} />
@@ -1,4 +1,7 @@
1
1
  import type { EditableSchemaWrapperProps } from './editable_schema_wrapper';
2
- declare const EditableSchemaSdkWrapper: import("svelte").Component<EditableSchemaWrapperProps, {}, "">;
2
+ type $$ComponentProps = EditableSchemaWrapperProps & {
3
+ onSchemaChange?: (schema: any) => void;
4
+ };
5
+ declare const EditableSchemaSdkWrapper: import("svelte").Component<$$ComponentProps, {}, "">;
3
6
  type EditableSchemaSdkWrapper = ReturnType<typeof EditableSchemaSdkWrapper>;
4
7
  export default EditableSchemaSdkWrapper;
@@ -7,7 +7,7 @@ import AddPropertyV2 from './AddPropertyV2.svelte';
7
7
  import { Plus } from 'lucide-svelte';
8
8
  import Select from '../select/Select.svelte';
9
9
  import { safeSelectItems } from '../select/utils.svelte';
10
- let { schema = $bindable(), uiOnly = false, noPreview = false, fullHeight = true, formatExtension = $bindable(undefined), onSchemaChange, customUi } = $props();
10
+ let { schema = $bindable(), uiOnly = false, noPreview = false, fullHeight = true, formatExtension = $bindable(undefined), customUi } = $props();
11
11
  let resourceIsTextFile = $state(false);
12
12
  let addPropertyComponent = $state(undefined);
13
13
  let editableSchemaForm = $state(undefined);
@@ -35,7 +35,6 @@ function switchResourceIsFile() {
35
35
  }
36
36
  };
37
37
  }
38
- onSchemaChange?.({ schema: $state.snapshot(schema) });
39
38
  }
40
39
  let suggestedFileExtensions = $state([
41
40
  'json',
@@ -64,9 +63,8 @@ let suggestedFileExtensions = $state([
64
63
  noPopover={customUi?.noAddPopover}
65
64
  bind:schema
66
65
  bind:this={addPropertyComponent}
67
- on:change={() => onSchemaChange?.({ schema: $state.snapshot(schema) })}
68
- on:addNew={(e) => {
69
- editableSchemaForm?.openField(e.detail)
66
+ onAddNew={(argName) => {
67
+ editableSchemaForm?.openField(argName)
70
68
  }}
71
69
  >
72
70
  {#snippet trigger()}
@@ -82,11 +80,7 @@ let suggestedFileExtensions = $state([
82
80
  onlyMaskPassword
83
81
  bind:this={editableSchemaForm}
84
82
  bind:schema
85
- on:change={() => onSchemaChange?.({ schema: $state.snapshot(schema) })}
86
83
  isFlowInput
87
- on:edit={(e) => {
88
- addPropertyComponent?.openDrawer(e.detail)
89
- }}
90
84
  on:delete={(e) => {
91
85
  addPropertyComponent?.handleDeleteArgument([e.detail])
92
86
  }}
@@ -100,7 +94,6 @@ let suggestedFileExtensions = $state([
100
94
  noPopover={customUi?.noAddPopover}
101
95
  bind:schema
102
96
  bind:this={addPropertyComponent}
103
- on:change={() => onSchemaChange?.({ schema })}
104
97
  >
105
98
  {#snippet trigger()}
106
99
  <div