After realizing that recent performance issues were due to EditState updates clogging up the JS thread, my first thought was to decouple EditState from the main InputState. InputState changes cause rerenders of eg. ChatItemHeightMeasurer, so I figured that factoring out EditState would be a good idea.
Turns out that the performance issue was solved in the following diff. That said, I still think it's a good idea to factor this stuff out, so I'm putting this diff up too.