Add button-editing mode.
Put canvas in charge of modifying state.

Click handlers should be ~pure functions now.