/* Copyright (C) 2023-2026 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import { type ReactNode } from 'react' import { Check, Copy } from 'lucide-react' import { useTranslation } from 'react-i18next' import { cn } from '@/lib/utils' import { useCopyToClipboard } from '@/hooks/use-copy-to-clipboard' import { Button } from '@/components/ui/button' import { Tooltip, TooltipContent, TooltipTrigger, } from '@/components/ui/tooltip' interface CopyButtonProps { value: string children?: ReactNode className?: string iconClassName?: string variant?: 'ghost' | 'outline' | 'default' | 'secondary' | 'destructive' size?: 'default' | 'sm' | 'lg' | 'icon' tooltip?: string successTooltip?: string 'aria-label'?: string } export function CopyButton({ value, children, className, iconClassName, variant = 'ghost', size = 'icon', tooltip, successTooltip, 'aria-label': ariaLabel, }: CopyButtonProps) { const { t } = useTranslation() const { copiedText, copyToClipboard } = useCopyToClipboard({ notify: false }) const isCopied = copiedText === value const resolvedTooltip = tooltip ?? t('Copy to clipboard') const resolvedSuccessTooltip = successTooltip ?? t('Copied!') const resolvedAriaLabel = ariaLabel ?? resolvedTooltip const copiedAriaLabel = t('Copied') const button = ( ) if (tooltip || successTooltip) { return (

{isCopied ? resolvedSuccessTooltip : resolvedTooltip}

) } return button }