import { Flex, Heading, Link, Stack, Table, Text, useColorMode } from '@chakra-ui/react';
import NextLink from 'next/link';
import { PrismLight as SyntaxHighlighter } from 'react-syntax-highlighter';
import {
nightOwl,
materialLight,
materialDark
} from 'react-syntax-highlighter/dist/cjs/styles/prism';
import bash from 'react-syntax-highlighter/dist/cjs/languages/prism/bash';
import go from 'react-syntax-highlighter/dist/cjs/languages/prism/go';
import graphql from 'react-syntax-highlighter/dist/cjs/languages/prism/graphql';
import java from 'react-syntax-highlighter/dist/cjs/languages/prism/java';
import javascript from 'react-syntax-highlighter/dist/cjs/languages/prism/javascript';
import json from 'react-syntax-highlighter/dist/cjs/languages/prism/json';
import python from 'react-syntax-highlighter/dist/cjs/languages/prism/python';
import sh from 'react-syntax-highlighter/dist/cjs/languages/prism/shell-session';
import solidity from 'react-syntax-highlighter/dist/cjs/languages/prism/solidity';
import swift from 'react-syntax-highlighter/dist/cjs/languages/prism/swift';
import { textStyles } from '../theme/foundations';
import { getProgrammingLanguageName } from '../utils';
// syntax highlighting languages supported
SyntaxHighlighter.registerLanguage('bash', bash);
SyntaxHighlighter.registerLanguage('terminal', bash);
SyntaxHighlighter.registerLanguage('go', go);
SyntaxHighlighter.registerLanguage('graphql', graphql);
SyntaxHighlighter.registerLanguage('java', java);
SyntaxHighlighter.registerLanguage('javascript', javascript);
SyntaxHighlighter.registerLanguage('json', json);
SyntaxHighlighter.registerLanguage('python', python);
SyntaxHighlighter.registerLanguage('sh', sh);
SyntaxHighlighter.registerLanguage('solidity', solidity);
SyntaxHighlighter.registerLanguage('swift', swift);
const { header1, header2, header3, header4 } = textStyles;
const MdTable = ({ children }: any) => (
)
const Code = ({ className, ...code }: any) => {
const { colorMode } = useColorMode();
const isDark = colorMode === 'dark';
if (className?.includes('terminal'))
return (
{code.children}
);
if (code.inline)
return (
{code.children[0]}
);
if (className?.startsWith('language-'))
return (
{code.children}
);
return {code.children[0]};
};
const MDXComponents = {
// paragraphs
p: ({ children }: any) => {
return (
{children}
);
},
// links
a: ({ children, href }: any) => {
return (
{children}
);
},
// headings
h1: ({ children }: any) => {
return (
{children}
);
},
h2: ({ children }: any) => {
return (
{children}
);
},
h3: ({ children }: any) => {
return (
{children}
);
},
h4: ({ children }: any) => {
return (
{children}
);
},
// lists
ul: ({ children }: any) => {
return (
{children}
);
},
ol: ({ children }: any) => {
return (
{children}
);
},
// tables
table: MdTable,
// pre
pre: ({ children }: any) => {
return (
{children}
);
},
// code
code: Code
};
export default MDXComponents;