From 70254b1bb7940a796e5b49a2a86ea228350b4f5e Mon Sep 17 00:00:00 2001 From: Dorian Date: Mon, 30 Mar 2026 09:18:41 +0100 Subject: [PATCH] fix: sidebar Right arrow reliably focuses first app container - Only recall container elements (not nav bar buttons) from focus memory - Retry after 200ms when containers aren't rendered yet (async route) Co-Authored-By: Claude Opus 4.6 (1M context) --- neode-ui/src/composables/useControllerNav.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/neode-ui/src/composables/useControllerNav.ts b/neode-ui/src/composables/useControllerNav.ts index 03b799e7..90fa4e29 100644 --- a/neode-ui/src/composables/useControllerNav.ts +++ b/neode-ui/src/composables/useControllerNav.ts @@ -408,9 +408,20 @@ export function useControllerNav(containerRef?: { value: HTMLElement | null }) { // Jump to first container in main rememberFocus('sidebar', activeEl) const remembered = recallFocus('main') + // Only use remembered if it's a container (not a nav bar button) + const target = (remembered && isContainer(remembered)) ? remembered : null const containers = getContainers() - const target = remembered ?? containers[0] - if (target) focusEl(target) + const dest = target ?? containers[0] + if (dest) { + focusEl(dest) + } else { + // Containers may not be rendered yet (async load after route change) + // Retry after a short delay + setTimeout(() => { + const retryContainers = getContainers() + if (retryContainers[0]) focusEl(retryContainers[0]) + }, 200) + } return }