{"version":3,"file":"arrow.mjs","sources":["../../../../../../../packages/hooks/use-floating/core/middleware/arrow.ts"],"sourcesContent":["import { unrefElement } from '@vueuse/core'\nimport {\n  clamp,\n  evaluate,\n  getAlignment,\n  getAlignmentAxis,\n  getAxisLength,\n  getPaddingObject,\n  min as mathMin,\n} from '@vuesax-alpha/hooks/use-floating/utils'\nimport type { Padding } from '@vuesax-alpha/hooks/use-floating/utils'\nimport type { Derivable, Middleware } from '../types'\n\nexport interface ArrowOptions {\n  /**\n   * @default undefined\n   */\n  element: any\n\n  /**\n   * @default 0\n   */\n  padding?: Padding\n}\n\nexport const arrow = (\n  options: ArrowOptions | Derivable<ArrowOptions>\n): Middleware => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const { x, y, placement, rects, platform, elements, middlewareData } = state\n\n    const { element, padding = 0 } = evaluate(options, state) || {}\n\n    const htmlElement = unrefElement(element)\n\n    if (htmlElement == null) {\n      return {}\n    }\n\n    const paddingObject = getPaddingObject(padding)\n    const coords = { x, y }\n    const axis = getAlignmentAxis(placement)\n    const length = getAxisLength(axis)\n    const arrowDimensions = await platform.getDimensions(htmlElement)\n    const isYAxis = axis === 'y'\n    const minProp = isYAxis ? 'top' : 'left'\n    const maxProp = isYAxis ? 'bottom' : 'right'\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth'\n\n    const endDiff =\n      rects.reference[length] +\n      rects.reference[axis] -\n      coords[axis] -\n      rects.floating[length]\n    const startDiff = coords[axis] - rects.reference[axis]\n\n    const arrowOffsetParent = await platform.getOffsetParent?.(htmlElement)\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0\n\n    if (!clientSize || !(await platform.isElement?.(arrowOffsetParent))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length]\n    }\n\n    const centerToReference = endDiff / 2 - startDiff / 2\n\n    const largestPossiblePadding =\n      clientSize / 2 - arrowDimensions[length] / 2 - 1\n    const minPadding = mathMin(paddingObject[minProp], largestPossiblePadding)\n    const maxPadding = mathMin(paddingObject[maxProp], largestPossiblePadding)\n\n    const min = minPadding\n    const max = clientSize - arrowDimensions[length] - maxPadding\n    const center =\n      clientSize / 2 - arrowDimensions[length] / 2 + centerToReference\n    const offset = clamp(min, center, max)\n\n    const shouldAddOffset =\n      !middlewareData.arrow &&\n      getAlignment(placement) != null &&\n      center !== offset &&\n      rects.reference[length] / 2 -\n        (center < min ? minPadding : maxPadding) -\n        arrowDimensions[length] / 2 <\n        0\n    const alignmentOffset = shouldAddOffset\n      ? center < min\n        ? center - min\n        : center - max\n      : 0\n\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && { alignmentOffset }),\n      },\n      reset: shouldAddOffset,\n    }\n  },\n})\n"],"names":["mathMin","min"],"mappings":";;;AAyBa,MAAA,KAAA,GAAQ,CACnB,OACgB,MAAA;AAAA,EAChB,IAAM,EAAA,OAAA;AAAA,EACN,OAAA;AAAA,EACA,MAAM,GAAG,KAAO,EAAA;AA9BlB,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA+BI,IAAM,MAAA,EAAE,GAAG,CAAG,EAAA,SAAA,EAAW,OAAO,QAAU,EAAA,QAAA,EAAU,gBAAmB,GAAA,KAAA,CAAA;AAEvE,IAAM,MAAA,EAAE,SAAS,OAAU,GAAA,CAAA,KAAM,QAAS,CAAA,OAAA,EAAS,KAAK,CAAA,IAAK,EAAC,CAAA;AAE9D,IAAM,MAAA,WAAA,GAAc,aAAa,OAAO,CAAA,CAAA;AAExC,IAAA,IAAI,eAAe,IAAM,EAAA;AACvB,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AAEA,IAAM,MAAA,aAAA,GAAgB,iBAAiB,OAAO,CAAA,CAAA;AAC9C,IAAM,MAAA,MAAA,GAAS,EAAE,CAAA,EAAG,CAAE,EAAA,CAAA;AACtB,IAAM,MAAA,IAAA,GAAO,iBAAiB,SAAS,CAAA,CAAA;AACvC,IAAM,MAAA,MAAA,GAAS,cAAc,IAAI,CAAA,CAAA;AACjC,IAAA,MAAM,eAAkB,GAAA,MAAM,QAAS,CAAA,aAAA,CAAc,WAAW,CAAA,CAAA;AAChE,IAAA,MAAM,UAAU,IAAS,KAAA,GAAA,CAAA;AACzB,IAAM,MAAA,OAAA,GAAU,UAAU,KAAQ,GAAA,MAAA,CAAA;AAClC,IAAM,MAAA,OAAA,GAAU,UAAU,QAAW,GAAA,OAAA,CAAA;AACrC,IAAM,MAAA,UAAA,GAAa,UAAU,cAAiB,GAAA,aAAA,CAAA;AAE9C,IAAM,MAAA,OAAA,GACJ,KAAM,CAAA,SAAA,CAAU,MAChB,CAAA,GAAA,KAAA,CAAM,UAAU,IAChB,CAAA,GAAA,MAAA,CAAO,IACP,CAAA,GAAA,KAAA,CAAM,QAAS,CAAA,MAAA,CAAA,CAAA;AACjB,IAAA,MAAM,SAAY,GAAA,MAAA,CAAO,IAAQ,CAAA,GAAA,KAAA,CAAM,SAAU,CAAA,IAAA,CAAA,CAAA;AAEjD,IAAA,MAAM,iBAAoB,GAAA,OAAA,CAAM,EAAS,GAAA,QAAA,CAAA,eAAA,KAAT,IAA2B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,QAAA,EAAA,WAAA,CAAA,CAAA,CAAA;AAC3D,IAAI,IAAA,UAAA,GAAa,iBAAoB,GAAA,iBAAA,CAAkB,UAAc,CAAA,GAAA,CAAA,CAAA;AAErE,IAAA,IAAI,CAAC,UAAc,IAAA,CAAE,QAAM,EAAS,GAAA,QAAA,CAAA,SAAA,KAAT,kCAAqB,iBAAqB,CAAA,CAAA,EAAA;AACnE,MAAA,UAAA,GAAa,QAAS,CAAA,QAAA,CAAS,UAAe,CAAA,IAAA,KAAA,CAAM,QAAS,CAAA,MAAA,CAAA,CAAA;AAAA,KAC/D;AAEA,IAAM,MAAA,iBAAA,GAAoB,OAAU,GAAA,CAAA,GAAI,SAAY,GAAA,CAAA,CAAA;AAEpD,IAAA,MAAM,sBACJ,GAAA,UAAA,GAAa,CAAI,GAAA,eAAA,CAAgB,UAAU,CAAI,GAAA,CAAA,CAAA;AACjD,IAAA,MAAM,UAAa,GAAAA,GAAA,CAAQ,aAAc,CAAA,OAAA,CAAA,EAAU,sBAAsB,CAAA,CAAA;AACzE,IAAA,MAAM,UAAa,GAAAA,GAAA,CAAQ,aAAc,CAAA,OAAA,CAAA,EAAU,sBAAsB,CAAA,CAAA;AAEzE,IAAA,MAAMC,KAAM,GAAA,UAAA,CAAA;AACZ,IAAM,MAAA,GAAA,GAAM,UAAa,GAAA,eAAA,CAAgB,MAAU,CAAA,GAAA,UAAA,CAAA;AACnD,IAAA,MAAM,MACJ,GAAA,UAAA,GAAa,CAAI,GAAA,eAAA,CAAgB,UAAU,CAAI,GAAA,iBAAA,CAAA;AACjD,IAAA,MAAM,MAAS,GAAA,KAAA,CAAMA,KAAK,EAAA,MAAA,EAAQ,GAAG,CAAA,CAAA;AAErC,IAAM,MAAA,eAAA,GACJ,CAAC,cAAe,CAAA,KAAA,IAChB,aAAa,SAAS,CAAA,IAAK,QAC3B,MAAW,KAAA,MAAA,IACX,MAAM,SAAU,CAAA,MAAA,CAAA,GAAU,KACvB,MAAS,GAAAA,KAAA,GAAM,aAAa,UAC7B,CAAA,GAAA,eAAA,CAAgB,UAAU,CAC1B,GAAA,CAAA,CAAA;AACJ,IAAA,MAAM,kBAAkB,eACpB,GAAA,MAAA,GAASA,QACP,MAAS,GAAAA,KAAA,GACT,SAAS,GACX,GAAA,CAAA,CAAA;AAEJ,IAAO,OAAA;AAAA,MACL,CAAC,IAAO,GAAA,MAAA,CAAO,IAAQ,CAAA,GAAA,eAAA;AAAA,MACvB,IAAM,EAAA;AAAA,QACJ,CAAC,IAAO,GAAA,MAAA;AAAA,QACR,YAAA,EAAc,SAAS,MAAS,GAAA,eAAA;AAAA,QAChC,GAAI,eAAmB,IAAA,EAAE,eAAgB,EAAA;AAAA,OAC3C;AAAA,MACA,KAAO,EAAA,eAAA;AAAA,KACT,CAAA;AAAA,GACF;AACF,CAAA;;;;"}