@@ -20,69 +20,82 @@ const emit = defineEmits<{
2020
2121<template >
2222 <article
23- class =" group card-interactive scroll-mt-48 scroll-mb-6"
23+ class =" group card-interactive scroll-mt-48 scroll-mb-6 relative focus-within:outline-none focus-within:ring-2 focus-within:ring-offset-bg focus-within:ring-offset-2 focus-within:ring-fg/50 "
2424 :class =" { 'bg-bg-muted border-border-hover': selected }"
2525 >
26- <NuxtLink
27- :to =" { name: 'package', params: { package: result.package.name.split('/') } }"
28- :prefetch-on =" prefetch ? 'visibility' : 'interaction'"
29- class =" block focus:outline-none decoration-none scroll-mt-48 scroll-mb-6"
30- :data-result-index =" index"
31- @focus =" index != null && emit('focus', index)"
32- @mouseenter =" index != null && emit('focus', index)"
33- >
34- <header class =" flex items-start justify-between gap-4 mb-2" >
35- <component
36- :is =" headingLevel ?? 'h3'"
37- class =" font-mono text-base font-medium text-fg group-hover:text-fg transition-colors duration-200 min-w-0 break-all"
38- >
39- {{ result.package.name }}
40- </component >
41- <div class =" flex items-center gap-1.5 shrink-0 max-w-32" >
42- <span
43- v-if =" result.package.version"
44- class =" font-mono text-xs text-fg-subtle truncate"
45- :title =" result.package.version"
26+ <div class =" flex justify-between items-end gap-8" >
27+ <div >
28+ <div class =" flex items-center gap-2 mb-2" >
29+ <component
30+ :is =" headingLevel ?? 'h3'"
31+ class =" font-mono text-base font-medium text-fg group-hover:text-fg transition-colors duration-200 min-w-0 break-all"
4632 >
33+ <NuxtLink
34+ :to =" { name: 'package', params: { package: result.package.name.split('/') } }"
35+ :prefetch-on =" prefetch ? 'visibility' : 'interaction'"
36+ class =" focus:outline-none decoration-none scroll-mt-48 scroll-mb-6 after:content-[''] after:absolute after:inset-0"
37+ :data-result-index =" index"
38+ @focus =" index != null && emit('focus', index)"
39+ @mouseenter =" index != null && emit('focus', index)"
40+ >
41+ {{ result.package.name }}
42+ </NuxtLink >
43+ </component >
44+ </div >
45+ <p v-if =" result.package.description" class =" text-fg-muted text-sm line-clamp-2 mb-3" >
46+ <MarkdownText :text =" result.package.description" />
47+ </p >
48+ <div class =" flex flex-wrap items-center gap-x-4 gap-y-2 text-xs text-fg-subtle" >
49+ <dl v-if =" showPublisher || result.package.date" class =" flex items-center gap-4 m-0" >
50+ <div
51+ v-if =" showPublisher && result.package.publisher?.username"
52+ class =" flex items-center gap-1.5"
53+ >
54+ <dt class =" sr-only" >Publisher</dt >
55+ <dd class =" font-mono" >@{{ result.package.publisher.username }}</dd >
56+ </div >
57+ <div v-if =" result.package.date" class =" flex items-center gap-1.5" >
58+ <dt class =" sr-only" >Updated</dt >
59+ <dd >
60+ <NuxtTime
61+ :datetime =" result.package.date"
62+ year =" numeric"
63+ month =" short"
64+ day =" numeric"
65+ />
66+ </dd >
67+ </div >
68+ </dl >
69+ </div >
70+ </div >
71+ <div class =" flex flex-col gap-2 shrink-0" >
72+ <div class =" text-fg-subtle flex items-start gap-2 justify-end" >
73+ <span v-if =" result.package.version" class =" font-mono text-xs truncate" >
4774 v{{ result.package.version }}
4875 </span >
49- <ProvenanceBadge
50- v-if =" result.package.publisher?.trustedPublisher"
51- :provider =" result.package.publisher.trustedPublisher.id"
52- :package-name =" result.package.name"
53- :version =" result.package.version"
54- compact
55- />
56- </div >
57- </header >
58-
59- <p v-if =" result.package.description" class =" text-fg-muted text-sm line-clamp-2 mb-3" >
60- <MarkdownText :text =" result.package.description" />
61- </p >
62-
63- <footer class =" flex flex-wrap items-center gap-x-4 gap-y-2 text-xs text-fg-subtle" >
64- <dl v-if =" showPublisher || result.package.date" class =" flex items-center gap-4 m-0" >
6576 <div
66- v-if =" showPublisher && result.package.publisher?.username "
67- class =" flex items-center gap-1.5"
77+ v-if =" result.package.publisher?.trustedPublisher "
78+ class =" flex items-center gap-1.5 shrink-0 max-w-32 "
6879 >
69- <dt class =" sr-only" >Publisher</dt >
70- <dd class =" font-mono" >@{{ result.package.publisher.username }}</dd >
80+ <ProvenanceBadge
81+ :provider =" result.package.publisher.trustedPublisher.id"
82+ :package-name =" result.package.name"
83+ :version =" result.package.version"
84+ compact
85+ />
7186 </div >
72- <div v-if =" result.package.date" class =" flex items-center gap-1.5" >
73- <dt class =" sr-only" >Updated</dt >
74- <dd >
75- <NuxtTime
76- :datetime =" result.package.date"
77- year =" numeric"
78- month =" short"
79- day =" numeric"
80- />
81- </dd >
82- </div >
83- </dl >
84- </footer >
85- </NuxtLink >
87+ </div >
88+ <div
89+ v-if =" result.downloads?.weekly"
90+ class =" text-fg-subtle gap-2 flex items-center justify-end"
91+ >
92+ <span class =" i-carbon-chart-line w-3.5 h-3.5 inline-block" aria-hidden =" true" />
93+ <span class =" font-mono text-xs" >
94+ {{ formatNumber(result.downloads.weekly) }} / week
95+ </span >
96+ </div >
97+ </div >
98+ </div >
8699
87100 <ul
88101 v-if =" result.package.keywords?.length"
0 commit comments