import { __require as requireGetRangeClientRects } from './getRangeClientRects.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 getRangeBoundingClientRect_1;
var hasRequiredGetRangeBoundingClientRect;

function requireGetRangeBoundingClientRect () {
	if (hasRequiredGetRangeBoundingClientRect) return getRangeBoundingClientRect_1;
	hasRequiredGetRangeBoundingClientRect = 1;

	var getRangeClientRects = requireGetRangeClientRects();

	/**
	 * Like range.getBoundingClientRect() but normalizes for browser bugs.
	 */
	function getRangeBoundingClientRect(range) {
	  // "Return a DOMRect object describing the smallest rectangle that includes
	  // the first rectangle in list and all of the remaining rectangles of which
	  // the height or width is not zero."
	  // http://www.w3.org/TR/cssom-view/#dom-range-getboundingclientrect
	  var rects = getRangeClientRects(range);
	  var top = 0;
	  var right = 0;
	  var bottom = 0;
	  var left = 0;

	  if (rects.length) {
	    // If the first rectangle has 0 width, we use the second, this is needed
	    // because Chrome renders a 0 width rectangle when the selection contains
	    // a line break.
	    if (rects.length > 1 && rects[0].width === 0) {
	      var _rects$ = rects[1];
	      top = _rects$.top;
	      right = _rects$.right;
	      bottom = _rects$.bottom;
	      left = _rects$.left;
	    } else {
	      var _rects$2 = rects[0];
	      top = _rects$2.top;
	      right = _rects$2.right;
	      bottom = _rects$2.bottom;
	      left = _rects$2.left;
	    }

	    for (var ii = 1; ii < rects.length; ii++) {
	      var rect = rects[ii];

	      if (rect.height !== 0 && rect.width !== 0) {
	        top = Math.min(top, rect.top);
	        right = Math.max(right, rect.right);
	        bottom = Math.max(bottom, rect.bottom);
	        left = Math.min(left, rect.left);
	      }
	    }
	  }

	  return {
	    top: top,
	    right: right,
	    bottom: bottom,
	    left: left,
	    width: right - left,
	    height: bottom - top
	  };
	}

	getRangeBoundingClientRect_1 = getRangeBoundingClientRect;
	return getRangeBoundingClientRect_1;
}

export { requireGetRangeBoundingClientRect as __require };
//# sourceMappingURL=getRangeBoundingClientRect.js.map
