import { __require as requireDraftModifier } from './DraftModifier.js';
import { __require as requireGkx } from './gkx.js';

/**
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @format
 * 
 * @emails oncall+draft_js
 */

var removeTextWithStrategy_1;
var hasRequiredRemoveTextWithStrategy;

function requireRemoveTextWithStrategy () {
	if (hasRequiredRemoveTextWithStrategy) return removeTextWithStrategy_1;
	hasRequiredRemoveTextWithStrategy = 1;

	var DraftModifier = requireDraftModifier();

	var gkx = requireGkx();

	var experimentalTreeDataSupport = gkx('draft_tree_data_support');
	/**
	 * For a collapsed selection state, remove text based on the specified strategy.
	 * If the selection state is not collapsed, remove the entire selected range.
	 */

	function removeTextWithStrategy(editorState, strategy, direction) {
	  var selection = editorState.getSelection();
	  var content = editorState.getCurrentContent();
	  var target = selection;
	  var anchorKey = selection.getAnchorKey();
	  var focusKey = selection.getFocusKey();
	  var anchorBlock = content.getBlockForKey(anchorKey);

	  if (experimentalTreeDataSupport) {
	    if (direction === 'forward') {
	      if (anchorKey !== focusKey) {
	        // For now we ignore forward delete across blocks,
	        // if there is demand for this we will implement it.
	        return content;
	      }
	    }
	  }

	  if (selection.isCollapsed()) {
	    if (direction === 'forward') {
	      if (editorState.isSelectionAtEndOfContent()) {
	        return content;
	      }

	      if (experimentalTreeDataSupport) {
	        var isAtEndOfBlock = selection.getAnchorOffset() === content.getBlockForKey(anchorKey).getLength();

	        if (isAtEndOfBlock) {
	          var anchorBlockSibling = content.getBlockForKey(anchorBlock.nextSibling);

	          if (!anchorBlockSibling || anchorBlockSibling.getLength() === 0) {
	            // For now we ignore forward delete at the end of a block,
	            // if there is demand for this we will implement it.
	            return content;
	          }
	        }
	      }
	    } else if (editorState.isSelectionAtStartOfContent()) {
	      return content;
	    }

	    target = strategy(editorState);

	    if (target === selection) {
	      return content;
	    }
	  }

	  return DraftModifier.removeRange(content, target, direction);
	}

	removeTextWithStrategy_1 = removeTextWithStrategy;
	return removeTextWithStrategy_1;
}

export { requireRemoveTextWithStrategy as __require };
//# sourceMappingURL=removeTextWithStrategy.js.map
