// Возвращает Promise: true — подтвердили, false — отмена, Escape или тап мимо. export function confirmDialog({ title = 'Подтвердите действие', text = '', confirmLabel = 'Да', cancelLabel = 'Отмена', danger = false, } = {}) { return new Promise((resolve) => { const opener = document.activeElement; const modal = document.createElement('div'); modal.className = 'modal confirm-dialog'; modal.innerHTML = ` `; modal.querySelector('.modal-title').textContent = title; const textEl = modal.querySelector('.confirm-dialog__text'); textEl.textContent = text; textEl.hidden = !text; modal.querySelector('[data-answer="no"]').textContent = cancelLabel; modal.querySelector('[data-answer="yes"]').textContent = confirmLabel; const finish = (answer) => { document.removeEventListener('keydown', onKeydown, true); modal.remove(); opener?.focus?.(); resolve(answer); }; const onKeydown = (event) => { if (event.key === 'Escape') { event.stopPropagation(); finish(false); } }; modal.addEventListener('click', (event) => { if (event.target === modal) { finish(false); return; } const answer = event.target.closest('[data-answer]')?.dataset.answer; if (answer) finish(answer === 'yes'); }); document.addEventListener('keydown', onKeydown, true); document.body.append(modal); modal.querySelector('[data-answer="no"]').focus(); }); }