# Palette plugin using CSS variables for TailwindCSS

Adds a color palette (from `100` to `900`) for each color of your tailwind configuration while using CSS variable for each.

This package has been designed to create **library components** where the theme (colors) are easily modifiable in the application, **using CSS variables**.

## Installation

Using yarn :
```bash
yarn add -D tailwindcss-css-variables-palette-plugin
```

Using npm : 
```bash
npm install --save-dev tailwindcss-css-variables-palette-plugin
```

Then set up your `tailwind.config.js` this way :

```
const THEME_COLORS = {
  primary: '#264653',
  secondary: '#2A9D8F'
};

module.exports = {
  /...
  theme: {
    colors: THEME_COLORS,
    extend: {},
  },
  plugins: [
    require('tailwindcss-css-variables-palette-plugin')({
      colors: THEME_COLORS,
    }),
    /...
  ],
};
```

The plugin then create the following configuration for you : 

```
{
  primary: {
    '100': 'var(--color-primary-100, #e9edee)',
    '200': 'var(--color-primary-200, #c9d1d4)',
    '300': 'var(--color-primary-300, #a8b5ba)',
    '400': 'var(--color-primary-400, #677e87)',
    '500': 'var(--color-primary-500, #264653)',
    '600': 'var(--color-primary-600, #223f4b)',
    '700': 'var(--color-primary-700, #1d353e)',
    '800': 'var(--color-primary-800, #172a32)',
    '900': 'var(--color-primary-900, #132229)',
    DEFAULT: 'var(--color-primary, #264653)'
  },
  secondary: {
    '100': 'var(--color-secondary-100, #eaf5f4)',
    '200': 'var(--color-secondary-200, #cae7e3)',
    '300': 'var(--color-secondary-300, #aad8d2)',
    '400': 'var(--color-secondary-400, #6abab1)',
    '500': 'var(--color-secondary-500, #2A9D8F)',
    '600': 'var(--color-secondary-600, #268d81)',
    '700': 'var(--color-secondary-700, #20766b)',
    '800': 'var(--color-secondary-800, #195e56)',
    '900': 'var(--color-secondary-900, #154d46)',
    DEFAULT: 'var(--color-secondary, #2A9D8F)'
  },
}
```

The plugin is also adding the always needed following classes by default (same naming as default TailwindCSS properties) : 

```
{
  inherit: 'inherit',
  current: 'currentColor',
  transparent: 'transparent',
  black: '#000',
  white: '#fff',
}
```

## Simple Usage

Now in your application, you can use classes like `bg-primary-500` or `bg-primary-800` as usual.

`DEFAULT` is the variable used to generate `bg-primary` without suffix.

```html
<span class="bg-primary text-secondary-400">
    Hello !
</span>
```

> NOTE : `primary` and `primary-500` have the same color attributed. It's a better idea to use it without suffix in your code (ex: `bg-primary`) if the goal is to replace the color globally using its CSS variable.

## CSS Variables usage

### Addition in the DOM 

This plugin uses [the `addBase` utility from `tailwindcss/plugin` package](https://tailwindcss.com/docs/adding-custom-styles#writing-plugins).

So in your DOM, under the `:root` attribute, you can now find all the css variables generated by the plugin :

![css-variables.png](images/css-variables.png)

See more at : https://developer.mozilla.org/en-US/docs/Web/CSS/:root

### Change scoped color in your component

Now, if you need to modify one of the color of a property, you can do it globally or component scoped, using the default Css Variables API.

```
:root {
  --color-primary: #D36060;
}

.my-custom-card {
  --color-primary-300: #C2714F;
  --color-secondary: #E0607E;
}
```

Documentation : https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties

# Compatibility

This plugin is based on [CSS Custom Properties](https://developer.mozilla.org/en-US/docs/Web/CSS/--*), which are [not compatible with IE11](https://caniuse.com/#feat=css-variables). You can have partial support for the browsers that do not support them by using a PostCSS plugin that add a fallback for CSS variables, such as [`postcss-css-variables`](https://github.com/MadLittleMods/postcss-css-variables) or [`postcss-custom-properties`](https://github.com/postcss/postcss-custom-properties).

## License

This project is licensed under the [MIT License](/LICENSE).