@@ -525,7 +525,7 @@ onKeyStroke(
525525 :class =" { 'border-b': isHeaderPinned }"
526526 >
527527 <!-- Package name and version -->
528- <div class =" flex items-baseline gap-2 sm:gap-3 flex-wrap min-w-0" >
528+ <div class =" flex items-baseline gap-x-2 gap-y-1 sm:gap-x -3 flex-wrap min-w-0" >
529529 <div class =" group relative flex flex-col items-start min-w-0" >
530530 <h1
531531 class =" font-mono text-2xl sm:text-3xl font-medium min-w-0 break-words"
@@ -605,15 +605,49 @@ onKeyStroke(
605605 >
606606 </span >
607607
608- <!-- Package metrics (module format, types) -->
609- <div class =" flex gap-2 sm:gap-3 flex-wrap" >
608+ <!-- Docs + Code + Compare — inline on desktop, floating bottom bar on mobile -->
609+ <ButtonGroup
610+ v-if =" resolvedVersion"
611+ as =" nav"
612+ :aria-label =" $t('package.navigation')"
613+ class =" package-nav hidden sm:flex max-sm:flex max-sm:fixed max-sm:z-40 max-sm:inset-is-50% max-sm:-translate-x-50% max-sm:bg-[--bg]/90 max-sm:backdrop-blur-md max-sm:border max-sm:border-border max-sm:rounded-md max-sm:shadow-md"
614+ >
615+ <LinkBase
616+ variant =" button-secondary"
617+ v-if =" docsLink"
618+ :to =" docsLink"
619+ keyshortcut =" d"
620+ classicon =" i-carbon:document"
621+ >
622+ {{ $t('package.links.docs') }}
623+ </LinkBase >
624+ <LinkBase
625+ variant =" button-secondary"
626+ :to =" { name: 'code', params: { path: [pkg.name, 'v', resolvedVersion] } }"
627+ keyshortcut =" ."
628+ classicon =" i-carbon:code"
629+ >
630+ {{ $t('package.links.code') }}
631+ </LinkBase >
632+ <LinkBase
633+ variant =" button-secondary"
634+ :to =" { name: 'compare', query: { packages: pkg.name } }"
635+ keyshortcut =" c"
636+ classicon =" i-carbon:compare"
637+ >
638+ {{ $t('package.links.compare') }}
639+ </LinkBase >
640+ </ButtonGroup >
641+
642+ <!-- Package metrics -->
643+ <div class =" basis-full flex gap-2 sm:gap-3 flex-wrap" >
610644 <ClientOnly >
611645 <PackageMetricsBadges
612646 v-if =" resolvedVersion"
613647 :package-name =" pkg.name"
614648 :version =" resolvedVersion"
615649 :is-binary =" isBinaryOnly"
616- class =" self-baseline ms-1 sm:ms-2 "
650+ class =" self-baseline"
617651 />
618652
619653 <!-- Package likes -->
@@ -654,9 +688,7 @@ onKeyStroke(
654688 </ButtonBase >
655689 </TooltipApp >
656690 <template #fallback >
657- <div
658- class =" flex items-center gap-1.5 list-none m-0 p-0 relative top-[5px] self-baseline ms-1 sm:ms-2"
659- >
691+ <div class =" flex items-center gap-1.5 list-none m-0 p-0 self-baseline" >
660692 <SkeletonBlock class =" w-16 h-5.5 rounded" />
661693 <SkeletonBlock class =" w-13 h-5.5 rounded" />
662694 <SkeletonBlock class =" w-13 h-5.5 rounded" />
@@ -665,40 +697,6 @@ onKeyStroke(
665697 </template >
666698 </ClientOnly >
667699 </div >
668-
669- <!-- Internal navigation: Docs + Code + Compare (hidden on mobile, shown in external links instead) -->
670- <ButtonGroup
671- v-if =" resolvedVersion"
672- as =" nav"
673- :aria-label =" $t('package.navigation')"
674- class =" hidden sm:flex"
675- >
676- <LinkBase
677- variant =" button-secondary"
678- v-if =" docsLink"
679- :to =" docsLink"
680- keyshortcut =" d"
681- classicon =" i-carbon:document"
682- >
683- {{ $t('package.links.docs') }}
684- </LinkBase >
685- <LinkBase
686- variant =" button-secondary"
687- :to =" { name: 'code', params: { path: [pkg.name, 'v', resolvedVersion] } }"
688- keyshortcut =" ."
689- classicon =" i-carbon:code"
690- >
691- {{ $t('package.links.code') }}
692- </LinkBase >
693- <LinkBase
694- variant =" button-secondary"
695- :to =" { name: 'compare', query: { packages: pkg.name } }"
696- keyshortcut =" c"
697- classicon =" i-carbon:compare"
698- >
699- {{ $t('package.links.compare') }}
700- </LinkBase >
701- </ButtonGroup >
702700 </div >
703701 </header >
704702
@@ -770,28 +768,6 @@ onKeyStroke(
770768 {{ $t('package.links.fund') }}
771769 </LinkBase >
772770 </li >
773- <!-- Mobile-only: Docs + Code + Compare links -->
774- <li v-if =" docsLink && displayVersion" class =" sm:hidden" >
775- <LinkBase :to =" docsLink" classicon =" i-carbon:document" >
776- {{ $t('package.links.docs') }}
777- </LinkBase >
778- </li >
779- <li v-if =" resolvedVersion" class =" sm:hidden" >
780- <LinkBase
781- :to =" { name: 'code', params: { path: [pkg.name, 'v', resolvedVersion] } }"
782- classicon =" i-carbon:code"
783- >
784- {{ $t('package.links.code') }}
785- </LinkBase >
786- </li >
787- <li class =" sm:hidden" >
788- <LinkBase
789- :to =" { name: 'compare', query: { packages: pkg.name } }"
790- classicon =" i-carbon:compare"
791- >
792- {{ $t('package.links.compare') }}
793- </LinkBase >
794- </li >
795771 </ul >
796772 </div >
797773
@@ -1373,4 +1349,19 @@ onKeyStroke(
13731349 display : none ;
13741350 }
13751351}
1352+
1353+ /* Mobile floating nav: safe-area positioning + kbd hiding */
1354+ @media (max-width : 639.9px ) {
1355+ .package-nav {
1356+ bottom : calc (1.25rem + env(safe-area-inset-bottom, 0px ));
1357+ }
1358+
1359+ .package-nav > :deep(a kbd ) {
1360+ display : none ;
1361+ }
1362+
1363+ .package-page {
1364+ padding-bottom : calc (4.5rem + env(safe-area-inset-bottom, 0px ));
1365+ }
1366+ }
13761367 </style >
0 commit comments