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

@orchydae/davidoo-banner

v1.0.0

Published

La bande « Système conçu par davidoo » qui clôt une page.

Readme

@orchydae/davidoo-banner

Bande discrète « Système conçu par davidoo » qui clôt une page : la mention et le petit mot sur une ligne, d'environ 45 px de haut, coins droits. Le mot monte du bas jusqu'à sa place pendant que la bande entre dans l'écran, et reste entièrement visible. Aucune dépendance autre que React (18 ou plus).

Installation

npm install @orchydae/davidoo-banner

Le composant importe lui-même sa feuille de style : l'application n'a rien d'autre à faire, pourvu que son outil de build sache importer du CSS (Next.js, Vite…). Essayé le 2026-10-21 avec Next 16.3, en composant serveur, et Vite 7.

Utilisation

import { DavidooBanner } from "@orchydae/davidoo-banner";

<DavidooBanner
  label={copy.credit} // « Système conçu par », dans la langue de la page
  tone="auto" // « auto » (défaut), « system », « light » ou « dark »
  href="https://…" // facultatif : par défaut, le site de davidoo
  className="-mx-site -mb-site" // par exemple : sortie des marges de la page
/>

La bande prend la largeur de son parent : c'est à l'hôte de la sortir de ses marges (className) et de la coller au bas de la page.

L'adresse par défaut est la constante DAVIDOO_URL de src/davidoo-banner.tsx : https://www.davidoo.dev, l'adresse principale du site chez Vercel (davidoo.dev y redirige).

Composant serveur : pas de "use client", pas de script.

Thème

  • tone="auto" (défaut) suit le thème de la page : sombre si un ancêtre porte data-theme="dark" (convention de davidoo) ou la classe dark (Tailwind, shadcn), clair sinon. Une page sans mode sombre garde donc une bande claire, même chez un visiteur dont le système est sombre; dès qu'elle en a un, la bande bascule avec elle, sans rien changer ici.

  • tone="system" suit le réglage du système d'exploitation (prefers-color-scheme), pour une page qui s'y fie en CSS sans rien poser sur ses ancêtres.

  • tone="light" ou "dark" fixe le thème.

  • Les couleurs sont celles de la marque (davidoo/src/theme/tokens.css) et ne se changent pas :

    | | fond | texte | mention | mot | | ------ | --------- | --------- | --------- | --------- | | clair | #EFEEE9 | #16120E | #6B655C | #E4562A | | sombre | #16120E | #EFEEE9 | #9A9186 | #F2683B |

La montée

CSS seulement : une animation liée au défilement (animation-timeline: view()) qui fait monter le mot de translateY(100%) à sa place pendant qu'il entre dans l'écran; son enveloppe (davidoo-banner__brand, overflow: hidden) rogne ce qui n'est pas encore monté, donc il sort de la ligne de base de la bande. Là où la fonction manque, ou en mouvement réduit (prefers-reduced-motion), le mot est à sa place d'emblée. Mesuré le 2026-10-16 : Chromium anime; Firefox 153 n'anime pas (le mot est visible). WebKit non essayé.

Le mot

src/wordmark.tsx est « davidoo » en contours de MuseoModerno 700 (Omnibus-Type, licence SIL OFL), en minuscules, crénage et interlettrage de -0,02 em compris, comme .site-footer__brand de davidoo. Aucune police à charger. Pour le refaire (npm i opentype.js, la police en TTF statique 700, que l'API de Google Fonts donne sans en-tête User-Agent) :

import opentype from "opentype.js";
import { readFileSync } from "node:fs";

const buffer = readFileSync("museomoderno-700.ttf");
const font = opentype.parse(
  buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength),
);
const options = { kerning: true, letterSpacing: -0.02 };
const box = font.getPath("davidoo", 0, 0, 1000, options).getBoundingBox();
const path = font.getPath("davidoo", -box.x1, -box.y1, 1000, options);

console.log(path.getBoundingBox()); // viewBox : 0 0 largeur hauteur
console.log(path.toPathData(1));

Le rendu a été comparé au texte natif de Chromium (même police, même interlettrage) : mêmes 758 × 153 px à 200 px, 1,5 % d'écart de lissage.

Développer

npm test           # le rendu du composant (Vitest)
npm run typecheck
npm run build      # dist/ : le JS, les types et le CSS

tsc compile src/ fichier pour fichier et garde l'import du CSS, que le build copie à côté : c'est l'outil de l'application qui le charge.

Publier une version

Sur npm, en public (publishConfig). Une seule fois : npm login avec le compte orchydae.

npm version patch  # ou minor, major : change le numéro, commit et étiquette
npm publish        # reconstruit dist/ (prepack) avant d'envoyer

Puis, dans chaque projet : npm install @orchydae/davidoo-banner@latest.