From 8bf5c5de403401626af7dd6c6325dd28c80d0574 Mon Sep 17 00:00:00 2001 From: GauthierWebDev Date: Sun, 13 Apr 2025 16:25:01 +0200 Subject: [PATCH] feat: Add showLineNumbers prop to Snippet component --- app/components/syntax/CSRSnippet.tsx | 61 +++++++++++++++++------- app/components/syntax/Snippet.tsx | 65 ++++++++++++++++++-------- app/data/docs/react/usereducer/page.md | 2 +- app/markdoc/tags.tsx | 40 ++-------------- 4 files changed, 95 insertions(+), 73 deletions(-) diff --git a/app/components/syntax/CSRSnippet.tsx b/app/components/syntax/CSRSnippet.tsx index 3d5513e..bd23808 100644 --- a/app/components/syntax/CSRSnippet.tsx +++ b/app/components/syntax/CSRSnippet.tsx @@ -6,8 +6,19 @@ import { Fragment, useMemo } from "react"; import { toast } from "react-toastify"; import { Button } from "./Button"; import Prism from "prismjs"; +import clsx from "clsx"; -export default function CSRFence({ children, language }: { children: string; language: string }) { +export default function CSRSnippet({ + children, + language, + label, + showLineNumbers = false, +}: { + children: string; + language: string; + label?: string; + showLineNumbers?: boolean; +}) { const { theme } = useTheme(); const prismTheme = useMemo(() => { @@ -23,25 +34,43 @@ export default function CSRFence({ children, language }: { children: string; lan <> {({ className, style, tokens, getTokenProps }) => ( -
-            
-              {tokens.map((line, lineIndex) => (
-                
-                  {line
-                    .filter((token) => !token.empty)
-                    .map((token, tokenIndex) => (
-                      
-                    ))}
-                  {"\n"}
-                
-              ))}
-            
-          
+
+ {label && ( +
+ {label} +
+ )} +
+              
+                {tokens.map((line, lineIndex) => (
+                  
+                    {showLineNumbers && (
+                      
+                        {lineIndex + 1}
+                      
+                    )}
+                    {line
+                      .filter((token) => !token.empty)
+                      .map((token, tokenIndex) => (
+                        
+                      ))}
+                    {"\n"}
+                  
+                ))}
+              
+            
+
)}