applyRowBlockMove
fun <T> MutableList<T>.applyRowBlockMove(move: RowBlockMove, keyOf: (T) -> Any, blockOf: (T) -> Any?)
Applies move to the SOURCE list — the lift from the rendered, possibly filtered view back to the consumer's source of truth.
Relocates ALL rows whose blockOf equals RowBlockMove.blockId, including rows the filter hides and RowBlockMove.movedKeys cannot name, preserving their relative order; the insertion point expands to whole-block boundaries so no other block is split. Standalone moves relocate just the moved keys. RowBlockMove.afterKey is the primary anchor and RowBlockMove.beforeKey the fallback; with neither resolvable the list is left untouched rather than guessing a position.