SnapSort
Versatile and Extensible
A wide variety of core components are available out of the box to provide building blocks for any type of drag and drop UI.
Get started
npm install @snap-engine/core @snap-engine/asset-base-svelte @snap-engine/snapsort @snap-engine/snapsort-svelte <script lang="ts">
import { Engine } from "@snap-engine/asset-base-svelte";
import { Container, Item } from "@snap-engine/snapsort-svelte";
import type { ItemMoveEvent } from "@snap-engine/snapsort";
let tasks = $state([
{ id: "design", label: "Design" },
{ id: "build", label: "Build" },
{ id: "ship", label: "Ship" },
]);
function onItemMove(event: ItemMoveEvent) {
const task = tasks.find((entry) => entry.id === event.itemId);
if (!task) return;
const next = tasks.filter((entry) => entry.id !== event.itemId);
next.splice(event.to.index, 0, task);
tasks = next;
}
</script>
<Engine id="quick-start">
<Container
config={{ direction: "column", groupID: "tasks", callbacks: { onItemMove } }}
items={tasks}
>
{#snippet entry(task)}
<Item itemId={task.id}>{task.label}</Item>
{/snippet}
</Container>
</Engine>