// @ts-nocheck
import { Observable } from "rxjs";
import { CommentAnnotation, CommentOnElementConfig, CommentSelectionChangeData, ManualCommentAnnotationConfig, UpdateContextConfig } from "../data/comment-annotation.data.model";
import { AcceptCommentAnnotationEvent, AddCommentAnnotationEvent, AddCommentEvent, AddReactionEvent, ApproveCommentAnnotationEvent, CommentAddEventData, CommentEventTypesMap, CommentUpdateEventData, CopyLinkEvent, DeleteAttachmentEvent, DeleteCommentAnnotationEvent, DeleteCommentEvent, DeleteReactionEvent, DeleteRecordingEvent, GetLinkEvent, RejectCommentAnnotationEvent, ToggleReactionEvent, UpdateAccessEvent, UpdateCommentEvent, UpdatePriorityEvent, UpdateStatusEvent, GetCommentAnnotationsResponse, GetCommentAnnotationsCountResponse, FetchCommentAnnotationsResponse } from "../data/comment-events.data.model";
import { CustomCategory, CustomPriority, CustomStatus } from "../data/custom-filter.data.model";
import { CustomAnnotationDropdownData } from "../data/custom-chip-dropdown.data.model";
import { AutocompleteData } from "../data/autocomplete.data.model";
import { CommentSidebarCustomActionEventData, CommentSidebarData, CommentSidebarDataOptions } from "../data/comment-sidebar-config.model";
export { ReactionMap } from '../data/reaction-annotation.data.model';
import { AcceptCommentAnnotationRequest, AddAttachmentRequest, AddAttachmentResponse, AddCommentAnnotationRequest, AddCommentRequest, AddReactionRequest, ApproveCommentAnnotationRequest, AssignUserRequest, AssignUserEvent, CopyLinkRequest, DeleteAttachmentRequest, DeleteCommentAnnotationRequest, CommentRequestQuery, CommentRequestQuery, DeleteCommentRequest, DeleteReactionRequest, DeleteRecordingRequest, GetAttachmentRequest, GetCommentRequest, GetLinkRequest, GetRecordingRequest, RejectCommentAnnotationRequest, ResolveCommentAnnotationRequest, SubscribeCommentAnnotationRequest, UnsubscribeCommentAnnotationRequest, ToggleReactionRequest, UpdateAccessRequest, UpdateCommentRequest, UpdatePriorityRequest, UpdateStatusRequest, FetchCommentAnnotationsRequest } from "../data/comment-actions.data.model";
import { UnreadCommentsCount, TransformContext } from "../data/comment-utils.data.model";
export declare class CommentElement {
  /**
   * Subscribe to comments on the current document.
   *
   * Returns Observable<CommentPinAnnotation[] | null>.
   */
  getAllCommentAnnotations: (documentId?: string, documentParams?: object) => Observable<CommentAnnotation[] | null>;

  /**
   * To delete selected comments
   */
  deleteSelectedComment: () => Promise<any>;

  /**
   * To enable text comment selection
   */
  enableTextComments: () => any;

  /**
   * To disable text comment selection
   */
  disableTextComments: () => any;

  /**
   * To allow text selection in specific elements only
   * @param elementIds Element ids to be allowed for text selection
   */
  allowedElementIds: (elementIds: string[]) => any;

  /**
   * To allow adding comments in specific elements only
   * @param classNames Element class names to be allowed for adding comments
   */
  allowedElementClassNames: (classNames: string[]) => any;

  /**
   * To allow adding comments in specific elements only
   * @param querySelectors Element query selectors to be allowed for adding comments
   */
  allowedElementQuerySelectors: (querySelectors: string[]) => any;

  /**
   * To enable floating comment dialog
   */
  enableFloatingCommentDialog: () => any;

  /**
   * To disable floating comment dialog
   */
  disableFloatingCommentDialog: () => any;

  /**
   * To add comments on specific elements
   *
   * @param elementId ID of html element
   */
  attachComment: (elementId: string) => any;

  /**
   * To open comment sidebar
   */
  openCommentSidebar: () => any;

  /**
  * To close comment sidebar
  */
  closeCommentSidebar: () => any;

  /**
   * To toggle comment sidebar
   */
  toggleCommentSidebar: () => any;

  /**
  * To enable moderator mode
  */
  enableModeratorMode: () => any;

  /**
   * To disable moderator mode
   */
  disableModeratorMode: () => any;

  /**
   * To enable stream mode
   */
  enableStreamMode: () => any;

  /**
   * To disable stream mode
   */
  disableStreamMode: () => any;

  /**
   * To show sign in button in comments if user is signed out
   */
  enableSignInButton: () => any;

  /**
   * To hide sign in button in comments if user is signed out
   */
  disableSignInButton: () => any;

  /**
   * To enable upgrade button in comments when plan is expired
   */
  enableUpgradeButton: () => any;

  /**
   * To disable upgrade button in comments when plan is expired
   */
  disableUpgradeButton: () => any;

  /**
   * Subscribe to comment mode change.
   * 
   * Returns Observable<boolean>.
   */
  onCommentModeChange: () => Observable<boolean>;

  /**
   * Enable attachments feature in comments
   */
  enableAttachments: () => any;

  /**
   * Disable attachments feature in comments
   */
  disableAttachments: () => any;

  /**
   * Get if user is part of global contact or not.
   */
  isUserGlobalContact: () => Observable<boolean>;

  /**
   * Enable device info in comments
   */
  enableDeviceInfo: () => any;

  /**
   * Disable device info in comments
   */
  disableDeviceInfo: () => any;

  /**
   * Enable comment mode to add comments.
   */
  public enableCommentMode: () => any;

  /**
   * Disable comment mode.
   */
  public disableCommentMode: () => any;

  /**
   * Enable persistent comment mode.
   */
  public enablePersistentCommentMode: () => any;

  /**
   * Disable persistent comment mode.
   */
  public disablePersistentCommentMode: () => any;

  /**
   * To show comment number
   */
  public enableCommentIndex: () => any;

