LiveStyle.Pseudo (LiveStyle v0.13.0)
View SourceCSS pseudo-class and pseudo-element information and lookups.
This module provides compile-time generated function clauses for efficient pseudo-class priority lookups, following the pattern used by the unicode library.
All pseudo data is loaded from external files at compile time via
LiveStyle.PropertyMetadata, enabling:
- O(1) pattern-matched lookups instead of runtime lookups
- Automatic recompilation when data files change
- Single source of truth for pseudo metadata
Pseudo-Class Priority System
Pseudo-classes have priorities that determine their order in the cascade:
- Lower priority pseudos are applied first
- Higher priority pseudos override lower ones
:hover(130) <:focus(150) <:active(170)
Pseudo-Element Priority
Pseudo-elements (::before, ::after, etc.) add a base priority of 5000, which can be combined with pseudo-class priorities.
Examples
iex> LiveStyle.Pseudo.priority(":hover")
130
iex> LiveStyle.Pseudo.priority(":focus")
150
iex> LiveStyle.Pseudo.element_priority()
5000
Summary
Functions
Calculate the total priority for a selector suffix.
Checks if the given selector is a pseudo-element (starts with ::).
Returns the base priority added for pseudo-elements.
Returns all pseudo-class priorities as a map.
Returns the priority of a single pseudo-class.
Functions
Calculate the total priority for a selector suffix.
Handles:
- Single pseudo-classes (
:hover) - Combined pseudo-classes (
:hover:active) - Pseudo-elements (
::before) - Pseudo-elements with pseudo-classes (
::before:hover) - Complex selectors (
:where(.marker:hover *))
Examples
iex> LiveStyle.Pseudo.calculate_priority(":hover")
130
iex> LiveStyle.Pseudo.calculate_priority(":hover:active")
300
iex> LiveStyle.Pseudo.calculate_priority("::before")
5000
iex> LiveStyle.Pseudo.calculate_priority("::before:hover")
5130
Checks if the given selector is a pseudo-element (starts with ::).
Examples
iex> LiveStyle.Pseudo.element?("::before")
true
iex> LiveStyle.Pseudo.element?(":hover")
false
iex> LiveStyle.Pseudo.element?(nil)
false
@spec element_priority() :: integer()
Returns the base priority added for pseudo-elements.
Examples
iex> LiveStyle.Pseudo.element_priority()
5000
Returns all pseudo-class priorities as a map.
Returns the priority of a single pseudo-class.
Uses compile-time generated function clauses for O(1) pattern matching.
Examples
iex> LiveStyle.Pseudo.priority(":hover")
130
iex> LiveStyle.Pseudo.priority(":active")
170
iex> LiveStyle.Pseudo.priority(":unknown")
40