united-tattoo/components/united/new-contact-section.tsx
Nicholai 3e739877b4 feat(components): add new UI components for enhanced user experience
- Introduced multiple new components including AnimatedLink, Button, Calendar, Card, ColorSwatch, Divider, Filmstrip, FormContainer, FormField, GalleryCard, Heading, HeroOverlay, IdentitySection, ImmersionSection, NewArtistsSection, NewContactSection, NewHero, NewNavigation, Reveal, SectionLabel, StickySplit, and Toast.
- Each component is designed with responsive layouts and customizable styles to improve the overall UI consistency and interactivity.
- Implemented accessibility features and animations to enhance user engagement.

This commit significantly expands the component library, providing a robust foundation for building a cohesive user interface.
2025-11-25 03:00:50 -07:00

142 lines
4.7 KiB
TypeScript

"use client"
import { useState, useEffect } from "react"
import { StickySplit } from "./sticky-split"
import { SectionLabel } from "./section-label"
import { FormContainer } from "./form-container"
import { FormField, Input, Textarea } from "./form-field"
import { Button } from "./button"
import { MapPin, Phone, Mail, Clock } from "lucide-react"
export function NewContactSection() {
const [formData, setFormData] = useState({
name: "",
email: "",
phone: "",
message: "",
})
const handleSubmit = (e: React.FormEvent) => {
e.preventDefault()
// In a real app, you'd handle submission here or use server actions
console.log("Form submitted:", formData)
alert("Thank you. We will be in touch shortly.")
}
const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {
setFormData((prev) => ({
...prev,
[e.target.name]: e.target.value,
}))
}
return (
<section id="contact" className="py-[clamp(3.5rem,6vw,6rem)] px-[clamp(1.5rem,4vw,5rem)] max-w-[1600px] mx-auto">
<StickySplit
sidebar={
<div className="space-y-8">
<div>
<SectionLabel>04 Booking</SectionLabel>
<h2 className="font-serif text-[clamp(1.9rem,4vw,3rem)] leading-[1.15] text-[var(--ink)] mb-4">
Begin your commission.
</h2>
<p className="text-[clamp(0.95rem,2vw,1.3rem)] leading-[1.65] text-[var(--ink)]/75">
Ready to create something amazing? Fill out the brief to get started.
</p>
</div>
<div className="space-y-6 pt-8 border-t border-[var(--ink)]/10">
{[
{
icon: MapPin,
title: "Visit Us",
content: "5160 Fontaine Blvd, Fountain, CO 80817",
},
{
icon: Phone,
title: "Call Us",
content: "(719) 698-9004",
},
{
icon: Mail,
title: "Email Us",
content: "info@united-tattoo.com",
},
{
icon: Clock,
title: "Hours",
content: "Mon-Wed: 10AM-6PM, Thu-Sat: 10AM-8PM, Sun: 10AM-6PM",
},
].map((item, index) => {
const Icon = item.icon
return (
<div key={index} className="flex items-start space-x-4 text-left">
<div className="p-2 bg-[var(--white)] rounded-lg shadow-sm">
<Icon className="w-4 h-4 text-[var(--burnt)]" />
</div>
<div>
<p className="text-[var(--ink)] font-medium text-sm uppercase tracking-wider mb-1">{item.title}</p>
<p className="text-[var(--ink)]/70 text-sm">{item.content}</p>
</div>
</div>
)
})}
</div>
</div>
}
>
<FormContainer onSubmit={handleSubmit}>
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
<FormField label="Full Name">
<Input
name="name"
placeholder="Eden Morales"
value={formData.name}
onChange={handleChange}
required
/>
</FormField>
<FormField label="Phone">
<Input
name="phone"
type="tel"
placeholder="(555) 123-4567"
value={formData.phone}
onChange={handleChange}
/>
</FormField>
</div>
<FormField label="Email Address">
<Input
name="email"
type="email"
placeholder="eden@example.com"
value={formData.email}
onChange={handleChange}
required
/>
</FormField>
<FormField label="Concept Notes">
<Textarea
name="message"
rows={5}
placeholder="Describe your idea, placement, and scale..."
value={formData.message}
onChange={handleChange}
required
/>
</FormField>
<div className="pt-4">
<Button type="submit" variant="primary" className="w-full md:w-auto">
Submit Brief
</Button>
</div>
</FormContainer>
</StickySplit>
</section>
)
}