{"version":3,"file":"compute-position.mjs","sources":["../../../../../../packages/hooks/use-floating/core/compute-position.ts"],"sourcesContent":["import { computeCoordsFromPlacement } from './compute-coord-from-placement'\nimport type {\n  ComputePosition,\n  ComputePositionReturn,\n  Middleware,\n  MiddlewareData,\n} from './types'\n\nexport const computePosition: ComputePosition = async (\n  reference,\n  floating,\n  config\n): Promise<ComputePositionReturn> => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform,\n  } = config\n\n  const validMiddleware = middleware.filter(Boolean) as Middleware[]\n  const rtl = await platform.isRTL?.(floating)\n\n  let rects = await platform.getElementRects({ reference, floating, strategy })\n  let { x, y } = computeCoordsFromPlacement(rects, placement, rtl)\n  let statefulPlacement = placement\n  let middlewareData: MiddlewareData = {}\n  let resetCount = 0\n\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const { name, fn } = validMiddleware[i]\n\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset,\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: { reference, floating },\n    })\n\n    x = nextX ?? x\n    y = nextY ?? y\n\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data,\n      },\n    }\n\n    if (reset && resetCount <= 50) {\n      resetCount++\n\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement\n        }\n\n        if (reset.rects) {\n          rects =\n            reset.rects === true\n              ? await platform.getElementRects({\n                  reference,\n                  floating,\n                  strategy,\n                })\n              : reset.rects\n        }\n\n        ;({ x, y } = computeCoordsFromPlacement(rects, statefulPlacement, rtl))\n      }\n\n      i = -1\n    }\n  }\n\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData,\n  }\n}\n"],"names":[],"mappings":"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"}