Como o Discourse detecta/infere teclados virtuais?

Usamos a API Visual Viewport: Visual Viewport API - Web APIs | MDN.

Você pode pesquisar nos arquivos JS em nosso código de repositório por visualViewport. Existem algumas peculiaridades no iOS devido à colocação do compositor, então usamos algumas substituições mais complexas lá, o arquivo relevante é app/assets/javascripts/discourse/app/lib/safari-hacks.js.