Come fa Discourse a rilevare/dedurre le tastiere virtuali?

Utilizziamo la Visual Viewport API: Visual Viewport API - Web APIs | MDN.

Puoi cercare nei file JS del nostro repository visualViewport. Ci sono alcune particolarità in iOS dovute al posizionamento del composer, quindi lì utilizziamo alcune override più complesse, il file pertinente è app/assets/javascripts/discourse/app/lib/safari-hacks.js.