diff --git a/package-lock.json b/package-lock.json index ca5df37d..40dbbf88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,6 @@ "@radix-ui/react-switch": "^1.1.1", "@radix-ui/react-tooltip": "^1.1.6", "@types/prismjs": "^1.26.5", - "@types/react-copy-to-clipboard": "^5.0.7", "@types/react-syntax-highlighter": "^15.5.13", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", @@ -24,7 +23,6 @@ "lucide-react": "^0.462.0", "prismjs": "^1.29.0", "react": "^18.3.1", - "react-copy-to-clipboard": "^5.1.0", "react-dom": "^18.3.1", "react-markdown": "^9.0.1", "react-router-dom": "^7.0.2", @@ -2651,14 +2649,6 @@ "csstype": "^3.0.2" } }, - "node_modules/@types/react-copy-to-clipboard": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.7.tgz", - "integrity": "sha512-Gft19D+as4M+9Whq1oglhmK49vqPhcLzk8WfvfLvaYMIPYanyfLy0+CwFucMJfdKoSFyySPmkkWn8/E6voQXjQ==", - "dependencies": { - "@types/react": "*" - } - }, "node_modules/@types/react-dom": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", @@ -3457,14 +3447,6 @@ "node": ">=18" } }, - "node_modules/copy-to-clipboard": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", - "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", - "dependencies": { - "toggle-selection": "^1.0.6" - } - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -6675,18 +6657,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-copy-to-clipboard": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz", - "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==", - "dependencies": { - "copy-to-clipboard": "^3.3.1", - "prop-types": "^15.8.1" - }, - "peerDependencies": { - "react": "^15.3.0 || 16 || 17 || 18" - } - }, "node_modules/react-dom": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", @@ -7697,11 +7667,6 @@ "node": ">=8.0" } }, - "node_modules/toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" - }, "node_modules/trim-lines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", diff --git a/package.json b/package.json index 3b62d873..4774c659 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,6 @@ "@radix-ui/react-switch": "^1.1.1", "@radix-ui/react-tooltip": "^1.1.6", "@types/prismjs": "^1.26.5", - "@types/react-copy-to-clipboard": "^5.0.7", "@types/react-syntax-highlighter": "^15.5.13", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", @@ -29,7 +28,6 @@ "lucide-react": "^0.462.0", "prismjs": "^1.29.0", "react": "^18.3.1", - "react-copy-to-clipboard": "^5.1.0", "react-dom": "^18.3.1", "react-markdown": "^9.0.1", "react-router-dom": "^7.0.2", @@ -61,4 +59,4 @@ "typescript-eslint": "^8.15.0", "vite": "^6.0.1" } -} +} \ No newline at end of file diff --git a/src/components/CopyToClipboard.tsx b/src/components/CopyToClipboard.tsx new file mode 100644 index 00000000..5aba6baf --- /dev/null +++ b/src/components/CopyToClipboard.tsx @@ -0,0 +1,33 @@ +import clsx from "clsx"; +import { ClipboardCopy } from "lucide-react"; + +export function CopyToClipboard({ + text, + className, +}: { + className?: string; + text: string; +}) { + const copyToClipboard = async () => { + try { + await navigator.clipboard.writeText(text); + } catch { + return; + } + }; + + return ( + + ); +} diff --git a/src/components/Markdown.tsx b/src/components/Markdown.tsx index 3167df52..9285ea88 100644 --- a/src/components/Markdown.tsx +++ b/src/components/Markdown.tsx @@ -2,9 +2,8 @@ import remarkGfm from "remark-gfm"; import ReactMarkdown from "react-markdown"; import { Prism as SyntaxHighlighter } from "react-syntax-highlighter"; import { oneDark } from "react-syntax-highlighter/dist/esm/styles/prism"; -import { CopyToClipboard } from "react-copy-to-clipboard"; -import { ClipboardCopy } from "lucide-react"; import { cn } from "@/lib/utils"; +import { CopyToClipboard } from "./CopyToClipboard"; interface Props { children: string; @@ -61,18 +60,7 @@ export function Markdown({ children, className = "" }: Props) { > {String(children).replace(/\n$/, "")} - - - + ) : (