ProseMirror requires a certain willingness to work with strict data flow and immutable data structures, and to cobble together a loose set of small modules before you have something user-friendly, but if you can handle that I think it's a safe bet at this point. (Disclaimer: I wrote it, and am heavily biased.)