{"version":3,"file":"position-engine.mjs","sources":["../../../../../packages/utils/private/position-engine.ts"],"sourcesContent":["import { getScrollbarWidth } from './scroll'\nimport { platform } from '../platform'\nimport { CSSProperties } from 'vue'\n\nlet vpLeft, vpTop\n\nexport function validatePosition(pos) {\n  const parts = pos.split(' ')\n  if (parts.length !== 2) {\n    return false\n  }\n  if (['top', 'center', 'bottom'].includes(parts[0]) !== true) {\n    console.error('Anchor/Self position must start with one of top/center/bottom')\n    return false\n  }\n  if (['left', 'middle', 'right', 'start', 'end'].includes(parts[1]) !== true) {\n    console.error('Anchor/Self position must end with one of left/middle/right/start/end')\n    return false\n  }\n  return true\n}\n\nexport function validateOffset(val) {\n  if (!val) {\n    return true\n  }\n  if (val.length !== 2) {\n    return false\n  }\n  if (typeof val[0] !== 'number' || typeof val[1] !== 'number') {\n    return false\n  }\n  return true\n}\n\nconst horizontalPos = {\n  'start#ltr': 'left',\n  'start#rtl': 'right',\n  'end#ltr': 'right',\n  'end#rtl': 'left'\n}\n;['left', 'middle', 'right'].forEach(pos => {\n  horizontalPos[`${pos}#ltr`] = pos\n  horizontalPos[`${pos}#rtl`] = pos\n})\n\nexport function parsePosition(pos, rtl) {\n  const parts = pos.split(' ')\n  return {\n    vertical: parts[0],\n    horizontal: horizontalPos[`${parts[1]}#${rtl === true ? 'rtl' : 'ltr'}`]\n  }\n}\n\nexport function validateCover(val) {\n  if (val === true || val === false) {\n    return true\n  }\n  return validatePosition(val)\n}\n\nexport function getAnchorProps(el, offset) {\n  let { top, left, right, bottom, width, height } = el.getBoundingClientRect()\n\n  if (offset !== void 0) {\n    top -= offset[1]\n    left -= offset[0]\n    bottom += offset[1]\n    right += offset[0]\n\n    width += offset[0]\n    height += offset[1]\n  }\n\n  return {\n    top,\n    left,\n    right,\n    bottom,\n    width,\n    height,\n    middle: left + (right - left) / 2,\n    center: top + (bottom - top) / 2\n  }\n}\n\nexport function getTargetProps(el) {\n  return {\n    top: 0,\n    center: el.offsetHeight / 2,\n    bottom: el.offsetHeight,\n    left: 0,\n    middle: el.offsetWidth / 2,\n    right: el.offsetWidth\n  }\n}\n\n// cfg: { el, anchorEl, anchorOrigin, selfOrigin, offset, absoluteOffset, cover, fit, maxHeight, maxWidth }\nexport function setPosition(cfg) {\n  if (platform().isIOS === true && window.visualViewport !== void 0) {\n    // uses the vc-position-engine CSS class\n\n    const el = document.body.style\n    const { offsetLeft: left, offsetTop: top } = window.visualViewport\n\n    if (left !== vpLeft) {\n      el.setProperty('--vc-pe-left', left + 'px')\n      vpLeft = left\n    }\n    if (top !== vpTop) {\n      el.setProperty('--vc-pe-top', top + 'px')\n      vpTop = top\n    }\n  }\n\n  let anchorProps: any = {}\n\n  // scroll position might change\n  // if max-height/-width changes, so we\n  // need to restore it after we calculate\n  // the new positioning\n  const { scrollLeft, scrollTop } = cfg.el\n\n  if (cfg.absoluteOffset === void 0) {\n    anchorProps = getAnchorProps(cfg.anchorEl, cfg.cover === true ? [0, 0] : cfg.offset)\n  } else {\n    const { top: anchorTop, left: anchorLeft } = cfg.anchorEl.getBoundingClientRect(),\n      top = anchorTop + cfg.absoluteOffset.top,\n      left = anchorLeft + cfg.absoluteOffset.left\n\n    anchorProps = { top, left, width: 1, height: 1, right: left + 1, center: top, middle: left, bottom: top + 1 }\n  }\n\n  let elStyle: CSSProperties = {\n    maxHeight: cfg.maxHeight,\n    maxWidth: cfg.maxWidth,\n    visibility: 'visible'\n  }\n\n  if (cfg.fit === true || cfg.cover === true) {\n    elStyle.minWidth = anchorProps.width + 'px'\n    if (cfg.cover === true) {\n      elStyle.minHeight = anchorProps.height + 'px'\n    }\n  }\n\n  Object.assign(cfg.el.style, elStyle)\n\n  const targetProps = getTargetProps(cfg.el),\n    props: any = {\n      top: anchorProps[cfg.anchorOrigin.vertical] - targetProps[cfg.selfOrigin.vertical],\n      left: anchorProps[cfg.anchorOrigin.horizontal] - targetProps[cfg.selfOrigin.horizontal]\n    }\n\n  applyBoundaries(props, anchorProps, targetProps, cfg.anchorOrigin, cfg.selfOrigin)\n\n  elStyle = {\n    top: props.top + 'px',\n    left: props.left + 'px'\n  }\n\n  if (props.maxHeight !== void 0) {\n    elStyle.maxHeight = props.maxHeight + 'px'\n\n    if (anchorProps.height > props.maxHeight) {\n      elStyle.minHeight = elStyle.maxHeight\n    }\n  }\n  if (props.maxWidth !== void 0) {\n    elStyle.maxWidth = props.maxWidth + 'px'\n\n    if (anchorProps.width > props.maxWidth) {\n      elStyle.minWidth = elStyle.maxWidth\n    }\n  }\n\n  Object.assign(cfg.el.style, elStyle)\n\n  // restore scroll position\n  if (cfg.el.scrollTop !== scrollTop) {\n    cfg.el.scrollTop = scrollTop\n  }\n  if (cfg.el.scrollLeft !== scrollLeft) {\n    cfg.el.scrollLeft = scrollLeft\n  }\n}\n\nfunction applyBoundaries(props, anchorProps, targetProps, anchorOrigin, selfOrigin) {\n  const currentHeight = targetProps.bottom,\n    currentWidth = targetProps.right,\n    margin = getScrollbarWidth(),\n    innerHeight = window.innerHeight - margin,\n    innerWidth = document.body.clientWidth\n\n  if (props.top < 0 || props.top + currentHeight > innerHeight) {\n    if (selfOrigin.vertical === 'center') {\n      props.top = anchorProps[anchorOrigin.vertical] > innerHeight / 2 ? Math.max(0, innerHeight - currentHeight) : 0\n      props.maxHeight = Math.min(currentHeight, innerHeight)\n    } else if (anchorProps[anchorOrigin.vertical] > innerHeight / 2) {\n      const anchorY = Math.min(\n        innerHeight,\n        anchorOrigin.vertical === 'center' ? anchorProps.center : anchorOrigin.vertical === selfOrigin.vertical ? anchorProps.bottom : anchorProps.top\n      )\n      props.maxHeight = Math.min(currentHeight, anchorY)\n      props.top = Math.max(0, anchorY - currentHeight)\n    } else {\n      props.top = Math.max(\n        0,\n        anchorOrigin.vertical === 'center' ? anchorProps.center : anchorOrigin.vertical === selfOrigin.vertical ? anchorProps.top : anchorProps.bottom\n      )\n      props.maxHeight = Math.min(currentHeight, innerHeight - props.top)\n    }\n  }\n\n  if (props.left < 0 || props.left + currentWidth > innerWidth) {\n    props.maxWidth = Math.min(currentWidth, innerWidth)\n    if (selfOrigin.horizontal === 'middle') {\n      props.left = anchorProps[anchorOrigin.horizontal] > innerWidth / 2 ? Math.max(0, innerWidth - currentWidth) : 0\n    } else if (anchorProps[anchorOrigin.horizontal] > innerWidth / 2) {\n      const anchorX = Math.min(\n        innerWidth,\n        anchorOrigin.horizontal === 'middle'\n          ? anchorProps.middle\n          : anchorOrigin.horizontal === selfOrigin.horizontal\n          ? anchorProps.right\n          : anchorProps.left\n      )\n      props.maxWidth = Math.min(currentWidth, anchorX)\n      props.left = Math.max(0, anchorX - props.maxWidth)\n    } else {\n      props.left = Math.max(\n        0,\n        anchorOrigin.horizontal === 'middle'\n          ? anchorProps.middle\n          : anchorOrigin.horizontal === selfOrigin.horizontal\n          ? anchorProps.left\n          : anchorProps.right\n      )\n      props.maxWidth = Math.min(currentWidth, innerWidth - props.left)\n    }\n  }\n}\n"],"names":[],"mappings":"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"}