<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Pedro Ramon</title>
    <description>The latest articles on DEV Community by Pedro Ramon (@pedroramon).</description>
    <link>https://dev.to/pedroramon</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F548266%2F97587964-d958-4bd2-8023-13b8dd11fdb0.jpeg</url>
      <title>DEV Community: Pedro Ramon</title>
      <link>https://dev.to/pedroramon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pedroramon"/>
    <language>en</language>
    <item>
      <title>Debugar app Android via WSL</title>
      <dc:creator>Pedro Ramon</dc:creator>
      <pubDate>Mon, 23 Jan 2023 19:23:12 +0000</pubDate>
      <link>https://dev.to/pedroramon/debugar-app-android-via-wsl-b61</link>
      <guid>https://dev.to/pedroramon/debugar-app-android-via-wsl-b61</guid>
      <description>&lt;p&gt;A lógica que vou seguir é conectar o android usando o ADB pelo USB normalmente. Na sequência configurar um acesso pela rede (tcpip) e com isso permitir que se conecte pelo WSL. &lt;strong&gt;Para isso funcionar, você precisa ter uma conexão de rede entre o smartphone e o computador (provavelmente via WiFi).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Como vamos precisar conectar via USB pelo windows, e depois acessar pelo WSL, você vai precisar do ADB instalado em ambos os sistemas. O jeito mais prático de conseguir isso é instalando o Android Studio. Mas se você, assim como eu prefere não instalar um IDE PESADONA que nunca vai usar, pode instalar o SDK Platform-Tools e fazer o resto tudo via linha de comando.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.android.com/studio/releases/platform-tools?hl=pt-br" rel="noopener noreferrer"&gt;Baixar o SDK Platform-Tools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O conteúdo baixado será um pacote compactado (5MB), que contém todos os executáves que vamos usar. Decompacte em um local de fácil acesso e se pretende usar com frequência, adicione ao PATH do sistema. (Isso é válido tanto para o windwos, quanto para o WSL)&lt;/p&gt;

&lt;p&gt;Agora é simples, pelo terminal do windows conecte seu dispositivo usando o ADB:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;adb start-server
# certifique-se que seu device se conectou (aprove se necessário)
adb tcpip 5555
# veja o ip do wifi obtido pelo seu smartphone
adb connect &amp;lt;seu-ip&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora, é só ir ao WSL (com adb já instalado) e conectar por lá!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;adb connect &amp;lt;seu-ip&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É isso! E você ainda pode remover o cabo USB e seguir só com o WiFi.&lt;/p&gt;

&lt;p&gt;=)&lt;/p&gt;

</description>
      <category>linux</category>
      <category>shell</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Roteando as api do NextJS usando verbos HTTP</title>
      <dc:creator>Pedro Ramon</dc:creator>
      <pubDate>Thu, 26 May 2022 00:52:35 +0000</pubDate>
      <link>https://dev.to/pedroramon/roteando-as-api-do-nextjs-usando-verbos-http-1oa7</link>
      <guid>https://dev.to/pedroramon/roteando-as-api-do-nextjs-usando-verbos-http-1oa7</guid>
      <description>&lt;p&gt;
  ATENÇÃO
  &lt;br&gt;
&lt;strong&gt;Esse post foi escrito em maio de 2022, nessa data o NextJS está na versão 12 e, até aqui, não existe um jeito nativo que resolva esse problema. Se estiver lendo isso em uma data futura, lembre-se se procurar no documentação oficial do framework e ver se não existem soluções mais modernas.&lt;/strong&gt;&lt;br&gt;


&lt;/p&gt;

&lt;p&gt;Criar um endpoint de API no NextJS é extremamente simples, mas se você já precisou lidar com mais de um verbo HTTP na mesma rota, percebeu que vai precisar se organizar para não deixar as coisa confusas.&lt;/p&gt;

&lt;p&gt;O problema é que o NextJS não te fornece uma maneira nativa de rotear suas requisições pelo &lt;strong&gt;verbo HTTP&lt;/strong&gt;, apenas pelo &lt;strong&gt;PATH&lt;/strong&gt; da requisição.&lt;/p&gt;

&lt;p&gt;Existem algumas bibliotecas prontas no mercado que adicionam alguns super poderes para essas apis, mas na maioria dos cenários você não precisa de tanto poder, só separar a função que trata o &lt;strong&gt;GET&lt;/strong&gt; da que trata o &lt;strong&gt;POST&lt;/strong&gt;, por exemplo.&lt;/p&gt;

