@genfeedai/workflow-ui 0.2.3 → 0.2.4

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 (45) hide show
  1. package/dist/canvas.d.ts +22 -22
  2. package/dist/canvas.mjs +16 -16
  3. package/dist/{chunk-XPZAHIWY.mjs → chunk-2FUPL67V.mjs} +1592 -1044
  4. package/dist/{chunk-HWVTD2LC.mjs → chunk-53XDE62A.mjs} +818 -623
  5. package/dist/{chunk-PCIWWD37.mjs → chunk-7LV4UAUS.mjs} +19 -19
  6. package/dist/{chunk-7SKSRSS7.mjs → chunk-B4EAAKYF.mjs} +16 -16
  7. package/dist/{chunk-ZJD5WMR3.mjs → chunk-C6MQBJFC.mjs} +45 -13
  8. package/dist/{chunk-7H3WJJYS.mjs → chunk-ESVULCFY.mjs} +12 -6
  9. package/dist/{chunk-GWBGK3KL.mjs → chunk-FWJIAW2E.mjs} +82 -47
  10. package/dist/{chunk-R727OFBR.mjs → chunk-GPYIIWD5.mjs} +404 -350
  11. package/dist/{chunk-OQREHJXK.mjs → chunk-IYFWAJBB.mjs} +208 -203
  12. package/dist/{chunk-N5NJZTK4.mjs → chunk-MGLAKMDP.mjs} +23 -21
  13. package/dist/{chunk-LT3ZJJL6.mjs → chunk-OJWVEEMM.mjs} +497 -399
  14. package/dist/{chunk-ZD2BADZO.mjs → chunk-ORVDYXDP.mjs} +221 -175
  15. package/dist/{chunk-CV4M7CNU.mjs → chunk-QQVHGJ2G.mjs} +149 -142
  16. package/dist/{chunk-6PSJTBNV.mjs → chunk-U4QPE4CY.mjs} +387 -347
  17. package/dist/{chunk-EFXQT23N.mjs → chunk-VVQ4CH77.mjs} +5 -5
  18. package/dist/{chunk-VRN3UWE5.mjs → chunk-XRC3O5GK.mjs} +73 -73
  19. package/dist/{chunk-FT33LFII.mjs → chunk-YUIK4AHM.mjs} +1 -1
  20. package/dist/{chunk-FMJPFB6W.mjs → chunk-ZSITTZ4S.mjs} +630 -569
  21. package/dist/hooks.d.ts +37 -37
  22. package/dist/hooks.mjs +10 -10
  23. package/dist/index.d.ts +26 -11
  24. package/dist/index.mjs +99 -19
  25. package/dist/lib.d.ts +203 -203
  26. package/dist/lib.mjs +228 -198
  27. package/dist/nodes.d.ts +2 -2
  28. package/dist/nodes.mjs +12 -12
  29. package/dist/panels.d.ts +2 -3
  30. package/dist/panels.mjs +3 -3
  31. package/dist/provider.d.ts +2 -2
  32. package/dist/provider.mjs +2 -2
  33. package/dist/stores.d.ts +5 -5
  34. package/dist/stores.mjs +5 -5
  35. package/dist/toolbar.d.ts +42 -24
  36. package/dist/toolbar.mjs +4 -4
  37. package/dist/ui.d.ts +2 -2
  38. package/dist/ui.mjs +2 -2
  39. package/dist/{useCommentNavigation-BakbiiIc.d.ts → useRequiredInputs-ByoIS-fT.d.ts} +160 -160
  40. package/dist/{promptLibraryStore-Dl3Q3cP6.d.ts → workflowStore-Bsz0nd5c.d.ts} +368 -368
  41. package/dist/workflowStore-N2F7WIG3.mjs +2 -0
  42. package/package.json +77 -75
  43. package/src/styles/workflow-ui.css +56 -19
  44. package/dist/workflowStore-UAAKOOIK.mjs +0 -2
  45. package/dist/{types-IEKYuYhu.d.ts → types-CRXJnajq.d.ts} +1 -1
