/**
 * Semantic normalization for diff comparisons.
 *
 * Strips non-semantic OOXML metadata from node JSON before diffing so that
 * volatile attributes (regenerated by Word on every save, or assigned per
 * editor session) do not produce false-positive diffs or fingerprint
 * mismatches. This module is used exclusively by the diffing pipeline — it
 * never mutates live ProseMirror nodes or touches importer/exporter code.
 */
/**
 * Strips volatile OOXML metadata from paragraph attributes.
 *
 * @param attrs Raw paragraph node attributes.
 * @returns A shallow copy with non-semantic keys removed.
 */
export declare function normalizeParagraphAttrs(attrs: Record<string, unknown>): Record<string, unknown>;
/**
 * Strips volatile OOXML metadata from an image node's JSON representation.
 *
 * Only touches `attrs.originalAttributes` — all other attributes are
 * preserved as-is so that genuine image changes (src, size, wrapping, etc.)
 * still produce diffs.
 *
 * @param nodeJSON Serialized image node (from `node.toJSON()`).
 * @returns A deep-enough copy with volatile keys removed from `originalAttributes`.
 */
export declare function normalizeImageNodeJSON(nodeJSON: Record<string, unknown>): Record<string, unknown>;
/**
 * Strips volatile metadata from an inline node's JSON based on its type.
 *
 * Currently normalizes image nodes. Other inline node types pass through
 * unchanged — extend the switch as new volatile-attr patterns emerge.
 *
 * @param nodeJSON Serialized inline node.
 * @returns Normalized copy (or the original if no normalization is needed).
 */
export declare function normalizeInlineNodeJSON(nodeJSON: Record<string, unknown>): Record<string, unknown>;
/**
 * Strips volatile metadata from an inline node's raw attributes.
 *
 * Used when computing attrsDiff for modified inline nodes so that
 * volatile keys don't appear in the diff payload.
 *
 * @param typeName The node type name (e.g. 'image').
 * @param attrs Raw node attributes.
 * @returns Normalized copy with volatile keys removed.
 */
export declare function normalizeInlineNodeAttrs(typeName: string, attrs: Record<string, unknown>): Record<string, unknown>;
/**
 * Produces a stable semantic key for an inline node, suitable for
 * identity comparison in Myers diff.
 *
 * Two nodes with the same key represent the same semantic content.
 * Volatile OOXML metadata is stripped so that re-imported copies of
 * the same image are treated as identical.
 *
 * @param node A ProseMirror node (or mock) with `type.name` and `toJSON()`.
 * @returns Stable JSON string usable as a comparison key.
 */
export declare function semanticInlineNodeKey(node: {
    type: {
        name: string;
    };
    toJSON: () => unknown;
}): string;
/**
 * Strips volatile metadata from a paragraph node's full JSON representation.
 *
 * Normalizes the paragraph's own attrs and recursively normalizes any
 * inline image nodes nested within its content tree.
 *
 * @param nodeJSON Serialized paragraph node (from `node.toJSON()`).
 * @returns Normalized copy suitable for semantic comparison.
 */
export declare function normalizeParagraphNodeJSON(nodeJSON: Record<string, unknown>): Record<string, unknown>;
/**
 * Normalizes an entire document JSON tree for diff fingerprinting.
 *
 * Walks the full document structure, stripping volatile paragraph and
 * image attributes at every level. Used by `canonicalize.ts` to ensure
 * fingerprints and diff comparisons agree on what counts as a real change.
 *
 * @param docJSON Serialized document (from `doc.toJSON()`).
 * @returns Normalized copy suitable for stable fingerprinting.
 */
export declare function normalizeDocJSON(docJSON: Record<string, unknown>): Record<string, unknown>;
/**
 * Reproduces the pre-SD-3279 document normalization for legacy fingerprint
 * validation. Used by `diff-service.ts` as a fallback when a snapshot or diff
 * payload was captured under the old algorithm and its stored fingerprint
 * would not match the current normalizer.
 *
 * @param docJSON Serialized document (from `doc.toJSON()`).
 * @returns Normalized copy matching the pre-SD-3279 algorithm.
 */
export declare function normalizeDocJSONLegacy(docJSON: Record<string, unknown>): Record<string, unknown>;
//# sourceMappingURL=semantic-normalization.d.ts.map