54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
|
|
import Form from "next/form";
|
||
|
|
|
||
|
|
import { Input } from "../ui/input";
|
||
|
|
import { Label } from "../ui/label";
|
||
|
|
|
||
|
|
export function AuthForm({
|
||
|
|
action,
|
||
|
|
children,
|
||
|
|
defaultEmail = "",
|
||
|
|
}: {
|
||
|
|
action: NonNullable<
|
||
|
|
string | ((formData: FormData) => void | Promise<void>) | undefined
|
||
|
|
>;
|
||
|
|
children: React.ReactNode;
|
||
|
|
defaultEmail?: string;
|
||
|
|
}) {
|
||
|
|
return (
|
||
|
|
<Form action={action} className="flex flex-col gap-4">
|
||
|
|
<div className="flex flex-col gap-2">
|
||
|
|
<Label className="font-normal text-muted-foreground" htmlFor="email">
|
||
|
|
Email
|
||
|
|
</Label>
|
||
|
|
<Input
|
||
|
|
autoComplete="email"
|
||
|
|
autoFocus
|
||
|
|
className="h-10 rounded-lg border-border/50 bg-muted/50 text-sm transition-colors focus:border-foreground/20 focus:bg-muted"
|
||
|
|
defaultValue={defaultEmail}
|
||
|
|
id="email"
|
||
|
|
name="email"
|
||
|
|
placeholder="you@someo.ne"
|
||
|
|
required
|
||
|
|
type="email"
|
||
|
|
/>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<div className="flex flex-col gap-2">
|
||
|
|
<Label className="font-normal text-muted-foreground" htmlFor="password">
|
||
|
|
Password
|
||
|
|
</Label>
|
||
|
|
<Input
|
||
|
|
className="h-10 rounded-lg border-border/50 bg-muted/50 text-sm transition-colors focus:border-foreground/20 focus:bg-muted"
|
||
|
|
id="password"
|
||
|
|
name="password"
|
||
|
|
placeholder="••••••••"
|
||
|
|
required
|
||
|
|
type="password"
|
||
|
|
/>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
{children}
|
||
|
|
</Form>
|
||
|
|
);
|
||
|
|
}
|