/** @typedef {'trackInsert'|'trackDelete'|'trackFormat'} TrackedMarkName */
/**
 * Canonical semantic types stored on marks.
 *
 * Internal graph values use these canonical v2-style strings. The public
 * document-api `TrackChangeType` union remains legacy `insert | delete |
 * format` until the contract is widened (closed product decision
 * 2026-05-21).
 *
 * @readonly
 */
export const CanonicalChangeType: Readonly<{
    Insertion: "insertion";
    Deletion: "deletion";
    Replacement: "replacement";
    Formatting: "formatting";
}>;
/**
 * Derived `subtype` values for v1 text scope.
 *
 * @readonly
 */
export const ChangeSubtype: Readonly<{
    TextInsertion: "text-insertion";
    TextDeletion: "text-deletion";
    TextReplacement: "text-replacement";
    RunFormatting: "run-formatting";
}>;
/**
 * Derived side values for v1 text-overlap scope.
 *
 * @readonly
 */
export const SegmentSide: Readonly<{
    Inserted: "inserted";
    Deleted: "deleted";
    Formatting: "formatting";
}>;
export function sideFromMarkName(markName: string): "inserted" | "deleted" | "formatting" | null;
export function subtypeFromChangeType(changeType: string): string | null;
export function deterministicJson(value: any): string;
export function canonicalizeSourceIds(value: any): Record<string, unknown>;
export function readTrackedAttrs(markOrAttrs: {
    attrs?: Record<string, unknown>;
    type?: {
        name?: string;
    };
} | Record<string, unknown>, markName?: string): NormalizedTrackedAttrs;
export function normalizedAttrsEqual(a: NormalizedTrackedAttrs, b: NormalizedTrackedAttrs): boolean;
export function serializeSourceIds(sourceIds: Record<string, unknown>): string;
export type TrackedMarkName = "trackInsert" | "trackDelete" | "trackFormat";
export type NormalizedTrackedAttrs = {
    /**
     * Active logical tracked-change id.
     */
    id: string;
    /**
     * Defaults to `id` for unsplit changes.
     */
    revisionGroupId: string;
    /**
     * Retired id this fragment descends from.
     */
    splitFromId: string;
    /**
     * Canonical type.
     */
    changeType: string;
    /**
     * Logical replacement group id.
     */
    replacementGroupId: string;
    /**
     * Stable side id within a replacement.
     */
    replacementSideId: string;
    /**
     * Logical parent change id, or ''.
     */
    overlapParentId: string;
    /**
     * Canonical sourceIds object.
     */
    sourceIds: Record<string, unknown>;
    /**
     * Legacy raw Word `w:id` value or ''.
     */
    sourceId: string;
    /**
     * Imported author provenance.
     */
    importedAuthor: string;
    /**
     * Optional import origin.
     */
    origin: string;
    /**
     * Display name.
     */
    author: string;
    /**
     * Stable actor id.
     */
    authorId: string;
    /**
     * Author email (not lowercased here).
     */
    authorEmail: string;
    /**
     * Author image url/value.
     */
    authorImage: string;
    /**
     * Created/modified ISO date.
     */
    date: string;
    /**
     * One of trackInsert/trackDelete/trackFormat.
     */
    markType: string;
    /**
     * Derived side.
     */
    side: string;
    /**
     * Derived subtype.
     */
    subtype: string;
    /**
     * Persisted changeType attr verbatim, or ''.
     */
    explicitChangeType: string;
    /**
     * Was any persisted review attr explicit?
     */
    hasReviewMetadata: boolean;
};
//# sourceMappingURL=mark-metadata.d.ts.map