anchor.diff:          lineTransformer = new StreamTransformer(handleData: (key, sink) {
             if (key.type == KEY_PRESS) {
               _line += new String.fromCharCode(key.charCode);
  -          } else if (key.type == KEY_DOWN && key.keyCode == KeyCode.ENTER) {
  -            sink.add(_line);
  -            _line = '';
  +          } 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 = '';
  +            }
             }
           });
         }
  
positive.code: 
  
  class ReactiveKeyboard {
    // DOM event types consts
    static const String KEY_PRESS = 'keypress';
    static const String KEY_UP    = 'keyup';
  
negative.code:     KeyCode.SINGLE_QUOTE: "'"
    };
  
  
    factory ReactiveKeyboard(
        Element target, {
          bool allowShiftOnlyHotKeys: false,
          bool allowAltKeyPress: false,
          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 ( delKeys.contains(key.keyCode)) {
          key.preventDefault();
        }
  
        return key;
      });
  
      var rkc = rkp.transform(new MergeAll(3, [rku, rkd])).asBroadcastStream();
  
      return new ReactiveKeyboard._(target, rkp, rku, rkd, rkc,
          allowShiftOnlyHotKeys: allowShiftOnlyHotKeys,
          allowAltKeyPress: allowAltKeyPress, navKeys: navKeys, delKeys: delKeys);
    }
  
  
  