From c3bb1a0be709ddda7426fbacb21243eca552138c Mon Sep 17 00:00:00 2001 From: Severin Ibarluzea Date: Sun, 12 Oct 2025 11:48:45 -0700 Subject: [PATCH 1/2] Ensure CircuitPreview code snippets retain indentation --- src/components/CircuitPreview.tsx | 61 ++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/src/components/CircuitPreview.tsx b/src/components/CircuitPreview.tsx index 106ad53..8ddbf8a 100644 --- a/src/components/CircuitPreview.tsx +++ b/src/components/CircuitPreview.tsx @@ -10,6 +10,59 @@ import CodeBlock from "@theme/CodeBlock" import { useWindowSize } from "@docusaurus/theme-common" import TscircuitIframe from "./TscircuitIframe" +const formatCodeForDisplay = (rawCode?: string) => { + const trimmed = rawCode?.trim() ?? "" + + if (!trimmed) { + return "" + } + + const lines = trimmed.split("\n") + const exportLineIndex = lines.findIndex((line) => + /^export default\b.*\(/.test(line.trim()), + ) + + if (exportLineIndex === -1) { + return trimmed + } + + let closingLineIndex = lines.length - 1 + for (let i = lines.length - 1; i > exportLineIndex; i -= 1) { + const trimmedLine = lines[i].trim() + if (trimmedLine === ")" || trimmedLine === ");") { + closingLineIndex = i + break + } + } + + const needsIndentation = lines + .slice(exportLineIndex + 1, closingLineIndex) + .some((line) => line.trim().length > 0 && !/^[\t ]/.test(line)) + + if (!needsIndentation) { + return trimmed + } + + const indentation = " " + for (let i = exportLineIndex + 1; i < lines.length; i += 1) { + if (i === closingLineIndex) { + continue + } + + if (lines[i].trim().length === 0) { + continue + } + + if (/^[\t ]/.test(lines[i])) { + continue + } + + lines[i] = `${indentation}${lines[i]}` + } + + return lines.join("\n") +} + const Tab = ({ label, active, @@ -141,6 +194,10 @@ export default function CircuitPreview({ const fsMapOrCode = hasMultipleFiles ? fsMap || code : code || Object.values(fsMap ?? {})[0] + const displayCode = useMemo( + () => formatCodeForDisplay(fsMap?.[currentFile] ?? code), + [code, currentFile, fsMap], + ) const pcbUrl = useMemo(() => createSvgUrl(fsMapOrCode, "pcb"), [fsMapOrCode]) const schUrl = useMemo( () => createSvgUrl(fsMapOrCode, "schematic"), @@ -287,7 +344,7 @@ export default function CircuitPreview({ )} language="tsx" > - {fsMap?.[currentFile]?.trim() || code?.trim() || ""} + {displayCode} @@ -375,7 +432,7 @@ export default function CircuitPreview({ )} language="tsx" > - {fsMap?.[currentFile]?.trim() || code?.trim() || ""} + {displayCode} From 6f882504110ad7cf81e0e510e9faf6b98f1bccda Mon Sep 17 00:00:00 2001 From: Severin Ibarluzea Date: Sun, 12 Oct 2025 15:22:01 -0700 Subject: [PATCH 2/2] Fix nested indentation in CircuitPreview formatting --- src/components/CircuitPreview.tsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/components/CircuitPreview.tsx b/src/components/CircuitPreview.tsx index 8ddbf8a..576b19f 100644 --- a/src/components/CircuitPreview.tsx +++ b/src/components/CircuitPreview.tsx @@ -53,10 +53,6 @@ const formatCodeForDisplay = (rawCode?: string) => { continue } - if (/^[\t ]/.test(lines[i])) { - continue - } - lines[i] = `${indentation}${lines[i]}` }