Whilst the shift-mouse is horrid, I understand the rationale.
At least make the cursor stay in the same postion when this is used, otherwise you have to keep releasing shift, moving the mouse back to the center, and pressing shift again.
Unfortunately, you can't move the mouse back to the center. Javascript does not allow hijacking the mouse. I bet you can imagine why. If there's a better way to do this, by all means make a PR. I know this is a dreadful solution, but it's better than nothing.
EDIT: I stand corrected! I found a way! PR in. I'm using requestPointerLock