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

themer.js

v1.0.0-beta.4

Published

Automatically switch between dark and light themes at sunset and sunrise using the user's location.

Downloads

22

Readme

Themer.js

Spice up your app with dynamic themes.

Alt Text

Features:

  • Automatic day/night switching using the sunset and sunrise times of the user's location
  • System prefers-color-scheme support
  • Android meta theme-color support
  • Custom themes
  • Manual control over everything

Demo

Examples

Quick Start

Install

# using yarn
$ yarn add themer.js

# using npm
$ npm install themer.js

Define the light and dark themes

To use the auto or system themes, you must define a light and dark Theme object.

import Themer, { auto, system } from "themer.js";

const light = {
  "styles": {
    "css": {
      "--app-background-color": "#f1f1f1",
      "--primary-text-color": "#555"
    }
  }
}

const dark = {
  "styles": {
    "css": {
      "--app-background-color": "#242835",
      "--primary-text-color": "#f1f1f1"
    }
  }
}

// instantiate Themer.js
const themer = new Themer({
  themes: { light, dark, auto, system }
});

Setting a theme

import Themer, { auto, system } from "themer.js";
import { light, dark } from "./themes/index.js";

const themer = new Themer({
  themes: { light, dark }
});

// set theme to dark
themer.set(dark);

// set theme to auto
themer.set(auto);

// set theme to system
themer.set(system);

Setting a custom theme

Pass a valid Theme object to Themer.set().

import Themer from "themer.js";

const custom = {
  "styles": {
    "css": {
      "--app-background-color": "#f1f1f1",
      "--primary-text-color": "#555"
    }
  }
};

const themer = new Themer();

themer.set(custom);

API

Themer( config )

  • Arguments:

    • {Object} config
  • Details: Instantiate Themer.js.

  • Usage:

    import Themer, { auto, system } from "themer.js";
    import { light, dark, custom } from "./themes/index.js";
    
    const config = {
      debug: true,
      onUpdate: (theme) => console.log(theme),
      themes: { light, dark, auto, system, custom }
    };
    
    const themer = new Themer(config);
  • See also: Config object

Themer.set( theme )

  • Arguments:

    • {Object} theme
  • Details: Sets the active theme.

  • Restrictions:

    • auto|system: Both light and dark themes must be defined in the Config object.
    • auto: Requires user geolocation consent.
    • system: The browser must support prefers-color-scheme.
  • Usage:

    const dark = {
      "styles": {
        "css": {
          "--app-background-color": "#242835"
        }
      }
    };
    
    Themer.set(dark);
  • See also: Theme object

Themer.themeSupportCheck()

  • Details: Helper function to determine browser support for the system theme.

  • Returns: boolean

  • Usage:

    // Chrome 76, Firefox 67, Safari 12.1
    Themer.themeSupportCheck();
    ↳ true
    
    // unsupported browsers
    Themer.themeSupportCheck();
    ↳ false
  • See also: prefers-color-scheme

Config object

| Key | Type | Description | | ---------- | ---------- | ------------------------------------------------------------------ | | debug | boolean | Log debug console statements. | | onUpdate | function | A callback function that returns the set Theme object. | | themes | object | The available Theme objects. |

Example:

{
  debug: true,
  onUpdate: (theme) => console.log(theme),
  themes: { light, dark, auto, system, custom }
}

Theme object

| Key | Type | Description | | -------- | --------------- | ------------------------------------------------------------------------- | | styles | object|string | A Styles object or string preset. ("auto" or "system") |

Examples:

{
  "styles": {
    "android": "#f1f1f1",
    "css": {
      "--app-background-color": "#f1f1f1",
      "--primary-text-color": "#555"
    }
  }
}
{
  "styles": "auto"
}

Styles object

The theme styles. Feel free to add more key/value pairs and use the onUpdate callback to get the active theme. You can use the active theme object in other parts of your application. For example, if you want to have different Google Maps themes for light and dark themes, you can add a new key to the Styles object called googleMaps and store the Google Maps style array there. This allows you to get the appropriate styles even when using auto and system themes.

| Key | Type | Description | | --------- | -------- | -------------------------------------------------------------------------------------------------------------------------------- | | android | string | Sets the meta theme-color. | | css | object | The theme CSS variables. |

Example:

{
  "styles": {
    "android": "#f1f1f1",
    "css": {
      "--app-background-color": "#f1f1f1",
      "--primary-text-color": "#555"
    }
  }
}

Preset Themes ( auto|dark )

To use auto and system themes, both a light and dark theme must be defined in the Config object

  • Details:
    • auto: Sets light during the day and dark during the night.
    • system: Sets to system theme preference. (light|dark)
  • Restrictions:
    • auto|system: Both light and dark themes must be defined in the Config object.
    • auto: Requires user geolocation consent.
    • system: The browser must support prefers-color-scheme.

CSS Variables

Use the CSS variables defined in your Styles object anywhere in your application and it will update in real time to the corresponding theme variable.

html {
  background-color: var(--app-background-color);
  color: var(--primary-text-color);
}