1
+ import React from "react"
2
+
1
3
export function CopyButton ( {
2
4
content,
3
5
} : {
4
6
content : string
5
7
} ) {
8
+ const [ copied , setCopied ] = React . useState ( false )
9
+
6
10
return (
7
11
< svg
8
12
style = { {
@@ -11,19 +15,36 @@ export function CopyButton({
11
15
margin : "0 0.8em" ,
12
16
cursor : "pointer" ,
13
17
} }
14
- onClick = { ( ) => copyToClipboard ( content ) }
18
+ onClick = { ( ) => {
19
+ copyToClipboard ( content )
20
+ setCopied ( true )
21
+ setTimeout ( ( ) => {
22
+ setCopied ( false )
23
+ } , 1200 )
24
+ } }
25
+ className = "ch-copy-button"
15
26
fill = "none"
16
27
stroke = "currentColor"
17
28
viewBox = "0 0 24 24"
18
29
xmlns = "http://www.w3.org/2000/svg"
19
30
>
20
31
< title > Copy</ title >
21
- < path
22
- strokeLinecap = "round"
23
- strokeLinejoin = "round"
24
- strokeWidth = "2"
25
- d = "M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"
26
- > </ path >
32
+
33
+ { copied ? (
34
+ < path
35
+ strokeLinecap = "round"
36
+ strokeLinejoin = "round"
37
+ strokeWidth = { 2 }
38
+ d = "M5 13l4 4L19 7"
39
+ />
40
+ ) : (
41
+ < path
42
+ strokeLinecap = "round"
43
+ strokeLinejoin = "round"
44
+ strokeWidth = "2"
45
+ d = "M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"
46
+ />
47
+ ) }
27
48
</ svg >
28
49
)
29
50
}
@@ -33,16 +54,7 @@ function copyToClipboard(text: string) {
33
54
fallbackCopyTextToClipboard ( text )
34
55
return
35
56
}
36
- navigator . clipboard . writeText ( text ) . then (
37
- function ( ) {
38
- console . log (
39
- "Async: Copying to clipboard was successful!"
40
- )
41
- } ,
42
- function ( err ) {
43
- console . error ( "Async: Could not copy text: " , err )
44
- }
45
- )
57
+ navigator . clipboard . writeText ( text )
46
58
}
47
59
48
60
function fallbackCopyTextToClipboard ( text : string ) {
@@ -60,10 +72,10 @@ function fallbackCopyTextToClipboard(text: string) {
60
72
61
73
try {
62
74
var successful = document . execCommand ( "copy" )
63
- var msg = successful ? "successful" : "unsuccessful"
64
- console . log ( "Fallback: Copying text command was " + msg )
75
+ // var msg = successful ? "successful" : "unsuccessful"
76
+ // console.log("Fallback: Copying text command was " + msg)
65
77
} catch ( err ) {
66
- console . error ( "Fallback: Oops, unable to copy" , err )
78
+ // console.error("Fallback: Oops, unable to copy", err)
67
79
}
68
80
69
81
document . body . removeChild ( textArea )
0 commit comments