npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@beyondandsharp/dsh-plugin-scaling

v0.2.3

Published

Independent per-pane zoom for the DSH web shell: Ctrl+wheel over a pane, Ctrl+± / Ctrl+0 for the focused pane. Works with the official look and every skin.

Readme

dsh-plugin-scaling

给 DSH Web GUI 的三栏(左栏 / 中间主窗口 / 右栏)做各自独立的整体缩放:1%–500%。 纯前端插件:不改宿主、不依赖皮肤,数值存在插件自己的 localStorage 里。

每档步长是按当前值的比例走的(不小于 1%):100% 时一格 = 5%(和原来一致), 20% 以下一格 = 1%,接近 500% 时一格 = 25% —— 这样 1% 与 500% 两端都在几下之内够得着。

用法

| 操作 | 作用 | | --- | --- | | Ctrl / ⌘ + 滚轮 | 缩放指针所在栏 | | Ctrl / ⌘ + + / - | 缩放焦点所在栏 | | Ctrl / ⌘ + 0 | 把该栏复位到 100% |

右栏拆成两列后,两列各算一栏、各自独立缩放。每次变化右下角会显示一下「栏名 + 百分比」。

悬停会话里「已修改文件」的行会弹出 diff 预览,它同样是独立的缩放对象:指针停在预览上时 Ctrl+滚轮 只缩放卡片里的 diff 内容——卡片本身的边框、内边距与位置保持宿主的样式不动, 三栏取值也不受影响(在此之前事件会落到浏览器,触发整页缩放)。

预览是临时的:鼠标移开、卡片关闭后它的缩放值会清零,下次悬停打开的是 100% 的新卡片。 键盘路径按「焦点所在栏」解析,而预览卡片不可聚焦,所以复位预览请用 Ctrl+滚轮 往回滚。

alt text alt text

安装

包内 lib/ 已入库,安装后不需要再构建:

# 本地安装
dsh plugin --profile web add /root/dsh-plugin-scaling
# 从npm安装
dsh plugin --profile web add @beyondandsharp/dsh-plugin-scaling
# 或从 git 安装
dsh plugin --profile web add github:BeyondandSharp/dsh-plugin-scaling

装完刷新页面即可用。在「设置 → 插件」里可以停用:停用即完全恢复浏览器原生缩放,不留任何属性、样式、监听器或提示条。

存储

数值按浏览器保存,刷新/重启后恢复:

localStorage['dsh.plugin-scaling.v1'] = {"left":1,"center":1,"right":1,"right-1":1}

right 是第一列、right-1 是右栏第二列。存储不可用(隐私模式等)时退化为纯内存;损坏或越界的项按项忽略并夹紧到 1%–500%。

缩放机制由引擎探针决定:Gecko(Firefox)用 transform,其它引擎用 zoom——Gecko 的 zoom 不作用于 border-image 的九宫格几何,会让皮肤用对称素材画的装饰(「新会话」缎带、输入框外框) 右端帽被拉伸或整框断开。该臂按栏打标、只在缩放 ≠ 100% 时生效;含工具栏的栏(中栏)把 transform 打在工具栏下方的内容上,所以会话头始终不受影响。

需要钉死机制时可以写存储项(改完刷新):

localStorage['dsh.plugin-scaling.mechanism'] = 'zoom' // 或 'transform' / 'auto'

取舍与原因见 docs/DESIGN.md。

说明

  • 官方默认外观与大多数皮肤(maid-atelier、orca-link …)下行为一致,只使用宿主设计 token;与「设置 → 通用 → 内容字号」是相乘关系。
  • 中栏顶部那一行(会话标题、视图页签、打开右栏的按钮)不跟着中栏缩放,始终按 100% 渲染;缩放只作用于它下面的内容。指针停在这一行上时 Ctrl+滚轮 交给浏览器做整页缩放,栏内其它位置仍是该栏缩放。
  • Gecko(Firefox)下 border-image 类皮肤装饰的右端帽会被默认的 zoom 拉伸;上面的 transform 开关可修好这一条(该臂仍在验证中,见 DESIGN 里的取舍说明)。
  • Web 壳的 Ctrl+±/0 键位固定(宿主快捷键服务把 Ctrl+= 判为浏览器保留组合而拒绝注册);Electron 桌面壳上会注册成三条可改键命令,出现在「设置 → 快捷键」。
  • 更细的取舍与实现说明(自校准、皮肤栏级装饰、宽度补偿等)见 docs/DESIGN.md。

开发

pnpm install        # 见 pnpm-workspace.yaml:不自动安装可选的宿主 peer
pnpm test           # vitest + jsdom
pnpm run build      # tsdown → lib/index.js + lib/client.js

发版

pnpm release 0.2.0            # 也可以用 patch | minor | major | prerelease

scripts/release.sh 的流程:

  1. 预检:仓库根、分支、工作区是否干净(有未提交改动直接拒绝,--allow-dirty 可跳过)、 当前版本、npm/pnpm 可用性、npm 登录状态、推送远端(origin → 分支上游 → 唯一远端)。 未登录时会直接执行 npm login/pnpm login 并等待你完成登录,然后继续(非交互终端会直接报错中止, 以免把提交/标签/推送做完才发现没登录)。
  2. 版本校验:必须严格大于 package.json 里的版本,也要大于 npm 上已发布的最新版; 本地标签或 registry 上已存在同版本会直接中止。任何一步失败都会把 package.json 回滚。
  3. 测试与构建 → pnpm test + pnpm run build,并检查 lib/index.js、lib/client.js、 cordis.patch.yml 都在。
  4. 打包预览:npm pack --dry-run,核对 files 白名单确实包含入口与文档。
  5. 提交与打标签:chore(pkg): bump version to X.Y.Z + 附注标签 X.Y.Z(与仓库现有标签风格一致)。
  6. 同步上游:推送当前分支与标签到 origin(--no-push 可跳过)。
  7. npm publish --dry-run:不写 registry,只打印将要发布的内容。
  8. 二次确认:终端里确认后才真正 npm publish;npm 给出二次验证链接时,在浏览器完成授权, 脚本会等它结束(没有网页验证时可用 --otp <code>)。
  9. 以退出码为准结束:npm publish 不报错即视为发布成功(不做发布后的 registry 轮询); 报错时给出单条重试与整条回滚的命令。

其它开关:--dry-run(全流程演练,什么都不写)、--no-publish(只提交/打标签/推送)、 --tag <name>(dist-tag,默认正式版 latest、预发布 next)、--yes(自动化场景跳过确认)。

许可

MIT,见 LICENSE。build/ 下的两个构建预设逐字 vendored 自 dsh-deep-whale(上游是 dsh-web-ui 的共享皮肤工程预设),同许可,署名见 docs/DESIGN.md。