From 756ab952ce532978c086d704f984cf72485c90a7 Mon Sep 17 00:00:00 2001
From: Roman
{{ $t('package.get_started.dev_dependency_hint') }}
${{ ' ' }}
+ $
+ {{ i > 0 ? ' ' : '' }}{{ part }}
+ >
+
@@ -184,24 +174,15 @@ function copyCreateCommand() {
{{ $t('package.get_started.types_label') }}
${{ ' ' }}
+ $
+ {{ i > 0 ? ' ' : '' }}{{ part }}
+ >
+
{{ $t('package.run.locally') }}
-${{ ' ' }}
+ $
+ {{ i > 0 ? ' ' : '' }}{{ part }}
+ >
+
${{ ' ' }}
+ $
+ {{ i > 0 ? ' ' : '' }}{{ part }}
+ >
+
-
diff --git a/app/components/Package/Install/Dropdown.vue b/app/components/Package/Install/Dropdown.vue
index d5ebca4aef..df6706f9a9 100644
--- a/app/components/Package/Install/Dropdown.vue
+++ b/app/components/Package/Install/Dropdown.vue
@@ -137,14 +137,11 @@ onPrehydrate(el => {
{
-
From 6493ba169d0266ac9cd1fecf0a08d48014c86853 Mon Sep 17 00:00:00 2001
From: Roman
Date: Fri, 23 Oct 2026 17:57:43 +0100
Subject: [PATCH 2/6] fix
---
app/components/Package/Install/AdditionalCommands.vue | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/components/Package/Install/AdditionalCommands.vue b/app/components/Package/Install/AdditionalCommands.vue
index eba8928cb4..2d2371a5a2 100644
--- a/app/components/Package/Install/AdditionalCommands.vue
+++ b/app/components/Package/Install/AdditionalCommands.vue
@@ -16,6 +16,7 @@ const props = defineProps<{
selectedPm: PackageManagerId
}>()
+// Matches the summary row's copy button style (Package/Install/Dropdown.vue) for visual consistency.
const copyButtonClass =
'text-fg-muted bg-bg-subtle/80 border-border transition-all duration-150 hover:scale-105 active:scale-90 select-none'
From 30aa755687bb666feb147f67e5610f1a1514f654 Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Fri, 23 Oct 2026 16:59:00 +0000
Subject: [PATCH 3/6] [autofix.ci] apply automated fixes
---
app/components/Package/Install/AdditionalCommands.vue | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/app/components/Package/Install/AdditionalCommands.vue b/app/components/Package/Install/AdditionalCommands.vue
index 2d2371a5a2..91a18045f1 100644
--- a/app/components/Package/Install/AdditionalCommands.vue
+++ b/app/components/Package/Install/AdditionalCommands.vue
@@ -180,7 +180,9 @@ function copyCreateCommand() {
{{ i > 0 ? ' ' : '' }}{{ part }}
@@ -218,7 +220,11 @@ function copyCreateCommand() {
{{ i > 0 ? ' ' : '' }}{{ part }}
From ecaa4c06e89fc22869a6182e946b5a5fcc53f837 Mon Sep 17 00:00:00 2001
From: Roman {{ $t('package.get_started.dev_dependency_hint') }}
-
+
$
-
+
$
{{ $t('package.run.locally') }}
-
+
$
-
+
$
{
const createCommandSection = page.locator('[data-testid="create-command"]').first()
await expect(createCommandSection).toBeVisible()
- const activePm = await page.locator('[data-pm]').first().getAttribute('data-pm')
- const commandRow = createCommandSection.locator(`[data-pm-additional-cmd="${activePm}"]`)
+ const commandRow = createCommandSection.locator('code[data-pm-additional-cmd]')
await expect(commandRow).toBeVisible()
await expect(commandRow).toContainText(/create vite/i)
@@ -42,8 +41,7 @@ test.describe('Create Command', () => {
const createCommandSection = page.locator('[data-testid="create-command"]').first()
await expect(createCommandSection).toBeVisible()
- const activePm = await page.locator('[data-pm]').first().getAttribute('data-pm')
- const commandRow = createCommandSection.locator(`[data-pm-additional-cmd="${activePm}"]`)
+ const commandRow = createCommandSection.locator('code[data-pm-additional-cmd]')
await expect(commandRow).toBeVisible()
await expect(commandRow).toContainText(/create next-app/i)
@@ -63,8 +61,7 @@ test.describe('Create Command', () => {
// nuxt has create-nuxt package, so command is "npm create nuxt"
const createCommandSection = page.locator('[data-testid="create-command"]').first()
await expect(createCommandSection).toBeVisible()
- const activePm = await page.locator('[data-pm]').first().getAttribute('data-pm')
- const commandRow = createCommandSection.locator(`[data-pm-additional-cmd="${activePm}"]`)
+ const commandRow = createCommandSection.locator('code[data-pm-additional-cmd]')
await expect(commandRow).toBeVisible()
await expect(commandRow).toContainText(/create nuxt/i)
})
From bf168a8550f8ecbfedb5bb7fc18d51064d71338f Mon Sep 17 00:00:00 2001
From: Roman
Date: Fri, 23 Oct 2026 18:23:36 +0100
Subject: [PATCH 5/6] fix hydration
---
app/components/Package/Install/AdditionalCommands.vue | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/app/components/Package/Install/AdditionalCommands.vue b/app/components/Package/Install/AdditionalCommands.vue
index 56411ce8fe..0e42a13670 100644
--- a/app/components/Package/Install/AdditionalCommands.vue
+++ b/app/components/Package/Install/AdditionalCommands.vue
@@ -17,9 +17,13 @@ const props = defineProps<{
selectedPm: PackageManagerId
}>()
+const isMounted = ref(false)
+onMounted(() => {
+ isMounted.value = true
+})
+
const resolvedPm = computed(() => {
- if (import.meta.server) return 'npm'
- return props.selectedPm
+ return isMounted.value ? props.selectedPm : 'npm'
})
const selectedPackageManagerConfig = computed(() => getPackageManagerConfig(resolvedPm.value))
From 6be69a7b75456686dee623cd9a774cd70ca1e0ae Mon Sep 17 00:00:00 2001
From: Roman
Date: Fri, 23 Oct 2026 18:54:27 +0100
Subject: [PATCH 6/6] try again
---
app/components/Package/Install/Dropdown.vue | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/app/components/Package/Install/Dropdown.vue b/app/components/Package/Install/Dropdown.vue
index df6706f9a9..43d2270d10 100644
--- a/app/components/Package/Install/Dropdown.vue
+++ b/app/components/Package/Install/Dropdown.vue
@@ -3,6 +3,7 @@ import type { JsrPackageInfo } from '#shared/types/jsr'
import type { SlimPackumentVersion } from '#shared/types'
import type { DevDependencySuggestion } from '#shared/utils/dev-dependency'
import type { PublishSecurityDowngrade } from '~/utils/publish-security'
+import { getPackageManagerConfig } from '~/utils/install-command'
const props = defineProps<{
packageName: string
@@ -19,6 +20,11 @@ const props = defineProps<{
headingId: string
}>()
+const isMounted = ref(false)
+onMounted(() => {
+ isMounted.value = true
+})
+
const { selectedPM, showTypesInInstall, copied, copyInstallCommand } = useInstallCommand(
() => props.packageName,
() => props.requestedVersion ?? null,
@@ -27,6 +33,12 @@ const { selectedPM, showTypesInInstall, copied, copyInstallCommand } = useInstal
() => props.installVersionOverride ?? null,
)
+const resolvedPM = computed(() => {
+ return isMounted.value ? selectedPM.value : 'npm'
+})
+
+const selectedPackageManagerConfig = computed(() => getPackageManagerConfig(resolvedPM.value))
+
const { announce } = useCommandPalette()
const { polite } = useAnnouncer()
async function copyInstallCommandWithAnnounce() {
@@ -141,7 +153,7 @@ onPrehydrate(el => {
{
:show-types="showTypesInInstall"
:executable-info="executableInfo"
:create-package-info="createPackageInfo"
- :selected-pm="selectedPM"
+ :selected-pm="resolvedPM"
/>