//! Wasot Selector Parser Module
//!
//! This module provides CSS-inspired selector parsing for Wasot documents.
//! It supports a wide range of selector types including:
//!
//! - Basic selectors: `*`, `type-name`, `#id`
//! - Attribute selectors: `[attr]`, `[!attr]`, `[key="value"]`  
//! - Pseudo-classes: `:first-child`, `:nth-child(n)`, `:not()`
//! - Combinators: space (descendant), `>` (child), `+` (adjacent), `~` (sibling)
//! - OR selectors: comma-separated groups
//! - Quoted identifiers: `"type with space"`, `#"id with space"`
//!
//! # Example
//!
//! ```
//! use wasot_compiler::parsers::selectors::parse_selector;
//!
//! let group = parse_selector("section > paragraph:first-child").unwrap();
//! println!("{:#?}", group);
//! ```

pub mod ast;
pub mod parser;
pub mod specificity;
pub mod stack_frame_collector;

#[cfg(test)]
mod integration_tests;

#[cfg(test)]
mod edge_case_tests;

// Re-export the main types for convenience
pub use ast::*;
// Re-export parser functionality
pub use parser::{parse_selector, SelectorParser};
// Re-export specificity functionality
pub use specificity::{calculate_selector_part, calculate_simple_selector, Specificity};
// Re-export stack frame collector
pub use stack_frame_collector::StackFrameCollector;
