Skip to content

Commit 41e395f

Browse files
committed
added changelog to packageHeader & switched changelog to use the packageHeader component
1 parent 43306af commit 41e395f

4 files changed

Lines changed: 85 additions & 48 deletions

File tree

app/components/Changelog/Markdown.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<script setup lang="ts">
22
const { info, requestedVersion, tpTarget } = defineProps<{
33
info: ChangelogMarkdownInfo
4-
requestedVersion: string | null
4+
requestedVersion: string | null | undefined
55
tpTarget?: HTMLElement | null
66
}>()
77

app/components/Package/Header.vue

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { useModal } from '~/composables/useModal'
66
import { useAtproto } from '~/composables/atproto/useAtproto'
77
import { togglePackageLike } from '~/utils/atproto/likes'
88
import { isEditableElement } from '~/utils/input'
9+
import { usePackageChangelog } from '~/composables/usePackageChangelog'
910
1011
const props = defineProps<{
1112
pkg?: Pick<SlimPackument, 'name' | 'versions' | 'dist-tags'> | null
@@ -14,7 +15,7 @@ const props = defineProps<{
1415
latestVersion?: SlimVersion | null
1516
provenanceData?: ProvenanceDetails | null
1617
provenanceStatus?: string | null
17-
page: 'main' | 'docs' | 'code' | 'diff'
18+
page: 'main' | 'docs' | 'code' | 'diff' | 'changes'
1819
versionUrlPattern: string
1920
}>()
2021
@@ -127,6 +128,15 @@ const diffLink = computed((): RouteLocationRaw | null => {
127128
return diffRoute(props.pkg.name, props.resolvedVersion, props.latestVersion.version)
128129
})
129130
131+
const { data: changelog } = usePackageChangelog(packageName, requestedVersion)
132+
133+
const changelogLink = computed((): RouteLocationRaw | null => {
134+
if (!changelog.value || props.pkg == null || props.resolvedVersion == null) {
135+
return null
136+
}
137+
return { name: 'changes', params: { path: [props.pkg.name, 'v', props.resolvedVersion] } }
138+
})
139+
130140
const keyboardShortcuts = useKeyboardShortcuts()
131141
132142
onKeyStroke(
@@ -181,6 +191,16 @@ onKeyStroke(
181191
{ dedupe: true },
182192
)
183193
194+
onKeyStroke(
195+
e => keyboardShortcuts.value && isKeyWithoutModifiers(e, '-') && !isEditableElement(e.target),
196+
e => {
197+
if (changelogLink.value === null) return
198+
e.preventDefault()
199+
navigateTo(changelogLink.value)
200+
},
201+
{ dedupe: true },
202+
)
203+
184204
//atproto
185205
// TODO: Maybe set this where it's not loaded here every load?
186206
const { user } = useAtproto()
@@ -429,6 +449,15 @@ const likeAction = async () => {
429449
>
430450
{{ $t('compare.compare_versions') }}
431451
</LinkBase>
452+
<LinkBase
453+
v-if="changelogLink"
454+
:to="changelogLink"
455+
aria-keyshortcuts="-"
456+
class="decoration-none border-b-2 p-1 hover:border-accent/50"
457+
:class="page === 'changes' ? 'border-accent text-accent!' : 'border-transparent'"
458+
>
459+
{{ $t('package.links.changelog') }}
460+
</LinkBase>
432461
</nav>
433462
</div>
434463
</div>

app/pages/package-changes/[...path].vue

Lines changed: 54 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ definePageMeta({
55
name: 'changes',
66
path: '/package-changes/:path+',
77
alias: ['/package/changes/:path+', '/changes/:path+'],
8-
scrollMargin: 150,
8+
scrollMargin: 200,
99
})
1010
1111
/// routing
@@ -50,7 +50,12 @@ const versionUrlPattern = computed(() => {
5050
return filePath.value ? `${base}/${filePath.value}` : base
5151
})
5252
53-
const latestVersion = computed(() => pkg.value?.['dist-tags']?.latest ?? null)
53+
const latestVersion = computed(() => {
54+
if (!pkg.value) return null
55+
const latestTag = pkg.value['dist-tags']?.latest
56+
if (!latestTag) return null
57+
return pkg.value.versions[latestTag] ?? null
58+
})
5459
5560
watch(
5661
[version, latestVersion, packageName],
@@ -81,63 +86,68 @@ const versionDate = computed(() => {
8186
8287
const viewOnGit = useViewOnGitProvider(() => changelog.value?.provider)
8388
84-
// defineOgImageComponent('Default', {
85-
// title: () => `${pkg.value?.name ?? 'Package'} - Changelogs`,
86-
// description: () => pkg.value?.license ?? '',
87-
// primaryColor: '#60a5fa',
88-
// })
89+
const packageHeaderHeight = usePackageHeaderHeight()
90+
const stickyStyle = computed(() => {
91+
return {
92+
'--combined-header-height': `${50 + (packageHeaderHeight.value || 44)}px`,
93+
}
94+
})
95+
96+
defineOgImageComponent('Default', {
97+
title: () => `${pkg.value?.name ?? 'Package'} - Changelogs`,
98+
description: () => pkg.value?.license ?? '',
99+
primaryColor: '#60a5fa',
100+
})
89101
</script>
90102
<template>
91-
<main class="flex-1 flex flex-col">
92-
<header class="border-b border-border bg-bg sticky top-14 z-20">
93-
<div class="container pt-4 pb-3">
94-
<div class="flex items-center gap-3 mb-3 flex-wrap min-w-0">
95-
<h1
96-
class="font-mono text-lg sm:text-xl font-semibold text-fg hover:text-fg-muted transition-colors truncate"
97-
>
98-
<NuxtLink v-if="packageName" :to="packageRoute(packageName, version)">
99-
{{ packageName }}
100-
</NuxtLink>
101-
</h1>
102-
103-
<VersionSelector
104-
v-if="(version || latestVersion) && pkg?.versions && pkg?.['dist-tags']"
105-
:package-name="packageName"
106-
:current-version="version ?? latestVersion!"
107-
:versions="pkg.versions"
108-
:dist-tags="pkg['dist-tags']"
109-
:url-pattern="versionUrlPattern"
110-
/>
111-
<div class="flex-1"></div>
112-
<LinkBase
113-
v-if="changelog?.link"
114-
:to="changelog?.link"
115-
:classicon="repoProviderIcon"
116-
:title="viewOnGit"
117-
>
118-
{{ changelog.provider }}
119-
</LinkBase>
120-
121-
<div v-if="changelog?.type == 'md'" ref="tptoc" class="w-14 h-8 ms-auto">
122-
<!-- prevents layout shift while loading -->
123-
</div>
103+
<main class="flex-1 flex flex-col" :style="stickyStyle">
104+
<PackageHeader
105+
page="changes"
106+
:versionUrlPattern
107+
:pkg
108+
:latestVersion
109+
:resolved-version="version"
110+
:display-version="pkg?.requestedVersion"
111+
/>
112+
<section class="container w-full pt-3" v-if="!pending">
113+
<div
114+
class="sticky top-[--combined-header-height] pa-3 z-2 flex justify-between gap-4"
115+
:class="$style.gitTocHeader"
116+
>
117+
<LinkBase
118+
v-if="changelog?.link"
119+
:to="changelog?.link"
120+
:classicon="repoProviderIcon"
121+
:title="viewOnGit"
122+
>
123+
{{ changelog.provider }}
124+
</LinkBase>
125+
<div v-if="changelog?.type == 'md'" ref="tptoc" class="w-14 h-8">
126+
<!- prevents layout shift while loading ->
124127
</div>
125128
</div>
126-
</header>
127-
<section class="container w-full" v-if="!pending">
129+
128130
<LazyChangelogReleases
129131
v-if="changelog?.type == 'release'"
130132
:info="changelog"
131133
:requestedDate="versionDate"
132-
:requested-version="version || latestVersion"
134+
:requested-version="version || latestVersion?.version"
133135
/>
134136
<LazyChangelogMarkdown
135137
v-else-if="changelog?.type == 'md'"
136138
:info="changelog"
137139
:tpTarget="tptoc"
138-
:requested-version="version || latestVersion"
140+
:requested-version="version || latestVersion?.version"
139141
/>
140142
<p class="mt-5" v-else>{{ $t('changelog.no_logs') }}</p>
141143
</section>
142144
</main>
143145
</template>
146+
147+
<style module>
148+
.gitTocHeader {
149+
border-bottom-width: 1px;
150+
border-color: color-mix(in srgb, var(--border) var(--un-border-opacity), transparent);
151+
background-color: color-mix(in srgb, var(--bg) var(--un-bg-opacity), transparent);
152+
}
153+
</style>

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import { getDependencyCount } from '~/utils/npm/dependency-count'
1717
import { detectPublishSecurityDowngradeForVersion } from '~/utils/publish-security'
1818
import { useInstallSizeDiff } from '~/composables/useInstallSizeDiff'
1919
import { useViewOnGitProvider } from '~/composables/useViewOnGitProvider'
20-
import { usePackageChangelog } from '~/composables/usePackageChangelog'
2120
2221
defineOgImageComponent('Package', {
2322
name: () => packageName.value,
@@ -173,7 +172,6 @@ const { data: skillsData } = useLazyFetch<SkillsListResponse>(
173172
174173
const { data: packageAnalysis } = usePackageAnalysis(packageName, requestedVersion)
175174
const { data: moduleReplacement } = useModuleReplacement(packageName)
176-
const { data: changelog } = usePackageChangelog(packageName, requestedVersion)
177175
178176
if (
179177
import.meta.server &&

0 commit comments

Comments
 (0)