diff --git a/apps/website/app/[locale]/blog/[slug]/page.tsx b/apps/website/app/[locale]/blog/[slug]/page.tsx index 1845140..63a7c74 100644 --- a/apps/website/app/[locale]/blog/[slug]/page.tsx +++ b/apps/website/app/[locale]/blog/[slug]/page.tsx @@ -1,3 +1,4 @@ +import { CopyButton } from "@/components/ui/copy-button"; import { getPost, getPosts } from "@/lib/ghost"; import type { Metadata, ResolvingMetadata } from "next"; import { getTranslations } from "next-intl/server"; @@ -121,10 +122,13 @@ async function CodeBlock(props: LanguageProps) { }); return ( -
+
+ +
+
); } export default async function BlogPostPage({ params }: Props) { diff --git a/apps/website/components/ui/copy-button.tsx b/apps/website/components/ui/copy-button.tsx new file mode 100644 index 0000000..cf131bb --- /dev/null +++ b/apps/website/components/ui/copy-button.tsx @@ -0,0 +1,32 @@ +"use client"; + +import { CheckIcon, CopyIcon } from "lucide-react"; +import { useState } from "react"; + +interface CopyButtonProps { + text: string; +} + +export function CopyButton({ text }: CopyButtonProps) { + const [isCopied, setIsCopied] = useState(false); + + const copy = async () => { + await navigator.clipboard.writeText(text); + setIsCopied(true); + setTimeout(() => setIsCopied(false), 2000); + }; + + return ( + + ); +}