Enhance AppLauncherOverlay and navigation logic for improved user experience

- Added functionality to close the overlay and return focus to the launcher when the Escape key is pressed inside an iframe.
- Implemented message handling to close the app launcher from the parent window.
- Updated navigation logic in useControllerNav to improve focus management when navigating between sidebar and main content.
- Enhanced Dashboard and Settings views with data attributes for better controller navigation support.
This commit is contained in:
Dorian
2026-02-18 11:29:05 +00:00
parent 473c58894c
commit d0312c6721
5 changed files with 51 additions and 7 deletions

View File

@@ -101,6 +101,13 @@ function injectScrollbarHideIfSameOrigin() {
*::-webkit-scrollbar { display: none; }
`
doc.head.appendChild(style)
// Escape from inside iframe → close overlay and return focus to launcher
doc.addEventListener('keydown', (e) => {
if ((e as KeyboardEvent).key === 'Escape') {
e.preventDefault()
window.parent.postMessage({ type: 'app-launcher-escape' }, '*')
}
})
} catch {
/* Cross-origin: cannot access iframe document */
}
@@ -120,6 +127,12 @@ function onKeyDown(e: KeyboardEvent) {
}
}
function onMessage(e: MessageEvent) {
if (e.data?.type === 'app-launcher-escape' && store.isOpen) {
store.close()
}
}
watch(
() => store.isOpen,
(open) => {
@@ -133,10 +146,12 @@ watch(
onMounted(() => {
window.addEventListener('keydown', onKeyDown, true)
window.addEventListener('message', onMessage)
})
onBeforeUnmount(() => {
window.removeEventListener('keydown', onKeyDown, true)
window.removeEventListener('message', onMessage)
})
</script>