embedingHF's picture
Upload folder using huggingface_hub
84fc8e7 verified
Raw
History Blame Contribute Delete
12.5 kB
import { useState, ChangeEvent, FormEvent } from "react";
import { Mail, MessageSquare, Phone, Send, CheckCircle, AlertTriangle } from "lucide-react";
import { motion } from "motion/react";
export default function Contact() {
const [formData, setFormData] = useState({
name: "",
email: "",
subject: "",
message: "",
});
const [formStatus, setFormStatus] = useState<"idle" | "submitting" | "success" | "error">("idle");
const [errorMessage, setErrorMessage] = useState("");
const handleChange = (e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {
setFormData({
...formData,
[e.target.name]: e.target.value,
});
};
const handleSubmit = async (e: FormEvent) => {
e.preventDefault();
if (!formData.name || !formData.email || !formData.message) {
setFormStatus("error");
setErrorMessage("Please complete all required fields.");
return;
}
setFormStatus("submitting");
try {
const response = await fetch("https://formspree.io/f/mojrrdov", {
method: "POST",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
},
body: JSON.stringify(formData),
});
if (response.ok) {
setFormStatus("success");
setFormData({ name: "", email: "", subject: "", message: "" });
} else {
setFormStatus("error");
setErrorMessage("An error occurred on the server. Please check your network and try again.");
}
} catch (err) {
setFormStatus("error");
setErrorMessage("Could not submit the form. Please check your connection or contact our support team.");
}
};
return (
<section id="contact" className="py-24 bg-gradient-to-b from-[#FAF9FE] to-white relative">
<div className="max-w-7xl mx-auto px-4 md:px-8 relative z-10">
{/* Header */}
<div className="text-center max-w-2xl mx-auto mb-16">
<span className="text-xs font-bold font-mono tracking-wider text-violet-600 uppercase bg-violet-50 px-3.5 py-1.5 rounded-full">
Get In Touch
</span>
<h2 className="font-display font-bold text-3xl sm:text-4xl text-slate-900 tracking-tight mt-4 mb-4">
Custom setup assist is{" "}
<span className="bg-gradient-to-r from-violet-600 to-indigo-600 bg-clip-text text-transparent">
one click away
</span>
</h2>
<p className="text-slate-500 text-sm md:text-base font-light">
Need support with custom scripting, configuration, or folder watcher automation? Message our core team immediately.
</p>
</div>
{/* Column breakdown */}
<div className="grid grid-cols-1 lg:grid-cols-12 gap-12 items-start" id="contact-panel-wrapper">
{/* Left Column - Contact Details */}
<div className="lg:col-span-5 space-y-6 text-left">
<h3 className="font-display font-semibold text-2xl text-slate-900 tracking-tight mb-4">
Direct Channels
</h3>
<p className="text-slate-500 text-sm font-light leading-relaxed mb-6">
Our support team answers personal emails and WhatsApp inquiries directly. Get prompt assistance with your offline integration.
</p>
<div className="space-y-4">
{/* WhatsApp Support */}
<a
href="https://wa.me/923034572298"
target="_blank"
rel="noopener noreferrer"
id="contact-whatsapp-direct-link"
className="flex items-start p-4 hover:bg-slate-50 border border-slate-100 rounded-2xl transition"
>
<div className="w-10 h-10 rounded-xl bg-emerald-50 text-emerald-600 flex items-center justify-center mr-4 flex-shrink-0 shadow-sm">
<Phone className="w-5 h-5" />
</div>
<div>
<h4 className="text-sm font-semibold text-slate-800">WhatsApp Instant Chat</h4>
<p className="text-xs text-slate-500 font-mono mt-0.5">+92 303 4572298</p>
<span className="inline-block text-[10px] font-bold text-emerald-600 font-mono mt-1 uppercase">
Answered in minutes
</span>
</div>
</a>
{/* Email Support */}
<a
href="mailto:bahaduralimunnabhai@gmail.com"
id="contact-email-direct-link"
className="flex items-start p-4 hover:bg-slate-50 border border-slate-100 rounded-2xl transition"
>
<div className="w-10 h-10 rounded-xl bg-violet-50 text-violet-600 flex items-center justify-center mr-4 flex-shrink-0 shadow-sm">
<Mail className="w-5 h-5" />
</div>
<div>
<h4 className="text-sm font-semibold text-slate-800">Secure Developer Mailbox</h4>
<p className="text-xs text-slate-500 font-mono mt-0.5">bahaduralimunnabhai@gmail.com</p>
<span className="inline-block text-[10px] font-bold text-violet-600 font-mono mt-1 uppercase">
Under 12hr Response SLA
</span>
</div>
</a>
{/* Developer Location / Core info */}
<div className="flex items-start p-4 bg-slate-50/50 border border-slate-100 rounded-2xl">
<div className="w-10 h-10 rounded-xl bg-white text-slate-500 flex items-center justify-center mr-4 flex-shrink-0 shadow-sm">
<MessageSquare className="w-4 h-4" />
</div>
<div>
<h4 className="text-sm font-semibold text-slate-800">Enterprise Configurations</h4>
<p className="text-xs text-slate-500 font-light mt-0.5">
For corporate deployment arrays, local security audits, or customized CLI wrappers.
</p>
</div>
</div>
</div>
</div>
{/* Right Column - Premium AJAX Formspree Card */}
<div className="lg:col-span-7 bg-white p-8 rounded-[24px] border border-slate-100 shadow-xl shadow-slate-100/30">
<form onSubmit={handleSubmit} className="space-y-5" id="formspree-contact-form">
<div className="grid grid-cols-1 sm:grid-cols-2 gap-5">
{/* Name */}
<div className="text-left">
<label htmlFor="form-name" className="block text-xs font-semibold text-slate-500 font-mono uppercase tracking-wider mb-2">
Your Name <span className="text-rose-500">*</span>
</label>
<input
type="text"
id="form-name"
name="name"
required
value={formData.name}
onChange={handleChange}
placeholder="E.g., Liam Carter"
className="w-full px-4 py-3 rounded-xl border border-slate-200/80 bg-slate-50/20 text-slate-800 text-sm focus:outline-none focus:ring-1 focus:ring-violet-500 focus:border-violet-500 focus:bg-white transition"
/>
</div>
{/* Email */}
<div className="text-left">
<label htmlFor="form-email" className="block text-xs font-semibold text-slate-500 font-mono uppercase tracking-wider mb-2">
Email Address <span className="text-rose-500">*</span>
</label>
<input
type="email"
id="form-email"
name="email"
required
value={formData.email}
onChange={handleChange}
placeholder="E.g., liam@corp.com"
className="w-full px-4 py-3 rounded-xl border border-slate-200/80 bg-slate-50/20 text-slate-800 text-sm focus:outline-none focus:ring-1 focus:ring-violet-500 focus:border-violet-500 focus:bg-white transition"
/>
</div>
</div>
{/* Subject */}
<div className="text-left">
<label htmlFor="form-subject" className="block text-xs font-semibold text-slate-500 font-mono uppercase tracking-wider mb-2">
Inquiry Subject
</label>
<input
type="text"
id="form-subject"
name="subject"
value={formData.subject}
onChange={handleChange}
placeholder="E.g., Format support setup or folder watchers"
className="w-full px-4 py-3 rounded-xl border border-slate-200/80 bg-slate-50/20 text-slate-800 text-sm focus:outline-none focus:ring-1 focus:ring-violet-500 focus:border-violet-500 focus:bg-white transition"
/>
</div>
{/* Message */}
<div className="text-left">
<label htmlFor="form-message" className="block text-xs font-semibold text-slate-500 font-mono uppercase tracking-wider mb-2">
Message Details <span className="text-rose-500">*</span>
</label>
<textarea
id="form-message"
name="message"
required
rows={4}
value={formData.message}
onChange={handleChange}
placeholder="How can we assist you?"
className="w-full px-4 py-3 rounded-xl border border-slate-200/80 bg-slate-50/20 text-slate-800 text-sm focus:outline-none focus:ring-1 focus:ring-violet-500 focus:border-violet-500 focus:bg-white transition resize-none"
/>
</div>
{/* Status Notifications */}
{formStatus === "success" && (
<div className="p-4 rounded-xl bg-emerald-50 border border-emerald-100 flex items-start text-left text-emerald-800 space-x-2.5">
<CheckCircle className="w-5 h-5 text-emerald-600 flex-shrink-0 mt-0.5" />
<div>
<h5 className="text-xs font-bold font-mono tracking-wider uppercase">Message Transmitted!</h5>
<p className="text-xs text-slate-650 mt-0.5">Thank you. Your request is in queue. Our support specialists will contact you very soon.</p>
</div>
</div>
)}
{formStatus === "error" && (
<div className="p-4 rounded-xl bg-rose-50 border border-rose-100 flex items-start text-left text-rose-800 space-x-2.5">
<AlertTriangle className="w-5 h-5 text-rose-600 flex-shrink-0 mt-0.5" />
<div>
<h5 className="text-xs font-bold font-mono tracking-wider uppercase">Missing Parameters</h5>
<p className="text-xs text-slate-650 mt-0.5">{errorMessage}</p>
</div>
</div>
)}
{/* Submit button */}
<button
type="submit"
disabled={formStatus === "submitting"}
id="contact-form-submit-btn"
className={`w-full py-4 rounded-xl font-semibold flex items-center justify-center space-x-2 border transition-all cursor-pointer ${
formStatus === "submitting"
? "bg-stone-100 text-slate-400 border-stone-100 cursor-not-allowed"
: "bg-slate-900 border-slate-900 text-white hover:bg-violet-600 hover:border-violet-600 shadow-md active:scale-98"
}`}
>
{formStatus === "submitting" ? (
<>
<span className="w-4 h-4 border-2 border-slate-400 border-t-slate-800 rounded-full animate-spin inline-block mr-2" />
<span>Engaging Formspree Gateway...</span>
</>
) : (
<>
<Send className="w-4 h-4" />
<span>Send Message Securely</span>
</>
)}
</button>
</form>
</div>
</div>
</div>
</section>
);
}