"use client"; import { Button } from "@openstatus/ui/components/ui/button"; import { ButtonGroup } from "@openstatus/ui/components/ui/button-group"; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuTrigger, } from "@openstatus/ui/components/ui/dropdown-menu"; import { useCopyToClipboard } from "@openstatus/ui/hooks/use-copy-to-clipboard"; import { cn } from "@openstatus/ui/lib/utils"; import { toast } from "sonner"; export function CopyButton({ className, copyText, buttonText = "copy", copiedText = "copied", ...props }: React.ComponentProps & { copyText: string; buttonText?: string; copiedText?: string; }) { const { copy, isCopied } = useCopyToClipboard(); return ( ); } export function CopyDropdownButton({ className, ...props }: React.ComponentProps) { const { copy, isCopied } = useCopyToClipboard(); const handleCopyLink = () => { copy(window.location.href, { successMessage: "Link copied to clipboard", withToast: true, }); }; const handleCopyMarkdown = async () => { try { const item = new ClipboardItem({ "text/plain": fetch(window.location.pathname, { headers: { Accept: "text/markdown" }, }) .then((r) => { if (!r.ok) throw new Error("Failed to fetch markdown"); return r.text(); }) .then((text) => new Blob([text], { type: "text/plain" })), }); await navigator.clipboard.write([item]); toast.success("Markdown copied to clipboard"); } catch (_error) { toast.error("Failed to copy markdown"); } }; return ( [copy markdown] ); }