import React, { useEffect, useRef, useState } from 'react'; import { Shield, Upload } from 'lucide-react'; import { Button } from '@/components/ui/button.tsx'; import { Input } from '@/components/ui/input.tsx'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from '@/components/ui/dialog.tsx'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs.tsx'; import { useLoginActions } from '@/hooks/useLoginActions'; interface LoginFormProps { isOpen: boolean; onClose: () => void; onLogin: () => void; onSignup?: () => void; } const LoginForm: React.FC = ({ isOpen, onClose, onLogin, onSignup }) => { const [isLoading, setIsLoading] = useState(false); const [nsec, setNsec] = useState(''); const [bunkerUri, setBunkerUri] = useState(''); const fileInputRef = useRef(null); const login = useLoginActions(); const handleExtensionLogin = () => { setIsLoading(true); try { if (!('nostr' in window)) { throw new Error('Nostr extension not found. Please install a NIP-07 extension.'); } login.extension(); onLogin(); onClose(); } catch (error) { console.error('Extension login failed:', error); } finally { setIsLoading(false); } }; const handleKeyLogin = () => { if (!nsec.trim()) return; setIsLoading(true); try { login.nsec(nsec); onLogin(); onClose(); } catch (error) { console.error('Nsec login failed:', error); } finally { setIsLoading(false); } }; const handleBunkerLogin = () => { if (!bunkerUri.trim() || !bunkerUri.startsWith('bunker://')) return; setIsLoading(true); try { login.bunker(bunkerUri); onLogin(); onClose(); } catch (error) { console.error('Bunker login failed:', error); } finally { setIsLoading(false); } }; const handleFileUpload = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (!file) return; const reader = new FileReader(); reader.onload = (event) => { const content = event.target?.result as string; setNsec(content.trim()); }; reader.readAsText(file); }; const handleSignupClick = () => { onClose(); if (onSignup) { onSignup(); } }; return ( Log in Access your account securely with your preferred method
Extension Nsec Bunker

Login with one click using the browser extension

setNsec(e.target.value)} className='rounded-lg border-gray-300 dark:border-gray-700 focus-visible:ring-primary' placeholder='nsec1...' />

Or upload a key file

setBunkerUri(e.target.value)} className='rounded-lg border-gray-300 dark:border-gray-700 focus-visible:ring-primary' placeholder='bunker://' /> {bunkerUri && !bunkerUri.startsWith('bunker://') && (

URI must start with bunker://

)}

Don't have an account?{' '}

); }; export default LoginForm;