@d34dman/flowdrop 0.0.1 → 0.0.2
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/README.md +307 -215
- package/dist/adapters/WorkflowAdapter.d.ts +1 -1
- package/dist/adapters/WorkflowAdapter.js +30 -30
- package/dist/api/client.d.ts +24 -1
- package/dist/api/client.js +55 -38
- package/dist/api/enhanced-client.d.ts +46 -0
- package/dist/api/enhanced-client.js +211 -0
- package/dist/clients/ApiClient.d.ts +19 -23
- package/dist/clients/ApiClient.js +36 -34
- package/dist/components/App.svelte +1299 -230
- package/dist/components/App.svelte.d.ts +21 -1
- package/dist/components/CanvasBanner.svelte +50 -44
- package/dist/components/CanvasBanner.svelte.d.ts +5 -19
- package/dist/components/ConfigForm.svelte +555 -0
- package/dist/components/ConfigForm.svelte.d.ts +32 -0
- package/dist/components/ConfigModal.svelte +261 -0
- package/dist/components/ConfigModal.svelte.d.ts +31 -0
- package/dist/components/ConfigSidebar.svelte +934 -0
- package/dist/components/ConfigSidebar.svelte.d.ts +51 -0
- package/dist/components/ConnectionLine.svelte +32 -0
- package/dist/components/ConnectionLine.svelte.d.ts +3 -0
- package/dist/components/GatewayNode.svelte +471 -0
- package/dist/components/GatewayNode.svelte.d.ts +15 -0
- package/dist/components/LoadingSpinner.svelte +23 -23
- package/dist/components/LoadingSpinner.svelte.d.ts +1 -1
- package/dist/components/Logo.svelte +82 -0
- package/dist/components/Logo.svelte.d.ts +26 -0
- package/dist/components/LogsSidebar.svelte +565 -0
- package/dist/components/LogsSidebar.svelte.d.ts +34 -0
- package/dist/components/MarkdownDisplay.svelte +28 -0
- package/dist/components/MarkdownDisplay.svelte.d.ts +7 -0
- package/dist/components/Navbar.svelte +663 -0
- package/dist/components/Navbar.svelte.d.ts +21 -0
- package/dist/components/NodeSidebar.svelte +629 -488
- package/dist/components/NodeSidebar.svelte.d.ts +1 -2
- package/dist/components/NodeStatusOverlay.svelte +327 -0
- package/dist/components/NodeStatusOverlay.svelte.d.ts +11 -0
- package/dist/components/NotesNode.svelte +566 -0
- package/dist/components/NotesNode.svelte.d.ts +43 -0
- package/dist/components/PipelineStatus.svelte +331 -0
- package/dist/components/PipelineStatus.svelte.d.ts +18 -0
- package/dist/components/SimpleNode.svelte +447 -0
- package/dist/components/SimpleNode.svelte.d.ts +24 -0
- package/dist/components/SquareNode.svelte +346 -0
- package/dist/components/SquareNode.svelte.d.ts +24 -0
- package/dist/components/StatusIcon.svelte +112 -0
- package/dist/components/StatusIcon.svelte.d.ts +10 -0
- package/dist/components/StatusLabel.svelte +33 -0
- package/dist/components/StatusLabel.svelte.d.ts +7 -0
- package/dist/components/ToolNode.svelte +385 -0
- package/dist/components/ToolNode.svelte.d.ts +36 -0
- package/dist/components/UniversalNode.svelte +126 -0
- package/dist/components/UniversalNode.svelte.d.ts +15 -0
- package/dist/components/WorkflowEditor.svelte +871 -528
- package/dist/components/WorkflowEditor.svelte.d.ts +15 -5
- package/dist/components/WorkflowNode.svelte +428 -542
- package/dist/components/WorkflowNode.svelte.d.ts +7 -3
- package/dist/config/apiConfig.d.ts +33 -0
- package/dist/config/apiConfig.js +39 -0
- package/dist/config/defaultPortConfig.d.ts +6 -0
- package/dist/config/defaultPortConfig.js +192 -0
- package/dist/config/demo.d.ts +58 -0
- package/dist/config/demo.js +142 -0
- package/dist/config/endpoints.d.ts +106 -0
- package/dist/config/endpoints.js +128 -0
- package/dist/data/samples.d.ts +38 -4
- package/dist/data/samples.js +2789 -737
- package/dist/examples/adapter-usage.d.ts +4 -4
- package/dist/examples/adapter-usage.js +21 -26
- package/dist/examples/api-client-usage.d.ts +6 -6
- package/dist/examples/api-client-usage.js +55 -54
- package/dist/index.d.ts +23 -15
- package/dist/index.js +23 -15
- package/dist/mocks/app-environment.d.ts +8 -0
- package/dist/mocks/app-environment.js +16 -0
- package/dist/mocks/app-forms.d.ts +2 -0
- package/dist/mocks/app-forms.js +21 -0
- package/dist/mocks/app-navigation.d.ts +5 -0
- package/dist/mocks/app-navigation.js +34 -0
- package/dist/mocks/app-stores.d.ts +14 -0
- package/dist/mocks/app-stores.js +26 -0
- package/dist/services/api.d.ts +13 -3
- package/dist/services/api.js +91 -36
- package/dist/services/globalSave.d.ts +20 -0
- package/dist/services/globalSave.js +165 -0
- package/dist/services/nodeExecutionService.d.ts +63 -0
- package/dist/services/nodeExecutionService.js +261 -0
- package/dist/services/portConfigApi.d.ts +14 -0
- package/dist/services/portConfigApi.js +69 -0
- package/dist/services/toastService.d.ts +147 -0
- package/dist/services/toastService.js +235 -0
- package/dist/services/workflowStorage.d.ts +2 -2
- package/dist/services/workflowStorage.js +10 -10
- package/dist/stores/workflowStore.d.ts +53 -0
- package/dist/stores/workflowStore.js +264 -0
- package/dist/styles/base.css +896 -363
- package/dist/svelte-app.d.ts +52 -5
- package/dist/svelte-app.js +128 -6
- package/dist/types/config.d.ts +291 -0
- package/dist/types/config.js +4 -0
- package/dist/types/index.d.ts +231 -19
- package/dist/types/index.js +1 -1
- package/dist/utils/colors.d.ts +67 -33
- package/dist/utils/colors.js +183 -118
- package/dist/utils/config.d.ts +41 -0
- package/dist/utils/config.js +248 -0
- package/dist/utils/connections.d.ts +40 -3
- package/dist/utils/connections.js +115 -44
- package/dist/utils/icons.d.ts +1 -1
- package/dist/utils/icons.js +71 -70
- package/dist/utils/nodeStatus.d.ts +53 -0
- package/dist/utils/nodeStatus.js +183 -0
- package/dist/utils/nodeTypes.d.ts +57 -0
- package/dist/utils/nodeTypes.js +109 -0
- package/dist/utils/nodeWrapper.d.ts +39 -0
- package/dist/utils/nodeWrapper.js +62 -0
- package/package.json +129 -97
- package/dist/components/Node.svelte +0 -38
- package/dist/components/Node.svelte.d.ts +0 -4
package/dist/svelte-app.d.ts
CHANGED
|
@@ -2,16 +2,63 @@
|
|
|
2
2
|
* Svelte App Wrapper for Drupal Integration
|
|
3
3
|
* This provides a way to mount Svelte components in Drupal
|
|
4
4
|
*/
|
|
5
|
-
import type { Workflow, NodeMetadata } from './types/index.js';
|
|
5
|
+
import type { Workflow, NodeMetadata, PortConfig } from './types/index.js';
|
|
6
|
+
import type { EndpointConfig } from './config/endpoints.js';
|
|
7
|
+
declare global {
|
|
8
|
+
interface Window {
|
|
9
|
+
flowdropSave?: () => Promise<void>;
|
|
10
|
+
flowdropExport?: () => void;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Return type for mounted Svelte app
|
|
15
|
+
*/
|
|
16
|
+
interface MountedSvelteApp {
|
|
17
|
+
destroy: () => void;
|
|
18
|
+
save?: () => Promise<void>;
|
|
19
|
+
export?: () => void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Mount the full FlowDrop App with configurable navbar height and other settings
|
|
23
|
+
* This is the recommended way to mount the app for IIFE usage
|
|
24
|
+
*/
|
|
25
|
+
export declare function mountFlowDropApp(container: HTMLElement, options?: {
|
|
26
|
+
workflow?: Workflow;
|
|
27
|
+
nodes?: NodeMetadata[];
|
|
28
|
+
endpointConfig?: EndpointConfig;
|
|
29
|
+
portConfig?: PortConfig;
|
|
30
|
+
height?: string | number;
|
|
31
|
+
width?: string | number;
|
|
32
|
+
showNavbar?: boolean;
|
|
33
|
+
disableSidebar?: boolean;
|
|
34
|
+
lockWorkflow?: boolean;
|
|
35
|
+
readOnly?: boolean;
|
|
36
|
+
nodeStatuses?: Record<string, 'pending' | 'running' | 'completed' | 'error'>;
|
|
37
|
+
pipelineId?: string;
|
|
38
|
+
navbarTitle?: string;
|
|
39
|
+
navbarActions?: Array<{
|
|
40
|
+
label: string;
|
|
41
|
+
href: string;
|
|
42
|
+
icon?: string;
|
|
43
|
+
variant?: 'primary' | 'secondary' | 'outline';
|
|
44
|
+
onclick?: (event: Event) => void;
|
|
45
|
+
}>;
|
|
46
|
+
}): Promise<MountedSvelteApp>;
|
|
6
47
|
/**
|
|
7
48
|
* Mount the WorkflowEditor component in a Drupal container
|
|
8
49
|
*/
|
|
9
50
|
export declare function mountWorkflowEditor(container: HTMLElement, options?: {
|
|
10
51
|
workflow?: Workflow;
|
|
11
52
|
nodes?: NodeMetadata[];
|
|
12
|
-
|
|
13
|
-
|
|
53
|
+
endpointConfig?: EndpointConfig;
|
|
54
|
+
portConfig?: PortConfig;
|
|
55
|
+
}): Promise<MountedSvelteApp>;
|
|
56
|
+
/**
|
|
57
|
+
* Unmount a Svelte app (works for both App and WorkflowEditor)
|
|
58
|
+
*/
|
|
59
|
+
export declare function unmountFlowDropApp(app: MountedSvelteApp): void;
|
|
14
60
|
/**
|
|
15
|
-
* Unmount a Svelte app
|
|
61
|
+
* Unmount a Svelte app (alias for backward compatibility)
|
|
16
62
|
*/
|
|
17
|
-
export declare function unmountWorkflowEditor(app:
|
|
63
|
+
export declare function unmountWorkflowEditor(app: MountedSvelteApp): void;
|
|
64
|
+
export {};
|
package/dist/svelte-app.js
CHANGED
|
@@ -4,27 +4,149 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { mount } from 'svelte';
|
|
6
6
|
import WorkflowEditor from './components/WorkflowEditor.svelte';
|
|
7
|
+
import App from './components/App.svelte';
|
|
8
|
+
import { createEndpointConfig } from './config/endpoints.js';
|
|
9
|
+
import { initializePortCompatibility } from './utils/connections.js';
|
|
10
|
+
import { DEFAULT_PORT_CONFIG } from './config/defaultPortConfig.js';
|
|
11
|
+
import { fetchPortConfig } from './services/portConfigApi.js';
|
|
12
|
+
/**
|
|
13
|
+
* Mount the full FlowDrop App with configurable navbar height and other settings
|
|
14
|
+
* This is the recommended way to mount the app for IIFE usage
|
|
15
|
+
*/
|
|
16
|
+
export async function mountFlowDropApp(container, options = {}) {
|
|
17
|
+
const { workflow, nodes = [], endpointConfig, portConfig, height = '100vh', width = '100%', showNavbar = false, disableSidebar, lockWorkflow, readOnly, nodeStatuses, pipelineId, navbarTitle, navbarActions } = options;
|
|
18
|
+
// Create endpoint configuration
|
|
19
|
+
let config;
|
|
20
|
+
if (endpointConfig) {
|
|
21
|
+
// Merge with default configuration to ensure all required endpoints are present
|
|
22
|
+
const { defaultEndpointConfig } = await import('./config/endpoints.js');
|
|
23
|
+
config = {
|
|
24
|
+
...defaultEndpointConfig,
|
|
25
|
+
...endpointConfig,
|
|
26
|
+
endpoints: {
|
|
27
|
+
...defaultEndpointConfig.endpoints,
|
|
28
|
+
...endpointConfig.endpoints
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// Use default configuration if none provided
|
|
34
|
+
const { defaultEndpointConfig } = await import('./config/endpoints.js');
|
|
35
|
+
config = defaultEndpointConfig;
|
|
36
|
+
}
|
|
37
|
+
// Initialize port configuration
|
|
38
|
+
let finalPortConfig = portConfig;
|
|
39
|
+
if (!finalPortConfig && config) {
|
|
40
|
+
// Try to fetch port configuration from API
|
|
41
|
+
try {
|
|
42
|
+
finalPortConfig = await fetchPortConfig(config);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.warn('Failed to fetch port config from API, using default:', error);
|
|
46
|
+
finalPortConfig = DEFAULT_PORT_CONFIG;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else if (!finalPortConfig) {
|
|
50
|
+
finalPortConfig = DEFAULT_PORT_CONFIG;
|
|
51
|
+
}
|
|
52
|
+
initializePortCompatibility(finalPortConfig);
|
|
53
|
+
// Create the Svelte App component with configuration
|
|
54
|
+
const app = mount(App, {
|
|
55
|
+
target: container,
|
|
56
|
+
props: {
|
|
57
|
+
workflow,
|
|
58
|
+
height,
|
|
59
|
+
width,
|
|
60
|
+
showNavbar,
|
|
61
|
+
disableSidebar,
|
|
62
|
+
lockWorkflow,
|
|
63
|
+
readOnly,
|
|
64
|
+
nodeStatuses,
|
|
65
|
+
pipelineId,
|
|
66
|
+
navbarTitle,
|
|
67
|
+
navbarActions
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
// Expose save and export functionality
|
|
71
|
+
app.save = async () => {
|
|
72
|
+
if (typeof window !== 'undefined' && window.flowdropSave) {
|
|
73
|
+
await window.flowdropSave();
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.warn('⚠️ Save functionality not available');
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
app.export = () => {
|
|
80
|
+
if (typeof window !== 'undefined' && window.flowdropExport) {
|
|
81
|
+
window.flowdropExport();
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
console.warn('⚠️ Export functionality not available');
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
return app;
|
|
88
|
+
}
|
|
7
89
|
/**
|
|
8
90
|
* Mount the WorkflowEditor component in a Drupal container
|
|
9
91
|
*/
|
|
10
|
-
export function mountWorkflowEditor(container, options = {}) {
|
|
11
|
-
const { workflow, nodes = [],
|
|
92
|
+
export async function mountWorkflowEditor(container, options = {}) {
|
|
93
|
+
const { workflow, nodes = [], endpointConfig, portConfig } = options;
|
|
94
|
+
// Create endpoint configuration
|
|
95
|
+
let config;
|
|
96
|
+
if (endpointConfig) {
|
|
97
|
+
// Merge with default configuration to ensure all required endpoints are present
|
|
98
|
+
const { defaultEndpointConfig } = await import('./config/endpoints.js');
|
|
99
|
+
config = {
|
|
100
|
+
...defaultEndpointConfig,
|
|
101
|
+
...endpointConfig,
|
|
102
|
+
endpoints: {
|
|
103
|
+
...defaultEndpointConfig.endpoints,
|
|
104
|
+
...endpointConfig.endpoints
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
// Use default configuration if none provided
|
|
110
|
+
const { defaultEndpointConfig } = await import('./config/endpoints.js');
|
|
111
|
+
config = defaultEndpointConfig;
|
|
112
|
+
}
|
|
113
|
+
// Initialize port configuration
|
|
114
|
+
let finalPortConfig = portConfig;
|
|
115
|
+
if (!finalPortConfig && config) {
|
|
116
|
+
// Try to fetch port configuration from API
|
|
117
|
+
try {
|
|
118
|
+
finalPortConfig = await fetchPortConfig(config);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
console.warn('Failed to fetch port config from API, using default:', error);
|
|
122
|
+
finalPortConfig = DEFAULT_PORT_CONFIG;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else if (!finalPortConfig) {
|
|
126
|
+
finalPortConfig = DEFAULT_PORT_CONFIG;
|
|
127
|
+
}
|
|
128
|
+
initializePortCompatibility(finalPortConfig);
|
|
12
129
|
// Create the Svelte component
|
|
13
130
|
const app = mount(WorkflowEditor, {
|
|
14
131
|
target: container,
|
|
15
132
|
props: {
|
|
16
|
-
workflow,
|
|
17
133
|
nodes,
|
|
18
|
-
|
|
134
|
+
endpointConfig: config
|
|
19
135
|
}
|
|
20
136
|
});
|
|
21
137
|
return app;
|
|
22
138
|
}
|
|
23
139
|
/**
|
|
24
|
-
* Unmount a Svelte app
|
|
140
|
+
* Unmount a Svelte app (works for both App and WorkflowEditor)
|
|
25
141
|
*/
|
|
26
|
-
export function
|
|
142
|
+
export function unmountFlowDropApp(app) {
|
|
27
143
|
if (app && typeof app.destroy === 'function') {
|
|
28
144
|
app.destroy();
|
|
29
145
|
}
|
|
30
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Unmount a Svelte app (alias for backward compatibility)
|
|
149
|
+
*/
|
|
150
|
+
export function unmountWorkflowEditor(app) {
|
|
151
|
+
unmountFlowDropApp(app);
|
|
152
|
+
}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FlowDrop Editor Configuration Types
|
|
3
|
+
*/
|
|
4
|
+
import type { EndpointConfig } from '../config/endpoints.js';
|
|
5
|
+
import type { PortConfig } from './index.js';
|
|
6
|
+
export interface WorkflowEditorConfig {
|
|
7
|
+
/** API configuration with endpoints */
|
|
8
|
+
api: APIConfig;
|
|
9
|
+
/** Available node types loaded from API */
|
|
10
|
+
nodeTypes?: NodeType[];
|
|
11
|
+
/** Port configuration system */
|
|
12
|
+
ports: PortConfig;
|
|
13
|
+
/** Theme configuration */
|
|
14
|
+
theme: 'light' | 'dark' | 'auto';
|
|
15
|
+
/** Editor features configuration */
|
|
16
|
+
features: EditorFeatures;
|
|
17
|
+
/** UI customization options */
|
|
18
|
+
ui: UIConfig;
|
|
19
|
+
/** Execution configuration */
|
|
20
|
+
execution: ExecutionConfig;
|
|
21
|
+
/** Storage configuration */
|
|
22
|
+
storage: StorageConfig;
|
|
23
|
+
}
|
|
24
|
+
export interface EditorFeatures {
|
|
25
|
+
/** Enable drag and drop functionality */
|
|
26
|
+
dragAndDrop: boolean;
|
|
27
|
+
/** Enable node editing */
|
|
28
|
+
nodeEditing: boolean;
|
|
29
|
+
/** Enable workflow execution */
|
|
30
|
+
execution: boolean;
|
|
31
|
+
/** Enable workflow saving */
|
|
32
|
+
saveWorkflow: boolean;
|
|
33
|
+
/** Enable workflow loading */
|
|
34
|
+
loadWorkflow: boolean;
|
|
35
|
+
/** Enable undo/redo */
|
|
36
|
+
undoRedo: boolean;
|
|
37
|
+
/** Enable node search */
|
|
38
|
+
nodeSearch: boolean;
|
|
39
|
+
/** Enable node categories */
|
|
40
|
+
nodeCategories: boolean;
|
|
41
|
+
/** Enable node validation */
|
|
42
|
+
nodeValidation: boolean;
|
|
43
|
+
/** Enable real-time collaboration */
|
|
44
|
+
collaboration: boolean;
|
|
45
|
+
/** Enable workflow templates */
|
|
46
|
+
templates: boolean;
|
|
47
|
+
/** Enable workflow import/export */
|
|
48
|
+
importExport: boolean;
|
|
49
|
+
}
|
|
50
|
+
export interface UIConfig {
|
|
51
|
+
/** Show node sidebar */
|
|
52
|
+
showSidebar: boolean;
|
|
53
|
+
/** Show toolbar */
|
|
54
|
+
showToolbar: boolean;
|
|
55
|
+
/** Show minimap */
|
|
56
|
+
showMinimap: boolean;
|
|
57
|
+
/** Show grid */
|
|
58
|
+
showGrid: boolean;
|
|
59
|
+
/** Grid size */
|
|
60
|
+
gridSize: number;
|
|
61
|
+
/** Node spacing */
|
|
62
|
+
nodeSpacing: number;
|
|
63
|
+
/** Canvas padding */
|
|
64
|
+
canvasPadding: number;
|
|
65
|
+
/** Navbar height in pixels (configurable at runtime) */
|
|
66
|
+
navbarHeight: number;
|
|
67
|
+
/** Zoom limits */
|
|
68
|
+
zoom: {
|
|
69
|
+
min: number;
|
|
70
|
+
max: number;
|
|
71
|
+
default: number;
|
|
72
|
+
};
|
|
73
|
+
/** Node colors */
|
|
74
|
+
colors: {
|
|
75
|
+
primary: string;
|
|
76
|
+
secondary: string;
|
|
77
|
+
accent: string;
|
|
78
|
+
background: string;
|
|
79
|
+
text: string;
|
|
80
|
+
};
|
|
81
|
+
/** Custom CSS classes */
|
|
82
|
+
cssClasses: {
|
|
83
|
+
container?: string;
|
|
84
|
+
sidebar?: string;
|
|
85
|
+
toolbar?: string;
|
|
86
|
+
canvas?: string;
|
|
87
|
+
node?: string;
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export interface APIConfig {
|
|
91
|
+
/** Endpoint configuration */
|
|
92
|
+
endpoints: EndpointConfig;
|
|
93
|
+
/** API timeout in milliseconds */
|
|
94
|
+
timeout: number;
|
|
95
|
+
/** Retry configuration */
|
|
96
|
+
retry: {
|
|
97
|
+
enabled: boolean;
|
|
98
|
+
maxAttempts: number;
|
|
99
|
+
delay: number;
|
|
100
|
+
};
|
|
101
|
+
/** Authentication configuration */
|
|
102
|
+
auth: {
|
|
103
|
+
type: 'none' | 'bearer' | 'api_key' | 'custom';
|
|
104
|
+
token?: string;
|
|
105
|
+
apiKey?: string;
|
|
106
|
+
headers?: Record<string, string>;
|
|
107
|
+
};
|
|
108
|
+
/** Custom headers */
|
|
109
|
+
headers: Record<string, string>;
|
|
110
|
+
}
|
|
111
|
+
export interface ExecutionConfig {
|
|
112
|
+
/** Enable real-time execution updates */
|
|
113
|
+
realTimeUpdates: boolean;
|
|
114
|
+
/** Execution timeout in seconds */
|
|
115
|
+
timeout: number;
|
|
116
|
+
/** Maximum concurrent executions */
|
|
117
|
+
maxConcurrent: number;
|
|
118
|
+
/** Show execution progress */
|
|
119
|
+
showProgress: boolean;
|
|
120
|
+
/** Auto-save execution state */
|
|
121
|
+
autoSaveState: boolean;
|
|
122
|
+
/** Execution result caching */
|
|
123
|
+
caching: {
|
|
124
|
+
enabled: boolean;
|
|
125
|
+
ttl: number;
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
export interface StorageConfig {
|
|
129
|
+
/** Storage type */
|
|
130
|
+
type: 'api' | 'local' | 'session' | 'custom';
|
|
131
|
+
/** Auto-save interval in milliseconds */
|
|
132
|
+
autoSaveInterval: number;
|
|
133
|
+
/** Maximum undo steps */
|
|
134
|
+
maxUndoSteps: number;
|
|
135
|
+
/** Storage key prefix */
|
|
136
|
+
keyPrefix: string;
|
|
137
|
+
/** Custom storage implementation */
|
|
138
|
+
customStorage?: {
|
|
139
|
+
save: (key: string, data: unknown) => Promise<void>;
|
|
140
|
+
load: (key: string) => Promise<unknown>;
|
|
141
|
+
delete: (key: string) => Promise<void>;
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
export interface NodeType {
|
|
145
|
+
/** Unique node type identifier */
|
|
146
|
+
id: string;
|
|
147
|
+
/** Display name */
|
|
148
|
+
name: string;
|
|
149
|
+
/** Description */
|
|
150
|
+
description: string;
|
|
151
|
+
/** Category */
|
|
152
|
+
category: string;
|
|
153
|
+
/** Icon (can be icon name or URL) */
|
|
154
|
+
icon?: string;
|
|
155
|
+
/** Node color */
|
|
156
|
+
color?: string;
|
|
157
|
+
/** Input ports */
|
|
158
|
+
inputs: NodePort[];
|
|
159
|
+
/** Output ports */
|
|
160
|
+
outputs: NodePort[];
|
|
161
|
+
/** Configuration schema */
|
|
162
|
+
configSchema?: Record<string, unknown>;
|
|
163
|
+
/** Tags for search and filtering */
|
|
164
|
+
tags?: string[];
|
|
165
|
+
/** Whether node is enabled */
|
|
166
|
+
enabled?: boolean;
|
|
167
|
+
/** Custom component to render */
|
|
168
|
+
component?: string;
|
|
169
|
+
}
|
|
170
|
+
export interface NodePort {
|
|
171
|
+
/** Port identifier */
|
|
172
|
+
id: string;
|
|
173
|
+
/** Display name */
|
|
174
|
+
name: string;
|
|
175
|
+
/** Port type */
|
|
176
|
+
type: 'input' | 'output';
|
|
177
|
+
/** Data type */
|
|
178
|
+
dataType: string;
|
|
179
|
+
/** Whether port is required */
|
|
180
|
+
required: boolean;
|
|
181
|
+
/** Description */
|
|
182
|
+
description?: string;
|
|
183
|
+
/** Default value */
|
|
184
|
+
defaultValue?: unknown;
|
|
185
|
+
/** Validation rules */
|
|
186
|
+
validation?: unknown;
|
|
187
|
+
}
|
|
188
|
+
export interface WorkflowData {
|
|
189
|
+
/** Workflow ID */
|
|
190
|
+
id: string;
|
|
191
|
+
/** Workflow name */
|
|
192
|
+
name: string;
|
|
193
|
+
/** Workflow description */
|
|
194
|
+
description?: string;
|
|
195
|
+
/** Workflow nodes */
|
|
196
|
+
nodes: WorkflowNode[];
|
|
197
|
+
/** Workflow edges */
|
|
198
|
+
edges: WorkflowEdge[];
|
|
199
|
+
/** Workflow metadata */
|
|
200
|
+
metadata?: Record<string, unknown>;
|
|
201
|
+
/** Creation timestamp */
|
|
202
|
+
createdAt?: number;
|
|
203
|
+
/** Last modified timestamp */
|
|
204
|
+
updatedAt?: number;
|
|
205
|
+
}
|
|
206
|
+
export interface WorkflowNode {
|
|
207
|
+
/** Node ID */
|
|
208
|
+
id: string;
|
|
209
|
+
/** Node type */
|
|
210
|
+
type: string;
|
|
211
|
+
/** Node position */
|
|
212
|
+
position: {
|
|
213
|
+
x: number;
|
|
214
|
+
y: number;
|
|
215
|
+
};
|
|
216
|
+
/** Node data */
|
|
217
|
+
data: {
|
|
218
|
+
/** Node label */
|
|
219
|
+
label: string;
|
|
220
|
+
/** Node configuration */
|
|
221
|
+
config: Record<string, unknown>;
|
|
222
|
+
/** Node metadata */
|
|
223
|
+
metadata?: Record<string, unknown>;
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
export interface WorkflowEdge {
|
|
227
|
+
/** Edge ID */
|
|
228
|
+
id: string;
|
|
229
|
+
/** Source node ID */
|
|
230
|
+
source: string;
|
|
231
|
+
/** Target node ID */
|
|
232
|
+
target: string;
|
|
233
|
+
/** Source port */
|
|
234
|
+
sourceHandle?: string;
|
|
235
|
+
/** Target port */
|
|
236
|
+
targetHandle?: string;
|
|
237
|
+
/** Edge type */
|
|
238
|
+
type?: string;
|
|
239
|
+
/** Edge data */
|
|
240
|
+
data?: Record<string, unknown>;
|
|
241
|
+
}
|
|
242
|
+
export interface ExecutionResult {
|
|
243
|
+
/** Execution ID */
|
|
244
|
+
executionId: string;
|
|
245
|
+
/** Workflow ID */
|
|
246
|
+
workflowId: string;
|
|
247
|
+
/** Execution status */
|
|
248
|
+
status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
|
|
249
|
+
/** Execution results by node */
|
|
250
|
+
nodeResults: Record<string, unknown>;
|
|
251
|
+
/** Execution metadata */
|
|
252
|
+
metadata: {
|
|
253
|
+
startTime: number;
|
|
254
|
+
endTime?: number;
|
|
255
|
+
duration?: number;
|
|
256
|
+
error?: string;
|
|
257
|
+
};
|
|
258
|
+
/** Execution progress */
|
|
259
|
+
progress?: {
|
|
260
|
+
current: number;
|
|
261
|
+
total: number;
|
|
262
|
+
percentage: number;
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
export interface EditorState {
|
|
266
|
+
/** Current workflow data */
|
|
267
|
+
workflow: WorkflowData | null;
|
|
268
|
+
/** Selected nodes */
|
|
269
|
+
selectedNodes: string[];
|
|
270
|
+
/** Selected edges */
|
|
271
|
+
selectedEdges: string[];
|
|
272
|
+
/** Viewport state */
|
|
273
|
+
viewport: {
|
|
274
|
+
x: number;
|
|
275
|
+
y: number;
|
|
276
|
+
zoom: number;
|
|
277
|
+
};
|
|
278
|
+
/** Execution state */
|
|
279
|
+
execution: {
|
|
280
|
+
isExecuting: boolean;
|
|
281
|
+
currentExecution?: ExecutionResult;
|
|
282
|
+
executionHistory: ExecutionResult[];
|
|
283
|
+
};
|
|
284
|
+
/** UI state */
|
|
285
|
+
ui: {
|
|
286
|
+
sidebarOpen: boolean;
|
|
287
|
+
toolbarVisible: boolean;
|
|
288
|
+
minimapVisible: boolean;
|
|
289
|
+
gridVisible: boolean;
|
|
290
|
+
};
|
|
291
|
+
}
|