Spaces:
Running
Running
| import classNames from "classnames"; | |
| import { CopyIcon } from "lucide-react"; | |
| import { useMemo, useState } from "react"; | |
| import { useCopyToClipboard, useUpdateEffect } from "react-use"; | |
| export const CopyToClipboard = ({ id }: { id: string }) => { | |
| const [state, copyToClipboard] = useCopyToClipboard(); | |
| const [copied, setCopied] = useState(false); | |
| const url = useMemo(() => { | |
| return `https://enzostvs-hugger-roaster.hf.space/${id}`; | |
| }, [id]); | |
| const handleCopy = () => { | |
| setCopied(true); | |
| copyToClipboard(url); | |
| setTimeout(() => { | |
| setCopied(false); | |
| }, 2000); | |
| }; | |
| return ( | |
| <div className="w-full mt-5"> | |
| <p className="text-xs text-zinc-500"> | |
| Share this link with your friends so they can see your roast and try it | |
| out themselves! | |
| </p> | |
| <div | |
| className="bg-white mt-2 max-w-max rounded-md mr-2 border border-gray-200 text-sm px-3 py-2.5 relative ring-transparent text-zinc-600 hover:ring-blue-500/20 ring-[3px] flex items-center justify-center group" | |
| onClick={handleCopy} | |
| > | |
| <div | |
| className={classNames( | |
| "bg-black/80 text-xs text-white px-2 py-1 rounded-md absolute left-0 top-0 -translate-y-1/2 transition-all duration-200", | |
| { | |
| "opacity-0 !translate-y-0": !copied, | |
| } | |
| )} | |
| > | |
| Copied! | |
| </div> | |
| <CopyIcon className="w-4 h-4 text-zinc-400 mr-2 group-hover:text-blue-500" /> | |
| <p className="flex-1">{url}</p> | |
| </div> | |
| </div> | |
| ); | |
| }; | |