{"version":3,"file":"ng-devui-position.mjs","sources":["../../devui/position/positioning.service.ts","../../devui/position/positioning.module.ts","../../devui/position/ng-devui-position.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { DocumentRef, WindowRef } from 'ng-devui/window-ref';\r\n\r\n@Injectable()\r\nexport class PositionService {\r\n  constructor(private documentRef: DocumentRef, private windowRef: WindowRef) {}\r\n\r\n  position(element: HTMLElement, round = true) {\r\n    let elPosition;\r\n    let parentOffset = { width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0 };\r\n\r\n    if (this.getStyle(element, 'position') === 'fixed') {\r\n      elPosition = element.getBoundingClientRect();\r\n    } else {\r\n      const offsetParentEl = this.offsetParent(element);\r\n\r\n      elPosition = this.offset(element, false);\r\n\r\n      if (offsetParentEl !== this.documentRef.documentElement) {\r\n        parentOffset = this.offset(offsetParentEl, false);\r\n      }\r\n\r\n      parentOffset.top += offsetParentEl.clientTop - offsetParentEl.scrollTop;\r\n      parentOffset.left += offsetParentEl.clientLeft - offsetParentEl.scrollLeft;\r\n    }\r\n\r\n    elPosition.top -= parentOffset.top;\r\n    elPosition.bottom -= parentOffset.top;\r\n    elPosition.left -= parentOffset.left;\r\n    elPosition.right -= parentOffset.left;\r\n\r\n    if (round) {\r\n      elPosition.top = Math.round(elPosition.top);\r\n      elPosition.bottom = Math.round(elPosition.bottom);\r\n      elPosition.left = Math.round(elPosition.left);\r\n      elPosition.right = Math.round(elPosition.right);\r\n    }\r\n\r\n    return elPosition;\r\n  }\r\n\r\n  offset(element: HTMLElement, round = true) {\r\n    const elBcr = element.getBoundingClientRect();\r\n    const viewportOffset = {\r\n      top: this.windowRef.pageYOffset - this.documentRef.documentElement.clientTop,\r\n      left: this.windowRef.pageXOffset - this.documentRef.documentElement.clientLeft,\r\n    };\r\n\r\n    const elOffset = {\r\n      height: elBcr.height || element.offsetHeight,\r\n      width: elBcr.width || element.offsetWidth,\r\n      top: elBcr.top + viewportOffset.top,\r\n      bottom: elBcr.bottom + viewportOffset.top,\r\n      left: elBcr.left + viewportOffset.left,\r\n      right: elBcr.right + viewportOffset.left,\r\n    };\r\n\r\n    if (round) {\r\n      elOffset.height = Math.round(elOffset.height);\r\n      elOffset.width = Math.round(elOffset.width);\r\n      elOffset.top = Math.round(elOffset.top);\r\n      elOffset.bottom = Math.round(elOffset.bottom);\r\n      elOffset.left = Math.round(elOffset.left);\r\n      elOffset.right = Math.round(elOffset.right);\r\n    }\r\n\r\n    return elOffset;\r\n  }\r\n\r\n  getScrollParent(element) {\r\n    let style = getComputedStyle(element);\r\n    const excludeStaticParent = style.position === 'absolute';\r\n    const overflowRegex = /(auto|scroll|overlay)/;\r\n\r\n    if (style.position === 'fixed') {\r\n      return this.documentRef.body;\r\n    }\r\n    for (let parent = element; (parent = parent.parentElement); parent.parentElement !== this.documentRef.body) {\r\n      style = getComputedStyle(parent);\r\n      if (excludeStaticParent && style.position === 'static') {\r\n        continue;\r\n      }\r\n      if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) {\r\n        return parent;\r\n      }\r\n    }\r\n\r\n    return this.documentRef.body;\r\n  }\r\n\r\n  positionElements(hostElement: HTMLElement, targetElement: HTMLElement, placement: string | string[], appendToBody?: boolean): any {\r\n    const hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false);\r\n    const shiftWidth: any = {\r\n      left: hostElPosition.left,\r\n      center: hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2,\r\n      right: hostElPosition.left + hostElPosition.width,\r\n    };\r\n    const shiftHeight: any = {\r\n      top: hostElPosition.top,\r\n      center: hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2,\r\n      bottom: hostElPosition.top + hostElPosition.height,\r\n    };\r\n    const targetElBCR = targetElement.getBoundingClientRect();\r\n\r\n    const targetElPosition: any = {\r\n      height: targetElBCR.height || targetElement.offsetHeight,\r\n      width: targetElBCR.width || targetElement.offsetWidth,\r\n      top: 0,\r\n      bottom: targetElBCR.height || targetElement.offsetHeight,\r\n      left: 0,\r\n      right: targetElBCR.width || targetElement.offsetWidth,\r\n    };\r\n\r\n    let placementPrimary: string;\r\n    let placementSecondary: string;\r\n\r\n    if (Array.isArray(placement)) {\r\n      const targetPlacement = this.getPlacement(hostElement, targetElement, placement);\r\n      placementPrimary = targetPlacement[0];\r\n      placementSecondary = targetPlacement[1];\r\n    } else {\r\n      placementPrimary = placement?.split('-')[0] || 'top';\r\n      placementSecondary = placement?.split('-')[1] || 'center';\r\n    }\r\n\r\n    switch (placementPrimary) {\r\n    case 'top':\r\n      targetElPosition.top = hostElPosition.top - targetElement.offsetHeight;\r\n      targetElPosition.bottom += hostElPosition.top - targetElement.offsetHeight;\r\n      targetElPosition.left =\r\n        placementSecondary === 'right' ? shiftWidth[placementSecondary] - targetElement.offsetWidth : shiftWidth[placementSecondary];\r\n      targetElPosition.right += shiftWidth[placementSecondary];\r\n      break;\r\n    case 'bottom':\r\n      targetElPosition.top = shiftHeight[placementPrimary];\r\n      targetElPosition.bottom += shiftHeight[placementPrimary];\r\n      targetElPosition.left =\r\n        placementSecondary === 'right' ? shiftWidth[placementSecondary] - targetElement.offsetWidth : shiftWidth[placementSecondary];\r\n      targetElPosition.right += shiftWidth[placementSecondary];\r\n      break;\r\n    case 'left':\r\n      targetElPosition.top =\r\n        placementSecondary === 'bottom' ? shiftHeight[placementSecondary] - targetElement.offsetHeight : shiftHeight[placementSecondary];\r\n      targetElPosition.bottom += shiftHeight[placementSecondary];\r\n      targetElPosition.left = hostElPosition.left - targetElement.offsetWidth;\r\n      targetElPosition.right += hostElPosition.left - targetElement.offsetWidth;\r\n      break;\r\n    case 'right':\r\n      targetElPosition.top =\r\n        placementSecondary === 'bottom' ? shiftHeight[placementSecondary] - targetElement.offsetHeight : shiftHeight[placementSecondary];\r\n      targetElPosition.bottom += shiftHeight[placementSecondary];\r\n      targetElPosition.left = shiftWidth[placementPrimary];\r\n      targetElPosition.right += shiftWidth[placementPrimary];\r\n      break;\r\n    default:\r\n    }\r\n\r\n    targetElPosition.top = Math.round(targetElPosition.top);\r\n    targetElPosition.bottom = Math.round(targetElPosition.bottom);\r\n    targetElPosition.left = Math.round(targetElPosition.left);\r\n    targetElPosition.right = Math.round(targetElPosition.right);\r\n    targetElPosition.placementPrimary = placementPrimary;\r\n    targetElPosition.placementSecondary = placementSecondary;\r\n\r\n    return targetElPosition;\r\n  }\r\n\r\n  // 根据传入数组选取第一个合适的位置\r\n  private getPlacement(hostElement: HTMLElement, targetElement: HTMLElement, placement: string[]) {\r\n    const hostElPosition = this.offset(hostElement, false);\r\n    const shiftWidth: any = {\r\n      left: hostElPosition.left,\r\n      center: hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2,\r\n      right: hostElPosition.left + hostElPosition.width,\r\n    };\r\n    const shiftHeight: any = {\r\n      top: hostElPosition.top,\r\n      center: hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2,\r\n      bottom: hostElPosition.top + hostElPosition.height,\r\n    };\r\n\r\n    let placementPrimary = placement[0].split('-')[0] || 'top';\r\n    let placementSecondary = placement[0].split('-')[1] || 'center';\r\n\r\n    for (let i = 0; i < placement.length; i++) {\r\n      const placementPrimaryTemp = placement[i].split('-')[0] || 'top';\r\n      const placementSecondaryTemp = placement[i].split('-')[1] || 'center';\r\n\r\n      let top;\r\n      let left;\r\n      switch (placementPrimaryTemp) {\r\n      case 'top':\r\n        top = hostElPosition.top - targetElement.offsetHeight;\r\n        left =\r\n          placementSecondaryTemp === 'right'\r\n            ? shiftWidth[placementSecondaryTemp] - targetElement.offsetWidth\r\n            : shiftWidth[placementSecondary];\r\n        break;\r\n      case 'bottom':\r\n        top = shiftHeight[placementPrimaryTemp];\r\n        left =\r\n          placementSecondaryTemp === 'right'\r\n            ? shiftWidth[placementSecondaryTemp] - targetElement.offsetWidth\r\n            : shiftWidth[placementSecondary];\r\n        break;\r\n      case 'left':\r\n        top =\r\n          placementSecondaryTemp === 'bottom'\r\n            ? shiftHeight[placementSecondaryTemp] - targetElement.offsetHeight\r\n            : shiftHeight[placementSecondary];\r\n        left = hostElPosition.left - targetElement.offsetWidth;\r\n        break;\r\n      case 'right':\r\n        top =\r\n          placementSecondaryTemp === 'bottom'\r\n            ? shiftHeight[placementSecondaryTemp] - targetElement.offsetHeight\r\n            : shiftHeight[placementSecondary];\r\n        left = shiftWidth[placementPrimaryTemp];\r\n        break;\r\n      default:\r\n      }\r\n      if (this.isInViewPort(targetElement, { offsetLeft: left, offsetTop: top })) {\r\n        placementPrimary = placement[i].split('-')[0] || 'top';\r\n        placementSecondary = placement[i].split('-')[1] || 'center';\r\n        return [placementPrimary, placementSecondary];\r\n      }\r\n    }\r\n    return [placementPrimary, placementSecondary];\r\n  }\r\n\r\n  private isInViewPort(ele, { offsetLeft, offsetTop }) {\r\n    const targetElBCR = ele.getBoundingClientRect();\r\n    const viewPortHeight =\r\n      this.windowRef.innerHeight || this.documentRef.documentElement.clientHeight || this.documentRef.body.clientHeight;\r\n    const viewPortWidth = this.windowRef.innerWidth || this.documentRef.documentElement.clientWidth || this.documentRef.body.clientWidth;\r\n    const height = targetElBCR.height || targetElBCR.offsetHeight;\r\n    const width = targetElBCR.width || targetElBCR.offsetWidth;\r\n    offsetTop = offsetTop || ele.offsetTop;\r\n    const scrollTop = this.documentRef.documentElement.scrollTop || this.documentRef.body.scrollTop;\r\n    const top = offsetTop - scrollTop;\r\n    offsetLeft = offsetLeft || ele.offsetLeft;\r\n    const scrollLeft = this.documentRef.documentElement.scrollLeft || this.documentRef.body.scrollLeft;\r\n    const left = offsetLeft - scrollLeft;\r\n\r\n    return top + height <= viewPortHeight && top > 0 && left + width <= viewPortWidth && left > 0;\r\n  }\r\n\r\n  private getStyle(element: HTMLElement, prop: string): string {\r\n    return this.windowRef.getComputedStyle(element)[prop];\r\n  }\r\n\r\n  private isStaticPositioned(element: HTMLElement): boolean {\r\n    return (this.getStyle(element, 'position') || 'static') === 'static';\r\n  }\r\n\r\n  private offsetParent(element: HTMLElement): HTMLElement {\r\n    let offsetParentEl = <HTMLElement>element.offsetParent || this.documentRef.documentElement;\r\n\r\n    while (offsetParentEl && offsetParentEl !== this.documentRef.documentElement && this.isStaticPositioned(offsetParentEl)) {\r\n      offsetParentEl = <HTMLElement>offsetParentEl.offsetParent;\r\n    }\r\n\r\n    return offsetParentEl || this.documentRef.documentElement;\r\n  }\r\n}\r\n","import {NgModule} from '@angular/core';\nimport {WindowRefModule} from 'ng-devui/window-ref';\nimport {PositionService} from './positioning.service';\n\n@NgModule({\n  imports: [WindowRefModule],\n  providers: [PositionService]\n})\n\nexport class PositioningModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}