11<script setup lang="ts">
2- import type { PackumentVersion , ProvenanceDetails , SlimVersion } from ' #shared/types'
2+ import type { PackumentVersion , ProvenanceDetails , SlimVersion , SlimPackument } from ' #shared/types'
33import type { RouteLocationRaw } from ' vue-router'
44import { SCROLL_TO_TOP_THRESHOLD } from ' ~/composables/useScrollToTop'
55import { useModal } from ' ~/composables/useModal'
66import { useAtproto } from ' ~/composables/atproto/useAtproto'
77import { togglePackageLike } from ' ~/utils/atproto/likes'
88
99const props = defineProps <{
10- pkg: { name : string } | null
10+ pkg: SlimPackument | null
1111 resolvedVersion? : string | null
1212 displayVersion: PackumentVersion | null
1313 latestVersion: SlimVersion | null
1414 provenanceData: ProvenanceDetails | null
1515 provenanceStatus: string
1616 docsLink: RouteLocationRaw | null
1717 codeLink: RouteLocationRaw | null
18- page: ' docs' | ' code' | ' diff'
18+ page: ' readme' | ' docs' | ' code' | ' diff'
19+ versionUrlPattern: string
1920}>()
2021
2122const { requestedVersion, orgName } = usePackageRoute ()
@@ -74,11 +75,6 @@ const { copied: copiedPkgName, copy: copyPkgName } = useClipboard({
7475 copiedDuring: 2000 ,
7576})
7677
77- const { copied : copiedVersion, copy : copyVersion } = useClipboard ({
78- source : () => props .resolvedVersion ?? ' ' ,
79- copiedDuring: 2000 ,
80- })
81-
8278function hasProvenance(version : PackumentVersion | null ): boolean {
8379 if (! version ?.dist ) return false
8480 return !! (version .dist as { attestations? : unknown }).attestations
@@ -238,7 +234,7 @@ const likeAction = async () => {
238234 class =" py-1.5 px-2.5 sm:me-2"
239235 :tabindex =" showScrollToTop ? 0 : -1"
240236 />
241- <div class =" break-all font-mono text-fg-muted" >
237+ <div class =" flex-inline items-center flex-nowrap gap-1 font-mono text-fg-muted" >
242238 <template v-if =" hasProvenance (displayVersion )" >
243239 <TooltipApp
244240 :text ="
@@ -271,28 +267,15 @@ const likeAction = async () => {
271267 <span class =" i-lucide:cable rtl-flip min-w-3 w-3 h-3 mx-1" aria-hidden =" true" />
272268 </TooltipApp >
273269 </template >
274- <CopyToClipboardButton
275- v-if =" resolvedVersion"
276- :copied =" copiedVersion"
277- :copy-text =" $t('package.copy_version')"
278- @click =" copyVersion()"
279- class =" inline"
280- >
281- <LinkBase
282- v-if =" requestedVersion && resolvedVersion !== requestedVersion"
283- :to =" packageRoute(packageName, resolvedVersion)"
284- :title =" $t('package.view_permalink')"
285- dir =" ltr"
286- class =" inline!"
287- >{{ resolvedVersion }}</LinkBase
288- >
289- <span dir =" ltr" v-else >v{{ resolvedVersion }}</span >
290- </CopyToClipboardButton >
291- <span
292- v-if =" requestedVersion && latestVersion && resolvedVersion !== latestVersion.version"
293- class =" text-fg-subtle text-sm text-nowrap ms-1"
294- >{{ $t('package.not_latest') }}</span
295- >
270+ <!-- Version selector -->
271+ <VersionSelector
272+ v-if =" resolvedVersion && pkg?.versions && pkg?.['dist-tags']"
273+ :package-name =" packageName"
274+ :current-version =" resolvedVersion"
275+ :versions =" pkg.versions"
276+ :dist-tags =" pkg['dist-tags']"
277+ :url-pattern =" versionUrlPattern"
278+ />
296279 </div >
297280 </div >
298281 <!-- Docs + Code — inline on desktop, floating bottom bar on mobile -->
@@ -303,6 +286,15 @@ const likeAction = async () => {
303286 :style =" navExtraOffsetStyle"
304287 :class =" $style.packageNav"
305288 >
289+ <LinkBase
290+ v-if =" docsLink"
291+ :to =" docsLink"
292+ aria-keyshortcuts =" r"
293+ class =" decoration-none border-b-2 p-1 hover:border-accent/50 lowercase"
294+ :class =" page === 'readme' ? 'border-accent text-accent!' : 'border-transparent'"
295+ >
296+ {{ $t('package.readme.title') }}
297+ </LinkBase >
306298 <LinkBase
307299 v-if =" docsLink"
308300 :to =" docsLink"
@@ -325,6 +317,7 @@ const likeAction = async () => {
325317 v-if =" displayVersion && latestVersion && displayVersion.version !== latestVersion.version"
326318 :to =" diffRoute(packageName, displayVersion.version, latestVersion.version)"
327319 :title =" $t('compare.compare_versions_title')"
320+ aria-keyshortcuts =" f"
328321 class =" decoration-none border-b-2 p-1 hover:border-accent/50"
329322 :class =" page === 'diff' ? 'border-accent text-accent!' : 'border-transparent'"
330323 >
0 commit comments