  /**
   * To hide comment number
   */
  public disableCommentIndex: () => any;

  /**
   * To enable popover mode
   */
  public enablePopoverMode: () => any;

  /**
   * To disable popover mode
   */
  public disablePopoverMode: () => any;

  /**
   * To show triangle in popover mode
   */
  public enablePopoverTriangleComponent: () => any;

  /**
   * To hide triangle in popover mode
   */
  public disablePopoverTriangleComponent: () => any;

  /**
   * To enable dialog on hover
   */
  public enableDialogOnHover: () => any;

  /**
   * To disable dialog on hover
   */
  public disableDialogOnHover: () => any;

  /**
   * To enable feature to show dialog on target element click
   */
  public enableDialogOnTargetElementClick: () => any;

  /**
   * To disable feature to show dialog on target element click
   */
  public disableDialogOnTargetElementClick: () => any;

  /**
   * To enable feature to set priority on comments
   */
  public enablePriority: () => any;

  /**
   * To disable feature to set priority on comments
   */
  public disablePriority: () => any;

  /**
   * To enable feature to set status on comments
   */
  public enableStatus: () => any;

  /**
   * To disable feature to set status on comments
   */
  public disableStatus: () => any;

  /**
   * To enable feature to show resolve button
   */
  public enableResolveButton: () => any;

  /**
   * To disable feature to show resolve button
   */
  public disableResolveButton: () => any;

  /**
   * To enable feature to show ghost comments
   */
  public enableGhostComments: () => any;

  /**
   * To disable feature to show ghost comments
   */
  public disableGhostComments: () => any;

  /**
   * To enable feature to show ghost comments message in comment dialog and comment sidebar
   */
  public enableGhostCommentsIndicator: () => any;

  /**
   * To disable feature to show ghost comments message in comment dialog and comment sidebar
   */
  public disableGhostCommentsIndicator: () => any;

  /**
   * @description Sets custom status filters
   * @param statuses 
   */
  setCustomStatus: (statuses: CustomStatus[]) => void;

  /**
   * @description Sets custom priority filters
   * @param priorities
   */
  setCustomPriority: (priorities: CustomPriority[]) => void;

  /**
   * @description Sets custom categories filters
   * @param categories
   */
  setCustomCategory: (categories: CustomCategory[]) => void;

  /**
   * To enable inbox mode
   */
  public enableInboxMode: () => any;

  /**
   * To disable inbox mode
   */
  public disableInboxMode: () => any;

  /**
   * To enable auto categorize feature
   */
  public enableAutoCategorize: () => any;

  /**
   * To disable auto categorize feature
   */
  public disableAutoCategorize: () => any;

  /**
   * To enable dark mode in comments
   */
  public enableDarkMode: () => any;

  /**
   * To disable dark mode in comments
   */
  public disableDarkMode: () => any;

  /**
   * @description Sets the comment context provider
   * @param provider 
   */
  public setContextProvider: (provider: (documentId: string, location?: any) => any) => void;

  /**
   * To enable suggestion mode
   */
  public enableSuggestionMode: () => any;

  /**
   * To disable suggestion mode
   */
  public disableSuggestionMode: () => any;

  /**
   * To enable mobile mode
   */
  public enableMobileMode: () => any;

  /**
   * To disable mobile mode
   */
  public disableMobileMode: () => any;

  /**
   * To enable inline comment mode
   */
  public enableInlineCommentMode: () => any;

  /**
   * To disable inline comment mode
   */
  public disableInlineCommentMode: () => any;

  /**
   * To enable minimap
   */
  public enableMinimap: () => any;

  /**
   * To disable minimap
   */
  public disableMinimap: () => any;

  /**
   * To show comments on DOM
   */
  public showCommentsOnDom: () => any;

  /**
   * To hide comments on DOM
   */
  public hideCommentsOnDom: () => any;

  /**
   * To enable comment tool
   */
  public enableCommentTool: () => any;

  /**
   * To disable comment tool
   */
  public disableCommentTool: () => any;

  /**
   * To set total media length.
   */
  public setTotalMediaLength: (totalMediaLength: number) => void;

  /**
   * To get documentId, location and set context data when comment is added.
   * 
   * @legacy Use `AddCommentAnnotationEvent` instead
   */
  public onCommentAdd: () => Observable<CommentAddEventData>;

  /**
   * To get data when comment is updated.
   * 
   * @legacy Use action specific events instead
   */
  public onCommentUpdate: () => Observable<CommentUpdateEventData>;

  /**
   * To add comment on selected text.
   */
  public addCommentOnSelectedText: () => void;

  /**
   * To enable navigation when comment is clicked in sidebar.
   */
  public enableSidebarUrlNavigation: () => void;

  /**
   * To disable navigation when comment is clicked in sidebar.
   */
  public disableSidebarUrlNavigation: () => void;

  /**
   * To enable sidebar button on comment dialog.
   */
  public enableSidebarButtonOnCommentDialog: () => void;

  /**
   * To disable sidebar button on comment dialog.
   */
  public disableSidebarButtonOnCommentDialog: () => void;

  /**
   * To detect click on sidebar button on comment dialog.
   */
  public onSidebarButtonOnCommentDialogClick: () => Observable<any>;

  /**
   * To enable reactions in comments
   */
  public enableReactions: () => void;

  /**
   * To disable reactions in comments
   */
  public disableReactions: () => void;

  /**
   * To set allowed recordings in comments
   * @param allowedRecordings "all", "none" or "audio", "video", "screen"
   */
  public setRecordings: (allowedRecordings: string | string[]) => void;

  /**
   * To manually add comment on element.
   * @param data comment data
   */
  public addCommentOnElement: (data: CommentOnElementConfig) => void;

  /**
   * To enable private comment mode to add private comments.
   * This mode can be enabled for admin users only.
   */
  public enablePrivateCommentMode: () => void;

  /**
   * To disable private comment mode.
   */
  public disablePrivateCommentMode: () => void;

  /**
   * To enable scroll to comment.
   */
  public enableScrollToComment: () => void;

