import { __require as requireDraftModifier } from './DraftModifier.js';
import { __require as requireEditorState } from './EditorState.js';
import { __require as requireStyle } from '../../../../fbjs@2.0.0/node_modules/fbjs/lib/Style.js';
import { __require as requireGetFragmentFromSelection } from './getFragmentFromSelection.js';
import { __require as requireGetScrollPosition } from '../../../../fbjs@2.0.0/node_modules/fbjs/lib/getScrollPosition.js';
import { __require as requireIsInstanceOfNode } from './isInstanceOfNode.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 editOnCut_1;
var hasRequiredEditOnCut;

function requireEditOnCut () {
	if (hasRequiredEditOnCut) return editOnCut_1;
	hasRequiredEditOnCut = 1;

	var DraftModifier = requireDraftModifier();

	var EditorState = requireEditorState();

	var Style = requireStyle();

	var getFragmentFromSelection = requireGetFragmentFromSelection();

	var getScrollPosition = requireGetScrollPosition();

	var isNode = requireIsInstanceOfNode();
	/**
	 * On `cut` events, native behavior is allowed to occur so that the system
	 * clipboard is set properly. This means that we need to take steps to recover
	 * the editor DOM state after the `cut` has occurred in order to maintain
	 * control of the component.
	 *
	 * In addition, we can keep a copy of the removed fragment, including all
	 * styles and entities, for use as an internal paste.
	 */


	function editOnCut(editor, e) {
	  var editorState = editor._latestEditorState;
	  var selection = editorState.getSelection();
	  var element = e.target;
	  var scrollPosition; // No selection, so there's nothing to cut.

	  if (selection.isCollapsed()) {
	    e.preventDefault();
	    return;
	  } // Track the current scroll position so that it can be forced back in place
	  // after the editor regains control of the DOM.


	  if (isNode(element)) {
	    var node = element;
	    scrollPosition = getScrollPosition(Style.getScrollParent(node));
	  }

	  var fragment = getFragmentFromSelection(editorState);
	  editor.setClipboard(fragment); // Set `cut` mode to disable all event handling temporarily.

	  editor.setMode('cut'); // Let native `cut` behavior occur, then recover control.

	  setTimeout(function () {
	    editor.restoreEditorDOM(scrollPosition);
	    editor.exitCurrentMode();
	    editor.update(removeFragment(editorState));
	  }, 0);
	}

	function removeFragment(editorState) {
	  var newContent = DraftModifier.removeRange(editorState.getCurrentContent(), editorState.getSelection(), 'forward');
	  return EditorState.push(editorState, newContent, 'remove-range');
	}

	editOnCut_1 = editOnCut;
	return editOnCut_1;
}

export { requireEditOnCut as __require };
//# sourceMappingURL=editOnCut.js.map
