flowgram.ai/apps/docs/components/preview-editor.tsx
xiamidaxia deb3e9ff6a
feat(docs): composite nodes docs (#265)
* feat(docs): add composite nodes docs

* feat(docs): source code link
2025-05-23 08:26:31 +00:00

72 lines
1.6 KiB
TypeScript

import { useMemo } from 'react';
import { useDark } from '@rspress/core/runtime';
import {
SandpackProvider,
SandpackLayout,
SandpackCodeEditor,
SandpackFiles,
// SandpackPreview,
} from '@codesandbox/sandpack-react';
export const PreviewEditor = ({
files,
children,
previewStyle,
dependencies,
editorStyle,
codeInRight,
}: {
files: SandpackFiles;
children: JSX.Element;
previewStyle?: React.CSSProperties;
dependencies?: Record<string, string>;
editorStyle?: React.CSSProperties;
codeInRight?: boolean;
}) => {
const dark = useDark();
const theme = useMemo(() => (dark ? 'dark' : 'light'), [dark]);
const content = codeInRight ? (
<>
<SandpackLayout style={{ width: '100%', display: 'flex' }}>
<div className="light-mode" style={previewStyle}>
{children}
</div>
<SandpackCodeEditor style={editorStyle} readOnly />
</SandpackLayout>
</>
) : (
<>
<SandpackLayout style={previewStyle}>
<div className="light-mode">{children}</div>
{/* <SandpackPreview /> */}
</SandpackLayout>
<SandpackLayout>
<SandpackCodeEditor style={editorStyle} readOnly />
</SandpackLayout>
</>
);
return (
<SandpackProvider
template="react"
theme={theme}
customSetup={{
dependencies,
}}
files={{
...files,
'/App.js': {
code: '',
hidden: true,
},
}}
onChange={(v) => {
console.log('debugger', v);
}}
>
{content}
</SandpackProvider>
);
};