migrate more containers

This commit is contained in:
peterkogo
2024-11-13 15:52:16 +01:00
parent 52a4b310d4
commit 1e11903184
5 changed files with 39 additions and 40 deletions
@@ -1,4 +1,4 @@
<script lang="ts" context="module"> <script lang="ts" module>
export function wrapHandler( export function wrapHandler(
handler: (evt: MouseEvent) => void, handler: (evt: MouseEvent) => void,
container: HTMLDivElement container: HTMLDivElement
@@ -37,7 +37,7 @@
import type { Node, Edge, InternalNode } from '$lib/types'; import type { Node, Edge, InternalNode } from '$lib/types';
import type { PaneProps } from './types'; import type { PaneProps } from './types';
let { let {
panOnDrag, panOnDrag = true,
selectionOnDrag, selectionOnDrag,
onpaneclick, onpaneclick,
onpanecontextmenu, onpanecontextmenu,
@@ -59,6 +59,7 @@
unselectNodesAndEdges unselectNodesAndEdges
} = useStore(); } = useStore();
// svelte-ignore non_reactive_update
let container: HTMLDivElement; let container: HTMLDivElement;
let containerBounds: DOMRect | null = null; let containerBounds: DOMRect | null = null;
let selectedNodes: InternalNode[] = []; let selectedNodes: InternalNode[] = [];
@@ -242,23 +242,16 @@
{onMoveStart} {onMoveStart}
{onMove} {onMove}
{onMoveEnd} {onMoveEnd}
panOnScrollMode={panOnScrollMode === undefined ? PanOnScrollMode.Free : panOnScrollMode} {panOnScrollMode}
preventScrolling={preventScrolling === undefined ? true : preventScrolling} {preventScrolling}
zoomOnScroll={zoomOnScroll === undefined ? true : zoomOnScroll} {zoomOnScroll}
zoomOnDoubleClick={zoomOnDoubleClick === undefined ? true : zoomOnDoubleClick} {zoomOnDoubleClick}
zoomOnPinch={zoomOnPinch === undefined ? true : zoomOnPinch} {zoomOnPinch}
panOnScroll={panOnScroll === undefined ? false : panOnScroll} {panOnScroll}
panOnDrag={panOnDrag === undefined ? true : panOnDrag} {panOnDrag}
paneClickDistance={paneClickDistance === undefined ? 0 : paneClickDistance} {paneClickDistance}
> >
<Pane <Pane {nodes} {edges} {onpaneclick} {onpanecontextmenu} {panOnDrag} {selectionOnDrag}>
{nodes}
{edges}
{onpaneclick}
{onpanecontextmenu}
panOnDrag={panOnDrag === undefined ? true : panOnDrag}
{selectionOnDrag}
>
<ViewportComponent> <ViewportComponent>
<EdgeRenderer <EdgeRenderer
on:edgeclick on:edgeclick
@@ -1,14 +1,17 @@
<script lang="ts"> <script lang="ts">
import { useStore } from '$lib/store'; import { useStore } from '$lib/store';
import type { Snippet } from 'svelte';
const { viewport } = useStore(); const { viewport } = useStore();
let { children }: { children: Snippet } = $props();
</script> </script>
<div <div
class="svelte-flow__viewport xyflow__viewport" class="svelte-flow__viewport xyflow__viewport"
style="transform: translate({$viewport.x}px, {$viewport.y}px) scale({$viewport.zoom})" style="transform: translate({$viewport.x}px, {$viewport.y}px) scale({$viewport.zoom})"
> >
<slot /> {@render children()}
</div> </div>
<style> <style>
@@ -6,20 +6,21 @@
import zoom from '$lib/actions/zoom'; import zoom from '$lib/actions/zoom';
import type { ZoomProps } from './types'; import type { ZoomProps } from './types';
type $$Props = ZoomProps; let {
initialViewport = { x: 0, y: 0, zoom: 1 },
export let initialViewport: $$Props['initialViewport'] = undefined; onMoveStart,
export let onMoveStart: $$Props['onMoveStart'] = undefined; onMove,
export let onMove: $$Props['onMove'] = undefined; onMoveEnd,
export let onMoveEnd: $$Props['onMoveEnd'] = undefined; panOnScrollMode = PanOnScrollMode.Free,
export let panOnScrollMode: $$Props['panOnScrollMode']; preventScrolling = true,
export let preventScrolling: $$Props['preventScrolling']; zoomOnScroll = true,
export let zoomOnScroll: $$Props['zoomOnScroll']; zoomOnDoubleClick = true,
export let zoomOnDoubleClick: $$Props['zoomOnDoubleClick']; zoomOnPinch = true,
export let zoomOnPinch: $$Props['zoomOnPinch']; panOnDrag = true,
export let panOnDrag: $$Props['panOnDrag']; panOnScroll = false,
export let panOnScroll: $$Props['panOnScroll']; paneClickDistance = 1,
export let paneClickDistance: $$Props['paneClickDistance']; children
}: ZoomProps = $props();
const { const {
viewport, viewport,
@@ -35,9 +36,8 @@
viewportInitialized viewportInitialized
} = useStore(); } = useStore();
$: viewPort = initialViewport || { x: 0, y: 0, zoom: 1 }; let panOnDragActive = $derived($panActivationKeyPressed || panOnDrag);
$: _panOnDrag = $panActivationKeyPressed || panOnDrag; let panOnScrollActive = $derived($panActivationKeyPressed || panOnScroll);
$: _panOnScroll = $panActivationKeyPressed || panOnScroll;
const onTransformChange = (transform: Transform) => const onTransformChange = (transform: Transform) =>
viewport.set({ x: transform[0], y: transform[1], zoom: transform[2] }); viewport.set({ x: transform[0], y: transform[1], zoom: transform[2] });
@@ -53,7 +53,7 @@
viewport, viewport,
minZoom: $minZoom, minZoom: $minZoom,
maxZoom: $maxZoom, maxZoom: $maxZoom,
initialViewport: viewPort, initialViewport,
dragging, dragging,
panZoom, panZoom,
onPanZoomStart: onMoveStart, onPanZoomStart: onMoveStart,
@@ -62,8 +62,8 @@
zoomOnScroll, zoomOnScroll,
zoomOnDoubleClick, zoomOnDoubleClick,
zoomOnPinch, zoomOnPinch,
panOnScroll: _panOnScroll, panOnScroll: panOnScrollActive,
panOnDrag: _panOnDrag, panOnDrag: panOnDragActive,
panOnScrollSpeed: 0.5, panOnScrollSpeed: 0.5,
panOnScrollMode: panOnScrollMode || PanOnScrollMode.Free, panOnScrollMode: panOnScrollMode || PanOnScrollMode.Free,
zoomActivationKeyPressed: $zoomActivationKeyPressed, zoomActivationKeyPressed: $zoomActivationKeyPressed,
@@ -77,7 +77,7 @@
onTransformChange onTransformChange
}} }}
> >
<slot /> {@render children()}
</div> </div>
<style> <style>
@@ -1,4 +1,5 @@
import type { OnMoveStart, OnMove, OnMoveEnd, PanOnScrollMode, Viewport } from '@xyflow/system'; import type { OnMoveStart, OnMove, OnMoveEnd, PanOnScrollMode, Viewport } from '@xyflow/system';
import type { Snippet } from 'svelte';
export type ZoomProps = { export type ZoomProps = {
initialViewport?: Viewport; initialViewport?: Viewport;
@@ -13,4 +14,5 @@ export type ZoomProps = {
panOnScroll: boolean; panOnScroll: boolean;
panOnDrag: boolean | number[]; panOnDrag: boolean | number[];
paneClickDistance: number; paneClickDistance: number;
children: Snippet;
}; };