{"version":3,"file":"Popover.mjs","sources":["../../../../src/components/Tooltip/Popover.tsx"],"sourcesContent":["import {\n  FloatingArrow,\n  arrow,\n  autoUpdate,\n  flip,\n  offset,\n  shift,\n  useFloating,\n  useTransitionStyles,\n} from '@floating-ui/react';\nimport { useLayoutEffect, useRef } from 'react';\nimport * as React from 'react';\n\nimport { useTheme2 } from '../../themes';\nimport { getPlacement } from '../../utils/tooltipUtils';\nimport { Portal } from '../Portal/Portal';\n\nimport { PopoverContent, TooltipPlacement } from './types';\n\ninterface Props extends Omit<React.HTMLAttributes<HTMLDivElement>, 'content'> {\n  show: boolean;\n  placement?: TooltipPlacement;\n  content: PopoverContent;\n  referenceElement: HTMLElement;\n  wrapperClassName?: string;\n  renderArrow?: boolean;\n  hidePopper?: () => void;\n}\n\nexport function Popover({\n  content,\n  show,\n  placement,\n  className,\n  wrapperClassName,\n  referenceElement,\n  renderArrow,\n  hidePopper,\n  ...rest\n}: Props) {\n  const theme = useTheme2();\n  const arrowRef = useRef(null);\n\n  // the order of middleware is important!\n  // `arrow` should almost always be at the end\n  // see https://floating-ui.com/docs/arrow#order\n  const middleware = [\n    offset(8),\n    flip({\n      fallbackAxisSideDirection: 'end',\n      // see https://floating-ui.com/docs/flip#combining-with-shift\n      crossAxis: false,\n      boundary: document.body,\n    }),\n    shift(),\n  ];\n\n  if (renderArrow) {\n    middleware.push(\n      arrow({\n        element: arrowRef,\n      })\n    );\n  }\n\n  const { context, refs, floatingStyles } = useFloating({\n    open: show,\n    placement: getPlacement(placement),\n    middleware,\n    whileElementsMounted: autoUpdate,\n    strategy: 'fixed',\n  });\n\n  useLayoutEffect(() => {\n    refs.setReference(referenceElement);\n  }, [referenceElement, refs]);\n\n  const { styles: placementStyles } = useTransitionStyles(context, {\n    initial: () => ({\n      opacity: 0,\n    }),\n    duration: theme.transitions.duration.enteringScreen,\n  });\n\n  return show ? (\n    <Portal>\n      <div\n        ref={refs.setFloating}\n        style={{\n          ...floatingStyles,\n          ...placementStyles,\n        }}\n        className={wrapperClassName}\n        {...rest}\n      >\n        <div className={className}>\n          {renderArrow && <FloatingArrow fill={theme.colors.border.weak} ref={arrowRef} context={context} />}\n          {typeof content === 'string' && content}\n          {React.isValidElement(content) && React.cloneElement(content)}\n          {typeof content === 'function' && content({ hidePopper })}\n        </div>\n      </div>\n    </Portal>\n  ) : undefined;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AA6BO,SAAS,OAAQ,CAAA;AAAA,EACtB,OAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,GAAG;AACL,CAAU,EAAA;AACR,EAAA,MAAM,QAAQ,SAAU,EAAA;AACxB,EAAM,MAAA,QAAA,GAAW,OAAO,IAAI,CAAA;AAK5B,EAAA,MAAM,UAAa,GAAA;AAAA,IACjB,OAAO,CAAC,CAAA;AAAA,IACR,IAAK,CAAA;AAAA,MACH,yBAA2B,EAAA,KAAA;AAAA;AAAA,MAE3B,SAAW,EAAA,KAAA;AAAA,MACX,UAAU,QAAS,CAAA;AAAA,KACpB,CAAA;AAAA,IACD,KAAM;AAAA,GACR;AAEA,EAAA,IAAI,WAAa,EAAA;AACf,IAAW,UAAA,CAAA,IAAA;AAAA,MACT,KAAM,CAAA;AAAA,QACJ,OAAS,EAAA;AAAA,OACV;AAAA,KACH;AAAA;AAGF,EAAA,MAAM,EAAE,OAAA,EAAS,IAAM,EAAA,cAAA,KAAmB,WAAY,CAAA;AAAA,IACpD,IAAM,EAAA,IAAA;AAAA,IACN,SAAA,EAAW,aAAa,SAAS,CAAA;AAAA,IACjC,UAAA;AAAA,IACA,oBAAsB,EAAA,UAAA;AAAA,IACtB,QAAU,EAAA;AAAA,GACX,CAAA;AAED,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,IAAA,CAAK,aAAa,gBAAgB,CAAA;AAAA,GACjC,EAAA,CAAC,gBAAkB,EAAA,IAAI,CAAC,CAAA;AAE3B,EAAA,MAAM,EAAE,MAAA,EAAQ,eAAgB,EAAA,GAAI,oBAAoB,OAAS,EAAA;AAAA,IAC/D,SAAS,OAAO;AAAA,MACd,OAAS,EAAA;AAAA,KACX,CAAA;AAAA,IACA,QAAA,EAAU,KAAM,CAAA,WAAA,CAAY,QAAS,CAAA;AAAA,GACtC,CAAA;AAED,EAAO,OAAA,IAAA,uBACJ,MACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAK,IAAK,CAAA,WAAA;AAAA,MACV,KAAO,EAAA;AAAA,QACL,GAAG,cAAA;AAAA,QACH,GAAG;AAAA,OACL;AAAA,MACA,SAAW,EAAA,gBAAA;AAAA,MACV,GAAG,IAAA;AAAA,MAEJ,QAAA,kBAAA,IAAA,CAAC,SAAI,SACF,EAAA,QAAA,EAAA;AAAA,QAAe,WAAA,oBAAA,GAAA,CAAC,iBAAc,IAAM,EAAA,KAAA,CAAM,OAAO,MAAO,CAAA,IAAA,EAAM,GAAK,EAAA,QAAA,EAAU,OAAkB,EAAA,CAAA;AAAA,QAC/F,OAAO,YAAY,QAAY,IAAA,OAAA;AAAA,QAC/B,MAAM,cAAe,CAAA,OAAO,CAAK,IAAA,KAAA,CAAM,aAAa,OAAO,CAAA;AAAA,QAC3D,OAAO,OAAY,KAAA,UAAA,IAAc,OAAQ,CAAA,EAAE,YAAY;AAAA,OAC1D,EAAA;AAAA;AAAA,KAEJ,CACE,GAAA,KAAA,CAAA;AACN;;;;"}