package/dist/hooks.d.ts CHANGED
@@ -1,10 +1,34 @@
1
- export { C as CommentNavigation, u as useAIGenNode, a as useAIGenNodeHeader, b as useAutoLoadModelSchema, c as useCanGenerate, d as useCanvasKeyboardShortcuts, e as useCommentNavigation, f as useMediaUpload, g as useModelSelection, h as useNodeExecution, i as usePromptAutocomplete, j as useRequiredInputs } from './useCommentNavigation-BakbiiIc.js';
1
+ export { C as CommentNavigation, u as useAIGenNode, a as useAIGenNodeHeader, b as useAutoLoadModelSchema, c as useCanGenerate, d as useCanvasKeyboardShortcuts, e as useCommentNavigation, f as useMediaUpload, g as useModelSelection, h as useNodeExecution, i as usePromptAutocomplete, j as useRequiredInputs } from './useRequiredInputs-ByoIS-fT.js';
2
+ import { C as ContextMenuType, a as ContextMenuPosition } from './contextMenuStore-DMg0hJQ1.js';
2
3
  import { WorkflowNode, WorkflowEdge } from '@genfeedai/types';
3
- import { a as ContextMenuPosition, C as ContextMenuType } from './contextMenuStore-DMg0hJQ1.js';
4
- import '@xyflow/react';
5
4
  import 'react';
5
+ import '@xyflow/react';
6
6
  import 'zustand';
7
7
 
