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 🙏

© 2025 – Pkg Stats / Ryan Hefner

@urban-ui/theme

v0.8.0

Published

## Tokens

Readme

Theme

Tokens

Individual tokens are defined in their respective tokens files. These are always mapped to css variables.

import { space } from '@urban-ui/theme/layout.stylex'
import { tone } from '@urban-ui/theme/colors.stylex'

// Usage
const styles = stylex.create({
  container: {
    margin: space[100],
    color: tone.fgHi,
    background: tone.surfaceBase
  },
})

<div {...stylex.props(styles.container)}></div>

Themes

Colours are defined as a collection of tokens called a tone. These collections are exported as individual tokens and also as a theme.

Themes can override a set value; where you want to have contextual values use tokens from the tone colour space.

import { tone } from '@urban-ui/theme/colors.stylex'

// Usage
const styles = stylex.create({
  container: {
    color: tone.fgHi,
    background: tone.surfaceBase
  },
})

export function ContextAwareColours() {
  return <div {...stylex.props(styles.container)}></div>
}

Use theme variables to provide contextual values.

import { tone } from '@urban-ui/theme/colors.stylex'
import { primary } from '@urban-ui/theme' 

// Usage - will render primary foreground and surface colours
<div {...stylex.props(primary)}>
  <ContextAwareColours />
</div>

You can mix and match between individual tokens from a given tone and the contextual tone variables.

import { tone, primary as primaryTokens } from '@urban-ui/theme/colors.stylex'
import { primary } from '@urban-ui/theme

// Usage
const styles = stylex.create({
  container: {
    color: primaryTokens.fgHi,
    background: tone.surfaceBase
  },
})

// First element will render using the primary foreground and default background colours.
// Second element will render using the primary foreground and background colours.
export function Component() {
  return (
    <>
      <div {...stylex.props(styles.container)}></div>
      <div {...stylex.props(styles.container, primary)}></div>
    </>
  )
}

Extensions / TODO

Token and theme generation

Stylex compiler normally wants to work against raw values, e.g. it can struggle when style values are defined in a separate object (I think it wants set keys to work against so as long as you specifically use static keys you can have values from elsewhere).

This can lead to duplication where we want to define a tonal scale and be able to apply that as a theme or use individual entries as tokens.

We should generate tokens and themes from source data files which define the colours that we want to use. This way we have a canonical reference and de-risk divergence from having multiple data structures which must remain synchronised.