/* global React */ (function () { const { useState } = React; const T = window.SC_T; const Icon = window.SC_Icon; function PasswordInput({ value, onChange, placeholder }) { const [show, setShow] = useState(false); return ( setShow(!show)} style={{ border: 'none', background: 'transparent', cursor: 'pointer', color: T.inkMuted, display: 'flex', padding: 0 }} > {show ? Icon.eyeOff(16) : Icon.eye(16)} } /> ); } function LoginPage() { const [tab, setTab] = useState('login'); // 'login' | 'register' const [email, setEmail] = useState(''); const [pass, setPass] = useState(''); const [pass2, setPass2] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const reset = () => { setError(''); }; const handleSubmit = async () => { setError(''); if (!email.trim() || !pass.trim()) { setError('Заполните все поля'); return; } if (tab === 'register' && pass !== pass2) { setError('Пароли не совпадают'); return; } if (tab === 'register' && pass.length < 6) { setError('Пароль минимум 6 символов'); return; } setLoading(true); try { const url = tab === 'login' ? '/api/auth/login' : '/api/auth/register'; const resp = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: email.trim().toLowerCase(), password: pass }), }); const data = await resp.json(); if (!resp.ok) { setError(data.detail || 'Ошибка'); return; } window.SC_Auth.login(data.token, data.email); } catch { setError('Не удалось подключиться к серверу'); } finally { setLoading(false); } }; const handleKey = (e) => { if (e.key === 'Enter') handleSubmit(); }; return (
{/* Header */}
Semantic Core
Сборщик семантических ядер
{/* Tabs */}
{[['login', 'Войти'], ['register', 'Регистрация']].map(([key, label]) => ( ))}
{/* Form */}
{ setEmail(v); reset(); }} placeholder="you@example.com" />
{ setPass(v); reset(); }} placeholder="Минимум 6 символов" />
{tab === 'register' && (
{ setPass2(v); reset(); }} placeholder="Ещё раз" />
)} {error && (
{error}
)} {tab === 'login' ? 'Войти' : 'Создать аккаунт'}
); } window.LoginPage = LoginPage; })();