  /**
   * To disable scroll to comment.
   */
  public disableScrollToComment: () => void;

  /**
   * To enable user mentions in comments
   */
  public enableUserMentions: () => void;

  /**
   * To disable user mentions in comments
   */
  public disableUserMentions: () => void;

  /**
   * To apply filters on comment sidebar.
   * @param filters Filters to be applied on comment sidebar
   */
  public setCommentSidebarFilters: (filters: any) => void;

  /**
   * To enable comment pin highlighter.
   */
  public enableCommentPinHighlighter: () => void;

  /**
   * To disable comment pin highlighter.
   */
  public disableCommentPinHighlighter: () => void;

  /**
   * To enable deleting comment on backspace.
   */
  public enableDeleteOnBackspace: () => void;

  /**
   * To disable deleting comment on backspace.
   */
  public disableDeleteOnBackspace: () => void;

  /**
   * To enable hotkey.
   */
  public enableHotkey: () => void;

  /**
   * To disable hotkey.
   */
  public disableHotkey: () => void;

  /**
   * To enable option to show device indicator on comment pins for the pin added from different devices.
   */
  public enableDeviceIndicatorOnCommentPins: () => void;

  /**
   * To disable option to show device indicator on comment pins for the pin added from different devices.
   */
  public disableDeviceIndicatorOnCommentPins: () => void;

  /**
   * To get xpath of element by comment annotation id
   * @param annotationId Comment annotation id
   * @returns xpath of element
   */
  public getElementRefByAnnotationId: (annotationId: string) => { xpath: string } | undefined;

  /**
   * To scroll to comment by annotation id
   * @param annotationId Comment annotation id
   */
  public scrollToCommentByAnnotationId: (annotationId: string) => void;

  /**
   * To select comment by annotation id
   * @param annotationId Comment annotation id
   */
  public selectCommentByAnnotationId: (annotationId: string) => void;

  /**
   * To enable showing recording summary in comments
   * @deprecated Use `enableRecordingTranscription` instead
   */
  public enableRecordingSummary: () => void;

  /**
   * To disable showing recording summary in comments
   * @deprecated Use `disableRecordingTranscription` instead
   */
  public disableRecordingSummary: () => void;

  /**
   * To enable recording transcription
   */
  public enableRecordingTranscription: () => void;

  /**
   * To disable recording transcription
   */
  public disableRecordingTranscription: () => void;

  /**
   * To enable recording countdown
   */
  public enableRecordingCountdown: () => void;

  /**
   * To disable recording countdown
   */
  public disableRecordingCountdown: () => void;

  /**
   * To set unread indicator mode
   * @param mode unread indicator mode
   */
  public setUnreadIndicatorMode: (mode: string) => void;

  /**
   * To enable enter key to submit comment
   */
  public enableEnterKeyToSubmit: () => void;

  /**
   * To disable enter key to submit comment
   */
  public disableEnterKeyToSubmit: () => void;

  /**
   * To enable shadow DOM on comment pin
   */
  public enablePinShadowDOM: () => void;

  /**
   * To disable shadow DOM on comment pin
   */
  public disablePinShadowDOM: () => void;

  /**
   * To enable shadow DOM on comment dialog
   */
  public enableDialogShadowDOM: () => void;

  /**
   * To disable shadow DOM on comment dialog
   */
  public disableDialogShadowDOM: () => void;

  /**
   * To enable shadow DOM on comment sidebar
   */
  public enableSidebarShadowDOM: () => void;

  /**
   * To disable shadow DOM on comment sidebar
   */
  public disableSidebarShadowDOM: () => void;

  /**
   * To enable change detection when comment mode is on
   */
  public enableChangeDetectionInCommentMode: () => void;

  /**
   * To disable change detection when comment mode is on
   */
  public disableChangeDetectionInCommentMode: () => void;

  /**
   * To show resolved comments on DOM
   */
  public showResolvedCommentsOnDom: () => void;

  /**
   * To hide resolved comments on DOM
   */
  public hideResolvedCommentsOnDom: () => void;

  /**
   * To set custom reactions
   * @param reactions Reactions to be set
   */
  public setCustomReactions: (reactions: ReactionMap) => void;

  /**
   * To detect comment selection change
   * @returns Observable<CommentSelectionChangeData | null>
   */
  public onCommentSelectionChange: () => Observable<CommentSelectionChangeData | null>;

  /**
   * Subscribe to unread comments count by annotation id
   *
   * Returns Observable<UnreadCommentsCount>.
   */
  public getUnreadCommentCountByAnnotationId: (commentAnnotationId: string) => Observable<UnreadCommentsCount>;
  /**
   * Subscribe to unread comments annotation count on current document
   *
   * Returns Observable<UnreadCommentsCount>.
   */
  public getUnreadCommentAnnotationCountOnCurrentDocument: () => Observable<UnreadCommentsCount>;
  /**
   * Subscribe to unread comments count on current document
   *
   * Returns Observable<UnreadCommentsCount>.
   */
  public getUnreadCommentCountOnCurrentDocument: () => Observable<UnreadCommentsCount>;
  /**
   * Subscribe to unread comments annotation count by location id
   *
   * Returns Observable<UnreadCommentsCount>.
   */
  public getUnreadCommentAnnotationCountByLocationId: (locationId: string) => Observable<UnreadCommentsCount>;
  /**
   * Subscribe to unread comments count by location id
   *
   * Returns Observable<UnreadCommentsCount>.
   */
  public getUnreadCommentCountByLocationId: (locationId: string) => Observable<UnreadCommentsCount>;

  /**
   * To update comment dialog position
   */
  public updateCommentDialogPosition: () => void;

  /**
   * To enable area comment
   */
  public enableAreaComment: () => void;

  /**
   * To disable area comment
   */
  public disableAreaComment: () => void;

  /**
   * To set pin cursor image
   * @param image image base64 string
   */
  public setPinCursorImage: (image: string) => void;

  /**
   * To add manual comment annotation.
   * @param config manual comment annotation config
   */
  public addManualComment: (config: ManualCommentAnnotationConfig) => Promise<any>;

