"use client"; import {FC, useRef} from "react"; import {SandpackProvider, SandpackLayout, SandpackPreview} from "@codesandbox/sandpack-react"; import {SandpackCodeViewer} from "./code-viewer"; import {nextuiTheme} from "./theme"; import {UseSandpackProps, useSandpack} from "./use-sandpack"; import {BugReportButton} from "./bugreport-button"; import {CopyButton} from "./copy-button"; import {CodeSandboxButton} from "./codesandbox-button"; import {LanguageSelector} from "./language-selector"; export interface SandpackProps extends UseSandpackProps { showTabs?: boolean; showPreview?: boolean; showEditor?: boolean; showCopyCode?: boolean; showReportBug?: boolean; showOpenInCodeSandbox?: boolean; children?: React.ReactNode; } export const Sandpack: FC = ({ files: filesProp, template, highlightedLines, typescriptStrict = false, showPreview = false, showEditor = true, showOpenInCodeSandbox = true, showReportBug = true, showCopyCode = true, showTabs, children, }) => { const editorContainerRef = useRef(null); const {files, decorators, customSetup, sandpackTemplate, hasTypescript, setCurrentTemplate} = useSandpack({ files: filesProp, template, typescriptStrict, highlightedLines, }); return (
{showPreview ? : children}
{showEditor && ( )}
{showReportBug && } {showCopyCode && } {!showPreview && showOpenInCodeSandbox && }
{hasTypescript && sandpackTemplate && ( )}
); };