You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

27 lines
947 B

import { formatNpub } from '@/lib/pubkey'
import { Check, Copy } from 'lucide-react'
import { nip19 } from 'nostr-tools'
import { useMemo, useState } from 'react'
export default function PubkeyCopy({ pubkey, showFull }: { pubkey: string; showFull?: boolean }) {
const npub = useMemo(() => (pubkey ? nip19.npubEncode(pubkey) : ''), [pubkey])
const [copied, setCopied] = useState(false)
const copyNpub = () => {
if (!npub) return
navigator.clipboard.writeText(npub)
setCopied(true)
setTimeout(() => setCopied(false), 2000)
}
return (
<div
className={`flex gap-2 text-sm text-muted-foreground items-center bg-muted px-2 rounded-full clickable ${showFull ? 'max-w-full break-all' : 'w-fit'}`}
onClick={() => copyNpub()}
>
<div className={showFull ? 'break-all min-w-0' : ''}>{formatNpub(npub, showFull ? 99 : 24)}</div>
{copied ? <Check size={14} /> : <Copy size={14} />}
</div>
)
}