"use client"; import React, { useState, useMemo } from "react"; import { useRouter } from "next/navigation"; import { Search, ScanLine, Activity, Globe } from "lucide-react"; import { useGeolocation } from "@/hooks/use-geolocation"; import { useSearchLogic } from "@/hooks/use-search-logic"; import { cn } from "@/lib/utils"; export function Hero() { const router = useRouter(); const [searchQuery, setSearchQuery] = useState(""); const { countryCode, isMounted } = useGeolocation(); const { searchType, isValid, loading, setLoading } = useSearchLogic(searchQuery); const searchConfig = useMemo( () => ({ barcode: { placeholder: "Cole o código EAN/UPC do produto…", button: "Analisar", icon: , label: "Código de barras detectado", }, name: { placeholder: "Nome do alimento ou marca…", button: "Buscar", icon: , label: "Pesquisa por nome", }, auto: { placeholder: "Nome do produto ou código de barras…", button: "Buscar", icon: , label: "Detecção automática", }, }), [] ); const current = searchConfig[searchType]; const handleSearch = async (e: React.FormEvent) => { e.preventDefault(); if (!searchQuery.trim()) return; setLoading(true); const target = searchType === "barcode" && isValid ? `/produto/${searchQuery.trim()}` : `/resultados?q=${encodeURIComponent(searchQuery.trim())}${ countryCode ? `&country=${countryCode}` : "" }`; router.push(target); }; return ( {/* ── Subtle grain texture ──────────────────────────────────────── */} {/* ── Upper label row ─────────────────────────────────────────── */} Open Food Facts · Base Colaborativa {isMounted && countryCode && ( {countryCode.toUpperCase()} )} {/* ── Hairline ────────────────────────────────────────────────── */} {/* ── Hero headline ───────────────────────────────────────────── */} A verdade sobre{" "} o que você come. Dados nutricionais completos de 2 milhões de produtos — Nutri-Score, NOVA, ingredientes e alérgenos. Gratuito, sempre. {/* ── Search form ─────────────────────────────────────────────── */} {/* Mode icon */} {current.icon} setSearchQuery(e.target.value)} autoComplete="off" spellCheck={false} className="flex-1 bg-transparent border-none outline-none py-[1.125rem] text-[var(--fg-primary)] placeholder-[var(--fg-faint)] text-base font-sans" /> {loading ? ( Buscando… ) : ( {current.button} )} {/* Detection status */} {current.label} ); } /** Minimal inline arrow icon */ function ArrowRight() { return ( ); }
Dados nutricionais completos de 2 milhões de produtos — Nutri-Score, NOVA, ingredientes e alérgenos. Gratuito, sempre.
{current.label}