A full color palette manager for React
React-Color-List
A color list manager for React.
Installation
React-Color-List is available as an npm package.
// with npm
npm install react-color-list
Usage
import React, { useState } from "react"
import ColorList from "react-color-list"
function App() {
const [colors, setColors] = useState(["#bf4040","#ab3f3f","#9f3737","#8d3434","#812929"])
return <ColorList colors={colors} colorFormat="hex" onChange={(c) => setColors(c)} />
}
Props
| Hello | Type | Required? | Default | Description |
|---|---|---|---|---|
| colors | array of colors | required | none | Colors displayed by list |
| onChange | function | required | none | New list of colors and event that triggered change |
| colorFormat | "hex"| "rgb" |"hsl" |
optional | "hex" |
Format of colors in colors array |
| defaultColor | string color in same format as those in colors array | optional | White | The default color for new colors added |
| disableAlpha | bool | optional | false | Whether alpha slider should be visible |
| maxColors | positive integer | optional | Infinity | Max number of colors that can be added to list |
| minColors | positive integer | optional | 0 | Min number of colors that can be in the color list |
| onMaxColorsReached | function | optional | none | Function that is called when user has attempted to add more than max number of colors |
| onMinColorsReached | function | optional | none | Function that is called when user has attempted to remove more than min number of colors |
| shouldAnimate | bool | optional | true | If the color swatches should animate in |
| animationLength | double | optional | 0.1 | Seconds for each swatch to animate in |
| animationOffset | double | optional | 0.05 | Seconds between start of each swatch animation |
| loadFromLeft | bool | optional | false | If new colors should be added to left side (at index 0) |
| flipAddButton | bool | optional | false | If add color button should be flipped to left side |
| popoverProps | object | optional | none | Props supplied to MUI Popover |
| containerProps | object | optional | none | Props supplied to list container, |
| className | string | optional | none | Class name supplied to list container |
| swatchLabelProps | object | optional | none | Props supplied to swatch label |
| removeButtonProps | object | optional | none | Props supplied to MUI Button for removing |
| saveButtonProps | object | optional | none | Props supplied to MUI Button for saving |
| saveButtonProps | object | optional | none | Props supplied to MUI IconButton for adding |
| swatchLabelColor | function | optional | black/white inverse | Color of swatch label in any format (hex, rgb, etc) |
| swatchActiveBorderColor | function | optional | inverse | Color of swatch border when swatch is active in any format (hex, rgb, etc) |
| AddButton | Element | optional | none | Button replacement for adding color that takes prop addColor function |
| RemoveButton | Element | optional | none | Button replacement for removing colors that takes prop removeColor function |
| SaveButton | Element | optional | none | Button replacement for saving colors that takes prop saveColor function |
Examples
import React, { useState } from "react"
import ColorList from "react-color-list"
function App() {
const [colors, setColors] = useState(["rgba(191,64,64,.5)","rgba(171,63,63,.6)","rgb(159,55,55)","rgb(141,52,52)","rgb(129,41,41)"])
return <ColorList colors = {colors} colorFormat = "rgb" onChange = {(c)=>setColors(c)} loadFromLeft flipAddButton maxColors = {10} minColors = {2} defaultColor="rgb(255,255,0)"/>
}
import React, { useState } from "react"
import ColorList from "react-color-list"
function App() {
const [colors, setColors] = useState(["#bf4040","#ab3f3f","#9f3737","#8d3434","#812929"])
return <ColorList colors={colors} colorFormat="hex" disableAlpha maxColors={6} onMaxColorsReached={(num) = alert("Reached Max of " + num)} className="container"
onChange={(c, e) => {
setColors(c)
alert(e)
}}
AddButton={
({ addColor }) => {
return <button onClick={() => addColor()}>Fancy Add Button</button>
}}
/>
}