Skip to content

Commit 507a868

Browse files
authored
Merge branch 'main' into footer-tagline-baseline-and-text-balancing
2 parents 4d50cc8 + aa05c32 commit 507a868

14 files changed

Lines changed: 369 additions & 74 deletions

File tree

app/assets/main.css

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,9 @@ html.light .shiki span {
281281
white-space: pre;
282282
word-break: normal;
283283
overflow-wrap: normal;
284+
/* Makes unicode and ascii art work properly */
285+
line-height: 1.25;
286+
display: inline-block;
284287
}
285288

286289
.readme-content ul,

app/components/CodeDirectoryListing.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ function formatBytes(bytes: number): string {
7070
:to="parentPath ? `${baseUrl}/${parentPath}` : baseUrl"
7171
class="flex items-center gap-2 font-mono text-sm text-fg-muted hover:text-fg transition-colors"
7272
>
73-
<span class="i-carbon-folder w-4 h-4 text-yellow-600" />
73+
<span class="i-carbon:folder w-4 h-4 text-yellow-600" />
7474
<span>..</span>
7575
</NuxtLink>
7676
</td>
@@ -91,13 +91,13 @@ function formatBytes(bytes: number): string {
9191
>
9292
<span
9393
v-if="node.type === 'directory'"
94-
class="i-carbon-folder w-4 h-4 text-yellow-600"
94+
class="i-carbon:folder w-4 h-4 text-yellow-600"
9595
/>
9696
<span v-else class="w-4 h-4" :class="getFileIcon(node.name)" />
9797
<span>{{ node.name }}</span>
9898
</NuxtLink>
9999
</td>
100-
<td class="py-2 px-4 text-right font-mono text-xs text-fg-subtle">
100+
<td class="py-2 px-4 text-end font-mono text-xs text-fg-subtle">
101101
<span v-if="node.type === 'file' && node.size">
102102
{{ formatBytes(node.size) }}
103103
</span>

app/components/DateTime.vue

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,20 @@ const { locale } = useI18n()
3333
3434
const relativeDates = useRelativeDates()
3535
36+
const dateFormatter = new Intl.DateTimeFormat(locale.value, {
37+
month: 'short',
38+
day: 'numeric',
39+
year: 'numeric',
40+
hour: 'numeric',
41+
minute: '2-digit',
42+
timeZoneName: 'short',
43+
})
44+
3645
// Compute the title - always show full date for accessibility
3746
const titleValue = computed(() => {
3847
if (props.title) return props.title
39-
if (typeof props.datetime === 'string') return props.datetime
40-
return props.datetime.toISOString()
48+
const date = typeof props.datetime === 'string' ? new Date(props.datetime) : props.datetime
49+
return dateFormatter.format(date)
4150
})
4251
</script>
4352

app/components/PackagePlaygrounds.vue

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ const props = defineProps<{
77
88
// Map provider id to icon class
99
const providerIcons: Record<string, string> = {
10-
'stackblitz': 'i-simple-icons-stackblitz',
11-
'codesandbox': 'i-simple-icons-codesandbox',
12-
'codepen': 'i-simple-icons-codepen',
13-
'replit': 'i-simple-icons-replit',
14-
'gitpod': 'i-simple-icons-gitpod',
15-
'vue-playground': 'i-simple-icons-vuedotjs',
16-
'nuxt-new': 'i-simple-icons-nuxtdotjs',
17-
'vite-new': 'i-simple-icons-vite',
18-
'jsfiddle': 'i-carbon-code',
10+
'stackblitz': 'i-simple-icons:stackblitz',
11+
'codesandbox': 'i-simple-icons:codesandbox',
12+
'codepen': 'i-simple-icons:codepen',
13+
'replit': 'i-simple-icons:replit',
14+
'gitpod': 'i-simple-icons:gitpod',
15+
'vue-playground': 'i-simple-icons:vuedotjs',
16+
'nuxt-new': 'i-simple-icons:nuxtdotjs',
17+
'vite-new': 'i-simple-icons:vite',
18+
'jsfiddle': 'i-carbon:code',
1919
}
2020
2121
// Map provider id to color class
@@ -32,7 +32,7 @@ const providerColors: Record<string, string> = {
3232
}
3333
3434
function getIcon(provider: string): string {
35-
return providerIcons[provider] || 'i-carbon-play'
35+
return providerIcons[provider] || 'i-carbon:play'
3636
}
3737
3838
function getColor(provider: string): string {
@@ -141,13 +141,13 @@ function focusMenuItem(index: number) {
141141
@keydown="handleKeydown"
142142
>
143143
<span class="flex items-center gap-2">
144-
<span class="i-carbon-play w-4 h-4 shrink-0 text-fg-muted" aria-hidden="true" />
144+
<span class="i-carbon:play w-4 h-4 shrink-0 text-fg-muted" aria-hidden="true" />
145145
<span class="text-fg-muted"
146146
>{{ $t('package.playgrounds.choose') }} ({{ links.length }})</span
147147
>
148148
</span>
149149
<span
150-
class="i-carbon-chevron-down w-3 h-3 text-fg-subtle transition-transform duration-200 motion-reduce:transition-none"
150+
class="i-carbon:chevron-down w-3 h-3 text-fg-subtle transition-transform duration-200 motion-reduce:transition-none"
151151
:class="{ 'rotate-180': isOpen }"
152152
aria-hidden="true"
153153
/>
@@ -166,7 +166,7 @@ function focusMenuItem(index: number) {
166166
v-if="isOpen && hasMultipleLinks"
167167
ref="menuRef"
168168
role="menu"
169-
class="absolute top-full left-0 right-0 mt-1 bg-bg-elevated border border-border rounded-lg shadow-lg z-50 py-1 overflow-visible"
169+
class="absolute top-full inset-is-0 inset-ie-0 mt-1 bg-bg-elevated border border-border rounded-lg shadow-lg z-50 py-1 overflow-visible"
170170
@keydown="handleKeydown"
171171
>
172172
<AppTooltip v-for="link in links" :key="link.url" :text="link.providerName" class="block">

app/components/PackageSkeleton.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,10 @@
110110
</h2>
111111
<!-- code-block with relative positioning for copy button -->
112112
<div class="relative">
113-
<div class="code-block pr-16">
113+
<div class="code-block pe-16">
114114
<span class="skeleton inline-block h-5 w-52" />
115115
</div>
116-
<span class="skeleton absolute top-3 right-3 h-6 w-12 rounded" />
116+
<span class="skeleton absolute top-3 inset-ie-3 h-6 w-12 rounded" />
117117
</div>
118118
</section>
119119

app/components/PackageVulnerabilityTree.vue

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,15 @@ const summaryText = computed(() => {
3939
// Styling for each depth level - using accessible colors for both themes
4040
const depthStyles = {
4141
root: {
42-
bg: 'bg-amber-500/5 border-l-2 border-l-amber-600',
42+
bg: 'bg-amber-500/5 border-is-2 border-is-amber-600',
4343
text: 'text-fg',
4444
},
4545
direct: {
46-
bg: 'bg-amber-500/5 border-l-2 border-l-amber-500',
46+
bg: 'bg-amber-500/5 border-is-2 border-is-amber-500',
4747
text: 'text-fg-muted',
4848
},
4949
transitive: {
50-
bg: 'bg-amber-500/5 border-l-2 border-l-amber-400',
50+
bg: 'bg-amber-500/5 border-is-2 border-is-amber-400',
5151
text: 'text-fg-muted',
5252
},
5353
} as const
@@ -72,13 +72,13 @@ function getDepthStyle(depth: string | undefined) {
7272
<!-- Header -->
7373
<button
7474
type="button"
75-
class="w-full flex items-center justify-between gap-3 px-4 py-3 text-left transition-colors duration-200 hover:bg-white/5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-fg/50"
75+
class="w-full flex items-center justify-between gap-3 px-4 py-3 text-start transition-colors duration-200 hover:bg-white/5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-fg/50"
7676
:aria-expanded="isExpanded"
7777
aria-controls="vuln-tree-details"
7878
@click="isExpanded = !isExpanded"
7979
>
8080
<div class="flex items-center gap-2 min-w-0">
81-
<span class="i-carbon-warning-alt w-4 h-4 shrink-0" aria-hidden="true" />
81+
<span class="i-carbon:warning-alt w-4 h-4 shrink-0" aria-hidden="true" />
8282
<span class="font-mono text-sm font-medium truncate">
8383
{{
8484
$t(
@@ -96,7 +96,7 @@ function getDepthStyle(depth: string | undefined) {
9696
<div class="flex items-center gap-2 shrink-0">
9797
<span class="text-xs opacity-80 hidden sm:inline">{{ summaryText }}</span>
9898
<span
99-
class="i-carbon-chevron-down w-4 h-4 transition-transform duration-200"
99+
class="i-carbon:chevron-down w-4 h-4 transition-transform duration-200"
100100
:class="{ 'rotate-180': isExpanded }"
101101
aria-hidden="true"
102102
/>
@@ -181,7 +181,7 @@ function getDepthStyle(depth: string | undefined) {
181181
v-if="vulnTree!.failedQueries"
182182
class="px-4 py-2 text-xs text-fg-subtle border-t border-border flex items-center gap-2"
183183
>
184-
<span class="i-carbon-warning w-3 h-3" aria-hidden="true" />
184+
<span class="i-carbon:warning w-3 h-3" aria-hidden="true" />
185185
<span>{{ $t('package.vulnerabilities.packages_failed', vulnTree!.failedQueries) }}</span>
186186
</div>
187187
</div>
@@ -196,7 +196,7 @@ function getDepthStyle(depth: string | undefined) {
196196
<section v-else-if="status === 'error'" aria-labelledby="vuln-tree-error">
197197
<div class="rounded-lg border border-border bg-bg-subtle px-4 py-3">
198198
<div class="flex items-center gap-2">
199-
<span class="i-carbon-warning w-4 h-4 text-fg-subtle" aria-hidden="true" />
199+
<span class="i-carbon:warning w-4 h-4 text-fg-subtle" aria-hidden="true" />
200200
<span class="text-sm text-fg-muted">
201201
{{ $t('package.vulnerabilities.scan_failed') }}
202202
</span>

app/components/PackageWeeklyDownloadStats.vue

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -178,18 +178,18 @@ const config = computed(() => {
178178
>
179179
{{ $t('package.downloads.title') }}
180180
<span
181-
class="i-carbon-link w-3 h-3 block opacity-0 group-hover:opacity-100 transition-opacity duration-200"
181+
class="i-carbon:link w-3 h-3 block opacity-0 group-hover:opacity-100 transition-opacity duration-200"
182182
aria-hidden="true"
183183
/>
184184
</a>
185185
</h2>
186186
<button
187187
type="button"
188188
@click="showModal = true"
189-
class="link-subtle font-mono text-sm inline-flex items-center gap-1.5 ml-auto shrink-0 self-center focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fg/50 rounded"
189+
class="link-subtle font-mono text-sm inline-flex items-center gap-1.5 ms-auto shrink-0 self-center focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fg/50 rounded"
190190
:title="$t('package.downloads.analyze')"
191191
>
192-
<span class="i-carbon-data-analytics w-4 h-4" aria-hidden="true" />
192+
<span class="i-carbon:data-analytics w-4 h-4" aria-hidden="true" />
193193
<span class="sr-only">{{ $t('package.downloads.analyze') }}</span>
194194
</button>
195195
</div>
@@ -201,17 +201,17 @@ const config = computed(() => {
201201
<!-- Skeleton matching sparkline layout: title row + chart with data label -->
202202
<div class="min-h-[100px]">
203203
<!-- Title row: date range (24px height) -->
204-
<div class="h-6 flex items-center pl-3">
204+
<div class="h-6 flex items-center ps-3">
205205
<span class="skeleton h-3 w-36" />
206206
</div>
207207
<!-- Chart area: data label left, sparkline right -->
208208
<div class="aspect-[500/80] flex items-center">
209209
<!-- Data label (covers ~42% width) -->
210-
<div class="w-[42%] flex items-center pl-0.5">
210+
<div class="w-[42%] flex items-center ps-0.5">
211211
<span class="skeleton h-7 w-24" />
212212
</div>
213213
<!-- Sparkline area (~58% width) -->
214-
<div class="flex-1 flex items-end gap-0.5 h-4/5 pr-3">
214+
<div class="flex-1 flex items-end gap-0.5 h-4/5 pe-3">
215215
<span
216216
v-for="i in 16"
217217
:key="i"
@@ -245,7 +245,7 @@ const config = computed(() => {
245245
class="w-12 h-12 bg-bg-elevated border border-border rounded-full shadow-lg flex items-center justify-center text-fg-muted hover:text-fg transition-colors"
246246
:aria-label="$t('common.close')"
247247
>
248-
<span class="w-5 h-5 i-carbon-close" aria-hidden="true" />
248+
<span class="w-5 h-5 i-carbon:close" aria-hidden="true" />
249249
</button>
250250
</div>
251251
</template>

app/composables/useNpmRegistry.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ export function useNpmSearch(
287287
let lastSearch: NpmSearchResponse | undefined = undefined
288288

289289
const asyncData = useLazyAsyncData(
290-
`search:incremental:${toValue(query)}`,
290+
() => `search:incremental:${toValue(query)}`,
291291
async () => {
292292
const q = toValue(query)
293293
if (!q.trim()) {

app/pages/about.vue

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ const { data: contributors, status: contributorsStatus } = useFetch<GitHubContri
213213
class="group flex flex-col gap-3 p-4 rounded-lg bg-bg-subtle hover:bg-bg-elevated border border-border hover:border-border-hover transition-all duration-200"
214214
>
215215
<div class="flex items-center gap-2">
216-
<span class="i-carbon-logo-github w-5 h-5 text-fg" aria-hidden="true" />
216+
<span class="i-carbon:logo-github w-5 h-5 text-fg" aria-hidden="true" />
217217
<span class="font-medium text-fg">{{
218218
$t('about.get_involved.contribute.title')
219219
}}</span>
@@ -225,7 +225,7 @@ const { data: contributors, status: contributorsStatus } = useFetch<GitHubContri
225225
class="text-sm text-fg-muted group-hover:text-fg inline-flex items-center gap-1 mt-auto"
226226
>
227227
{{ $t('about.get_involved.contribute.cta') }}
228-
<span class="i-carbon-arrow-right w-3 h-3" aria-hidden="true" />
228+
<span class="i-carbon:arrow-right rtl-flip w-3 h-3" aria-hidden="true" />
229229
</span>
230230
</a>
231231

@@ -237,7 +237,7 @@ const { data: contributors, status: contributorsStatus } = useFetch<GitHubContri
237237
class="group flex flex-col gap-3 p-4 rounded-lg bg-bg-subtle hover:bg-bg-elevated border border-border hover:border-border-hover transition-all duration-200"
238238
>
239239
<div class="flex items-center gap-2">
240-
<span class="i-carbon-chat w-5 h-5 text-fg" aria-hidden="true" />
240+
<span class="i-carbon:chat w-5 h-5 text-fg" aria-hidden="true" />
241241
<span class="font-medium text-fg">{{
242242
$t('about.get_involved.community.title')
243243
}}</span>
@@ -249,7 +249,7 @@ const { data: contributors, status: contributorsStatus } = useFetch<GitHubContri
249249
class="text-sm text-fg-muted group-hover:text-fg inline-flex items-center gap-1 mt-auto"
250250
>
251251
{{ $t('about.get_involved.community.cta') }}
252-
<span class="i-carbon-arrow-right w-3 h-3" aria-hidden="true" />
252+
<span class="i-carbon:arrow-right rtl-flip w-3 h-3" aria-hidden="true" />
253253
</span>
254254
</a>
255255

@@ -261,7 +261,7 @@ const { data: contributors, status: contributorsStatus } = useFetch<GitHubContri
261261
class="group flex flex-col gap-3 p-4 rounded-lg bg-bg-subtle hover:bg-bg-elevated border border-border hover:border-border-hover transition-all duration-200"
262262
>
263263
<div class="flex items-center gap-2">
264-
<span class="i-simple-icons-bluesky w-5 h-5 text-fg" aria-hidden="true" />
264+
<span class="i-simple-icons:bluesky w-5 h-5 text-fg" aria-hidden="true" />
265265
<span class="font-medium text-fg">{{ $t('about.get_involved.follow.title') }}</span>
266266
</div>
267267
<p class="text-sm text-fg-muted leading-relaxed">
@@ -271,7 +271,7 @@ const { data: contributors, status: contributorsStatus } = useFetch<GitHubContri
271271
class="text-sm text-fg-muted group-hover:text-fg inline-flex items-center gap-1 mt-auto"
272272
>
273273
{{ $t('about.get_involved.follow.cta') }}
274-
<span class="i-carbon-arrow-right w-3 h-3" aria-hidden="true" />
274+
<span class="i-carbon:arrow-right rtl-flip w-3 h-3" aria-hidden="true" />
275275
</span>
276276
</a>
277277
</div>
@@ -283,7 +283,7 @@ const { data: contributors, status: contributorsStatus } = useFetch<GitHubContri
283283
to="/"
284284
class="inline-flex items-center gap-2 font-mono text-sm text-fg-muted hover:text-fg transition-[color] duration-200 rounded focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fg/50"
285285
>
286-
<span class="i-carbon-arrow-left w-4 h-4" aria-hidden="true" />
286+
<span class="i-carbon:arrow-left rtl-flip w-4 h-4" aria-hidden="true" />
287287
{{ $t('about.back_home') }}
288288
</NuxtLink>
289289
</footer>

app/pages/index.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ defineOgImageComponent('Default')
6363

6464
<div class="search-box relative flex items-center">
6565
<span
66-
class="absolute left-4 text-fg-subtle font-mono text-sm pointer-events-none transition-colors duration-200 group-focus-within:text-accent z-1"
66+
class="absolute inset-is-4 text-fg-subtle font-mono text-sm pointer-events-none transition-colors duration-200 group-focus-within:text-accent z-1"
6767
>
6868
/
6969
</span>
@@ -77,13 +77,13 @@ defineOgImageComponent('Default')
7777
:placeholder="$t('search.placeholder')"
7878
v-bind="noCorrect"
7979
autofocus
80-
class="w-full bg-bg-subtle border border-border rounded-lg pl-8 pr-24 py-4 font-mono text-base text-fg placeholder:text-fg-subtle transition-border-color duration-300 focus:border-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/50"
80+
class="w-full bg-bg-subtle border border-border rounded-lg ps-8 pe-24 py-4 font-mono text-base text-fg placeholder:text-fg-subtle transition-border-color duration-300 focus:border-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/50"
8181
@input="handleSearch"
8282
/>
8383

8484
<button
8585
type="submit"
86-
class="absolute right-2 px-4 py-2 font-mono text-sm text-bg bg-fg rounded-md transition-[background-color,transform] duration-200 hover:bg-fg/90 active:scale-95 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fg/50"
86+
class="absolute inset-ie-2 px-4 py-2 font-mono text-sm text-bg bg-fg rounded-md transition-[background-color,transform] duration-200 hover:bg-fg/90 active:scale-95 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fg/50"
8787
>
8888
{{ $t('search.button') }}
8989
</button>

0 commit comments

Comments
 (0)