/**
 * Remark plugin for Legal Markdown cross-references
 *
 * This plugin processes internal cross-references in Legal Markdown documents
 * using AST-based processing to avoid text contamination issues. It handles:
 * - Header extraction with |key| syntax (l. **Title** |key|)
 * - Section numbering based on frontmatter formats
 * - Cross-reference resolution throughout the document
 * - Integration with field tracking for highlighting
 *
 * Architecture:
 * 1. First pass: Extract cross-reference definitions from headers
 * 2. Generate section numbers based on legal numbering formats
 * 3. Second pass: Replace |key| references with section numbers
 * 4. Integrate with field tracker for highlighting support
 *
 * @example
 * ```typescript
 * import { unified } from 'unified';
 * import remarkParse from 'remark-parse';
 * import remarkCrossReferences from './cross-references.js';
 *
 * const processor = unified()
 *   .use(remarkParse)
 *   .use(remarkCrossReferences, { metadata: frontmatterData });
 *
 * const result = await processor.process(content);
 * ```
 *
 * @module
 */
import type { Plugin } from 'unified';
import type { Root } from 'mdast';
import type { YamlValue } from '../../types/index.js';
/**
 * Cross-reference definition extracted from headers
 */
interface CrossReferenceDefinition {
    key: string;
    level: number;
    sectionNumber: string;
    sectionText: string;
    headerText: string;
    position?: {
        line: number;
        column: number;
    };
}
/**
 * Section counters for tracking hierarchical numbering
 */
interface SectionCounters {
    level1: number;
    level2: number;
    level3: number;
    level4: number;
    level5: number;
    level6: number;
}
/**
 * Plugin options for cross-reference processing
 */
interface CrossReferenceOptions {
    /** Document metadata containing level formats and other data */
    metadata: Record<string, YamlValue>;
    /** Enable debug logging */
    debug?: boolean;
    /** Enable field tracking with highlighting during AST processing */
    enableFieldTracking?: boolean;
}
/**
 * Update section counters based on current level
 */
declare function updateSectionCounters(counters: SectionCounters, level: number): void;
/**
 * Generate section number based on level and counters with academic format support
 */
declare function generateSectionNumber(level: number, counters: SectionCounters, levelFormats: Record<string, string>): string;
/**
 * Extract cross-reference definitions from heading nodes
 */
declare function extractCrossReferencesFromAST(root: Root, metadata: Record<string, YamlValue>, _debug?: boolean): CrossReferenceDefinition[];
/**
 * Clean header definitions by removing |key| patterns from headers
 * Only removes the definition pattern at the end of headers, preserving references
 */
declare function cleanHeaderDefinitionsInAST(root: Root, crossReferences: CrossReferenceDefinition[]): void;
/**
 * Replace cross-reference usage in text nodes with optional field tracking
 */
declare function replaceCrossReferencesInAST(root: Root, crossReferences: CrossReferenceDefinition[], metadata: Record<string, YamlValue>, enableFieldTracking?: boolean): void;
/**
 * Format metadata values based on type and context
 */
declare function formatMetadataValue(value: YamlValue | undefined, key: string, metadata: Record<string, YamlValue>): string;
/**
 * Remark plugin for processing cross-references in Legal Markdown documents
 */
declare const remarkCrossReferences: Plugin<[CrossReferenceOptions], Root>;
export default remarkCrossReferences;
export type { CrossReferenceOptions, CrossReferenceDefinition };
export { updateSectionCounters as _updateSectionCounters, generateSectionNumber as _generateSectionNumber, extractCrossReferencesFromAST as _extractCrossReferencesFromAST, cleanHeaderDefinitionsInAST as _cleanHeaderDefinitionsInAST, replaceCrossReferencesInAST as _replaceCrossReferencesInAST, formatMetadataValue as _formatMetadataValue, };
//# sourceMappingURL=cross-references.d.ts.map