carbon-react
Version:
A library of reusable React components for easily building user interfaces.
2 lines (1 loc) • 880 B
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var t=require("react"),e=require("@floating-ui/dom");exports.default=({isOpen:i,reference:n,floating:a,strategy:o="absolute",placement:r,middleware:s,animationFrame:l})=>{const c=t.useRef(null);t.useLayoutEffect((()=>{let t;const u=n.current,p=a.current;if(u&&p&&i){const{left:i,top:n,position:a,width:f,height:m}=p.style;c.current={left:i,top:n,position:a,width:f,height:m},Object.assign(p.style,{position:o,top:0,left:0});const d=()=>{e.computePosition(u,p,{strategy:o,middleware:s,placement:r}).then((({x:t,y:e,placement:i})=>{Object.assign(p.style,{left:`${t}px`,top:`${e}px`,position:o}),p.setAttribute("data-floating-placement",i)}))};t=e.autoUpdate(u,p,d,{animationFrame:l})}return()=>{t&&p&&(t(),t=null,Object.assign(p.style,c.current),p.removeAttribute("data-floating-placement"))}}),[i,n,a,o,s,r,l])};