{
  "version": 3,
  "sources": ["../../src/popover/utils.ts"],
  "sourcesContent": ["/**\n * External dependencies\n */\nimport { cubicBezier } from 'framer-motion';\n/**\n * Internal dependencies\n */\nimport { DROPDOWN_MOTION } from '../utils';\nconst POSITION_TO_PLACEMENT = {\n  bottom: 'bottom',\n  top: 'top',\n  'middle left': 'left',\n  'middle right': 'right',\n  'bottom left': 'bottom-end',\n  'bottom center': 'bottom',\n  'bottom right': 'bottom-start',\n  'top left': 'top-end',\n  'top center': 'top',\n  'top right': 'top-start',\n  'middle left left': 'left',\n  'middle left right': 'left',\n  'middle left bottom': 'left-end',\n  'middle left top': 'left-start',\n  'middle right left': 'right',\n  'middle right right': 'right',\n  'middle right bottom': 'right-end',\n  'middle right top': 'right-start',\n  'bottom left left': 'bottom-end',\n  'bottom left right': 'bottom-end',\n  'bottom left bottom': 'bottom-end',\n  'bottom left top': 'bottom-end',\n  'bottom center left': 'bottom',\n  'bottom center right': 'bottom',\n  'bottom center bottom': 'bottom',\n  'bottom center top': 'bottom',\n  'bottom right left': 'bottom-start',\n  'bottom right right': 'bottom-start',\n  'bottom right bottom': 'bottom-start',\n  'bottom right top': 'bottom-start',\n  'top left left': 'top-end',\n  'top left right': 'top-end',\n  'top left bottom': 'top-end',\n  'top left top': 'top-end',\n  'top center left': 'top',\n  'top center right': 'top',\n  'top center bottom': 'top',\n  'top center top': 'top',\n  'top right left': 'top-start',\n  'top right right': 'top-start',\n  'top right bottom': 'top-start',\n  'top right top': 'top-start',\n  // `middle`/`middle center [corner?]` positions are associated to a fallback\n  // `bottom` placement because there aren't any corresponding placement values.\n  middle: 'bottom',\n  'middle center': 'bottom',\n  'middle center bottom': 'bottom',\n  'middle center left': 'bottom',\n  'middle center right': 'bottom',\n  'middle center top': 'bottom'\n};\n\n/**\n * Converts the `Popover`'s legacy \"position\" prop to the new \"placement\" prop\n * (used by `floating-ui`).\n *\n * @param position The legacy position\n * @return The corresponding placement\n */\nexport const positionToPlacement = position => POSITION_TO_PLACEMENT[position] ?? 'bottom';\n\n/**\n * @typedef AnimationOrigin\n * @type {Object}\n * @property {number} originX A number between 0 and 1 (in CSS logical properties jargon, 0 is \"start\", 0.5 is \"center\", and 1 is \"end\")\n * @property {number} originY A number between 0 and 1 (0 is top, 0.5 is center, and 1 is bottom)\n */\n\nconst PLACEMENT_TO_ANIMATION_ORIGIN = {\n  top: {\n    originX: 0.5,\n    originY: 1\n  },\n  // open from bottom, center\n  'top-start': {\n    originX: 0,\n    originY: 1\n  },\n  // open from bottom, left\n  'top-end': {\n    originX: 1,\n    originY: 1\n  },\n  // open from bottom, right\n  right: {\n    originX: 0,\n    originY: 0.5\n  },\n  // open from middle, left\n  'right-start': {\n    originX: 0,\n    originY: 0\n  },\n  // open from top, left\n  'right-end': {\n    originX: 0,\n    originY: 1\n  },\n  // open from bottom, left\n  bottom: {\n    originX: 0.5,\n    originY: 0\n  },\n  // open from top, center\n  'bottom-start': {\n    originX: 0,\n    originY: 0\n  },\n  // open from top, left\n  'bottom-end': {\n    originX: 1,\n    originY: 0\n  },\n  // open from top, right\n  left: {\n    originX: 1,\n    originY: 0.5\n  },\n  // open from middle, right\n  'left-start': {\n    originX: 1,\n    originY: 0\n  },\n  // open from top, right\n  'left-end': {\n    originX: 1,\n    originY: 1\n  },\n  // open from bottom, right\n  overlay: {\n    originX: 0.5,\n    originY: 0.5\n  } // open from center, center\n};\n\n/**\n * Given the floating-ui `placement`, compute the framer-motion props for the\n * popover's entry animation.\n *\n * @param placement A placement string from floating ui\n * @return The object containing the motion props\n */\nexport const placementToMotionAnimationProps = placement => {\n  const translateProp = placement.startsWith('top') || placement.startsWith('bottom') ? 'translateY' : 'translateX';\n  const translateDirection = placement.startsWith('top') || placement.startsWith('left') ? 1 : -1;\n  return {\n    style: PLACEMENT_TO_ANIMATION_ORIGIN[placement],\n    initial: {\n      opacity: 0,\n      [translateProp]: `${DROPDOWN_MOTION.SLIDE_DISTANCE * translateDirection}px`\n    },\n    animate: {\n      opacity: 1,\n      [translateProp]: 0\n    },\n    transition: {\n      opacity: {\n        duration: DROPDOWN_MOTION.FADE_DURATION / 1000,\n        ease: DROPDOWN_MOTION.FADE_EASING.function\n      },\n      [translateProp]: {\n        duration: DROPDOWN_MOTION.SLIDE_DURATION / 1000,\n        ease: cubicBezier(...DROPDOWN_MOTION.SLIDE_EASING.args)\n      }\n    }\n  };\n};\nfunction isTopBottom(anchorRef) {\n  return !!anchorRef?.top;\n}\nfunction isRef(anchorRef) {\n  return !!anchorRef?.current;\n}\nexport const getReferenceElement = ({\n  anchor,\n  anchorRef,\n  anchorRect,\n  getAnchorRect,\n  fallbackReferenceElement\n}) => {\n  let referenceElement = null;\n  if (anchor) {\n    referenceElement = anchor;\n  } else if (isTopBottom(anchorRef)) {\n    // Create a virtual element for the ref. The expectation is that\n    // if anchorRef.top is defined, then anchorRef.bottom is defined too.\n    // Seems to be used by the block toolbar, when multiple blocks are selected\n    // (top and bottom blocks are used to calculate the resulting rect).\n    referenceElement = {\n      getBoundingClientRect() {\n        const topRect = anchorRef.top.getBoundingClientRect();\n        const bottomRect = anchorRef.bottom.getBoundingClientRect();\n        return new window.DOMRect(topRect.x, topRect.y, topRect.width, bottomRect.bottom - topRect.top);\n      }\n    };\n  } else if (isRef(anchorRef)) {\n    // Standard React ref.\n    referenceElement = anchorRef.current;\n  } else if (anchorRef) {\n    // If `anchorRef` holds directly the element's value (no `current` key)\n    // This is a weird scenario and should be deprecated.\n    referenceElement = anchorRef;\n  } else if (anchorRect) {\n    // Create a virtual element for the ref.\n    referenceElement = {\n      getBoundingClientRect() {\n        return anchorRect;\n      }\n    };\n  } else if (getAnchorRect) {\n    // Create a virtual element for the ref.\n    referenceElement = {\n      getBoundingClientRect() {\n        const rect = getAnchorRect(fallbackReferenceElement);\n        return new window.DOMRect(rect.x ?? rect.left, rect.y ?? rect.top, rect.width ?? rect.right - rect.left, rect.height ?? rect.bottom - rect.top);\n      }\n    };\n  } else if (fallbackReferenceElement) {\n    // If no explicit ref is passed via props, fall back to\n    // anchoring to the popover's parent node.\n    referenceElement = fallbackReferenceElement.parentElement;\n  }\n\n  // Convert any `undefined` value to `null`.\n  return referenceElement ?? null;\n};\n\n/**\n * Computes the final coordinate that needs to be applied to the floating\n * element when applying transform inline styles, defaulting to `undefined`\n * if the provided value is `null` or `NaN`.\n *\n * @param c input coordinate (usually as returned from floating-ui)\n * @return The coordinate's value to be used for inline styles. An `undefined`\n *         return value means \"no style set\" for this coordinate.\n */\nexport const computePopoverPosition = c => c === null || Number.isNaN(c) ? undefined : Math.round(c);"],
  "mappings": "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",
  "names": []
}
