| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 | import getClippingRect from "../dom-utils/getClippingRect.js";import getDocumentElement from "../dom-utils/getDocumentElement.js";import getBoundingClientRect from "../dom-utils/getBoundingClientRect.js";import computeOffsets from "./computeOffsets.js";import rectToClientRect from "./rectToClientRect.js";import { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from "../enums.js";import { isElement } from "../dom-utils/instanceOf.js";import mergePaddingObject from "./mergePaddingObject.js";import expandToHashMap from "./expandToHashMap.js"; // eslint-disable-next-line import/no-unused-modulesexport default function detectOverflow(state, options) {  if (options === void 0) {    options = {};  }  var _options = options,      _options$placement = _options.placement,      placement = _options$placement === void 0 ? state.placement : _options$placement,      _options$strategy = _options.strategy,      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,      _options$boundary = _options.boundary,      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,      _options$rootBoundary = _options.rootBoundary,      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,      _options$elementConte = _options.elementContext,      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,      _options$altBoundary = _options.altBoundary,      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,      _options$padding = _options.padding,      padding = _options$padding === void 0 ? 0 : _options$padding;  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));  var altContext = elementContext === popper ? reference : popper;  var popperRect = state.rects.popper;  var element = state.elements[altBoundary ? altContext : elementContext];  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);  var referenceClientRect = getBoundingClientRect(state.elements.reference);  var popperOffsets = computeOffsets({    reference: referenceClientRect,    element: popperRect,    strategy: 'absolute',    placement: placement  });  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect  // 0 or negative = within the clipping rect  var overflowOffsets = {    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,    right: elementClientRect.right - clippingClientRect.right + paddingObject.right  };  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element  if (elementContext === popper && offsetData) {    var offset = offsetData[placement];    Object.keys(overflowOffsets).forEach(function (key) {      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';      overflowOffsets[key] += offset[axis] * multiply;    });  }  return overflowOffsets;}
 |