  /**
   * To add custom list dropdown on comment annotation.
   * @param data custom list data
   */
  public createCustomListDataOnAnnotation: (data: CustomAnnotationDropdownData) => void;

  /**
   * To add custom list dropdown on comment.
   * @param data custom list data
   */
  public createCustomListDataOnComment: (data: AutocompleteData) => void;

  /**
   * To exclude annotations by location ids from sidebar
   * @param locationIds Location Ids to be excluded from sidebar
   */
  public excludeLocationIdsFromSidebar: (locationIds: string[]) => void;

  /**
   * To enable bubble on pin
   */
  public enableBubbleOnPin: () => void;

  /**
   * To disable bubble on pin
   */
  public disableBubbleOnPin: () => void;

  /**
   * To enable bubble on pin hover
   */
  public enableBubbleOnPinHover: () => void;

  /**
   * To disable bubble on pin hover
   */
  public disableBubbleOnPinHover: () => void;

  /**
   * To enable multi thread mode
   * @deprecated Use `enableMultiThread` instead
   */
  public enableMultiThreadMode: () => void;

  /**
   * To disable multi thread mode
   * @deprecated Use `disableMultiThread` instead
   */
  public disableMultiThreadMode: () => void;

  /**
   * To enable multi thread mode
   */
  public enableMultiThread: () => void;

  /**
   * To disable multi thread mode
   */
  public disableMultiThread: () => void;

  /**
   * To update context of comment annotation
   * @param annotationId Comment annotation id
   * @param context Context to be updated
   * @param config Update context config
   * @returns Promise<any>
   */
  public updateContext: (annotationId: string, context: any, config?: UpdateContextConfig) => Promise<any>;

  /**
   * Subscribe to selected comments
   * @returns list of selected comments
   */
  public getSelectedComments: () => Observable<CommentAnnotation[]>;

  /**
   * To enable delete reply confirmation
   */
  public enableDeleteReplyConfirmation: () => void;

  /**
   * To disable delete reply confirmation
   */
  public disableDeleteReplyConfirmation: () => void;

  /**
   * Subscribe to copy link
   * @returns link to be copied
   */
  public onCopyLink: () => Observable<string>;

  /**
   * To get comment annotation by id
   * @param annotationId Annotation Id
   * @param documentId Document Id
   * @returns Observable<CommentAnnotation | null>
   */
  public getCommentAnnotationById: (config: { annotationId: string, documentId?: string }) => Observable<CommentAnnotation | null>;

  /**
   * To enable collapsed comment
   */
  public enableCollapsedComments: () => void;

  /**
   * To disable collapsed comment
   */
  public disableCollapsedComments: () => void;

  /**
   * To enable query params comments
   */
  public enableQueryParamsComments: () => void;

  /**
   * To disable query params comments
   */
  public disableQueryParamsComments: () => void;

  /**
   * Subscribe to comment sidebar action button click
   * @returns comment sidebar data
   */
  public onCommentSidebarActionButtonClick: () => Observable<CommentSidebarCustomActionEventData | null>;

  /**
   * To set comment sidebar data
   * @param data comment sidebar data
   */
  public setCommentSidebarData: (data: CommentSidebarData[], options?: CommentSidebarDataOptions) => void;

  /**
   * Subscribe to comment sidebar init
   * @returns comment sidebar data
   */
  public onCommentSidebarInit: () => Observable<CommentSidebarCustomActionEventData | null>;

  /**
   * Subscribe to comment sidebar data
   * @returns comment sidebar data
   */
  public onCommentSidebarData: () => Observable<CommentSidebarCustomActionEventData | null>;

  /**
   * To set comment sidebar default actions config
   * @param data comment sidebar default actions config
   */
  public setCommentSidebarDefaultCustomActions: (data: CommentSidebarCustomActionsState) => void;

  /**
   * To enable comment sidebar custom filter mode
   */
  public enableSidebarCustomActions: () => void;

  /**
   * To disable comment sidebar custom filter mode
   */
  public disableSidebarCustomActions: () => void;

  // /**
  //  * To get comment navigation button click
  //  * @returns comment navigation button click
  //  */
  // public onCommentNavigationButtonClick: () => Observable<any>;

  /**
   * To enable resolve status access admin only
   */
  public enableResolveStatusAccessAdminOnly: () => void;

  /**
   * To disable resolve status access admin only
   */
  public disableResolveStatusAccessAdminOnly: () => void;

  /**
   * To enable seen by users
   */
  public enableSeenByUsers: () => void;

  /**
   * To disable seen by users
   */
  public disableSeenByUsers: () => void;

  /**
   * To enable short user name
   */
  public enableShortUserName: () => void;

  /**
   * To disable short user name
   */
  public disableShortUserName: () => void;

  /**
   * To add comment annotation
   */
  public addCommentAnnotation: (request: AddCommentAnnotationRequest) => Promise<AddCommentAnnotationEvent | null>;

  /**
   * To approve comment annotation
   */
  public approveCommentAnnotation: (request: ApproveCommentAnnotationRequest) => Promise<ApproveCommentAnnotationEvent | null>;

  /**
   * To accept comment annotation
   */
  public acceptCommentAnnotation: (request: AcceptCommentAnnotationRequest) => Promise<AcceptCommentAnnotationEvent | null>;

  /**
   * To reject comment annotation
   */
  public rejectCommentAnnotation: (request: RejectCommentAnnotationRequest) => Promise<RejectCommentAnnotationEvent | null>;

  /**
   * To subscribe comment annotation
   */
  public subscribeCommentAnnotation: (request: SubscribeCommentAnnotationRequest) => Promise<SubscribeCommentAnnotationEvent | null>;

  /**
   * To unsubscribe comment annotation
   */
  public unsubscribeCommentAnnotation: (request: UnsubscribeCommentAnnotationRequest) => Promise<UnsubscribeCommentAnnotationEvent | null>;

  /**
   * To delete comment annotation
   */
  public deleteCommentAnnotation: (request: DeleteCommentAnnotationRequest) => Promise<DeleteCommentAnnotationEvent | null>;

