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

core-ds-phase1

v0.5.0

Published

Phase 1 demo placeholder — client-neutral core design system, multibrand React component library consumed by Figma Make.

Readme

core-ds-phase1

A client-neutral, multibrand React component library. Brands are runtime data — one seed colour derives a full ramp, with foregrounds computed by APCA contrast rather than assumed — so the same components render correctly under any brand without a rebuild.

React 18 peer dependency · ESM + CJS · types included · one stylesheet.

Phase 1 demo. 17 components, and the package name is a placeholder. The API can change on any 0.x release — see CHANGELOG.md.


Install

npm install core-ds-phase1 react react-dom

Import the stylesheet once, at your app's entry point. It carries the token definitions every component depends on, so nothing renders correctly without it:

import 'core-ds-phase1/styles.css'

Use

Wrap your tree in a BrandProvider. Everything inside resolves its colours, type and spacing from that brand:

import {
  BrandProvider,
  defineBrand,
  ProductHeroPrimary,
  ContentBlock,
  Button,
} from 'core-ds-phase1'
import 'core-ds-phase1/styles.css'

const brand = defineBrand({
  name: 'acme',
  seed: '#3B5BDB',
})

export function Page() {
  return (
    <BrandProvider brand={brand}>
      <ProductHeroPrimary
        caption="Introducing"
        heading="A headline from the manuscript"
        body="Supporting copy."
        cta={<Button variant="primary">Get started</Button>}
      />
      <ContentBlock
        variant="light"
        heading="A section"
        body="Body copy for the section."
      />
    </BrandProvider>
  )
}

Nested providers work, so a single section can run on a different brand.


Brands

defineBrand() takes a seed colour and derives the full ramp at runtime. The package ships no brand data — adding a brand needs no publish and no version bump.

const brand = defineBrand({
  name: 'acme',
  seed: '#3B5BDB',        // required
  accentSeed: '#00A86B',  // optional second hue
  fontHeading: 'Poppins',
  fontBody: 'Source Sans 3',
  logo: undefined,        // default: a plain text wordmark, no asset
  radiusScale: 1,
  tintNeutrals: false,
  overrides: {},          // merged last, and re-measured for contrast
})

Foregrounds are computed, never assumed white. A seed whose step-500 pair cannot reach a readable contrast floor throws at defineBrand() rather than shipping an unreadable button. If an overrides entry is rejected, supply both halves of the pair:

overrides: { primary: { 500: { background: '#f2f2f2', foreground: '#191919' } } }

Three brands ship for testing — coreDefault, testPale (light seed, forces a dark foreground) and testDark (near-black, must not collapse).

BrandLogo renders the brand name as a wordmark by default. Pass a URL, an SVG string or a React node for a real asset.


What's in it

Components — Button · Card · ContentBlock · ContentBlockCards · ContentGroup · Copy · CTAGroup · HighlightBanner · IcoPlaceholder · Icons · Link · LinkWithIcon · ProductFooter · ProductHeader · ProductHeroPrimary · Quicklinks · Separator

Layout primitives — Container · Grid · Stack · Cluster

Brand engine — defineBrand · BrandProvider · BrandLogo · useBrand

All exports are named and flat. There are no deep import paths; the only subpath is core-ds-phase1/styles.css.

Layout

Container owns max-width and page margins — components never set their own. Grid owns columns and gutters. Responsive props take { xs, sm, md, lg }, and omitted keys inherit downward from xs:

<Container>
  <Grid cols={{ xs: 1, sm: 2, lg: 3 }}>{cards}</Grid>
</Container>

| Breakpoint | Range | Columns | Gutter | Margin | |---|---|---|---|---| | xs | 0–639 | 4 | 16 | 16 | | sm | 640–1023 | 8 | 16 | 24 | | md | 1024–1365 | 12 | 24 | 32 | | lg | 1366+ | 12 | 24 | 75 (content 1216) |

Prose content

Components render running copy — sub-headings, paragraphs with line breaks, ordered and unordered lists — by accepting ordinary markup. There is no <List> or <Paragraph> to learn:

<ContentBlock heading="Section">
  <p>A paragraph.</p>
  <ul><li>List markers pick up the brand colour.</li></ul>
</ContentBlock>

Text passed to a component is rendered unaltered — never truncated, reordered or reflowed in a way that changes meaning. The library is built for regulated content where that is a correctness requirement, not a preference.

Accessibility

WCAG 2.2 AA is a build requirement, not a target: every component is keyboard reachable with correct roles and reading order, and derived colour pairs are contrast-checked at brand-definition time.


Docs

Full guidelines — per-component props, valid values, correct and incorrect usage — live in guidelines/ in the repository, alongside foundations (colour, typography, spacing, theming) and composition rules.

Building on this library, or picking up the project? See CONTRIBUTING.md for the build, verification and release process, and CLAUDE.md for the conventions that govern it.

License

UNLICENSED — see package.json.