import { CommentAccessMode } from "../../utils/enums";
import { BaseMetadata } from "./base-metadata.data.model";
import { Comment } from "./comment.data.model";
import { CursorPosition } from "./cursor-position.data.model";
import { CustomAnnotationDropdownItem } from "./custom-chip-dropdown.data.model";
import { CustomCategory, CustomPriority, CustomStatus } from "./custom-filter.data.model";
import { Location } from "./location.model";
import { PageInfo } from "./page-info.model";
import { TargetElement } from "./target-element.data.model";
import { TargetTextRange } from "./target-text-range.data.model";
import { User } from "./user.data.model";
import { CommentAnnotationViews } from "./views.data.model";
export declare class CommentAnnotation {
    /**
     * Unique identifier for the comment pin annotation.
     *
     * Auto generated.
     */
    annotationId: string;
    /**
     * Annotation number for the comment pin annotation.
     *
     * Auto generated.
     */
    annotationNumber?: number;
    /**
     * This is the list of all comments part of this annotation.
     *
     */
    comments: Comment[];
    /**
     * The list of categories that this comment pin annotation belongs to.
     */
    commentCategories: CustomCategory[];
    /**
     * The user who created this comment pin annotation.
     *
     */
    from: User;
    /**
     * Color used for the comment pin annotation.
     *
     */
    color?: string;
    /**
     * @deprecated
     * Whether the comment annotation is marked resolved.
     *
     */
    resolved?: boolean;
    /**
     * @deprecated
     * Whether the comment annotation is marked as in progress.
     *
     */
    inProgress?: boolean;
    /**
     * Timestamp when the comment annotation was last updated.
     *
     * Auto generated.
     */
    lastUpdated?: any;
    /**
     * Timestamp when the comment annotation was created.
     *
     * Auto generated.
     */
    createdAt?: any;
    /**
     * Comment annotation's position on the X axis.
     *
     * Auto generated.
     */
    positionX?: number;
    /**
     * Comment annotation's position on the Y axis.
     *
     * Auto generated.
     */
    positionY?: number;
    /**
     * User’s screen width.
     *
     * Auto generated.
     */
    screenWidth?: number;
    /**
     * User’s screen height.
     *
     * Auto generated.
     */
    screenHeight?: number;
    /**
     * User’s screen scroll height.
     *
     * Auto generated.
     */
    screenScrollHeight?: number;
    /**
    * User’s screen scroll height.
    *
    * Auto generated.
    */
    screenScrollTop?: number;
    /**
     * Xpath of the element that was clicked.
     *
     * Auto generated.
     */
    taggedElementPath?: string;
    /**
     * Xpath of the element that was clicked.
     *
     * Auto generated.
     */
    taggedElementRect?: any;
    /**
     * Target element of comment annotation
     */
    targetElement?: TargetElement | null;
    /**
     * Target element id provided by user
     */
    targetElementId?: string | null;
    position?: CursorPosition | null;
    /**
     * Unique document params id generated from provided document params
     * @deprecated `documentParamsId` is deprecated and will be removed in next release, use `locationId` instead.
     */
    documentParamsId?: number | null;
    /**
     * Set document params to identify user on sub document
     * @deprecated `documentParams` is deprecated and will be removed in next release, use `location` instead.
     */
    documentParams?: Location | null;
    /**
     * Unique location id generated from provided location
     */
    locationId?: number | null;
    /**
     * Set location to identify user on sub document
     */
    location?: Location | null;
    type?: string;
    commentType?: string;
    metadata?: CommentMetadata;
    /**
     * Selected text range of comment annotation
     */
    targetTextRange?: TargetTextRange | null;
    /**
     * Set `true` to set text comment annotation on all the text content of provided target element using `targetElementId`
     */
    selectAllContent?: boolean;
    approved?: boolean;
    status: CustomStatus;
    /**
     * To maintain index of current annotation in available list of annotations
     * It will start from 1, so no need to add 1 in that.
     */
    annotationIndex?: number;
    pageInfo?: PageInfo;
    assignedTo?: User;
    priority?: CustomPriority;
    ghostComment?: GhostComment | null;
    /**
     * Connected area annotation id of comment annotation
     */
    areaAnnotationId?: string;
    /**
     * Custom context data provided by the user
     */
    context?: any;
    /**
     * Context id generated from context data
     */
    contextId?: string;
    iam: CommentIAMConfig;
    isPageAnnotation?: boolean;
    targetInlineCommentElementId?: string;
    inlineCommentSectionConfig?: InlineCommentSectionConfig;
    customList?: CustomAnnotationDropdownItem[];
    subscribedUsers?: CommentAnnotationSubscribedUsers;
    unsubscribedUsers?: CommentAnnotationUnsubscribedUsers;
    subscribedGroups?: CommentAnnotationSubscribedGroups;
    resolvedByUserId?: string | null;
    resolvedByUser?: User | null;
    multiThreadAnnotationId?: string;
    isDraft?: boolean;
    sourceId?: string;
    views?: CommentAnnotationViews;
    viewedByUserIds?: string[];
    viewedBy?: User[];
    unread?: boolean;
}
export declare class GhostComment {
    targetElement?: TargetElement | null;
    message?: string;
    type?: string;
    /**
     * To check if comment is from same device group or not, device groups are ['mobile', 'tablet'] and ['desktop', 'monitor']
     */
    isSameGroup?: boolean;
}
export declare class CommentOnElementConfig {
    targetElement?: {
        targetText?: string;
        occurrence?: number;
        elementId?: string;
        selectAllContent?: boolean;
    };
    commentData?: {
        commentText: string;
        commentHtml?: string;
        status: string;
        from: any;
        replaceContentHtml?: string;
        replaceContentText?: string;
    }[];
    status?: string;
    context?: any;
    openComment?: boolean;
    sourceId?: string;
}
export declare class CommentIAMConfig {
    accessMode?: CommentAccessMode;
}
export declare class CommentMetadata extends BaseMetadata {
    [key: string]: any;
}
export declare class CommentSelectionChangeData {
    selected: boolean;
    annotation: CommentAnnotation;
}
export declare class LocationClickedData {
    annotationId: string;
    location: 'public' | 'private';
}
export declare class InlineCommentSectionConfig {
    id: string;
    name?: string;
}
export declare class ManualCommentAnnotationConfig {
    context?: any;
    location?: Location;
}
export declare class CommentAnnotationSubscribedUsers {
    [userIdHash: string]: {
        user: User;
        type: 'manual' | 'auto';
    };
}
export declare class CommentAnnotationUnsubscribedUsers {
    [userIdHash: string]: {
        user: User;
        type: 'manual' | 'auto';
    };
}
export declare class CommentAnnotationSubscribedGroups {
    [groupId: string]: {
        type: 'manual' | 'auto';
    };
}
export declare class UpdateContextConfig {
    merge?: boolean;
}
export interface ContextOptions {
    partialMatch?: boolean;
}
