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

@cadence-app/theme

v0.1.0

Published

Tokens de design à trois niveaux : fusion de presets et résolution des références

Readme

@cadence-app/theme

Les tokens de design de Cadence, sur trois niveaux : primitive porte la palette brute, semantic lui donne un sens, component traite les cas particuliers. Une référence regarde son propre niveau puis ceux d'en dessous, jamais au-dessus — la palette ne peut donc pas dépendre d'un composant. Zéro dépendance.

Installation

pnpm add @cadence-app/theme

Un preset

definePreset fusionne des surcharges dans un preset existant, sans le modifier. Les clés absentes du preset de base sont refusées à la compilation.

import { basePreset, definePreset } from '@cadence-app/theme';

const preset = definePreset(basePreset, {
  semantic: { accent: { background: '{green.500}' } },
  component: { button: { radius: '{radius.full}' } },
});

Une valeur littérale (#64748b, 12rpx) ou une chaîne portant des références (1px solid {surface.border}) sont toutes deux acceptées.

Pour écrire un preset de zéro, le déclarer avec satisfies Preset plutôt qu'avec une annotation de type : l'annotation efface les clés littérales dont definePreset a besoin.

La feuille de styles

import { themeSheetFor } from '@cadence-app/theme';

const css = themeSheetFor(preset);

Chaque token devient une propriété CSS préfixée par --cadence-. La feuille porte trois blocs de couleur, parce que le lecteur a trois états : le réglage système décide tant que personne n'a tranché, et un choix explicite l'emporte dans les deux sens.

:root { --cadence-accent-background: #14161a; }
@media (prefers-color-scheme: dark) {
  :root:not([data-cadence-color-scheme='light']) { --cadence-accent-background: #eff1f5; }
}
:root[data-cadence-color-scheme='dark'] { --cadence-accent-background: #eff1f5; }

Les deltas de plateforme viennent ensuite, sous [data-cadence-platform='android'] par exemple. Ils ne portent aucune couleur, donc ils ne défont jamais le schéma sombre.

La résolution

resolveTokens(preset) rend une Map de chemins vers valeurs, toutes références résolues. Les défauts lèvent une erreur typée plutôt que de laisser passer une valeur fausse : UnknownTokenReferenceError, CircularTokenReferenceError, TokenShapeMismatchError, InvalidTokenValueError, DuplicateCustomPropertyError, UnknownTokenPathError.

Licence

MIT