documentation-site/components/code.jsx (39 lines of code) (raw):
/*
Copyright (c) Uber Technologies, Inc.
This source code is licensed under the MIT license found in the
LICENSE file in the root directory of this source tree.
*/
//
import * as React from "react";
import { useStyletron } from "baseui";
import Highlight, { defaultProps } from "prism-react-renderer";
import { lightTheme } from "react-view";
import darkTheme from "./yard/dark-theme";
import CodeBox from "./code-box";
const Code = ({ children, language, content }) => {
const [, theme] = useStyletron();
const code = content || children.props.children;
return (
<CodeBox>
<Highlight
{...defaultProps}
code={code.replace(/[\r\n]+$/, "")}
language={language || "tsx"}
theme={theme.name.startsWith("light-theme") ? lightTheme : darkTheme}
>
{({ style, tokens, getLineProps, getTokenProps }) => (
<pre dir="ltr" style={{ ...style, padding: "10px 10px" }}>
{tokens.map((line, i) => (
<div key={i} {...getLineProps({ line, key: i })}>
{line.map((token, key) => (
<span key={key} {...getTokenProps({ token, key })} />
))}
</div>
))}
</pre>
)}
</Highlight>
</CodeBox>
);
};
export default Code;