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

trio-theme-v2

v0.0.1

Published

## Overview

Downloads

4

Readme

twr-theme Documentation

Overview

twr-theme is a React-based package that allows you to implement theming in your application using Tailwind CSS. It provides components and hooks for easy theme management, ensuring a seamless integration with Tailwind's utility-first CSS framework.

Installation

Install twr-theme using npm or yarn:

npm install twr-theme

or

yarn add twr-theme

To generate or update your Tailwind config easily, use the following command:

npx twr-theme

Tailwind CSS Configuration

To integrate twr-theme with Tailwind CSS, update your tailwind.config.js as follows:

module.exports = {
  content: [
    "./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
    "./src/components/**/*.{js,ts,jsx,tsx,mdx}",
    "./src/app/**/*.{js,ts,jsx,tsx,mdx}",
    "./node_modules/twr-theme/**/*.{js,ts,jsx,tsx,mdx}", // Include twr-theme from your node_modules
  ],
  darkMode: "class",
  theme: {
    extend: {
      colors: {
        primary: {
          DEFAULT: "var(--primary)",
          50: "var(--primary-50)",
          100: "var(--primary-100)",
          200: "var(--primary-200)",
          300: "var(--primary-300)",
          400: "var(--primary-400)",
          500: "var(--primary-500)",
          600: "var(--primary-600)",
          700: "var(--primary-700)",
          800: "var(--primary-800)",
          900: "var(--primary-900)",
          light: "var(--primary-light)",
          dark: "var(--primary-dark)",
        },
        secondary: {
          DEFAULT: "var(--secondary)",
          50: "var(--secondary-50)",
          100: "var(--secondary-100)",
          200: "var(--secondary-200)",
          300: "var(--secondary-300)",
          400: "var(--secondary-400)",
          500: "var(--secondary-500)",
          600: "var(--secondary-600)",
          700: "var(--secondary-700)",
          800: "var(--secondary-800)",
          900: "var(--secondary-900)",
          light: "var(--secondary-light)",
          dark: "var(--secondary-dark)",
        },
      },
      backgroundImage: {
        "gradient-radial": "radial-gradient(var(--tw-gradient-stops))",
        "conic-gradient": "conic-gradient(var(--tw-gradient-stops))",
      },
    },
  },
  plugins: [],
};

Note

Ensure that primary and secondary shades are not changed directly in the Tailwind config to avoid theme malfunction.

Components

ThemeProvider

The ThemeProvider component wraps your entire application to provide theme context.

Props

  • children: React.ReactNode - The content to be wrapped by the provider.
  • defaultTheme: { name: string; mode: string; colorVars: { primary: string; secondary: string; }; } - The default theme settings.
  • themeLoader: React.ReactNode - A loader component to be displayed while the theme is loading.

Example

import { ThemeProvider } from "twr-theme";

const defaultTheme = {
  name: "light",
  mode: "light",
  colorVars: {
    primary: "#3490dc",
    secondary: "#ffed4a",
  },
};

function Main({ children }) {
  return (
    <ThemeProvider defaultTheme={defaultTheme}>
      {children}
      {/* Your app components */}
    </ThemeProvider>
  );
}

ThemeProvider

The ThemeController component provides UI controls to manage the theme. If you want to hassle free theme controll just import ThemeController inside any of your app component and use it.

Example

import { ThemeController } from "twr-theme";

function App() {
  return (
    <div>
      <ThemeController />
      {/* Your app components */}
    </div>
  );
}

Hooks

Do you want to change the theme in your own way? Then use our interactive hooks.😉

useTheme

The useTheme hook provides various methods and properties to manage the theme.

Returns

  • theme: Current theme object.
  • themeList: List of available themes.
  • setTheme: Function to set a specific theme.
  • addTheme: Function to add a new theme.
  • removeTheme: Function to remove a theme.
  • toggleTheme: Function to toggle between themes.
  • toggleDarkMode: Function to toggle dark mode.
  • changeTheme: Function to change the theme properties.

Returns

  • toggleDarkMode(mode: "dark" | "light" | "system"): Toggle the dark mode setting.
  • toggleTheme(themeItem: { name: string; mode: string; colorVars: { primary: string; secondary: string; } }): Toggle between themes.
  • changeTheme(theme: { name: string; colorVars: { primary: string; secondary: string; } }): Change theme properties.
  • removeTheme(themeName: string): Remove a theme by name.
  • addTheme(theme: { name: string; colorVars: { primary: string; secondary: string; } }): Add a new theme.

