Skip to content

Commit 7297e46

Browse files
fix(package): package manager tab hydration mismatch
1 parent c39683a commit 7297e46

1 file changed

Lines changed: 34 additions & 22 deletions

File tree

app/pages/[...package].vue

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -911,29 +911,41 @@ defineOgImageComponent('Package', {
911911
/>
912912
</a>
913913
</h2>
914-
<!-- Package manager tabs -->
915-
<div
916-
class="flex items-center gap-1 p-0.5 bg-bg-subtle border border-border-subtle rounded-md overflow-x-auto"
917-
role="tablist"
918-
:aria-label="$t('package.get_started.pm_label')"
919-
>
920-
<button
921-
v-for="pm in packageManagers"
922-
:key="pm.id"
923-
role="tab"
924-
:aria-selected="selectedPM === pm.id"
925-
class="px-2 py-1.5 font-mono text-xs rounded transition-colors duration-150 border border-solid focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fg/50 inline-flex items-center gap-1.5"
926-
:class="
927-
selectedPM === pm.id
928-
? 'bg-bg shadow text-fg border-border'
929-
: 'text-fg-subtle hover:text-fg border-transparent'
930-
"
931-
@click="selectedPM = pm.id"
914+
<ClientOnly>
915+
<!-- Package manager tabs -->
916+
<div
917+
class="flex items-center gap-1 p-0.5 bg-bg-subtle border border-border-subtle rounded-md overflow-x-auto"
918+
role="tablist"
919+
:aria-label="$t('package.get_started.pm_label')"
932920
>
933-
<span class="inline-block h-3 w-3" :class="pm.icon" aria-hidden="true" />
934-
{{ pm.label }}
935-
</button>
936-
</div>
921+
<button
922+
v-for="pm in packageManagers"
923+
:key="pm.id"
924+
role="tab"
925+
:aria-selected="selectedPM === pm.id"
926+
class="px-2 py-1.5 font-mono text-xs rounded transition-colors duration-150 border border-solid focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fg/50 inline-flex items-center gap-1.5"
927+
:class="
928+
selectedPM === pm.id
929+
? 'bg-bg shadow text-fg border-border'
930+
: 'text-fg-subtle hover:text-fg border-transparent'
931+
"
932+
@click="selectedPM = pm.id"
933+
>
934+
<span class="inline-block h-3 w-3" :class="pm.icon" aria-hidden="true" />
935+
{{ pm.label }}
936+
</button>
937+
</div>
938+
939+
<template #fallback>
940+
<div
941+
class="flex items-center gap-1 p-0.5 bg-bg-subtle border border-border-subtle rounded-md overflow-x-auto"
942+
aria-busy="true"
943+
:aria-label="$t('package.skeleton.loading')"
944+
>
945+
<div v-for="pm in packageManagers" :key="pm.id" class="skeleton w-16 h-8" />
946+
</div>
947+
</template>
948+
</ClientOnly>
937949
</div>
938950
<div class="relative group">
939951
<!-- Terminal-style install command -->

0 commit comments

Comments
 (0)