npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

mitre-form-component

v0.1.4

Published

Componente de formulário de captação de leads para ser usado em projetos da Mitre Realty.

Downloads

188

Readme

Mitre Form Component

Componente de formulário de captação de leads para ser usado em projetos da Mitre Realty. Esta biblioteca oferece um componente pronto para facilitar a implementação de formulários em suas páginas, com validação e integração com APIs para registro de leads.

🚨 Avisos importantes

Este projeto foi desenvolvido para ser usado diretamente em projetos da Mitre Realty. Algumas partes da biblioteca são essenciais e não devem ser alteradas ou removidas.

  • Exemplo de uso: Dentro de src/app/page.tsx, há um exemplo de uso do componente, disponível apenas para visualização. Para executar e ver o exemplo em funcionamento, execute o comando:

    yarn dev

📌 Componente Autossuficiente

Este componente é totalmente autossuficiente e não requer nenhuma configuração adicional no projeto host:

  • Fonte Montserrat: Carregada automaticamente pelo componente
  • Estilos isolados: Não interferem com estilos do projeto host
  • Zero dependências externas: Funciona out-of-the-box

Nota: A fonte Montserrat é carregada automaticamente do Google Fonts quando o componente é montado. Não é necessário adicionar nenhum link ou import no projeto host.


❌ Itens que NÃO devem ser modificados

Código do componente

  • O comportamento básico do componente, como a integração com a API e as interações de formulário, não devem ser alterados.

Dependências

  • Certifique-se de que as dependências do package.json estão intactas para garantir o funcionamento correto da biblioteca. Alterações nas versões podem causar incompatibilidade com o sistema.

✅ Itens que DEVEM ser modificados

1. Configuração do Componente

Embora o componente esteja pronto para uso, você pode personalizá-lo ao passar as props adequadas.

2. Componente MitreFormComponent

Aqui está um exemplo de uso básico dentro do projeto:

import { MitreFormComponent } from "mitre-form-component-next";

// array de produtos 
const products = JSON.parse(process.env.VITE_PRODUCT_ID!);
// Exemplo de VITE_PRODUCT_ID: '[{"id":1,"name":"Apartamento 2 quartos"},{"id":2,"name":"Casa 3 quartos"}]'

<MitreFormComponent
  products={products}
  apiUrl={process.env.VITE_REGISTER_LEADS_URL!}
  apiToken={process.env.VITE_REGISTER_LEADS_TOKEN!}
  showHeader={true}  //[Opcional] Se irá exibir ou não o cabeçalho
  title="Atendimento por mensagem"  //[Opcional] Título do formulário
  subtitle="Informe seus dados e retornaremos a mensagem."  //[Opcional] Subtítulo do formulário
  backgroundColor="#000"  //[Opcional] 
  textColor="#ffffff"  //[Opcional] 
  buttonBackgroundColor="#FF5733"  //[Opcional]
  buttonTextColor="#FFF"  //[Opcional]
  innerPadding="0.2rem"  //[Opcional]
  inputBackgroundColor="#000"  //[Opcional]
  inputBorderColor="#000"  //[Opcional]
  inputFocusBorderColor="#76B"  //[Opcional]
  inputPlaceholderColor="#FFF"  //[Opcional]
  inputTextColor="#FFF"  //[Opcional]
  showPreferenciaContato={true}  //[Opcional] Exibe campo de preferência de contato
  onSuccess={(requestBody, leadId) => console.log('Formulário enviado com sucesso!', requestBody, leadId)}  //[Opcional]
  onError={(error) => console.error('Erro ao enviar formulário:', error)}  //[Opcional]
/>;

🛠️ Tecnologias utilizadas

🎨 Estilos Isolados

Este componente não injeta estilos globais no projeto host, evitando conflitos de CSS. Todos os estilos são aplicados de forma isolada usando styled-components, garantindo que:

  • ✅ Não há poluição do escopo global com variáveis CSS
  • ✅ Não há conflitos com classes utilitárias
  • ✅ Não há reset CSS que afete o projeto host
  • ✅ Fonte Montserrat carregada automaticamente (não afeta outros componentes)
  • ✅ O componente pode ser usado em qualquer projeto React sem efeitos colaterais ou configurações adicionais

⚙️ Instalação

Este componente pode ser instalado em qualquer projeto React usando o gerenciador de pacotes de sua preferência (npm, yarn, pnpm, etc.).

# Usando npm
npm install mitre-form-component-next

# Usando yarn
yarn add mitre-form-component-next

# Usando pnpm
pnpm add mitre-form-component-next

Depois de instalar a biblioteca, você pode começar a usá-la diretamente no seu projeto.


🔧 Props do Componente

