1- import React from "react" ;
1+ import React , { useState } from "react" ;
22import { navigate } from "gatsby" ;
33import { useLocation } from "@reach/router" ;
44
@@ -8,7 +8,8 @@ import { Col, Row } from "../../../../../reusecore/Layout";
88import Button from "../../../../../reusecore/Button" ;
99import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode" ;
1010
11- import { styled , Table , TableContainer , TableCell , TableRow , TableHead , TableBody , SistentThemeProvider } from "@sistent/sistent" ;
11+ import { styled , Table , TableContainer , TableCell , TableRow , TableHead , TableBody , SistentThemeProvider , CustomTooltip , Box , } from "@sistent/sistent" ;
12+ import { copyToClipboard } from "../../../../../components/CodeBlock/copy-to-clipboard.js" ;
1213
1314const brandColors = [
1415 { tokenName : "keppel-70" , token : "theme.palette.brand.default" , name : "Keppel" , hex : "#DAf3EB" } ,
@@ -403,6 +404,47 @@ const componentColors = [
403404] ;
404405
405406
407+ const CopyColor = ( { hex , token } ) => {
408+ const [ copyText , setCopyText ] = useState ( "Copy" ) ;
409+ const [ showCopy , setShowCopy ] = useState ( false ) ;
410+
411+ const handleCopy = async ( ) => {
412+ await copyToClipboard ( hex || token ) ;
413+ setCopyText ( "Copied" ) ;
414+ setTimeout ( ( ) => setCopyText ( "Copy" ) , 1000 ) ;
415+ } ;
416+
417+ return (
418+ < CustomTooltip
419+ title = { copyText === "Copied" ? "Copied" : "Copy" }
420+ enterDelay = { 800 }
421+ leaveDelay = { 10 }
422+ placement = "right"
423+ >
424+ < Box
425+ sx = { {
426+ position : "relative" ,
427+ display : "inline-flex" ,
428+ alignItems : "center" ,
429+ cursor : "pointer" ,
430+ padding : "2px 4px" ,
431+ borderRadius : "3px" ,
432+ transition : "background-color 0.2s ease" ,
433+ "&:hover" : {
434+ backgroundColor : ( theme ) =>
435+ theme . palette . action ?. hover || "rgba(0, 0, 0, 0.04)" ,
436+ } ,
437+ } }
438+ onMouseEnter = { ( ) => setShowCopy ( true ) }
439+ onMouseLeave = { ( ) => setShowCopy ( false ) }
440+ onClick = { handleCopy }
441+ >
442+ < span > { hex || token } </ span >
443+ </ Box >
444+ </ CustomTooltip >
445+ ) ;
446+ } ;
447+
406448const PreviewBox = styled ( "div" ) ( ( { theme, bgcolor } ) => ( {
407449 backgroundColor : bgcolor ,
408450 width : "1.6rem" ,
@@ -411,8 +453,10 @@ const PreviewBox = styled("div")(({ theme, bgcolor }) => ({
411453 border : `1px solid ${ theme . palette . divider } ` ,
412454 boxShadow : "inset 0 0 3px rgba(0,0,0,0.15)" ,
413455 margin : "0 auto" ,
456+
414457} ) ) ;
415458
459+
416460const PreviewTextBox = styled ( "p" ) ( ( { theme, tokenName } ) => {
417461 const colorsMap = {
418462 "text-default" : theme . palette . text . default ,
@@ -582,9 +626,9 @@ const ColorCode = () => {
582626 >
583627 < StyledTableCell > { col . tokenName } </ StyledTableCell >
584628 < StyledTableCell > { col . name } </ StyledTableCell >
585- < StyledTableCell > { col . hex } </ StyledTableCell >
629+ < StyledTableCell > < CopyColor hex = { col . hex } /> </ StyledTableCell >
586630 < StyledTableCell sx = { { fontFamily : "monospace" } } >
587- { col . token }
631+ < CopyColor hex = { col . token } />
588632 </ StyledTableCell >
589633 < StyledTableCell align = "center" >
590634 < PreviewBox bgcolor = { col . hex } />
@@ -622,9 +666,9 @@ const ColorCode = () => {
622666 >
623667 < StyledTableCell > { col . tokenName } </ StyledTableCell >
624668 < StyledTableCell > { col . name } </ StyledTableCell >
625- < StyledTableCell > { col . hex } </ StyledTableCell >
669+ < StyledTableCell > < CopyColor hex = { col . hex } /> </ StyledTableCell >
626670 < StyledTableCell sx = { { fontFamily : "monospace" } } >
627- { col . token }
671+ < CopyColor hex = { col . token } />
628672 </ StyledTableCell >
629673 < StyledTableCell align = "center" >
630674 < PreviewBox bgcolor = { col . hex } />
@@ -663,9 +707,9 @@ const ColorCode = () => {
663707 >
664708 < StyledTableCell > { col . tokenName } </ StyledTableCell >
665709 < StyledTableCell > { col . name } </ StyledTableCell >
666- < StyledTableCell > { col . hex } </ StyledTableCell >
710+ < StyledTableCell > < CopyColor hex = { col . hex } /> </ StyledTableCell >
667711 < StyledTableCell sx = { { fontFamily : "monospace" } } >
668- { col . token }
712+ < CopyColor hex = { col . token } />
669713 </ StyledTableCell >
670714 < StyledTableCell align = "center" >
671715 < PreviewBox bgcolor = { col . hex } />
@@ -713,9 +757,9 @@ const ColorCode = () => {
713757 >
714758 < StyledTableCell > { col . tokenName } </ StyledTableCell >
715759 < StyledTableCell > { col . Alias_of } </ StyledTableCell >
716- < StyledTableCell > { col . hex } </ StyledTableCell >
760+ < StyledTableCell > < CopyColor hex = { col . hex } /> </ StyledTableCell >
717761 < StyledTableCell sx = { { fontFamily : "monospace" } } >
718- { col . token }
762+ < CopyColor hex = { col . token } />
719763 </ StyledTableCell >
720764 < StyledTableCell align = "center" >
721765 < PreviewBox bgcolor = { col . hex } />
@@ -756,9 +800,9 @@ const ColorCode = () => {
756800 >
757801 < StyledTableCell > { col . tokenName } </ StyledTableCell >
758802 < StyledTableCell > { col . Alias_of } </ StyledTableCell >
759- < StyledTableCell > { col . hex } </ StyledTableCell >
803+ < StyledTableCell > < CopyColor hex = { col . hex } /> </ StyledTableCell >
760804 < StyledTableCell sx = { { fontFamily : "monospace" } } >
761- { col . token }
805+ < CopyColor hex = { col . token } />
762806 </ StyledTableCell >
763807 < StyledTableCell align = "center" >
764808 < PreviewTextBox tokenName = { col . tokenName } > Aa</ PreviewTextBox >
@@ -799,9 +843,9 @@ const ColorCode = () => {
799843 >
800844 < StyledTableCell > { col . tokenName } </ StyledTableCell >
801845 < StyledTableCell > { col . Alias_of } </ StyledTableCell >
802- < StyledTableCell > { col . hex } </ StyledTableCell >
846+ < StyledTableCell > < CopyColor hex = { col . hex } /> </ StyledTableCell >
803847 < StyledTableCell sx = { { fontFamily : "monospace" } } >
804- { col . token }
848+ < CopyColor hex = { col . token } />
805849 </ StyledTableCell >
806850 < StyledTableCell align = "center" >
807851 < PreviewBorderBox tokenName = { col . tokenName } />
@@ -847,9 +891,9 @@ const ColorCode = () => {
847891 >
848892 < StyledTableCell > { col . tokenName } </ StyledTableCell >
849893 < StyledTableCell > { col . Alias_of } </ StyledTableCell >
850- < StyledTableCell > { col . hex } </ StyledTableCell >
894+ < StyledTableCell > < CopyColor hex = { col . hex } /> </ StyledTableCell >
851895 < StyledTableCell sx = { { fontFamily : "monospace" } } >
852- { col . token }
896+ < CopyColor hex = { col . token } />
853897 </ StyledTableCell >
854898 < StyledTableCell align = "center" >
855899 < PreviewBox bgcolor = { col . hex } />
0 commit comments