import { TrackedChangeKind } from '../../../../../../layout-engine/contracts/src/index.js';
import { HyperlinkConfig } from './types.js';
export { SUBSCRIPT_SUPERSCRIPT_SCALE } from '../../../../../../layout-engine/contracts/src/index.js';
/**
 * Unit conversion constants
 */
export declare const TWIPS_PER_INCH = 1440;
export declare const PX_PER_INCH = 96;
export declare const PX_PER_PT: number;
/**
 * Tracked changes mark types
 */
export declare const TRACK_INSERT_MARK = "trackInsert";
export declare const TRACK_DELETE_MARK = "trackDelete";
export declare const TRACK_FORMAT_MARK = "trackFormat";
/**
 * Map mark types to tracked change kinds
 */
export declare const TRACK_CHANGE_KIND_MAP: Record<string, TrackedChangeKind>;
/**
 * Tracked change priority for selecting between overlapping marks
 */
export declare const TRACK_CHANGE_PRIORITY: Record<TrackedChangeKind, number>;
/**
 * Valid tracked changes mode values.
 * Used for runtime validation to prevent unsafe type casts.
 */
export declare const VALID_TRACKED_MODES: readonly ["review", "original", "final", "off"];
/**
 * Maximum allowed length for JSON-stringified run mark payloads.
 * Set to 10KB to balance flexibility with DoS protection.
 */
export declare const MAX_RUN_MARK_JSON_LENGTH = 10000;
/**
 * Maximum number of marks allowed in before/after arrays.
 * Prevents memory exhaustion from malicious payloads while supporting
 * reasonable formatting complexity.
 */
export declare const MAX_RUN_MARK_ARRAY_LENGTH = 100;
/**
 * Maximum nesting depth for mark attribute objects.
 * Protects against stack overflow from deeply nested structures.
 */
export declare const MAX_RUN_MARK_DEPTH = 5;
/**
 * Default hyperlink configuration
 */
export declare const DEFAULT_HYPERLINK_CONFIG: HyperlinkConfig;
/**
 * Atomic inline node types that cannot contain content.
 *
 * These nodes have `atom: true` in their ProseMirror schema definition, meaning they:
 * - Occupy exactly 1 position in the document (not 2 like container nodes)
 * - Cannot be directly edited or contain nested content
 * - Are treated as a single unit for selection and cursor positioning
 *
 * CRITICAL: This set must stay in sync with schema definitions. If a node type has
 * `atom: true` in its schema but is NOT listed here, buildPositionMap() will incorrectly
 * calculate positions, leading to cursor positioning bugs during hit testing.
 *
 * Node types with atom: true:
 * - image: Inline images
 * - hardBreak, lineBreak: Line breaks
 * - page-number, total-page-number, section-page-count: Document tokens
 * - indexEntry: Index entry field markers (see index-entry.js)
 * - tab: Tab stops (see tab.js)
 * - noBreakHyphen: Non-breaking hyphen (U+2011 from <w:noBreakHyphen/>; see no-break-hyphen.js)
 * - passthroughInline: Passthrough content like FORMCHECKBOX (see passthrough.js)
 * - bookmarkEnd: Bookmark end markers (see bookmark-end.js)
 *
 * Note: bookmarkStart is NOT atomic - it has content: 'inline*' in the schema,
 * allowing it to wrap inline content and therefore occupying 2 positions (open + close).
 */
export declare const ATOMIC_INLINE_TYPES: Set<string>;
/**
 * Token inline types mapping
 */
export declare const TOKEN_INLINE_TYPES: Map<string, "pageNumber" | "totalPageCount" | "pageReference" | "sectionPageCount" | undefined>;
//# sourceMappingURL=constants.d.ts.map