import { Mark, Range } from '@tiptap/core';
import { Mark as PMMark } from '@tiptap/pm/model';

declare module '@tiptap/core' {
    interface Commands<ReturnType> {
        comment: {
            /**
             * Set a comment (add)
             */
            setComment: (commentId: string) => ReturnType;
            /**
             * Unset a comment (remove completely)
             */
            unsetComment: (commentId: string) => ReturnType;
            /**
             * Resolve a comment (keep ID but update styling)
             */
            resolveComment: (commentId: string) => ReturnType;
            /**
             * Unresolve a comment (switch back to unresolved state)
             */
            unresolveComment: (commentId: string) => ReturnType;
            /**
             * Set a comment active
             */
            setCommentActive: (commentId: string) => ReturnType;
            /**
             * Unset comment active
             */
            unsetCommentActive: () => ReturnType;
        };
    }
}
export interface MarkWithRange {
    mark: PMMark;
    range: Range;
}
export interface CommentOptions {
    HTMLAttributes: Record<string, any>;
    onCommentActivated: (commentId: string) => void;
    onCommentResolved?: (commentId: string) => void;
    onCommentUnresolved?: (commentId: string) => void;
    onCommentDeleted?: (commentId: string) => void;
}
export interface CommentStorage {
    activeCommentId: string | null;
}
export interface IComment {
    id?: string;
    username?: string;
    reactions?: {
        count: number;
        type: string;
    }[];
    selectedContent?: string;
    content?: string;
    replies?: IComment[];
    createdAt?: Date;
    resolved?: boolean;
    deleted?: boolean;
    commentIndex?: number;
    version?: string;
}
export declare const CommentExtension: Mark<CommentOptions, CommentStorage>;
