The DragDropProvider component is the central context provider for drag and drop interactions. It wraps your draggable and droppable elements and provides event listeners (like onDragEnd) to handle interaction logic.
Critical Requirement: createDraggable and createDroppable rely on the context provided by DragDropProvider. They must be called from a component that is rendered inside the DragDropProvider. If you call them in the same component that renders the provider, the context will be unavailable and an error will be thrown.
<script>
import {DragDropProvider} from '@dnd-kit/svelte';
import Draggable from './Draggable.svelte';
import Droppable from './Droppable.svelte';
let parent = $state(undefined);
function onDragEnd(event) {
if (event.canceled) return;
parent = event.operation.target?.id;
}
</script>
<DragDropProvider {onDragEnd}>
{#if parent == null}
<Draggable />
{/if}
<Droppable id="droppable">
{#if parent === 'droppable'}
<Draggable />
{/if}
</Droppable>
</DragDropProvider>