diff --git a/package-lock.json b/package-lock.json
index ebd9c1c..fe5c3b9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,6 +7,9 @@
"": {
"name": "chatgpt-web",
"version": "0.0.0",
+ "dependencies": {
+ "copy-to-clipboard": "^3.3.3"
+ },
"devDependencies": {
"@fullhuman/postcss-purgecss": "^5.0.0",
"@microsoft/fetch-event-source": "^2.0.1",
@@ -627,6 +630,14 @@
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"dev": true
},
+ "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/cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
@@ -1583,6 +1594,11 @@
"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/tslib": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
diff --git a/package.json b/package.json
index 39e5663..b88fae1 100644
--- a/package.json
+++ b/package.json
@@ -28,5 +28,8 @@
"tslib": "^2.5.0",
"typescript": "^4.9.3",
"vite": "^4.1.0"
+ },
+ "dependencies": {
+ "copy-to-clipboard": "^3.3.3"
}
}
diff --git a/src/app.scss b/src/app.scss
index b3f53d4..805bfc8 100644
--- a/src/app.scss
+++ b/src/app.scss
@@ -83,4 +83,15 @@ $modal-background-background-color-dark: rgba($dark, 0.86) !default; // remove t
@import "/node_modules/bulma-prefers-dark/build/bulma-prefers-dark.sass";
.modal-card-body { // remove this once https: //github.com/jloh/bulma-prefers-dark/pull/90 is merged and released
background-color: $background-dark;
+}
+
+/* for copy button */
+pre[data-language="plaintext"] {
+ position: relative;
+}
+div.copy-prompt {
+ padding: 5px;
+ position: absolute;
+ top: 5px;
+ right: 5px;
}
\ No newline at end of file
diff --git a/src/lib/Chat.svelte b/src/lib/Chat.svelte
index 0e1f2e1..f9c7925 100644
--- a/src/lib/Chat.svelte
+++ b/src/lib/Chat.svelte
@@ -1,10 +1,17 @@