Spaces:
Runtime error
Runtime error
File size: 2,949 Bytes
459bded | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | import { useState } from "react";
import { CLASSLENS_ICON } from "../lib/icon";
interface InviteGateProps {
onSuccess: () => void;
correctCode: string;
}
export function InviteGate({ onSuccess, correctCode }: InviteGateProps) {
const [code, setCode] = useState("");
const [error, setError] = useState("");
const handleSubmit = (e: React.FormEvent) => {
e.preventDefault();
if (code.trim() === correctCode) {
onSuccess();
} else {
setError("邀請碼不正確,請再試一次");
}
};
return (
<div className="min-h-screen flex items-center justify-center bg-gradient-to-br from-[#0f1419] via-[#1a2332] to-[#0f1419]">
<div className="relative">
<div className="absolute -top-20 -left-20 w-40 h-40 bg-[var(--color-primary)]/20 rounded-full blur-3xl" />
<div className="absolute -bottom-20 -right-20 w-40 h-40 bg-[var(--color-accent)]/20 rounded-full blur-3xl" />
<div className="relative bg-[var(--color-surface)] border border-[var(--color-border)] rounded-2xl p-8 max-w-md w-full shadow-2xl">
<div className="text-center mb-8">
<img
src={CLASSLENS_ICON}
alt="ClassLens"
className="w-24 h-24 mx-auto mb-4 rounded-2xl shadow-lg"
/>
<h1 className="text-2xl font-bold text-[var(--color-text)] font-display">
ClassLens
</h1>
<p className="text-[var(--color-text-muted)] mt-2">
請輸入邀請碼以繼續
</p>
</div>
<form onSubmit={handleSubmit} className="space-y-4">
<div>
<label className="block text-sm font-medium text-[var(--color-text-muted)] mb-2">
邀請碼
</label>
<input
type="text"
value={code}
onChange={(e) => { setCode(e.target.value); setError(""); }}
placeholder="請輸入邀請碼..."
required
className="input text-center tracking-widest"
autoFocus
/>
</div>
{error && (
<p className="text-sm text-red-400 text-center flex items-center justify-center gap-1">
<svg className="w-4 h-4 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>
{error}
</p>
)}
<button
type="submit"
className="w-full py-3 px-4 bg-gradient-to-r from-[var(--color-primary)] to-[var(--color-accent)] text-white font-semibold rounded-xl hover:opacity-90 transition-opacity"
>
進入
</button>
</form>
</div>
</div>
</div>
);
}
|