Верстаю под back на webpack(handlebars, scss, ts) на выходе обычные страницы. И в каждом проекте я делаю по разному, по настроению:
1) Выношу popup в шаблон(на каждую страницу на выходе) и при клике на кнопку открываю его(с анимацией или без нее) и слежу за кликами на странице не был ли нажат в нем крестик чтобы закрыть.
2) Импортирую html popup в ts, обрабатываю его, вешаю на него события(например на крестик), и вставляю на страницу(с анимацией или без нее)
В первом способе на каждой странице спрятан popup и происходить copypast. Во втором же popup находиться в js, и нет copypast.