undo/redo behavior for component/model