beta/src/components/MDX/Sandpack/SandpackRoot.tsx (74 lines of code) (raw):

/* * Copyright (c) Facebook, Inc. and its affiliates. */ import * as React from 'react'; import {SandpackProvider} from '@codesandbox/sandpack-react'; import {CustomPreset} from './CustomPreset'; import {createFileMap} from './utils'; import type {SandpackSetup} from '@codesandbox/sandpack-react'; type SandpackProps = { children: React.ReactChildren; autorun?: boolean; setup?: SandpackSetup; showDevTools?: boolean; }; const sandboxStyle = ` * { box-sizing: border-box; } body { font-family: sans-serif; margin: 20px; padding: 0; } h1 { margin-top: 0; font-size: 22px; } h2 { margin-top: 0; font-size: 20px; } h3 { margin-top: 0; font-size: 18px; } h4 { margin-top: 0; font-size: 16px; } h5 { margin-top: 0; font-size: 14px; } h6 { margin-top: 0; font-size: 12px; } ul { padding-left: 20px; } `.trim(); function SandpackRoot(props: SandpackProps) { let {children, setup, autorun = true, showDevTools = false} = props; const [devToolsLoaded, setDevToolsLoaded] = React.useState(false); let codeSnippets = React.Children.toArray(children) as React.ReactElement[]; let isSingleFile = true; const files = createFileMap(codeSnippets); files['/styles.css'] = { code: [sandboxStyle, files['/styles.css']?.code ?? ''].join('\n\n'), hidden: true, }; return ( <div className="sandpack-container my-8" translate="no"> <SandpackProvider template="react" customSetup={{...setup, files: files}} autorun={autorun} initMode="user-visible" initModeObserverOptions={{rootMargin: '1400px 0px'}}> <CustomPreset isSingleFile={isSingleFile} showDevTools={showDevTools} onDevToolsLoad={() => setDevToolsLoaded(true)} devToolsLoaded={devToolsLoaded} /> </SandpackProvider> </div> ); } SandpackRoot.displayName = 'Sandpack'; export default SandpackRoot;