UNPKG

carbon-react

Version:

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

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