/// Unlock view — passphrase input with ENTER to submit. import { getState, setState, sendMessage, navigate, escapeHtml } from '../popup'; import type { ItemId, ManifestEntry } from '../../shared/types'; export function renderUnlock(app: HTMLElement): void { const state = getState(); app.innerHTML = `
relicario

two-factor vault

${state.loading ? '
' : ''} ${state.error ? `
${escapeHtml(state.error)}
` : ''}
`; const input = document.getElementById('passphrase-input') as HTMLInputElement; if (input && !state.loading) { input.focus(); input.addEventListener('keydown', async (e) => { if (e.key === 'Enter') { const passphrase = input.value; if (!passphrase) return; setState({ loading: true, error: null }); const resp = await sendMessage({ type: 'unlock', passphrase }); if (resp.ok) { const listResp = await sendMessage({ type: 'list_items' }); if (listResp.ok) { const data = listResp.data as { items: Array<[ItemId, ManifestEntry]> }; navigate('list', { entries: data.items }); } else { setState({ loading: false, error: listResp.error }); } } else { setState({ loading: false, error: resp.error }); } } }); } const settingsBtn = document.getElementById('settings-btn'); settingsBtn?.addEventListener('click', () => navigate('settings')); }