'use client'; import Scribble from '@/components/Scribble'; import { Button, Container, Heading, Section } from '@/components/ui'; import { useTranslations, useLocale } from 'next-intl'; import dynamic from 'next/dynamic'; import { useAnalytics } from '../analytics/useAnalytics'; import { AnalyticsEvents } from '../analytics/analytics-events'; import { useState, useEffect, useRef, useCallback } from 'react'; import { ChevronRight } from 'lucide-react'; import { AISearchResults } from '../search/AISearchResults'; const HeroIllustration = dynamic(() => import('./HeroIllustration'), { ssr: false }); const AIOrb = dynamic(() => import('../search/AIOrb'), { ssr: false }); export default function Hero({ data }: { data?: any }) { const t = useTranslations('Home.hero'); const locale = useLocale(); const { trackEvent } = useAnalytics(); const [searchQuery, setSearchQuery] = useState(''); const [isSearchOpen, setIsSearchOpen] = useState(false); const [heroPlaceholder, setHeroPlaceholder] = useState( 'Projekt beschreiben oder Kabel suchen...', ); const typingRef = useRef | null>(null); const HERO_PLACEHOLDERS = [ 'Querschnittsberechnung für 110kV Trasse', // Hochspannung 'Wie schwer ist NAYY 4x150?', 'Ich plane einen Solarpark, was brauche ich?', // Projekt Solar 'Unterschied zwischen N2XSY und NAY2XSY?', // Fach 'Mittelspannungskabel für Windkraftanlage', // Windpark 'Welches Aluminiumkabel für 20kV?', // Mittelspannung ]; // Typing animation for the hero search placeholder useEffect(() => { if (searchQuery) { setHeroPlaceholder('Projekt beschreiben oder Kabel suchen...'); return; } let textIdx = 0; let charIdx = 0; let deleting = false; const tick = () => { const fullText = HERO_PLACEHOLDERS[textIdx]; if (deleting) { charIdx--; setHeroPlaceholder(fullText.substring(0, charIdx)); } else { charIdx++; setHeroPlaceholder(fullText.substring(0, charIdx)); } let delay = deleting ? 30 : 70; if (!deleting && charIdx === fullText.length) { delay = 2500; deleting = true; } else if (deleting && charIdx === 0) { deleting = false; textIdx = (textIdx + 1) % HERO_PLACEHOLDERS.length; delay = 400; } typingRef.current = setTimeout(tick, delay); }; typingRef.current = setTimeout(tick, 1500); return () => { if (typingRef.current) clearTimeout(typingRef.current); }; }, [searchQuery]); const handleSearchSubmit = (e: React.FormEvent) => { e.preventDefault(); if (searchQuery.trim()) { setIsSearchOpen(true); } }; return ( <>
{data?.title ? ( /g, '', ) .replace( /<\/green>/g, '', ), }} /> ) : ( t.rich('title', { green: (chunks) => ( {chunks}
), }) )}

{data?.subtitle || t('subtitle')}

setSearchQuery(e.target.value)} placeholder={heroPlaceholder} className="flex-1 bg-transparent border-none text-white pl-20 pr-2 py-4 placeholder:text-white/50 focus:outline-none text-lg lg:text-xl" autoFocus />
setIsSearchOpen(false)} initialQuery={searchQuery} triggerSearch={true} /> ); }