Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 1m38s
Build & Deploy / 🧪 QA (push) Successful in 1m50s
Build & Deploy / 🏗️ Build (push) Successful in 3m31s
Build & Deploy / 🚀 Deploy (push) Successful in 44s
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
143 lines
7.0 KiB
TypeScript
143 lines
7.0 KiB
TypeScript
'use client';
|
|
|
|
import React, { Suspense } from 'react';
|
|
import { Section, Container } from '@/components/ui';
|
|
import { ContactForm } from '@/components/forms/ContactForm';
|
|
import dynamic from 'next/dynamic';
|
|
import { motion } from 'framer-motion';
|
|
|
|
const ContactMap = dynamic(() => import('@/components/ContactMap'), {
|
|
ssr: false,
|
|
loading: () => <div className="h-full w-full bg-neutral-medium animate-pulse" />,
|
|
});
|
|
|
|
export interface ContactSectionProps {
|
|
showForm?: boolean;
|
|
showMap?: boolean;
|
|
}
|
|
|
|
const containerVariants = {
|
|
hidden: { opacity: 0 },
|
|
visible: {
|
|
opacity: 1,
|
|
transition: {
|
|
staggerChildren: 0.15,
|
|
delayChildren: 0.2,
|
|
},
|
|
},
|
|
};
|
|
|
|
const itemVariants = {
|
|
hidden: { opacity: 0, x: -20 },
|
|
visible: { opacity: 1, x: 0, transition: { duration: 0.6, ease: [0.16, 1, 0.3, 1] as const } },
|
|
};
|
|
|
|
const formVariants = {
|
|
hidden: { opacity: 0, y: 30 },
|
|
visible: { opacity: 1, y: 0, transition: { duration: 0.8, ease: [0.16, 1, 0.3, 1] as const, delay: 0.4 } },
|
|
};
|
|
|
|
export const ContactSection: React.FC<ContactSectionProps> = (props) => {
|
|
const { showForm, showMap } = props;
|
|
|
|
return (
|
|
<Section className="bg-neutral-light relative overflow-hidden">
|
|
<Container>
|
|
<div className="grid grid-cols-1 lg:grid-cols-12 gap-8 md:gap-16">
|
|
<motion.div
|
|
className="lg:col-span-5 flex flex-col justify-center"
|
|
variants={containerVariants}
|
|
initial="hidden"
|
|
whileInView="visible"
|
|
viewport={{ once: true, margin: "-50px" }}
|
|
>
|
|
<motion.h2 variants={itemVariants} className="text-primary font-bold tracking-wider uppercase text-sm mb-3">Direktkontakt</motion.h2>
|
|
<motion.h3 variants={itemVariants} className="font-heading text-3xl md:text-4xl font-extrabold text-neutral-dark mb-6">Wir sind für Sie da.</motion.h3>
|
|
<motion.p variants={itemVariants} className="text-lg text-text-secondary mb-8 leading-relaxed">
|
|
Haben Sie Fragen zu unseren Leistungen oder möchten Sie ein konkretes Projekt besprechen? Rufen Sie uns an oder schreiben Sie uns eine E-Mail.
|
|
</motion.p>
|
|
|
|
<div className="space-y-6">
|
|
<motion.div variants={itemVariants} className="group flex items-start gap-4">
|
|
<div className="w-12 h-12 bg-primary/10 rounded-full flex items-center justify-center text-primary shrink-0 transition-all duration-500 group-hover:bg-primary group-hover:text-white group-hover:scale-110 group-hover:-rotate-3">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path></svg>
|
|
</div>
|
|
<div>
|
|
<h4 className="font-bold text-neutral-dark group-hover:text-primary transition-colors">Telefon</h4>
|
|
<p className="text-xl md:text-2xl font-bold font-heading text-neutral-dark hover:text-primary transition-colors">
|
|
<a href="tel:+4935616857733">+49 (0) 3561 / 68577 33</a>
|
|
</p>
|
|
</div>
|
|
</motion.div>
|
|
|
|
<motion.div variants={itemVariants} className="group flex items-start gap-4">
|
|
<div className="w-12 h-12 bg-primary/10 rounded-full flex items-center justify-center text-primary shrink-0 transition-all duration-500 group-hover:bg-primary group-hover:text-white group-hover:scale-110 group-hover:-rotate-3">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg>
|
|
</div>
|
|
<div>
|
|
<h4 className="font-bold text-neutral-dark group-hover:text-primary transition-colors">E-Mail</h4>
|
|
<p className="text-primary hover:text-primary-dark font-medium transition-colors">
|
|
<a href="mailto:info@e-tib.com">info@e-tib.com</a>
|
|
</p>
|
|
</div>
|
|
</motion.div>
|
|
|
|
<motion.div variants={itemVariants} className="group flex items-start gap-4">
|
|
<div className="w-12 h-12 bg-primary/10 rounded-full flex items-center justify-center text-primary shrink-0 transition-all duration-500 group-hover:bg-primary group-hover:text-white group-hover:scale-110 group-hover:-rotate-3">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path><circle cx="12" cy="10" r="3"></circle></svg>
|
|
</div>
|
|
<div>
|
|
<h4 className="font-bold text-neutral-dark group-hover:text-primary transition-colors">Standort</h4>
|
|
<p className="text-text-secondary leading-relaxed">
|
|
Gewerbestraße 22<br />
|
|
03172 Guben<br />
|
|
Deutschland
|
|
</p>
|
|
</div>
|
|
</motion.div>
|
|
</div>
|
|
</motion.div>
|
|
|
|
{showForm && (
|
|
<motion.div
|
|
className="lg:col-span-7 relative"
|
|
variants={formVariants}
|
|
initial="hidden"
|
|
whileInView="visible"
|
|
viewport={{ once: true, margin: "-50px" }}
|
|
>
|
|
<Suspense
|
|
fallback={
|
|
<div className="animate-pulse bg-white border border-neutral-100 shadow-xl h-96 rounded-2xl md:rounded-3xl" />
|
|
}
|
|
>
|
|
<ContactForm />
|
|
</Suspense>
|
|
</motion.div>
|
|
)}
|
|
</div>
|
|
</Container>
|
|
{showMap && (
|
|
<motion.section
|
|
initial={{ opacity: 0 }}
|
|
whileInView={{ opacity: 1 }}
|
|
viewport={{ once: true }}
|
|
transition={{ duration: 1 }}
|
|
className="mt-12 h-[300px] md:h-[500px] bg-neutral-medium relative overflow-hidden grayscale hover:grayscale-0 transition-all duration-1000"
|
|
>
|
|
<Suspense
|
|
fallback={<div className="h-full w-full bg-neutral-medium animate-pulse" />}
|
|
>
|
|
<ContactMap
|
|
locations={[
|
|
{ name: 'E-TIB GmbH (Hauptsitz)', address: 'Gewerbestraße 22\n03172 Guben', lat: 51.9547, lng: 14.7214 },
|
|
{ name: 'E-TIB Bohrtechnik GmbH', address: 'Bahnhofstraße 180a\n99947 Kirchheilingen', lat: 51.1852, lng: 10.6865 }
|
|
]}
|
|
/>
|
|
</Suspense>
|
|
</motion.section>
|
|
)}
|
|
</Section>
|
|
);
|
|
};
|