export default class extends HTMLElement {
connectedCallback () {
this.showDialog()
}
showDialog () {
const dialogId = `prompt-password-dialog-${Math.random().toString(36).slice(2)}`
const inputId = `prompt-password-input-${Math.random().toString(36).slice(2)}`
const dialog = document.createElement('div')
dialog.setAttribute('role', 'dialog')
dialog.setAttribute('aria-modal', 'true')
dialog.setAttribute('aria-labelledby', `${dialogId}-title`)
dialog.id = dialogId
dialog.className = 'fixed inset-0 z-50 flex items-center justify-center bg-black/50'
dialog.innerHTML = `
`
document.body.append(dialog)
const input = dialog.querySelector(`#${inputId}`)
const cancelBtn = dialog.querySelector('[data-action="cancel"]')
const confirmBtn = dialog.querySelector('[data-action="confirm"]')
requestAnimationFrame(() => input.focus())
const confirm = () => {
const passwordInput = document.createElement('input')
passwordInput.type = 'hidden'
passwordInput.name = 'password'
passwordInput.value = input.value
this.form.append(passwordInput)
dialog.remove()
this.form.requestSubmit()
this.remove()
}
const cancel = () => {
dialog.remove()
this.remove()
}
confirmBtn.addEventListener('click', confirm)
cancelBtn.addEventListener('click', cancel)
input.addEventListener('keydown', (e) => {
if (e.key === 'Enter') confirm()
if (e.key === 'Escape') cancel()
})
dialog.addEventListener('keydown', (e) => {
if (e.key === 'Escape') cancel()
})
}
get form () {
return this.closest('form')
}
}