&lt;p&gt;Nesse contexto, eu tenho um helper que costumo usar e que resolve isso pra mim de um jeito bem elegante, na minha visão.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//helper/verbs-route.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;verbsRouter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sanitizedVerbs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
  &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;verb&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;sanitizedVerbs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;verb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;verb&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;route&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;sanitizedVerbs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;route&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;route&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;function&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;405&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;end&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E só! =)&lt;/p&gt;

&lt;p&gt;O uso fica assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//pages/api/my-api.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;verbsRouter&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../../helper/verbs-route.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;verbsRouter&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;

  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;

  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;

  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nx"&gt;put&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;

  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;delete&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;

&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É isso. Sem adicionar dependência, com poucas linhas de código, você tem um reteador de verbos HTTP para suas apis.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>javascript</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Melhorando a UX de digitação no mobile</title>
      <dc:creator>Pedro Ramon</dc:creator>
      <pubDate>Tue, 24 May 2022 19:12:00 +0000</pubDate>
      <link>https://dev.to/pedroramon/construindo-bons-formularios-com-html-12o9</link>
      <guid>https://dev.to/pedroramon/construindo-bons-formularios-com-html-12o9</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Quando construímos formulários com HTML, é importante se preocupar com o fluxo de preenchimento. Isso implica em conhecer, além da linguagem, também os recursos oferecidos pelos navegadores e dispositivos que serão usados pelo seu usuário.&lt;/p&gt;

&lt;p&gt;Um bom uso da linguagem HTML somado ao conhecimento das plataformas que a executam, torna a experiência de preenchimento de um formulário muito mais produtiva e pode aumentar os índices de conversão.&lt;/p&gt;

&lt;h2&gt;
  
  
  Teclado nos dispositivos móveis
&lt;/h2&gt;

&lt;p&gt;
  &lt;strong&gt;Está com pressa?&lt;/strong&gt;
  &lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;inputmode=&lt;/span&gt;&lt;span class="s"&gt;"numeric"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;/p&gt;

&lt;p&gt;Sabe quando você está preenchendo um formulário pelo celular e ao chegar a um campo cujo o valor será exclusivamente numérico (ex.: telefone, cpf, cep, cartão de crédito...) mas o teclado invocado é aquele tradicional alfanumérico?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lSgDSrKl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w5mc14mgwj0kd02a9pn9.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lSgDSrKl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w5mc14mgwj0kd02a9pn9.jpeg" alt="Print do teclado alfanumérico no Android" width="800" height="471"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Temos de convir que a experiência é horrível. Nós, como desenvolvedores certamente devemos evitar essa situação. Mas como?&lt;/p&gt;

&lt;p&gt;A primeira coisa que normalmente pensamos, é no atributo &lt;strong&gt;type&lt;/strong&gt; da tag &lt;strong&gt;input&lt;/strong&gt;, ele pode ser definido de forma a dar uma melhor experiência tanto de validação, quanto de usabilidade. &lt;br&gt;
Quando definimos o atributo &lt;strong&gt;type&lt;/strong&gt; como &lt;strong&gt;'numeric'&lt;/strong&gt;, o teclado apresentado ao usuário será o numérico, o que já eleva muito a experiência de preenchimento.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Jv9OIRAJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hmb09dvd4m91jw1cjqbr.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Jv9OIRAJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hmb09dvd4m91jw1cjqbr.jpeg" alt="Print do teclado numérico no Android" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pronto! Agora tudo está perfeito né? Bem, nem tudo. O problema é que quando alteramos o type do input o teclado que surge muda, &lt;a href=""&gt;mas o tipo do dado colhido muda também&lt;/a&gt;. Existem validações específicas que o navegador faz para cada type, antão alterar de text para number não é apenas uma alteração de usabilidade, isso tem um efeito também na validação dos inputs.&lt;/p&gt;

&lt;p&gt;E ai temos a questão semântica dos dados. &lt;em&gt;Nem tudo que é composto por números, deve ser tratado como número&lt;/em&gt;. Se você não precisa realizar cálculos, não tem por que armazenar um dado como numérico. Na verdade, tratando como string, você evita problemas como zero-trailing, por exemplo.&lt;br&gt;
O CEP é um caso de informação que sofre com esse problema, se você coloca um type=number para colher o cep, não vai conseguir preencher um zero à esquerda, 'proibindo' todos os ceps da cidade de São Paulo.&lt;br&gt;
Outro exemplo, o número de um cartão de crédito é composto exclusivamente por números (🤯), mas você nunca vai precisar realizar alguma operação matemática com ele.&lt;/p&gt;

