"""The colors used in Reflex are a wrapper around https://www.radix-ui.com/colors.""" from dataclasses import dataclass from typing import Literal ColorType = Literal[ "gray", "mauve", "slate", "sage", "olive", "sand", "tomato", "red", "ruby", "crimson", "pink", "plum", "purple", "violet", "iris", "indigo", "blue", "cyan", "teal", "jade", "green", "grass", "brown", "orange", "sky", "mint", "lime", "yellow", "amber", "gold", "bronze", "accent", "black", "white", ] ShadeType = Literal[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] def format_color(color: ColorType, shade: ShadeType, alpha: bool) -> str: """Format a color as a CSS color string. Args: color: The color to use. shade: The shade of the color to use. alpha: Whether to use the alpha variant of the color. Returns: The formatted color. """ return f"var(--{color}-{'a' if alpha else ''}{shade})" @dataclass class Color: """A color in the Reflex color palette.""" # The color palette to use color: ColorType # The shade of the color to use shade: ShadeType = 7 # Whether to use the alpha variant of the color alpha: bool = False def __format__(self, format_spec: str) -> str: """Format the color as a CSS color string. Args: format_spec: The format specifier to use. Returns: The formatted color. """ return format_color(self.color, self.shade, self.alpha)