Example

import { useTheme } from "twr-theme";

function MyComponent() {
  const {
    theme,
    setTheme,
    toggleDarkMode,
    toggleTheme,
    changeTheme,
    removeTheme,
    addTheme,
  } = useTheme();

  const newTheme = {
    name: "new-theme",
    mode: "light",
    colorVars: { primary: "#123456", secondary: "#654321" },
  };

  const updatedTheme = {
    name: "updated-theme",
    colorVars: { primary: "#abcdef", secondary: "#fedcba" },
  };

  return (
    <div>
      <p>Current Theme: {theme.name}</p>
      <button onClick={() => setTheme("dark")}>Set Dark Theme</button>
      <button onClick={() => toggleDarkMode("dark")}>Toggle Dark Mode</button>
      <button onClick={() => toggleTheme(newTheme)}>Toggle Theme</button>
      <button onClick={() => changeTheme(updatedTheme)}>Change Theme</button>
      <button onClick={() => removeTheme("new-theme")}>Remove Theme</button>
      <button onClick={() => addTheme(newTheme)}>Add Theme</button>
    </div>
  );
}

useTWVariableColor

The useTWVariableColor hook allows you to access and update Tailwind CSS variables dynamically. This hook is essential for managing theme colors and adding new variables to your theme.

Usage

To use useTWVariableColor, you need to provide the variable name as an argument. The hook returns the current value of the variable and a function to update the variable.

const [colorValue, setColorValue] = useTWVariableColor({
  variable: "variable-name",
});

Parameters

  • variable: A string representing the name of the Tailwind CSS variable. This variable should also be defined in the Tailwind config with shades if necessary.

Returns

  • colorValue: The current value of the specified variable.
  • setColorValue: A function that takes a color code to update the variable.

Example

Below is an example of how to use useTWVariableColor to manage the variable color in your theme.

If you want to add a new variable to your theme, follow these steps:

Step 1: Update Tailwind Config

Add the new variable in your tailwind.config.js:

module.exports = {
  content: [
    "./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
    "./src/components/**/*.{js,ts,jsx,tsx,mdx}",
    "./src/app/**/*.{js,ts,jsx,tsx,mdx}",
    "./node_modules/twr-theme/**/*.{js,ts,jsx,tsx,mdx}", // Include twr-theme
  ],
  darkMode: "class",
  theme: {
    extend: {
      colors: {
        primary: {
          DEFAULT: "var(--primary)",
          50: "var(--primary-50)",
          // other shades...
        },
        custom: {
          // New variable
          DEFAULT: "var(--custom)",
          50: "var(--custom-50)",
          100: "var(--custom-100)",
          200: "var(--custom-200)",
          300: "var(--custom-300)",
          400: "var(--custom-400)",
          500: "var(--custom-500)",
          600: "var(--custom-600)",
          700: "var(--custom-700)",
          800: "var(--custom-800)",
          900: "var(--custom-900)",
          light: "var(--custom-light)",
          dark: "var(--custom-dark)",
        },
      },
    },
  },
  plugins: [],
};
Step 2: Using useTWVariableColor for the New Variable
import { useTWVariableColor } from "twr-theme";

function MyComponent() {
  const [custom, setCustom] = useTWVariableColor({ variable: "custom" });

  return (
    <div>
      <p>Custom Color: {custom}</p>
      <button onClick={() => setCustom("#abcdef")}>Change Custom Color</button>
    </div>
  );
}

By using useTWVariableColor, you can dynamically control all theme variables, ensuring a flexible and scalable theming solution for your application.

Conclusion

The twr-theme package provides a robust and flexible solution for implementing theming in your React applications using Tailwind CSS. By leveraging components like ThemeProvider, ThemeController, and ColorPalette, along with hooks such as useTWVariableColor and useTheme, you can easily manage and customize your application's theme.

For any questions or further assistance, feel free to reach out or refer to the source code for more examples and usage patterns.

This conclusion ties together the main points of the documentation and provides a clear ending. Let me know if there's anything else you'd like to include!