import { Visitor } from "@herb-tools/core";
import type { HTMLAttributeNode, HTMLOpenTagNode, HTMLSelfCloseTagNode, Location } from "@herb-tools/core";
import type { LintOffense, LintSeverity } from "../types.js";
/**
 * Base visitor class that provides common functionality for rule visitors
 */
export declare abstract class BaseRuleVisitor extends Visitor {
    readonly offenses: LintOffense[];
    protected ruleName: string;
    constructor(ruleName: string);
    /**
     * Helper method to create a lint offense
     */
    protected createOffense(message: string, location: Location, severity?: LintSeverity): LintOffense;
    /**
     * Helper method to add an offense to the offenses array
     */
    protected addOffense(message: string, location: Location, severity?: LintSeverity): void;
}
/**
 * Gets attributes from either an HTMLOpenTagNode or HTMLSelfCloseTagNode
 */
export declare function getAttributes(node: HTMLOpenTagNode | HTMLSelfCloseTagNode): any[];
/**
 * Gets the tag name from an HTML tag node (lowercased)
 */
export declare function getTagName(node: HTMLOpenTagNode | HTMLSelfCloseTagNode): string | null;
/**
 * Gets the attribute name from an HTMLAttributeNode (lowercased)
 */
export declare function getAttributeName(attributeNode: HTMLAttributeNode): string | null;
/**
 * Gets the attribute value content from an HTMLAttributeValueNode
 */
export declare function getAttributeValue(attributeNode: HTMLAttributeNode): string | null;
/**
 * Checks if an attribute has a value
 */
export declare function hasAttributeValue(attributeNode: HTMLAttributeNode): boolean;
/**
 * Gets the quote type used for an attribute value
 */
export declare function getAttributeValueQuoteType(attributeNode: HTMLAttributeNode): "single" | "double" | "none" | null;
/**
 * Finds an attribute by name in a list of attributes
 */
export declare function findAttributeByName(attributes: any[], attributeName: string): HTMLAttributeNode | null;
/**
 * Checks if a tag has a specific attribute
 */
export declare function hasAttribute(node: HTMLOpenTagNode | HTMLSelfCloseTagNode, attributeName: string): boolean;
/**
 * Common HTML element categorization
 */
export declare const HTML_INLINE_ELEMENTS: Set<string>;
export declare const HTML_BLOCK_ELEMENTS: Set<string>;
export declare const HTML_BOOLEAN_ATTRIBUTES: Set<string>;
export declare const HEADING_TAGS: Set<string>;
/**
 * Checks if an element is inline
 */
export declare function isInlineElement(tagName: string): boolean;
/**
 * Checks if an element is block-level
 */
export declare function isBlockElement(tagName: string): boolean;
/**
 * Checks if an attribute is a boolean attribute
 */
export declare function isBooleanAttribute(attributeName: string): boolean;
/**
 * Abstract base class for rules that need to check individual attributes on HTML tags
 * Eliminates duplication of visitHTMLOpenTagNode/visitHTMLSelfCloseTagNode patterns
 * and attribute iteration logic. Provides simplified interface with extracted attribute info.
 */
export declare abstract class AttributeVisitorMixin extends BaseRuleVisitor {
    visitHTMLOpenTagNode(node: HTMLOpenTagNode): void;
    visitHTMLSelfCloseTagNode(node: HTMLSelfCloseTagNode): void;
    private checkAttributesOnNode;
    protected abstract checkAttribute(attributeName: string, attributeValue: string | null, attributeNode: HTMLAttributeNode, parentNode: HTMLOpenTagNode | HTMLSelfCloseTagNode): void;
}
/**
 * Checks if an attribute value is quoted
 */
export declare function isAttributeValueQuoted(attributeNode: HTMLAttributeNode): boolean;
/**
 * Iterates over all attributes of a tag node, calling the callback for each attribute
 */
export declare function forEachAttribute(node: HTMLOpenTagNode | HTMLSelfCloseTagNode, callback: (attributeNode: HTMLAttributeNode) => void): void;
