import { useState } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { Building2, User, Monitor, Headphones, ArrowRight, Shield, Clock, Sparkles, } from 'lucide-react'; import type { ClientType, CompanyInfo, ContactInfo, Industry, } from '@/types/quote'; export interface StepWelcomeProps { clientType: ClientType; companyInfo: CompanyInfo; contactInfo: ContactInfo; onSetClientType: (type: ClientType) => void; onUpdateCompany: (data: Partial) => void; onUpdateContact: (data: Partial) => void; onSetEndpointCount: (count: number) => void; onSetIndustry: (industry: Industry | '') => void; } const industries: Industry[] = [ 'Healthcare', 'Legal', 'Finance', 'Manufacturing', 'Retail', 'Professional Services', 'Other', ]; const journeySteps = [ { icon: Sparkles, title: 'Tell us about yourself', desc: 'Basic info so we can personalize your experience', }, { icon: Monitor, title: 'Choose your services', desc: 'Toggle the IT services that interest you', }, { icon: Headphones, title: 'Configure each service', desc: "We'll walk through your selections one by one", }, { icon: ArrowRight, title: 'Review & submit', desc: 'Get your custom quote delivered instantly', }, ]; const stagger = { hidden: {}, visible: { transition: { staggerChildren: 0.06 } }, }; const fadeUp = { hidden: { opacity: 0, y: 12 }, visible: { opacity: 1, y: 0, transition: { duration: 0.35, ease: [0.25, 0.46, 0.45, 0.94] as const } }, }; export function StepWelcome({ clientType, companyInfo, contactInfo, onSetClientType, onUpdateCompany, onUpdateContact, onSetEndpointCount, onSetIndustry, }: StepWelcomeProps) { const [endpointInput, setEndpointInput] = useState(String(companyInfo.endpointCount)); const handleEndpointChange = (val: string) => { setEndpointInput(val); const num = parseInt(val, 10); if (!isNaN(num) && num >= 1) { onSetEndpointCount(num); } }; return ( {/* Hero welcome */}

Let’s Build Your IT Solution

In just a few minutes, we’ll create a custom technology package tailored to your needs. No commitment required.

{/* What to expect */}

What to expect

{journeySteps.map((step, i) => (
{i + 1}

{step.title}

{step.desc}

))}
{/* Client type toggle */}
{(['company', 'individual'] as const).map((type) => ( ))}
{/* Contact & company info form */} {/* Contact info */}

Your contact information

onUpdateContact({ name: e.target.value })} placeholder="First and last name" className="w-full px-4 py-2.5 rounded-xl border border-gray-200 bg-white text-[#333d49] text-sm placeholder:text-gray-300 focus:border-[#fe7400] focus:ring-2 focus:ring-[#fe7400]/10 transition-all duration-200 outline-none" />
onUpdateContact({ email: e.target.value })} placeholder="you@company.com" className="w-full px-4 py-2.5 rounded-xl border border-gray-200 bg-white text-[#333d49] text-sm placeholder:text-gray-300 focus:border-[#fe7400] focus:ring-2 focus:ring-[#fe7400]/10 transition-all duration-200 outline-none" />
onUpdateContact({ phone: e.target.value })} placeholder="(480) 555-0100" className="w-full px-4 py-2.5 rounded-xl border border-gray-200 bg-white text-[#333d49] text-sm placeholder:text-gray-300 focus:border-[#fe7400] focus:ring-2 focus:ring-[#fe7400]/10 transition-all duration-200 outline-none" />
{/* Company name — only for business clients */} {clientType === 'company' && ( onUpdateCompany({ name: e.target.value })} placeholder="Acme Corp" className="w-full px-4 py-2.5 rounded-xl border border-gray-200 bg-white text-[#333d49] text-sm placeholder:text-gray-300 focus:border-[#fe7400] focus:ring-2 focus:ring-[#fe7400]/10 transition-all duration-200 outline-none" /> )}
{/* Business details */}

About your environment

handleEndpointChange(e.target.value)} onBlur={() => { const num = parseInt(endpointInput, 10); if (isNaN(num) || num < 1) { setEndpointInput('1'); onSetEndpointCount(1); } }} className="w-24 px-4 py-2.5 rounded-xl border border-gray-200 bg-white text-[#333d49] text-sm text-center focus:border-[#fe7400] focus:ring-2 focus:ring-[#fe7400]/10 transition-all duration-200 outline-none" /> computers, laptops, & servers
{clientType === 'company' && ( )}
{/* Trust signals */} {[ { icon: Shield, text: 'No obligation' }, { icon: Clock, text: 'Takes ~2 minutes' }, { icon: Sparkles, text: 'Instant quote' }, ].map(({ icon: Icon, text }) => ( {text} ))}
); }