anchor.diff:      KeyCode.SINGLE_QUOTE: "'"
     };
   
  -  final Element _target;
  -  final Map<KeyCode, int> navKeys;
  -
  -  final Stream<KeyEvent> rawKeyCombinedStream;
  -  final Stream<KeyEvent> rawKeyUpStream;
  -  final Stream<KeyEvent> rawKeyDownStream;
  -  final Stream<KeyEvent> rawKeyPressStream;
  -
  -  bool allowShiftOnlyHotKeys;
  -  bool allowAltKeyPress;
  -
  -  Stream<String> _keyStream;
  -  Stream<String> _lineStream;
  -  Stream<int>    _navStream;
  -  Stream<String> _hotKeyStream;
   
     factory ReactiveKeyboard(
         Element target, {
           bool allowShiftOnlyHotKeys: false,
           bool allowAltKeyPress: false,
  -        Map<int, int> navKeys
  +        Map<int, int> navKeys: NUM_NAV,
  +        List<int> delKeys: DEFAULT_DEL_KEYS
         }) {
       var rkp = KeyboardEventStream.onKeyPress(target);
       var rku = KeyboardEventStream.onKeyUp(target);
       var rkd = KeyboardEventStream.onKeyDown(target).map((key) {
  -      if (   key.keyCode == KeyCode.BACKSPACE
  -          || key.keyCode == KeyCode.DELETE
  -          || key.keyCode == KeyCode.NUM_DELETE) {
  +      if ( delKeys.contains(key.keyCode)) {
           key.preventDefault();
         }
   
         return key;
       });
   
  -    if (navKeys == null) {
  -      navKeys = NUM_NAV;
  -    }
  -
       var rkc = rkp.transform(new MergeAll(3, [rku, rkd])).asBroadcastStream();
   
       return new ReactiveKeyboard._(target, rkp, rku, rkd, rkc,
           allowShiftOnlyHotKeys: allowShiftOnlyHotKeys,
  -        allowAltKeyPress: allowAltKeyPress, navKeys: navKeys);
  +        allowAltKeyPress: allowAltKeyPress, navKeys: navKeys, delKeys: delKeys);
     }
   
   
  
positive.code: 
  
  class ReactiveKeyboard {
    // DOM event types consts
    static const String KEY_PRESS = 'keypress';
    static const String KEY_UP    = 'keyup';
  
negative.code:         lineTransformer = new StreamTransformer(handleData: (key, sink) {
            if (key.type == KEY_PRESS) {
              _line += new String.fromCharCode(key.charCode);
            } else if (key.type == KEY_DOWN) {
              if (delKeys.contains(key.keyCode)) {
                _line = _line.substring(0, _line.length - 1);
              } else if (key.keyCode == KeyCode.ENTER
                  || key.keyCode == KeyCode.MAC_ENTER) {
                sink.add(_line);
                _line = '';
              }
            }
          });
        }
  