text: /**
   * Copyright (c) 2013-present, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule keyCommandPlainDelete
   * @flow
   */
  
  'use strict';
  
  var EditorState = require('EditorState');
  var UnicodeUtils = require('UnicodeUtils');
  
  var moveSelectionForward = require('moveSelectionForward');
  var removeTextWithStrategy = require('removeTextWithStrategy');
  
  /**
   * Remove the selected range. If the cursor is collapsed, remove the following
   * character. This operation is Unicode-aware, so removing a single character
   * will remove a surrogate pair properly as well.
   */
  function keyCommandPlainDelete(editorState: EditorState): EditorState {
    var afterRemoval = removeTextWithStrategy(
      editorState,
      strategyState => {
        var selection = strategyState.getSelection();
        var content = strategyState.getCurrentContent();
        var key = selection.getAnchorKey();
        var offset = selection.getAnchorOffset();
        var charAhead = content.getBlockForKey(key).getText()[offset];
        return moveSelectionForward(
          strategyState,
          charAhead ? UnicodeUtils.getUTF16Length(charAhead, 0) : 1,
        );
      },
      'forward',
    );
  
    if (afterRemoval === editorState.getCurrentContent()) {
      return editorState;
    }
  
    var selection = editorState.getSelection();
  
    return EditorState.push(
      editorState,
      afterRemoval.set('selectionBefore', selection),
      selection.isCollapsed() ? 'delete-character' : 'remove-range',
    );
  }
  
  module.exports = keyCommandPlainDelete;
  