  /**
   * To get comment annotations
   */
  public getCommentAnnotations: (query?: CommentRequestQuery) => Observable<GetCommentAnnotationsResponse>;

  /**
   * To get comment annotations count
   */
  public getCommentAnnotationsCount: (query?: CommentRequestQuery) => Observable<GetCommentAnnotationsCountResponse>;

  /**
   * To assign user to comment annotation
   */
  public assignUser: (request: AssignUserRequest) => Promise<AssignUserEvent | null>;

  /**
   * To update priority
   */
  public updatePriority: (request: UpdatePriorityRequest) => Promise<UpdatePriorityEvent | null>;

  /**
   * To update status
   */
  public updateStatus: (request: UpdateStatusRequest) => Promise<UpdateStatusEvent | null>;

  /**
   * To update access
   */
  public updateAccess: (request: UpdateAccessRequest) => Promise<UpdateAccessEvent | null>;

  /**
   * To resolve comment annotation
   */
  public resolveCommentAnnotation: (request: ResolveCommentAnnotationRequest) => Promise<any>;

  /**
   * To get link
   */
  public getLink: (request: GetLinkRequest) => Promise<GetLinkEvent | null>;

  /**
   * To copy link
   */
  public copyLink: (request: CopyLinkRequest) => Promise<CopyLinkEvent | null>;

  /**
   * To add comment
   */
  public addComment: (request: AddCommentRequest) => Promise<AddCommentEvent | null>;

  /**
   * To update comment
   */
  public updateComment: (request: UpdateCommentRequest) => Promise<UpdateCommentEvent | null>;

  /**
   * To delete comment
   */
  public deleteComment: (request: DeleteCommentRequest) => Promise<DeleteCommentEvent | null>;

  /**
   * To get comment
   */
  public getComment: (request: GetCommentRequest) => Promise<Comment[]>;

  /**
   * To add attachment
   */
  public addAttachment: (request: AddAttachmentRequest) => Promise<AddAttachmentResponse[]>;

  /**
   * To get attachment
   */
  public getAttachment: (request: GetAttachmentRequest) => Promise<Attachment[]>;

  /**
   * To delete attachment
   */
  public deleteAttachment: (request: DeleteAttachmentRequest) => Promise<DeleteAttachmentEvent | null>;

  /**
   * To get recording
   */
  public getRecording: (request: GetRecordingRequest) => Promise<RecordedData[]>;

  /**
   * To delete recording
   */
  public deleteRecording: (request: DeleteRecordingRequest) => Promise<DeleteRecordingEvent | null>;

  /**
   * To add reaction
   */
  public addReaction: (request: AddReactionRequest) => Promise<AddReactionEvent | null>;

  /**
   * To delete reaction
   */
  public deleteReaction: (request: DeleteReactionRequest) => Promise<DeleteReactionEvent | null>;

  /**
   * To toggle reaction
   */
  public toggleReaction: (request: ToggleReactionRequest) => Promise<ToggleReactionEvent | null>;

  /**
   * Subscribe to comment actions
   */
  public on: <T extends keyof CommentEventTypesMap>(action: T) => Observable<CommentEventTypesMap[T]>;

  /**
   * To enable read only
   */
  public enableReadOnly: () => void;

  /**
   * To disable read only
   */
  public disableReadOnly: () => void;

  /**
   * To enable custom autocomplete search
   */
  public enableCustomAutocompleteSearch: () => void;

  /**
   * To disable custom autocomplete search
   */
  public disableCustomAutocompleteSearch: () => void;

  /**
   * To set transform context
   */
  public setTransformContext: (transformContext: TransformContext) => void;

  /**
   * To fetch comment annotations
   */
  public fetchCommentAnnotations: (fetchCommentAnnotationsRequest: FetchCommentAnnotationsRequest) => Promise<FetchCommentAnnotationsResponse>;

  /**
   * To enable svg as img
   */
  public enableSvgAsImg: () => void;

  /**
   * To disable svg as img
   */
  public disableSvgAsImg: () => void;

  /**
   * To enable full expanded
   */
  public enableFullExpanded: () => void;

  /**
   * To disable full expanded
   */
  public disableFullExpanded: () => void;
  constructor();
  /**
   * Subscribe to comments on the current document.
   *
   * Returns Observable<CommentPinAnnotation[] | null>.
   */
  private _getAllCommentAnnotations;

  /**
   * To delete selected comments
   */
  private _deleteSelectedComment;

  /**
  * To enable text comment selection
  */
  private _enableTextComments;

  /**
   * To disable text comment selection
   */
  private _disableTextComments;

  /**
   * To allow text selection in specific elements only
   * @param elementIds Element ids to be allowed for text selection
   */
  private _allowedElementIds;

  /**
   * To allow adding comments in specific elements only
   * @param classNames Element class names to be allowed for adding comments
   */
  private _allowedElementClassNames;

  /**
   * To allow adding comments in specific elements only
   * @param querySelectors Element query selectors to be allowed for adding comments
   */
  private _allowedElementQuerySelectors;

  /**
   * To enable floating comment dialog
   */
  private _enableFloatingCommentDialog;

  /**
   * To disable floating comment dialog
   */
  private _disableFloatingCommentDialog;

  /**
   * To add comments on specific elements
   *
   * @param elementId ID of html element
   */
  private _attachComment;

  /**
   * To open comment sidebar
   */
  private _openCommentSidebar;

  /**
  * To close comment sidebar
  */
  private _closeCommentSidebar;

  /**
   * To toggle comment sidebar
   */
  private _toggleCommentSidebar;

  /**
  * To enable moderator mode
  */
  private _enableModeratorMode;

  /**
   * To disable moderator mode
   */
  private _disableModeratorMode;

  /**
   * To enable stream mode
   */
  private _enableStreamMode;

  /**
   * To disable stream mode
   */
  private _disableStreamMode;

  /**
   * To show sign in button in comments if user is signed out
   */
  private _enableSignInButton;

  /**
   * To hide sign in button in comments if user is signed out
   */
  private _disableSignInButton;

