'use client'; import { useCallback, useState } from 'react'; import { X } from 'lucide-react'; import { useLoginForm } from '../lib/useLoginForm'; import { useLoginModal, useRegisterModal } from '@/shared/zustand/auth'; import { useTranslations } from 'next-intl'; import { formatPhone, normalizeDigits } from '@/shared/lib/formatPhone'; import { MotionWrapper } from '@/shared/ui'; import PhonePrefix from '@/shared/ui/phonePrefix'; export function LoginForm() { const [isFocused, setIsFocused] = useState(false); const t = useTranslations('Auth.Login'); const tCommon = useTranslations('Common'); const { phone, setPhone, submit, error, loading } = useLoginForm(); const toggleLoginModal = useLoginModal((state) => state.toggleLoginModal); const toggleRegisterModal = useRegisterModal( (state) => state.toggleRegisterModal, ); const handlePhoneChange = useCallback( (e: React.ChangeEvent) => { setPhone(normalizeDigits(e.target.value)); }, [setPhone], ); return ( <> {/* Backdrop */}
{/* Modal */}
{/* Close */}
{/* Header */}

{t('welcome')}

{t('title')}

{t('description')}

{/* Phone field */}
setIsFocused(true)} onBlur={() => setIsFocused(false)} className={` w-full rounded-sm border bg-stone-50 py-2.5 pl-30 pr-3.5 text-[0.95rem] font-medium text-stone-900 outline-none placeholder:text-stone-300 transition-all duration-150 ${ error ? 'border-red-400 ring-2 ring-red-200/40' : isFocused ? 'border-stone-400 ring-2 ring-stone-300/30' : 'border-stone-200 hover:border-stone-300' } `} />
{/* Digit counter / complete hint */}
{phone.length > 0 && t('digitsEntered', { count: phone.length })} {phone.length === 9 && ( {tCommon('complete')} )}
{/* Error */} {error && (
{error}
)} {/* Submit */} {/* Divider */}
{tCommon('or')}
{/* Register hint */}

{t('registerPrompt')}

{ toggleLoginModal(); toggleRegisterModal(); }} className="text-stone-800 hover:cursor-pointer underline underline-offset-2 hover:text-stone-600 transition-colors" > {t('registerLink')}

); }