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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@css19/themes

v0.1.21

Published

CSS19 - React CSS themes

Downloads

51

Readme

@css19/themes

Install

npm install @css19/themes

NOTE! Requires React 19

Configure

import { createTheme, createThemesProvider } from '@css19/themes'

const tokens = {
  colors: {
    primary: 'red'
  }
}

const light = createTheme('light', tokens, {})
const dark = createTheme('dark', tokens, {
  colors: {
    primary: 'blue'
  }
})

const [variables, ThemeProvider, useThemes] = createThemesProvider(
  { light, dark },
  // This callback runs in an isolated script tag scope to ensure the theme is
  // activated before your app mounts. Use the themes, preferred system preference of
  // "light" or "dark" or local storage, to decide what theme to activate. This callback runs again
  // if system preference changes or using the "useThemes" hook
  (themes, preferred) => themes[preferred]
)

function App() {
  return (
    <ThemesProvider>
      <h1 style={{ color: variables.colors.primary }}>Hello World</h1>
      <SomeNestedComponent />
    </ThemesProvider>
  );
}

function SomeNestedComponent() {
  const themes = useThemes();

  return (
    // Override theme in a section of the page
    <div className={themes.themes.dark}>
      <h2>Current theme is: {themes.current}</2>
      <button onClick={() => themes.update()}>Update theme</button>
    </div>
  );
}

Note! Calling themes.update will run the setTheme callback of the provider again. That means you will need to provide the updated theme through local storage etc.

How it works

The createTheme function takes tokens and generates variable overrides for the defined themes. createThemesProvider will map these variables, deduplicate and allow you to consume them in your app. This works with client and server. With multiple themes you will be able to activate the current theme based on system preference or any other reference you customise. Using the light and dark color scheme allows for usage of the light-dark() CSS utility.

This package can be used with ANY CSS solution in React.