Skip to content

Commit 5f2316a

Browse files
authored
feat: navigate to package code view on "dot" key (#100)
1 parent 1f88d31 commit 5f2316a

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

app/components/AppHeader.vue

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,15 @@ withDefaults(
3030
<NuxtLink
3131
to="/search"
3232
class="link-subtle font-mono text-sm inline-flex items-center gap-2"
33+
aria-keyshortcuts="/"
3334
>
3435
search
3536
<kbd
3637
class="hidden sm:inline-flex items-center justify-center w-5 h-5 text-xs bg-bg-muted border border-border rounded"
37-
>/</kbd
38+
aria-hidden="true"
3839
>
40+
/
41+
</kbd>
3942
</NuxtLink>
4043
</li>
4144
<li v-if="showConnector" class="flex">

app/pages/[...package].vue

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
<script setup lang="ts">
2-
import { joinURL } from 'ufo'
3-
import type { PackumentVersion, NpmVersionDist, ReadmeResponse } from '#shared/types'
2+
import type { NpmVersionDist, PackumentVersion, ReadmeResponse } from '#shared/types'
43
import type { JsrPackageInfo } from '#shared/types/jsr'
54
import { assertValidPackageName } from '#shared/utils/npm'
5+
import { onKeyStroke } from '@vueuse/core'
6+
import { joinURL } from 'ufo'
67
78
definePageMeta({
89
name: 'package',
@@ -11,6 +12,8 @@ definePageMeta({
1112
1213
const route = useRoute('package')
1314
15+
const router = useRouter()
16+
1417
// Parse package name and optional version from URL
1518
// Patterns:
1619
// /nuxt → packageName: "nuxt", requestedVersion: null
@@ -311,6 +314,17 @@ useSeoMeta({
311314
description: () => pkg.value?.description ?? '',
312315
})
313316
317+
onKeyStroke('.', () => {
318+
if (pkg.value && displayVersion.value) {
319+
router.push({
320+
name: 'code',
321+
params: {
322+
path: [pkg.value.name, 'v', displayVersion.value.version],
323+
},
324+
})
325+
}
326+
})
327+
314328
defineOgImageComponent('Package', {
315329
name: () => pkg.value?.name ?? 'Package',
316330
version: () => displayVersion.value?.version ?? '',
@@ -656,9 +670,15 @@ defineOgImageComponent('Package', {
656670
params: { path: [...pkg.name.split('/'), 'v', displayVersion.version] },
657671
}"
658672
class="link-subtle font-mono text-sm inline-flex items-center gap-1.5"
673+
aria-keyshortcuts="."
659674
>
660-
<span class="i-carbon-code w-4 h-4" aria-hidden="true" />
661675
code
676+
<kbd
677+
class="hidden sm:inline-flex items-center justify-center w-4 h-4 text-xs bg-bg-muted border border-border rounded"
678+
aria-hidden="true"
679+
>
680+
.
681+
</kbd>
662682
</NuxtLink>
663683
</li>
664684
</ul>

0 commit comments

Comments
 (0)