windmill-components 1.550.0 → 1.555.0
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/aiStore.d.ts +13 -0
- package/package/aiStore.js +70 -0
- package/package/common.d.ts +2 -1
- package/package/components/AIProviderPicker.svelte +25 -8
- package/package/components/ArgEnum.svelte +3 -2
- package/package/components/ArgEnum.svelte.d.ts +1 -0
- package/package/components/ArgInput.svelte +235 -174
- package/package/components/ArgInput.svelte.d.ts +4 -1
- package/package/components/ArrayTypeNarrowing.svelte +38 -32
- package/package/components/AutoscalingEvents.svelte +21 -5
- package/package/components/AutoscalingEvents.svelte.d.ts +4 -18
- package/package/components/DateTimeInput.svelte +8 -6
- package/package/components/DeployButton.svelte +1 -1
- package/package/components/Dev.svelte +6 -4
- package/package/components/EditableSchemaForm.svelte +7 -6
- package/package/components/Editor.svelte +2 -1
- package/package/components/EditorSettings.svelte +5 -5
- package/package/components/EditorSettings.svelte.d.ts +4 -18
- package/package/components/FakeMonacoPlaceHolder.svelte +4 -2
- package/package/components/FakeMonacoPlaceHolder.svelte.d.ts +1 -0
- package/package/components/FieldHeader.svelte +5 -7
- package/package/components/FirstStepInputs.svelte +1 -1
- package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
- package/package/components/FlowPlugConnect.svelte +8 -2
- package/package/components/FlowPlugConnect.svelte.d.ts +1 -0
- package/package/components/FlowPreviewContent.svelte +113 -92
- package/package/components/FlowPreviewContent.svelte.d.ts +3 -3
- package/package/components/FlowStatusViewer.svelte +3 -2
- package/package/components/FlowStatusViewerInner.svelte +1 -1
- package/package/components/FolderEditor.svelte +6 -7
- package/package/components/GroupEditor.svelte +148 -141
- package/package/components/GroupEditor.svelte.d.ts +5 -4
- package/package/components/InputTransformForm.svelte +88 -82
- package/package/components/InputTransformSchemaForm.svelte +5 -4
- package/package/components/InstanceSetting.svelte +17 -9
- package/package/components/JsonEditor.svelte +18 -9
- package/package/components/JsonEditor.svelte.d.ts +1 -1
- package/package/components/JsonInputs.svelte +1 -1
- package/package/components/ModulePreviewForm.svelte +23 -19
- package/package/components/NumberTypeNarrowing.svelte +32 -16
- package/package/components/ObjectStoreConfigSettings.svelte +27 -19
- package/package/components/Path.svelte +2 -8
- package/package/components/Path.svelte.d.ts +1 -1
- package/package/components/ResourceEditor.svelte +3 -10
- package/package/components/ResourcePicker.svelte +85 -72
- package/package/components/ResourcePicker.svelte.d.ts +2 -0
- package/package/components/RunChart.svelte +1 -1
- package/package/components/RunForm.svelte +11 -7
- package/package/components/S3ArrayHelperButton.svelte +12 -6
- package/package/components/S3ArrayHelperButton.svelte.d.ts +1 -0
- package/package/components/S3FilePicker.svelte +1 -1
- package/package/components/SchemaForm.svelte +18 -10
- package/package/components/SchemaForm.svelte.d.ts +7 -1
- package/package/components/SchemaFormWithArgPicker.svelte +1 -1
- package/package/components/ScriptBuilder.svelte +2 -2
- package/package/components/ScriptEditor.svelte +4 -3
- package/package/components/ScriptEditor.svelte.d.ts +1 -1
- package/package/components/ShareModal.svelte +4 -4
- package/package/components/SimpleEditor.svelte +6 -2
- package/package/components/SimpleEditor.svelte.d.ts +3 -0
- package/package/components/StringTypeNarrowing.svelte +5 -1
- package/package/components/SuperadminSettingsInner.svelte +3 -3
- package/package/components/TemplateEditor.svelte +18 -9
- package/package/components/Toast.svelte +2 -7
- package/package/components/Toast.svelte.d.ts +4 -18
- package/package/components/Toggle.svelte +17 -7
- package/package/components/ToggleHubWorkspaceQuick.svelte +3 -3
- package/package/components/WorkerGroup.svelte +2 -14
- package/package/components/apps/components/buttons/AppButton.svelte +57 -39
- package/package/components/apps/components/display/dbtable/InsertRow.svelte +32 -2
- package/package/components/apps/components/display/dbtable/queries/insert.js +2 -1
- package/package/components/apps/components/display/dbtable/utils.d.ts +8 -8
- package/package/components/apps/components/display/table/utils.js +13 -3
- package/package/components/apps/components/helpers/RunnableComponent.svelte +3 -3
- package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +2 -1
- package/package/components/apps/editor/AppEditorHeader.svelte +33 -271
- package/package/components/apps/editor/AppEditorHeaderDeploy.svelte +233 -0
- package/package/components/apps/editor/AppEditorHeaderDeploy.svelte.d.ts +18 -0
- package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte +47 -0
- package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte.d.ts +8 -0
- package/package/components/apps/editor/GridEditor.svelte +7 -2
- package/package/components/apps/editor/appDeploy.svelte.d.ts +1 -0
- package/package/components/apps/editor/appDeploy.svelte.js +6 -0
- package/package/components/apps/editor/appUtils.d.ts +1 -0
- package/package/components/apps/editor/appUtils.js +30 -1
- package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -1
- package/package/components/apps/editor/component/components.d.ts +3 -3
- package/package/components/apps/editor/component/components.js +1 -1
- package/package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +6 -4
- 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/InputsSpecEditor.svelte +58 -8
- package/package/components/auditLogs/AuditLogsFilters.svelte +1 -1
- package/package/components/common/ResizeTransitionWrapper.svelte +39 -0
- package/package/components/common/ResizeTransitionWrapper.svelte.d.ts +12 -0
- package/package/components/common/badge/CountBadge.svelte +29 -0
- package/package/components/common/badge/CountBadge.svelte.d.ts +8 -0
- package/package/components/common/button/Button.svelte +1 -0
- package/package/components/common/button/ConnectionButton.svelte +6 -1
- package/package/components/common/button/ConnectionButton.svelte.d.ts +2 -0
- package/package/components/common/button/RefreshButton.svelte +8 -4
- package/package/components/common/button/RefreshButton.svelte.d.ts +3 -0
- package/package/components/common/calendarPicker/CalendarPicker.svelte +1 -1
- package/package/components/common/fileInput/FileInput.svelte +7 -6
- package/package/components/common/fileUpload/S3ArgInput.svelte +11 -9
- package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +1 -0
- package/package/components/common/popup/PopupV2.svelte +6 -0
- package/package/components/common/toggleButton-v2/ToggleButton.svelte +17 -26
- package/package/components/common/toggleButton-v2/ToggleButton.svelte.d.ts +16 -30
- package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +1 -1
- package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +3 -3
- package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
- package/package/components/copilot/CodeCompletionStatus.svelte +2 -1
- package/package/components/copilot/CronGen.svelte +1 -1
- package/package/components/copilot/FlowInlineScriptAIButton.svelte +2 -2
- package/package/components/copilot/IteratorGen.svelte +30 -25
- package/package/components/copilot/IteratorGen.svelte.d.ts +8 -7
- package/package/components/copilot/MetadataGen.svelte +4 -3
- package/package/components/copilot/PredicateGen.svelte +15 -12
- package/package/components/copilot/PredicateGen.svelte.d.ts +5 -4
- package/package/components/copilot/RegexGen.svelte +1 -1
- package/package/components/copilot/ScriptFix.svelte +1 -1
- package/package/components/copilot/ScriptGen.svelte +2 -1
- package/package/components/copilot/StepGenQuick.svelte +15 -16
- package/package/components/copilot/StepGenQuick.svelte.d.ts +14 -13
- package/package/components/copilot/StepInputGen.svelte +50 -36
- package/package/components/copilot/StepInputGen.svelte.d.ts +13 -10
- package/package/components/copilot/StepInputsGen.svelte +18 -19
- package/package/components/copilot/StepInputsGen.svelte.d.ts +4 -18
- package/package/components/copilot/autocomplete/Autocompletor.js +1 -1
- package/package/components/copilot/autocomplete/request.js +1 -1
- package/package/components/copilot/chat/AIChat.svelte +2 -1
- package/package/components/copilot/chat/AIChatManager.svelte.js +2 -1
- package/package/components/copilot/chat/AiChatLayout.svelte +2 -1
- package/package/components/copilot/chat/ProviderModelSelector.svelte +10 -9
- package/package/components/copilot/chat/ProviderModelSelector.svelte.d.ts +2 -17
- package/package/components/copilot/chat/flow/FlowAIButton.svelte +1 -1
- package/package/components/copilot/chat/script/core.js +2 -1
- package/package/components/copilot/chat/shared.js +2 -1
- package/package/components/copilot/lib.js +2 -1
- package/package/components/details/DetailPageLayout.svelte +3 -2
- package/package/components/details/DetailPageLayout.svelte.d.ts +1 -0
- package/package/components/flows/CreateActionsFlow.svelte +1 -1
- package/package/components/flows/FlowChatInterface.svelte +404 -0
- package/package/components/flows/FlowChatInterface.svelte.d.ts +19 -0
- package/package/components/flows/FlowChatMessage.svelte +41 -0
- package/package/components/flows/FlowChatMessage.svelte.d.ts +9 -0
- package/package/components/flows/FlowConversationsSidebar.svelte +213 -0
- package/package/components/flows/FlowConversationsSidebar.svelte.d.ts +15 -0
- package/package/components/flows/FlowEditor.svelte.d.ts +1 -1
- package/package/components/flows/FlowModuleIcon.svelte +10 -10
- package/package/components/flows/common/FlowCard.svelte +10 -2
- package/package/components/flows/common/FlowCard.svelte.d.ts +1 -0
- package/package/components/flows/common/FlowCardHeader.svelte +2 -1
- package/package/components/flows/common/FlowCardHeader.svelte.d.ts +1 -0
- package/package/components/flows/content/DynamicInputHelpBox.svelte +4 -4
- package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -1
- package/package/components/flows/content/FlowInput.svelte +381 -259
- package/package/components/flows/content/FlowInput.svelte.d.ts +1 -1
- package/package/components/flows/content/FlowInputsQuick.svelte +55 -34
- package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +2 -2
- package/package/components/flows/content/FlowModuleComponent.svelte +5 -10
- package/package/components/flows/flowInfers.d.ts +60 -0
- package/package/components/flows/flowInfers.js +72 -66
- package/package/components/flows/{flowStore.d.ts → flowStore.svelte.d.ts} +1 -0
- package/package/components/flows/header/FlowPreviewButtons.svelte +1 -1
- package/package/components/flows/map/FlowErrorHandlerItem.svelte +4 -2
- package/package/components/flows/map/FlowErrorHandlerItem.svelte.d.ts +1 -0
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -1
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +5 -2
- package/package/components/flows/map/FlowStickyNode.svelte +2 -2
- package/package/components/flows/map/FlowStickyNode.svelte.d.ts +1 -0
- package/package/components/flows/map/InsertModuleButton.svelte +5 -2
- package/package/components/flows/map/InsertModuleButton.svelte.d.ts +4 -3
- package/package/components/flows/map/InsertModuleInner.svelte +3 -1
- package/package/components/flows/map/InsertModuleInner.svelte.d.ts +2 -2
- package/package/components/flows/map/VirtualItem.svelte +1 -2
- package/package/components/flows/pickers/PickHubScriptQuick.svelte +8 -3
- package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -1
- package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +15 -12
- package/package/components/flows/propPicker/PropPickerWrapper.svelte +1 -15
- package/package/components/graph/FlowGraphV2.svelte +2 -1
- package/package/components/graph/FlowGraphV2.svelte.d.ts +1 -0
- package/package/components/graph/graphBuilder.svelte.d.ts +2 -0
- package/package/components/graph/graphBuilder.svelte.js +1 -0
- package/package/components/graph/renderers/edges/BaseEdge.svelte +1 -0
- package/package/components/graph/renderers/nodes/InputNode.svelte +13 -2
- package/package/components/graph/renderers/triggers/TriggersBadge.svelte +2 -27
- package/package/components/instanceSettings.js +17 -0
- package/package/components/progressBar/ProgressBar.svelte +1 -1
- package/package/components/raw_apps/FileEditorIcon.svelte +1 -1
- package/package/components/raw_apps/FileEditorIcon.svelte.d.ts +4 -18
- package/package/components/raw_apps/RawAppBackgroundRunner.svelte +2 -8
- package/package/components/raw_apps/RawAppBackgroundRunner.svelte.d.ts +4 -18
- package/package/components/raw_apps/RawAppEditor.svelte +6 -7
- package/package/components/raw_apps/RawAppEditorHeader.svelte +48 -301
- package/package/components/raw_apps/RawAppEditorHeader.svelte.d.ts +18 -19
- package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +10 -16
- package/package/components/raw_apps/RawAppInlineScriptEditor.svelte.d.ts +13 -13
- package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte +8 -11
- package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte.d.ts +1 -2
- package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +0 -1
- package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte +7 -13
- package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte.d.ts +8 -8
- package/package/components/raw_apps/RawAppPreview.svelte +3 -7
- package/package/components/raw_apps/RawAppPreview.svelte.d.ts +5 -19
- package/package/components/raw_apps/utils.d.ts +1 -1
- package/package/components/raw_apps/utils.js +3 -3
- package/package/components/runs/RunOption.svelte +2 -2
- package/package/components/runs/RunsFilter.svelte +15 -12
- package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
- package/package/components/schema/EditableSchemaDrawer.svelte +19 -18
- package/package/components/schema/FlowPropertyEditor.svelte +9 -2
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/PropertyEditor.svelte +22 -26
- package/package/components/schema/SchemaFormDND.svelte +3 -2
- package/package/components/schema/SchemaFormDND.svelte.d.ts +1 -0
- package/package/components/select/DraggableTags.svelte +2 -2
- package/package/components/select/MultiSelect.svelte +14 -8
- package/package/components/select/Select.svelte +12 -5
- package/package/components/select/Select.svelte.d.ts +11 -0
- package/package/components/select/SelectDropdown.svelte +98 -46
- package/package/components/select/SelectDropdown.svelte.d.ts +10 -0
- package/package/components/select/utils.svelte.js +2 -0
- package/package/components/settings/CreateToken.svelte +76 -49
- package/package/components/settings/WorkspaceUserSettings.svelte +20 -17
- package/package/components/sidebar/CriticalAlertTable.svelte +2 -1
- package/package/components/sidebar/Linkify.svelte +14 -0
- package/package/components/sidebar/Linkify.svelte.d.ts +5 -0
- package/package/components/sidebar/WorkspaceMenu.svelte +8 -3
- package/package/components/table/tableUtils.js +1 -1
- package/package/components/text_input/TextInput.svelte +30 -0
- package/package/components/text_input/TextInput.svelte.d.ts +17 -0
- package/package/components/triggers/TriggersEditor.svelte +11 -1
- package/package/components/triggers/triggers.svelte.d.ts +1 -1
- package/package/components/triggers/triggers.svelte.js +8 -4
- package/package/components/tutorials/FlowBuilderTutorialErrorHandler.svelte +2 -2
- package/package/components/tutorials/FlowBuilderTutorialForLoop.svelte +3 -0
- package/package/components/tutorials/FlowBuilderTutorialSimpleFlow.svelte +49 -17
- package/package/components/tutorials/Tutorial.svelte +9 -0
- package/package/components/tutorials/Tutorial.svelte.d.ts +1 -0
- package/package/components/tutorials/app/AppTutorial.svelte +41 -57
- package/package/components/tutorials/app/BackgroundRunnablesTutorial.svelte +3 -5
- package/package/components/tutorials/app/ConnectionTutorial.svelte +2 -2
- package/package/components/tutorials/utils.js +2 -154
- package/package/components/vscode.js +16 -8
- package/package/components/workspaceSettings/AISettings.svelte +4 -3
- package/package/components/workspaceSettings/CreateWorkspace.svelte +2 -2
- package/package/components/workspaceSettings/DucklakeSettings.svelte +64 -7
- package/package/components/workspaceSettings/StorageSettings.svelte +24 -26
- package/package/editorUtils.d.ts +1 -1
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +82 -1
- package/package/gen/schemas.gen.js +82 -1
- package/package/gen/services.gen.d.ts +175 -1
- package/package/gen/services.gen.js +345 -2
- package/package/gen/types.gen.d.ts +1324 -549
- package/package/script_helpers.js +5 -5
- package/package/services/JobManager.js +4 -2
- package/package/stores.d.ts +4 -13
- package/package/stores.js +5 -68
- package/package/toast.js +2 -1
- package/package/utils.d.ts +1 -0
- package/package/utils.js +3 -0
- package/package.json +3 -3
- /package/package/components/flows/{flowStore.js → flowStore.svelte.js} +0 -0
|
@@ -22,8 +22,15 @@ import CaptureTable from '../../triggers/CaptureTable.svelte';
|
|
|
22
22
|
import { isObjectTooBig, readFieldsRecursively } from '../../../utils';
|
|
23
23
|
import { refreshStateStore } from '../../../svelte5Utils.svelte';
|
|
24
24
|
import { deepEqual } from 'fast-equals';
|
|
25
|
+
import FlowChatInterface from '../FlowChatInterface.svelte';
|
|
26
|
+
import Toggle from '../../Toggle.svelte';
|
|
27
|
+
import { AI_AGENT_SCHEMA } from '../flowInfers';
|
|
28
|
+
import { nextId } from '../flowModuleNextId';
|
|
29
|
+
import ConfirmationModal from '../../common/confirmationModal/ConfirmationModal.svelte';
|
|
25
30
|
let { noEditor, disabled, onTestFlow, previewOpen } = $props();
|
|
26
|
-
const { flowStore, previewArgs, pathStore, initialPathStore, fakeInitialPath, flowInputEditorState } = getContext('FlowEditorContext');
|
|
31
|
+
const { flowStore, flowStateStore, previewArgs, pathStore, initialPathStore, fakeInitialPath, flowInputEditorState } = getContext('FlowEditorContext');
|
|
32
|
+
let chatInputEnabled = $derived(Boolean(flowStore.val.value?.chat_input_enabled));
|
|
33
|
+
let showChatModeWarning = $state(false);
|
|
27
34
|
let addPropertyV2 = $state(undefined);
|
|
28
35
|
let previewSchema = $state(undefined);
|
|
29
36
|
let payloadData = undefined;
|
|
@@ -159,8 +166,8 @@ function handleKeydown(event) {
|
|
|
159
166
|
event.preventDefault();
|
|
160
167
|
}
|
|
161
168
|
}
|
|
162
|
-
function runPreview() {
|
|
163
|
-
onTestFlow?.();
|
|
169
|
+
async function runPreview() {
|
|
170
|
+
await onTestFlow?.();
|
|
164
171
|
}
|
|
165
172
|
function updatePreviewSchemaAndArgs(payload) {
|
|
166
173
|
if (isObjectTooBig(payload)) {
|
|
@@ -291,276 +298,391 @@ function resetSelected() {
|
|
|
291
298
|
jsonInputs?.resetSelected(true);
|
|
292
299
|
firstStepInputs?.resetSelected(true);
|
|
293
300
|
}
|
|
301
|
+
async function runFlowWithMessage(message) {
|
|
302
|
+
previewArgs.val = { user_message: message };
|
|
303
|
+
const jobId = await onTestFlow?.();
|
|
304
|
+
return jobId;
|
|
305
|
+
}
|
|
306
|
+
function hasOtherInputs() {
|
|
307
|
+
const properties = flowStore.val.schema?.properties;
|
|
308
|
+
return Boolean(properties &&
|
|
309
|
+
Object.keys(properties).length > 0 &&
|
|
310
|
+
!(Object.keys(properties).length === 1 && Object.keys(properties).includes('user_message')));
|
|
311
|
+
}
|
|
312
|
+
function handleToggleChatMode() {
|
|
313
|
+
if (!chatInputEnabled) {
|
|
314
|
+
// Check if there are existing inputs
|
|
315
|
+
if (hasOtherInputs()) {
|
|
316
|
+
showChatModeWarning = true;
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
enableChatMode();
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
// Disable chat input - remove from flow.value
|
|
324
|
+
if (flowStore.val.value) {
|
|
325
|
+
flowStore.val.value.chat_input_enabled = false;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
function enableChatMode() {
|
|
330
|
+
// Enable chat input - set in flow.value
|
|
331
|
+
flowStore.val.value.chat_input_enabled = true;
|
|
332
|
+
// Set up the schema for chat input
|
|
333
|
+
flowStore.val.schema = {
|
|
334
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
335
|
+
type: 'object',
|
|
336
|
+
properties: {
|
|
337
|
+
user_message: {
|
|
338
|
+
type: 'string',
|
|
339
|
+
description: 'Message from user'
|
|
340
|
+
}
|
|
341
|
+
},
|
|
342
|
+
required: ['user_message']
|
|
343
|
+
};
|
|
344
|
+
const hasAiAgent = flowStore.val.value.modules.some((m) => m.value.type === 'aiagent');
|
|
345
|
+
if (!hasAiAgent) {
|
|
346
|
+
const aiAgentId = nextId(flowStateStore.val, flowStore.val);
|
|
347
|
+
flowStore.val.value.modules = [
|
|
348
|
+
...flowStore.val.value.modules,
|
|
349
|
+
{
|
|
350
|
+
id: aiAgentId,
|
|
351
|
+
value: {
|
|
352
|
+
type: 'aiagent',
|
|
353
|
+
tools: [],
|
|
354
|
+
input_transforms: Object.keys(AI_AGENT_SCHEMA.properties ?? {}).reduce((accu, key) => {
|
|
355
|
+
if (key === 'user_message') {
|
|
356
|
+
accu[key] = { type: 'javascript', expr: 'flow_input.user_message' };
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
accu[key] = {
|
|
360
|
+
type: 'static',
|
|
361
|
+
value: undefined
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
return accu;
|
|
365
|
+
}, {})
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
];
|
|
369
|
+
}
|
|
370
|
+
showChatModeWarning = false;
|
|
371
|
+
}
|
|
294
372
|
</script>
|
|
295
373
|
|
|
296
374
|
<!-- Add svelte:window to listen for keyboard events -->
|
|
297
375
|
<svelte:window onkeydown={handleKeydown} />
|
|
298
376
|
|
|
377
|
+
<ConfirmationModal
|
|
378
|
+
open={showChatModeWarning}
|
|
379
|
+
title="Enable Chat Mode?"
|
|
380
|
+
confirmationText="Continue"
|
|
381
|
+
onConfirmed={enableChatMode}
|
|
382
|
+
onCanceled={() => (showChatModeWarning = false)}
|
|
383
|
+
>
|
|
384
|
+
<p class="text-sm text-secondary">
|
|
385
|
+
Enabling Chat Mode will replace all existing flow inputs with a single
|
|
386
|
+
<span class="font-mono text-xs bg-surface-secondary px-1 rounded">user_message</span>
|
|
387
|
+
parameter.
|
|
388
|
+
</p>
|
|
389
|
+
<p class="text-sm text-secondary mt-2">
|
|
390
|
+
Your current input configuration will be lost. Are you sure you want to continue?
|
|
391
|
+
</p>
|
|
392
|
+
</ConfirmationModal>
|
|
393
|
+
|
|
299
394
|
<FlowCard {noEditor} title="Flow Input">
|
|
300
|
-
{#
|
|
301
|
-
|
|
302
|
-
<
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
on:
|
|
307
|
-
|
|
395
|
+
{#snippet action()}
|
|
396
|
+
{#if !disabled}
|
|
397
|
+
<Toggle
|
|
398
|
+
textClass="font-normal text-sm"
|
|
399
|
+
size="sm"
|
|
400
|
+
checked={chatInputEnabled}
|
|
401
|
+
on:change={handleToggleChatMode}
|
|
402
|
+
options={{
|
|
403
|
+
right: 'Chat Mode',
|
|
404
|
+
rightTooltip:
|
|
405
|
+
'When enabled, the flow execution page will show a chat interface where each message sent runs the flow with the message as "user_message" input parameter. The flow schema will be automatically set to accept only a user_message string input.'
|
|
308
406
|
}}
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
407
|
+
/>
|
|
408
|
+
{/if}
|
|
409
|
+
{/snippet}
|
|
410
|
+
{#if !disabled}
|
|
411
|
+
<div class="flex flex-col h-full">
|
|
412
|
+
{#if flowStore.val.value?.chat_input_enabled}
|
|
413
|
+
<div class="flex-1 min-h-0">
|
|
414
|
+
<FlowChatInterface
|
|
415
|
+
onRunFlow={runFlowWithMessage}
|
|
416
|
+
createConversation={async () => {
|
|
417
|
+
const newConversationId = crypto.randomUUID()
|
|
418
|
+
return newConversationId
|
|
419
|
+
}}
|
|
420
|
+
/>
|
|
421
|
+
</div>
|
|
422
|
+
{:else}
|
|
423
|
+
<div class="py-2 px-4 flex-1 min-h-0">
|
|
424
|
+
<EditableSchemaForm
|
|
425
|
+
bind:this={editableSchemaForm}
|
|
426
|
+
bind:schema={flowStore.val.schema}
|
|
427
|
+
isFlowInput
|
|
428
|
+
on:delete={(e) => {
|
|
429
|
+
addPropertyV2?.handleDeleteArgument([e.detail])
|
|
430
|
+
}}
|
|
431
|
+
showDynOpt
|
|
432
|
+
displayWebhookWarning
|
|
433
|
+
editTab={$flowInputEditorState?.selectedTab}
|
|
434
|
+
{previewSchema}
|
|
435
|
+
bind:args={previewArgs.val}
|
|
436
|
+
bind:editPanelSize={
|
|
437
|
+
() => {
|
|
438
|
+
return editPanelSize
|
|
439
|
+
},
|
|
440
|
+
(v) => {
|
|
441
|
+
if (editPanelSize != v) {
|
|
442
|
+
editPanelSize = v
|
|
443
|
+
}
|
|
444
|
+
}
|
|
344
445
|
}
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
446
|
+
editPanelInitialSize={$flowInputEditorState?.editPanelSize}
|
|
447
|
+
pannelExtraButtonWidth={$flowInputEditorState?.editPanelSize ? tabButtonWidth : 0}
|
|
448
|
+
{diff}
|
|
449
|
+
disableDnd={!!previewSchema}
|
|
450
|
+
on:rejectChange={(e) => {
|
|
451
|
+
rejectChange(e.detail).then(() => {
|
|
452
|
+
updatePreviewSchema(selectedSchema)
|
|
453
|
+
})
|
|
454
|
+
}}
|
|
455
|
+
on:acceptChange={(e) => {
|
|
456
|
+
acceptChange(e.detail).then(() => {
|
|
457
|
+
updatePreviewSchema(selectedSchema)
|
|
458
|
+
})
|
|
459
|
+
}}
|
|
460
|
+
shouldDispatchChanges={true}
|
|
461
|
+
onChange={() => {
|
|
462
|
+
if (!previewSchema) {
|
|
463
|
+
let args = $state.snapshot(previewArgs.val)
|
|
464
|
+
if (!deepEqual(args, savedPreviewArgs)) {
|
|
465
|
+
savedPreviewArgs = args
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}}
|
|
469
|
+
bind:isValid
|
|
470
|
+
bind:dynCode
|
|
471
|
+
bind:dynLang
|
|
472
|
+
>
|
|
473
|
+
{#snippet openEditTab()}
|
|
474
|
+
<div class={twMerge('flex flex-row divide-x', ButtonType.ColorVariants.blue.divider)}>
|
|
475
|
+
<SideBarTab {dropdownItems} fullMenu={!!$flowInputEditorState?.selectedTab}>
|
|
476
|
+
{#snippet close_button()}
|
|
477
|
+
<button
|
|
478
|
+
onclick={() => {
|
|
479
|
+
handleEditSchema()
|
|
480
|
+
}}
|
|
481
|
+
title={!!$flowInputEditorState?.selectedTab
|
|
482
|
+
? 'Close input editor'
|
|
483
|
+
: 'Open input editor'}
|
|
484
|
+
class={twMerge(
|
|
485
|
+
ButtonType.ColorVariants.blue.contained,
|
|
486
|
+
!!$flowInputEditorState?.selectedTab
|
|
487
|
+
? 'rounded-tl-md border-l border-t'
|
|
488
|
+
: 'rounded-md border'
|
|
489
|
+
)}
|
|
490
|
+
>
|
|
491
|
+
<div class="p-2 center-center">
|
|
492
|
+
{#if !!$flowInputEditorState?.selectedTab}
|
|
493
|
+
<ChevronRight size={14} />
|
|
494
|
+
{:else}
|
|
495
|
+
<Pen size={14} />
|
|
496
|
+
{/if}
|
|
497
|
+
</div>
|
|
498
|
+
</button>
|
|
499
|
+
{/snippet}
|
|
500
|
+
</SideBarTab>
|
|
501
|
+
</div>
|
|
502
|
+
{/snippet}
|
|
503
|
+
{#snippet addProperty()}
|
|
504
|
+
{#if !!previewSchema}
|
|
505
|
+
<div class="flex flex-row items-center gap-2 right-2 justify-end">
|
|
506
|
+
<Button
|
|
507
|
+
size="xs"
|
|
508
|
+
color="green"
|
|
509
|
+
disabled={!previewSchema}
|
|
510
|
+
shortCut={{ Icon: CornerDownLeft, hide: false, withoutModifier: true }}
|
|
511
|
+
startIcon={{ icon: Check }}
|
|
512
|
+
on:click={() => {
|
|
513
|
+
applySchemaAndArgs()
|
|
514
|
+
connectFirstNode()
|
|
515
|
+
}}
|
|
516
|
+
>
|
|
517
|
+
{Object.values(diff).every((el) => el.diff === 'same')
|
|
518
|
+
? 'Apply args'
|
|
519
|
+
: 'Update schema'}
|
|
520
|
+
</Button>
|
|
521
|
+
<Button
|
|
522
|
+
variant="border"
|
|
523
|
+
color="light"
|
|
524
|
+
size="xs"
|
|
525
|
+
startIcon={{ icon: X }}
|
|
526
|
+
shortCut={{ key: 'esc', withoutModifier: true }}
|
|
527
|
+
on:click={() => {
|
|
528
|
+
resetSelected()
|
|
529
|
+
}}
|
|
530
|
+
/>
|
|
531
|
+
</div>
|
|
532
|
+
{:else}
|
|
533
|
+
<AddPropertyV2
|
|
534
|
+
bind:schema={flowStore.val.schema}
|
|
535
|
+
bind:this={addPropertyV2}
|
|
536
|
+
onAddNew={(argName) => {
|
|
537
|
+
handleEditSchema('inputEditor')
|
|
538
|
+
editableSchemaForm?.openField(argName)
|
|
539
|
+
refreshStateStore(flowStore)
|
|
358
540
|
}}
|
|
359
|
-
title={!!$flowInputEditorState?.selectedTab
|
|
360
|
-
? 'Close input editor'
|
|
361
|
-
: 'Open input editor'}
|
|
362
|
-
class={twMerge(
|
|
363
|
-
ButtonType.ColorVariants.blue.contained,
|
|
364
|
-
!!$flowInputEditorState?.selectedTab
|
|
365
|
-
? 'rounded-tl-md border-l border-t'
|
|
366
|
-
: 'rounded-md border'
|
|
367
|
-
)}
|
|
368
541
|
>
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
disabled={!previewSchema}
|
|
388
|
-
shortCut={{ Icon: CornerDownLeft, hide: false, withoutModifier: true }}
|
|
389
|
-
startIcon={{ icon: Check }}
|
|
390
|
-
on:click={() => {
|
|
391
|
-
applySchemaAndArgs()
|
|
392
|
-
connectFirstNode()
|
|
393
|
-
}}
|
|
394
|
-
>
|
|
395
|
-
{Object.values(diff).every((el) => el.diff === 'same')
|
|
396
|
-
? 'Apply args'
|
|
397
|
-
: 'Update schema'}
|
|
398
|
-
</Button>
|
|
399
|
-
<Button
|
|
400
|
-
variant="border"
|
|
401
|
-
color="light"
|
|
402
|
-
size="xs"
|
|
403
|
-
startIcon={{ icon: X }}
|
|
404
|
-
shortCut={{ key: 'esc', withoutModifier: true }}
|
|
405
|
-
on:click={() => {
|
|
406
|
-
resetSelected()
|
|
407
|
-
}}
|
|
408
|
-
/>
|
|
409
|
-
</div>
|
|
410
|
-
{:else}
|
|
411
|
-
<AddPropertyV2
|
|
412
|
-
bind:schema={flowStore.val.schema}
|
|
413
|
-
bind:this={addPropertyV2}
|
|
414
|
-
onAddNew={(argName) => {
|
|
415
|
-
handleEditSchema('inputEditor')
|
|
416
|
-
editableSchemaForm?.openField(argName)
|
|
417
|
-
refreshStateStore(flowStore)
|
|
418
|
-
}}
|
|
419
|
-
>
|
|
420
|
-
{#snippet trigger()}
|
|
421
|
-
<div
|
|
422
|
-
class="w-full py-2 flex justify-center items-center border border-dashed rounded-md hover:bg-surface-hover"
|
|
423
|
-
id="add-flow-input-btn"
|
|
542
|
+
{#snippet trigger()}
|
|
543
|
+
<div
|
|
544
|
+
class="w-full py-2 flex justify-center items-center border border-dashed rounded-md hover:bg-surface-hover"
|
|
545
|
+
id="add-flow-input-btn"
|
|
546
|
+
>
|
|
547
|
+
<Plus size={14} />
|
|
548
|
+
</div>
|
|
549
|
+
{/snippet}
|
|
550
|
+
</AddPropertyV2>
|
|
551
|
+
{/if}
|
|
552
|
+
{/snippet}
|
|
553
|
+
{#snippet extraTab()}
|
|
554
|
+
{#if $flowInputEditorState?.selectedTab === 'history'}
|
|
555
|
+
<FlowInputEditor
|
|
556
|
+
title="History"
|
|
557
|
+
on:destroy={() => {
|
|
558
|
+
updatePreviewSchemaAndArgs(undefined)
|
|
559
|
+
}}
|
|
424
560
|
>
|
|
425
|
-
<
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
<CaptureButton on:openTriggers small={true} />
|
|
561
|
+
<HistoricInputs
|
|
562
|
+
bind:this={historicInputs}
|
|
563
|
+
runnableId={$initialPathStore ?? undefined}
|
|
564
|
+
runnableType={$pathStore ? 'FlowPath' : undefined}
|
|
565
|
+
on:select={(e) => {
|
|
566
|
+
updatePreviewSchemaAndArgs(e.detail?.args ?? undefined)
|
|
567
|
+
}}
|
|
568
|
+
limitPayloadSize
|
|
569
|
+
/>
|
|
570
|
+
</FlowInputEditor>
|
|
571
|
+
{:else if $flowInputEditorState?.selectedTab === 'captures'}
|
|
572
|
+
<FlowInputEditor
|
|
573
|
+
on:destroy={() => {
|
|
574
|
+
updatePreviewSchemaAndArgs(undefined)
|
|
575
|
+
}}
|
|
576
|
+
title="Trigger captures"
|
|
577
|
+
>
|
|
578
|
+
{#snippet action()}
|
|
579
|
+
<div class="center-center">
|
|
580
|
+
<CaptureButton on:openTriggers small={true} />
|
|
581
|
+
</div>
|
|
582
|
+
{/snippet}
|
|
583
|
+
<div class="h-full">
|
|
584
|
+
<CaptureTable
|
|
585
|
+
path={$initialPathStore || fakeInitialPath}
|
|
586
|
+
on:select={(e) => {
|
|
587
|
+
updatePreviewSchemaAndArgs(e.detail ?? undefined)
|
|
588
|
+
}}
|
|
589
|
+
isFlow={true}
|
|
590
|
+
headless={true}
|
|
591
|
+
addButton={false}
|
|
592
|
+
bind:this={captureTable}
|
|
593
|
+
limitPayloadSize
|
|
594
|
+
/>
|
|
460
595
|
</div>
|
|
461
|
-
</
|
|
462
|
-
{
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
on:select={(e) => {
|
|
467
|
-
updatePreviewSchemaAndArgs(e.detail ?? undefined)
|
|
596
|
+
</FlowInputEditor>
|
|
597
|
+
{:else if $flowInputEditorState?.selectedTab === 'savedInputs'}
|
|
598
|
+
<FlowInputEditor
|
|
599
|
+
on:destroy={() => {
|
|
600
|
+
updatePreviewSchemaAndArgs(undefined)
|
|
468
601
|
}}
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
on:blur={async () => {
|
|
511
|
-
preventEnter = false
|
|
512
|
-
}}
|
|
513
|
-
on:select={(e) => {
|
|
514
|
-
updatePreviewSchemaAndArgs(e.detail ?? undefined)
|
|
515
|
-
}}
|
|
516
|
-
selected={!!previewArgs.val}
|
|
517
|
-
bind:this={jsonInputs}
|
|
518
|
-
/>
|
|
519
|
-
</FlowInputEditor>
|
|
520
|
-
{:else if $flowInputEditorState?.selectedTab === 'firstStepInputs'}
|
|
521
|
-
<FlowInputEditor
|
|
522
|
-
on:destroy={() => {
|
|
523
|
-
updatePreviewSchemaAndArgs(undefined)
|
|
524
|
-
connectFirstNode = () => {}
|
|
525
|
-
}}
|
|
526
|
-
title="First step's inputs"
|
|
527
|
-
>
|
|
528
|
-
<FirstStepInputs
|
|
529
|
-
bind:this={firstStepInputs}
|
|
530
|
-
on:connectFirstNode={({ detail }) => {
|
|
531
|
-
connectFirstNode = detail.connectFirstNode
|
|
532
|
-
}}
|
|
533
|
-
on:select={(e) => {
|
|
534
|
-
if (e.detail) {
|
|
535
|
-
const diffSchema = computeDiff(e.detail, flowStore.val.schema)
|
|
536
|
-
diff = diffSchema
|
|
537
|
-
previewSchema = schemaFromDiff(diffSchema, flowStore.val.schema)
|
|
538
|
-
runDisabled = true
|
|
539
|
-
} else {
|
|
602
|
+
title="Saved inputs"
|
|
603
|
+
>
|
|
604
|
+
<SavedInputsPicker
|
|
605
|
+
runnableId={$initialPathStore ?? undefined}
|
|
606
|
+
runnableType={$pathStore ? 'FlowPath' : undefined}
|
|
607
|
+
on:select={(e) => {
|
|
608
|
+
updatePreviewSchemaAndArgs(e.detail ?? undefined)
|
|
609
|
+
}}
|
|
610
|
+
on:isEditing={(e) => {
|
|
611
|
+
preventEnter = e.detail
|
|
612
|
+
}}
|
|
613
|
+
previewArgs={previewArgs.val}
|
|
614
|
+
{isValid}
|
|
615
|
+
limitPayloadSize
|
|
616
|
+
bind:this={savedInputsPicker}
|
|
617
|
+
/>
|
|
618
|
+
</FlowInputEditor>
|
|
619
|
+
{:else if $flowInputEditorState?.selectedTab === 'json'}
|
|
620
|
+
<FlowInputEditor
|
|
621
|
+
on:destroy={() => {
|
|
622
|
+
updatePreviewSchemaAndArgs(undefined)
|
|
623
|
+
}}
|
|
624
|
+
title="Json payload"
|
|
625
|
+
>
|
|
626
|
+
<JsonInputs
|
|
627
|
+
on:focus={() => {
|
|
628
|
+
preventEnter = true
|
|
629
|
+
}}
|
|
630
|
+
on:blur={async () => {
|
|
631
|
+
preventEnter = false
|
|
632
|
+
}}
|
|
633
|
+
on:select={(e) => {
|
|
634
|
+
updatePreviewSchemaAndArgs(e.detail ?? undefined)
|
|
635
|
+
}}
|
|
636
|
+
selected={!!previewArgs.val}
|
|
637
|
+
bind:this={jsonInputs}
|
|
638
|
+
/>
|
|
639
|
+
</FlowInputEditor>
|
|
640
|
+
{:else if $flowInputEditorState?.selectedTab === 'firstStepInputs'}
|
|
641
|
+
<FlowInputEditor
|
|
642
|
+
on:destroy={() => {
|
|
540
643
|
updatePreviewSchemaAndArgs(undefined)
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
644
|
+
connectFirstNode = () => {}
|
|
645
|
+
}}
|
|
646
|
+
title="First step's inputs"
|
|
647
|
+
>
|
|
648
|
+
<FirstStepInputs
|
|
649
|
+
bind:this={firstStepInputs}
|
|
650
|
+
on:connectFirstNode={({ detail }) => {
|
|
651
|
+
connectFirstNode = detail.connectFirstNode
|
|
652
|
+
}}
|
|
653
|
+
on:select={(e) => {
|
|
654
|
+
if (e.detail) {
|
|
655
|
+
const diffSchema = computeDiff(e.detail, flowStore.val.schema)
|
|
656
|
+
diff = diffSchema
|
|
657
|
+
previewSchema = schemaFromDiff(diffSchema, flowStore.val.schema)
|
|
658
|
+
runDisabled = true
|
|
659
|
+
} else {
|
|
660
|
+
updatePreviewSchemaAndArgs(undefined)
|
|
661
|
+
}
|
|
662
|
+
}}
|
|
663
|
+
/>
|
|
664
|
+
</FlowInputEditor>
|
|
665
|
+
{/if}
|
|
666
|
+
{/snippet}
|
|
667
|
+
{#snippet runButton()}
|
|
668
|
+
<div class="w-full flex justify-end pr-5">
|
|
669
|
+
<Button
|
|
670
|
+
color="dark"
|
|
671
|
+
btnClasses="w-fit"
|
|
672
|
+
disabled={runDisabled || !isValid}
|
|
673
|
+
size="xs"
|
|
674
|
+
shortCut={{ Icon: CornerDownLeft, hide: false }}
|
|
675
|
+
on:click={() => {
|
|
676
|
+
runPreview()
|
|
677
|
+
}}
|
|
678
|
+
>
|
|
679
|
+
Run
|
|
680
|
+
</Button>
|
|
681
|
+
</div>
|
|
682
|
+
{/snippet}
|
|
683
|
+
</EditableSchemaForm>
|
|
684
|
+
</div>
|
|
685
|
+
{/if}
|
|
564
686
|
</div>
|
|
565
687
|
{:else}
|
|
566
688
|
<div class="p-4 border-b">
|