Skip to Content
✨ Svelte Flow 1.0 is here! Rewritten for Svelte 5 with many new features and improvements.
ExamplesWhiteboardLasso Selection

Lasso Selection

This example demonstrates how to implement a lasso selection tool that allows users to select multiple nodes by drawing a freehand selection area. The component features:

  • Lasso Drawing: Draw freehand selection areas using pointer events
  • Partial/Full Selection: Toggle between selecting nodes partially or fully enclosed by the lasso
  • Visual Feedback: Real-time visual feedback while drawing the selection area
  • Canvas Rendering: Uses HTML5 Canvas for smooth drawing performance
<script lang="ts"> import { SvelteFlow, Background, Controls, MiniMap, Panel } from '@xyflow/svelte'; import type { Edge } from '@xyflow/svelte'; import Lasso from './Lasso.svelte'; import '@xyflow/svelte/dist/style.css'; const initialNodes = [ { id: '1', position: { x: 0, y: 0 }, data: { label: 'Hello' }, }, { id: '2', position: { x: 300, y: 0 }, data: { label: 'World' }, }, ]; const initialEdges: Edge[] = []; let nodes = $state.raw(initialNodes); let edges = $state.raw(initialEdges); let isLassoActive = $state(true); let partial = $state(false); </script> <SvelteFlow bind:nodes bind:edges fitView> <Background /> <MiniMap /> <Controls /> {#if isLassoActive} <Lasso {partial} /> {/if} <Panel position="top-left"> <div class="xy-theme__button-group"> <button class={['xy-theme__button', isLassoActive && 'active']} onclick={() => () => (isLassoActive = true)} > Lasso Mode </button> <button class={['xy-theme__button', !isLassoActive && 'active']} onclick={() => () => (isLassoActive = false)} > Selection Mode </button> </div> <label> <input type="checkbox" checked={partial} onchange={() => (partial = !partial)} class="xy-theme__checkbox" /> Partial selection </label> </Panel> </SvelteFlow>
Last updated on