Raxol.Style.Colors.System (Raxol v2.0.1)
View SourceRefactored Color System module with GenServer-based state management.
This module provides backward compatibility while eliminating Process dictionary usage. All state is now managed through the Colors.System.Server GenServer.
Migration Notes
This module replaces direct Process dictionary usage with supervised GenServer state. The API remains the same, but the implementation is now OTP-compliant and more robust.
Features Maintained
- Theme management and switching
- High contrast mode support
- Automatic accessibility adjustments
- Color caching and resolution
- Event-driven theme changes
Summary
Functions
Applies a theme to the color system.
Get all UI colors for the current theme as a map of role => color.
Get all UI colors for a specific theme as a map of role => color.
Get a color from the current theme.
Get the current theme name.
Get a UI color by role (e.g., :primary_button) from the current theme. Resolves the role using the theme's ui_mappings, then fetches the color. Returns nil if the role or color is not found.
Handle high contrast mode changes from the accessibility module.
Initialize the color system.
Register a custom theme.
Functions
Applies a theme to the color system.
Parameters
theme_name- The name of the theme to applyopts- Additional options:high_contrast- Whether to apply high contrast mode (default: current setting)
Returns
:okon success{:error, reason}on failure
@spec get_all_ui_colors() :: map()
Get all UI colors for the current theme as a map of role => color.
Get all UI colors for a specific theme as a map of role => color.
Get a color from the current theme.
This function respects the current accessibility settings, automatically returning high-contrast alternatives when needed.
Parameters
color_name- The semantic name of the color (e.g.,:primary,:error)variant- The variant of the color (e.g.,:base,:hover,:active) (default::base)
Examples
iex> ColorSystem.get_color(:primary)
"#0077CC"
iex> ColorSystem.get_color(:primary, :hover)
"#0088DD"
Get the current theme name.
Get a UI color by role (e.g., :primary_button) from the current theme. Resolves the role using the theme's ui_mappings, then fetches the color. Returns nil if the role or color is not found.
Handle high contrast mode changes from the accessibility module.
Initialize the color system.
This sets up the default themes, registers event handlers for accessibility changes, and establishes the default color palette.
Options
:theme- The initial theme to use (default::default):high_contrast- Whether to start in high contrast mode (default: from accessibility settings)
Examples
iex> ColorSystem.init()
:ok
iex> ColorSystem.init(theme: :dark)
:ok
Register a custom theme.
Parameters
theme_attrs- Map of theme attributes
Examples
iex> ColorSystem.register_theme(%{
...> primary: "#0077CC",
...> secondary: "#00AAFF",
...> background: "#001133",
...> foreground: "#FFFFFF",
...> accent: "#FF9900"
...> })
:ok