# color-interpolate [![test](https://github.com/colorjs/color-interpolate/actions/workflows/test.js.yml/badge.svg)](https://github.com/colorjs/color-interpolate/actions/workflows/test.js.yml) [![size](https://img.shields.io/bundlephobia/minzip/color-interpolate?label=size)](https://bundlephobia.com/result?p=color-interpolate) ![stable](https://img.shields.io/badge/stability-stable-green)

For a given palette, return color by any float index. Useful for interpolating colormaps, color palettes or gradients.

## Usage

`$ npm install color-interpolate`

```js
import interpolate from 'color-interpolate';

let colormap = interpolate(['black', 'gray', 'white']);
let black = colormap(0); // 'rgb(0, 0, 0)'
let white = colormap(1); // 'rgb(255, 255, 255)'
let gray = colormap(.5); // 'rgb(128, 128, 128)'
```

## API

### `let palette = interpolate(colors)`

Create interpolator from a list of `colors`. Colors can be any string [color-rgba](https://github.com/colorjs/color-rgba) recognizes — hex, keywords, `rgb()`, `hsl()`, `lab()`, `oklch()`, `color(display-p3 …)` etc. — or an array with channel values, or a number. An unrecognized color throws.

### `let color = palette(index, fn?)`

Get interpolated color from palette by `index` value within `0..1` range. Pass optional `fn` interpolation function, by default [lerp](https://npmjs.org/package/lerp) is used, but [smoothstep](https://npmjs.org/package/smoothstep) can be used as an alternative.

Example:

```js
import palettes from 'nice-color-palettes'
import interpolate from 'color-interpolate'

const palette = interpolate(palettes[32])

let activeColor = palette(.2) // 'rgb(51, 23 47)'
let background = palette(1) // 'rgb(255, 255, 255)'
let foreground = palette(0) // 'rgb(0, 0, 0)'
```

## Credits

Thanks to **[@mattdesl](https://github.com/mattdesl/)** for [interpolation](https://github.com/mattdesl/interpolation) functions and **[@mikkoh](https://github.com/mikkoh/)** for API insight in [interpolation-arrays](https://github.com/jam3/interpolation-arrays).

## Related

> [colormap](https://github.com/bpostlethwaite/colormap) — collection of beautiful colormaps, a good source for palettes.<br/>
> [nice-color-palettes](https://github.com/jam3/nice-color-palettes) — collection of beautiful color palettes from colourlovers.<br/>
> [color-alpha](https://github.com/colorjs/color-alpha) — change alpha of a color string.<br/>
> [color-spectrum](https://github.com/colorjs/color-spectrum) — convert spectrum, like FFT result, to color.<br/>
> [color-space](https://github.com/colorjs/color-space) — collection of color space transforms, useful for custom interpolation modes.<br/>

© Dmitry Iv. MIT License
