From 5e433248ffdd74060b4eed092e99eb258f2760a0 Mon Sep 17 00:00:00 2001 From: Cian Hughes Date: Sat, 11 Jan 2025 01:09:00 +0000 Subject: [PATCH] Added rough draft of contact page --- bun.lockb | Bin 112732 -> 113159 bytes package.json | 3 +- src/lib/components/ContactForm.svelte | 180 ++++++++++++++++++++++++++ src/lib/styles/ContactForm.scss | 64 +++++++++ src/routes/contact/+page.svelte | 33 ++++- src/routes/contact/ContactPage.scss | 48 +++++++ static/contact.webp | Bin 0 -> 17982 bytes 7 files changed, 326 insertions(+), 2 deletions(-) create mode 100644 src/lib/components/ContactForm.svelte create mode 100644 src/lib/styles/ContactForm.scss create mode 100644 src/routes/contact/ContactPage.scss create mode 100644 static/contact.webp diff --git a/bun.lockb b/bun.lockb index 60b3b28773f9640428eed920be6639d3a2ed4d0f..76aeb275d4bdcfce8791fa7732f30f17bef49157 100755 GIT binary patch delta 20969 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 delta 20596 zcmeHvcUTqIy8f(zt!xwl1*uB0qaaPHY%Ex}ps2V3E8<2`1OzN#VH-8}f-7;<*b`6e ziVa1HVo5Y=qA@1csEH<;7-MoyqLQfh{iXo-{F2;r&b`m``zQ18&bQvRzE!@}XV`1z z{-e&#Cv}zuw7HhnV_}m6Lrx8IUb4LJI`@eQqa%!E-+tNaiPP%Ju$SIno-bnpUA`qI zuVQyEg~&caBSEm7fU_aw3dnkp38EmlKpuf?0GXbjZ_ZB_glKTmFGm7;$ilSoS(Hj! z_&b0%QT20k@(U10IA$#fcJTik`nHhSY1uiM#iInlURBI9=jUWiG7G)y2!aCM`c_a<(AMuB#+;U#EoUW@Z#p#+SgIpvTnoenCcLz;~+5%=aIil`~S9gVIvE zci~@5j=H!}$u6iRTMkYZjm%3+H|N8RR7kHcBo$;MB!!<;^-Cd%k2mLyHU|rWmf_g? zN=>vy;#5vyfpf7%v9-OD?h;5x_~)6^MvcnM%T3EJ9G_N@J|=%+dR|(- zS$KeIB?EIa^U?}Xu<=D?wjg|fNMvZi7;`q&#cq|CL&`Odc$BVeJ@gl#Fpa^BAQ4n- z>48)!fsU&D2ohznG;>xG$W1F4<3G+^IC)HF`WPgTnQxwAhRi_%6mKR{lPe%IJ2N*e zKR*Nh#KX~VD4j)+RB=O9{}!%F#kfM+3B`iN(M^eP4<1z0N5M&!f>TY!yDNRL3nXPY z5#c1mJd^^?fh7I^DV+*Wr6B(;oj^qV2=zcEE`y}b9@|t9kcXu?B+|CL3rYU=kj^~D z+Cy|=Jk`2sai?ZVfFC5)sgo*S`YQZ^DlbE#HZ8{>sSUTQQc~qCRpzL2uqu0~GDMZ$ zkf=qAog#}ZRX&QxH>$h>NyGP~Doa(lUX_bgnU|B5H8EEZV%rHq6X-XCMD1Agkf>$L zqqd6wWk{-t1CTJ@QUci=ass3`wOzdG(Oy-k4~a^!eCvlP2J##v4d)%ITmnf6%o6)eol4<|6b=I`gGv7b($9U3{x!M z3uz05cOgkpYumK+oIFe)LNNRr!+#FkG%WHbnX?Meoi{})O|%>m-M}&%l6viANGeFL z2&Dkyz^PNFK~g>@Me>|FZhmRdA>AZZ_en=ZCl;J^^K)omGdAzmr%2}lY)2ubz5 zR+WwWD(#0=C@m{(lvxjMhwz^hc&bg);;;KDL-{ylOL+G|1yD0@?XNU}#{ebSg8Zz^ zkqFDq@lU7OwcbD_ydlDAD#$mFpJdL%0D%rAAD^W7(=3{2o+4ZYmzy**ZxU35f}Dc1 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 + import { Send, Loader2 } from "lucide-svelte"; + + let formData = { + name: "", + email: "", + subject: "", + message: "", + }; + + let errors = {}; + let isSubmitting = false; + let submitted = false; + + const validateForm = () => { + const newErrors = {}; + if (!formData.name.trim()) newErrors.name = "Name is required"; + if (!formData.email.trim()) { + newErrors.email = "Email is required"; + } else if (!/\S+@\S+\.\S+/.test(formData.email)) { + newErrors.email = "Please enter a valid email"; + } + if (!formData.subject.trim()) newErrors.subject = "Subject is required"; + if (!formData.message.trim()) newErrors.message = "Message is required"; + + errors = newErrors; + return Object.keys(newErrors).length === 0; + }; + + const handleSubmit = async (e) => { + e.preventDefault(); + if (!validateForm()) return; + + isSubmitting = true; + // Simulate API call - replace with your actual API endpoint + await new Promise((resolve) => setTimeout(resolve, 1500)); + isSubmitting = false; + submitted = true; + + // Reset form + formData = { + name: "", + email: "", + subject: "", + message: "", + }; + }; + + const handleInput = (e) => { + const target = e.target; + formData[target.name] = target.value; + // Clear error when user starts typing + if (errors[target.name]) { + errors[target.name] = ""; + } + }; + + +{#if submitted} +
+
+

+ Thank You! +

+

+ Your message has been sent successfully. +

+ +
+
+{:else} +
+

Contact Form

+ +
+
+ + + {#if errors.name} +

{errors.name}

+ {/if} +
+ +
+ + + {#if errors.email} +

{errors.email}

+ {/if} +
+ +
+ + + {#if errors.subject} +

{errors.subject}

+ {/if} +
+ +
+ +