Skip to content

Commit 698c6d9

Browse files
Added logic to hide the copy button when choosing a different version
1 parent 6b32d0f commit 698c6d9

3 files changed

Lines changed: 25 additions & 1 deletion

File tree

app/components/CopyToClipboardButton.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const props = defineProps<{
1212
ariaLabelCopy?: string
1313
ariaLabelCopied?: string
1414
buttonAttrs?: HTMLAttributes
15+
hideCopyText?: boolean
1516
}>()
1617
1718
const buttonCopyText = computed(() => props.copyText || $t('common.copy'))
@@ -32,6 +33,7 @@ function handleClick() {
3233
<div class="group relative" v-bind="$attrs">
3334
<slot />
3435
<button
36+
v-if="!hideCopyText"
3537
type="button"
3638
@click="handleClick"
3739
class="absolute z-20 inset-is-0 top-full inline-flex items-center gap-1 px-2 py-1 rounded border text-xs font-mono whitespace-nowrap transition-all duration-150 opacity-0 -translate-y-1 pointer-events-none group-hover:opacity-100 group-hover:translate-y-0 group-hover:pointer-events-auto focus-visible:opacity-100 focus-visible:translate-y-0 focus-visible:pointer-events-auto"

app/components/Package/Header.vue

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,21 @@ const packageHeaderHeight = usePackageHeaderHeight()
2121
const header = useTemplateRef('header')
2222
const isHeaderPinned = shallowRef(false)
2323
const { height: headerHeight } = useElementBounding(header)
24+
const versionSelectorRef = useTemplateRef('versionSelectorRef')
25+
const versionSelectorOpen = computed(() => versionSelectorRef.value?.isOpen ?? false)
26+
const shouldHideCopyText = ref(false)
27+
let hideTextTimeout: ReturnType<typeof setTimeout> | null = null
28+
29+
watch(versionSelectorOpen, isOpen => {
30+
if (isOpen) {
31+
shouldHideCopyText.value = true
32+
if (hideTextTimeout) clearTimeout(hideTextTimeout)
33+
} else {
34+
hideTextTimeout = setTimeout(() => {
35+
shouldHideCopyText.value = false
36+
}, 300)
37+
}
38+
})
2439
2540
function isStickyPinned(el: HTMLElement | null): boolean {
2641
if (!el) return false
@@ -311,13 +326,15 @@ useShortcuts({
311326
</template>
312327
<CopyToClipboardButton
313328
:copied="copiedPkgVersion"
329+
v-if="resolvedVersion && pkg?.versions && pkg?.['dist-tags']"
314330
:copy-text="$t('package.versions.copy_version')"
331+
:hide-copy-text="shouldHideCopyText"
315332
class="inline-flex items-center min-w-0"
316333
@click="copyPkgVersion()"
317334
>
318335
<!-- Version selector -->
319336
<VersionSelector
320-
v-if="resolvedVersion && pkg?.versions && pkg?.['dist-tags']"
337+
ref="versionSelectorRef"
321338
:package-name="packageName"
322339
:current-version="resolvedVersion"
323340
:versions="pkg.versions"

app/components/VersionSelector.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,11 @@ watch(
523523
}
524524
},
525525
)
526+
527+
// Expose isOpen state to parent components
528+
defineExpose({
529+
isOpen,
530+
})
526531
</script>
527532

528533
<template>

0 commit comments

Comments
 (0)