/* eslint-disable react-native/no-inline-styles */ import { Box, Text, HStack, Divider, CopyOutlinedIcon, Pressable, useClipboard, CopyFilledIcon, } from '../../'; import React, { memo } from 'react'; import Highlight, { defaultProps } from 'prism-react-renderer'; import vsDark from 'prism-react-renderer/themes/vsDark'; import vsLight from 'prism-react-renderer/themes/duotoneLight'; import prettier from 'prettier/standalone'; import prettierParser from 'prettier/parser-typescript'; import { useColorMode } from '@gluestack-style/react'; const CodeBlock = memo( ({ code = '', withLineNumbers = false, showHeader, showHeaderIcons, language = 'jsx', fontSize, copyProps, _highLightProps = {}, showCopy: showCopyProp, ...props }: any) => { let prettifiedCode: any = code.trim(' '); try { prettifiedCode = language === 'jsx' || language === 'tsx' ? prettier .format(code.trim(' '), { semi: false, parser: 'typescript', plugins: [prettierParser], }) .trim() : code.trim(' '); } catch (Err) { // console.error('Error! prettier failed: ', Err); } if (prettifiedCode.startsWith(';')) { prettifiedCode = prettifiedCode.slice(1); } const [copied, setCopied] = React.useState(false); const [showCopy, setShowCopy] = React.useState(false); const { onCopy } = useClipboard(); const colorMode = useColorMode(); function handleCopy() { onCopy(code); setCopied(true); // set copied to false after 2 second setTimeout(() => { setCopied(false); }, 2000); } return ( {showHeader && ( <> {showHeaderIcons && ( <> )} )} { setShowCopy(true); }} onMouseLeave={() => { setShowCopy(false); }} pr="$6" pl="$6" bg="#1A1D23" height="max-content" maxHeight={400} style={{ overflow: 'auto', }} {...props} > {({ tokens, getLineProps, getTokenProps }) => (
                  {tokens.map((line, i) => (
                    
{withLineNumbers && ( {i + 1} )}
{line.map((token, key) => { const { style, ...props } = getTokenProps({ token, key, }); return ( ); })}
))}
)}
{(showCopy || showCopyProp) && ( { setShowCopy(true); }} onMouseLeave={() => { setShowCopy(false); }} sx={{ boxShadow: 'none', }} {...copyProps} > {!copied ? ( ) : ( )} )} {/* { return ( <> ); }} > Hello {copied ? 'Copied' : 'Copy'} */}
); } ); export { CodeBlock };