Angular CDK's cdkDropList + cdkDrag directives turn a container into a sortable list. The list emits cdkDropListDropped with previous/current indices; the consumer mutates the backing array (typically via moveItemInArray or transferArrayItem). Multiple lists wired through cdkDropListConnectedTo let items move between them.