UNPKG

carbon-react

Version:

A library of reusable React components for easily building user interfaces.

2 lines (1 loc) 1.36 kB
import{jsx as e}from"react/jsx-runtime";import r,{useRef as o,useContext as t,useEffect as n}from"react";import l from"react-dom";import{flip as i}from"@floating-ui/dom";import a from"../../hooks/__internal__/useFloating/useFloating.js";import{StyledPopoverContent as c,StyledBackdrop as d}from"./popover.style.js";import m from"../../style/design-tokens/carbon-scoped-tokens-provider/carbon-scoped-tokens-provider.component.js";import s from"../modal/modal.context.js";const p=[i({fallbackStrategy:"initialPlacement"})],u=({children:i,placement:u,disablePortal:f,reference:g,middleware:h=p,disableBackgroundUI:v,isOpen:b=!0,animationFrame:k,popoverStrategy:y="absolute",childRefOverride:j})=>{var O;const F=o(null),{isInModal:_}=t(s),x=null===(O=g.current)||void 0===O?void 0:O.closest("[role='dialog']"),C=_&&x?x:document.body;F.current||f||(F.current=document.createElement("div"),C.appendChild(F.current));const P=j||r.Children.only(i).ref,w=o(null),E=P||w;let I;return I=P?i:r.cloneElement(i,{ref:E}),a({isOpen:b,reference:g,floating:E,placement:u,middleware:h,animationFrame:k,strategy:y}),n((()=>()=>{!f&&F.current&&(C.removeChild(F.current),F.current=null)}),[f,C]),v||(I=e(c,{isOpen:b,children:I})),v&&(I=e(c,{isOpen:b,children:e(d,{"data-role":"popup-backdrop",children:I})})),f?I:l.createPortal(e(m,{children:I}),F.current)};export{u as default};