preview-editor.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { useMemo } from 'react';
  2. import { useDark } from '@rspress/core/runtime';
  3. import {
  4. SandpackProvider,
  5. SandpackLayout,
  6. SandpackCodeEditor,
  7. SandpackFiles,
  8. // SandpackPreview,
  9. } from '@codesandbox/sandpack-react';
  10. export const PreviewEditor = ({
  11. files,
  12. children,
  13. previewStyle,
  14. dependencies,
  15. editorStyle,
  16. }: {
  17. files: SandpackFiles;
  18. children: JSX.Element;
  19. previewStyle?: React.CSSProperties;
  20. dependencies?: Record<string, string>;
  21. editorStyle?: React.CSSProperties;
  22. }) => {
  23. const dark = useDark();
  24. const theme = useMemo(() => (dark ? 'dark' : 'light'), [dark]);
  25. return (
  26. <SandpackProvider
  27. template="react"
  28. theme={theme}
  29. customSetup={{
  30. dependencies,
  31. }}
  32. files={files}
  33. onChange={(v) => {
  34. console.log('debugger', v);
  35. }}
  36. >
  37. <SandpackLayout style={previewStyle}>
  38. {children}
  39. {/* <SandpackPreview /> */}
  40. </SandpackLayout>
  41. <SandpackLayout>
  42. <SandpackCodeEditor style={editorStyle} readOnly />
  43. </SandpackLayout>
  44. </SandpackProvider>
  45. );
  46. };