@@ -72,7 +72,6 @@ function hasProvenance(version: PackumentVersion | null): boolean {
7272 return !! (version .dist as { attestations? : unknown }).attestations
7373}
7474
75- const router = useRouter ()
7675// Docs URL: use our generated API docs
7776const docsLink = computed (() => {
7877 if (! props .resolvedVersion ) return null
@@ -122,57 +121,26 @@ const diffLink = computed((): RouteLocationRaw | null => {
122121
123122const keyboardShortcuts = useKeyboardShortcuts ()
124123
125- onKeyStroke (
126- e => keyboardShortcuts .value && isKeyWithoutModifiers (e , ' .' ) && ! isEditableElement (e .target ),
127- e => {
128- if (codeLink .value === null ) return
129- e .preventDefault ()
130-
131- navigateTo (codeLink .value )
132- },
133- { dedupe: true },
134- )
135-
136- onKeyStroke (
137- e => keyboardShortcuts .value && isKeyWithoutModifiers (e , ' m' ) && ! isEditableElement (e .target ),
138- e => {
139- if (mainLink .value === null ) return
140- e .preventDefault ()
141-
142- navigateTo (mainLink .value )
143- },
144- { dedupe: true },
145- )
146-
147- onKeyStroke (
148- e => keyboardShortcuts .value && isKeyWithoutModifiers (e , ' d' ) && ! isEditableElement (e .target ),
149- e => {
150- if (! docsLink .value ) return
151- e .preventDefault ()
152- navigateTo (docsLink .value )
153- },
154- { dedupe: true },
155- )
156-
157- onKeyStroke (
158- e => keyboardShortcuts .value && isKeyWithoutModifiers (e , ' c' ) && ! isEditableElement (e .target ),
159- e => {
160- if (! props .pkg ) return
161- e .preventDefault ()
162- router .push ({ name: ' compare' , query: { packages: props .pkg .name } })
163- },
164- { dedupe: true },
165- )
166-
167- onKeyStroke (
168- e => keyboardShortcuts .value && isKeyWithoutModifiers (e , ' f' ) && ! isEditableElement (e .target ),
169- e => {
170- if (diffLink .value === null ) return
171- e .preventDefault ()
172- navigateTo (diffLink .value )
173- },
174- { dedupe: true },
175- )
124+ const shortcuts: [string , () => RouteLocationRaw | null | false | undefined ][] = [
125+ [' .' , () => codeLink .value ],
126+ [' m' , () => mainLink .value ],
127+ [' d' , () => docsLink .value ],
128+ [' c' , () => props .pkg && { name: ' compare' as const , query: { packages: props .pkg .name } }],
129+ [' f' , () => diffLink .value ],
130+ ]
131+
132+ for (const [key, getTarget] of shortcuts ) {
133+ onKeyStroke (
134+ e => keyboardShortcuts .value && isKeyWithoutModifiers (e , key ) && ! isEditableElement (e .target ),
135+ e => {
136+ const target = getTarget ()
137+ if (! target ) return
138+ e .preventDefault ()
139+ navigateTo (target )
140+ },
141+ { dedupe: true },
142+ )
143+ }
176144
177145const fundingUrl = computed (() => {
178146 let funding = props .displayVersion ?.funding
0 commit comments