rewrote with Angular Dart, TODO: handle keyPress