add Cursor and State types
Undo and Redo