  /**
   * To enable upgrade button in comments when plan is expired
   */
  private _enableUpgradeButton;

  /**
   * To disable upgrade button in comments when plan is expired
   */
  private _disableUpgradeButton;

  /**
   * Subscribe to comment mode change.
   * 
   * Returns Observable<boolean>.
   */
  private _onCommentModeChange;

  /**
   * To enable attachments feature in comments
   */
  private _enableAttachments;

  /**
   * To disable attachments feature in comments
   */
  private _disableAttachments;

  /**
   * Enable device info in comments
   */
  private _enableDeviceInfo;

  /**
   * Disable device info in comments
   */
  private _disableDeviceInfo;

  /**
   * Enable comment mode to add comments.
   */
  private _enableCommentMode;

  /**
   * Disable comment mode.
   */
  private _disableCommentMode;

  /**
   * Enable persistent comment mode.
   */
  private _enablePersistentCommentMode;

  /**
   * Disable persistent comment mode.
   */
  private _disablePersistentCommentMode;

  /**
   * To enable comment number
   */
  private _enableCommentIndex;

  /**
   * To disable comment number
   */
  private _disableCommentIndex;

  /**
   * To enable popover mode
   */
  private _enablePopoverMode;

  /**
   * To disable popover mode
   */
  private _disablePopoverMode;

  /**
   * To show triangle in popover mode
   */
  private _enablePopoverTriangleComponent;

  /**
   * To hide triangle in popover mode
   */
  private _disablePopoverTriangleComponent;

  /**
   * To enable dialog on hover
   */
  private _enableDialogOnHover;

  /**
   * To disable dialog on hover
   */
  private _disableDialogOnHover;

  /**
   * To enable feature to show dialog on target element click
   */
  private _enableDialogOnTargetElementClick;

  /**
   * To disable feature to show dialog on target element click
   */
  private _disableDialogOnTargetElementClick;

  /**
   * To enable feature to set priority on comments
   */
  private _enablePriority;

  /**
   * To disable feature to set priority on comments
   */
  private _disablePriority;

  /**
   * To enable feature to set status on comments
   */
  private _enableStatus;

  /**
   * To disable feature to set status on comments
   */
  private _disableStatus;

  /**
   * To enable feature to show resolve button
   */
  private _enableResolveButton;

  /**
   * To disable feature to show resolve button
   */
  private _disableResolveButton;

  /**
   * To enable feature to show ghost comments
   */
  private _enableGhostComments;

  /**
   * To disable feature to show ghost comments
   */
  private _disableGhostComments;

  /**
   * To enable feature to show ghost comments message in comment dialog and comment sidebar
   */
  private _enableGhostCommentsIndicator;

  /**
   * To disable feature to show ghost comments message in comment dialog and comment sidebar
   */
  private _disableGhostCommentsIndicator;

  /**
   * @description Sets custom status filters
   * @param statuses 
   */
  private _setCustomStatus;

  /**
   * @description Sets custom priority filters
   * @param priorities
   */
  private _setCustomPriority;

  /**
   * @description Sets custom categories filters
   * @param categories
   */
  private _setCustomCategory;

  /**
   * To enable inbox mode
   */
  private _enableInboxMode;

  /**
   * To disable inbox mode
   */
  private _disableInboxMode;

  /**
   * To enable auto categorize feature
   */
  private _enableAutoCategorize;

  /**
   * To disable auto categorize feature
   */
  private _disableAutoCategorize;

  /**
   * To enable dark mode in comments
   */
  private _enableDarkMode;

  /**
   * To disable dark mode in comments
   */
  private _disableDarkMode;

  /**
   * @description Sets the comment context provider
   * @param provider 
   */
  private _setContextProvider;

  /**
   * To enable suggestion mode
   */
  private _enableSuggestionMode;

  /**
   * To disable suggestion mode
   */
  private _disableSuggestionMode;

  /**
   * To enable mobile mode
   */
  private _enableMobileMode;

  /**
   * To disable mobile mode
   */
  private _disableMobileMode;

  /**
   * To enable inline comment mode
   */
  private _enableInlineCommentMode;

  /**
   * To disable inline comment mode
   */
  private _disableInlineCommentMode;

  /**
   * To enable minimap
   */
  private _enableMinimap;

  /**
   * To disable minimap
   */
  private _disableMinimap;

  /**
   * To show comments on DOM
   */
  private _showCommentsOnDom;

  /**
   * To hide comments on DOM
   */
  private _hideCommentsOnDom;

  /**
   * To enable comment tool
   */
  private _enableCommentTool;

  /**
   * To disable comment tool
   */
  private _disableCommentTool;

  /**
   * To set total media length.
   */
  private _setTotalMediaLength;

  /**
   * To get documentId, location and set context data when comment is added.
   */
  private _onCommentAdd;

  /**
   * To get data when comment is updated.
   */
  private _onCommentUpdate;

  /**
   * To add comment on selected text.
   */
  private _addCommentOnSelectedText;

  /**
   * To enable navigation when comment is clicked in sidebar.
   */
  private _enableSidebarUrlNavigation;

  /**
   * To disable navigation when comment is clicked in sidebar.
   */
  private _disableSidebarUrlNavigation;

  /**
   * To enable sidebar button on comment dialog.
   */
  private _enableSidebarButtonOnCommentDialog;

  /**
   * To disable sidebar button on comment dialog.
   */
  private _disableSidebarButtonOnCommentDialog;

  /**
   * To detect click on sidebar button on comment dialog.
   */
  private _onSidebarButtonOnCommentDialogClick;

  /**
   * To enable reactions in comments
   */
  private _enableReactions;

  /**
   * To disable reactions in comments
   */
  private _disableReactions;

  /**
   * To set allowed recordings in comments
   * @param allowedRecordings "all", "none" or "audio", "video", "screen"
   */
  private _setRecordings;

  /**
   * To manually add comment on element.
   * @param data comment data
   */
  private _addCommentOnElement;

  /**
   * To enable private comment mode to add private comments.
   * This mode can be enabled for admin users only.
   */
  private _enablePrivateCommentMode;

