import React, { useEffect, useRef } from 'react'; import ReactDOM from 'react-dom'; import { Playground } from './Playground'; import './dockit-react-playground'; import type { DockitReactPlayground } from './dockit-react-playground'; type ShadowPlaygroundProps = { /** * The jsx to edit and render, as string. */ code: string; /** * Specifies globals to use inside the live editor. */ scope?: object; /** * Allows to render multiple components. */ noInline?: boolean; /** * The styles to include in the shadow root. */ styles?: string | CSSStyleSheet; }; /** * Encapsulated version of Playground component with support for shadow root styles. */ export const ShadowPlayground = ({ code, scope, noInline, styles, ...props }: ShadowPlaygroundProps) => { const playgroundRef = useRef(); useEffect(() => { const playgroundElement = playgroundRef.current as DockitReactPlayground; playgroundElement.styles = styles; ReactDOM.render( , playgroundElement.$renderRoot ); }); return ( ); }; ShadowPlayground.defaultProps = { noInline: false, };