@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.
Files changed (119) hide show
  1. package/README.md +307 -215
  2. package/dist/adapters/WorkflowAdapter.d.ts +1 -1
  3. package/dist/adapters/WorkflowAdapter.js +30 -30
  4. package/dist/api/client.d.ts +24 -1
  5. package/dist/api/client.js +55 -38
  6. package/dist/api/enhanced-client.d.ts +46 -0
  7. package/dist/api/enhanced-client.js +211 -0
  8. package/dist/clients/ApiClient.d.ts +19 -23
  9. package/dist/clients/ApiClient.js +36 -34
  10. package/dist/components/App.svelte +1299 -230
  11. package/dist/components/App.svelte.d.ts +21 -1
  12. package/dist/components/CanvasBanner.svelte +50 -44
  13. package/dist/components/CanvasBanner.svelte.d.ts +5 -19
  14. package/dist/components/ConfigForm.svelte +555 -0
  15. package/dist/components/ConfigForm.svelte.d.ts +32 -0
  16. package/dist/components/ConfigModal.svelte +261 -0
  17. package/dist/components/ConfigModal.svelte.d.ts +31 -0
  18. package/dist/components/ConfigSidebar.svelte +934 -0
  19. package/dist/components/ConfigSidebar.svelte.d.ts +51 -0
  20. package/dist/components/ConnectionLine.svelte +32 -0
  21. package/dist/components/ConnectionLine.svelte.d.ts +3 -0
  22. package/dist/components/GatewayNode.svelte +471 -0
  23. package/dist/components/GatewayNode.svelte.d.ts +15 -0
  24. package/dist/components/LoadingSpinner.svelte +23 -23
  25. package/dist/components/LoadingSpinner.svelte.d.ts +1 -1
  26. package/dist/components/Logo.svelte +82 -0
  27. package/dist/components/Logo.svelte.d.ts +26 -0
  28. package/dist/components/LogsSidebar.svelte +565 -0
  29. package/dist/components/LogsSidebar.svelte.d.ts +34 -0
  30. package/dist/components/MarkdownDisplay.svelte +28 -0
  31. package/dist/components/MarkdownDisplay.svelte.d.ts +7 -0
  32. package/dist/components/Navbar.svelte +663 -0
  33. package/dist/components/Navbar.svelte.d.ts +21 -0
  34. package/dist/components/NodeSidebar.svelte +629 -488
  35. package/dist/components/NodeSidebar.svelte.d.ts +1 -2
  36. package/dist/components/NodeStatusOverlay.svelte +327 -0
  37. package/dist/components/NodeStatusOverlay.svelte.d.ts +11 -0
  38. package/dist/components/NotesNode.svelte +566 -0
  39. package/dist/components/NotesNode.svelte.d.ts +43 -0
  40. package/dist/components/PipelineStatus.svelte +331 -0
  41. package/dist/components/PipelineStatus.svelte.d.ts +18 -0
  42. package/dist/components/SimpleNode.svelte +447 -0
  43. package/dist/components/SimpleNode.svelte.d.ts +24 -0
  44. package/dist/components/SquareNode.svelte +346 -0
  45. package/dist/components/SquareNode.svelte.d.ts +24 -0
  46. package/dist/components/StatusIcon.svelte +112 -0
  47. package/dist/components/StatusIcon.svelte.d.ts +10 -0
  48. package/dist/components/StatusLabel.svelte +33 -0
  49. package/dist/components/StatusLabel.svelte.d.ts +7 -0
  50. package/dist/components/ToolNode.svelte +385 -0
  51. package/dist/components/ToolNode.svelte.d.ts +36 -0
  52. package/dist/components/UniversalNode.svelte +126 -0
  53. package/dist/components/UniversalNode.svelte.d.ts +15 -0
  54. package/dist/components/WorkflowEditor.svelte +871 -528
  55. package/dist/components/WorkflowEditor.svelte.d.ts +15 -5
  56. package/dist/components/WorkflowNode.svelte +428 -542
  57. package/dist/components/WorkflowNode.svelte.d.ts +7 -3
  58. package/dist/config/apiConfig.d.ts +33 -0
  59. package/dist/config/apiConfig.js +39 -0
  60. package/dist/config/defaultPortConfig.d.ts +6 -0
  61. package/dist/config/defaultPortConfig.js +192 -0
  62. package/dist/config/demo.d.ts +58 -0
  63. package/dist/config/demo.js +142 -0
  64. package/dist/config/endpoints.d.ts +106 -0
  65. package/dist/config/endpoints.js +128 -0
  66. package/dist/data/samples.d.ts +38 -4
  67. package/dist/data/samples.js +2789 -737
  68. package/dist/examples/adapter-usage.d.ts +4 -4
  69. package/dist/examples/adapter-usage.js +21 -26
  70. package/dist/examples/api-client-usage.d.ts +6 -6
  71. package/dist/examples/api-client-usage.js +55 -54
  72. package/dist/index.d.ts +23 -15
  73. package/dist/index.js +23 -15
  74. package/dist/mocks/app-environment.d.ts +8 -0
  75. package/dist/mocks/app-environment.js +16 -0
  76. package/dist/mocks/app-forms.d.ts +2 -0
  77. package/dist/mocks/app-forms.js +21 -0
  78. package/dist/mocks/app-navigation.d.ts +5 -0
  79. package/dist/mocks/app-navigation.js +34 -0
  80. package/dist/mocks/app-stores.d.ts +14 -0
  81. package/dist/mocks/app-stores.js +26 -0
  82. package/dist/services/api.d.ts +13 -3
  83. package/dist/services/api.js +91 -36
  84. package/dist/services/globalSave.d.ts +20 -0
  85. package/dist/services/globalSave.js +165 -0
  86. package/dist/services/nodeExecutionService.d.ts +63 -0
  87. package/dist/services/nodeExecutionService.js +261 -0
  88. package/dist/services/portConfigApi.d.ts +14 -0
  89. package/dist/services/portConfigApi.js +69 -0
  90. package/dist/services/toastService.d.ts +147 -0
  91. package/dist/services/toastService.js +235 -0
  92. package/dist/services/workflowStorage.d.ts +2 -2
  93. package/dist/services/workflowStorage.js +10 -10
  94. package/dist/stores/workflowStore.d.ts +53 -0
  95. package/dist/stores/workflowStore.js +264 -0
  96. package/dist/styles/base.css +896 -363
  97. package/dist/svelte-app.d.ts +52 -5
  98. package/dist/svelte-app.js +128 -6
  99. package/dist/types/config.d.ts +291 -0
  100. package/dist/types/config.js +4 -0
  101. package/dist/types/index.d.ts +231 -19
  102. package/dist/types/index.js +1 -1
  103. package/dist/utils/colors.d.ts +67 -33
  104. package/dist/utils/colors.js +183 -118
  105. package/dist/utils/config.d.ts +41 -0
  106. package/dist/utils/config.js +248 -0
  107. package/dist/utils/connections.d.ts +40 -3
  108. package/dist/utils/connections.js +115 -44
  109. package/dist/utils/icons.d.ts +1 -1
  110. package/dist/utils/icons.js +71 -70
  111. package/dist/utils/nodeStatus.d.ts +53 -0
  112. package/dist/utils/nodeStatus.js +183 -0
  113. package/dist/utils/nodeTypes.d.ts +57 -0
  114. package/dist/utils/nodeTypes.js +109 -0
  115. package/dist/utils/nodeWrapper.d.ts +39 -0
  116. package/dist/utils/nodeWrapper.js +62 -0
  117. package/package.json +129 -97
  118. package/dist/components/Node.svelte +0 -38
  119. package/dist/components/Node.svelte.d.ts +0 -4
@@ -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
- apiBaseUrl?: string;
13
- }): any;
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: any): void;
63
+ export declare function unmountWorkflowEditor(app: MountedSvelteApp): void;
64
+ export {};
@@ -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 = [], apiBaseUrl } = options;
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
- apiBaseUrl
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 unmountWorkflowEditor(app) {
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
+ }
@@ -0,0 +1,4 @@
1
+ /**
2
+ * FlowDrop Editor Configuration Types
3
+ */
4
+ export {};