From 2647ccaf9cd9c0ee7ed7b219d8da10dd5ca4bc40 Mon Sep 17 00:00:00 2001 From: xusnitdinov Date: Fri, 17 Jul 2026 18:23:29 +0500 Subject: [PATCH] feat(ui): add quick copy for package version Co-authored-by: Cursor --- app/components/Package/Header.vue | 30 ++++++++++++++++++++++++++++++ i18n/locales/en.json | 1 + i18n/schema.json | 3 +++ 3 files changed, 34 insertions(+) diff --git a/app/components/Package/Header.vue b/app/components/Package/Header.vue index d0306d3706..4545e9e429 100644 --- a/app/components/Package/Header.vue +++ b/app/components/Package/Header.vue @@ -61,6 +61,7 @@ const { y: scrollY } = useScroll(window) const showScrollToTop = computed(() => scrollY.value > SCROLL_TO_TOP_THRESHOLD) const packageName = computed(() => props.pkg?.name ?? '') +const resolvedVersionText = computed(() => props.resolvedVersion ?? '') const fundingUrl = computed(() => { let funding = props.displayVersion?.funding if (Array.isArray(funding)) funding = funding[0] @@ -75,6 +76,11 @@ const { copied: copiedPkgName, copy: copyPkgName } = useClipboard({ copiedDuring: 2000, }) +const { copied: copiedVersion, copy: copyVersion } = useClipboard({ + source: resolvedVersionText, + copiedDuring: 2000, +}) + function hasProvenance(version: PackumentVersion | null): boolean { if (!version?.dist) return false return !!(version.dist as { attestations?: unknown }).attestations @@ -100,6 +106,20 @@ useCommandPaletteContextCommands( }, ] + if (resolvedVersionText.value) { + commands.push({ + id: 'package-copy-version', + group: 'package', + label: $t('package.copy_version'), + keywords: [resolvedVersionText.value], + iconClass: 'i-lucide:copy', + action: () => { + copyVersion() + announce($t('command_palette.announcements.copied_to_clipboard')) + }, + }) + } + if (fundingUrl.value) { commands.push({ id: 'package-link-funding', @@ -313,6 +333,16 @@ useShortcuts({ :url-pattern="versionUrlPattern" position-class="max-md:inset-is-0 md:inset-ie-0" /> + + diff --git a/i18n/locales/en.json b/i18n/locales/en.json index 9fe439a78c..decd166718 100644 --- a/i18n/locales/en.json +++ b/i18n/locales/en.json @@ -411,6 +411,7 @@ "verified_provenance": "Verified provenance", "navigation": "Package", "copy_name": "Copy package name", + "copy_version": "Copy version", "deprecation": { "package": "This package has been deprecated.", "version": "This version has been deprecated.", diff --git a/i18n/schema.json b/i18n/schema.json index 63dccc9991..63d95b8257 100644 --- a/i18n/schema.json +++ b/i18n/schema.json @@ -1237,6 +1237,9 @@ "copy_name": { "type": "string" }, + "copy_version": { + "type": "string" + }, "deprecation": { "type": "object", "properties": {