mirror of
https://github.com/coder/coder.git
synced 2026-06-03 13:08:25 +00:00
dd55d4577d
reolves #1856
56 lines
1.3 KiB
TypeScript
56 lines
1.3 KiB
TypeScript
import { makeStyles } from "@material-ui/core/styles"
|
|
import { FC, Fragment, ReactElement } from "react"
|
|
import { MONOSPACE_FONT_FAMILY } from "../../theme/constants"
|
|
import { combineClasses } from "../../util/combineClasses"
|
|
|
|
export interface CodeBlockProps {
|
|
lines: string[]
|
|
ctas?: ReactElement[]
|
|
className?: string
|
|
}
|
|
|
|
export const CodeBlock: FC<CodeBlockProps> = ({ lines, ctas, className = "" }) => {
|
|
const styles = useStyles()
|
|
|
|
return (
|
|
<>
|
|
<div className={combineClasses([styles.root, className])}>
|
|
{lines.map((line, idx) => (
|
|
<div className={styles.line} key={idx}>
|
|
{line}
|
|
</div>
|
|
))}
|
|
</div>
|
|
{ctas && ctas.length && (
|
|
<div className={styles.ctaBar}>
|
|
{ctas.map((cta, i) => {
|
|
return <Fragment key={i}>{cta}</Fragment>
|
|
})}
|
|
</div>
|
|
)}
|
|
</>
|
|
)
|
|
}
|
|
|
|
const useStyles = makeStyles((theme) => ({
|
|
root: {
|
|
minHeight: 156,
|
|
maxHeight: 240,
|
|
overflowY: "scroll",
|
|
background: theme.palette.background.default,
|
|
color: theme.palette.text.primary,
|
|
fontFamily: MONOSPACE_FONT_FAMILY,
|
|
fontSize: 13,
|
|
wordBreak: "break-all",
|
|
padding: theme.spacing(2),
|
|
borderRadius: theme.shape.borderRadius,
|
|
},
|
|
line: {
|
|
whiteSpace: "pre-wrap",
|
|
},
|
|
ctaBar: {
|
|
display: "flex",
|
|
justifyContent: "space-between",
|
|
},
|
|
}))
|