Twm.ClassGroupUtils (Twm v0.1.0)
View SourceUtilities for working with class groups in Tailwind CSS.
This module provides functions to identify which group a class belongs to and to determine conflicting class groups based on the configuration.
Uses keyword lists throughout for maintaining order.
Summary
Functions
Creates class group utility context based on the provided configuration.
Creates a class map from the configuration for efficient class lookup.
Gets the class group ID for a given class name using the context.
Gets the conflicting class group IDs for a given class group.
Types
Functions
@spec create_class_group_utils(Twm.Config.t()) :: Twm.Context.ClassGroupProcessingContext.t()
Creates class group utility context based on the provided configuration.
Returns a Context struct containing the necessary data for class group operations. This replaces the previous approach of using anonymous functions that caused memory pressure by capturing large data structures.
Parameters
config
- Configuration keyword list containing class groups and conflicting groups
Examples
iex> config = Twm.Config.new([
...> class_groups: [display: ["block", "inline"]],
...> conflicting_class_groups: [display: []],
...> conflicting_class_group_modifiers: [],
...> theme: []
...> ])
iex> context = Twm.ClassGroupUtils.create_class_group_utils(config)
iex> Twm.ClassGroupUtils.get_class_group_id("block", context)
"display"
@spec create_class_map(Twm.Config.t()) :: keyword()
Creates a class map from the configuration for efficient class lookup.
The class map is a tree-like structure using keyword lists that allows for efficient traversal and lookup of class names and their corresponding groups.
Examples
iex> config = Twm.Config.new([
...> class_groups: [display: ["block", "inline"]],
...> theme: []
...> ])
iex> class_map = Twm.ClassGroupUtils.create_class_map(config)
iex> class_map[:next_part][:block][:class_group_id]
"display"
@spec get_class_group_id(String.t(), Twm.Context.ClassGroupProcessingContext.t()) :: String.t() | nil
Gets the class group ID for a given class name using the context.
Parameters
class_name
- The class name to look upcontext
- The Context struct containing class group data
Examples
iex> config = Twm.Config.new([class_groups: [display: ["block"]], theme: []])
iex> context = Twm.ClassGroupUtils.create_class_group_utils(config)
iex> Twm.ClassGroupUtils.get_class_group_id("block", context)
"display"
@spec get_conflicting_class_group_ids( String.t(), boolean(), Twm.Context.ClassGroupProcessingContext.t() ) :: [String.t()]
Gets the conflicting class group IDs for a given class group.
Parameters
class_group_id
- The class group ID to find conflicts forhas_postfix_modifier
- Whether the class has a postfix modifiercontext
- The Context struct containing conflict data
Examples
iex> config = Twm.Config.new([
...> class_groups: [display: ["block"]],
...> conflicting_class_groups: [display: ["position"]],
...> conflicting_class_group_modifiers: []
...> ])
iex> context = Twm.ClassGroupUtils.create_class_group_utils(config)
iex> Twm.ClassGroupUtils.get_conflicting_class_group_ids("display", false, context)
["position"]