diff --git a/base.js b/base.js
index 0799c22..24867a6 100644
--- a/base.js
+++ b/base.js
@@ -1697,7 +1697,15 @@
el.setAttribute('tabindex', '0');
el.innerHTML = `${item.icon ? `${escHtml(item.icon)}` : ''}${escHtml(item.label || '')}${item.kbd ? `${escHtml(item.kbd)}` : ''}`;
el.addEventListener('click', () => { _ctxHide(); if (item.action) item.action(); });
- el.addEventListener('keydown', e => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); el.click(); } });
+ el.addEventListener('keydown', e => {
+ const items = Array.from(_ctxMenu.querySelectorAll('[role="menuitem"]'));
+ const idx = items.indexOf(e.currentTarget);
+ if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); el.click(); }
+ else if (e.key === 'ArrowDown') { e.preventDefault(); (items[idx + 1] || items[0]).focus(); }
+ else if (e.key === 'ArrowUp') { e.preventDefault(); (items[idx - 1] || items[items.length - 1]).focus(); }
+ else if (e.key === 'Home') { e.preventDefault(); items[0].focus(); }
+ else if (e.key === 'End') { e.preventDefault(); items[items.length - 1].focus(); }
+ });
_ctxMenu.appendChild(el);
});
_ctxMenu.classList.add('is-open');