defmodule Pote do @moduledoc """ Pote — canonical color types, default palette, and top-level helpers. This module defines the core color type definitions used throughout the entire library and provides access to the built-in default color palette. """ @type rgb :: {non_neg_integer(), non_neg_integer(), non_neg_integer()} @type hsl :: {float(), float(), float()} @type hsv :: {float(), float(), float()} @type cmyk :: {float(), float(), float(), float()} @type hex :: String.t() @type xterm256 :: 0..255 @type argb :: {non_neg_integer(), non_neg_integer(), non_neg_integer(), non_neg_integer()} @type color_input :: rgb() | hex() | hsl() | hsv() | cmyk() | xterm256() | atom() | String.t() @type color_output :: rgb() | nil @default_colors %{ primary: {161, 231, 250}, secondary: {58, 171, 163}, ternary: {255, 128, 0}, quaternary: {155, 66, 226}, no_color: {248, 248, 242}, background: {40, 44, 52}, success: {151, 197, 60}, warning: {253, 216, 8}, error: {255, 91, 91}, info: {0, 255, 255}, menu: {171, 205, 241}, alert: {253, 216, 8}, critical: {255, 91, 91}, debug: {176, 176, 176}, happy: {238, 128, 195}, sad: {129, 161, 193}, gradient_1: {161, 231, 250}, gradient_2: {136, 192, 208}, gradient_3: {129, 161, 193}, gradient_4: {94, 129, 172}, gradient_5: {76, 86, 106}, gradient_6: {67, 76, 94} } @doc "Returns the default color palette." @spec default_colors() :: map() def default_colors, do: @default_colors @doc "Looks up a color by atom name. Returns RGB tuple or nil." @spec get_color(atom()) :: {integer(), integer(), integer()} | nil def get_color(name) do Map.get(@default_colors, name) end @doc "Checks if a color name exists in the default palette." @spec color_exists?(atom()) :: boolean() def color_exists?(name) do Map.has_key?(@default_colors, name) end @doc "Returns all available color names." @spec color_names() :: [atom()] def color_names do Map.keys(@default_colors) end @doc "Returns a specific color by name (alias for get_color/1)." @spec color(atom()) :: {integer(), integer(), integer()} | nil def color(name), do: get_color(name) end