По идее, любой же клик вне должен закрывать?
Можно выставлять какую-то переменную флагом состояния меню: открыто / закрыто.
При открытии начинать слушать на корневом
document
событие "click" или "mousedown".
При клике смотреть, содержится ли цель клика где-то под
div.mobile-panel
через однократный вызов
Node.contains() (он смотрит сразу на любую глубину). Если внутри – не прятать, если снаружи – закрывать меню.
const menuRoot = document.querySelector('div.mobile-panel');
document.addEventListener('mousedown', (e) => {
if (! menuRoot.contains(e.target)) {
document.body.classList.remove('-show')
}
})