From e57e3f5f0afa7a6182594a3eb9deaa6539e2c06d Mon Sep 17 00:00:00 2001 From: Enrico Ros Date: Thu, 25 Apr 2024 11:41:34 -0700 Subject: [PATCH] Code: soft wrap. Closes #517 --- src/modules/blocks/code/RenderCode.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/modules/blocks/code/RenderCode.tsx b/src/modules/blocks/code/RenderCode.tsx index 7a9a34aec..21fa4404b 100644 --- a/src/modules/blocks/code/RenderCode.tsx +++ b/src/modules/blocks/code/RenderCode.tsx @@ -8,6 +8,7 @@ import FitScreenIcon from '@mui/icons-material/FitScreen'; import HtmlIcon from '@mui/icons-material/Html'; import SchemaIcon from '@mui/icons-material/Schema'; import ShapeLineOutlinedIcon from '@mui/icons-material/ShapeLineOutlined'; +import WrapTextIcon from '@mui/icons-material/WrapText'; import { copyToClipboard } from '~/common/util/clipboardUtils'; import { frontendSideFetch } from '~/common/util/clientFetchers'; @@ -106,6 +107,7 @@ function RenderCodeImpl(props: RenderCodeImplProps) { const [showMermaid, setShowMermaid] = React.useState(true); const [showPlantUML, setShowPlantUML] = React.useState(true); const [showSVG, setShowSVG] = React.useState(true); + const [softWrap, setSoftWrap] = React.useState(false); // derived props const { @@ -171,7 +173,7 @@ function RenderCodeImpl(props: RenderCodeImplProps) { component='code' className={`language-${inferredCodeLanguage || 'unknown'}`} sx={{ - whiteSpace: 'pre', // was 'break-spaces' before we implemented per-block scrolling + whiteSpace: softWrap ? 'break-spaces' : 'pre', // was 'break-spaces' before we implemented per-block scrolling mx: 0, p: 1.5, // this block gets a thicker border display: 'flex', flexDirection: 'column', @@ -265,6 +267,15 @@ function RenderCodeImpl(props: RenderCodeImplProps) { )} + {/* Soft Wrap toggle */} + {(!renderHTML && !renderMermaid && !renderPlantUML && !renderSVG) && ( + + setSoftWrap(on => !on)}> + + + + )} + {/* Copy */} {props.noCopyButton !== true && (