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

@place-ts/design

v0.3.3

Published

Component library — opinionated primitives built on @place-ts/component + @place-ts/reactivity. NOT a 10th platform system; see ADR 0016.

Readme

@place-ts/design

A curated component library shipped with the platform — not a tenth system. It ships opinionated UI primitives built on top of the nine platform systems; apps import from it directly.

import { Button, Field, Dialog } from '@place-ts/design'

Status: shipping. 14 primitives + a pluggable code tokenizer. 261 unit tests green. See docs/00-charter.md for scope, non-goals, and the prior-art mistakes deliberately avoided.

Why a package, not a system

The platform map keeps nine systems; the systems/design/ directory location is org-level only — see ADR 0016. The library is built entirely on the component system's recipe() + themeTokens() + Tailwind v4 base. No CLI, no codegen, no copy-paste-then-fork. No runtime CSS-in-JS, no theme-provider re-render cascade, no 'use client' boundaries.

Native-first composition

Every primitive sits on a real browser primitive, so the library adds behavior, not infrastructure:

  • <Dialog> / <Sheet> → native <dialog> + showModal() (top-layer, focus trap, Esc-to-close, ::backdrop).
  • <Combobox> / <Menu> / <Tooltip> → the Popover API + CSS Anchor Positioning (no JS positioners — see ADR 0048).
  • <Disclosure> → native <details> / <summary> + name-based exclusive accordions + interpolate-size.
  • <Field> validation styling → the :user-invalid selector.
  • Enter/exit transitions → @starting-style + transition-behavior: allow-discrete.

Public surface

| Primitive | Notes | |---|---| | Button | Intent / size variants, intent-aware focus ring, motion-driven loading spinner | | Field / Input / Textarea | :has()-driven validation, auto id + aria-describedby threading | | Dialog | Native <dialog>, closedby support, named Dialog.Header/Body/Footer slots | | Sheet | Edge-anchored drawer, per-side @starting-style transitions | | Combobox | Typeahead select, flex-shell layout, anchor-positioned listbox | | Toast / Toaster | Queue + auto-dismiss, motion enter/exit | | Tooltip | Hover/focus delay group, popover="hint" stack | | Menu | Keyboard nav, popovertarget + commandfor triggers, item kinds | | Disclosure / Disclosure.Group | Native <details>, exclusive accordions | | Avatar / Badge / Card | Presentational; Card.Header/Body/Footer slots | | Copy | Generic click-to-copy, single inline runtime | | CodeBlock | Syntax highlighting, pluggable tokenizer, line numbers / diff |

Customization contract

Two channels, both typed (see ADR 0050):

  • class — additive classes on the root element.
  • classNames={{ …parts }} — a typed per-sub-part map for multi-part components (Dialog's backdrop, Combobox's popover / option / …). Unknown keys are compile errors.

Recipe variants remain the typed override channel for appearance; classNames is the additive channel. Theme tokens (themeTokens() / theme()) re-skin every component atomically.