{"version":3,"file":"utils.mjs","sources":["../../../../src/components/Overlay/utils.ts"],"sourcesContent":["import {\n  type ContainerRectAttr,\n  type OverlayPosition,\n  type TargetRectAttr,\n} from './Overlay.types'\n\nconst TOP_POSITION_OFFSET = 10\n\ninterface GetOverlayPositionArgs {\n  containerRect: ContainerRectAttr\n  targetRect: TargetRectAttr\n  show: boolean\n}\n\nexport function getOverlayPosition({\n  containerRect,\n  targetRect,\n  show,\n}: GetOverlayPositionArgs) {\n  const { containerTop, containerLeft, scrollTop, scrollLeft } = containerRect\n  const { targetTop, targetLeft, clientTop, clientLeft } = targetRect\n\n  const top = targetTop - clientTop - containerTop + scrollTop\n  const left = targetLeft - clientLeft - containerLeft + scrollLeft\n\n  return {\n    top: show ? top : top - TOP_POSITION_OFFSET,\n    left,\n  }\n}\n\ninterface GetOverlayTranslatationArgs {\n  containerRect: ContainerRectAttr\n  targetRect: TargetRectAttr | null\n  overlay: HTMLElement | null\n  position: OverlayPosition\n  marginX: number\n  marginY: number\n  keepInContainer: boolean\n}\n\nexport function getOverlayTranslation({\n  containerRect,\n  targetRect,\n  overlay,\n  position,\n  marginX,\n  marginY,\n  keepInContainer,\n}: GetOverlayTranslatationArgs) {\n  if (containerRect && targetRect && overlay) {\n    const { containerWidth, containerHeight, containerTop, containerLeft } =\n      containerRect\n    const { targetWidth, targetHeight, targetTop, targetLeft } = targetRect\n    const { width: overlayWidth, height: overlayHeight } =\n      overlay.getBoundingClientRect()\n\n    let translateX = 0\n    let translateY = 0\n\n    // pre position\n    switch (position) {\n      case 'top-center':\n      case 'top-left':\n      case 'top-right':\n        translateY -= overlayHeight + marginY\n        translateX += marginX\n        break\n      case 'right-center':\n      case 'right-top':\n      case 'right-bottom':\n        translateX += targetWidth + marginX\n        translateY += marginY\n        break\n      case 'bottom-center':\n      case 'bottom-left':\n      case 'bottom-right':\n        translateY += targetHeight + marginY\n        translateX += marginX\n        break\n      case 'left-center':\n      case 'left-top':\n      case 'left-bottom':\n        translateX -= overlayWidth + marginX\n        translateY += marginY\n        break\n    }\n\n    switch (position) {\n      // post position\n      case 'top-center':\n      case 'bottom-center':\n        translateX -= overlayWidth / 2 - targetWidth / 2\n        break\n      case 'top-right':\n      case 'bottom-right':\n        translateX -= overlayWidth - targetWidth\n        break\n      case 'right-center':\n      case 'left-center':\n        translateY -= overlayHeight / 2 - targetHeight / 2\n        break\n      case 'right-bottom':\n      case 'left-bottom':\n        translateY -= overlayHeight - targetHeight\n        break\n\n      // inner position\n      case 'inner-left-top':\n        translateX = marginX\n        translateY = marginY\n        break\n      case 'inner-left-bottom':\n        translateX = marginX\n        translateY = targetHeight - overlayHeight + marginY\n        break\n      case 'inner-right-top':\n        translateX = targetWidth - overlayWidth + marginX\n        translateY = marginY\n        break\n      case 'inner-right-bottom':\n        translateX = targetWidth - overlayWidth + marginX\n        translateY = targetHeight - overlayHeight + marginY\n        break\n    }\n\n    if (keepInContainer) {\n      const isOverTop = targetTop + translateY < containerTop\n      const isOverBottom =\n        targetTop + translateY + overlayHeight > containerTop + containerHeight\n      const isOverLeft = targetLeft + translateX < containerLeft\n      const isOverRight =\n        targetLeft + translateX + overlayWidth > containerLeft + containerWidth\n\n      const topSpace = targetTop - containerTop\n      const bottomSpace =\n        containerTop + containerHeight - (targetTop + targetHeight)\n      const leftSpace = targetLeft - containerLeft\n      const rightSpace =\n        containerLeft + containerWidth - (targetLeft + targetWidth)\n\n      if (isOverTop) {\n        translateY =\n          topSpace > bottomSpace\n            ? translateY\n            : targetHeight - translateY - overlayHeight\n      } else if (isOverBottom) {\n        translateY =\n          bottomSpace > topSpace\n            ? translateY\n            : targetHeight - translateY - overlayHeight\n      }\n      if (isOverLeft) {\n        translateX =\n          leftSpace > rightSpace\n            ? translateX\n            : targetWidth - translateX - overlayWidth\n      } else if (isOverRight) {\n        translateX =\n          rightSpace > leftSpace\n            ? translateX\n            : targetWidth - translateX - overlayWidth\n      }\n    }\n\n    return {\n      translateX: Math.round(translateX),\n      translateY: Math.round(translateY),\n    }\n  }\n  return {\n    translateX: 0,\n    translateY: 0,\n  }\n}\n\ninterface GetOverlayStyleArgs {\n  containerRect: ContainerRectAttr | null\n  targetRect: TargetRectAttr | null\n  overlay: HTMLElement | null\n  position: OverlayPosition\n  marginX: number\n  marginY: number\n  keepInContainer: boolean\n  show: boolean\n}\n\nexport function getOverlayStyle({\n  containerRect,\n  targetRect,\n  overlay,\n  position,\n  marginX,\n  marginY,\n  keepInContainer,\n  show,\n}: GetOverlayStyleArgs) {\n  if (containerRect && targetRect) {\n    const { top, left } = getOverlayPosition({\n      containerRect,\n      targetRect,\n      show,\n    })\n    const { translateX, translateY } = getOverlayTranslation({\n      containerRect,\n      targetRect,\n      overlay,\n      position,\n      marginX,\n      marginY,\n      keepInContainer,\n    })\n\n    return {\n      top: `${top}px`,\n      left: `${left}px`,\n      transform: `translateX(${translateX}px) translateY(${translateY}px)`,\n    }\n  }\n\n  return {}\n}\n"],"names":["TOP_POSITION_OFFSET","getOverlayPosition","containerRect","targetRect","show","containerTop","containerLeft","scrollTop","scrollLeft","targetTop","targetLeft","clientTop","clientLeft","top","left","getOverlayTranslation","overlay","position","marginX","marginY","keepInContainer","containerWidth","containerHeight","targetWidth","targetHeight","width","overlayWidth","height","overlayHeight","getBoundingClientRect","translateX","translateY","isOverTop","isOverBottom","isOverLeft","isOverRight","topSpace","bottomSpace","leftSpace","rightSpace","Math","round","getOverlayStyle","transform"],"mappings":"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"}