summaryrefslogtreecommitdiff
path: root/apps/web/lib/hooks/use-keyboard-navigation.ts
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-02-07 06:22:24 -0800
committerFuwn <[email protected]>2026-02-07 06:22:24 -0800
commit736a82f4a567cbbf82a7283d1ce7c4bf08689f71 (patch)
tree81e4d6e7d791188637cb570647cf8562025bf292 /apps/web/lib/hooks/use-keyboard-navigation.ts
parentfeat: resolve 7 pre-ship QoL items (diff)
downloadasa.news-736a82f4a567cbbf82a7283d1ce7c4bf08689f71.tar.xz
asa.news-736a82f4a567cbbf82a7283d1ce7c4bf08689f71.zip
fix: space/shift+space scrolls focused panel, revert content font, fix share modal text
Space/Shift+Space now scrolls whichever panel is focused (entry list, detail panel, or sidebar) instead of only working in the detail panel. Removed content font setting. Fixed share modal placeholder casing and ellipsis spacing.
Diffstat (limited to 'apps/web/lib/hooks/use-keyboard-navigation.ts')
-rw-r--r--apps/web/lib/hooks/use-keyboard-navigation.ts40
1 files changed, 24 insertions, 16 deletions
diff --git a/apps/web/lib/hooks/use-keyboard-navigation.ts b/apps/web/lib/hooks/use-keyboard-navigation.ts
index 8685396..275db29 100644
--- a/apps/web/lib/hooks/use-keyboard-navigation.ts
+++ b/apps/web/lib/hooks/use-keyboard-navigation.ts
@@ -153,6 +153,28 @@ export function useKeyboardNavigation() {
return
}
+ if (event.key === " ") {
+ const scrollSelectors: Record<string, string> = {
+ entryList: "[data-entry-list-scroll]",
+ detailPanel: "[data-detail-article]",
+ sidebar: "[data-sidebar-nav]",
+ }
+ const selector = scrollSelectors[focusedPanel]
+ const scrollableElement = selector
+ ? document.querySelector<HTMLElement>(selector)
+ : null
+ if (scrollableElement) {
+ event.preventDefault()
+ const pageScrollAmount = scrollableElement.clientHeight * 0.8
+ if (event.shiftKey) {
+ scrollableElement.scrollTop -= pageScrollAmount
+ } else {
+ scrollableElement.scrollTop += pageScrollAmount
+ }
+ }
+ return
+ }
+
if (focusedPanel === "sidebar") {
handleSidebarKeyDown(event)
return
@@ -368,7 +390,6 @@ export function useKeyboardNavigation() {
function handleDetailPanelKeyDown(event: KeyboardEvent) {
const SCROLL_AMOUNT = 100
- const PAGE_SCROLL_FRACTION = 0.8
const detailArticle = document.querySelector<HTMLElement>(
"[data-detail-article]"
)
@@ -386,19 +407,6 @@ export function useKeyboardNavigation() {
if (detailArticle) detailArticle.scrollTop -= SCROLL_AMOUNT
break
}
- case " ": {
- event.preventDefault()
- if (detailArticle) {
- const pageScrollAmount =
- detailArticle.clientHeight * PAGE_SCROLL_FRACTION
- if (event.shiftKey) {
- detailArticle.scrollTop -= pageScrollAmount
- } else {
- detailArticle.scrollTop += pageScrollAmount
- }
- }
- break
- }
case "?": {
event.preventDefault()
toggleShortcutsDialog()
@@ -517,9 +525,9 @@ export function useKeyboardNavigation() {
}
}
- document.addEventListener("keydown", handleKeyDown)
+ document.addEventListener("keydown", handleKeyDown, true)
- return () => document.removeEventListener("keydown", handleKeyDown)
+ return () => document.removeEventListener("keydown", handleKeyDown, true)
}, [
selectedEntryIdentifier,
focusedEntryIdentifier,