Twm.ClassGroupUtils (Twm v0.1.0)

View Source

Utilities 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

class_part_object()

@type class_part_object() :: [
  next_part: keyword(),
  validators: [class_validator_object()],
  class_group_id: String.t() | atom() | nil
]

class_validator_object()

@type class_validator_object() :: [
  class_group_id: String.t() | atom(),
  validator: function()
]

Functions

create_class_group_utils(config)

@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"

create_class_map(config)

@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"

get_class_group_id(class_name, class_group_processing_context)

@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 up
  • context - 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"

get_conflicting_class_group_ids(class_group_id, has_postfix_modifier, context)

@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 for
  • has_postfix_modifier - Whether the class has a postfix modifier
  • context - 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"]