Как Discourse определяет/выявляет виртуальные клавиатуры?

У меня есть проект, не связанный с Discourse, в котором мне очень хотелось бы определять, активна ли виртуальная клавиатура мобильного браузера. Я только что понял, после нескольких дней размышлений и поиска решений, что форум Discourse, который я посещаю каждый день, имеет очень плавный интерфейс для работы с виртуальной клавиатурой на мобильных устройствах. Отлично, что он так надёжно определяет клавиатуру и адаптирует поле ответа, занимая оставшееся пространство, а затем возвращается в обычный режим, если клавиатуру закрыть.

Я не нашёл других простых решений для обнаружения виртуальной клавиатуры (большинство ответов на Stack Overflow просто советуют не пытаться это делать), но то, что реализовано в Discourse, работает отлично. Однако кодbase большой и сложный, и я не знаю, где в нём искать соответствующий код. Поэтому я надеялся, что кто-то, кто хорошо знаком с мобильным интерфейсом Discourse, сможет либо указать мне на нужный код, либо объяснить, какие эвристики использует Discourse?

Мы используем Visual Viewport API: VisualViewport - Web APIs | MDN.

Вы можете найти упоминания visualViewport в JS-файлах нашего репозитория. Из-за расположения поля ввода в iOS существуют некоторые особенности, поэтому там применяются более сложные переопределения. Соответствующий файл — app/assets/javascripts/discourse/app/lib/safari-hacks.js.

Спасибо за эти советы!