Current section
Files
Jump to
Current section
Files
color_wheel
README.md
README.md
# ColorWheel

An Elixir library for color palette generation and harmonious color schemes.




- πΊ **Triadic palettes**: Three colors equally spaced on the color wheel
- π² **Tetradic palettes**: Four colors forming a rectangle on the color wheel
- βοΈ **Complementary palettes**: Two opposite colors for high contrast
- π **Analogous palettes**: Adjacent colors for harmonious schemes
- π± **Split-complementary palettes**: Base color with adjacent complements
- π **Monochromatic palettes**: Variations of the same hue
- π **Color space conversions**: RGB β HSL
- #οΈβ£ **Hex support**: Hex string β RGB conversions
## Installation
Add `color_wheel` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:color_wheel, "~> 0.1.0"}
]
end
```
Then run `mix deps.get`.
## Usage
### Color Palette Generation
```elixir
# Rotation-based: three colors equally spaced on the color wheel
ColorWheel.triadic_palette({120, 50, 50})
# => {:ok, [{120.0, 50, 50}, {240.0, 50, 50}, {0.0, 50, 50}]}
# Variation-based: one hue across five saturation/lightness steps
ColorWheel.monochromatic_palette({240, 80, 60})
# => {:ok, [{240.0, 48, 36}, {240.0, 64, 48}, {240.0, 80, 60},
# {240.0, 96, 72}, {240.0, 100, 84}]}
```
Every palette generator returns `{:ok, colors}`, or `{:error, reason}` when the
input is not a valid HSL tuple, so palette generation never raises.
The conversions below are stricter. `rgb_to_hsl/1`, `hsl_to_rgb/1` and
`rgb_to_hex/1` raise `ArgumentError` for out-of-range values, while
`hex_to_rgb/1` returns `{:error, :invalid_hex_format}` because unparseable hex is
a data error rather than a programming error.
### Color Space Conversions
```elixir
# RGB to HSL (returns a bare tuple)
ColorWheel.rgb_to_hsl({255, 0, 0})
# => {0.0, 100.0, 50.0}
# Hex to RGB (returns an :ok/:error tuple)
ColorWheel.hex_to_rgb("#FF0000")
# => {:ok, {255, 0, 0}}
```
## API Reference
The `ColorWheel` module is the public entry point, and every function is
documented there with tested examples. The remaining palette generators
(`tetradic_palette/1`, `complementary_palette/1`, `analogous_palette/1`,
`split_complementary_palette/1`), the remaining conversions (`hsl_to_rgb/1`,
`rgb_to_hex/1`) and the colour-space helpers live in `ColorWheel.Palettes` and
`ColorWheel.Color`.
Build the docs locally with `mix docs` and open `doc/index.html`.
## Development
```bash
mix deps.get # install dependencies
mix test # run the test suite
mix format # format the code
mix compile --warnings-as-errors # compile without warnings
mix credo --strict # static analysis
mix docs # build HTML docs into doc/
```
Continuous integration runs `mix format --check-formatted`,
`mix compile --warnings-as-errors`, `mix test` and `mix credo --strict` on every
pull request, so run those four before opening one.
## Contributing
Contributions are welcome! Run the checks in
[Development](#development) before submitting a pull request.
## License
This project is licensed under the MIT License - see the LICENSE file for details.