  /**
   * To disable private comment mode.
   */
  private _disablePrivateCommentMode;

  /**
   * To enable scroll to comment.
   */
  private _enableScrollToComment;

  /**
   * To disable scroll to comment.
   */
  private _disableScrollToComment;

  /**
   * To enable user mentions in comments
   */
  private _enableUserMentions;

  /**
   * To disable user mentions in comments
   */
  private _disableUserMentions;

  /**
   * To apply filters on comment sidebar.
   * @param filters Filters to be applied on comment sidebar
   */
  private _setCommentSidebarFilters;

  /**
   * To enable comment pin highlighter.
   */
  private _enableCommentPinHighlighter;

  /**
   * To disable comment pin highlighter.
   */
  private _disableCommentPinHighlighter;

  /**
   * To enable deleting comment on backspace.
   */
  private _enableDeleteOnBackspace;

  /**
   * To disable deleting comment on backspace.
   */
  private _disableDeleteOnBackspace;

  /**
   * To enable hotkey.
   */
  private _enableHotkey;

  /**
   * To disable hotkey.
   */
  private _disableHotkey;

  /**
   * To enable option to show device indicator on comment pins for the pin added from different devices.
   */
  private _enableDeviceIndicatorOnCommentPins;

  /**
   * To disable option to show device indicator on comment pins for the pin added from different devices.
   */
  private _disableDeviceIndicatorOnCommentPins;

  /**
   * To get xpath of element by comment annotation id
   * @param annotationId Comment annotation id
   * @returns xpath of element
   */
  private _getElementRefByAnnotationId;

  /**
   * To scroll to comment by annotation id
   * @param annotationId Comment annotation id
   */
  private _scrollToCommentByAnnotationId;

  /**
   * To select comment by annotation id
   * @param annotationId Comment annotation id
   */
  private _selectCommentByAnnotationId;

  /**
   * To enable showing recording summary in comments
   * @deprecated Use `enableRecordingTranscription` instead
   */
  private _enableRecordingSummary;

  /**
   * To disable showing recording summary in comments
   * @deprecated Use `disableRecordingTranscription` instead
   */
  private _disableRecordingSummary;

  /** 
   * To enable recording transcription
   */
  private _enableRecordingTranscription;

  /**
   * To disable recording transcription
   */
  private _disableRecordingTranscription;

  /**
   * To enable recording countdown
   */
  private _enableRecordingCountdown;

  /**
   * To disable recording countdown
   */
  private _disableRecordingCountdown;

  /**
   * To set unread indicator mode
   * @param mode unread indicator mode
   */
  private _setUnreadIndicatorMode;

  /**
   * To enable enter key to submit comment
   */
  private _enableEnterKeyToSubmit;

  /**
   * To disable enter key to submit comment
   */
  private _disableEnterKeyToSubmit;

  /**
   * To enable shadow DOM on comment pin
   */
  private _enablePinShadowDOM;

  /**
   * To disable shadow DOM on comment pin
   */
  private _disablePinShadowDOM;

  /**
   * To enable shadow DOM on comment dialog
   */
  private _enableDialogShadowDOM;

  /**
   * To disable shadow DOM on comment dialog
   */
  private _disableDialogShadowDOM;

  /**
   * To enable shadow DOM on comment sidebar
   */
  private _enableSidebarShadowDOM;

  /**
   * To disable shadow DOM on comment sidebar
   */
  private _disableSidebarShadowDOM;

  /**
   * To enable change detection when comment mode is on
   */
  private _enableChangeDetectionInCommentMode;

  /**
   * To disable change detection when comment mode is on
   */
  private _disableChangeDetectionInCommentMode;

  /**
   * To show resolved comments on DOM
   */
  private _showResolvedCommentsOnDom;

  /**
   * To hide resolved comments on DOM
   */
  private _hideResolvedCommentsOnDom;

  /**
   * To set custom reactions
   * @param reactions Reactions to be set
   */
  private _setCustomReactions;

  /**
   * To detect comment selection change
   * @returns Observable<CommentSelectionChangeData | null>
   */
  private _onCommentSelectionChange;

  /**
   * To get unread comments count by annotation id
   * @returns Observable<UnreadCommentsCount>.
   */
  private _getUnreadCommentCountByAnnotationId;

  /**
   * To get unread comments annotation count on current document
   * @returns Observable<UnreadCommentsCount>.
   */
  private _getUnreadCommentAnnotationCountOnCurrentDocument;

  /**
   * To get unread comments count on current document
   * @returns Observable<UnreadCommentsCount>.
   */
  private _getUnreadCommentCountOnCurrentDocument;

  /**
   * To get unread comments annotation count by location id
   * @returns Observable<UnreadCommentsCount>.
   */
  private _getUnreadCommentAnnotationCountByLocationId;

  /**
   * To get unread comments count by location id
   * @returns Observable<UnreadCommentsCount>.
   */
  private _getUnreadCommentCountByLocationId;

  /**
   * To update comment dialog position
   */
  private _updateCommentDialogPosition;

  /**
   * To enable area comment
   */
  private _enableAreaComment;

  /**
   * To disable area comment
   */
  private _disableAreaComment;

  /**
   * To set pin cursor image
   * @param image image base64 string
   */
  private _setPinCursorImage;

  /**
   * To add manual comment annotation.
   * @param config manual comment annotation config
   */
  private _addManualComment;

  /**
   * To add custom list dropdown on comment annotation.
   * @param data custom list data
   */
  private _createCustomListDataOnAnnotation;

  /**
   * To add custom list dropdown on comment.
   * @param data custom list data
   */
  private _createCustomListDataOnComment;

  /**
   * To exclude annotations by location ids from sidebar
   * @param locationIds Location Ids to be excluded from sidebar
   */
  private _excludeLocationIdsFromSidebar;

  /**
   * To enable bubble on pin
   */
  private _enableBubbleOnPin;

  /**
   * To disable bubble on pin
   */
  private _disableBubbleOnPin;

