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$/, "")}
-
-
-
+
) : (