import React, { useState } from 'react';
import { LiveProvider, LiveEditor, LiveError, LivePreview } from 'react-live';
import { mdx } from '@mdx-js/react';
import { TWButton } from './TWButton';
import { useClipboard } from './useClipboard';
import Component from '@reactions/component';
export const liveEditorStyle = {
fontSize: 14,
overflowX: 'auto',
color: '#f8f8f2',
fontFamily: 'SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace',
height: '100%',
background: '#161e2e'
};
export const liveErrorStyle = {
fontFamily: 'SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace',
fontSize: 12,
padding: '1em',
overflowX: 'auto',
color: 'white',
backgroundColor: 'red'
};
const LiveCodePreview = props =>
;
const EditableNotice = props => {
return
Editable Example
;
};
const CodeBlock = ({
className,
live = false,
noInline = false,
collapsed = false,
isManual,
render,
children,
...props
}) => {
const initialCode = React.useRef(children.trim());
const [editorCode, setEditorCode] = useState(children.trim());
const language = className && className.replace(/language-/, '');
const [hasCopied, onCopy] = useClipboard(editorCode);
const [isCollapsed, setCollapse] = React.useState(collapsed);
const liveProviderProps = {
theme: {
plain: {},
styles: []
},
language,
code: editorCode,
transformCode: code => `<>${code}>`,
scope: {
mdx,
Component
},
noInline,
...props
};
const handleCodeChange = newCode => setEditorCode(newCode ? newCode.trim() : '');
if (language === 'jsx' && live === true) {
return
{isCollapsed ?
: <>
{hasCopied ? 'Copied' : 'Copy'}
setEditorCode(initialCode.current)}>
Reset
>}
;
}
if (render) {
return
;
}
return
{hasCopied ? 'Copied' : 'Copy'}
;
};
CodeBlock.defaultProps = {
mountStylesheet: false
};
export default CodeBlock;