  /**
   * To enable bubble on pin hover
   */
  private _enableBubbleOnPinHover;

  /**
   * To disable bubble on pin hover
   */
  private _disableBubbleOnPinHover;

  /**
   * To enable multi thread mode
   * @deprecated Use `enableMultiThread` instead
   */
  private _enableMultiThreadMode;

  /**
   * To disable multi thread mode
   * @deprecated Use `disableMultiThread` instead
   */
  private _disableMultiThreadMode;

  /**
   * To enable multi thread mode
   */
  private _enableMultiThread;

  /**
   * To disable multi thread mode
   */
  private _disableMultiThread;

  /**
   * To update context of comment annotation
   * @param annotationId Comment annotation id
   * @param context Context to be updated
   * @param config Update context config
   * @returns Promise<any>
   */
  private _updateContext;

  /**
   * Subscribe to selected comments
   * @returns list of selected comments
   */
  private _getSelectedComments;

  /**
   * To enable delete reply confirmation
   */
  private _enableDeleteReplyConfirmation;

  /**
   * To disable delete reply confirmation
   */
  private _disableDeleteReplyConfirmation;

  /**
   * Subscribe to copy link
   * @returns link to be copied
   */
  private _onCopyLink;

  /**
   * To get comment annotation by id
   * @param config Comment annotation config
   * @returns Observable<CommentAnnotation | null>
   */
  private _getCommentAnnotationById;

  /**
   * To enable collapsed comment
   */
  private _enableCollapsedComments;

  /**
   * To disable collapsed comment
   */
  private _disableCollapsedComments;

  /**
   * To enable query params comments
   */
  private _enableQueryParamsComments;

  /**
   * To disable query params comments
   */
  private _disableQueryParamsComments;

  /** 
   * To enable comment sidebar action button click
   */
  private _onCommentSidebarActionButtonClick;

  /**
   * To set comment sidebar data
   * @param data comment sidebar data
   * @param options options
   */
  private _setCommentSidebarData;

  /**
   * To subscribe to comment sidebar init
   * @returns comment sidebar data
   */
  private _onCommentSidebarInit;

  /**
   * To subscribe to comment sidebar data
   * @returns comment sidebar data
   */
  private _onCommentSidebarData;

  /**
   * To set comment sidebar default actions config
   * @param data comment sidebar default actions config
   */
  private _setCommentSidebarDefaultCustomActions;

  /**
   * To enable comment sidebar custom filter mode
   */
  private _enableSidebarCustomActions;

  /**
   * To disable comment sidebar custom filter mode
   */
  private _disableSidebarCustomActions;

  // /**
  //  * To get comment navigation button click
  //  * @returns comment navigation button click
  //  */
  // private _onCommentNavigationButtonClick;

  /**
   * To enable resolve status access admin only
   */
  private _enableResolveStatusAccessAdminOnly;

  /**
   * To disable resolve status access admin only
   */
  private _disableResolveStatusAccessAdminOnly;

  /**
   * To enable seen by users
   */
  private _enableSeenByUsers;

  /**
   * To disable seen by users
   */
  private _disableSeenByUsers;

  /**
   * To enable short user name
   */
  private _enableShortUserName;

  /**
   * To disable short user name
   */
  private _disableShortUserName;

  // actions

  /**
   * To add comment annotation
   */
  private _addCommentAnnotation;

  /**
   * To approve comment annotation
   */
  private _approveCommentAnnotation;

  /**
   * To accept comment annotation
   */
  private _acceptCommentAnnotation;

  /**
   * To reject comment annotation
   */
  private _rejectCommentAnnotation;

  /**
   * To subscribe to comment annotation
   */
  private _subscribeCommentAnnotation;

  /**
   * To unsubscribe to comment annotation
   */
  private _unsubscribeCommentAnnotation;

  /**
   * To delete comment annotation
   */
  private _deleteCommentAnnotation;

  /**
   * To get comment annotations
   */
  private _getCommentAnnotations;

  /**
   * To get comment annotations count
   */
  private _getCommentAnnotationsCount;

  /**
   * To assign user to comment annotation
   */
  private _assignUser;

  /**
   * To update priority
   */
  private _updatePriority;

  /**
   * To update status
   */
  private _updateStatus;

  /**
   * To update access
   */
  private _updateAccess;

  /**
   * To resolve comment annotation
   */
  private _resolveCommentAnnotation;

  /**
   * To get link
   */
  private _getLink;

  /**
   * To copy link
   */
  private _copyLink;

  /**
   * To add comment
   */
  private _addComment;

  /**
   * To update comment
   */
  private _updateComment;

  /**
   * To delete comment
   */
  private _deleteComment;

  /**
   * To get comment
   */
  private _getComment;

  /**
   * To add attachment
   */
  private _addAttachment;

  /**
   * To delete attachment
   */
  private _deleteAttachment;

  /**
   * To get attachment
   */
  private _getAttachment;

  /**
   * To delete recording
   */
  private _deleteRecording;

  /**
   * To get recording
   */
  private _getRecording;

  /**
   * To add reaction
   */
  private _addReaction;

  /**
   * To delete reaction
   */
  private _deleteReaction;

  /**
   * To toggle reaction
   */
  private _toggleReaction;

  /**
   * Subscribe to comment actions
   */
  private _on;

  /**
   * To enable read only
   */
  private _enableReadOnly;

  /**
   * To disable read only
   */
  private _disableReadOnly;

  /**
   * To enable custom autocomplete search
   */
  private _enableCustomAutocompleteSearch;

  /**
   * To disable custom autocomplete search
   */
  private _disableCustomAutocompleteSearch;

  /**
   * To set transform context
   */
  private _setTransformContext;

  /**
   * To fetch comment annotations
   */
  private _fetchCommentAnnotations;

  /**
   * To enable svg as img
   */
  private _enableSvgAsImg;

  /**
   * To disable svg as img
   */
  private _disableSvgAsImg;

  /**
   * To enable full expanded
   */
  private _enableFullExpanded;

  /**
   * To disable full expanded
   */
  private _disableFullExpanded;
}