{"version":3,"file":"getPosition.mjs","sources":["../../../../src/_common/js/utils/getPosition.ts"],"sourcesContent":["type Placement = 'top' | 'bottom' | 'left' | 'right' | 'mouse';\n\nconst getPosition = (\n  targetEle: HTMLElement,\n  contentEle: HTMLElement,\n  placement: Partial<Placement>,\n  clientX?: Number,\n): { left: number; top: number } => {\n  const targetRect = targetEle.getBoundingClientRect() as DOMRect;\n  const contentRect = contentEle.getBoundingClientRect() as DOMRect;\n\n  const position = {\n    top: document.documentElement.scrollTop,\n    left: document.documentElement.scrollLeft,\n  };\n\n  if (targetRect && contentRect) {\n    const dWidth = targetRect.width - contentRect.width;\n    // eslint-disable-next-line default-case\n    switch (placement) {\n      case 'top':\n        position.left += targetRect.left + dWidth / 2;\n        position.top += targetRect.top - contentRect.height - 16;\n        break;\n      case 'bottom':\n        position.left += targetRect.left + dWidth / 2;\n        position.top += targetRect.top + targetRect.height;\n        break;\n      case 'mouse':\n        position.left += Number(clientX);\n        position.top += targetRect.top + targetRect.height + 8;\n        break;\n      // 后续有需要可以再扩展\n    }\n\n    if (placement === 'mouse') {\n      const edges = {\n        top: document.documentElement.scrollTop,\n        left: document.documentElement.scrollLeft,\n        right: document.documentElement.scrollLeft + document.documentElement.clientWidth,\n        bottom: document.documentElement.scrollTop + document.documentElement.clientHeight,\n      };\n\n      // 底部溢出时，定位到元素上方\n      if (position.top > edges.bottom - contentRect.height) {\n        position.top = document.documentElement.scrollTop + targetRect.top - contentRect.height - 8;\n      }\n\n      // 右侧溢出时，确保元素能完全展示\n      if (position.left > edges.right - contentRect.width) {\n        position.left = edges.right - contentRect.width;\n      }\n    }\n  }\n\n  return position;\n};\n\nexport default getPosition;\n"],"names":["top","left","position"],"mappings":";;;;;;AAEA,sCAAA,IAAA,WAAA,GAAA,SAAA,WAAA,CAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA;AAMQ,EAAA,IAAA,UAAA,GAAA,SAAA,CAAA,qBAAA,EAAA,CAAA;AACA,EAAA,IAAA,WAAA,GAAA,UAAA,CAAA,qBAAA,EAAA,CAAA;AAEN,EAAA,IAAA,QAAA,GAAA;AACEA,IAAAA,GAAAA,EAAAA,QAAAA,CAAAA,eAAAA,CAAAA,SAAAA;AACAC,IAAAA,IAAAA,EAAAA,QAAAA,CAAAA,eAAAA,CAAAA,UAAAA;;;;AAMQ,IAAA,QAAA,SAAA;AACD,MAAA,KAAA,KAAA;;;AAGH,QAAA,MAAA;AACG,MAAA,KAAA,QAAA;;;AAGH,QAAA,MAAA;AACG,MAAA,KAAA,OAAA;AACMC,QAAAA,QAAAA,CAAAA,IAAAA,IAAAA,MAAAA,CAAAA,OAAAA,CAAAA,CAAAA;;AAET,QAAA,MAAA;AAAA,KAAA;;AAKF,MAAA,IAAA,KAAA,GAAA;AACEF,QAAAA,GAAAA,EAAAA,QAAAA,CAAAA,eAAAA,CAAAA,SAAAA;AACAC,QAAAA,IAAAA,EAAAA,QAAAA,CAAAA,eAAAA,CAAAA,UAAAA;;;;;AAOAC,QAAAA,QAAAA,CAAAA,GAAAA,GAAAA,QAAAA,CAAAA,eAAAA,CAAAA,SAAAA,GAAAA,UAAAA,CAAAA,GAAAA,GAAAA,WAAAA,CAAAA,MAAAA,GAAAA,CAAAA,CAAAA;AACF,OAAA;;;AAKA,OAAA;AACF,KAAA;AACF,GAAA;AAEO,EAAA,OAAA,QAAA,CAAA;AACT;;;;"}