{"version":3,"file":"utils.mjs","sources":["../../../../../../packages/components/trigger/src/utils.ts"],"sourcesContent":["import type { CSSProperties } from 'vue'\nimport { isArray } from '../../../utils/is'\nimport type { TriggerPosition, TriggerPopupTranslate } from './_trigger'\n\ninterface Size {\n  height: number\n  width: number\n}\n\nconst getDocumentSize = (): Size => {\n  const { body } = document\n  const html = document.documentElement\n  let topBody\n  try {\n    const topWindow = window.top || window.self || window\n    topBody = topWindow.document.body\n  } catch (e) {\n    //@eslint-disabled\n  }\n\n  const size = {\n    height: Math.max(\n      body.scrollHeight,\n      body.offsetHeight,\n      html.clientHeight,\n      html.scrollHeight,\n      html.offsetHeight,\n      topBody?.scrollHeight || 0,\n      topBody?.clientHeight || 0\n    ),\n    width: Math.max(\n      body.scrollWidth,\n      body.offsetWidth,\n      html.clientWidth,\n      html.scrollWidth,\n      html.offsetWidth,\n      topBody?.scrollWidth || 0,\n      topBody?.clientWidth || 0\n    )\n  }\n\n  return size\n}\n\nconst getViewPortSize = (): Size => {\n  const { height, width } = getDocumentSize()\n\n  return {\n    width: Math.min(width, window.innerWidth),\n    height: Math.min(height, window.innerHeight)\n  }\n}\n\nexport interface ElementRect {\n  top: number\n  bottom: number\n  left: number\n  right: number\n  width: number\n  height: number\n}\n\ninterface ScrollRect {\n  top: number\n  bottom: number\n  left: number\n  right: number\n  scrollTop: number\n  scrollBottom: number\n  scrollLeft: number\n  scrollRight: number\n  width: number\n  height: number\n}\n\nexport const getElementScrollRect = (element: HTMLElement, containerRect: DOMRect) => {\n  const rect = element.getBoundingClientRect()\n\n  return {\n    top: rect.top,\n    bottom: rect.bottom,\n    left: rect.left,\n    right: rect.right,\n    scrollTop: rect.top - containerRect.top,\n    scrollBottom: rect.bottom - containerRect.top,\n    scrollLeft: rect.left - containerRect.left,\n    scrollRight: rect.right - containerRect.left,\n    width: element.offsetWidth ?? element.clientWidth,\n    height: element.offsetHeight ?? element.clientHeight\n  }\n}\n\ntype BasePosition = 'top' | 'left' | 'bottom' | 'right'\n\ninterface PositionOffset {\n  left: number\n  top: number\n}\n\nconst getBoundaryPosition = (position: TriggerPosition): BasePosition => {\n  switch (position) {\n    case 'top':\n    case 'tl':\n    case 'tr':\n      return 'top'\n    case 'bottom':\n    case 'bl':\n    case 'br':\n      return 'bottom'\n    case 'left':\n    case 'lt':\n    case 'lb':\n      return 'left'\n    case 'right':\n    case 'rt':\n    case 'rb':\n      return 'right'\n    default:\n      return 'top'\n  }\n}\n\nconst changePosition = (position: TriggerPosition, direction: BasePosition): TriggerPosition => {\n  switch (direction) {\n    case 'top':\n      switch (position) {\n        case 'bottom':\n          return 'top'\n        case 'bl':\n          return 'tl'\n        case 'br':\n          return 'tr'\n        default:\n          return position\n      }\n    case 'bottom':\n      switch (position) {\n        case 'top':\n          return 'bottom'\n        case 'tl':\n          return 'bl'\n        case 'tr':\n          return 'br'\n        default:\n          return position\n      }\n    case 'left':\n      switch (position) {\n        case 'right':\n          return 'left'\n        case 'rt':\n          return 'lt'\n        case 'rb':\n          return 'lb'\n        default:\n          return position\n      }\n    case 'right':\n      switch (position) {\n        case 'left':\n          return 'right'\n        case 'lt':\n          return 'rt'\n        case 'lb':\n          return 'rb'\n        default:\n          return position\n      }\n    default:\n      return position\n  }\n}\n\nconst getFitPosition = (\n  position: TriggerPosition,\n  popupPosition: PositionOffset,\n  {\n    containerRect,\n    triggerRect,\n    popupRect,\n    offset,\n    translate\n  }: {\n    containerRect: DOMRect\n    triggerRect: ScrollRect\n    popupRect: ScrollRect\n    offset: number\n    translate: TriggerPopupTranslate\n  }\n) => {\n  const direction = getBoundaryPosition(position)\n  const viewPortSize = getViewPortSize()\n\n  // Boundary value of pop-up box and window\n  const viewPortBoundary = {\n    top: containerRect.top + popupPosition.top,\n    // prettier-ignore\n    bottom: viewPortSize.height - (containerRect.top + popupPosition.top + popupRect.height),\n    left: containerRect.left + popupPosition.left,\n    // prettier-ignore\n    right: viewPortSize.width - (containerRect.left + popupPosition.left + popupRect.width)\n  }\n\n  let finalPosition = position\n  if (direction === 'top' && viewPortBoundary.top < 0) {\n    if (triggerRect.top > popupRect.height) {\n      // Adjust the pop-up box to snap to the top of the window\n      popupPosition.top = -containerRect.top\n    } else {\n      const fitPosition = getPopupOffset('bottom', triggerRect, popupRect, {\n        offset,\n        translate\n      })\n\n      // prettier-ignore\n      if (viewPortSize.height - (containerRect.top + fitPosition.top + popupRect.height) > 0) {\n        finalPosition = changePosition(position, 'bottom');\n        popupPosition.top = fitPosition.top;\n      }\n    }\n  }\n  if (direction === 'bottom' && viewPortBoundary.bottom < 0) {\n    if (viewPortSize.height - triggerRect.bottom > popupRect.height) {\n      // Adjust the pop-up box to snap to the bottom of the window\n      // prettier-ignore\n      popupPosition.top = -containerRect.top + (viewPortSize.height - popupRect.height);\n    } else {\n      const fitPosition = getPopupOffset('top', triggerRect, popupRect, {\n        offset,\n        translate\n      })\n      if (containerRect.top + fitPosition.top > 0) {\n        finalPosition = changePosition(position, 'top')\n        popupPosition.top = fitPosition.top\n      }\n    }\n  }\n  if (direction === 'left' && viewPortBoundary.left < 0) {\n    if (triggerRect.left > popupRect.width) {\n      // Adjust the pop-up box to snap to the left side of the window\n      popupPosition.left = -containerRect.left\n    } else {\n      const fitPosition = getPopupOffset('right', triggerRect, popupRect, {\n        offset,\n        translate\n      })\n      // prettier-ignore\n      if (viewPortSize.width - (containerRect.left + fitPosition.left + popupRect.width) > 0) {\n        finalPosition = changePosition(position, 'right');\n        popupPosition.left = fitPosition.left;\n      }\n    }\n  }\n  if (direction === 'right' && viewPortBoundary.right < 0) {\n    if (viewPortSize.width - triggerRect.right > popupRect.width) {\n      // Adjust the pop-up box to snap to the right side of the window\n      // prettier-ignore\n      popupPosition.left = -containerRect.left + (viewPortSize.width - popupRect.width);\n    } else {\n      const fitPosition = getPopupOffset('left', triggerRect, popupRect, {\n        offset,\n        translate\n      })\n      if (containerRect.left + fitPosition.left > 0) {\n        finalPosition = changePosition(position, 'left')\n        popupPosition.left = fitPosition.left\n      }\n    }\n  }\n\n  if (direction === 'top' || direction === 'bottom') {\n    if (viewPortBoundary.left < 0) {\n      popupPosition.left = -containerRect.left\n    } else if (viewPortBoundary.right < 0) {\n      // prettier-ignore\n      popupPosition.left = -containerRect.left + (viewPortSize.width - popupRect.width);\n    }\n  }\n  if (direction === 'left' || direction === 'right') {\n    if (viewPortBoundary.top < 0) {\n      popupPosition.top = -containerRect.top\n    } else if (viewPortBoundary.bottom < 0) {\n      // prettier-ignore\n      popupPosition.top = -containerRect.top + (viewPortSize.height - popupRect.height);\n    }\n  }\n  return {\n    popupPosition,\n    position: finalPosition\n  }\n}\n\nconst getPopupOffset = (\n  position: TriggerPosition,\n  triggerRect: ScrollRect,\n  popupRect: ScrollRect,\n  {\n    offset = 0,\n    translate = [0, 0]\n  }: {\n    offset?: number\n    translate?: TriggerPopupTranslate\n  } = {}\n): PositionOffset => {\n  // prettier-ignore\n  const _translate = (isArray(translate) ? translate : translate[position]) ?? [0, 0];\n\n  switch (position) {\n    case 'top':\n      return {\n        left:\n          triggerRect.scrollLeft +\n          Math.round(triggerRect.width / 2) -\n          Math.round(popupRect.width / 2) +\n          _translate[0],\n        top: triggerRect.scrollTop - popupRect.height - offset + _translate[1]\n      }\n    case 'tl':\n      return {\n        left: triggerRect.scrollLeft + _translate[0],\n        top: triggerRect.scrollTop - popupRect.height - offset + _translate[1]\n      }\n    case 'tr':\n      return {\n        left: triggerRect.scrollRight - popupRect.width + _translate[0],\n        top: triggerRect.scrollTop - popupRect.height - offset + _translate[1]\n      }\n    case 'bottom':\n      return {\n        left:\n          triggerRect.scrollLeft +\n          Math.round(triggerRect.width / 2) -\n          Math.round(popupRect.width / 2) +\n          _translate[0],\n        top: triggerRect.scrollBottom + offset + _translate[1]\n      }\n    case 'bl':\n      return {\n        left: triggerRect.scrollLeft + _translate[0],\n        top: triggerRect.scrollBottom + offset + _translate[1]\n      }\n    case 'br':\n      return {\n        left: triggerRect.scrollRight - popupRect.width + _translate[0],\n        top: triggerRect.scrollBottom + offset + _translate[1]\n      }\n    case 'left':\n      return {\n        left: triggerRect.scrollLeft - popupRect.width - offset + _translate[0],\n        top:\n          triggerRect.scrollTop +\n          Math.round(triggerRect.height / 2) -\n          Math.round(popupRect.height / 2) +\n          _translate[1]\n      }\n    case 'lt':\n      return {\n        left: triggerRect.scrollLeft - popupRect.width - offset + _translate[0],\n        top: triggerRect.scrollTop + _translate[1]\n      }\n    case 'lb':\n      return {\n        left: triggerRect.scrollLeft - popupRect.width - offset + _translate[0],\n        top: triggerRect.scrollBottom - popupRect.height + _translate[1]\n      }\n    case 'right':\n      return {\n        left: triggerRect.scrollRight + offset + _translate[0],\n        top:\n          triggerRect.scrollTop +\n          Math.round(triggerRect.height / 2) -\n          Math.round(popupRect.height / 2) +\n          _translate[1]\n      }\n    case 'rt':\n      return {\n        left: triggerRect.scrollRight + offset + _translate[0],\n        top: triggerRect.scrollTop + _translate[1]\n      }\n    case 'rb':\n      return {\n        left: triggerRect.scrollRight + offset + _translate[0],\n        top: triggerRect.scrollBottom - popupRect.height + _translate[1]\n      }\n    default:\n      return {\n        left: 0,\n        top: 0\n      }\n  }\n}\n\nexport const getTransformOrigin = (position: TriggerPosition) => {\n  let originX = '0'\n  if (['top', 'bottom'].includes(position)) {\n    originX = '50%'\n  } else if (['left', 'lt', 'lb', 'tr', 'br'].includes(position)) {\n    originX = '100%'\n  }\n  let originY = '0'\n  if (['left', 'right'].includes(position)) {\n    originY = '50%'\n  } else if (['top', 'tl', 'tr', 'lt', 'rt'].includes(position)) {\n    originY = '100%'\n  }\n  return `${originX} ${originY}`\n}\n\nexport const getPopupStyle = (\n  position: TriggerPosition,\n  containerRect: DOMRect,\n  triggerRect: ScrollRect,\n  popupRect: ScrollRect,\n  {\n    offset = 0,\n    translate = [0, 0],\n    customStyle = {},\n    autoFitPosition = false\n  }: {\n    offset?: number\n    translate?: TriggerPopupTranslate\n    customStyle?: CSSProperties\n    autoFitPosition?: boolean\n  } = {}\n): { style: CSSProperties; position: TriggerPosition } => {\n  let finalPosition = position\n  let popupPosition = getPopupOffset(position, triggerRect, popupRect, {\n    offset,\n    translate\n  })\n  if (autoFitPosition) {\n    const result = getFitPosition(position, popupPosition, {\n      containerRect,\n      popupRect,\n      triggerRect,\n      offset,\n      translate\n    })\n    popupPosition = result.popupPosition\n    finalPosition = result.position\n  }\n\n  const style = {\n    left: `${popupPosition.left}px`,\n    top: `${popupPosition.top}px`,\n    ...customStyle\n  }\n\n  return {\n    style,\n    position: finalPosition\n  }\n}\n\nexport const getArrowStyle = (\n  position: TriggerPosition,\n  triggerRect: ScrollRect,\n  popupRect: ScrollRect,\n  {\n    customStyle = {}\n  }: {\n    customStyle?: CSSProperties\n  }\n): CSSProperties => {\n  if (['top', 'tl', 'tr', 'bottom', 'bl', 'br'].includes(position)) {\n    let offsetLeft = Math.abs(triggerRect.scrollLeft + triggerRect.width / 2 - popupRect.scrollLeft)\n\n    if (offsetLeft > popupRect.width - 8) {\n      if (triggerRect.width > popupRect.width) {\n        offsetLeft = popupRect.width / 2\n      } else {\n        offsetLeft = popupRect.width - 8\n      }\n    }\n    if (['top', 'tl', 'tr'].includes(position)) {\n      return {\n        left: `${offsetLeft}px`,\n        bottom: '0',\n        transform: 'translate(-50%,100%)',\n        'border-color':\n          'var(--bn-trigger-arrow-background-color) transparent transparent transparent',\n        ...customStyle\n      }\n    }\n    // bottom bl br\n    return {\n      left: `${offsetLeft}px`,\n      top: '0',\n      transform: 'translate(-50%,-100%)',\n      'border-color':\n        'transparent transparent var(--bn-trigger-arrow-background-color) transparent',\n      ...customStyle\n    }\n  }\n  let offsetTop = Math.abs(triggerRect.scrollTop + triggerRect.height / 2 - popupRect.scrollTop)\n\n  if (offsetTop > popupRect.height - 8) {\n    if (triggerRect.height > popupRect.height) {\n      offsetTop = popupRect.height / 2\n    } else {\n      offsetTop = popupRect.height - 8\n    }\n  }\n\n  if (['left', 'lt', 'lb'].includes(position)) {\n    return {\n      top: `${offsetTop}px`,\n      right: '0',\n      transform: 'translate(100%,-50%)',\n      'border-color':\n        'transparent transparent transparent var(--bn-trigger-arrow-background-color)',\n      ...customStyle\n    }\n  }\n  // right rl rb\n  return {\n    top: `${offsetTop}px`,\n    left: '0',\n    transform: 'translate(-100%,-50%)',\n    'border-color': 'transparent var(--bn-trigger-arrow-background-color) transparent transparent',\n    ...customStyle\n  }\n}\n\nexport const isScrollElement = (element: HTMLElement) => {\n  return element.scrollHeight > element.offsetHeight || element.scrollWidth > element.offsetWidth\n}\n\nexport const getScrollElements = (container: HTMLElement | undefined) => {\n  const scrollElements: HTMLElement[] = []\n  let element: HTMLElement | undefined = container\n  while (element && element !== document.documentElement) {\n    if (isScrollElement(element)) {\n      scrollElements.push(element)\n    }\n    element = element.parentElement ?? undefined\n  }\n  return scrollElements\n}\n"],"names":[],"mappings":"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"}