O MitreFormComponent aceita as seguintes props:

  • products (array): Array de objetos contendo os produtos disponíveis. Cada produto deve ter id (number) e name (string).
    • Se o array contém apenas 1 produto: o formulário usa automaticamente esse produto
    • Se o array contém múltiplos produtos: é exibido um seletor para o usuário escolher
  • apiUrl (string): URL da API para registro dos leads.
  • apiToken (string): Token de autenticação da API.
  • showHeader (opcional, boolean): Controla se o cabeçalho será mostrado. Padrão: true.
  • title (opcional, string): Título do formulário. Padrão: "Atendimento por mensagem".
  • subtitle (opcional, string): Subtítulo do formulário. Padrão: "Informe seus dados e retornaremos a mensagem.".
  • backgroundColor (opcional, string): Cor de fundo do formulário. Padrão: #CECECE.
  • textColor (opcional, string): Cor dos textos do cabeçalho, do label dos inputs e do texto de privacidade. Padrão: #2F2F2F.
  • buttonBackgroundColor (opcional, string): Define a cor de fundo do botão. Padrão: #F6C76B.
  • buttonTextColor (opcional, string): Define a cor do texto do botão. Padrão: #2F2F2F.
  • innerPadding (opcional, string): Espaçamento interno do componente com relação às bordas. Padrão 1rem.
  • inputBackgroundColor (opcional, string): Cor de fundo do input. Padrão: #FFF.
  • inputBorderColor (opcional, string): Cor da borda do input. Padrão: transparent.
  • inputFocusBorderColor (opcional, string): Cor da borda do input quando selecionado. Padrão: #F6C76B.
  • inputPlaceholderColor (opcional, string): Cor do placeholder do input. Padrão: #B6B6B6.
  • inputTextColor (opcional, string): Cor do texto do input. Padrão: #2F2F2F.
  • showPreferenciaContato (opcional, boolean): Exibe um campo de seleção "Preferência de Contato" com as opções Whatsapp, Email e Ligação. Quando selecionado, o valor é enviado à API como preferencia_contato. Padrão: false.
  • onSuccess (opcional, função): Callback executado quando o formulário é enviado com sucesso. Recebe dois parâmetros: requestBody (objeto com os dados enviados) e leadId (string com o ID do lead retornado pela API).
  • onError (opcional, função): Callback executado quando ocorre um erro no envio do formulário. Recebe um objeto Error como parâmetro.

🎯 Comportamento dos Produtos

O componente possui comportamento inteligente baseado na quantidade de produtos fornecidos:

Array com 1 produto:

  • O formulário usa automaticamente o único produto disponível
  • Não é exibido seletor de produto
  • O usuário preenche apenas nome, email e telefone

Array com múltiplos produtos:

  • É exibido um campo de seleção "Produto de interesse" antes do campo nome
  • O usuário deve selecionar um produto para prosseguir
  • Validação obrigatória da seleção de produto

Array inválido (vazio, nulo, etc.):

  • É exibida uma mensagem de erro no lugar do formulário
  • O erro é logado no console para debug
  • Mensagem amigável: "Erro no carregamento do formulário!"

Estrutura do objeto Product:

interface Product {
  id: number;    // ID único do produto
  name: string;  // Nome do produto para exibição
}

📞 Preferência de Contato

Quando showPreferenciaContato={true}, um campo de seleção é exibido no formulário com as seguintes opções:

| Valor do enum | Valor enviado à API | |--------------------------|---------------------| | PreferenciaContato.Whatsapp | "Whatsapp" | | PreferenciaContato.Email | "Email" | | PreferenciaContato.Ligacao | "Ligação" |

O campo é opcional: se o usuário não selecionar nenhuma opção, preferencia_contato não é enviado no body da requisição.

O enum PreferenciaContato é exportado pela biblioteca para uso externo, se necessário:

import { MitreFormComponent, PreferenciaContato } from "mitre-form-component-next";

<MitreFormComponent
  products={products}
  apiUrl={process.env.NEXT_PUBLIC_REGISTER_LEADS_URL!}
  apiToken={process.env.NEXT_PUBLIC_REGISTER_LEADS_TOKEN!}
  showPreferenciaContato={true}
  onSuccess={(requestBody) => {
    // requestBody.preferencia_contato estará presente se o usuário selecionou uma opção
    console.log(requestBody.preferencia_contato); // ex: "Whatsapp"
  }}
/>

🚨 Componente dentro de um ErrorBoundary

Recomendamos que o componente MitreFormComponent seja sempre utilizado dentro de um ErrorBoundary para garantir que a aplicação não quebre em caso de falha no carregamento do componente. Também é preciso usar dynamic do next/dynamics para a importação.

Exemplo de uso básico como biblioteca em projetos Nextjs externos:

import dynamic from "next/dynamic";

import { ErrorBoundary } from "react-error-boundary";
const MitreFormComponent = dynamic(
  () =>
    import("mitre-form-component-next").then((mod) => mod.MitreFormComponent),
  { ssr: false }
);

<ErrorBoundary fallback={<div>Erro ao carregar o formulário</div>}>
  <MitreFormComponent
    products={[
      { id: 1, name: "Apartamento 2 quartos" },
      { id: 2, name: "Casa 3 quartos" }
    ]}
    apiUrl={process.env.NEXT_PUBLIC_REGISTER_LEADS_URL!}
    apiToken={process.env.NEXT_PUBLIC_REGISTER_LEADS_TOKEN!}
  />
</ErrorBoundary>;

Para uso em outros frameworks, fazer o import básico conforme Artigo 2


🏗️ Como gerar o build e publicar no npm

Para gerar o build da biblioteca e publicá-la no npm, siga estas etapas:

  1. Incrementar a versão no package.json: No arquivo package.json, atualize a versão da biblioteca.

  2. Executar o build:

yarn build
  1. Publicar no npm:
yarn publish --new-version 0.x.xxx

📄 Licença

Este projeto é mantido pela Mitre Realty. Uso restrito aos colaboradores e parceiros autorizados.


🧑‍💻 Contato

Para dúvidas ou suporte sobre o uso desta biblioteca, entre em contato com o time de desenvolvimento interno da Mitre Realty.


Mitre Realty © Todos os direitos reservados.