Parent
#44
What to build
Full drag-and-drop using @dnd-kit (already in apps/web deps). A single drag gesture can reorder items within a category, recategorize an item into a different category, and reorder categories themselves.
State machine: todoStore gains:
reorderItems(items: Array<{ id, categoryId, order }>) — batch update orders after a drag operation
recategorizeItem(itemId, newCategoryId, targetOrder) — move item to new category at a given position
reorderCategories(categoryIds: string[]) — update category order
WebSocket: todo.mutate already supports batched mutations — a drag operation that reorders and recategorizes is sent as a single mutation.
Drag implementation: DndContext wraps the full list. Each category is a SortableContext for its items. Dropping an item into a different category's SortableContext recategorizes it. Category headers are also sortable (separate SortableContext or drag handle). Visual feedback during drag (opacity, placeholder).
Acceptance criteria
Blocked by
Parent
#44
What to build
Full drag-and-drop using
@dnd-kit(already inapps/webdeps). A single drag gesture can reorder items within a category, recategorize an item into a different category, and reorder categories themselves.State machine:
todoStoregains:reorderItems(items: Array<{ id, categoryId, order }>)— batch update orders after a drag operationrecategorizeItem(itemId, newCategoryId, targetOrder)— move item to new category at a given positionreorderCategories(categoryIds: string[])— update category orderWebSocket:
todo.mutatealready supports batched mutations — a drag operation that reorders and recategorizes is sent as a single mutation.Drag implementation: DndContext wraps the full list. Each category is a SortableContext for its items. Dropping an item into a different category's SortableContext recategorizes it. Category headers are also sortable (separate SortableContext or drag handle). Visual feedback during drag (opacity, placeholder).
Acceptance criteria
todo.mutatecallbun fmt,bun lint,bun typecheckall passBlocked by