From 30e5ce2ddb7c4b16e7ab6b8ee9fd22893b1b1f63 Mon Sep 17 00:00:00 2001 From: Thomas Deinhamer Date: Sun, 1 Feb 2026 00:00:15 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20pin=20package=20header=20=F0=9F=93=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/pages/[...package].vue | 303 ++++++++++++++++++++----------------- 1 file changed, 167 insertions(+), 136 deletions(-) diff --git a/app/pages/[...package].vue b/app/pages/[...package].vue index c5bbe36522..d86fc5f73f 100644 --- a/app/pages/[...package].vue +++ b/app/pages/[...package].vue @@ -19,6 +19,27 @@ definePageMeta({ const router = useRouter() +const header = useTemplateRef('header') +const isHeaderPinned = shallowRef(false) + +function checkHeaderPosition() { + const el = header.value + if (!el) return + + const style = getComputedStyle(el) + const top = parseFloat(style.top) || 0 + const rect = el.getBoundingClientRect() + + isHeaderPinned.value = Math.abs(rect.top - top) < 1 +} + +useEventListener('scroll', checkHeaderPosition, { passive: true }) +useEventListener('resize', checkHeaderPosition) + +onMounted(() => { + checkHeaderPosition() +}) + const { packageName, requestedVersion, orgName } = usePackageRoute() const selectedPM = useSelectedPackageManager() const activePmId = computed(() => selectedPM.value ?? 'npm') @@ -389,153 +410,157 @@ function handleClick(event: MouseEvent) {