import { useState } from 'react' import { useTranslation } from 'react-i18next' import { Fingerprint, Loader2, AlertTriangle } from 'lucide-react' import type { PasskeySignature } from '../types/signatures.js' interface PasskeySignButtonProps { label: string signature?: PasskeySignature signatureValid?: boolean disabled?: boolean canSign: boolean onSign: () => Promise onClear?: () => void } export default function PasskeySignButton({ label, signature, signatureValid = true, disabled = false, canSign, onSign, onClear }: PasskeySignButtonProps) { const { t, i18n } = useTranslation() const [signing, setSigning] = useState(false) const [error, setError] = useState(null) const handleSign = async () => { setSigning(true) setError(null) try { await onSign() } catch (err: any) { if (err?.name === 'NotAllowedError') { setError(t('logs.sign_passkey_cancelled')) } else { setError(err?.message || t('logs.sign_passkey_failed')) } } finally { setSigning(false) } } const formattedDate = signature ? new Date(signature.signedAt).toLocaleString(i18n.language === 'de' ? 'de-DE' : 'en-GB') : '' return (
{label}
{signature ? (
{t('logs.sign_passkey_signed', { username: signature.username })} {formattedDate}
{!signatureValid && ( {t('logs.sign_invalid')} )}
) : null} {canSign && !disabled && ( )} {signature && onClear && !disabled && ( )} {error &&

{error}

}
) }