From df40a07d5f2da7918ba2ed8986d358d17f24ab1d Mon Sep 17 00:00:00 2001 From: sayanChaterjee Date: Sun, 27 Apr 2025 14:49:43 +0530 Subject: [PATCH 1/2] [added a copy button] --- src/components/code-example.tsx | 12 ++++++-- src/components/copy-button.tsx | 53 +++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 src/components/copy-button.tsx diff --git a/src/components/code-example.tsx b/src/components/code-example.tsx index 70347cfa0..e3d216f0c 100644 --- a/src/components/code-example.tsx +++ b/src/components/code-example.tsx @@ -14,6 +14,7 @@ import linesToDiv from "./lines-to-div"; import atApplyInjection from "./syntax-highlighter/at-apply.json"; import atRulesInjection from "./syntax-highlighter/at-rules.json"; import themeFnInjection from "./syntax-highlighter/theme-fn.json"; +import { CopyButton } from "./copy-button"; export function js(strings: TemplateStringsArray, ...args: any[]) { return { lang: "js", code: dedent(strings, ...args) }; @@ -50,7 +51,7 @@ export async function CodeExample({ }) { return ( - {filename ? : null} + {filename ? : null} ); @@ -189,8 +190,13 @@ export function RawHighlightedCode({ return
; } -function CodeExampleFilename({ filename }: { filename: string }) { - return
{filename}
; +function CodeExampleFilename({ filename, code }: { filename: string; code?: string }) { + return ( +
+ {filename} + {code && } +
+ ); } const highlighter = await createHighlighter({ diff --git a/src/components/copy-button.tsx b/src/components/copy-button.tsx new file mode 100644 index 000000000..fb03b0192 --- /dev/null +++ b/src/components/copy-button.tsx @@ -0,0 +1,53 @@ +'use client' + +import { useState } from 'react' + +export function CopyButton({ code }: { code: string }) { + const [copied, setCopied] = useState(false) + + const handleCopy = async () => { + try { + await navigator.clipboard.writeText(code) + setCopied(true) + setTimeout(() => setCopied(false), 2000) + } catch (err) { + console.error('Failed to copy:', err) + } + } + + return ( + + ) +} \ No newline at end of file From 35d0d1a7b9cd1be90e562ffc523ca4f66faffecd Mon Sep 17 00:00:00 2001 From: sayanChaterjee Date: Sun, 27 Apr 2025 17:47:27 +0530 Subject: [PATCH 2/2] [fix of the copy-button] --- src/components/code-example.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/code-example.tsx b/src/components/code-example.tsx index e3d216f0c..412b8e962 100644 --- a/src/components/code-example.tsx +++ b/src/components/code-example.tsx @@ -190,11 +190,18 @@ export function RawHighlightedCode({ return
; } +function cleanCodeForCopy(code:string) { + return code + .split('\n') + .filter(line => !line.includes('[!code highlight')) + .join('\n'); +} + function CodeExampleFilename({ filename, code }: { filename: string; code?: string }) { return (
{filename} - {code && } + {code && }
); }