8
+ interface ContextMenuItemConfig {
9
+ id: string;
10
+ label?: string;
11
+ icon?: React.ReactNode;
12
+ shortcut?: string;
13
+ disabled?: boolean;
14
+ danger?: boolean;
15
+ separator?: boolean;
16
+ submenu?: ContextMenuItemConfig[];
17
+ onClick?: () => void;
18
+ }
19
+
20
+ declare function useContextMenu(): {
21
+ close: () => void;
22
+ isOpen: boolean;
23
+ menuItems: ContextMenuItemConfig[];
24
+ menuType: ContextMenuType;
25
+ openEdgeMenu: (edgeId: string, x: number, y: number) => void;
26
+ openNodeMenu: (nodeId: string, x: number, y: number) => void;
27
+ openPaneMenu: (x: number, y: number) => void;
28
+ openSelectionMenu: (nodeIds: string[], x: number, y: number) => void;
29
+ position: ContextMenuPosition;
30
+ };
31
+
8
32
  interface ClipboardData {
9
33
  nodes: WorkflowNode[];
10
34
  edges: WorkflowEdge[];
@@ -12,53 +36,29 @@ interface ClipboardData {
12
36
  }
13
37
  declare function useNodeActions(): {
14
38
  clipboard: ClipboardData | null;
15
- deleteNode: (nodeId: string) => void;
16
- duplicate: (nodeId: string) => string | null;
17
- copyNode: (nodeId: string) => void;
18
39
  copyMultipleNodes: (nodeIds: string[]) => void;
19
- cutNode: (nodeId: string) => void;
40
+ copyNode: (nodeId: string) => void;
20
41
  cutMultipleNodes: (nodeIds: string[]) => void;
42
+ cutNode: (nodeId: string) => void;
21
43
  deleteMultipleNodes: (nodeIds: string[]) => void;
44
+ deleteNode: (nodeId: string) => void;
45
+ duplicate: (nodeId: string) => string | null;
22
46
  duplicateMultipleNodes: (nodeIds: string[]) => string[];
23
- pasteNodes: (offsetX: number, offsetY: number) => {
24
- nodeIds: string[];
25
- edgeIds: string[];
26
- } | null;
27
47
  getPasteData: (offsetX: number, offsetY: number) => {
28
48
  nodes: WorkflowNode[];
29
49
  edges: WorkflowEdge[];
30
50
  } | null;
51
+ pasteNodes: (offsetX: number, offsetY: number) => {
52
+ nodeIds: string[];
53
+ edgeIds: string[];
54
+ } | null;
31
55
  };
32
56
 
33
57
  declare function usePaneActions(): {
34
58
  addNodeAtPosition: (type: string, screenX: number, screenY: number) => void;
35
- selectAll: () => void;
36
- fitView: () => void;
37
59
  autoLayout: (direction?: "TB" | "LR") => void;
38
- };
39
-
40
- interface ContextMenuItemConfig {
41
- id: string;
42
- label?: string;
43
- icon?: React.ReactNode;
44
- shortcut?: string;
45
- disabled?: boolean;
46
- danger?: boolean;
47
- separator?: boolean;
48
- submenu?: ContextMenuItemConfig[];
49
- onClick?: () => void;
50
- }
51
-
52
- declare function useContextMenu(): {
53
- isOpen: boolean;
54
- position: ContextMenuPosition;
55
- menuType: ContextMenuType;
56
- menuItems: ContextMenuItemConfig[];
57
- openNodeMenu: (nodeId: string, x: number, y: number) => void;
58
- openEdgeMenu: (edgeId: string, x: number, y: number) => void;
59
- openPaneMenu: (x: number, y: number) => void;
60
- openSelectionMenu: (nodeIds: string[], x: number, y: number) => void;
61
- close: () => void;
60
+ fitView: () => void;
61
+ selectAll: () => void;
62
62
  };
63
63
 
64
64
  export { useContextMenu, useNodeActions, usePaneActions };
package/dist/hooks.mjs CHANGED
@@ -1,11 +1,11 @@
1
- export { useCommentNavigation } from './chunk-7H3WJJYS.mjs';
2
- export { useCanvasKeyboardShortcuts, useContextMenu, useNodeActions, usePaneActions } from './chunk-ZD2BADZO.mjs';
3
- export { useAIGenNode, useAIGenNodeHeader, useAutoLoadModelSchema, useCanGenerate, useMediaUpload, useModelSelection, useNodeExecution, usePromptAutocomplete, useRequiredInputs } from './chunk-GWBGK3KL.mjs';
4
- import './chunk-7SKSRSS7.mjs';
5
- import './chunk-EFXQT23N.mjs';
6
- import './chunk-PCIWWD37.mjs';
1
+ export { useCommentNavigation } from './chunk-ESVULCFY.mjs';
2
+ export { useCanvasKeyboardShortcuts, useContextMenu, useNodeActions, usePaneActions } from './chunk-ORVDYXDP.mjs';
3
+ export { useAIGenNode, useAIGenNodeHeader, useAutoLoadModelSchema, useCanGenerate, useMediaUpload, useModelSelection, useNodeExecution, usePromptAutocomplete, useRequiredInputs } from './chunk-FWJIAW2E.mjs';
4
+ import './chunk-B4EAAKYF.mjs';
5
+ import './chunk-VVQ4CH77.mjs';
6
+ import './chunk-YUIK4AHM.mjs';
7
+ import './chunk-7LV4UAUS.mjs';
7
8
  import './chunk-LDN7IX4Y.mjs';
8
- import './chunk-LT3ZJJL6.mjs';
9
- import './chunk-R727OFBR.mjs';
10
- import './chunk-FT33LFII.mjs';
11
- import './chunk-VRN3UWE5.mjs';
9
+ import './chunk-OJWVEEMM.mjs';
10
+ import './chunk-GPYIIWD5.mjs';
11
+ import './chunk-XRC3O5GK.mjs';
package/dist/index.d.ts CHANGED
@@ -1,16 +1,16 @@
1
1
  export { ConnectionDropMenu, EdgeToolbar, EditableEdge, GroupOverlay, HelperLines, NodeSearch, PauseEdge, ReferenceEdge, ShortcutHelpModal, WorkflowCanvas } from './canvas.js';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+ import { GroupColor, WorkflowNode } from '@genfeedai/types';
4
+ export { GroupColor, NodeGroup } from '@genfeedai/types';
5
+ import { NodeTypes } from '@xyflow/react';
6
+ import { ReactNode } from 'react';
7
+ export { C as CommentNavigation, u as useAIGenNode, a as useAIGenNodeHeader, b as useAutoLoadModelSchema, c as useCanGenerate, d as useCanvasKeyboardShortcuts, e as useCommentNavigation, f as useMediaUpload, g as useModelSelection, h as useNodeExecution, i as usePromptAutocomplete, j as useRequiredInputs } from './useRequiredInputs-ByoIS-fT.js';
2
8
  export { BaseNode, nodeTypes } from './nodes.js';
3
9
  export { DebugPanel, NodePalette, PanelContainer } from './panels.js';
4
- export { BottomBar, CostIndicator, DropdownItem, OverflowMenu, OverflowMenuProps, SaveAsDialog, SaveIndicator, Toolbar, ToolbarDropdown, ToolbarDropdownProps } from './toolbar.js';
5
- export { C as CommentNavigation, u as useAIGenNode, a as useAIGenNodeHeader, b as useAutoLoadModelSchema, c as useCanGenerate, d as useCanvasKeyboardShortcuts, e as useCommentNavigation, f as useMediaUpload, g as useModelSelection, h as useNodeExecution, i as usePromptAutocomplete, j as useRequiredInputs } from './useCommentNavigation-BakbiiIc.js';
6
- import { GroupColor } from '@genfeedai/types';
7
- export { GroupColor, NodeGroup } from '@genfeedai/types';
8
- import * as react_jsx_runtime from 'react/jsx-runtime';
9
- export { I as ImageHistoryItem, j as configurePromptLibrary, u as useAnnotationStore, k as useExecutionStore, l as usePromptEditorStore, m as usePromptLibraryStore, n as useSettingsStore, o as useUIStore, p as useWorkflowStore } from './promptLibraryStore-Dl3Q3cP6.js';
10
+ export { M as ModelBrowserModalProps, P as PromptLibraryService, a as PromptPickerProps, W as WorkflowUIConfig } from './types-CRXJnajq.js';
10
11
  export { WorkflowUIProvider, useWorkflowUIConfig } from './provider.js';
11
- export { M as ModelBrowserModalProps, P as PromptLibraryService, a as PromptPickerProps, W as WorkflowUIConfig } from './types-IEKYuYhu.js';
12
- import '@xyflow/react';
13
- import 'react';
12
+ export { I as ImageHistoryItem, j as configurePromptLibrary, u as useAnnotationStore, k as useExecutionStore, l as usePromptEditorStore, m as usePromptLibraryStore, n as useSettingsStore, o as useUIStore, p as useWorkflowStore } from './workflowStore-Bsz0nd5c.js';
13
+ export { BottomBar, CostIndicator, DropdownItem, OverflowMenu, OverflowMenuProps, SaveAsDialog, SaveIndicator, SaveIndicatorProps, Toolbar, ToolbarDropdown, ToolbarDropdownProps, ToolbarMenu, ToolbarProps } from './toolbar.js';
14
14
  import 'zustand';
15
15
  import 'zundo';
16
16
 
@@ -26,8 +26,23 @@ declare const GROUP_COLORS: Record<GroupColor, {
26
26
  }>;
27
27
  declare const DEFAULT_GROUP_COLORS: GroupColor[];
28
28
 
29
+ declare function GlobalImageHistory(): react_jsx_runtime.JSX.Element | null;
30
+
29
31
  declare function NotificationToast(): react_jsx_runtime.JSX.Element | null;
30
32
 
31
- declare function GlobalImageHistory(): react_jsx_runtime.JSX.Element | null;
33
+ declare function SmallGraphViewportGuard(): null;
34
+
35
+ interface WorkflowEditorShellProps {
36
+ modalContent?: ReactNode;
37
+ nodePalette?: ReactNode;
38
+ nodeTypes?: NodeTypes;
39
+ onDownloadAsZip?: (nodes: WorkflowNode[]) => void;
40
+ rightPanel?: ReactNode;
41
+ showBottomBar?: boolean;
42
+ showNodePalette?: boolean;
43
+ showSmallGraphViewportGuard?: boolean;
44
+ toolbar: ReactNode;
45
+ }
46
+ declare function WorkflowEditorShell({ modalContent, nodePalette, nodeTypes, onDownloadAsZip, rightPanel, showBottomBar, showNodePalette, showSmallGraphViewportGuard, toolbar, }: WorkflowEditorShellProps): react_jsx_runtime.JSX.Element;
32
47
 
33
- export { DEFAULT_GROUP_COLORS, GROUP_COLORS, GlobalImageHistory, NotificationToast };
48
+ export { DEFAULT_GROUP_COLORS, GROUP_COLORS, GlobalImageHistory, NotificationToast, SmallGraphViewportGuard, WorkflowEditorShell };
package/dist/index.mjs CHANGED
@@ -1,20 +1,100 @@
1
- export { ConnectionDropMenu, DEFAULT_GROUP_COLORS, EdgeToolbar, EditableEdge, GROUP_COLORS, GlobalImageHistory, GroupOverlay, HelperLines, NodeSearch, NotificationToast, PauseEdge, ReferenceEdge, ShortcutHelpModal, WorkflowCanvas } from './chunk-HWVTD2LC.mjs';
2
- export { BaseNode, nodeTypes } from './chunk-XPZAHIWY.mjs';
3
- import './chunk-ZJD5WMR3.mjs';
4
- import './chunk-6PSJTBNV.mjs';
5
- export { DebugPanel, NodePalette, PanelContainer } from './chunk-OQREHJXK.mjs';
6
- export { BottomBar, CostIndicator, OverflowMenu, SaveAsDialog, SaveIndicator, Toolbar, ToolbarDropdown } from './chunk-FMJPFB6W.mjs';
7
- import './chunk-N5NJZTK4.mjs';
8
- export { useCommentNavigation } from './chunk-7H3WJJYS.mjs';
9
- export { useCanvasKeyboardShortcuts } from './chunk-ZD2BADZO.mjs';
10
- export { useAIGenNode, useAIGenNodeHeader, useAutoLoadModelSchema, useCanGenerate, useMediaUpload, useModelSelection, useNodeExecution, usePromptAutocomplete, useRequiredInputs } from './chunk-GWBGK3KL.mjs';
11
- import './chunk-7SKSRSS7.mjs';
12
- import './chunk-EFXQT23N.mjs';
13
- export { useAnnotationStore, usePromptEditorStore } from './chunk-CV4M7CNU.mjs';
14
- import './chunk-PCIWWD37.mjs';
15
- import './chunk-LDN7IX4Y.mjs';
16
- export { useExecutionStore, useSettingsStore, useUIStore } from './chunk-LT3ZJJL6.mjs';
17
- export { useWorkflowStore } from './chunk-R727OFBR.mjs';
1
+ import { BottomBar } from './chunk-ZSITTZ4S.mjs';
2
+ export { BottomBar, CostIndicator, OverflowMenu, SaveAsDialog, SaveIndicator, Toolbar, ToolbarDropdown } from './chunk-ZSITTZ4S.mjs';
3
+ import { WorkflowCanvas } from './chunk-53XDE62A.mjs';
4
+ export { ConnectionDropMenu, DEFAULT_GROUP_COLORS, EdgeToolbar, EditableEdge, GROUP_COLORS, GlobalImageHistory, GroupOverlay, HelperLines, NodeSearch, NotificationToast, PauseEdge, ReferenceEdge, ShortcutHelpModal, WorkflowCanvas } from './chunk-53XDE62A.mjs';
5
+ export { useCommentNavigation } from './chunk-ESVULCFY.mjs';
6
+ export { useCanvasKeyboardShortcuts } from './chunk-ORVDYXDP.mjs';
7
+ import './chunk-MGLAKMDP.mjs';
8
+ export { BaseNode, nodeTypes } from './chunk-2FUPL67V.mjs';
9
+ import './chunk-C6MQBJFC.mjs';
10
+ export { useAIGenNode, useAIGenNodeHeader, useAutoLoadModelSchema, useCanGenerate, useMediaUpload, useModelSelection, useNodeExecution, usePromptAutocomplete, useRequiredInputs } from './chunk-FWJIAW2E.mjs';
11
+ import './chunk-B4EAAKYF.mjs';
12
+ import './chunk-U4QPE4CY.mjs';
13
+ import './chunk-VVQ4CH77.mjs';
14
+ import { NodePalette } from './chunk-IYFWAJBB.mjs';
15
+ export { DebugPanel, NodePalette, PanelContainer } from './chunk-IYFWAJBB.mjs';
18
16
  import './chunk-MLJJBBTB.mjs';
19
- export { WorkflowUIProvider, useWorkflowUIConfig } from './chunk-FT33LFII.mjs';
20
- export { configurePromptLibrary, usePromptLibraryStore } from './chunk-VRN3UWE5.mjs';
17
+ export { WorkflowUIProvider, useWorkflowUIConfig } from './chunk-YUIK4AHM.mjs';
18
+ import './chunk-7LV4UAUS.mjs';
19
+ export { useAnnotationStore, usePromptEditorStore } from './chunk-QQVHGJ2G.mjs';
20
+ import './chunk-LDN7IX4Y.mjs';
21
+ import { useUIStore } from './chunk-OJWVEEMM.mjs';
22
+ export { useExecutionStore, useSettingsStore, useUIStore } from './chunk-OJWVEEMM.mjs';
23
+ import { useWorkflowStore } from './chunk-GPYIIWD5.mjs';
24
+ export { useWorkflowStore } from './chunk-GPYIIWD5.mjs';
25
+ export { configurePromptLibrary, usePromptLibraryStore } from './chunk-XRC3O5GK.mjs';
26
+ import { useReactFlow } from '@xyflow/react';
27
+ import { useRef, useEffect } from 'react';
28
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
29
+
30
+ var SMALL_GRAPH_NODE_LIMIT = 2;
31
+ var SMALL_GRAPH_MAX_ZOOM = 0.9;
32
+ var SMALL_GRAPH_MIN_ZOOM = 0.35;
33
+ var SMALL_GRAPH_PADDING = 0.24;
34
+ function SmallGraphViewportGuard() {
35
+ const nodes = useWorkflowStore((state) => state.nodes);
36
+ const reactFlow = useReactFlow();
37
+ const previousNodeCountRef = useRef(null);
38
+ useEffect(() => {
39
+ const previousNodeCount = previousNodeCountRef.current;
40
+ previousNodeCountRef.current = nodes.length;
41
+ if (previousNodeCount === null) {
42
+ return;
43
+ }
44
+ const isSmallGraph = nodes.length > 0 && nodes.length <= SMALL_GRAPH_NODE_LIMIT;
45
+ const addedNodeToSmallGraph = nodes.length > previousNodeCount;
46
+ if (!isSmallGraph || !addedNodeToSmallGraph) {
47
+ return;
48
+ }
49
+ const schedule = typeof window !== "undefined" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : (callback) => window.setTimeout(() => callback(performance.now()), 0);
50
+ const cancel = typeof window !== "undefined" && window.cancelAnimationFrame ? window.cancelAnimationFrame.bind(window) : window.clearTimeout.bind(window);
51
+ const handle = schedule(() => {
52
+ reactFlow.fitView({
53
+ duration: 180,
54
+ maxZoom: SMALL_GRAPH_MAX_ZOOM,
55
+ minZoom: SMALL_GRAPH_MIN_ZOOM,
56
+ padding: SMALL_GRAPH_PADDING
57
+ });
58
+ });
59
+ return () => {
60
+ cancel(handle);
61
+ };
62
+ }, [nodes.length, reactFlow]);
63
+ return null;
64
+ }
65
+ function WorkflowEditorShell({
66
+ modalContent,
67
+ nodePalette,
68
+ nodeTypes: nodeTypes2,
69
+ onDownloadAsZip,
70
+ rightPanel,
71
+ showBottomBar = true,
72
+ showNodePalette = true,
73
+ showSmallGraphViewportGuard = true,
74
+ toolbar
75
+ }) {
76
+ const showPalette = useUIStore((state) => state.showPalette);
77
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
78
+ /* @__PURE__ */ jsxs("main", { className: "flex min-h-0 flex-1 flex-col overflow-hidden bg-[var(--background)]", children: [
79
+ toolbar,
80
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-1 overflow-hidden", children: [
81
+ showNodePalette && showPalette && (nodePalette ?? /* @__PURE__ */ jsx(NodePalette, {})),
82
+ /* @__PURE__ */ jsxs("div", { className: "relative flex-1", children: [
83
+ showSmallGraphViewportGuard && /* @__PURE__ */ jsx(SmallGraphViewportGuard, {}),
84
+ /* @__PURE__ */ jsx(
85
+ WorkflowCanvas,
86
+ {
87
+ nodeTypes: nodeTypes2,
88
+ onDownloadAsZip
89
+ }
90
+ ),
91
+ showBottomBar && /* @__PURE__ */ jsx(BottomBar, {})
92
+ ] }),
93
+ rightPanel
94
+ ] })
95
+ ] }),
96
+ modalContent
97
+ ] });
98
+ }
99
+
100
+ export { SmallGraphViewportGuard, WorkflowEditorShell };