From 5bb46c162e928ec9632df1e4153af0d4922d2a2a Mon Sep 17 00:00:00 2001 From: Leo Vasanko Date: Sat, 16 May 2026 23:00:54 +0000 Subject: [PATCH] Implement synced category row scrolling. --- frontend/src/App.vue | 5 +- frontend/src/components/MediaRow.vue | 6 +- .../src/composables/useKeyboardNavigation.ts | 218 +++++++++++++++++- frontend/src/styles/main.css | 1 - 4 files changed, 219 insertions(+), 11 deletions(-) diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 258f9cc..b248d49 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -193,7 +193,7 @@ import MediaRow from './components/MediaRow.vue'; import MediaDetail from './components/MediaDetail.vue'; // Initialize keyboard navigation -const { getFocusState, restoreFocusState, focusAt } = useKeyboardNavigation(); +const { getFocusState, restoreFocusState, focusAt, focusElement } = useKeyboardNavigation(); const router = useRouter(); const route = useRoute(); @@ -315,8 +315,7 @@ function restoreFocusForPage(page: string) { // Find the element with matching item id const element = document.querySelector(`[data-item-id="${itemId}"]`) as HTMLElement | null; if (element) { - element.focus(); - element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' }); + focusElement(element); lastViewedItemId.value = null; return; } diff --git a/frontend/src/components/MediaRow.vue b/frontend/src/components/MediaRow.vue index 4429c66..157a28b 100644 --- a/frontend/src/components/MediaRow.vue +++ b/frontend/src/components/MediaRow.vue @@ -1,5 +1,9 @@