# Palettes Functions

**Available functions:**

* `ColorPalette.__init__(base_color)`: Initializes the color palette with a base color.
* `ColorPalette.`[`generate_complementary`](#generate-complementary)`()`: Generates a complementary color palette.
* `ColorPalette.`[`generate_analogous`](#generate-analogous)`(angle=30)`: Generates an analogous color palette.
* `ColorPalette.`[`generate_triadic`](#generate-triadic)`()`: Generates a triadic color palette.
* `ColorPalette.`[`generate_tetradic`](#generate-tetradic)`()`: Generates a tetradic color palette.
* `ColorPalette.`[`generate_square`](#generate-square)`()`: Generates a square color palette.
* `ColorPalette.`[`generate_split_complementary`](#generate-split-complementary)`()`: Generates a split-complementary color palette.
* `ColorPalette.`[`generate_monochromatic`](#generate-monochromatic)`(shades=24)`: Generates a monochromatic color palette with varying lightness.
* `ColorPalette.`[`palette_to_hex`](#palette-to-hex)`()`: Converts the RGB palette to HEX format.
* `ColorPalette.`[`generate_random_palette`](#generate-random-palette)`()`: Generates a random base color and its associated palettes.
* `ColorPalette.`[`generate_random_color`](#generate-random-color)`()`: Generates a random RGB color and converts it to HEX and HSL formats.
* `ColorPalette.`[`generate_random_hex_colors`](#generate-random-hex-colors)`(n=10)`: Generates a list of random colors in HEX format.
* `ColorPalette.`[`generate_gradient`](#generate-gradient)`(color1, color2, steps=10)`: Generates a gradient between two RGB colors.
* `ColorPalette.`[`export_palette`](#export-palette)`(filename="palette.json")`: Exports the current color palette (list or dict) to a file.

{% hint style="info" %}
To use <mark style="color:blue;">**ColorPalette**</mark>, you must first initialize it with a base color (RGB tuple) before use:

```python
color_manager = ColorManager(base_color)
```

This, however, is not needed when using for random generation; you can init with a default RGB color of `(0,0,0)`, which is **black**.
{% endhint %}

***

### Generate complementary

Generates a complementary color palette.

```
Returns:
    list: A list of RGB tuples representing the complementary palette.
```

### Generate analogous

Generates an analogous color palette.

<pre><code>Parameters:
    angle (int): The angle difference for analogous colors (default 30).

Returns:
<strong>    list: A list of RGB tuples representing the analogous palette.
</strong></code></pre>

{% hint style="info" %}
`angle` represents how close the color values are to each other. You can lower the angle to, say **15**, for closer colors to that of the base color, or even increase it for colors that are still **analogous** in a sense but further away.
{% endhint %}

### Generate triadic

Generates a triadic color palette.

```
Returns:
    list: A list of RGB tuples representing the triadic palette.
```

### Generate tetradic

Generates a tetradic color palette.

```
Returns:
    list: A list of RGB tuples representing the tetradic palette.
```

### Generate square

Generates a square color palette.

```
Returns:
    list: A list of RGB tuples representing the square palette.
```

### Generate split-complementary

Generates a split-complementary color palette.

```
Returns:
    list: A list of RGB tuples representing the split-complementary palette.
```

### Generate monochromatic

Generates a monochromatic color palette.

<pre><code>Parameters:
<strong>    shades (int): Number of shades to generate (default 24).
</strong>
Returns:
    list: A list of RGB tuples representing the monochromatic palette.
</code></pre>

### Palette to HEX

Converts the RGB palette to HEX format.

```
Returns:
    list: A list of HEX strings representing the palette.
```

### Generate random palette

Generates a random base color and its associated palettes.

```
Returns:
    dict: A dictionary containing the following keys:
        - 'Base Color' (tuple): The randomly generated RGB base color, e.g., (R, G, B).
        - 'Complementary Palette' (list): A list of colors in the complementary palette.
        - 'Analogous Palette' (list): A list of colors in the analogous palette.
        - 'Triadic Palette' (list): A list of colors in the triadic palette.
        - 'Monochromatic Palette' (list): A list of colors in the monochromatic palette.
```

### Generate random color

Generates a random RGB color and converts it to HEX and HSL formats.

<pre><code>Returns:
    dict: A dictionary containing:
<strong>        - "RGB Color" (tuple): The random RGB color as a tuple of three integers.
</strong>        - "HEX Color" (str): The color converted into HEX format.
        - "HSL Color" (tuple): The color converted into HSL format.
</code></pre>

### Generate random HEX colors

Generates a list of random colors in HEX format.

```
Parameters:
    n (int, optional): The number of random HEX colors to generate. Default is 10.

Returns:
    list: A list of HEX color strings.
```

{% hint style="info" %}
We chose to add a batch HEX color generate function just for accessibility since HEX is popular, but you can quickly convert the colors to other formats as well.
{% endhint %}

### Generate gradient

Generates a gradient between two RGB colors.

{% code overflow="wrap" %}

```
Parameters:
    color1 (tuple): The starting RGB color (0-255).
    color2 (tuple): The ending RGB color (0-255).
    steps (int): The number of intermediate steps in the gradient (total colors = steps + 1).

Returns:
    list: A list of RGB tuples representing the gradient. Does NOT modify self.palette.
```

{% endcode %}

### Export palette

Exports the current color palette (list or dict) to a file.

<pre data-overflow="wrap"><code>Supported formats: .json, .txt, .csv.

    - JSON: Exports the full structure, converting RGB tuples to {"rgb": (r,g,b), "hex": "#RRGGBB"} objects for clarity.
    - TXT:  Exports a human-readable text format, labeling each palette type if the source is a dictionary.
<strong>    - CSV:  Exports a flattened structure. For lists: Type, Index, Hex, R, G, B. For dicts: PaletteName, Index, Hex, R, G, B
</strong>
Parameters:
    filename (str): The name of the file to save the palette. The extension determines the format (.json, .txt, .csv). Defaults to "palette.json".

Raises:
    ValueError: If the filename has an unsupported extension or if the palette is empty or in an unexpected format.
    TypeError: If self.palette is not a list or dict.
</code></pre>
