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

changi-dls-cli

v1.0.0

Published

Add Changi DLS components into your app (shadcn-style registry)

Readme

changi-dls-cli

Copy Changi DLS UI primitives into your app (same idea as shadcn: you own the source files).

Maintainer workflow

From the changi-dls monorepo root:

npm run registry:build

This reads registry/manifest.json, generates .cursor/skills/changi-design-language-system/components/list.json (and the same file under .claude/skills/changi-design-language-system/), syncs SKILL.md and agents/guide.md between those skill folders, and writes bundled JSON under packages/dls-cli/registry/ (gitignored; recreated before npm publish via prepublishOnly).

To add or remove installable components, edit registry/manifest.json and re-run registry:build.

Local try

npm run registry:build
node packages/dls-cli/bin/changi-dls.mjs list
node packages/dls-cli/bin/changi-dls.mjs add button --cwd /path/to/target-app

Publish

npm run registry:build
npm publish -w changi-dls-cli

(publishConfig in this package sets access: "public" — the name is unscoped, so npm only accepts a public publish.)

Consumer prerequisites

  • Path alias: tsconfig.json should map @/* to the project root, because components import @/lib/utils and @/components/....

  • Tailwind v4 (PostCSS): The token file uses @import "tailwindcss" and @theme. Install:

    npm install tailwindcss @tailwindcss/postcss postcss

    Root postcss.config.mjs:

    const config = { plugins: { "@tailwindcss/postcss": {} } };
    export default config;
  • Design tokens + Lato: Every component that depends on utils (including button) installs components/changi-dls-lato-fontfaces.css (inlined @font-face woff2 from fonts.gstatic.com), components/changi-dls-design-tokens.css, lib/utils.ts, plus .cursor/skills/changi-design-language-system/ (SKILL.md — the Cursor skill entry — agents/guide.md, components/list.json). The CLI mirrors those three files under .claude/skills/changi-design-language-system/ so Claude Code gets the same layout. utils.ts imports the font file first, then tokens — no npm install for fonts and no next/font in layout. You do not need to wire CSS in layout.tsx unless a page never imports @/lib/utils or a DLS component.

  • Optional foundations: Same shipped files as utils (Lato faces + tokens + lib/utils.ts + the skill folders above), for teams that want an explicit “install tokens first” step. Not required if you already ran add button (or any component that pulls in utils).

  • Upgrading: If you have an older lib/utils.ts or token file, run npx changi-dls add <component> --force (or add foundations --force) to refresh them.

Commands

| Command | Description | |--------|-------------| | changi-dls list | Lists component ids and dependencies | | changi-dls add foundations | Copies Lato @font-face CSS, design tokens, and lib/utils.ts — optional if you already use add <component> | | changi-dls add all | Copies every registry component in dependency order. Same keywords: all-components, allcomponents, allcomponent. Omits foundations (same files as utils, which is installed transitively). | | changi-dls add <id> … | Copies files for those components plus their dependencies | | changi-dls add button --force | Overwrites existing files | | changi-dls add checkbox --dry-run | Prints planned paths without writing |

Component ids are kebab-case (e.g. quantity-selector).