diff --git a/packages/react/src/components/ViewportPortal/index.tsx b/packages/react/src/components/ViewportPortal/index.tsx new file mode 100644 index 00000000..4195a608 --- /dev/null +++ b/packages/react/src/components/ViewportPortal/index.tsx @@ -0,0 +1,19 @@ +import type { ReactNode } from 'react'; +import { createPortal } from 'react-dom'; + +import { useStore } from '../../hooks/useStore'; +import type { ReactFlowState } from '../../types'; + +const selector = (s: ReactFlowState) => s.domNode?.querySelector('.react-flow__viewport-portal'); + +function ViewportPortal({ children }: { children: ReactNode }) { + const viewPortalDiv = useStore(selector); + + if (!viewPortalDiv) { + return null; + } + + return createPortal(children, viewPortalDiv); +} + +export default ViewportPortal; diff --git a/packages/react/src/container/GraphView/index.tsx b/packages/react/src/container/GraphView/index.tsx index 217e90c2..e311bc7f 100644 --- a/packages/react/src/container/GraphView/index.tsx +++ b/packages/react/src/container/GraphView/index.tsx @@ -174,7 +174,7 @@ const GraphView = ({ />
- +
+ import portal from '$lib/actions/portal'; + import { useStore } from '$lib/store'; + + type $$Props = {}; + + const { domNode } = useStore(); + + +
+ +
diff --git a/packages/svelte/src/lib/components/ViewportPortal/index.ts b/packages/svelte/src/lib/components/ViewportPortal/index.ts new file mode 100644 index 00000000..12da71c8 --- /dev/null +++ b/packages/svelte/src/lib/components/ViewportPortal/index.ts @@ -0,0 +1 @@ +export { default as ViewportPortal } from './ViewportPortal.svelte'; diff --git a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte index 81aa81bd..3e09a460 100644 --- a/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte +++ b/packages/svelte/src/lib/container/SvelteFlow/SvelteFlow.svelte @@ -218,6 +218,7 @@
+