&lt;p&gt;Por fim, o input numeric tem um visual específico, que pode mais atrapalhar do que ajudar. Ele traz botões que permitem incrementar ou decrementar seu valor, e isso não é o que esperamos em um campo de CEP ou do cartão de crédito, por exemplo.&lt;/p&gt;

&lt;p&gt;Mas então como resolvemos isso? Deixamos a usabilidade de lado e mantemos a semântica dos tipos de dados? Ou ignoramos a semântica e preservamos a usabilidade?&lt;/p&gt;
&lt;h2&gt;
  
  
  Conheça o inputmode
&lt;/h2&gt;

&lt;p&gt;Aqui está o &lt;strong&gt;pulo do gato&lt;/strong&gt;. Com o atributo &lt;strong&gt;inputmode&lt;/strong&gt; dos inputs, você consegue pedir para o navegador que abra um teclado específico, que atenda melhor sua necessidade. Ou até mesmo para não abrir nenhum teclado, caso sua aplicação implemente um customizado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;inputmode=&lt;/span&gt;&lt;span class="s"&gt;"numeric"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note que toda a problemática desenvolvida anteriormente, nasce da confusão entre o tipo dos dados e o formato deles. E essa confusão não é culpa minha nem sua, na verdade isso é um ótimo exemplo, de como precisamos conhecer tanto a linguagem, quanto as plataformas que a executam. Esse problema não existiria se não existissem navegadores em dispositivos móveis.&lt;br&gt;
Se você usa um computador com um teclado físico para preencher um formulário, o &lt;strong&gt;inputmode&lt;/strong&gt; não tem nenhum significado. Você não precisa dele! Mas o cenário muda quando olhamos para dispositivos móveis com seus teclados virtuais.&lt;/p&gt;

&lt;p&gt;Os valores possíveis para o inputmode são:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;none&lt;/code&gt;&lt;br&gt;
Não abre o teclado padrão do sistema operacional.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;text&lt;/code&gt; (padrão)&lt;br&gt;
Abre o teclado padrão, baseado nas configurações do usuário.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;decimal&lt;/code&gt;&lt;br&gt;
Abre o teclado numérico com os sepradores de decimal do idioma do usuário (normalmente o ponto ou a vírgula). Alguns dispositivos podem exibir também o símbolo de negativo (-), mas isso não é um padrão.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;numeric&lt;/code&gt;&lt;br&gt;
Na maioria dos casos, vai abrir o mesmo teclado do decimal, mas pode ser que não traga a tecla de separador decimal. Alguns dispositivos podem exibir também o símbolo de negativo (-), mas isso não é um padrão.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tel&lt;/code&gt;&lt;br&gt;
Abre um teclado numérico (0-9) e pelo menos mais dois botões, o asterisco (*) e a cerquilha (#).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;search&lt;/code&gt;&lt;br&gt;
Um teclado virtualmente otimizado para buscas. Em muitos casos, será identico ao teclaod text (padrão do sistema), mas podes ser que o navegador use essa informação para alterar o 'submit key' (falamos sobre isso em outro artigo). instead.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;email&lt;/code&gt;&lt;br&gt;
Abre um teclado textual, mas com teclas para @ e . mais acessíveis (sem que o usuário tenha que procurar nos símbolos).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;url&lt;/code&gt;&lt;br&gt;
Abre um teclado textual, com com teclas comuns em urls, como barra, ponto, dois pontos entre outras possibilidades.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Pensar nos detalhes durante a criação de uma aplicação pode ser o diferencial para o seu sucesso. Aqui estamos falando de um atributo que não tem efeitos colaterais, você adiciona ela ao seu input e ele não muda estilo nem validação, mas trás um benefício gigante para quem usa seu site.&lt;/p&gt;

&lt;p&gt;REFERÊNCIAS:&lt;br&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/inputmode"&gt;inputmode - HTML: HyperText Markup Language | MDN (mozilla.org)&lt;/a&gt;&lt;br&gt;
&lt;a href="https://html.spec.whatwg.org/multipage/interaction.html#attr-inputmode"&gt;HTML Standard, Edition for Web Developers (whatwg.org)&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ux</category>
      <category>html</category>
      <category>braziliandevs</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
