Alright, so I implemented BlockSelection as a plugin that doesn’t use the window’s selection at all.
You can play with it here – escape will create a BlockSelection and you can shift-click and shift-arrow around to create multi-block selections. For now, there’s no drag selection or disjointed selections.
The weird thing I noticed is that it’s not possible for ProseMirror to not have a selection so there’s always a text selection going on behind the BlockSelection.
Any ideas how to make this BlockSelection work as a proper selection rather than a plugin? Is it possible to create a totally custom selection type that doesn’t set the browser window selection?