@@ -195,18 +195,9 @@ const { data: skillsData } = useLazyFetch<SkillsListResponse>(
195195const { data : packageAnalysis } = usePackageAnalysis (packageName , requestedVersion )
196196const { data : moduleReplacement } = useModuleReplacement (packageName )
197197
198- const {
199- data : resolvedVersion,
200- status : versionStatus,
201- error : versionError,
202- } = await useResolvedVersion (packageName , requestedVersion )
203-
204- if (
205- versionStatus .value === ' error' &&
206- versionError .value ?.statusCode &&
207- versionError .value .statusCode >= 400 &&
208- versionError .value .statusCode < 500
209- ) {
198+ const { data : resolvedVersion } = await useResolvedVersion (packageName , requestedVersion )
199+
200+ if (resolvedVersion .value === null ) {
210201 throw createError ({
211202 statusCode: 404 ,
212203 statusMessage: $t (' package.not_found' ),
@@ -251,6 +242,13 @@ const { copied: copiedVersion, copy: copyVersion } = useClipboard({
251242 copiedDuring: 2000 ,
252243})
253244
245+ const { scrollToTop, isTouchDeviceClient } = useScrollToTop ()
246+
247+ const { y : scrollY } = useScroll (window )
248+ const showScrollToTop = computed (
249+ () => isTouchDeviceClient .value && scrollY .value > SCROLL_TO_TOP_THRESHOLD ,
250+ )
251+
254252// Fetch dependency analysis (lazy, client-side)
255253// This is the same composable used by PackageVulnerabilityTree and PackageDeprecatedTree
256254const { data : vulnTree, status : vulnTreeStatus } = useDependencyAnalysis (
@@ -786,26 +784,37 @@ const showSkeleton = shallowRef(false)
786784 :to =" docsLink"
787785 aria-keyshortcuts =" d"
788786 classicon =" i-lucide:file-text"
787+ :title =" $t('package.links.docs')"
789788 >
790- {{ $t('package.links.docs') }}
789+ < span class = " max-sm:sr-only " > {{ $t('package.links.docs') }}</ span >
791790 </LinkBase >
792791 <LinkBase
793792 v-if =" codeLink"
794793 variant =" button-secondary"
795794 :to =" codeLink"
796795 aria-keyshortcuts =" ."
797796 classicon =" i-lucide:code"
797+ :title =" $t('package.links.code')"
798798 >
799- {{ $t('package.links.code') }}
799+ < span class = " max-sm:sr-only " > {{ $t('package.links.code') }}</ span >
800800 </LinkBase >
801801 <LinkBase
802802 variant =" button-secondary"
803803 :to =" { name: 'compare', query: { packages: pkg.name } }"
804804 aria-keyshortcuts =" c"
805805 classicon =" i-lucide:git-compare"
806+ :title =" $t('package.links.compare')"
806807 >
807- {{ $t('package.links.compare') }}
808+ < span class = " max-sm:sr-only " > {{ $t('package.links.compare') }}</ span >
808809 </LinkBase >
810+ <ButtonBase
811+ v-if =" showScrollToTop"
812+ variant =" secondary"
813+ :title =" $t('common.scroll_to_top')"
814+ :aria-label =" $t('common.scroll_to_top')"
815+ @click =" () => scrollToTop()"
816+ classicon =" i-lucide:arrow-up"
817+ />
809818 </ButtonGroup >
810819
811820 <!-- Package metrics -->
0 commit comments