import { __require as requireGetRangeBoundingClientRect } from './getRangeBoundingClientRect.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 getVisibleSelectionRect_1;
var hasRequiredGetVisibleSelectionRect;

function requireGetVisibleSelectionRect () {
	if (hasRequiredGetVisibleSelectionRect) return getVisibleSelectionRect_1;
	hasRequiredGetVisibleSelectionRect = 1;

	var getRangeBoundingClientRect = requireGetRangeBoundingClientRect();
	/**
	 * Return the bounding ClientRect for the visible DOM selection, if any.
	 * In cases where there are no selected ranges or the bounding rect is
	 * temporarily invalid, return null.
	 *
	 * When using from an iframe, you should pass the iframe window object
	 */


	function getVisibleSelectionRect(global) {
	  var selection = global.getSelection();

	  if (!selection.rangeCount) {
	    return null;
	  }

	  var range = selection.getRangeAt(0);
	  var boundingRect = getRangeBoundingClientRect(range);
	  var top = boundingRect.top,
	      right = boundingRect.right,
	      bottom = boundingRect.bottom,
	      left = boundingRect.left; // When a re-render leads to a node being removed, the DOM selection will
	  // temporarily be placed on an ancestor node, which leads to an invalid
	  // bounding rect. Discard this state.

	  if (top === 0 && right === 0 && bottom === 0 && left === 0) {
	    return null;
	  }

	  return boundingRect;
	}

	getVisibleSelectionRect_1 = getVisibleSelectionRect;
	return getVisibleSelectionRect_1;
}

export { requireGetVisibleSelectionRect as __require };
//# sourceMappingURL=getVisibleSelectionRect.js.map
