summaryrefslogtreecommitdiff
path: root/extension/react-app/src/components/CodeBlock.tsx
diff options
context:
space:
mode:
authorNate Sesti <sestinj@gmail.com>2023-05-23 23:45:12 -0400
committerNate Sesti <sestinj@gmail.com>2023-05-23 23:45:12 -0400
commit27ecedb02ef79ce53bf533e016b00462c44541be (patch)
tree402305113b6f04c3e3b3563b68d32de5ff1c69c8 /extension/react-app/src/components/CodeBlock.tsx
downloadsncontinue-27ecedb02ef79ce53bf533e016b00462c44541be.tar.gz
sncontinue-27ecedb02ef79ce53bf533e016b00462c44541be.tar.bz2
sncontinue-27ecedb02ef79ce53bf533e016b00462c44541be.zip
copying from old repo
Diffstat (limited to 'extension/react-app/src/components/CodeBlock.tsx')
-rw-r--r--extension/react-app/src/components/CodeBlock.tsx57
1 files changed, 57 insertions, 0 deletions
diff --git a/extension/react-app/src/components/CodeBlock.tsx b/extension/react-app/src/components/CodeBlock.tsx
new file mode 100644
index 00000000..4c10ab23
--- /dev/null
+++ b/extension/react-app/src/components/CodeBlock.tsx
@@ -0,0 +1,57 @@
+import hljs from "highlight.js";
+import { useEffect } from "react";
+import styled from "styled-components";
+import { defaultBorderRadius, vscBackground } from ".";
+
+import { Clipboard } from "@styled-icons/heroicons-outline";
+
+const StyledPre = styled.pre`
+ overflow: scroll;
+ border: 1px solid gray;
+ border-radius: ${defaultBorderRadius};
+ background-color: ${vscBackground};
+`;
+
+const StyledCode = styled.code`
+ background-color: ${vscBackground};
+`;
+
+const StyledCopyButton = styled.button`
+ float: right;
+ border: none;
+ background-color: ${vscBackground};
+ cursor: pointer;
+ padding: 0;
+ margin: 4px;
+ &:hover {
+ color: #fff;
+ }
+`;
+
+function CopyButton(props: { textToCopy: string }) {
+ return (
+ <>
+ <StyledCopyButton
+ onClick={() => {
+ navigator.clipboard.writeText(props.textToCopy);
+ }}
+ >
+ <Clipboard color="white" size="1.4em" />
+ </StyledCopyButton>
+ </>
+ );
+}
+
+function CodeBlock(props: { language?: string; children: string }) {
+ useEffect(() => {
+ hljs.highlightAll();
+ }, [props.children]);
+ return (
+ <StyledPre>
+ <CopyButton textToCopy={props.children} />
+ <StyledCode>{props.children}</StyledCode>
+ </StyledPre>
+ );
+}
+
+export default CodeBlock;