From 036dfc2c222e03e727505e5cd3fddc267f697fb4 Mon Sep 17 00:00:00 2001 From: Jonathan Yeong Date: Tue, 3 Mar 2026 17:40:08 -0500 Subject: [PATCH 01/12] chore: add link to jonathanyeong.com post to alpha blog post (#1907) --- app/pages/blog/alpha-release.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/pages/blog/alpha-release.md b/app/pages/blog/alpha-release.md index 72aa5779f..c5e8cb9bb 100644 --- a/app/pages/blog/alpha-release.md +++ b/app/pages/blog/alpha-release.md @@ -238,6 +238,12 @@ headline="Read more from the community" title: 'Finding an accessibility-first culture in npmx', authorHandle: 'abbeyperini.dev', description: 'Abbey Perini talks about how accessibility is a deep part of the npmx culture.' + }, + { + url: 'https://jonathanyeong.com/writing/npmx-and-the-open-source-mindset/', + title: 'npmx and the open source mindset', + authorHandle: 'jonathanyeong.com', + description: 'How npmx taught me to embrace the open source mindset.' } ]" /> From 225b6d45e5c80ffda7fee00f0142ff0097755097 Mon Sep 17 00:00:00 2001 From: btea <2356281422@qq.com> Date: Wed, 4 Mar 2026 15:12:26 +0800 Subject: [PATCH 02/12] feat: add sticky effect to the readme header on the readme page (#1775) --- app/pages/package/[[org]]/[name].vue | 24 +++++++++++++++++----- app/pages/package/[[org]]/[name]/index.vue | 2 +- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/app/pages/package/[[org]]/[name].vue b/app/pages/package/[[org]]/[name].vue index f0acf8415..f2e9d2156 100644 --- a/app/pages/package/[[org]]/[name].vue +++ b/app/pages/package/[[org]]/[name].vue @@ -33,18 +33,27 @@ const router = useRouter() const header = useTemplateRef('header') const isHeaderPinned = shallowRef(false) +const readmeHeader = useTemplateRef('readmeHeader') +const isReadmeHeaderPinned = shallowRef(false) const navExtraOffset = shallowRef(0) const isMobile = useMediaQuery('(max-width: 639.9px)') -function checkHeaderPosition() { - const el = header.value - if (!el) return +const headerBounds = useElementBounding(header) +const readmeStickyTop = computed(() => `${56 + headerBounds.height.value}px`) + +function isStickyPinned(el: HTMLElement | null): boolean { + if (!el) return false const style = getComputedStyle(el) const top = parseFloat(style.top) || 0 const rect = el.getBoundingClientRect() - isHeaderPinned.value = Math.abs(rect.top - top) < 1 + return Math.abs(rect.top - top) < 1 +} + +function checkHeaderPosition() { + isHeaderPinned.value = isStickyPinned(header.value) + isReadmeHeaderPinned.value = isStickyPinned(readmeHeader.value) } useEventListener('scroll', checkHeaderPosition, { passive: true }) @@ -1394,7 +1403,12 @@ const showSkeleton = shallowRef(false)
-
+

{{ $t('package.readme.title') }} diff --git a/app/pages/package/[[org]]/[name]/index.vue b/app/pages/package/[[org]]/[name]/index.vue index ba122fbfc..632e87a47 100644 --- a/app/pages/package/[[org]]/[name]/index.vue +++ b/app/pages/package/[[org]]/[name]/index.vue @@ -2,7 +2,7 @@ // stub page to help with paths definePageMeta({ name: 'package', - scrollMargin: 150, + scrollMargin: 200, }) From d87e85c5d0e64340f01ecdf8f5134a81ec88a374 Mon Sep 17 00:00:00 2001 From: liweijie0812 <674416404@qq.com> Date: Wed, 4 Mar 2026 15:42:01 +0800 Subject: [PATCH 03/12] fix(i18n): update zh-CN translation (#1915) --- i18n/locales/zh-CN.json | 46 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/i18n/locales/zh-CN.json b/i18n/locales/zh-CN.json index 4d2dd6d76..0d761fbc8 100644 --- a/i18n/locales/zh-CN.json +++ b/i18n/locales/zh-CN.json @@ -18,6 +18,7 @@ "source": "源码", "social": "社交媒体", "chat": "聊天", + "builders_chat": "构建者", "keyboard_shortcuts": "键盘快捷键" }, "shortcuts": { @@ -64,7 +65,13 @@ "org": "组织", "view_user_packages": "查看该用户的包", "view_org_packages": "查看该组织的包" - } + }, + "instant_search": "即时搜索", + "instant_search_on": "已开启", + "instant_search_off": "已关闭", + "instant_search_turn_on": "开启", + "instant_search_turn_off": "关闭", + "instant_search_advisory": "{label} {state} — {action}" }, "nav": { "main_navigation": "主页", @@ -85,6 +92,8 @@ "author": { "view_profile": "在 Bluesky 上查看 {name} 的资料" }, + "draft_badge": "草稿", + "draft_banner": "这是一篇未发布的草稿。内容可能不完整或包含不准确的信息。", "atproto": { "view_on_bluesky": "在 Bluesky 上查看", "reply_on_bluesky": "在 Bluesky 上回复", @@ -120,6 +129,8 @@ "algolia": "Algolia", "algolia_description": "使用 Algolia 来实现更快的搜索,适用于组织页和用户页。" }, + "instant_search": "即时搜索", + "instant_search_description": "导航到搜索页面并在输入时更新结果。", "relative_dates": "相对时间", "include_types": "在安装时包含 {'@'}types", "include_types_description": "为未提供类型定义的包自动添加 {'@'}types 包到安装命令", @@ -954,6 +965,11 @@ "description": "聊天、提出问题并分享想法。", "cta": "加入 Discord" }, + "builders": { + "title": "参与构建 npmx", + "description": "加入构建者团队,共同塑造 npmx 的未来。", + "cta": "加入构建者 Discord" + }, "follow": { "title": "保持更新", "description": "了解 npmx 的最新动态。", @@ -1163,6 +1179,34 @@ "close_files_panel": "关闭文件面板", "filter_files_label": "按更改类型筛选文件" }, + "pds": { + "title": "npmx.social", + "meta_description": "npmx 社区的官方 AT Protocol 个人数据服务器 (PDS)。", + "join": { + "title": "加入社区", + "description": "无论你是第一次在 Atmosphere 上创建账户,还是迁移现有账户,这里都是你的归属。你可以迁移当前账户,而不会丢失你的账户、帖子或关注者。", + "migrate": "使用 PDS MOOver 迁移" + }, + "server": { + "title": "服务器详情", + "location_label": "位置:", + "location_value": "德国,纽伦堡", + "infrastructure_label": "基础设施:", + "infrastructure_value": "托管于 Hetzner", + "privacy_label": "隐私:", + "privacy_value": "受欧盟严格的数据保护法律约束", + "learn_more": "了解 npmx 如何使用 Atmosphere" + }, + "community": { + "title": "谁在这里", + "description": "在 {count} 个已将 npmx.social 视为家的账户中,这里有一些:", + "loading": "正在加载 PDS 社区...", + "error": "加载 PDS 社区失败。", + "empty": "没有社区成员可显示。", + "view_profile": "查看 {handle} 的资料", + "new_accounts": "...以及 {count} 个新加入 Atmosphere 的账户" + } + }, "privacy_policy": { "title": "隐私政策", "last_updated": "上次更新:{date}", From f2045e664d92f22322a327dd6ca10efcd60ea1ac Mon Sep 17 00:00:00 2001 From: btea <2356281422@qq.com> Date: Wed, 4 Mar 2026 17:17:22 +0800 Subject: [PATCH 04/12] fix(ui): readme toc dropdown scroll to the selected item position (#1917) Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- app/components/ReadmeTocDropdown.vue | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/app/components/ReadmeTocDropdown.vue b/app/components/ReadmeTocDropdown.vue index 66f92d08e..cafb7f1ea 100644 --- a/app/components/ReadmeTocDropdown.vue +++ b/app/components/ReadmeTocDropdown.vue @@ -139,6 +139,27 @@ function handleKeydown(event: KeyboardEvent) { break } } + +const itemScrollIntoView = (index: number) => { + const item = props.toc[index] + if (!item) return + const el = document.getElementById(`${listboxId}-${item.id}`) + if (el) { + el.scrollIntoView({ block: 'center' }) + } +} + +watch( + isOpen, + open => { + if (open && highlightedIndex.value >= 0) { + itemScrollIntoView(highlightedIndex.value) + } + }, + { + flush: 'post', + }, +)