{"ast":null,"code":"import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport getCss from 'dom-helpers/css';\nimport getOffset from 'dom-helpers/offset';\nimport getPosition from 'dom-helpers/position';\nimport getScrollLeft from 'dom-helpers/scrollLeft';\nimport getScrollTop from 'dom-helpers/scrollTop';\nimport ownerDocument from 'dom-helpers/ownerDocument';\nvar AXIS = {\n  top: 'top',\n  bottom: 'top',\n  left: 'left',\n  right: 'left'\n};\nvar FLIPPED_DIRECTION = {\n  top: 'bottom',\n  bottom: 'top',\n  left: 'right',\n  right: 'left'\n};\nvar CROSS_AXIS = {\n  top: 'left',\n  left: 'top'\n};\nvar AXIS_SIZE = {\n  top: 'height',\n  left: 'width'\n};\nvar PARSED_PLACEMENT_CACHE = {};\nvar visualViewport = typeof window !== 'undefined' && window.visualViewport;\n\nfunction getContainerDimensions(containerNode) {\n  var width = 0,\n      height = 0,\n      top = 0,\n      left = 0;\n  var scroll = {};\n\n  if (containerNode.tagName === 'BODY') {\n    var _visualViewport$width, _visualViewport$heigh;\n\n    width = (_visualViewport$width = visualViewport === null || visualViewport === void 0 ? void 0 : visualViewport.width) !== null && _visualViewport$width !== void 0 ? _visualViewport$width : document.documentElement.clientWidth;\n    height = (_visualViewport$heigh = visualViewport === null || visualViewport === void 0 ? void 0 : visualViewport.height) !== null && _visualViewport$heigh !== void 0 ? _visualViewport$heigh : document.documentElement.clientHeight;\n    scroll.top = getScrollTop(ownerDocument(containerNode).documentElement) || getScrollTop(containerNode);\n    scroll.left = getScrollLeft(ownerDocument(containerNode).documentElement) || getScrollLeft(containerNode);\n  } else {\n    var _getOffset = getOffset(containerNode);\n\n    width = _getOffset.width;\n    height = _getOffset.height;\n    top = _getOffset.top;\n    left = _getOffset.left;\n    scroll.top = getScrollTop(containerNode);\n    scroll.left = getScrollLeft(containerNode);\n  }\n\n  return {\n    width: width,\n    height: height,\n    scroll: scroll,\n    top: top,\n    left: left\n  };\n}\n\nfunction getScroll(node) {\n  return {\n    top: node.scrollTop,\n    left: node.scrollLeft,\n    width: node.scrollWidth,\n    height: node.scrollHeight\n  };\n}\n\nfunction getDelta(axis, offset, size, containerDimensions, padding) {\n  var containerScroll = containerDimensions.scroll[axis];\n  var containerHeight = containerDimensions[AXIS_SIZE[axis]];\n  var startEdgeOffset = offset - padding - containerScroll;\n  var endEdgeOffset = offset + padding - containerScroll + size;\n\n  if (startEdgeOffset < 0) {\n    return -startEdgeOffset;\n  } else if (endEdgeOffset > containerHeight) {\n    return Math.max(containerHeight - endEdgeOffset, -startEdgeOffset);\n  } else {\n    return 0;\n  }\n}\n\nfunction getMargins(node) {\n  var style = window.getComputedStyle(node);\n  return {\n    top: parseInt(style.marginTop, 10) || 0,\n    bottom: parseInt(style.marginBottom, 10) || 0,\n    left: parseInt(style.marginLeft, 10) || 0,\n    right: parseInt(style.marginRight, 10) || 0\n  };\n}\n\nfunction parsePlacement(input) {\n  if (PARSED_PLACEMENT_CACHE[input]) {\n    return PARSED_PLACEMENT_CACHE[input];\n  }\n\n  var _input$split = input.split(' '),\n      _input$split2 = _slicedToArray(_input$split, 2),\n      placement = _input$split2[0],\n      crossPlacement = _input$split2[1];\n\n  var axis = AXIS[placement] || 'right';\n  var crossAxis = CROSS_AXIS[axis];\n\n  if (!AXIS[crossPlacement]) {\n    crossPlacement = 'center';\n  }\n\n  var size = AXIS_SIZE[axis];\n  var crossSize = AXIS_SIZE[crossAxis];\n  PARSED_PLACEMENT_CACHE[input] = {\n    placement: placement,\n    crossPlacement: crossPlacement,\n    axis: axis,\n    crossAxis: crossAxis,\n    size: size,\n    crossSize: crossSize\n  };\n  return PARSED_PLACEMENT_CACHE[input];\n}\n\nfunction computePosition(childOffset, boundaryDimensions, overlaySize, placementInfo, offset, crossOffset, containerOffsetWithBoundary, isContainerPositioned) {\n  var placement = placementInfo.placement,\n      crossPlacement = placementInfo.crossPlacement,\n      axis = placementInfo.axis,\n      crossAxis = placementInfo.crossAxis,\n      size = placementInfo.size,\n      crossSize = placementInfo.crossSize;\n  var position = {};\n  position[crossAxis] = childOffset[crossAxis];\n\n  if (crossPlacement === 'center') {\n    position[crossAxis] += (childOffset[crossSize] - overlaySize[crossSize]) / 2;\n  } else if (crossPlacement !== crossAxis) {\n    position[crossAxis] += childOffset[crossSize] - overlaySize[crossSize];\n  }\n\n  position[crossAxis] += crossOffset;\n  var minViablePosition = childOffset[crossAxis] + childOffset[crossSize] / 2 - overlaySize[crossSize];\n  var maxViablePosition = childOffset[crossAxis] + childOffset[crossSize] / 2;\n  position[crossAxis] = Math.min(Math.max(minViablePosition, position[crossAxis]), maxViablePosition);\n\n  if (placement === axis) {\n    var containerHeight = isContainerPositioned ? containerOffsetWithBoundary[size] : boundaryDimensions[size];\n    position[FLIPPED_DIRECTION[axis]] = Math.floor(containerHeight - childOffset[axis] + offset);\n  } else {\n    position[axis] = Math.floor(childOffset[axis] + childOffset[size] + offset);\n  }\n\n  return position;\n}\n\nfunction getMaxHeight(position, boundaryDimensions, containerOffsetWithBoundary, childOffset, margins, padding) {\n  return position.top != null ? Math.max(0, boundaryDimensions.height + boundaryDimensions.top + boundaryDimensions.scroll.top - (containerOffsetWithBoundary.top + position.top) - (margins.top + margins.bottom + padding)) : Math.max(0, childOffset.top + containerOffsetWithBoundary.top - (boundaryDimensions.top + boundaryDimensions.scroll.top) - (margins.top + margins.bottom + padding));\n}\n\nfunction getAvailableSpace(boundaryDimensions, containerOffsetWithBoundary, childOffset, margins, padding, placementInfo) {\n  var placement = placementInfo.placement,\n      axis = placementInfo.axis,\n      size = placementInfo.size;\n\n  if (placement === axis) {\n    return Math.max(0, childOffset[axis] - boundaryDimensions[axis] - boundaryDimensions.scroll[axis] + containerOffsetWithBoundary[axis] - margins[axis] - margins[FLIPPED_DIRECTION[axis]] - padding);\n  }\n\n  return Math.max(0, boundaryDimensions[size] + boundaryDimensions[axis] + boundaryDimensions.scroll[axis] - containerOffsetWithBoundary[axis] - childOffset[axis] - childOffset[size] - margins[axis] - margins[FLIPPED_DIRECTION[axis]] - padding);\n}\n\nexport function calculatePositionInternal(placementInput, childOffset, overlaySize, scrollSize, margins, padding, flip, boundaryDimensions, containerOffsetWithBoundary, offset, crossOffset, isContainerPositioned, shouldOverlapWithTrigger) {\n  var placementInfo = parsePlacement(placementInput);\n  var _placementInfo = placementInfo,\n      size = _placementInfo.size,\n      crossAxis = _placementInfo.crossAxis,\n      crossSize = _placementInfo.crossSize,\n      placement = _placementInfo.placement,\n      crossPlacement = _placementInfo.crossPlacement,\n      axis = _placementInfo.axis;\n  var position = computePosition(childOffset, boundaryDimensions, overlaySize, placementInfo, offset, crossOffset, containerOffsetWithBoundary, isContainerPositioned);\n  var normalizedOffset = offset;\n  var space = getAvailableSpace(boundaryDimensions, containerOffsetWithBoundary, childOffset, margins, padding + offset, placementInfo);\n\n  if (flip && scrollSize[size] > space) {\n    var flippedPlacementInfo = parsePlacement(FLIPPED_DIRECTION[placement] + \" \" + crossPlacement);\n    var flippedPosition = computePosition(childOffset, boundaryDimensions, overlaySize, flippedPlacementInfo, offset, crossOffset, containerOffsetWithBoundary, isContainerPositioned);\n    var flippedSpace = getAvailableSpace(boundaryDimensions, containerOffsetWithBoundary, childOffset, margins, padding + offset, flippedPlacementInfo);\n\n    if (flippedSpace > space) {\n      placementInfo = flippedPlacementInfo;\n      position = flippedPosition;\n      normalizedOffset = offset;\n    }\n  }\n\n  var delta = getDelta(crossAxis, position[crossAxis], overlaySize[crossSize], boundaryDimensions, padding);\n  position[crossAxis] += delta;\n  var maxHeight = getMaxHeight(position, boundaryDimensions, containerOffsetWithBoundary, childOffset, margins, padding);\n  overlaySize.height = Math.min(overlaySize.height, maxHeight);\n  position = computePosition(childOffset, boundaryDimensions, overlaySize, placementInfo, normalizedOffset, crossOffset, containerOffsetWithBoundary, isContainerPositioned);\n  delta = getDelta(crossAxis, position[crossAxis], overlaySize[crossSize], boundaryDimensions, padding);\n  position[crossAxis] += delta;\n  var arrowPosition = {};\n  arrowPosition[crossAxis] = childOffset[crossAxis] - position[crossAxis] + childOffset[crossSize] / 2;\n\n  if (shouldOverlapWithTrigger) {\n    position[FLIPPED_DIRECTION[placementInfo.placement]] = position[FLIPPED_DIRECTION[placementInfo.placement]] - childOffset[size];\n  }\n\n  return {\n    position: position,\n    maxHeight: maxHeight,\n    arrowOffsetLeft: arrowPosition.left,\n    arrowOffsetTop: arrowPosition.top,\n    placement: placementInfo.placement\n  };\n}\nexport function calculatePosition(opts) {\n  var placement = opts.placement,\n      targetNode = opts.targetNode,\n      overlayNode = opts.overlayNode,\n      scrollNode = opts.scrollNode,\n      padding = opts.padding,\n      shouldFlip = opts.shouldFlip,\n      boundaryElement = opts.boundaryElement,\n      offset = opts.offset,\n      crossOffset = opts.crossOffset,\n      shouldOverlapWithTrigger = opts.shouldOverlapWithTrigger;\n  var container = overlayNode.offsetParent || document.body;\n  var isBodyContainer = container.tagName === 'BODY';\n  var containerPositionStyle = window.getComputedStyle(container).position;\n  var isContainerPositioned = !!containerPositionStyle && containerPositionStyle !== 'static';\n  var childOffset = isBodyContainer ? getOffset(targetNode) : getPosition(targetNode, container);\n\n  if (!isBodyContainer) {\n    childOffset.top += parseInt(getCss(targetNode, 'marginTop'), 10) || 0;\n    childOffset.left += parseInt(getCss(targetNode, 'marginLeft'), 10) || 0;\n  }\n\n  var overlaySize = getOffset(overlayNode);\n  var margins = getMargins(overlayNode);\n  overlaySize.width += margins.left + margins.right;\n  overlaySize.height += margins.top + margins.bottom;\n  var scrollSize = getScroll(scrollNode);\n  var boundaryDimensions = getContainerDimensions(boundaryElement);\n  var containerOffsetWithBoundary = boundaryElement.tagName === 'BODY' ? getOffset(container) : getPosition(container, boundaryElement);\n  return calculatePositionInternal(placement, childOffset, overlaySize, scrollSize, margins, padding, shouldFlip, boundaryDimensions, containerOffsetWithBoundary, offset, crossOffset, isContainerPositioned, shouldOverlapWithTrigger);\n}","map":{"version":3,"sources":["calculatePosition.ts"],"names":["AXIS","top","bottom","left","right","FLIPPED_DIRECTION","CROSS_AXIS","AXIS_SIZE","PARSED_PLACEMENT_CACHE","visualViewport","window","width","height","scroll","containerNode","document","getScrollTop","ownerDocument","getScrollLeft","getOffset","node","scrollHeight","containerScroll","containerDimensions","containerHeight","startEdgeOffset","offset","endEdgeOffset","Math","style","parseInt","input","axis","crossAxis","crossPlacement","size","crossSize","placement","position","childOffset","overlaySize","minViablePosition","maxViablePosition","isContainerPositioned","containerOffsetWithBoundary","boundaryDimensions","margins","placementInfo","parsePlacement","computePosition","normalizedOffset","space","getAvailableSpace","padding","flip","scrollSize","flippedPlacementInfo","flippedPosition","flippedSpace","delta","getDelta","maxHeight","getMaxHeight","arrowPosition","arrowOffsetLeft","arrowOffsetTop","shouldOverlapWithTrigger","container","overlayNode","isBodyContainer","containerPositionStyle","getPosition","getCss","getMargins","getScroll","getContainerDimensions","boundaryElement","calculatePositionInternal"],"mappings":";AAcA,OAAA,MAAA,MAAA,iBAAA;AACA,OAAA,SAAA,MAAA,oBAAA;AACA,OAAA,WAAA,MAAA,sBAAA;AACA,OAAA,aAAA,MAAA,wBAAA;AACA,OAAA,YAAA,MAAA,uBAAA;AACA,OAAA,aAAA,MAAA,2BAAA;AAsDA,IAAMA,IAAI,GAAG;AACXC,EAAAA,GAAG,EADQ,KAAA;AAEXC,EAAAA,MAAM,EAFK,KAAA;AAGXC,EAAAA,IAAI,EAHO,MAAA;AAIXC,EAAAA,KAAK,EAAE;AAJI,CAAb;AAOA,IAAMC,iBAAiB,GAAG;AACxBJ,EAAAA,GAAG,EADqB,QAAA;AAExBC,EAAAA,MAAM,EAFkB,KAAA;AAGxBC,EAAAA,IAAI,EAHoB,OAAA;AAIxBC,EAAAA,KAAK,EAAE;AAJiB,CAA1B;AAOA,IAAME,UAAU,GAAG;AACjBL,EAAAA,GAAG,EADc,MAAA;AAEjBE,EAAAA,IAAI,EAAE;AAFW,CAAnB;AAKA,IAAMI,SAAS,GAAG;AAChBN,EAAAA,GAAG,EADa,QAAA;AAEhBE,EAAAA,IAAI,EAAE;AAFU,CAAlB;AAKA,IAAMK,sBAAsB,GAA5B,EAAA;AAGA,IAAIC,cAAc,GAAG,OAAA,MAAA,KAAA,WAAA,IAAiCC,MAAM,CAA5D,cAAA;;AAEA,SAAA,sBAAA,CAAA,aAAA,EAAoE;AAClE,MAAIC,KAAK,GAAT,CAAA;AAAA,MAAeC,MAAM,GAArB,CAAA;AAAA,MAA2BX,GAAG,GAA9B,CAAA;AAAA,MAAoCE,IAAI,GAAxC,CAAA;AACA,MAAIU,MAAgB,GAApB,EAAA;;AAEA,MAAIC,aAAa,CAAbA,OAAAA,KAAJ,MAAA,EAAsC;AAAA,QAAA,qBAAA,EAAA,qBAAA;;AACpCH,IAAAA,KAAK,GAAA,CAAA,qBAAA,GAAGF,cAAH,KAAA,IAAGA,IAAAA,cAAH,KAAA,KAAA,CAAGA,GAAH,KAAA,CAAGA,GAAAA,cAAc,CAAjB,KAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,qBAAA,GAA4BM,QAAQ,CAARA,eAAAA,CAAjCJ,WAAAA;AACAC,IAAAA,MAAM,GAAA,CAAA,qBAAA,GAAGH,cAAH,KAAA,IAAGA,IAAAA,cAAH,KAAA,KAAA,CAAGA,GAAH,KAAA,CAAGA,GAAAA,cAAc,CAAjB,MAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,qBAAA,GAA6BM,QAAQ,CAARA,eAAAA,CAAnCH,YAAAA;AAEAC,IAAAA,MAAM,CAANA,GAAAA,GACEG,YAAY,CAACC,aAAa,CAAbA,aAAa,CAAbA,CAAbD,eAAY,CAAZA,IACAA,YAAY,CAFdH,aAEc,CAFdA;AAGAA,IAAAA,MAAM,CAANA,IAAAA,GACEK,aAAa,CAACD,aAAa,CAAbA,aAAa,CAAbA,CAAdC,eAAa,CAAbA,IACAA,aAAa,CAFfL,aAEe,CAFfA;AAPF,GAAA,MAUO;AAAA,qBACyBM,SAAS,CAAvC,aAAuC,CADlC;;AACJ,IAAA,KADI,cACJ,KADI;AACJ,IAAA,MADI,cACJ,MADI;AACJ,IAAA,GADI,cACJ,GADI;AACiBhB,IAAAA,IADjB,cACiBA,IADjB;AAELU,IAAAA,MAAM,CAANA,GAAAA,GAAaG,YAAY,CAAzBH,aAAyB,CAAzBA;AACAA,IAAAA,MAAM,CAANA,IAAAA,GAAcK,aAAa,CAA3BL,aAA2B,CAA3BA;AACD;;AAED,SAAO;AAACF,IAAAA,KAAD,EAACA,KAAD;AAAQC,IAAAA,MAAR,EAAQA,MAAR;AAAgBC,IAAAA,MAAhB,EAAgBA,MAAhB;AAAwBZ,IAAAA,GAAxB,EAAwBA,GAAxB;AAA6BE,IAAAA,IAAAA,EAAAA;AAA7B,GAAP;AACD;;AAED,SAAA,SAAA,CAAA,IAAA,EAA8C;AAC5C,SAAO;AACLF,IAAAA,GAAG,EAAEmB,IAAI,CADJ,SAAA;AAELjB,IAAAA,IAAI,EAAEiB,IAAI,CAFL,UAAA;AAGLT,IAAAA,KAAK,EAAES,IAAI,CAHN,WAAA;AAILR,IAAAA,MAAM,EAAEQ,IAAI,CAACC;AAJR,GAAP;AAMD;;AAED,SAAA,QAAA,CAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,mBAAA,EAAA,OAAA,EAME;AACA,MAAIC,eAAe,GAAGC,mBAAmB,CAAnBA,MAAAA,CAAtB,IAAsBA,CAAtB;AACA,MAAIC,eAAe,GAAGD,mBAAmB,CAAChB,SAAS,CAAnD,IAAmD,CAAV,CAAzC;AAEA,MAAIkB,eAAe,GAAGC,MAAM,GAANA,OAAAA,GAAtB,eAAA;AACA,MAAIC,aAAa,GAAGD,MAAM,GAANA,OAAAA,GAAAA,eAAAA,GAApB,IAAA;;AAEA,MAAID,eAAe,GAAnB,CAAA,EAAyB;AACvB,WAAO,CAAP,eAAA;AADF,GAAA,MAEO,IAAIE,aAAa,GAAjB,eAAA,EAAqC;AAC1C,WAAOC,IAAI,CAAJA,GAAAA,CAASJ,eAAe,GAAxBI,aAAAA,EAA0C,CAAjD,eAAOA,CAAP;AADK,GAAA,MAEA;AACL,WAAA,CAAA;AACD;AACF;;AAED,SAAA,UAAA,CAAA,IAAA,EAAiD;AAC/C,MAAIC,KAAK,GAAGnB,MAAM,CAANA,gBAAAA,CAAZ,IAAYA,CAAZ;AACA,SAAO;AACLT,IAAAA,GAAG,EAAE6B,QAAQ,CAACD,KAAK,CAAN,SAAA,EAARC,EAAQ,CAARA,IADA,CAAA;AAEL5B,IAAAA,MAAM,EAAE4B,QAAQ,CAACD,KAAK,CAAN,YAAA,EAARC,EAAQ,CAARA,IAFH,CAAA;AAGL3B,IAAAA,IAAI,EAAE2B,QAAQ,CAACD,KAAK,CAAN,UAAA,EAARC,EAAQ,CAARA,IAHD,CAAA;AAIL1B,IAAAA,KAAK,EAAE0B,QAAQ,CAACD,KAAK,CAAN,WAAA,EAARC,EAAQ,CAARA,IAAmC;AAJrC,GAAP;AAMD;;AAED,SAAA,cAAA,CAAA,KAAA,EAA2D;AACzD,MAAItB,sBAAsB,CAA1B,KAA0B,CAA1B,EAAmC;AACjC,WAAOA,sBAAsB,CAA7B,KAA6B,CAA7B;AACD;;AAHwD,qBAKvBuB,KAAK,CAALA,KAAAA,CAAlC,GAAkCA,CALuB;AAAA;AAAA,MAKrD,SALqD;AAAA,MAKrD,cALqD;;AAMzD,MAAIC,IAAU,GAAGhC,IAAI,CAAJA,SAAI,CAAJA,IAAjB,OAAA;AACA,MAAIiC,SAAe,GAAG3B,UAAU,CAAhC,IAAgC,CAAhC;;AAEA,MAAI,CAACN,IAAI,CAAT,cAAS,CAAT,EAA2B;AACzBkC,IAAAA,cAAc,GAAdA,QAAAA;AACD;;AAED,MAAIC,IAAI,GAAG5B,SAAS,CAApB,IAAoB,CAApB;AACA,MAAI6B,SAAS,GAAG7B,SAAS,CAAzB,SAAyB,CAAzB;AACAC,EAAAA,sBAAsB,CAAtBA,KAAsB,CAAtBA,GAAgC;AAAC6B,IAAAA,SAAD,EAACA,SAAD;AAAYH,IAAAA,cAAZ,EAAYA,cAAZ;AAA4BF,IAAAA,IAA5B,EAA4BA,IAA5B;AAAkCC,IAAAA,SAAlC,EAAkCA,SAAlC;AAA6CE,IAAAA,IAA7C,EAA6CA,IAA7C;AAAmDC,IAAAA,SAAAA,EAAAA;AAAnD,GAAhC5B;AACA,SAAOA,sBAAsB,CAA7B,KAA6B,CAA7B;AACD;;AAED,SAAA,eAAA,CAAA,WAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,WAAA,EAAA,2BAAA,EAAA,qBAAA,EASE;AAAA,MACI,SADJ,GACA,aADA,CACI,SADJ;AAAA,MACI,cADJ,GACA,aADA,CACI,cADJ;AAAA,MACI,IADJ,GACA,aADA,CACI,IADJ;AAAA,MACI,SADJ,GACA,aADA,CACI,SADJ;AAAA,MACI,IADJ,GACA,aADA,CACI,IADJ;AAAA,MACuD4B,SADvD,GACA,aADA,CACuDA,SADvD;AAEA,MAAIE,QAAkB,GAFtB,EAEA;AAGAA,EAAAA,QAAQ,CAARA,SAAQ,CAARA,GAAsBC,WAAW,CAAjCD,SAAiC,CAAjCA;;AACA,MAAIJ,cAAc,KAAlB,QAAA,EAAiC;AAG/BI,IAAAA,QAAQ,CAARA,SAAQ,CAARA,IAAuB,CAACC,WAAW,CAAXA,SAAW,CAAXA,GAAyBC,WAAW,CAArC,SAAqC,CAArC,IAAvBF,CAAAA;AAHF,GAAA,MAIO,IAAIJ,cAAc,KAAlB,SAAA,EAAkC;AAGvCI,IAAAA,QAAQ,CAARA,SAAQ,CAARA,IAAwBC,WAAW,CAAXA,SAAW,CAAXA,GAAyBC,WAAW,CAA5DF,SAA4D,CAA5DA;AACD;;AAIDA,EAAAA,QAAQ,CAARA,SAAQ,CAARA,IAlBA,WAkBAA;AAGA,MAAIG,iBAAiB,GAAGF,WAAW,CAAXA,SAAW,CAAXA,GAA0BA,WAAW,CAAXA,SAAW,CAAXA,GAA1BA,CAAAA,GAAwDC,WAAW,CArB3F,SAqB2F,CAA3F;AAEA,MAAIE,iBAAiB,GAAGH,WAAW,CAAXA,SAAW,CAAXA,GAA0BA,WAAW,CAAXA,SAAW,CAAXA,GAvBlD,CAuBA;AAGAD,EAAAA,QAAQ,CAARA,SAAQ,CAARA,GAAsBV,IAAI,CAAJA,GAAAA,CAASA,IAAI,CAAJA,GAAAA,CAAAA,iBAAAA,EAA4BU,QAAQ,CAA7CV,SAA6C,CAApCA,CAATA,EA1BtB,iBA0BsBA,CAAtBU;;AAGA,MAAID,SAAS,KAAb,IAAA,EAAwB;AAKtB,QAAMb,eAAe,GAAImB,qBAAqB,GAAGC,2BAA2B,CAA9B,IAA8B,CAA9B,GAAuCC,kBAAkB,CAAvG,IAAuG,CAAvG;AACAP,IAAAA,QAAQ,CAACjC,iBAAiB,CAA1BiC,IAA0B,CAAlB,CAARA,GAAoCV,IAAI,CAAJA,KAAAA,CAAWJ,eAAe,GAAGe,WAAW,CAA7Bf,IAA6B,CAA7BA,GAA/Cc,MAAoCV,CAApCU;AANF,GAAA,MAOO;AACLA,IAAAA,QAAQ,CAARA,IAAQ,CAARA,GAAiBV,IAAI,CAAJA,KAAAA,CAAWW,WAAW,CAAXA,IAAW,CAAXA,GAAoBA,WAAW,CAA/BA,IAA+B,CAA/BA,GAA5BD,MAAiBV,CAAjBU;AACD;;AAED,SAAA,QAAA;AACD;;AAED,SAAA,YAAA,CAAA,QAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAOE;AACA,SAAO,QAAQ,CAAR,GAAA,IAAA,IAAA,GAEH,IAAI,CAAJ,GAAA,CAAA,CAAA,EACCO,kBAAkB,CAAlBA,MAAAA,GAA4BA,kBAAkB,CAA9CA,GAAAA,GAAqDA,kBAAkB,CAAlBA,MAAAA,CAAtD,GAACA,IACED,2BAA2B,CAA3BA,GAAAA,GAAkCN,QAAQ,CAD7C,GAACO,KAEEC,OAAO,CAAPA,GAAAA,GAAcA,OAAO,CAArBA,MAAAA,GAHH,OACCD,CADD,CAFG,GAQH,IAAI,CAAJ,GAAA,CAAA,CAAA,EACCN,WAAW,CAAXA,GAAAA,GAAkBK,2BAA2B,CAA9C,GAACL,IACEM,kBAAkB,CAAlBA,GAAAA,GAAyBA,kBAAkB,CAAlBA,MAAAA,CAD5B,GAACN,KAEEO,OAAO,CAAPA,GAAAA,GAAcA,OAAO,CAArBA,MAAAA,GAHH,OACCP,CADD,CARJ;AAaD;;AAED,SAAA,iBAAA,CAAA,kBAAA,EAAA,2BAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAOE;AAAA,MACI,SADJ,GACA,aADA,CACI,SADJ;AAAA,MACI,IADJ,GACA,aADA,CACI,IADJ;AAAA,MACsBJ,IADtB,GACA,aADA,CACsBA,IADtB;;AAEA,MAAIE,SAAS,KAAb,IAAA,EAAwB;AACtB,WAAOT,IAAI,CAAJA,GAAAA,CAAAA,CAAAA,EAAYW,WAAW,CAAXA,IAAW,CAAXA,GAAoBM,kBAAkB,CAAtCN,IAAsC,CAAtCA,GAA+CM,kBAAkB,CAAlBA,MAAAA,CAA/CN,IAA+CM,CAA/CN,GAAiFK,2BAA2B,CAA5GL,IAA4G,CAA5GA,GAAqHO,OAAO,CAA5HP,IAA4H,CAA5HA,GAAqIO,OAAO,CAACzC,iBAAiB,CAA9JkC,IAA8J,CAAlB,CAA5IA,GAAnB,OAAOX,CAAP;AACD;;AAED,SAAOA,IAAI,CAAJA,GAAAA,CAAAA,CAAAA,EAAYiB,kBAAkB,CAAlBA,IAAkB,CAAlBA,GAA2BA,kBAAkB,CAA7CA,IAA6C,CAA7CA,GAAsDA,kBAAkB,CAAlBA,MAAAA,CAAtDA,IAAsDA,CAAtDA,GAAwFD,2BAA2B,CAAnHC,IAAmH,CAAnHA,GAA4HN,WAAW,CAAvIM,IAAuI,CAAvIA,GAAgJN,WAAW,CAA3JM,IAA2J,CAA3JA,GAAoKC,OAAO,CAA3KD,IAA2K,CAA3KA,GAAoLC,OAAO,CAACzC,iBAAiB,CAA7MwC,IAA6M,CAAlB,CAA3LA,GAAnB,OAAOjB,CAAP;AACD;;AAED,OAAO,SAAA,yBAAA,CAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,IAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,wBAAA,EAcW;AAChB,MAAImB,aAAa,GAAGC,cAAc,CAAlC,cAAkC,CAAlC;AADgB,uBAEhB,aAFgB;AAAA,MAEZ,IAFY,kBAEZ,IAFY;AAAA,MAEZ,SAFY,kBAEZ,SAFY;AAAA,MAEZ,SAFY,kBAEZ,SAFY;AAAA,MAEZ,SAFY,kBAEZ,SAFY;AAAA,MAEZ,cAFY,kBAEZ,cAFY;AAAA,MAE4ChB,IAF5C,kBAE4CA,IAF5C;AAGhB,MAAIM,QAAQ,GAAGW,eAAe,CAAA,WAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,WAAA,EAAA,2BAAA,EAA9B,qBAA8B,CAA9B;AACA,MAAIC,gBAAgB,GAApB,MAAA;AACA,MAAIC,KAAK,GAAGC,iBAAiB,CAAA,kBAAA,EAAA,2BAAA,EAAA,WAAA,EAAA,OAAA,EAK3BC,OAAO,GALoB,MAAA,EALb,aAKa,CAA7B;;AAUA,MAAIC,IAAI,IAAIC,UAAU,CAAVA,IAAU,CAAVA,GAAZ,KAAA,EAAsC;AACpC,QAAIC,oBAAoB,GAAGR,cAAc,CAAI3C,iBAAiB,CAAA,SAAA,CAArB,SAAzC,cAAyC,CAAzC;AACA,QAAIoD,eAAe,GAAGR,eAAe,CAAA,WAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,WAAA,EAAA,2BAAA,EAArC,qBAAqC,CAArC;AACA,QAAIS,YAAY,GAAGN,iBAAiB,CAAA,kBAAA,EAAA,2BAAA,EAAA,WAAA,EAAA,OAAA,EAKlCC,OAAO,GAL2B,MAAA,EAHA,oBAGA,CAApC;;AAUA,QAAIK,YAAY,GAAhB,KAAA,EAA0B;AACxBX,MAAAA,aAAa,GAAbA,oBAAAA;AACAT,MAAAA,QAAQ,GAARA,eAAAA;AACAY,MAAAA,gBAAgB,GAAhBA,MAAAA;AACD;AACF;;AAED,MAAIS,KAAK,GAAGC,QAAQ,CAAA,SAAA,EAAYtB,QAAQ,CAApB,SAAoB,CAApB,EAAiCE,WAAW,CAA5C,SAA4C,CAA5C,EAAA,kBAAA,EAApB,OAAoB,CAApB;AACAF,EAAAA,QAAQ,CAARA,SAAQ,CAARA,IAAAA,KAAAA;AAEA,MAAIuB,SAAS,GAAGC,YAAY,CAAA,QAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,WAAA,EAAA,OAAA,EAA5B,OAA4B,CAA5B;AASAtB,EAAAA,WAAW,CAAXA,MAAAA,GAAqBZ,IAAI,CAAJA,GAAAA,CAASY,WAAW,CAApBZ,MAAAA,EAArBY,SAAqBZ,CAArBY;AAEAF,EAAAA,QAAQ,GAAGW,eAAe,CAAA,WAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,2BAAA,EAA1BX,qBAA0B,CAA1BA;AACAqB,EAAAA,KAAK,GAAGC,QAAQ,CAAA,SAAA,EAAYtB,QAAQ,CAApB,SAAoB,CAApB,EAAiCE,WAAW,CAA5C,SAA4C,CAA5C,EAAA,kBAAA,EAAhBmB,OAAgB,CAAhBA;AACArB,EAAAA,QAAQ,CAARA,SAAQ,CAARA,IAAAA,KAAAA;AAEA,MAAIyB,aAAuB,GAA3B,EAAA;AACAA,EAAAA,aAAa,CAAbA,SAAa,CAAbA,GAA4BxB,WAAW,CAAXA,SAAW,CAAXA,GAAyBD,QAAQ,CAAjCC,SAAiC,CAAjCA,GAA+CA,WAAW,CAAXA,SAAW,CAAXA,GAA3EwB,CAAAA;;AAEA,MAAA,wBAAA,EAA8B;AAC5BzB,IAAAA,QAAQ,CAACjC,iBAAiB,CAAC0C,aAAa,CAAxCT,SAA0B,CAAlB,CAARA,GAAuDA,QAAQ,CAACjC,iBAAiB,CAAC0C,aAAa,CAAxCT,SAA0B,CAAlB,CAARA,GAAuDC,WAAW,CAAzHD,IAAyH,CAAzHA;AACD;;AAED,SAAO;AACLA,IAAAA,QADK,EACLA,QADK;AAELuB,IAAAA,SAAS,EAFJ,SAAA;AAGLG,IAAAA,eAAe,EAAED,aAAa,CAHzB,IAAA;AAILE,IAAAA,cAAc,EAAEF,aAAa,CAJxB,GAAA;AAKL1B,IAAAA,SAAS,EAAEU,aAAa,CAACV;AALpB,GAAP;AAOD;AAKD,OAAO,SAAA,iBAAA,CAAA,IAAA,EAA+D;AAAA,MAChE,SADgE,GACpE,IADoE,CAChE,SADgE;AAAA,MAChE,UADgE,GACpE,IADoE,CAChE,UADgE;AAAA,MAChE,WADgE,GACpE,IADoE,CAChE,WADgE;AAAA,MAChE,UADgE,GACpE,IADoE,CAChE,UADgE;AAAA,MAChE,OADgE,GACpE,IADoE,CAChE,OADgE;AAAA,MAChE,UADgE,GACpE,IADoE,CAChE,UADgE;AAAA,MAChE,eADgE,GACpE,IADoE,CAChE,eADgE;AAAA,MAChE,MADgE,GACpE,IADoE,CAChE,MADgE;AAAA,MAChE,WADgE,GACpE,IADoE,CAChE,WADgE;AAAA,MAWlE6B,wBAXkE,GACpE,IADoE,CAWlEA,wBAXkE;AAcpE,MAAIC,SAAS,GAAGC,WAAW,CAAXA,YAAAA,IAA4BrD,QAAQ,CAApD,IAAA;AACA,MAAIsD,eAAe,GAAGF,SAAS,CAATA,OAAAA,KAAtB,MAAA;AACA,MAAMG,sBAAsB,GAAG5D,MAAM,CAANA,gBAAAA,CAAAA,SAAAA,EAA/B,QAAA;AACA,MAAIiC,qBAAqB,GAAG,CAAC,CAAD,sBAAA,IAA4B2B,sBAAsB,KAA9E,QAAA;AACA,MAAI/B,WAAmB,GAAG8B,eAAe,GAAGlD,SAAS,CAAZ,UAAY,CAAZ,GAA2BoD,WAAW,CAAA,UAAA,EAA/E,SAA+E,CAA/E;;AAEA,MAAI,CAAJ,eAAA,EAAsB;AACpBhC,IAAAA,WAAW,CAAXA,GAAAA,IAAmBT,QAAQ,CAAC0C,MAAM,CAAA,UAAA,EAAP,WAAO,CAAP,EAAR1C,EAAQ,CAARA,IAAnBS,CAAAA;AACAA,IAAAA,WAAW,CAAXA,IAAAA,IAAoBT,QAAQ,CAAC0C,MAAM,CAAA,UAAA,EAAP,YAAO,CAAP,EAAR1C,EAAQ,CAARA,IAApBS,CAAAA;AACD;;AAED,MAAIC,WAAmB,GAAGrB,SAAS,CAAnC,WAAmC,CAAnC;AACA,MAAI2B,OAAO,GAAG2B,UAAU,CAAxB,WAAwB,CAAxB;AACAjC,EAAAA,WAAW,CAAXA,KAAAA,IAAqBM,OAAO,CAAPA,IAAAA,GAAeA,OAAO,CAA3CN,KAAAA;AACAA,EAAAA,WAAW,CAAXA,MAAAA,IAAsBM,OAAO,CAAPA,GAAAA,GAAcA,OAAO,CAA3CN,MAAAA;AAEA,MAAIe,UAAU,GAAGmB,SAAS,CAA1B,UAA0B,CAA1B;AACA,MAAI7B,kBAAkB,GAAG8B,sBAAsB,CAA/C,eAA+C,CAA/C;AACA,MAAI/B,2BAAmC,GAAGgC,eAAe,CAAfA,OAAAA,KAAAA,MAAAA,GAAqCzD,SAAS,CAA9CyD,SAA8C,CAA9CA,GAA4DL,WAAW,CAAA,SAAA,EAAjH,eAAiH,CAAjH;AAGA,SAAOM,yBAAyB,CAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,WAAA,EAAA,qBAAA,EAAhC,wBAAgC,CAAhC;AAeD","sourcesContent":["// @ts-nocheck\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Axis, Placement, PlacementAxis, SizeAxis} from '@react-types/overlays';\nimport getCss from 'dom-helpers/css';\nimport getOffset from 'dom-helpers/offset';\nimport getPosition from 'dom-helpers/position';\nimport getScrollLeft from 'dom-helpers/scrollLeft';\nimport getScrollTop from 'dom-helpers/scrollTop';\nimport ownerDocument from 'dom-helpers/ownerDocument';\n\ninterface Position {\n  top?: number,\n  left?: number,\n  bottom?: number,\n  right?: number\n}\n\ninterface Dimensions {\n  width: number,\n  height: number,\n  top: number,\n  left: number,\n  scroll: Position\n}\n\ninterface ParsedPlacement {\n  placement: PlacementAxis,\n  crossPlacement: PlacementAxis,\n  axis: Axis,\n  crossAxis: Axis,\n  size: SizeAxis,\n  crossSize: SizeAxis\n}\n\ninterface Offset {\n  top: number,\n  left: number,\n  width: number,\n  height: number\n}\n\ninterface PositionOpts {\n  placement: Placement,\n  targetNode: HTMLElement,\n  overlayNode: HTMLElement,\n  scrollNode: HTMLElement,\n  padding: number,\n  shouldFlip: boolean,\n  boundaryElement: HTMLElement,\n  offset: number,\n  crossOffset: number,\n  shouldOverlapWithTrigger: boolean\n}\n\nexport interface PositionResult {\n  position?: Position,\n  arrowOffsetLeft?: number,\n  arrowOffsetTop?: number,\n  maxHeight?: number,\n  placement: PlacementAxis\n}\n\nconst AXIS = {\n  top: 'top',\n  bottom: 'top',\n  left: 'left',\n  right: 'left'\n};\n\nconst FLIPPED_DIRECTION = {\n  top: 'bottom',\n  bottom: 'top',\n  left: 'right',\n  right: 'left'\n};\n\nconst CROSS_AXIS = {\n  top: 'left',\n  left: 'top'\n};\n\nconst AXIS_SIZE = {\n  top: 'height',\n  left: 'width'\n};\n\nconst PARSED_PLACEMENT_CACHE = {};\n\n// @ts-ignore\nlet visualViewport = typeof window !== 'undefined' && window.visualViewport;\n\nfunction getContainerDimensions(containerNode: Element): Dimensions {\n  let width = 0, height = 0, top = 0, left = 0;\n  let scroll: Position = {};\n\n  if (containerNode.tagName === 'BODY') {\n    width = visualViewport?.width ?? document.documentElement.clientWidth;\n    height = visualViewport?.height ?? document.documentElement.clientHeight;\n\n    scroll.top =\n      getScrollTop(ownerDocument(containerNode).documentElement) ||\n      getScrollTop(containerNode);\n    scroll.left =\n      getScrollLeft(ownerDocument(containerNode).documentElement) ||\n      getScrollLeft(containerNode);\n  } else {\n    ({width, height, top, left} = getOffset(containerNode));\n    scroll.top = getScrollTop(containerNode);\n    scroll.left = getScrollLeft(containerNode);\n  }\n\n  return {width, height, scroll, top, left};\n}\n\nfunction getScroll(node: HTMLElement): Offset {\n  return {\n    top: node.scrollTop,\n    left: node.scrollLeft,\n    width: node.scrollWidth,\n    height: node.scrollHeight\n  };\n}\n\nfunction getDelta(\n  axis: Axis,\n  offset: number,\n  size: number,\n  containerDimensions: Dimensions,\n  padding: number\n) {\n  let containerScroll = containerDimensions.scroll[axis];\n  let containerHeight = containerDimensions[AXIS_SIZE[axis]];\n\n  let startEdgeOffset = offset - padding - containerScroll;\n  let endEdgeOffset = offset + padding - containerScroll + size;\n\n  if (startEdgeOffset < 0) {\n    return -startEdgeOffset;\n  } else if (endEdgeOffset > containerHeight) {\n    return Math.max(containerHeight - endEdgeOffset, -startEdgeOffset);\n  } else {\n    return 0;\n  }\n}\n\nfunction getMargins(node: HTMLElement): Position {\n  let style = window.getComputedStyle(node);\n  return {\n    top: parseInt(style.marginTop, 10) || 0,\n    bottom: parseInt(style.marginBottom, 10) || 0,\n    left: parseInt(style.marginLeft, 10) || 0,\n    right: parseInt(style.marginRight, 10) || 0\n  };\n}\n\nfunction parsePlacement(input: Placement): ParsedPlacement {\n  if (PARSED_PLACEMENT_CACHE[input]) {\n    return PARSED_PLACEMENT_CACHE[input];\n  }\n\n  let [placement, crossPlacement] = input.split(' ');\n  let axis: Axis = AXIS[placement] || 'right';\n  let crossAxis: Axis = CROSS_AXIS[axis];\n\n  if (!AXIS[crossPlacement]) {\n    crossPlacement = 'center';\n  }\n\n  let size = AXIS_SIZE[axis];\n  let crossSize = AXIS_SIZE[crossAxis];\n  PARSED_PLACEMENT_CACHE[input] = {placement, crossPlacement, axis, crossAxis, size, crossSize};\n  return PARSED_PLACEMENT_CACHE[input];\n}\n\nfunction computePosition(\n  childOffset: Offset,\n  boundaryDimensions: Dimensions,\n  overlaySize: Offset,\n  placementInfo: ParsedPlacement,\n  offset: number,\n  crossOffset: number,\n  containerOffsetWithBoundary: Offset,\n  isContainerPositioned: boolean\n) {\n  let {placement, crossPlacement, axis, crossAxis, size, crossSize} = placementInfo;\n  let position: Position = {};\n\n  // button position\n  position[crossAxis] = childOffset[crossAxis];\n  if (crossPlacement === 'center') {\n    //  + (button size / 2) - (overlay size / 2)\n    // at this point the overlay center should match the button center\n    position[crossAxis] += (childOffset[crossSize] - overlaySize[crossSize]) / 2;\n  } else if (crossPlacement !== crossAxis) {\n    //  + (button size) - (overlay size)\n    // at this point the overlay bottom should match the button bottom\n    position[crossAxis] += (childOffset[crossSize] - overlaySize[crossSize]);\n  }/* else {\n    the overlay top should match the button top\n  } */\n  // add the crossOffset from props\n  position[crossAxis] += crossOffset;\n\n  // this is button center position - the overlay size + half of the button to align bottom of overlay with button center\n  let minViablePosition = childOffset[crossAxis] + (childOffset[crossSize] / 2) - overlaySize[crossSize];\n  // this is button position of center, aligns top of overlay with button center\n  let maxViablePosition = childOffset[crossAxis] + (childOffset[crossSize] / 2);\n\n  // clamp it into the range of the min/max positions\n  position[crossAxis] = Math.min(Math.max(minViablePosition, position[crossAxis]), maxViablePosition);\n\n  // Floor these so the position isn't placed on a partial pixel, only whole pixels. Shouldn't matter if it was floored or ceiled, so chose one.\n  if (placement === axis) {\n    // If the container is positioned (non-static), then we use the container's actual\n    // height, as `bottom` will be relative to this height.  But if the container is static,\n    // then it can only be the `document.body`, and `bottom` will be relative to _its_\n    // container, which should be as large as boundaryDimensions.\n    const containerHeight = (isContainerPositioned ? containerOffsetWithBoundary[size] : boundaryDimensions[size]);\n    position[FLIPPED_DIRECTION[axis]] = Math.floor(containerHeight - childOffset[axis] + offset);\n  } else {\n    position[axis] = Math.floor(childOffset[axis] + childOffset[size] + offset);\n  }\n\n  return position;\n}\n\nfunction getMaxHeight(\n  position: Position,\n  boundaryDimensions: Dimensions,\n  containerOffsetWithBoundary: Offset,\n  childOffset: Offset,\n  margins: Position,\n  padding: number\n) {\n  return position.top != null\n    // We want the distance between the top of the overlay to the bottom of the boundary\n    ? Math.max(0,\n      (boundaryDimensions.height + boundaryDimensions.top + boundaryDimensions.scroll.top) // this is the bottom of the boundary\n      - (containerOffsetWithBoundary.top + position.top) // this is the top of the overlay\n      - (margins.top + margins.bottom + padding) // save additional space for margin and padding\n    )\n    // We want the distance between the top of the trigger to the top of the boundary\n    : Math.max(0,\n      (childOffset.top + containerOffsetWithBoundary.top) // this is the top of the trigger\n      - (boundaryDimensions.top + boundaryDimensions.scroll.top) // this is the top of the boundary\n      - (margins.top + margins.bottom + padding) // save additional space for margin and padding\n    );\n}\n\nfunction getAvailableSpace(\n  boundaryDimensions: Dimensions,\n  containerOffsetWithBoundary: Offset,\n  childOffset: Offset,\n  margins: Position,\n  padding: number,\n  placementInfo: ParsedPlacement\n) {\n  let {placement, axis, size} = placementInfo;\n  if (placement === axis) {\n    return Math.max(0, childOffset[axis] - boundaryDimensions[axis] - boundaryDimensions.scroll[axis] + containerOffsetWithBoundary[axis] - margins[axis] - margins[FLIPPED_DIRECTION[axis]] - padding);\n  }\n\n  return Math.max(0, boundaryDimensions[size] + boundaryDimensions[axis] + boundaryDimensions.scroll[axis] - containerOffsetWithBoundary[axis] - childOffset[axis] - childOffset[size] - margins[axis] - margins[FLIPPED_DIRECTION[axis]] - padding);\n}\n\nexport function calculatePositionInternal(\n  placementInput: Placement,\n  childOffset: Offset,\n  overlaySize: Offset,\n  scrollSize: Offset,\n  margins: Position,\n  padding: number,\n  flip: boolean,\n  boundaryDimensions: Dimensions,\n  containerOffsetWithBoundary: Offset,\n  offset: number,\n  crossOffset: number,\n  isContainerPositioned: boolean,\n  shouldOverlapWithTrigger: boolean\n): PositionResult {\n  let placementInfo = parsePlacement(placementInput);\n  let {size, crossAxis, crossSize, placement, crossPlacement, axis} = placementInfo;\n  let position = computePosition(childOffset, boundaryDimensions, overlaySize, placementInfo, offset, crossOffset, containerOffsetWithBoundary, isContainerPositioned);\n  let normalizedOffset = offset;\n  let space = getAvailableSpace(\n    boundaryDimensions,\n    containerOffsetWithBoundary,\n    childOffset,\n    margins,\n    padding + offset,\n    placementInfo\n  );\n\n  // Check if the scroll size of the overlay is greater than the available space to determine if we need to flip\n  if (flip && scrollSize[size] > space) {\n    let flippedPlacementInfo = parsePlacement(`${FLIPPED_DIRECTION[placement]} ${crossPlacement}` as Placement);\n    let flippedPosition = computePosition(childOffset, boundaryDimensions, overlaySize, flippedPlacementInfo, offset, crossOffset, containerOffsetWithBoundary, isContainerPositioned);\n    let flippedSpace = getAvailableSpace(\n      boundaryDimensions,\n      containerOffsetWithBoundary,\n      childOffset,\n      margins,\n      padding + offset,\n      flippedPlacementInfo\n    );\n\n    // If the available space for the flipped position is greater than the original available space, flip.\n    if (flippedSpace > space) {\n      placementInfo = flippedPlacementInfo;\n      position = flippedPosition;\n      normalizedOffset = offset;\n    }\n  }\n\n  let delta = getDelta(crossAxis, position[crossAxis], overlaySize[crossSize], boundaryDimensions, padding);\n  position[crossAxis] += delta;\n\n  let maxHeight = getMaxHeight(\n    position,\n    boundaryDimensions,\n    containerOffsetWithBoundary,\n    childOffset,\n    margins,\n    padding\n  );\n\n  overlaySize.height = Math.min(overlaySize.height, maxHeight);\n\n  position = computePosition(childOffset, boundaryDimensions, overlaySize, placementInfo, normalizedOffset, crossOffset, containerOffsetWithBoundary, isContainerPositioned);\n  delta = getDelta(crossAxis, position[crossAxis], overlaySize[crossSize], boundaryDimensions, padding);\n  position[crossAxis] += delta;\n\n  let arrowPosition: Position = {};\n  arrowPosition[crossAxis] = (childOffset[crossAxis] - position[crossAxis] + childOffset[crossSize] / 2);\n\n  if (shouldOverlapWithTrigger) {\n    position[FLIPPED_DIRECTION[placementInfo.placement]] = position[FLIPPED_DIRECTION[placementInfo.placement]] - childOffset[size];\n  }\n\n  return {\n    position,\n    maxHeight: maxHeight,\n    arrowOffsetLeft: arrowPosition.left,\n    arrowOffsetTop: arrowPosition.top,\n    placement: placementInfo.placement\n  };\n}\n\n/**\n * Determines where to place the overlay with regards to the target and the position of an optional indicator.\n */\nexport function calculatePosition(opts: PositionOpts): PositionResult {\n  let {\n    placement,\n    targetNode,\n    overlayNode,\n    scrollNode,\n    padding,\n    shouldFlip,\n    boundaryElement,\n    offset,\n    crossOffset,\n    shouldOverlapWithTrigger\n  } = opts;\n\n  let container = overlayNode.offsetParent || document.body;\n  let isBodyContainer = container.tagName === 'BODY';\n  const containerPositionStyle = window.getComputedStyle(container).position;\n  let isContainerPositioned = !!containerPositionStyle && containerPositionStyle !== 'static';\n  let childOffset: Offset = isBodyContainer ? getOffset(targetNode) : getPosition(targetNode, container);\n\n  if (!isBodyContainer) {\n    childOffset.top += parseInt(getCss(targetNode, 'marginTop'), 10) || 0;\n    childOffset.left += parseInt(getCss(targetNode, 'marginLeft'), 10) || 0;\n  }\n\n  let overlaySize: Offset = getOffset(overlayNode);\n  let margins = getMargins(overlayNode);\n  overlaySize.width += margins.left + margins.right;\n  overlaySize.height += margins.top + margins.bottom;\n\n  let scrollSize = getScroll(scrollNode);\n  let boundaryDimensions = getContainerDimensions(boundaryElement);\n  let containerOffsetWithBoundary: Offset = boundaryElement.tagName === 'BODY' ? getOffset(container) : getPosition(container, boundaryElement);\n\n\n  return calculatePositionInternal(\n    placement,\n    childOffset,\n    overlaySize,\n    scrollSize,\n    margins,\n    padding,\n    shouldFlip,\n    boundaryDimensions,\n    containerOffsetWithBoundary,\n    offset,\n    crossOffset,\n    isContainerPositioned,\n    shouldOverlapWithTrigger\n  );\n}\n"]},"metadata":{},"sourceType":"module"}