HTML JavaScript React Next.js Vue Nuxt Astro Svelte
< div class = "flex w-full min-w-0 flex-col gap-4 overflow-hidden rounded-xl bg-white py-4 font-sans text-sm text-zinc-900 ring-1 ring-zinc-200" >
< div class = "grid auto-rows-min items-center justify-items-center gap-2 px-4 pb-4 text-center" >
< span class = "mb-3 inline-flex items-center gap-2 sm:mb-4" >
< img src = "/brand/icon.svg" alt = "" width = "28" height = "28" class = "shrink-0" />
< span class = "text-base font-semibold tracking-tight text-zinc-900" > FormsReach </ span >
</ span >
< h2 class = "font-sans text-base font-semibold leading-snug text-zinc-900" > Create your account </ h2 >
< p class = "px-1 text-balance text-sm text-zinc-500" > Start collecting form submissions in minutes. </ p >
</ div >
< div class = "min-w-0 px-4" >
< form method = "post" action = "#" class = "flex min-w-0 flex-col gap-4 font-sans" >
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "fullName" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Name < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "text" id = "fullName" name = "fullName" required placeholder = "Jane Doe" autocomplete = "name" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "email" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Email < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "email" id = "email" name = "email" required placeholder = "you@example.com" autocomplete = "email" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "password" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Password < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "password" id = "password" name = "password" required placeholder = "At least 8 characters" autocomplete = "new-password" minlength = "8" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< button type = "submit" class = "inline-flex h-10 w-full shrink-0 items-center justify-center rounded-lg border border-transparent bg-[#25d366] px-3.5 text-sm font-semibold text-[#04150c] transition-[background-color,transform] duration-150 outline-none hover:bg-[#3ae27c] focus-visible:ring-[3px] focus-visible:ring-[#25d366]/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-65 sm:h-9" > Sign up </ button >
</ form >
</ div >
< div class = "flex flex-wrap items-center justify-center gap-x-1 rounded-b-xl border-t border-zinc-100 bg-zinc-50 px-4 py-4 text-center text-sm text-zinc-500" >
< span > Already have an account? </ span >
< a href = "#" class = "text-zinc-900 hover:underline" > Sign in </ a >
</ div >
</ div >
<div class="flex w-full min-w-0 flex-col gap-4 overflow-hidden rounded-xl bg-white py-4 font-sans text-sm text-zinc-900 ring-1 ring-zinc-200">
<div class="grid auto-rows-min items-center justify-items-center gap-2 px-4 pb-4 text-center">
<span class="mb-3 inline-flex items-center gap-2 sm:mb-4">
<img src="/brand/icon.svg" alt="" width="28" height="28" class="shrink-0" />
<span class="text-base font-semibold tracking-tight text-zinc-900">FormsReach</span>
</span>
<h2 class="font-sans text-base font-semibold leading-snug text-zinc-900">Create your account</h2>
<p class="px-1 text-balance text-sm text-zinc-500">Start collecting form submissions in minutes.</p>
</div>
<div class="min-w-0 px-4">
<form method="post" action="#" class="flex min-w-0 flex-col gap-4 font-sans">
<div class="flex min-w-0 flex-col gap-2">
<label for="fullName" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Name<span class="ml-0.5 text-red-500">*</span></label>
<input type="text" id="fullName" name="fullName" required placeholder="Jane Doe" autocomplete="name" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<div class="flex min-w-0 flex-col gap-2">
<label for="email" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Email<span class="ml-0.5 text-red-500">*</span></label>
<input type="email" id="email" name="email" required placeholder="you@example.com" autocomplete="email" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<div class="flex min-w-0 flex-col gap-2">
<label for="password" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Password<span class="ml-0.5 text-red-500">*</span></label>
<input type="password" id="password" name="password" required placeholder="At least 8 characters" autocomplete="new-password" minlength="8" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<button type="submit" class="inline-flex h-10 w-full shrink-0 items-center justify-center rounded-lg border border-transparent bg-[#25d366] px-3.5 text-sm font-semibold text-[#04150c] transition-[background-color,transform] duration-150 outline-none hover:bg-[#3ae27c] focus-visible:ring-[3px] focus-visible:ring-[#25d366]/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-65 sm:h-9">Sign up</button>
</form>
</div>
<div class="flex flex-wrap items-center justify-center gap-x-1 rounded-b-xl border-t border-zinc-100 bg-zinc-50 px-4 py-4 text-center text-sm text-zinc-500">
<span>Already have an account?</span>
<a href="#" class="text-zinc-900 hover:underline">Sign in</a>
</div>
</div>
< div class = "flex w-full min-w-0 flex-col gap-4 overflow-hidden rounded-xl bg-white py-4 font-sans text-sm text-zinc-900 ring-1 ring-zinc-200" >
< div class = "grid auto-rows-min items-center justify-items-center gap-2 px-4 pb-4 text-center" >
< span class = "mb-3 inline-flex items-center gap-2 sm:mb-4" >
< img src = "/brand/icon.svg" alt = "" width = "28" height = "28" class = "shrink-0" />
< span class = "text-base font-semibold tracking-tight text-zinc-900" > FormsReach </ span >
</ span >
< h2 class = "font-sans text-base font-semibold leading-snug text-zinc-900" > Create your account </ h2 >
< p class = "px-1 text-balance text-sm text-zinc-500" > Start collecting form submissions in minutes. </ p >
</ div >
< div class = "min-w-0 px-4" >
< form id = "signup-form" method = "post" action = "#" class = "flex min-w-0 flex-col gap-4 font-sans" >
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "fullName" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Name < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "text" id = "fullName" name = "fullName" required placeholder = "Jane Doe" autocomplete = "name" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "email" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Email < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "email" id = "email" name = "email" required placeholder = "you@example.com" autocomplete = "email" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "password" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Password < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "password" id = "password" name = "password" required placeholder = "At least 8 characters" autocomplete = "new-password" minlength = "8" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< button type = "submit" class = "inline-flex h-10 w-full shrink-0 items-center justify-center rounded-lg border border-transparent bg-[#25d366] px-3.5 text-sm font-semibold text-[#04150c] transition-[background-color,transform] duration-150 outline-none hover:bg-[#3ae27c] focus-visible:ring-[3px] focus-visible:ring-[#25d366]/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-65 sm:h-9" > Sign up </ button >
</ form >
</ div >
< div class = "flex flex-wrap items-center justify-center gap-x-1 rounded-b-xl border-t border-zinc-100 bg-zinc-50 px-4 py-4 text-center text-sm text-zinc-500" >
< span > Already have an account? </ span >
< a href = "#" class = "text-zinc-900 hover:underline" > Sign in </ a >
</ div >
</ div >
< script >
document . getElementById ( 'signup-form' ) ? . addEventListener ( 'submit' , ( event ) = > {
event . preventDefault ( ) ;
const data = new FormData ( event . currentTarget ) ;
// Handle form data (fetch, auth API, etc.)
console . log ( Object . fromEntries ( data . entries ( ) ) ) ;
} ) ;
</ script >
<div class="flex w-full min-w-0 flex-col gap-4 overflow-hidden rounded-xl bg-white py-4 font-sans text-sm text-zinc-900 ring-1 ring-zinc-200">
<div class="grid auto-rows-min items-center justify-items-center gap-2 px-4 pb-4 text-center">
<span class="mb-3 inline-flex items-center gap-2 sm:mb-4">
<img src="/brand/icon.svg" alt="" width="28" height="28" class="shrink-0" />
<span class="text-base font-semibold tracking-tight text-zinc-900">FormsReach</span>
</span>
<h2 class="font-sans text-base font-semibold leading-snug text-zinc-900">Create your account</h2>
<p class="px-1 text-balance text-sm text-zinc-500">Start collecting form submissions in minutes.</p>
</div>
<div class="min-w-0 px-4">
<form id="signup-form" method="post" action="#" class="flex min-w-0 flex-col gap-4 font-sans">
<div class="flex min-w-0 flex-col gap-2">
<label for="fullName" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Name<span class="ml-0.5 text-red-500">*</span></label>
<input type="text" id="fullName" name="fullName" required placeholder="Jane Doe" autocomplete="name" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<div class="flex min-w-0 flex-col gap-2">
<label for="email" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Email<span class="ml-0.5 text-red-500">*</span></label>
<input type="email" id="email" name="email" required placeholder="you@example.com" autocomplete="email" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<div class="flex min-w-0 flex-col gap-2">
<label for="password" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Password<span class="ml-0.5 text-red-500">*</span></label>
<input type="password" id="password" name="password" required placeholder="At least 8 characters" autocomplete="new-password" minlength="8" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<button type="submit" class="inline-flex h-10 w-full shrink-0 items-center justify-center rounded-lg border border-transparent bg-[#25d366] px-3.5 text-sm font-semibold text-[#04150c] transition-[background-color,transform] duration-150 outline-none hover:bg-[#3ae27c] focus-visible:ring-[3px] focus-visible:ring-[#25d366]/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-65 sm:h-9">Sign up</button>
</form>
</div>
<div class="flex flex-wrap items-center justify-center gap-x-1 rounded-b-xl border-t border-zinc-100 bg-zinc-50 px-4 py-4 text-center text-sm text-zinc-500">
<span>Already have an account?</span>
<a href="#" class="text-zinc-900 hover:underline">Sign in</a>
</div>
</div>
<script>
document.getElementById('signup-form')?.addEventListener('submit', (event) => {
event.preventDefault();
const data = new FormData(event.currentTarget);
// Handle form data (fetch, auth API, etc.)
console.log(Object.fromEntries(data.entries()));
});
</script>
function SignupForm ( ) {
function handleSubmit ( event ) {
event . preventDefault ( ) ;
const data = new FormData ( event . currentTarget ) ;
// Handle form data (fetch, auth API, etc.)
console . log ( Object . fromEntries ( data . entries ( ) ) ) ;
}
return (
< div className = "flex w-full min-w-0 flex-col gap-4 overflow-hidden rounded-xl bg-white py-4 font-sans text-sm text-zinc-900 ring-1 ring-zinc-200" >
< div className = "grid auto-rows-min items-center justify-items-center gap-2 px-4 pb-4 text-center" >
< span className = "mb-3 inline-flex items-center gap-2 sm:mb-4" >
< img src = "/brand/icon.svg" alt = "" width = { 28 } height = { 28 } className = "shrink-0" />
< span className = "text-base font-semibold tracking-tight text-zinc-900" > FormsReach </ span >
</ span >
< h2 className = "font-sans text-base font-semibold leading-snug text-zinc-900" > Create your account </ h2 >
< p className = "px-1 text-balance text-sm text-zinc-500" > Start collecting form submissions in minutes. </ p >
</ div >
< div className = "min-w-0 px-4" >
< form onSubmit = { handleSubmit } className = "flex min-w-0 flex-col gap-4 font-sans" >
< div className = "flex min-w-0 flex-col gap-2" >
< label htmlFor = "fullName" className = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Name < span className = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "text" id = "fullName" name = "fullName" required placeholder = "Jane Doe" autocomplete = "name" className = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< div className = "flex min-w-0 flex-col gap-2" >
< label htmlFor = "email" className = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Email < span className = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "email" id = "email" name = "email" required placeholder = "you@example.com" autocomplete = "email" className = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< div className = "flex min-w-0 flex-col gap-2" >
< label htmlFor = "password" className = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Password < span className = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "password" id = "password" name = "password" required placeholder = "At least 8 characters" autocomplete = "new-password" minLength = "8" className = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< button type = "submit" className = "inline-flex h-10 w-full shrink-0 items-center justify-center rounded-lg border border-transparent bg-[#25d366] px-3.5 text-sm font-semibold text-[#04150c] transition-[background-color,transform] duration-150 outline-none hover:bg-[#3ae27c] focus-visible:ring-[3px] focus-visible:ring-[#25d366]/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-65 sm:h-9" >
Sign up
</ button >
</ form >
</ div >
< div className = "flex flex-wrap items-center justify-center gap-x-1 rounded-b-xl border-t border-zinc-100 bg-zinc-50 px-4 py-4 text-center text-sm text-zinc-500" >
< span > Already have an account? </ span >
< a href = "#" className = "text-zinc-900 hover:underline" > Sign in </ a >
</ div >
</ div >
) ;
}
function SignupForm() {
function handleSubmit(event) {
event.preventDefault();
const data = new FormData(event.currentTarget);
// Handle form data (fetch, auth API, etc.)
console.log(Object.fromEntries(data.entries()));
}
return (
<div className="flex w-full min-w-0 flex-col gap-4 overflow-hidden rounded-xl bg-white py-4 font-sans text-sm text-zinc-900 ring-1 ring-zinc-200">
<div className="grid auto-rows-min items-center justify-items-center gap-2 px-4 pb-4 text-center">
<span className="mb-3 inline-flex items-center gap-2 sm:mb-4">
<img src="/brand/icon.svg" alt="" width={28} height={28} className="shrink-0" />
<span className="text-base font-semibold tracking-tight text-zinc-900">FormsReach</span>
</span>
<h2 className="font-sans text-base font-semibold leading-snug text-zinc-900">Create your account</h2>
<p className="px-1 text-balance text-sm text-zinc-500">Start collecting form submissions in minutes.</p>
</div>
<div className="min-w-0 px-4">
<form onSubmit={handleSubmit} className="flex min-w-0 flex-col gap-4 font-sans">
<div className="flex min-w-0 flex-col gap-2">
<label htmlFor="fullName" className="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Name<span className="ml-0.5 text-red-500">*</span></label>
<input type="text" id="fullName" name="fullName" required placeholder="Jane Doe" autocomplete="name" className="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<div className="flex min-w-0 flex-col gap-2">
<label htmlFor="email" className="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Email<span className="ml-0.5 text-red-500">*</span></label>
<input type="email" id="email" name="email" required placeholder="you@example.com" autocomplete="email" className="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<div className="flex min-w-0 flex-col gap-2">
<label htmlFor="password" className="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Password<span className="ml-0.5 text-red-500">*</span></label>
<input type="password" id="password" name="password" required placeholder="At least 8 characters" autocomplete="new-password" minLength="8" className="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<button type="submit" className="inline-flex h-10 w-full shrink-0 items-center justify-center rounded-lg border border-transparent bg-[#25d366] px-3.5 text-sm font-semibold text-[#04150c] transition-[background-color,transform] duration-150 outline-none hover:bg-[#3ae27c] focus-visible:ring-[3px] focus-visible:ring-[#25d366]/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-65 sm:h-9">
Sign up
</button>
</form>
</div>
<div className="flex flex-wrap items-center justify-center gap-x-1 rounded-b-xl border-t border-zinc-100 bg-zinc-50 px-4 py-4 text-center text-sm text-zinc-500">
<span>Already have an account?</span>
<a href="#" className="text-zinc-900 hover:underline">Sign in</a>
</div>
</div>
);
}
'use client' ;
export default function SignupForm ( ) {
function handleSubmit ( event ) {
event . preventDefault ( ) ;
const data = new FormData ( event . currentTarget ) ;
// Handle form data (fetch, auth API, etc.)
console . log ( Object . fromEntries ( data . entries ( ) ) ) ;
}
return (
< div className = "flex w-full min-w-0 flex-col gap-4 overflow-hidden rounded-xl bg-white py-4 font-sans text-sm text-zinc-900 ring-1 ring-zinc-200" >
< div className = "grid auto-rows-min items-center justify-items-center gap-2 px-4 pb-4 text-center" >
< span className = "mb-3 inline-flex items-center gap-2 sm:mb-4" >
< img src = "/brand/icon.svg" alt = "" width = { 28 } height = { 28 } className = "shrink-0" />
< span className = "text-base font-semibold tracking-tight text-zinc-900" > FormsReach </ span >
</ span >
< h2 className = "font-sans text-base font-semibold leading-snug text-zinc-900" > Create your account </ h2 >
< p className = "px-1 text-balance text-sm text-zinc-500" > Start collecting form submissions in minutes. </ p >
</ div >
< div className = "min-w-0 px-4" >
< form onSubmit = { handleSubmit } className = "flex min-w-0 flex-col gap-4 font-sans" >
< div className = "flex min-w-0 flex-col gap-2" >
< label htmlFor = "fullName" className = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Name < span className = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "text" id = "fullName" name = "fullName" required placeholder = "Jane Doe" autocomplete = "name" className = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< div className = "flex min-w-0 flex-col gap-2" >
< label htmlFor = "email" className = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Email < span className = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "email" id = "email" name = "email" required placeholder = "you@example.com" autocomplete = "email" className = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< div className = "flex min-w-0 flex-col gap-2" >
< label htmlFor = "password" className = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Password < span className = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "password" id = "password" name = "password" required placeholder = "At least 8 characters" autocomplete = "new-password" minLength = "8" className = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< button type = "submit" className = "inline-flex h-10 w-full shrink-0 items-center justify-center rounded-lg border border-transparent bg-[#25d366] px-3.5 text-sm font-semibold text-[#04150c] transition-[background-color,transform] duration-150 outline-none hover:bg-[#3ae27c] focus-visible:ring-[3px] focus-visible:ring-[#25d366]/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-65 sm:h-9" >
Sign up
</ button >
</ form >
</ div >
< div className = "flex flex-wrap items-center justify-center gap-x-1 rounded-b-xl border-t border-zinc-100 bg-zinc-50 px-4 py-4 text-center text-sm text-zinc-500" >
< span > Already have an account? </ span >
< a href = "#" className = "text-zinc-900 hover:underline" > Sign in </ a >
</ div >
</ div >
) ;
}
'use client';
export default function SignupForm() {
function handleSubmit(event) {
event.preventDefault();
const data = new FormData(event.currentTarget);
// Handle form data (fetch, auth API, etc.)
console.log(Object.fromEntries(data.entries()));
}
return (
<div className="flex w-full min-w-0 flex-col gap-4 overflow-hidden rounded-xl bg-white py-4 font-sans text-sm text-zinc-900 ring-1 ring-zinc-200">
<div className="grid auto-rows-min items-center justify-items-center gap-2 px-4 pb-4 text-center">
<span className="mb-3 inline-flex items-center gap-2 sm:mb-4">
<img src="/brand/icon.svg" alt="" width={28} height={28} className="shrink-0" />
<span className="text-base font-semibold tracking-tight text-zinc-900">FormsReach</span>
</span>
<h2 className="font-sans text-base font-semibold leading-snug text-zinc-900">Create your account</h2>
<p className="px-1 text-balance text-sm text-zinc-500">Start collecting form submissions in minutes.</p>
</div>
<div className="min-w-0 px-4">
<form onSubmit={handleSubmit} className="flex min-w-0 flex-col gap-4 font-sans">
<div className="flex min-w-0 flex-col gap-2">
<label htmlFor="fullName" className="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Name<span className="ml-0.5 text-red-500">*</span></label>
<input type="text" id="fullName" name="fullName" required placeholder="Jane Doe" autocomplete="name" className="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<div className="flex min-w-0 flex-col gap-2">
<label htmlFor="email" className="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Email<span className="ml-0.5 text-red-500">*</span></label>
<input type="email" id="email" name="email" required placeholder="you@example.com" autocomplete="email" className="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<div className="flex min-w-0 flex-col gap-2">
<label htmlFor="password" className="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Password<span className="ml-0.5 text-red-500">*</span></label>
<input type="password" id="password" name="password" required placeholder="At least 8 characters" autocomplete="new-password" minLength="8" className="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<button type="submit" className="inline-flex h-10 w-full shrink-0 items-center justify-center rounded-lg border border-transparent bg-[#25d366] px-3.5 text-sm font-semibold text-[#04150c] transition-[background-color,transform] duration-150 outline-none hover:bg-[#3ae27c] focus-visible:ring-[3px] focus-visible:ring-[#25d366]/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-65 sm:h-9">
Sign up
</button>
</form>
</div>
<div className="flex flex-wrap items-center justify-center gap-x-1 rounded-b-xl border-t border-zinc-100 bg-zinc-50 px-4 py-4 text-center text-sm text-zinc-500">
<span>Already have an account?</span>
<a href="#" className="text-zinc-900 hover:underline">Sign in</a>
</div>
</div>
);
}
< script setup >
function onSubmit ( event ) {
const data = new FormData ( event . currentTarget ) ;
// Handle form data (fetch, auth API, etc.)
console . log ( Object . fromEntries ( data . entries ( ) ) ) ;
}
</ script >
< template >
< div class = "flex w-full min-w-0 flex-col gap-4 overflow-hidden rounded-xl bg-white py-4 font-sans text-sm text-zinc-900 ring-1 ring-zinc-200" >
< div class = "grid auto-rows-min items-center justify-items-center gap-2 px-4 pb-4 text-center" >
< span class = "mb-3 inline-flex items-center gap-2 sm:mb-4" >
< img src = "/brand/icon.svg" alt = "" width = "28" height = "28" class = "shrink-0" />
< span class = "text-base font-semibold tracking-tight text-zinc-900" > FormsReach </ span >
</ span >
< h2 class = "font-sans text-base font-semibold leading-snug text-zinc-900" > Create your account </ h2 >
< p class = "px-1 text-balance text-sm text-zinc-500" > Start collecting form submissions in minutes. </ p >
</ div >
< div class = "min-w-0 px-4" >
< form class = "flex min-w-0 flex-col gap-4 font-sans" @submit.prevent = "onSubmit" >
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "fullName" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Name < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "text" id = "fullName" name = "fullName" required placeholder = "Jane Doe" autocomplete = "name" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "email" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Email < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "email" id = "email" name = "email" required placeholder = "you@example.com" autocomplete = "email" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "password" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Password < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "password" id = "password" name = "password" required placeholder = "At least 8 characters" autocomplete = "new-password" minlength = "8" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< button type = "submit" class = "inline-flex h-10 w-full shrink-0 items-center justify-center rounded-lg border border-transparent bg-[#25d366] px-3.5 text-sm font-semibold text-[#04150c] transition-[background-color,transform] duration-150 outline-none hover:bg-[#3ae27c] focus-visible:ring-[3px] focus-visible:ring-[#25d366]/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-65 sm:h-9" >
Sign up
</ button >
</ form >
</ div >
< div class = "flex flex-wrap items-center justify-center gap-x-1 rounded-b-xl border-t border-zinc-100 bg-zinc-50 px-4 py-4 text-center text-sm text-zinc-500" >
< span > Already have an account? </ span >
< a href = "#" class = "text-zinc-900 hover:underline" > Sign in </ a >
</ div >
</ div >
</ template >
<script setup>
function onSubmit(event) {
const data = new FormData(event.currentTarget);
// Handle form data (fetch, auth API, etc.)
console.log(Object.fromEntries(data.entries()));
}
</script>
<template>
<div class="flex w-full min-w-0 flex-col gap-4 overflow-hidden rounded-xl bg-white py-4 font-sans text-sm text-zinc-900 ring-1 ring-zinc-200">
<div class="grid auto-rows-min items-center justify-items-center gap-2 px-4 pb-4 text-center">
<span class="mb-3 inline-flex items-center gap-2 sm:mb-4">
<img src="/brand/icon.svg" alt="" width="28" height="28" class="shrink-0" />
<span class="text-base font-semibold tracking-tight text-zinc-900">FormsReach</span>
</span>
<h2 class="font-sans text-base font-semibold leading-snug text-zinc-900">Create your account</h2>
<p class="px-1 text-balance text-sm text-zinc-500">Start collecting form submissions in minutes.</p>
</div>
<div class="min-w-0 px-4">
<form class="flex min-w-0 flex-col gap-4 font-sans" @submit.prevent="onSubmit">
<div class="flex min-w-0 flex-col gap-2">
<label for="fullName" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Name<span class="ml-0.5 text-red-500">*</span></label>
<input type="text" id="fullName" name="fullName" required placeholder="Jane Doe" autocomplete="name" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<div class="flex min-w-0 flex-col gap-2">
<label for="email" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Email<span class="ml-0.5 text-red-500">*</span></label>
<input type="email" id="email" name="email" required placeholder="you@example.com" autocomplete="email" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<div class="flex min-w-0 flex-col gap-2">
<label for="password" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Password<span class="ml-0.5 text-red-500">*</span></label>
<input type="password" id="password" name="password" required placeholder="At least 8 characters" autocomplete="new-password" minlength="8" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<button type="submit" class="inline-flex h-10 w-full shrink-0 items-center justify-center rounded-lg border border-transparent bg-[#25d366] px-3.5 text-sm font-semibold text-[#04150c] transition-[background-color,transform] duration-150 outline-none hover:bg-[#3ae27c] focus-visible:ring-[3px] focus-visible:ring-[#25d366]/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-65 sm:h-9">
Sign up
</button>
</form>
</div>
<div class="flex flex-wrap items-center justify-center gap-x-1 rounded-b-xl border-t border-zinc-100 bg-zinc-50 px-4 py-4 text-center text-sm text-zinc-500">
<span>Already have an account?</span>
<a href="#" class="text-zinc-900 hover:underline">Sign in</a>
</div>
</div>
</template>
< script setup >
function onSubmit ( event ) {
const data = new FormData ( event . currentTarget ) ;
// Handle form data (fetch, auth API, etc.)
console . log ( Object . fromEntries ( data . entries ( ) ) ) ;
}
</ script >
< template >
< div class = "flex w-full min-w-0 flex-col gap-4 overflow-hidden rounded-xl bg-white py-4 font-sans text-sm text-zinc-900 ring-1 ring-zinc-200" >
< div class = "grid auto-rows-min items-center justify-items-center gap-2 px-4 pb-4 text-center" >
< span class = "mb-3 inline-flex items-center gap-2 sm:mb-4" >
< img src = "/brand/icon.svg" alt = "" width = "28" height = "28" class = "shrink-0" />
< span class = "text-base font-semibold tracking-tight text-zinc-900" > FormsReach </ span >
</ span >
< h2 class = "font-sans text-base font-semibold leading-snug text-zinc-900" > Create your account </ h2 >
< p class = "px-1 text-balance text-sm text-zinc-500" > Start collecting form submissions in minutes. </ p >
</ div >
< div class = "min-w-0 px-4" >
< form class = "flex min-w-0 flex-col gap-4 font-sans" @submit.prevent = "onSubmit" >
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "fullName" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Name < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "text" id = "fullName" name = "fullName" required placeholder = "Jane Doe" autocomplete = "name" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "email" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Email < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "email" id = "email" name = "email" required placeholder = "you@example.com" autocomplete = "email" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "password" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Password < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "password" id = "password" name = "password" required placeholder = "At least 8 characters" autocomplete = "new-password" minlength = "8" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< button type = "submit" class = "inline-flex h-10 w-full shrink-0 items-center justify-center rounded-lg border border-transparent bg-[#25d366] px-3.5 text-sm font-semibold text-[#04150c] transition-[background-color,transform] duration-150 outline-none hover:bg-[#3ae27c] focus-visible:ring-[3px] focus-visible:ring-[#25d366]/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-65 sm:h-9" >
Sign up
</ button >
</ form >
</ div >
< div class = "flex flex-wrap items-center justify-center gap-x-1 rounded-b-xl border-t border-zinc-100 bg-zinc-50 px-4 py-4 text-center text-sm text-zinc-500" >
< span > Already have an account? </ span >
< a href = "#" class = "text-zinc-900 hover:underline" > Sign in </ a >
</ div >
</ div >
</ template >
<script setup>
function onSubmit(event) {
const data = new FormData(event.currentTarget);
// Handle form data (fetch, auth API, etc.)
console.log(Object.fromEntries(data.entries()));
}
</script>
<template>
<div class="flex w-full min-w-0 flex-col gap-4 overflow-hidden rounded-xl bg-white py-4 font-sans text-sm text-zinc-900 ring-1 ring-zinc-200">
<div class="grid auto-rows-min items-center justify-items-center gap-2 px-4 pb-4 text-center">
<span class="mb-3 inline-flex items-center gap-2 sm:mb-4">
<img src="/brand/icon.svg" alt="" width="28" height="28" class="shrink-0" />
<span class="text-base font-semibold tracking-tight text-zinc-900">FormsReach</span>
</span>
<h2 class="font-sans text-base font-semibold leading-snug text-zinc-900">Create your account</h2>
<p class="px-1 text-balance text-sm text-zinc-500">Start collecting form submissions in minutes.</p>
</div>
<div class="min-w-0 px-4">
<form class="flex min-w-0 flex-col gap-4 font-sans" @submit.prevent="onSubmit">
<div class="flex min-w-0 flex-col gap-2">
<label for="fullName" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Name<span class="ml-0.5 text-red-500">*</span></label>
<input type="text" id="fullName" name="fullName" required placeholder="Jane Doe" autocomplete="name" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<div class="flex min-w-0 flex-col gap-2">
<label for="email" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Email<span class="ml-0.5 text-red-500">*</span></label>
<input type="email" id="email" name="email" required placeholder="you@example.com" autocomplete="email" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<div class="flex min-w-0 flex-col gap-2">
<label for="password" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Password<span class="ml-0.5 text-red-500">*</span></label>
<input type="password" id="password" name="password" required placeholder="At least 8 characters" autocomplete="new-password" minlength="8" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<button type="submit" class="inline-flex h-10 w-full shrink-0 items-center justify-center rounded-lg border border-transparent bg-[#25d366] px-3.5 text-sm font-semibold text-[#04150c] transition-[background-color,transform] duration-150 outline-none hover:bg-[#3ae27c] focus-visible:ring-[3px] focus-visible:ring-[#25d366]/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-65 sm:h-9">
Sign up
</button>
</form>
</div>
<div class="flex flex-wrap items-center justify-center gap-x-1 rounded-b-xl border-t border-zinc-100 bg-zinc-50 px-4 py-4 text-center text-sm text-zinc-500">
<span>Already have an account?</span>
<a href="#" class="text-zinc-900 hover:underline">Sign in</a>
</div>
</div>
</template>
---
// src/components/SignupForm.astro
---
< div class = "flex w-full min-w-0 flex-col gap-4 overflow-hidden rounded-xl bg-white py-4 font-sans text-sm text-zinc-900 ring-1 ring-zinc-200" >
< div class = "grid auto-rows-min items-center justify-items-center gap-2 px-4 pb-4 text-center" >
< span class = "mb-3 inline-flex items-center gap-2 sm:mb-4" >
< img src = "/brand/icon.svg" alt = "" width = "28" height = "28" class = "shrink-0" />
< span class = "text-base font-semibold tracking-tight text-zinc-900" > FormsReach </ span >
</ span >
< h2 class = "font-sans text-base font-semibold leading-snug text-zinc-900" > Create your account </ h2 >
< p class = "px-1 text-balance text-sm text-zinc-500" > Start collecting form submissions in minutes. </ p >
</ div >
< div class = "min-w-0 px-4" >
< form method = "post" action = "#" class = "flex min-w-0 flex-col gap-4 font-sans" >
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "fullName" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Name < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "text" id = "fullName" name = "fullName" required placeholder = "Jane Doe" autocomplete = "name" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "email" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Email < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "email" id = "email" name = "email" required placeholder = "you@example.com" autocomplete = "email" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "password" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Password < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "password" id = "password" name = "password" required placeholder = "At least 8 characters" autocomplete = "new-password" minlength = "8" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< button type = "submit" class = "inline-flex h-10 w-full shrink-0 items-center justify-center rounded-lg border border-transparent bg-[#25d366] px-3.5 text-sm font-semibold text-[#04150c] transition-[background-color,transform] duration-150 outline-none hover:bg-[#3ae27c] focus-visible:ring-[3px] focus-visible:ring-[#25d366]/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-65 sm:h-9" > Sign up </ button >
</ form >
</ div >
< div class = "flex flex-wrap items-center justify-center gap-x-1 rounded-b-xl border-t border-zinc-100 bg-zinc-50 px-4 py-4 text-center text-sm text-zinc-500" >
< span > Already have an account? </ span >
< a href = "#" class = "text-zinc-900 hover:underline" > Sign in </ a >
</ div >
</ div >
---
// src/components/SignupForm.astro
---
<div class="flex w-full min-w-0 flex-col gap-4 overflow-hidden rounded-xl bg-white py-4 font-sans text-sm text-zinc-900 ring-1 ring-zinc-200">
<div class="grid auto-rows-min items-center justify-items-center gap-2 px-4 pb-4 text-center">
<span class="mb-3 inline-flex items-center gap-2 sm:mb-4">
<img src="/brand/icon.svg" alt="" width="28" height="28" class="shrink-0" />
<span class="text-base font-semibold tracking-tight text-zinc-900">FormsReach</span>
</span>
<h2 class="font-sans text-base font-semibold leading-snug text-zinc-900">Create your account</h2>
<p class="px-1 text-balance text-sm text-zinc-500">Start collecting form submissions in minutes.</p>
</div>
<div class="min-w-0 px-4">
<form method="post" action="#" class="flex min-w-0 flex-col gap-4 font-sans">
<div class="flex min-w-0 flex-col gap-2">
<label for="fullName" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Name<span class="ml-0.5 text-red-500">*</span></label>
<input type="text" id="fullName" name="fullName" required placeholder="Jane Doe" autocomplete="name" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<div class="flex min-w-0 flex-col gap-2">
<label for="email" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Email<span class="ml-0.5 text-red-500">*</span></label>
<input type="email" id="email" name="email" required placeholder="you@example.com" autocomplete="email" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<div class="flex min-w-0 flex-col gap-2">
<label for="password" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Password<span class="ml-0.5 text-red-500">*</span></label>
<input type="password" id="password" name="password" required placeholder="At least 8 characters" autocomplete="new-password" minlength="8" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<button type="submit" class="inline-flex h-10 w-full shrink-0 items-center justify-center rounded-lg border border-transparent bg-[#25d366] px-3.5 text-sm font-semibold text-[#04150c] transition-[background-color,transform] duration-150 outline-none hover:bg-[#3ae27c] focus-visible:ring-[3px] focus-visible:ring-[#25d366]/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-65 sm:h-9">Sign up</button>
</form>
</div>
<div class="flex flex-wrap items-center justify-center gap-x-1 rounded-b-xl border-t border-zinc-100 bg-zinc-50 px-4 py-4 text-center text-sm text-zinc-500">
<span>Already have an account?</span>
<a href="#" class="text-zinc-900 hover:underline">Sign in</a>
</div>
</div>
< script >
function onSubmit ( event ) {
const data = new FormData ( event . currentTarget ) ;
// Handle form data (fetch, auth API, etc.)
console . log ( Object . fromEntries ( data . entries ( ) ) ) ;
}
</ script >
< div class = "flex w-full min-w-0 flex-col gap-4 overflow-hidden rounded-xl bg-white py-4 font-sans text-sm text-zinc-900 ring-1 ring-zinc-200" >
< div class = "grid auto-rows-min items-center justify-items-center gap-2 px-4 pb-4 text-center" >
< span class = "mb-3 inline-flex items-center gap-2 sm:mb-4" >
< img src = "/brand/icon.svg" alt = "" width = "28" height = "28" class = "shrink-0" />
< span class = "text-base font-semibold tracking-tight text-zinc-900" > FormsReach </ span >
</ span >
< h2 class = "font-sans text-base font-semibold leading-snug text-zinc-900" > Create your account </ h2 >
< p class = "px-1 text-balance text-sm text-zinc-500" > Start collecting form submissions in minutes. </ p >
</ div >
< div class = "min-w-0 px-4" >
< form method = "post" class = "flex min-w-0 flex-col gap-4 font-sans" on:submit |preventDefault={onSubmit}>
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "fullName" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Name < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "text" id = "fullName" name = "fullName" required placeholder = "Jane Doe" autocomplete = "name" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "email" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Email < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "email" id = "email" name = "email" required placeholder = "you@example.com" autocomplete = "email" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< div class = "flex min-w-0 flex-col gap-2" >
< label for = "password" class = "inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none" > Password < span class = "ml-0.5 text-red-500" > * </ span > </ label >
< input type = "password" id = "password" name = "password" required placeholder = "At least 8 characters" autocomplete = "new-password" minlength = "8" class = "h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</ div >
< button type = "submit" class = "inline-flex h-10 w-full shrink-0 items-center justify-center rounded-lg border border-transparent bg-[#25d366] px-3.5 text-sm font-semibold text-[#04150c] transition-[background-color,transform] duration-150 outline-none hover:bg-[#3ae27c] focus-visible:ring-[3px] focus-visible:ring-[#25d366]/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-65 sm:h-9" > Sign up </ button >
</ form >
</ div >
< div class = "flex flex-wrap items-center justify-center gap-x-1 rounded-b-xl border-t border-zinc-100 bg-zinc-50 px-4 py-4 text-center text-sm text-zinc-500" >
< span > Already have an account? </ span >
< a href = "#" class = "text-zinc-900 hover:underline" > Sign in </ a >
</ div >
</ div >
<script>
function onSubmit(event) {
const data = new FormData(event.currentTarget);
// Handle form data (fetch, auth API, etc.)
console.log(Object.fromEntries(data.entries()));
}
</script>
<div class="flex w-full min-w-0 flex-col gap-4 overflow-hidden rounded-xl bg-white py-4 font-sans text-sm text-zinc-900 ring-1 ring-zinc-200">
<div class="grid auto-rows-min items-center justify-items-center gap-2 px-4 pb-4 text-center">
<span class="mb-3 inline-flex items-center gap-2 sm:mb-4">
<img src="/brand/icon.svg" alt="" width="28" height="28" class="shrink-0" />
<span class="text-base font-semibold tracking-tight text-zinc-900">FormsReach</span>
</span>
<h2 class="font-sans text-base font-semibold leading-snug text-zinc-900">Create your account</h2>
<p class="px-1 text-balance text-sm text-zinc-500">Start collecting form submissions in minutes.</p>
</div>
<div class="min-w-0 px-4">
<form method="post" class="flex min-w-0 flex-col gap-4 font-sans" on:submit|preventDefault={onSubmit}>
<div class="flex min-w-0 flex-col gap-2">
<label for="fullName" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Name<span class="ml-0.5 text-red-500">*</span></label>
<input type="text" id="fullName" name="fullName" required placeholder="Jane Doe" autocomplete="name" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<div class="flex min-w-0 flex-col gap-2">
<label for="email" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Email<span class="ml-0.5 text-red-500">*</span></label>
<input type="email" id="email" name="email" required placeholder="you@example.com" autocomplete="email" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<div class="flex min-w-0 flex-col gap-2">
<label for="password" class="inline-flex items-center text-sm leading-none font-medium text-zinc-900 select-none">Password<span class="ml-0.5 text-red-500">*</span></label>
<input type="password" id="password" name="password" required placeholder="At least 8 characters" autocomplete="new-password" minlength="8" class="h-10 w-full min-w-0 rounded-lg border border-zinc-300 bg-white px-2.5 py-1 text-base text-zinc-900 outline-none transition-colors placeholder:text-sm placeholder:text-zinc-400 hover:border-zinc-400 focus-visible:border-[#25d366]/65 focus-visible:ring-[3px] focus-visible:ring-[#25d366]/15 md:h-8 md:text-sm" />
</div>
<button type="submit" class="inline-flex h-10 w-full shrink-0 items-center justify-center rounded-lg border border-transparent bg-[#25d366] px-3.5 text-sm font-semibold text-[#04150c] transition-[background-color,transform] duration-150 outline-none hover:bg-[#3ae27c] focus-visible:ring-[3px] focus-visible:ring-[#25d366]/50 active:scale-[0.98] disabled:pointer-events-none disabled:opacity-65 sm:h-9">Sign up</button>
</form>
</div>
<div class="flex flex-wrap items-center justify-center gap-x-1 rounded-b-xl border-t border-zinc-100 bg-zinc-50 px-4 py-4 text-center text-sm text-zinc-500">
<span>Already have an account?</span>
<a href="#" class="text-zinc-900 hover:underline">Sign in</a>
</div>
</div>