From faa10d9a720f6dc69990f9a8519aab56ce7fe37c Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Fri, 17 Apr 2026 16:51:36 +0000 Subject: [PATCH] Changes Co-authored-by: domfelipe <53182096+domfelipe@users.noreply.github.com> --- src/components/mika/EnterpriseLeadForm.tsx | 119 ++++++++++++ src/components/mika/FaqSection.tsx | 58 ++++++ src/components/mika/FeaturesSection.tsx | 44 +++++ src/components/mika/HeroSection.tsx | 148 +++++++++++++++ src/components/mika/HowItWorksSection.tsx | 37 ++++ src/components/mika/LandingFooter.tsx | 67 +++++++ src/components/mika/LandingHeader.tsx | 102 ++++++++++ src/components/mika/PlansSection.tsx | 207 +++++++++++++++++++++ src/routeTree.gen.ts | 9 - 9 files changed, 782 insertions(+), 9 deletions(-) create mode 100644 src/components/mika/EnterpriseLeadForm.tsx create mode 100644 src/components/mika/FaqSection.tsx create mode 100644 src/components/mika/FeaturesSection.tsx create mode 100644 src/components/mika/HeroSection.tsx create mode 100644 src/components/mika/HowItWorksSection.tsx create mode 100644 src/components/mika/LandingFooter.tsx create mode 100644 src/components/mika/LandingHeader.tsx create mode 100644 src/components/mika/PlansSection.tsx diff --git a/src/components/mika/EnterpriseLeadForm.tsx b/src/components/mika/EnterpriseLeadForm.tsx new file mode 100644 index 0000000..dd86d4f --- /dev/null +++ b/src/components/mika/EnterpriseLeadForm.tsx @@ -0,0 +1,119 @@ +"use client"; + +import { useState } from "react"; +import { useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { z } from "zod"; +import { IMaskInput } from "react-imask"; +import { toast } from "sonner"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Textarea } from "@/components/ui/textarea"; +import { Label } from "@/components/ui/label"; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; +import { Loader2 } from "lucide-react"; + +const schema = z.object({ + company_name: z.string().min(2, "Informe o nome da empresa").max(120), + contact_name: z.string().min(2, "Informe seu nome").max(120), + email: z.string().email("Formato de e-mail inválido."), + phone: z.string().min(14, "Telefone inválido").max(20), + team_size: z.enum(["1-10", "11-50", "51-200", "200+"], { message: "Selecione o tamanho da equipe" }), + message: z.string().max(1000).optional(), +}); + +type FormValues = z.infer; + +export function EnterpriseLeadForm() { + const [submitting, setSubmitting] = useState(false); + const { + register, + handleSubmit, + setValue, + watch, + reset, + formState: { errors }, + } = useForm({ resolver: zodResolver(schema) }); + + const onSubmit = async (data: FormValues) => { + setSubmitting(true); + try { + // Etapa 2: gravar em enterprise_leads via supabase.from(...).insert(...) + // Por ora: feedback otimista para o usuário. + await new Promise((r) => setTimeout(r, 700)); + toast.success("Recebemos seu contato! Falamos com você em até 1 dia útil."); + reset(); + } catch { + toast.error("Algo deu errado do nosso lado. Já estamos investigando."); + } finally { + setSubmitting(false); + } + }; + + const phone = watch("phone") || ""; + + return ( +
+
+
+ + + {errors.company_name &&

{errors.company_name.message}

} +
+
+ + + {errors.contact_name &&

{errors.contact_name.message}

} +
+
+ +
+
+ + + {errors.email &&

{errors.email.message}

} +
+
+ + setValue("phone", value as string, { shouldValidate: true })} + placeholder="(11) 99999-9999" + className="flex h-10 w-full rounded-lg border border-input bg-transparent px-3 py-2 text-sm focus:outline-none focus:border-primary focus:ring-2 focus:ring-primary/20" + /> + {errors.phone &&

{errors.phone.message}

} +
+
+ +
+ + + {errors.team_size &&

{errors.team_size.message}

} +
+ +
+ +