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

@konce-pt/color

v0.11.1

Published

Colour maths for Koncept UI — sRGB, OKLab and OKLCH conversions, hue-aware mixing, gamut mapping, WCAG and APCA contrast. Framework-free TypeScript, zero runtime dependencies.

Readme

@konce-pt/color

Rachunek barw Koncept UI: konwersje sRGB ↔ OKLab ↔ OKLCH, mieszanie po kole odcieni, sprowadzanie barwy do gamutu sRGB oraz kontrast w dwóch miarach — WCAG 2.1 i APCA. Czysty TypeScript, zero zależności runtime, bez wiązania z frameworkiem.

Paleta biblioteki jest zapisana w OKLCH i przechodzi przez build verbatim, bez transformacji kolorów. Żeby cokolwiek z tymi wartościami policzyć — wymieszać dwie barwy, wyprowadzić rampę z jednego ziarna, sprawdzić czy napis na tle da się przeczytać — potrzebny jest model, w którym jasność znaczy jasność. Tym modelem jest OKLab i to jest ta paczka.

Zwykle nie instalujesz jej samodzielnie: używa jej KptBackdrop z @konce-pt/angular i z @konce-pt/react. Sięgnij po nią wprost, gdy liczysz barwy po swojej stronie.

npm i @konce-pt/color
import { clampToGamut, formatOklch, parseOklch, apcaLc, parseHexColor } from '@konce-pt/color';

// Odcień marki przeniesiony na tę samą jasność co token biblioteki.
const token = parseOklch('oklch(0.546 0.190 255)');
const brand = { ...token, h: 152 };

formatOklch(clampToGamut(brand)); // 'oklch(0.546 0.161 152)' — nasycenie zbite do gamutu sRGB

// Czy biały napis na tym tle da się przeczytać? |Lc| 75 to próg tekstu podstawowego.
apcaLc(parseHexColor('#ffffff'), parseHexColor('#3b82f6')); // -66.4 → za mało

Dlaczego po kole, a nie po prostej

Interpolacja w sRGB miesza wartości po gammie i prowadzi przejście przez błoto. Prostokątny OKLab naprawia jasność, ale dla odcieni leżących naprzeciwko siebie przecina oś achromatyczną: w połowie przejścia z niebieskiego w żółty zostaje szarość dokładnie tam, gdzie mieszanka ma świecić najmocniej. mixOklch idzie krótszym łukiem koła z zachowanym nasyceniem, a przystanek bez nasycenia przejmuje odcień sąsiada — inaczej atan2 na zerowej chromie zwraca kąt przypadkowy i barwa szarpie.

Z tego samego powodu clampToGamut obniża samo nasycenie, zamiast przycinać składowe RGB: przycięta po kanałach barwa marki potrafi zmienić odcień o kilkanaście stopni, czyli przestać być tą barwą.

Dwie miary kontrastu

contrastRatio to WCAG 2.1 — symetryczna liczba 1–21, progi 4.5 (tekst) i 3 (tekst duży, elementy interfejsu). apcaLc to APCA: wartość ze znakiem, gdzie znak niesie biegunowość (dodatni — treść ciemna na jasnym tle), a kolejność argumentów ma znaczenie, bo ta sama para barw czyta się inaczej w każdą stronę. Progi |Lc|: 75 tekst podstawowy, 60 tekst większy, 45 elementy interfejsu.

Pełny opis: llms.txt (EN) i llms-pl.txt (PL).

Testy

pnpm --filter @konce-pt/color exec node --test "src/**/*.test.ts"

Licencja

MIT © konce.pt