windmill-components 1.537.1 → 1.542.5
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.
- package/package/components/AIProviderPicker.svelte +181 -0
- package/package/components/AIProviderPicker.svelte.d.ts +15 -0
- package/package/components/ArgInfo.svelte +2 -2
- package/package/components/ArgInput.svelte +35 -9
- package/package/components/ArgInput.svelte.d.ts +3 -3
- package/package/components/AssignableTagsInner.svelte +89 -3
- package/package/components/ConcurrentJobsChart.svelte +36 -48
- package/package/components/ConcurrentJobsChart.svelte.d.ts +8 -20
- package/package/components/CustomPopover.svelte.d.ts +1 -1
- package/package/components/DropdownSelect.svelte +26 -0
- package/package/components/DropdownSelect.svelte.d.ts +11 -0
- package/package/components/DropdownV2Inner.svelte +1 -1
- package/package/components/{DynSelect.svelte → DynamicInput.svelte} +47 -15
- package/package/components/DynamicInput.svelte.d.ts +11 -0
- package/package/components/EditableSchemaForm.svelte +119 -95
- package/package/components/EditableSchemaForm.svelte.d.ts +4 -4
- package/package/components/Editor.svelte +86 -93
- package/package/components/Editor.svelte.d.ts +4 -3
- package/package/components/EditorBar.svelte +2 -5
- package/package/components/EditorSettings.svelte +11 -9
- package/package/components/FlowBuilder.svelte +3 -3
- package/package/components/FlowLogRow.svelte +64 -0
- package/package/components/FlowLogRow.svelte.d.ts +15 -0
- package/package/components/FlowLogViewer.svelte +406 -373
- package/package/components/FlowLogViewer.svelte.d.ts +5 -1
- package/package/components/FlowLogViewerWrapper.svelte +44 -1
- package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
- package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
- package/package/components/FlowStatusViewerInner.svelte +34 -3
- package/package/components/FolderPicker.svelte +1 -1
- package/package/components/InputTransformForm.svelte +20 -10
- package/package/components/JobArgs.svelte +1 -1
- package/package/components/JobLoader.svelte.d.ts +1 -1
- package/package/components/JobStatus.svelte +2 -0
- package/package/components/LogSnippetViewer.svelte +3 -3
- package/package/components/LogSnippetViewer.svelte.d.ts +1 -1
- package/package/components/LogViewer.svelte +87 -71
- package/package/components/LogViewer.svelte.d.ts +1 -0
- package/package/components/Path.svelte +7 -1
- package/package/components/Path.svelte.d.ts +1 -1
- package/package/components/PrefixedInput.svelte +120 -0
- package/package/components/PrefixedInput.svelte.d.ts +8 -0
- package/package/components/QueuePosition.svelte +81 -0
- package/package/components/QueuePosition.svelte.d.ts +8 -0
- package/package/components/ResourceNarrowing.svelte +13 -0
- package/package/components/ResourceNarrowing.svelte.d.ts +6 -0
- package/package/components/ResourceTypePicker.svelte +49 -74
- package/package/components/RunChart.svelte +74 -89
- package/package/components/RunChart.svelte.d.ts +10 -22
- package/package/components/S3FilePicker.svelte +1 -1
- package/package/components/SchemaForm.svelte.d.ts +2 -2
- package/package/components/ScriptBuilder.svelte +2 -1
- package/package/components/ScriptEditor.svelte +4 -3
- package/package/components/ScriptEditor.svelte.d.ts +2 -1
- package/package/components/ServiceLogsInner.svelte +1 -1
- package/package/components/ShareModal.svelte.d.ts +1 -1
- package/package/components/SimpleEditor.svelte +4 -67
- package/package/components/StringTypeNarrowing.svelte +5 -10
- package/package/components/TemplateEditor.svelte +2 -16
- package/package/components/TimeAgo.svelte +1 -1
- package/package/components/TimeAgo.svelte.d.ts +1 -0
- package/package/components/Toggle.svelte +2 -1
- package/package/components/Toggle.svelte.d.ts +2 -1
- package/package/components/WorkerRepl.svelte +1 -1
- package/package/components/apps/components/display/AppNavbarItem.svelte +2 -1
- package/package/components/apps/components/display/table/AppAggridTable.svelte +44 -48
- package/package/components/apps/components/display/table/SyncColumnDefs.svelte +101 -19
- package/package/components/apps/components/display/table/SyncColumnDefs.svelte.d.ts +5 -2
- package/package/components/apps/components/display/table/utils.js +36 -5
- package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +10 -5
- package/package/components/apps/editor/AppEditor.svelte +4 -3
- package/package/components/apps/editor/AppEditorHeader.svelte +0 -1
- package/package/components/apps/editor/GridViewer.svelte.d.ts +11 -4
- package/package/components/apps/editor/SettingsPanel.svelte +2 -2
- package/package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
- package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +26 -3
- package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +13 -5
- package/package/components/apps/svelte-grid/Grid.svelte.d.ts +30 -11
- package/package/components/assets/JobAssetsViewer.svelte +28 -24
- package/package/components/auditLogs/AuditLogsTable.svelte +2 -6
- package/package/components/chartjs-wrappers/Chart.svelte.d.ts +14 -7
- package/package/components/common/OnChange.svelte.d.ts +11 -4
- package/package/components/common/badge/Badge.svelte +9 -2
- package/package/components/common/badge/Badge.svelte.d.ts +2 -1
- package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -1
- package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +5 -4
- package/package/components/common/drawer/Disposable.svelte +9 -11
- package/package/components/common/drawer/Drawer.svelte +3 -4
- package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
- package/package/components/common/menu/MenuItem.svelte.d.ts +2 -2
- package/package/components/common/modal/Modal.svelte.d.ts +1 -1
- package/package/components/common/tabs/TabContent.svelte +2 -7
- package/package/components/common/tabs/TabContent.svelte.d.ts +5 -27
- package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +9 -3
- package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
- package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +8 -4
- package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
- package/package/components/copilot/MetadataGen.svelte +1 -1
- package/package/components/copilot/chat/AIChatManager.svelte.js +24 -102
- package/package/components/copilot/chat/AssistantMessage.svelte +0 -4
- package/package/components/copilot/chat/anthropic.d.ts +15 -0
- package/package/components/copilot/chat/anthropic.js +208 -0
- package/package/components/copilot/chat/api/apiTools.d.ts +2 -2
- package/package/components/copilot/chat/api/apiTools.js +10 -7
- package/package/components/copilot/chat/api/core.d.ts +1 -1
- package/package/components/copilot/chat/api/core.js +7 -2
- package/package/components/copilot/chat/ask/core.d.ts +1 -1
- package/package/components/copilot/chat/ask/core.js +7 -2
- package/package/components/copilot/chat/flow/core.d.ts +1 -1
- package/package/components/copilot/chat/flow/core.js +14 -4
- package/package/components/copilot/chat/monaco-adapter.d.ts +6 -5
- package/package/components/copilot/chat/navigator/core.d.ts +1 -1
- package/package/components/copilot/chat/navigator/core.js +7 -2
- package/package/components/copilot/chat/script/CodeDisplay.svelte +10 -111
- package/package/components/copilot/chat/script/core.d.ts +5 -4
- package/package/components/copilot/chat/script/core.js +131 -19
- package/package/components/copilot/chat/shared.d.ts +7 -7
- package/package/components/copilot/lib.d.ts +29 -8
- package/package/components/copilot/lib.js +199 -24
- package/package/components/custom_ui.d.ts +1 -0
- package/package/components/flows/content/FlowInput.svelte +5 -5
- package/package/components/flows/content/FlowModuleComponent.svelte +5 -2
- package/package/components/flows/content/FlowModuleEarlyStop.svelte +47 -17
- package/package/components/flows/content/FlowModuleSleep.svelte +4 -1
- package/package/components/flows/content/FlowModuleSuspend.svelte +0 -1
- package/package/components/flows/content/FlowModuleTimeout.svelte +50 -10
- package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowRetries.svelte +108 -3
- package/package/components/flows/content/FlowRetries.svelte.d.ts +3 -2
- package/package/components/flows/flowInfers.js +8 -35
- package/package/components/flows/flowStore.d.ts +45 -1
- package/package/components/flows/flowStore.js +1 -1
- package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +61 -54
- package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -1
- package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +1 -1
- package/package/components/flows/map/InsertModuleButton.svelte +1 -0
- package/package/components/flows/map/InsertModuleInner.svelte +12 -15
- package/package/components/flows/map/InsertModuleInner.svelte.d.ts +10 -9
- package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +1 -1
- package/package/components/git_sync/DetectionFlow.svelte +15 -17
- package/package/components/git_sync/GitSyncContext.svelte.js +1 -1
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +0 -1
- package/package/components/graph/graphBuilder.svelte.d.ts +5 -1
- package/package/components/graph/renderers/edges/BaseEdge.svelte +9 -1
- package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +4 -1
- package/package/components/graph/renderers/nodes/BranchAllStart.svelte +2 -3
- package/package/components/graph/renderers/nodes/BranchOneStart.svelte +2 -3
- package/package/components/graph/renderers/triggers/TriggerButton.svelte.d.ts +1 -1
- package/package/components/graph/renderers/triggers/TriggersBadge.svelte +3 -1
- package/package/components/graph/renderers/triggers/TriggersWrapper.svelte +34 -24
- package/package/components/graph/renderers/triggers/TriggersWrapper.svelte.d.ts +1 -2
- package/package/components/home/ItemsList.svelte +17 -13
- package/package/components/home/TreeView.svelte +21 -27
- package/package/components/home/TreeView.svelte.d.ts +2 -29
- package/package/components/home/TreeViewRoot.svelte +11 -23
- package/package/components/home/TreeViewRoot.svelte.d.ts +15 -13
- package/package/components/icons/GitIcon.svelte +10 -2
- package/package/components/icons/GitIcon.svelte.d.ts +1 -0
- package/package/components/meltComponents/MeltButton.svelte.d.ts +1 -1
- package/package/components/meltComponents/Popover.svelte +23 -3
- package/package/components/meltComponents/Popover.svelte.d.ts +2 -1
- package/package/components/monacoLanguagesOptions.d.ts +3 -0
- package/package/components/monacoLanguagesOptions.js +109 -0
- package/package/components/propertyPicker/ObjectViewer.svelte +7 -2
- package/package/components/propertyPicker/PropPicker.svelte +1 -1
- package/package/components/propertyPicker/utils.js +14 -7
- package/package/components/runs/JobRunsPreview.svelte +212 -177
- package/package/components/runs/JobsLoader.svelte +2 -2
- package/package/components/runs/JobsLoader.svelte.d.ts +1 -1
- package/package/components/runs/NoWorkerWithTagWarning.svelte +18 -5
- package/package/components/runs/RunBadges.svelte +100 -0
- package/package/components/runs/RunBadges.svelte.d.ts +12 -0
- package/package/components/runs/RunLabels.svelte +86 -0
- package/package/components/runs/RunLabels.svelte.d.ts +10 -0
- package/package/components/runs/RunOption.svelte +20 -0
- package/package/components/runs/RunOption.svelte.d.ts +10 -0
- package/package/components/runs/RunRow.svelte +239 -151
- package/package/components/runs/RunRow.svelte.d.ts +12 -9
- package/package/components/runs/RunsBatchActionsDropdown.svelte +13 -17
- package/package/components/runs/RunsBatchActionsDropdown.svelte.d.ts +5 -18
- package/package/components/runs/RunsFilter.svelte +369 -243
- package/package/components/runs/RunsFilter.svelte.d.ts +2 -0
- package/package/components/runs/RunsQueue.svelte +96 -25
- package/package/components/runs/RunsQueue.svelte.d.ts +7 -21
- package/package/components/runs/RunsTable.svelte +62 -71
- package/package/components/runs/RunsTable.svelte.d.ts +2 -1
- package/package/components/runs/runs-grid.css +95 -0
- package/package/components/schema/EditableSchemaDrawer.svelte +12 -12
- package/package/components/schema/FlowPropertyEditor.svelte +197 -206
- package/package/components/schema/PropertyEditor.svelte +33 -35
- package/package/components/schema/SchemaFormDND.svelte.d.ts +2 -2
- package/package/components/search/GlobalSearchModal.svelte +8 -1
- package/package/components/select/DraggableTags.svelte.d.ts +17 -7
- package/package/components/select/MultiSelect.svelte.d.ts +21 -11
- package/package/components/select/Select.svelte +2 -1
- package/package/components/select/Select.svelte.d.ts +25 -13
- package/package/components/select/SelectDropdown.svelte.d.ts +14 -7
- package/package/components/settings/TokenDisplay.svelte +1 -1
- package/package/components/sidebar/OperatorMenu.svelte +5 -0
- package/package/components/sidebar/SidebarContent.svelte +48 -2
- package/package/components/sidebar/WorkspaceMenu.svelte +116 -17
- package/package/components/toast.js +6 -3
- package/package/components/triggers/AddTriggersButton.svelte +7 -6
- package/package/components/triggers/CaptureWrapper.svelte +19 -3
- package/package/components/triggers/TriggerLabel.svelte +8 -0
- package/package/components/triggers/TriggerTokens.svelte +1 -1
- package/package/components/triggers/TriggersEditor.svelte +9 -5
- package/package/components/triggers/TriggersTable.svelte +2 -2
- package/package/components/triggers/TriggersWrapper.svelte +16 -5
- package/package/components/triggers/TriggersWrapper.svelte.d.ts +3 -19
- package/package/components/{details/EmailTriggerCaptures.svelte → triggers/email/DefaultEmailCapture.svelte} +5 -5
- package/package/components/{details/EmailTriggerCaptures.svelte.d.ts → triggers/email/DefaultEmailCapture.svelte.d.ts} +4 -4
- package/package/components/{details/EmailTriggerConfigSection.svelte → triggers/email/DefaultEmailConfigSection.svelte} +24 -14
- package/package/components/triggers/email/DefaultEmailConfigSection.svelte.d.ts +13 -0
- package/package/components/triggers/email/DefaultEmailPanel.svelte +71 -0
- package/package/components/triggers/email/DefaultEmailPanel.svelte.d.ts +11 -0
- package/package/components/triggers/email/EmailCapture.svelte +39 -0
- package/package/components/triggers/email/EmailCapture.svelte.d.ts +43 -0
- package/package/components/triggers/email/EmailTriggerEditor.svelte +20 -0
- package/package/components/triggers/email/EmailTriggerEditor.svelte.d.ts +11 -0
- package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte +133 -0
- package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte.d.ts +14 -0
- package/package/components/triggers/email/EmailTriggerEditorInner.svelte +335 -0
- package/package/components/triggers/email/EmailTriggerEditorInner.svelte.d.ts +22 -0
- package/package/components/triggers/email/EmailTriggerPanel.svelte +61 -0
- package/package/components/triggers/email/EmailTriggerPanel.svelte.d.ts +14 -0
- package/package/components/triggers/email/utils.d.ts +4 -0
- package/package/components/triggers/email/utils.js +52 -0
- package/package/components/triggers/http/RouteEditorConfigSection.svelte +1 -1
- package/package/components/triggers/http/utils.js +1 -1
- package/package/components/triggers/triggers.svelte.d.ts +1 -0
- package/package/components/triggers/triggers.svelte.js +24 -2
- package/package/components/triggers/utils.js +19 -5
- package/package/components/triggers.d.ts +1 -1
- package/package/components/triggers.js +2 -0
- package/package/components/wizards/AgGridWizard.svelte +85 -80
- package/package/components/workspaceSettings/AISettings.svelte +74 -22
- package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
- package/package/components/workspaceSettings/CreateWorkspace.svelte +395 -0
- package/package/components/workspaceSettings/CreateWorkspace.svelte.d.ts +6 -0
- package/package/components/workspaceSettings/DucklakeSettings.svelte +3 -1
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +1 -1
- package/package/components/workspaceSettings/StorageSettings.svelte +69 -48
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +142 -3
- package/package/gen/schemas.gen.js +144 -3
- package/package/gen/services.gen.d.ts +129 -1
- package/package/gen/services.gen.js +267 -1
- package/package/gen/types.gen.d.ts +434 -8
- package/package/hubPaths.json +4 -2
- package/package/infer.js +1 -1
- package/package/keyboardChain.d.ts +5 -0
- package/package/keyboardChain.js +40 -0
- package/package/services/JobManager.js +2 -2
- package/package/stores.d.ts +3 -1
- package/package/stores.js +8 -5
- package/package/utils/workspaceHierarchy.d.ts +27 -0
- package/package/utils/workspaceHierarchy.js +101 -0
- package/package/utils.d.ts +6 -3
- package/package/utils.js +30 -15
- package/package/workspace_settings.js +2 -3
- package/package.json +9 -11
- package/package/components/DynSelect.svelte.d.ts +0 -11
- package/package/components/ObjectTypeNarrowing.svelte +0 -18
- package/package/components/ObjectTypeNarrowing.svelte.d.ts +0 -22
- package/package/components/details/DetailPageTriggerPanel.svelte +0 -121
- package/package/components/details/DetailPageTriggerPanel.svelte.d.ts +0 -20
- package/package/components/details/EmailTriggerConfigSection.svelte.d.ts +0 -12
- package/package/components/details/EmailTriggerPanel.svelte +0 -76
- package/package/components/details/EmailTriggerPanel.svelte.d.ts +0 -26
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Item } from '../utils';
|
|
2
|
+
interface Props {
|
|
3
|
+
items?: Item[];
|
|
4
|
+
extraLabel?: import('svelte').Snippet;
|
|
5
|
+
selected: string;
|
|
6
|
+
selectedDisplayName?: string;
|
|
7
|
+
btnClasses?: string;
|
|
8
|
+
}
|
|
9
|
+
declare const DropdownSelect: import("svelte").Component<Props, {}, "">;
|
|
10
|
+
type DropdownSelect = ReturnType<typeof DropdownSelect>;
|
|
11
|
+
export default DropdownSelect;
|
|
@@ -36,7 +36,7 @@ computeItems();
|
|
|
36
36
|
aiDescription={item.displayName}
|
|
37
37
|
>
|
|
38
38
|
{#if item.icon}
|
|
39
|
-
<item.icon size={14} color={item.iconColor} />
|
|
39
|
+
<item.icon size={14} color={item.iconColor} class="shrink-0" />
|
|
40
40
|
{/if}
|
|
41
41
|
<p title={item.displayName} class="truncate grow min-w-0 whitespace-nowrap text-left">
|
|
42
42
|
{item.displayName}
|
|
@@ -17,12 +17,20 @@ function validSelectObject(x) {
|
|
|
17
17
|
<script lang="ts">import { usePromise } from '../svelte5Utils.svelte';
|
|
18
18
|
import JobLoader, {} from './JobLoader.svelte';
|
|
19
19
|
import Select from './select/Select.svelte';
|
|
20
|
+
import MultiSelect from './select/MultiSelect.svelte';
|
|
21
|
+
import { safeSelectItems } from './select/utils.svelte';
|
|
20
22
|
import Tooltip from './Tooltip.svelte';
|
|
21
23
|
import { Loader2 } from 'lucide-svelte';
|
|
22
24
|
import {} from '../utils';
|
|
23
25
|
import { deepEqual } from 'fast-equals';
|
|
24
26
|
import { untrack } from 'svelte';
|
|
25
|
-
let { value = $bindable(), helperScript,
|
|
27
|
+
let { value = $bindable(), helperScript, format, otherArgs: otherArgs } = $props();
|
|
28
|
+
const [inputType, entrypoint] = format.includes('-') ? format.split('-', 2) : [format, ''];
|
|
29
|
+
const isMultiple = inputType === 'dynmultiselect';
|
|
30
|
+
const isSelect = inputType === 'dynselect' || inputType === 'dynmultiselect';
|
|
31
|
+
if (isMultiple && value === undefined) {
|
|
32
|
+
value = [];
|
|
33
|
+
}
|
|
26
34
|
let resultJobLoader = $state();
|
|
27
35
|
let _items = usePromise(getItemsFromOptions, { clearValueOnRefresh: false });
|
|
28
36
|
let items = $derived(_items.value);
|
|
@@ -34,7 +42,7 @@ async function getItemsFromOptions() {
|
|
|
34
42
|
doneResult({ result }) {
|
|
35
43
|
if (!result || !Array.isArray(result)) {
|
|
36
44
|
if (result?.error?.message && result?.error?.name) {
|
|
37
|
-
reject(
|
|
45
|
+
reject(`Error in ${inputType} function execution: ` +
|
|
38
46
|
result?.error?.name +
|
|
39
47
|
' - ' +
|
|
40
48
|
result?.error?.message);
|
|
@@ -67,9 +75,18 @@ async function getItemsFromOptions() {
|
|
|
67
75
|
}
|
|
68
76
|
let neverLoaded = $state(true);
|
|
69
77
|
$effect(() => {
|
|
70
|
-
if (_items.value && value) {
|
|
71
|
-
if (
|
|
72
|
-
|
|
78
|
+
if (_items.value && value !== undefined && isSelect) {
|
|
79
|
+
if (isMultiple && Array.isArray(value)) {
|
|
80
|
+
const availableValues = new Set(_items.value.map((x) => x.value));
|
|
81
|
+
const filteredValue = value.filter((v) => availableValues.has(v));
|
|
82
|
+
if (filteredValue.length !== value.length) {
|
|
83
|
+
value = filteredValue;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else if (!isMultiple && value !== undefined) {
|
|
87
|
+
if (!_items.value.find((x) => x.value == value)) {
|
|
88
|
+
value = undefined;
|
|
89
|
+
}
|
|
73
90
|
}
|
|
74
91
|
}
|
|
75
92
|
});
|
|
@@ -98,15 +115,30 @@ $effect(() => {
|
|
|
98
115
|
<JobLoader onlyResult bind:this={resultJobLoader} />
|
|
99
116
|
|
|
100
117
|
<div class="w-full flex-col flex">
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
118
|
+
{#if inputType === 'dynmultiselect'}
|
|
119
|
+
<MultiSelect
|
|
120
|
+
bind:value
|
|
121
|
+
items={safeSelectItems(items || [])}
|
|
122
|
+
placeholder="Select items"
|
|
123
|
+
noItemsMsg={_items.status === 'loading' ? 'Loading...' : 'No items found'}
|
|
124
|
+
disabled={_items.status === 'loading'}
|
|
125
|
+
/>
|
|
126
|
+
{:else if inputType === 'dynselect'}
|
|
127
|
+
<Select
|
|
128
|
+
bind:value
|
|
129
|
+
bind:open
|
|
130
|
+
{items}
|
|
131
|
+
bind:filterText
|
|
132
|
+
loading={!open && _items.status === 'loading'}
|
|
133
|
+
clearable
|
|
134
|
+
noItemsMsg={_items.status === 'loading' ? 'Loading...' : 'No items found'}
|
|
135
|
+
/>
|
|
136
|
+
{:else}
|
|
137
|
+
<!-- Future dynamic input types can be added here -->
|
|
138
|
+
<div class="text-red-400 text-sm">
|
|
139
|
+
Unsupported dynamic input type: {inputType}
|
|
140
|
+
</div>
|
|
141
|
+
{/if}
|
|
110
142
|
{#if _items.error}
|
|
111
143
|
<div class="text-red-400 text-2xs">
|
|
112
144
|
error: <Tooltip>{_items.error}</Tooltip>
|
|
@@ -116,7 +148,7 @@ $effect(() => {
|
|
|
116
148
|
{:else}
|
|
117
149
|
<div class="flex flex-col gap-1 w-full">
|
|
118
150
|
<div class="text-xs text-tertiary"
|
|
119
|
-
>Dynamic
|
|
151
|
+
>Dynamic input ({inputType}) is not available in this mode, write value directly</div
|
|
120
152
|
>
|
|
121
153
|
{#await import('./JsonEditor.svelte')}
|
|
122
154
|
<Loader2 class="animate-spin" />
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type DynamicInput } from '../utils';
|
|
2
|
+
interface Props {
|
|
3
|
+
value?: any;
|
|
4
|
+
helperScript?: DynamicInput.HelperScript;
|
|
5
|
+
format: string;
|
|
6
|
+
otherArgs?: Record<string, any>;
|
|
7
|
+
name: string;
|
|
8
|
+
}
|
|
9
|
+
declare const DynamicInput: import("svelte").Component<Props, {}, "value">;
|
|
10
|
+
type DynamicInput = ReturnType<typeof DynamicInput>;
|
|
11
|
+
export default DynamicInput;
|
|
@@ -17,7 +17,7 @@ import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte
|
|
|
17
17
|
import Label from './Label.svelte';
|
|
18
18
|
import { sendUserToast } from '../toast';
|
|
19
19
|
import Toggle from './Toggle.svelte';
|
|
20
|
-
import {
|
|
20
|
+
import { DynamicInput, emptyString, generateRandomString, readFieldsRecursively } from '../utils';
|
|
21
21
|
import Popover from './meltComponents/Popover.svelte';
|
|
22
22
|
import SchemaFormDnd from './schema/SchemaFormDND.svelte';
|
|
23
23
|
import { deepEqual } from 'fast-equals';
|
|
@@ -27,16 +27,16 @@ import Editor from './Editor.svelte';
|
|
|
27
27
|
import AddPropertyV2 from './schema/AddPropertyV2.svelte';
|
|
28
28
|
// export let openEditTab: () => void = () => {}
|
|
29
29
|
const dispatch = createEventDispatcher();
|
|
30
|
-
let { schema = $bindable(), hiddenArgs = [], args = $bindable(undefined), shouldHideNoInputs = false, noVariablePicker = false, flexWrap = false, uiOnly = false, isFlowInput = false, noPreview = false, jsonEnabled = true, isAppInput = false, displayWebhookWarning = false, onlyMaskPassword = false, editTab, previewSchema = undefined, editPanelInitialSize = undefined, editPanelSize = $bindable(0), diff = {}, disableDnd = false, shouldDispatchChanges = false, isValid = $bindable(true), customUi = undefined, pannelExtraButtonWidth = 0, class: clazz = '',
|
|
30
|
+
let { schema = $bindable(), hiddenArgs = [], args = $bindable(undefined), shouldHideNoInputs = false, noVariablePicker = false, flexWrap = false, uiOnly = false, isFlowInput = false, noPreview = false, jsonEnabled = true, isAppInput = false, displayWebhookWarning = false, onlyMaskPassword = false, editTab, previewSchema = undefined, editPanelInitialSize = undefined, editPanelSize = $bindable(0), diff = {}, disableDnd = false, shouldDispatchChanges = false, isValid = $bindable(true), customUi = undefined, pannelExtraButtonWidth = 0, class: clazz = '', dynCode = $bindable(), dynLang = $bindable(), showDynOpt = false, addPropertyInEditorTab = false, openEditTab, addProperty, runButton, extraTab, schemaFormClassName = undefined, onChange = undefined } = $props();
|
|
31
31
|
$effect.pre(() => {
|
|
32
32
|
if (args == undefined) {
|
|
33
33
|
args = {};
|
|
34
34
|
}
|
|
35
|
-
if (
|
|
36
|
-
|
|
35
|
+
if (dynLang === undefined) {
|
|
36
|
+
dynLang = schema?.['x-windmill-dyn-select-lang'] || 'bun';
|
|
37
37
|
}
|
|
38
|
-
if (
|
|
39
|
-
|
|
38
|
+
if (dynCode === undefined) {
|
|
39
|
+
dynCode = schema?.['x-windmill-dyn-select-code'] || '';
|
|
40
40
|
}
|
|
41
41
|
});
|
|
42
42
|
$effect(() => {
|
|
@@ -46,10 +46,10 @@ $effect(() => {
|
|
|
46
46
|
}
|
|
47
47
|
});
|
|
48
48
|
$effect(() => {
|
|
49
|
-
if (schema &&
|
|
50
|
-
if (
|
|
51
|
-
schema['x-windmill-dyn-select-code'] =
|
|
52
|
-
schema['x-windmill-dyn-select-lang'] =
|
|
49
|
+
if (schema && dynCode !== undefined && dynLang !== undefined) {
|
|
50
|
+
if (dynCode && dynCode.trim()) {
|
|
51
|
+
schema['x-windmill-dyn-select-code'] = dynCode.trim();
|
|
52
|
+
schema['x-windmill-dyn-select-lang'] = dynLang;
|
|
53
53
|
}
|
|
54
54
|
else {
|
|
55
55
|
delete schema['x-windmill-dyn-select-code'];
|
|
@@ -113,15 +113,19 @@ let opened = $state(untrack(() => keys[0]));
|
|
|
113
113
|
function computeSelected(property) {
|
|
114
114
|
if (!opened)
|
|
115
115
|
return '';
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
116
|
+
if (property.type !== 'object')
|
|
117
|
+
return property.type;
|
|
118
|
+
if (property.format === 'resource-s3_object')
|
|
119
|
+
return 'S3';
|
|
120
|
+
if (property.format?.startsWith('dynselect-'))
|
|
121
|
+
return 'dynselect';
|
|
122
|
+
if (property.format?.startsWith('dynmultiselect-'))
|
|
123
|
+
return 'dynmultiselect';
|
|
124
|
+
if (property.oneOf && property.oneOf.length >= 2)
|
|
125
|
+
return 'oneOf';
|
|
126
|
+
if (property.format?.startsWith('resource-'))
|
|
127
|
+
return 'resource';
|
|
128
|
+
return 'object';
|
|
125
129
|
}
|
|
126
130
|
export function openField(key) {
|
|
127
131
|
opened = key;
|
|
@@ -216,36 +220,35 @@ $effect(() => {
|
|
|
216
220
|
$effect(() => {
|
|
217
221
|
!!editTab ? openEditTabFn() : closeEditTab();
|
|
218
222
|
});
|
|
219
|
-
let
|
|
223
|
+
let dynamicFunctions = $derived(Object.entries(schema?.properties ?? {})
|
|
220
224
|
.filter(([_, property]) => {
|
|
221
225
|
const props = property;
|
|
222
|
-
return
|
|
223
|
-
(props.format?.startsWith('dynselect-') || props.format?.startsWith('dynselect_')));
|
|
226
|
+
return props.type === 'object' && DynamicInput.isDynInputFormat(props.format);
|
|
224
227
|
})
|
|
225
228
|
.map(([fieldName, _]) => fieldName.replace(/\s+/g, '_')));
|
|
226
|
-
|
|
229
|
+
const DYNAMIC_OPTIONS = [
|
|
230
|
+
['DynSelect', 'dynselect'],
|
|
231
|
+
['DynMultiselect', 'dynmultiselect']
|
|
232
|
+
];
|
|
233
|
+
let typeOptions = $state([
|
|
227
234
|
['String', 'string'],
|
|
228
235
|
['Number', 'number'],
|
|
229
236
|
['Integer', 'integer'],
|
|
230
237
|
['Object', 'object'],
|
|
238
|
+
['Resource', 'resource'],
|
|
231
239
|
['OneOf', 'oneOf'],
|
|
232
240
|
['Array', 'array'],
|
|
233
241
|
['Boolean', 'boolean'],
|
|
234
|
-
['S3
|
|
235
|
-
];
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
function initDynSelectFn(lang) {
|
|
240
|
-
const generateFn = DynamicSelect.getGenerateTemplateFn(lang);
|
|
241
|
-
return Object.entries(schema?.properties ?? {})
|
|
242
|
-
.map(([functionName]) => generateFn(functionName))
|
|
243
|
-
.join('');
|
|
242
|
+
['S3', 'S3']
|
|
243
|
+
]);
|
|
244
|
+
function initDynFn(lang) {
|
|
245
|
+
const generateFn = DynamicInput.getGenerateTemplateFn(lang);
|
|
246
|
+
return dynamicFunctions.map((functionName) => generateFn(functionName)).join('');
|
|
244
247
|
}
|
|
245
|
-
function
|
|
246
|
-
const generateFn =
|
|
248
|
+
function updateDynCode(functionName, lang = 'bun') {
|
|
249
|
+
const generateFn = DynamicInput.getGenerateTemplateFn(lang);
|
|
247
250
|
const code = generateFn(functionName);
|
|
248
|
-
|
|
251
|
+
dynCode = dynCode ? dynCode.concat(code) : code;
|
|
249
252
|
}
|
|
250
253
|
let dndType = $state(generateRandomString());
|
|
251
254
|
</script>
|
|
@@ -313,8 +316,8 @@ let dndType = $state(generateRandomString());
|
|
|
313
316
|
}}
|
|
314
317
|
helperScript={{
|
|
315
318
|
type: 'inline',
|
|
316
|
-
code:
|
|
317
|
-
lang:
|
|
319
|
+
code: dynCode!,
|
|
320
|
+
lang: dynLang!
|
|
318
321
|
}}
|
|
319
322
|
prettifyHeader={isAppInput}
|
|
320
323
|
disabled={!!previewSchema}
|
|
@@ -328,55 +331,53 @@ let dndType = $state(generateRandomString());
|
|
|
328
331
|
|
|
329
332
|
{@render runButton?.()}
|
|
330
333
|
|
|
331
|
-
{#if
|
|
332
|
-
<
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
>
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
<div class="
|
|
342
|
-
|
|
343
|
-
Expected Functions for Dynamic Select Fields:
|
|
344
|
-
</div>
|
|
345
|
-
<ul class="text-xs text-blue-700 dark:text-blue-300 space-y-1">
|
|
346
|
-
{#each dynSelectFunctions as functionName}
|
|
347
|
-
<li class="font-mono bg-blue-100 dark:bg-blue-800/30 px-2 py-1 rounded">
|
|
348
|
-
{functionName}()
|
|
349
|
-
</li>
|
|
350
|
-
{/each}
|
|
351
|
-
</ul>
|
|
352
|
-
</div>
|
|
353
|
-
{/if}
|
|
354
|
-
<ToggleButtonGroup
|
|
355
|
-
bind:selected={dynSelectLang}
|
|
356
|
-
on:selected={({ detail }) => {
|
|
357
|
-
dynSelectCode = initDynSelectFn(detail)
|
|
358
|
-
}}
|
|
359
|
-
>
|
|
360
|
-
{#snippet children({ item })}
|
|
361
|
-
<ToggleButton value="bun" label="Typescript (Bun)" {item} />
|
|
362
|
-
<ToggleButton value="python3" label="Python" {item} />
|
|
363
|
-
{/snippet}
|
|
364
|
-
</ToggleButtonGroup>
|
|
365
|
-
{#key dynSelectLang}
|
|
366
|
-
<div class="border w-full h-full">
|
|
367
|
-
<Editor
|
|
368
|
-
bind:this={dynamicSelectEditor}
|
|
369
|
-
class="flex flex-1 grow h-80 w-full"
|
|
370
|
-
scriptLang={dynSelectLang}
|
|
371
|
-
useWebsockets={false}
|
|
372
|
-
automaticLayout
|
|
373
|
-
bind:code={dynSelectCode}
|
|
374
|
-
/>
|
|
334
|
+
{#if dynamicFunctions.length > 0}
|
|
335
|
+
<Section
|
|
336
|
+
label="Dynamic input functions"
|
|
337
|
+
collapsable={true}
|
|
338
|
+
collapsed={false}
|
|
339
|
+
class="text-sm"
|
|
340
|
+
>
|
|
341
|
+
<div class="flex flex-col gap-2 h-full">
|
|
342
|
+
{#if dynamicFunctions.length > 0}
|
|
343
|
+
<div class="bg-blue-50 dark:bg-blue-900/20 p-3 rounded-md">
|
|
344
|
+
<div class="text-sm font-medium text-blue-800 dark:text-blue-200 mb-2">
|
|
345
|
+
Expected Functions for Dynamic Input Fields:
|
|
375
346
|
</div>
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
347
|
+
<ul class="text-xs text-blue-700 dark:text-blue-300 space-y-1">
|
|
348
|
+
{#each dynamicFunctions as functionName}
|
|
349
|
+
<li class="font-mono bg-blue-100 dark:bg-blue-800/30 px-2 py-1 rounded">
|
|
350
|
+
{functionName}()
|
|
351
|
+
</li>
|
|
352
|
+
{/each}
|
|
353
|
+
</ul>
|
|
354
|
+
</div>
|
|
355
|
+
{/if}
|
|
356
|
+
<ToggleButtonGroup
|
|
357
|
+
bind:selected={dynLang}
|
|
358
|
+
on:selected={({ detail }) => {
|
|
359
|
+
dynCode = initDynFn(detail)
|
|
360
|
+
}}
|
|
361
|
+
>
|
|
362
|
+
{#snippet children({ item })}
|
|
363
|
+
<ToggleButton value="bun" label="Typescript (Bun)" {item} />
|
|
364
|
+
<ToggleButton value="python3" label="Python" {item} />
|
|
365
|
+
{/snippet}
|
|
366
|
+
</ToggleButtonGroup>
|
|
367
|
+
{#key dynLang}
|
|
368
|
+
<div class="border w-full h-full">
|
|
369
|
+
<Editor
|
|
370
|
+
bind:this={dynamicSelectEditor}
|
|
371
|
+
class="flex flex-1 grow h-80 w-full"
|
|
372
|
+
scriptLang={dynLang}
|
|
373
|
+
useWebsockets={false}
|
|
374
|
+
automaticLayout
|
|
375
|
+
bind:code={dynCode}
|
|
376
|
+
/>
|
|
377
|
+
</div>
|
|
378
|
+
{/key}
|
|
379
|
+
</div>
|
|
380
|
+
</Section>
|
|
380
381
|
{/if}
|
|
381
382
|
</div>
|
|
382
383
|
</div>
|
|
@@ -396,7 +397,12 @@ let dndType = $state(generateRandomString());
|
|
|
396
397
|
{#if jsonEnabled && customUi?.jsonOnly != true}
|
|
397
398
|
<div class="w-full p-3 flex gap-4 justify-end items-center">
|
|
398
399
|
{#if addPropertyInEditorTab}
|
|
399
|
-
<AddPropertyV2
|
|
400
|
+
<AddPropertyV2
|
|
401
|
+
bind:schema
|
|
402
|
+
onAddNew={(propertyName) => {
|
|
403
|
+
openField(propertyName)
|
|
404
|
+
}}
|
|
405
|
+
>
|
|
400
406
|
{#snippet trigger()}
|
|
401
407
|
<Button color="light" size="xs" iconOnly startIcon={{ icon: Plus }} />
|
|
402
408
|
{/snippet}
|
|
@@ -413,9 +419,13 @@ let dndType = $state(generateRandomString());
|
|
|
413
419
|
'Arguments can be edited either using the wizard, or by editing their JSON Schema.'
|
|
414
420
|
}}
|
|
415
421
|
lightMode
|
|
416
|
-
on:change={() => {
|
|
417
|
-
|
|
418
|
-
|
|
422
|
+
on:change={(e) => {
|
|
423
|
+
if (e.detail) {
|
|
424
|
+
schemaString = JSON.stringify(schema, null, '\t')
|
|
425
|
+
editor?.setCode(schemaString)
|
|
426
|
+
} else {
|
|
427
|
+
schema = JSON.parse(schemaString)
|
|
428
|
+
}
|
|
419
429
|
}}
|
|
420
430
|
/>
|
|
421
431
|
</div>
|
|
@@ -542,9 +552,11 @@ let dndType = $state(generateRandomString());
|
|
|
542
552
|
bind:selected={
|
|
543
553
|
() => computeSelected(schema.properties[opened ?? '']),
|
|
544
554
|
(v) => {
|
|
555
|
+
const isResource = v == 'resource'
|
|
545
556
|
const isS3 = v == 'S3'
|
|
546
557
|
const isOneOf = v == 'oneOf'
|
|
547
558
|
const isDynSelect = v == 'dynselect'
|
|
559
|
+
const isDynMultiselect = v == 'dynmultiselect'
|
|
548
560
|
const emptyProperty = {
|
|
549
561
|
contentEncoding: undefined,
|
|
550
562
|
enum_: undefined,
|
|
@@ -562,22 +574,29 @@ let dndType = $state(generateRandomString());
|
|
|
562
574
|
nullable: undefined,
|
|
563
575
|
required: undefined
|
|
564
576
|
}
|
|
565
|
-
|
|
566
577
|
if (isS3) {
|
|
567
578
|
schema.properties[argName] = {
|
|
568
579
|
...emptyProperty,
|
|
569
580
|
type: 'object',
|
|
570
581
|
format: 'resource-s3_object'
|
|
571
582
|
}
|
|
572
|
-
} else if (
|
|
583
|
+
} else if (isResource) {
|
|
584
|
+
schema.properties[argName] = {
|
|
585
|
+
...emptyProperty,
|
|
586
|
+
type: 'object',
|
|
587
|
+
format: 'resource-'
|
|
588
|
+
}
|
|
589
|
+
} else if (isDynSelect || isDynMultiselect) {
|
|
573
590
|
const functionName = argName.replace(/\s+/g, '_')
|
|
574
591
|
schema.properties[argName] = {
|
|
575
592
|
...emptyProperty,
|
|
576
593
|
type: 'object',
|
|
577
|
-
format:
|
|
594
|
+
format:
|
|
595
|
+
(isDynSelect ? 'dynselect-' : 'dynmultiselect-') +
|
|
596
|
+
functionName
|
|
578
597
|
}
|
|
579
|
-
|
|
580
|
-
dynamicSelectEditor?.setCode(
|
|
598
|
+
updateDynCode(argName, dynLang)
|
|
599
|
+
dynamicSelectEditor?.setCode(dynCode || '')
|
|
581
600
|
} else if (isOneOf) {
|
|
582
601
|
schema.properties[argName] = {
|
|
583
602
|
...emptyProperty,
|
|
@@ -628,6 +647,11 @@ let dndType = $state(generateRandomString());
|
|
|
628
647
|
{#each typeOptions as x}
|
|
629
648
|
<ToggleButton value={x[1]} label={x[0]} {item} />
|
|
630
649
|
{/each}
|
|
650
|
+
{#if showDynOpt}
|
|
651
|
+
{#each DYNAMIC_OPTIONS as x}
|
|
652
|
+
<ToggleButton value={x[1]} label={x[0]} {item} />
|
|
653
|
+
{/each}
|
|
654
|
+
{/if}
|
|
631
655
|
{/snippet}
|
|
632
656
|
</ToggleButtonGroup>
|
|
633
657
|
</Label>
|
|
@@ -27,9 +27,9 @@ interface Props {
|
|
|
27
27
|
customUi?: EditableSchemaFormUi | undefined;
|
|
28
28
|
pannelExtraButtonWidth?: number;
|
|
29
29
|
class?: string;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
dynCode?: string | undefined;
|
|
31
|
+
dynLang?: ScriptLang | undefined;
|
|
32
|
+
showDynOpt?: boolean;
|
|
33
33
|
addPropertyInEditorTab?: boolean;
|
|
34
34
|
openEditTab?: import('svelte').Snippet;
|
|
35
35
|
addProperty?: import('svelte').Snippet;
|
|
@@ -63,6 +63,6 @@ declare const EditableSchemaForm: $$__sveltets_2_IsomorphicComponent<Props, {
|
|
|
63
63
|
openField: (key: string) => void;
|
|
64
64
|
deleteField: (key: string) => void;
|
|
65
65
|
updateJson: () => void;
|
|
66
|
-
}, "args" | "schema" | "isValid" | "editPanelSize" | "
|
|
66
|
+
}, "args" | "schema" | "isValid" | "editPanelSize" | "dynCode" | "dynLang">;
|
|
67
67
|
type EditableSchemaForm = InstanceType<typeof EditableSchemaForm>;
|
|
68
68
|
export default EditableSchemaForm;
|