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

@trujaycc/dsh-ui-easyfold

v0.2.0

Published

Easy-fold plugin for the dsh Web GUI: sticky Think fold row and fold scroll compensation for long expanded content

Readme

@trujaycc/dsh-ui-easyfold

English | 中文

Easy-fold plugin for the dsh Web GUI: two browser-side behaviors that keep long expanded content easy to read and fold.

Problem

Some disclosure components have a reading ergonomics problem: when the folded content is very long, expanding it and scrolling down to read carries the fold button out of the screen; to collapse the content again, the user must first scroll back to the top of the content to reach the button, interrupting their reading position.

Problem illustration: after expanding long content, the fold button scrolls out of the screen

Plugin effect: after expanding, the fold row sticks to the top and is always ready to collapse

What the plugin does

Both behaviors run entirely in the browser:

  • Sticky fold row — while the content is expanded, the fold row pins to the top of the conversation scrollport, staying visible and clickable during reading; the pin releases by itself once the whole content has scrolled out, without changing the layout.
  • Collapse scroll compensation — folding a pinned component (click, Enter, or Space on the row) pulls the scrollport back to the fold row's position — the spot the pinned row occupied. The viewport stays at the component node instead of landing below it; a fold of a row already inside the viewport stays exactly in place.

Affected UI components

| Component | Status | | ---------------------------------- | ----------- | | Think (reasoning fold row) | Implemented | | Other long-content fold components | Planned |

Install

Requires a dsh deployment with the Web surface. Install into the profile you use for pnpm dsh web:

pnpm dsh plugin --profile web add @trujaycc/dsh-ui-easyfold

pnpm dsh plugin add installs the package into the profile and registers its bundle patch layer automatically (the profile manifest's dsh.profile.bundles gains the entry). Restart pnpm dsh web to compose the new row, then open the Web page.

To uninstall:

pnpm dsh plugin --profile web remove @trujaycc/dsh-ui-easyfold

Develop

pnpm install
pnpm run typecheck
pnpm test
pnpm run build    # emits lib/index.js and lib/client.js (ModuleLoader handoff)

The client bundle resolves react from the dsh Web loader's platform module table; the package declares no other runtime dependencies. To test a local checkout before publishing, install it by path or tarball:

pnpm pack
pnpm dsh plugin --profile web add ./trujaycc-dsh-ui-easyfold-0.1.0.tgz

Model Experience

None. Presentation-only client plugin: no host services, tools, or session events; nothing reaches a model request or the session log.

KV Cache effect

None.

Known Limitations and Deferred Work

  • Product DOM contract coupling — both behaviors hook the dsh Web chat DOM by its stable attributes (data-conversation-scroll, data-variant="think", data-open, data-disclosure-row). A product markup change silently disables them.
  • First scrollport only — the compensation targets the first data-conversation-scroll in the document; side-by-side session windows (subagent views) keep a single behavior owner.
  • Bounded commit patience — the compensation waits up to eight animation frames for the product's React commit; a deferred commit beyond that window skips the correction (no scroll damage, just no pull-back).