@c15t/react
Version:
Developer-first CMP for React: cookie banner, consent manager, preferences centre. GDPR ready with minimal setup and rich customization
2 lines • 1.96 kB
JavaScript
'use client';
import*as e from"react/jsx-runtime";import*as t from"react";import*as o from"react-dom";import*as a from"../../../context/theme-context.js";import*as r from"../../../hooks/use-consent-manager.js";import*as s from"../../../hooks/use-styles.js";import*as n from"../../../hooks/use-text-direction.js";import*as l from"../cookie-banner.module.js";import*as m from"./overlay.js";let i=({children:t,className:o,noStyle:r,disableAnimation:s,theme:n,scrollLock:l,trapFocus:m=!0,...i})=>(0,e.jsx)(a.LocalThemeContext.Provider,{value:{disableAnimation:s,noStyle:r,theme:n,scrollLock:l,trapFocus:m},children:(0,e.jsx)(u,{disableAnimation:s,className:o,noStyle:r,...i,children:t})}),u=(0,t.forwardRef)(({asChild:a,children:i,className:u,style:c,className:d,disableAnimation:f,noStyle:p,...b},j)=>{let{showPopup:x,translationConfig:h}=(0,r.useConsentManager)(),y=(0,n.useTextDirection)(h.defaultLanguage),[N,g]=(0,t.useState)(!1),[k,C]=(0,t.useState)(!1),[S,T]=(0,t.useState)(200);(0,t.useEffect)(()=>{T(Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue("--banner-animation-duration")||"200",10))},[]),(0,t.useEffect)(()=>{if(x)if(k)g(!0);else{let e=setTimeout(()=>{g(!0),C(!0)},10);return()=>clearTimeout(e)}else if(C(!1),f)g(!1);else{let e=setTimeout(()=>{g(!1)},S);return()=>clearTimeout(e)}},[x,f,k,S]);let v=(0,s.useStyles)("banner.root",{baseClassName:[l.default.root,"ltr"===y?l.default.bottomLeft:l.default.bottomRight],style:c,className:u||d,noStyle:p}),[R,E]=(0,t.useState)(!1);if((0,t.useEffect)(()=>{E(!0)},[]),!R)return null;let L=p?v.className||"":`${v.className||""} ${N?l.default.bannerVisible:l.default.bannerHidden}`;return x?(0,o.createPortal)((0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(m.Overlay,{}),(0,e.jsx)("div",{ref:j,...b,...v,className:L,"data-testid":"cookie-banner-root",dir:y,children:i})]}),document.body):null});u.displayName="CookieBannerRootChildren";let c=i;export{i as CookieBannerRoot,c as Root};