> ## Documentation Index
> Fetch the complete documentation index at: https://velt.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Public API Method Reference

> Reference Velt client element APIs and methods used by UI customizations.

> [!NOTE]
>
> This page focuses on what you need while customizing UI. The complete canonical reference is [API methods](https://velt.dev/docs/api-reference/sdk/api/api-methods.md).

> [!NOTE]
>
> This list is generated from the Velt SDK and is complete for what it covers: a name that isn't listed here doesn't exist; don't guess names. Comments and notifications are covered in the most depth; other feature elements are included for completeness.

Complete public API surface for every Velt feature element, as you call them from your app.

## How you obtain an element

Every feature is accessed through its element getter on the Velt client. Get the client once, then ask it for the feature element you need:

```js theme={null}
// Vanilla / HTML SDK
const client = Velt; // the global injected by the SDK script
const commentElement = client.getCommentElement();
commentElement.resolveCommentAnnotation({ annotationId: '123' });

// React SDK exposes the same elements via hooks (e.g. useCommentUtils()),
// but the underlying method names/signatures below are identical.
```

The getter for each feature is listed in its section heading (e.g. `client.getCommentElement()`). `Velt.getXElement()` and `client.getXElement()` are equivalent.

> Signatures are the public API of each feature element (verbatim method names and parameter types). A few `any` return types are intentional on the public surface.

***

## Feature elements

### Comments: `client.getCommentElement()`

Class: `CommentElement` (extends `InjectorElement`).

| Method | Returns | Description |
| - | - | - |
| `getAllCommentAnnotations(documentId?: string, location?: Location)` | `Observable<CommentAnnotation[] \| null>` | Subscribe to comments on the current document. |
| `deleteSelectedComment()` | `Promise<any>` | Delete the currently selected comment. |
| `enableTextComments()` | `any` | Enable text comment selection. |
| `disableTextComments()` | `any` | Disable text comment selection. |
| `allowedElementIds(elementIds: string[])` | `any` | Allow text selection in specific elements by id only. |
| `allowedElementClassNames(classNames: string[])` | `any` | Allow text selection in specific elements by class name only. |
| `allowedElementQuerySelectors(querySelectors: string[])` | `any` | Allow text selection in specific elements by query selector only. |
| `enableFloatingCommentDialog()` | `any` | Enable floating comment dialog. |
| `disableFloatingCommentDialog()` | `any` | Disable floating comments (enabled by default). |
| `attachComment(elementId: string)` | `any` | Attach comments to a specific html element by id. |
| `openCommentSidebar()` | `any` | Open the comment sidebar. |
| `closeCommentSidebar()` | `any` | Close the comment sidebar. |
| `toggleCommentSidebar()` | `any` | Toggle the comment sidebar. |
| `enableModeratorMode()` | `any` | Enable moderator mode. |
| `disableModeratorMode()` | `any` | Disable moderator mode. |
| `enableStreamMode()` | `any` | Enable stream mode. |
| `disableStreamMode()` | `any` | Disable stream mode. |
| `enableSignInButton()` | `any` | Show sign in button in comments if user is signed out. |
| `disableSignInButton()` | `any` | Hide sign in button in comments if user is signed out. |
| `enableUpgradeButton()` | `any` | Show upgrade button in comments when plan is expired. |
| `disableUpgradeButton()` | `any` | Hide upgrade button in comments when plan is expired. |
| `onCommentModeChange()` | `Observable<boolean>` | Subscribe to add-comment-mode change. |
| `enableAttachments()` | `any` | Enable adding attachments in comments. |
| `disableAttachments()` | `any` | Disable adding attachments in comments. |
| `enableAttachmentDownload()` | `any` | Enable downloading comment attachments. |
| `disableAttachmentDownload()` | `any` | Disable downloading comment attachments. |
| `isUserGlobalContact()` | `Observable<boolean>` | Get whether the user is part of the global contact list. |
| `enableDeviceInfo()` | `any` | Show device/screen-size info in comments. |
| `disableDeviceInfo()` | `any` | Hide device/screen-size info in comments. |
| `enableCommentMode()` | `any` | Enable comment mode to add comments. |
| `disableCommentMode()` | `any` | Disable comment mode. |
| `enablePersistentCommentMode()` | `any` | Enable persistent comment mode. |
| `disablePersistentCommentMode()` | `any` | Disable persistent comment mode. |
| `enableCommentIndex()` | `any` | Show comment number/index. |
| `disableCommentIndex()` | `any` | Hide comment number/index. |
| `enablePopoverMode()` | `any` | Enable popover mode. |
| `disablePopoverMode()` | `any` | Disable popover mode. |
| `enablePopoverTriangleComponent()` | `any` | Enable the popover triangle component. |
| `disablePopoverTriangleComponent()` | `any` | Disable the popover triangle component. |
| `enableDialogOnHover()` | `any` | Open the comment dialog on hover. |
| `disableDialogOnHover()` | `any` | Disable opening the comment dialog on hover. |
| `enableDialogOnTargetElementClick()` | `any` | Open the comment dialog on target element click. |
| `disableDialogOnTargetElementClick()` | `any` | Disable opening the comment dialog on target element click. |
| `enablePriority()` | `any` | Enable comment priority. |
| `disablePriority()` | `any` | Disable comment priority. |
| `enableStatus()` | `any` | Enable comment status. |
| `disableStatus()` | `any` | Disable comment status. |
| `enableVisibilityOptions()` | `any` | Enable comment visibility options. |
| `disableVisibilityOptions()` | `any` | Disable comment visibility options. |
| `enableResolveButton()` | `any` | Enable the resolve button. |
| `disableResolveButton()` | `any` | Disable the resolve button. |
| `enableGhostComments()` | `any` | Enable ghost comments. |
| `disableGhostComments()` | `any` | Disable ghost comments. |
| `enableGhostCommentsIndicator()` | `any` | Enable the ghost comments indicator. |
| `disableGhostCommentsIndicator()` | `any` | Disable the ghost comments indicator. |
| `setCustomStatus(statuses: CustomStatus[])` | `void` | Set custom comment statuses. |
| `setCustomPriority(priorities: CustomPriority[])` | `void` | Set custom comment priorities. |
| `setCustomCategory(categories: CustomCategory[])` | `void` | Set custom comment categories. |
| `enableInboxMode()` | `any` | Enable inbox mode. |
| `disableInboxMode()` | `any` | Disable inbox mode. |
| `enableAutoCategorize()` | `any` | Enable auto-categorize. |
| `disableAutoCategorize()` | `any` | Disable auto-categorize. |
| `enableDarkMode()` | `any` | Enable dark mode. |
| `disableDarkMode()` | `any` | Disable dark mode. |
| `setContextProvider(provider: CommentContextProvider \| null)` | `void` | Set the comment context provider. |
| `enableSuggestionMode()` | `any` | Enable suggestion mode. |
| `disableSuggestionMode()` | `any` | Disable suggestion mode. |
| `enableMobileMode()` | `any` | Enable mobile mode. |
| `disableMobileMode()` | `any` | Disable mobile mode. |
| `enableInlineCommentMode()` | `any` | Enable inline comment mode. |
| `disableInlineCommentMode()` | `any` | Disable inline comment mode. |
| `enableMinimap()` | `any` | Enable the minimap. |
| `disableMinimap()` | `any` | Disable the minimap. |
| `showCommentsOnDom()` | `any` | Show comment pins on the DOM. |
| `hideCommentsOnDom()` | `any` | Hide comment pins on the DOM. |
| `enableCommentTool()` | `any` | Enable the comment tool. |
| `disableCommentTool()` | `any` | Disable the comment tool. |
| `setTotalMediaLength(totalMediaLength: number)` | `void` | Set the total media length (for media comments). |
| `onCommentAdd()` | `Observable<CommentAddEventData>` | *(legacy: use the `AddCommentAnnotation` event instead)* Subscribe to comment-add events. |
| `onCommentUpdate()` | `Observable<CommentUpdateEventData>` | *(legacy: use action-specific events instead)* Subscribe to comment-update events. |
| `addCommentOnSelectedText()` | `any` | Add a comment on the currently selected text. |
| `enableSidebarUrlNavigation()` | `void` | Enable sidebar URL navigation. |
| `disableSidebarUrlNavigation()` | `void` | Disable sidebar URL navigation. |
| `setDStrategy(strategy: DetectionStrategy)` | `void` | Set the detection strategy. |
| `enableSidebarButtonOnCommentDialog()` | `void` | Show the sidebar button on the comment dialog. |
| `disableSidebarButtonOnCommentDialog()` | `void` | Hide the sidebar button on the comment dialog. |
| `onSidebarButtonOnCommentDialogClick()` | `Observable<any>` | Subscribe to clicks on the sidebar button in the comment dialog. |
| `enableReactions()` | `void` | Enable reactions. |
| `disableReactions()` | `void` | Disable reactions. |
| `enableAnonymousEmail()` | `void` | Enable anonymous email. |
| `disableAnonymousEmail()` | `void` | Disable anonymous email. |
| `setRecordings(allowedRecordings: string \| string[])` | `void` | Set allowed recordings. |
| `addCommentOnElement(data: CommentOnElementConfig)` | `void` | Add a comment on a specific element. |
| `enablePrivateCommentMode()` | `void` | *(deprecated)* Enable private comment mode. |
| `disablePrivateCommentMode()` | `void` | *(deprecated)* Disable private comment mode. |
| `enablePrivateMode(config: PrivateModeConfig)` | `void` | Enable private mode with config. |
| `disablePrivateMode()` | `void` | Disable private mode. |
| `enableScrollToComment()` | `void` | Enable scroll-to-comment. |
| `disableScrollToComment()` | `void` | Disable scroll-to-comment. |
| `enableUserMentions()` | `void` | Enable user mentions. |
| `disableUserMentions()` | `void` | Disable user mentions. |
| `setCommentSidebarFilters(filters: CommentSidebarFilters)` | `void` | Set comment sidebar filters. |
| `setSystemFiltersOperator(operator: CommentSidebarSystemFiltersOperator)` | `void` | Set the system filters operator. |
| `enableCommentPinHighlighter()` | `void` | Enable the comment pin highlighter. |
| `disableCommentPinHighlighter()` | `void` | Disable the comment pin highlighter. |
| `enableDeleteOnBackspace()` | `void` | Enable delete on backspace. |
| `disableDeleteOnBackspace()` | `void` | Disable delete on backspace. |
| `enableHotkey()` | `void` | Enable hotkey. |
| `disableHotkey()` | `void` | Disable hotkey. |
| `enableDeviceIndicatorOnCommentPins()` | `void` | Enable device indicator on comment pins. |
| `disableDeviceIndicatorOnCommentPins()` | `void` | Disable device indicator on comment pins. |
| `getElementRefByAnnotationId(annotationId: string)` | `{ xpath: string } \| undefined` | Get an element reference (xpath) by annotation id. |
| `scrollToCommentByAnnotationId(annotationId: string)` | `void` | Scroll to a comment by annotation id. |
| `selectCommentByAnnotationId(annotationId?: string)` | `void` | Select a comment by annotation id. |
| `enableRecordingSummary()` | `void` | *(deprecated: use `enableRecordingTranscription`)* Enable recording summary. |
| `disableRecordingSummary()` | `void` | *(deprecated: use `disableRecordingTranscription`)* Disable recording summary. |
| `enableRecordingTranscription()` | `void` | Enable recording transcription. |
| `disableRecordingTranscription()` | `void` | Disable recording transcription. |
| `enableRecordingCountdown()` | `void` | Enable recording countdown. |
| `disableRecordingCountdown()` | `void` | Disable recording countdown. |
| `setUnreadIndicatorMode(mode: UnreadIndicatorMode)` | `void` | Set the unread indicator mode. |
| `enableEnterKeyToSubmit()` | `void` | Enable Enter key to submit. |
| `disableEnterKeyToSubmit()` | `void` | Disable Enter key to submit. |
| `enablePinShadowDOM()` | `void` | Enable Shadow DOM for pins. |
| `disablePinShadowDOM()` | `void` | Disable Shadow DOM for pins. |
| `enableDialogShadowDOM()` | `void` | Enable Shadow DOM for the dialog. |
| `disableDialogShadowDOM()` | `void` | Disable Shadow DOM for the dialog. |
| `enableSidebarShadowDOM()` | `void` | Enable Shadow DOM for the sidebar. |
| `disableSidebarShadowDOM()` | `void` | Disable Shadow DOM for the sidebar. |
| `enableChangeDetectionInCommentMode()` | `void` | Enable change detection in comment mode. |
| `disableChangeDetectionInCommentMode()` | `void` | Disable change detection in comment mode. |
| `showResolvedCommentsOnDom()` | `void` | Show resolved comments on the DOM. |
| `hideResolvedCommentsOnDom()` | `void` | Hide resolved comments on the DOM. |
| `setCustomReactions(reactions: ReactionMap)` | `void` | Set custom reactions. |
| `onCommentSelectionChange()` | `Observable<CommentSelectionChangeData \| null>` | Subscribe to comment selection changes. |
| `getUnreadCommentCountByAnnotationId(commentAnnotationId: string)` | `Observable<UnreadCommentsCount>` | Get unread comment count by annotation id. |
| `getUnreadCommentAnnotationCountOnCurrentDocument()` | `Observable<UnreadCommentsCount>` | Get unread comment-annotation count on the current document. |
| `getUnreadCommentCountOnCurrentDocument()` | `Observable<UnreadCommentsCount>` | Get unread comment count on the current document. |
| `getUnreadCommentAnnotationCountByLocationId(locationId: string)` | `Observable<UnreadCommentsCount>` | Get unread comment-annotation count by location id. |
| `getUnreadCommentCountByLocationId(locationId: string)` | `Observable<UnreadCommentsCount>` | Get unread comment count by location id. |
| `updateCommentDialogPosition()` | `void` | Update the comment dialog position. |
| `enableAreaComment()` | `void` | Enable area comments. |
| `disableAreaComment()` | `void` | Disable area comments. |
| `setPinCursorImage(image: string)` | `void` | Set the pin cursor image. |
| `addManualComment(config: ManualCommentAnnotationConfig)` | `Promise<any>` | Add a manual comment annotation. |
| `createCustomListDataOnAnnotation(data: CustomAnnotationDropdownData)` | `void` | Create custom list/dropdown data on an annotation. |
| `createCustomListDataOnComment(data: AutocompleteData)` | `void` | Create custom list/autocomplete data on a comment. |
| `excludeLocationIdsFromSidebar(locationIds: string[])` | `void` | Exclude location ids from the sidebar. |
| `enableBubbleOnPin()` | `void` | Enable bubble on pin. |
| `disableBubbleOnPin()` | `void` | Disable bubble on pin. |
| `enableBubbleOnPinHover()` | `void` | Enable bubble on pin hover. |
| `disableBubbleOnPinHover()` | `void` | Disable bubble on pin hover. |
| `enablePinDrag()` | `void` | Enable pin drag. |
| `disablePinDrag()` | `void` | Disable pin drag. |
| `enableMultiThreadMode()` | `void` | Enable multi-thread mode. |
| `disableMultiThreadMode()` | `void` | Disable multi-thread mode. |
| `enableGroupMultipleMatch()` | `void` | *(deprecated: use `enableGroupMatchedComments`)* Enable grouping of multiple matches. |
| `disableGroupMultipleMatch()` | `void` | *(deprecated: use `disableGroupMatchedComments`)* Disable grouping of multiple matches. |
| `enableGroupMatchedComments()` | `void` | Enable grouping of matched comments. |
| `disableGroupMatchedComments()` | `void` | Disable grouping of matched comments. |
| `enableMultiThread()` | `void` | Enable multi-thread. |
| `disableMultiThread()` | `void` | Disable multi-thread. |
| `updateContext(annotationId: string, context: any, config?: UpdateContextConfig)` | `Promise<any>` | Update the context of an annotation. |
| `updateVisibility(visibility: CommentVisibilityConfig)` | `Promise<any>` | Update comment visibility. |
| `getSelectedComments()` | `Observable<CommentAnnotation[]>` | Get the currently selected comments. |
| `enableDeleteReplyConfirmation()` | `void` | Enable delete-reply confirmation. |
| `disableDeleteReplyConfirmation()` | `void` | Disable delete-reply confirmation. |
| `onCopyLink()` | `Observable<string>` | Subscribe to copy-link events. |
| `getCommentAnnotationById(config: { annotationId: string, documentId?: string })` | `Observable<CommentAnnotation \| null>` | Get a comment annotation by id. |
| `enableCollapsedComments()` | `void` | Enable collapsed comments. |
| `disableCollapsedComments()` | `void` | Disable collapsed comments. |
| `enableCollapsedRepliesPreview()` | `void` | Enable collapsed replies preview. |
| `disableCollapsedRepliesPreview()` | `void` | Disable collapsed replies preview. |
| `onCommentSidebarActionButtonClick()` | `Observable<CommentSidebarCustomActionEventData \| null>` | Subscribe to comment sidebar action-button clicks. |
| `setCommentSidebarData(data: CommentSidebarData[], options?: CommentSidebarDataOptions)` | `void` | Set comment sidebar data. |
| `onCommentSidebarInit()` | `Observable<CommentSidebarCustomActionEventData \| null>` | Subscribe to comment sidebar init. |
| `onCommentSidebarData()` | `Observable<CommentSidebarCustomActionEventData \| null>` | Subscribe to comment sidebar data. |
| `setCommentSidebarDefaultCustomActions(data: CommentSidebarCustomActionsState)` | `void` | Set default custom actions for the comment sidebar. |
| `enableSidebarCustomActions()` | `void` | Enable sidebar custom actions. |
| `disableSidebarCustomActions()` | `void` | Disable sidebar custom actions. |
| `enableQueryParamsComments()` | `void` | Enable query-params comments. |
| `disableQueryParamsComments()` | `void` | Disable query-params comments. |
| `enableResolveStatusAccessAdminOnly()` | `void` | Restrict resolve-status access to admins only. |
| `disableResolveStatusAccessAdminOnly()` | `void` | Remove the admin-only restriction on resolve-status access. |
| `enableLinkCallback()` | `void` | Enable link callback. |
| `disableLinkCallback()` | `void` | Disable link callback. |
| `enableSeenByUsers()` | `void` | Enable seen-by users. |
| `disableSeenByUsers()` | `void` | Disable seen-by users. |
| `enableShortUserName()` | `void` | Enable short user name. |
| `disableShortUserName()` | `void` | Disable short user name. |
| `enableReadOnly()` | `void` | Enable read-only mode. |
| `disableReadOnly()` | `void` | Disable read-only mode. |
| `setAssignToType(config: AssignToConfig)` | `void` | Set the assign-to type. |
| `enableContextInPageModeComposer()` | `void` | Enable context in the page-mode composer. |
| `disableContextInPageModeComposer()` | `void` | Disable context in the page-mode composer. |
| `clearPageModeComposerContext()` | `void` | Clear the page-mode composer context. |
| `setContextInPageModeComposer(config: PageModeComposerConfig \| null)` | `void` | Set context in the page-mode composer. |
| `focusPageModeComposer()` | `void` | Focus the page-mode composer. |
| `addCommentAnnotation(addCommentAnnotationRequest: AddCommentAnnotationRequest)` | `Promise<AddCommentAnnotationEvent \| null>` | Add a comment annotation. |
| `approveCommentAnnotation(approveCommentAnnotationRequest: ApproveCommentAnnotationRequest)` | `Promise<ApproveCommentAnnotationEvent \| null>` | Approve a comment annotation. |
| `subscribeCommentAnnotation(subscribeCommentAnnotationRequest: SubscribeCommentAnnotationRequest)` | `Promise<SubscribeCommentAnnotationEvent \| null>` | Subscribe to a comment annotation. |
| `unsubscribeCommentAnnotation(unsubscribeCommentAnnotationRequest: UnsubscribeCommentAnnotationRequest)` | `Promise<UnsubscribeCommentAnnotationEvent \| null>` | Unsubscribe from a comment annotation. |
| `deleteCommentAnnotation(deleteCommentAnnotationRequest: DeleteCommentAnnotationRequest)` | `Promise<DeleteCommentAnnotationEvent \| null>` | Delete a comment annotation. |
| `getCommentAnnotations(query?: CommentRequestQuery)` | `Observable<GetCommentAnnotationsResponse>` | Get comment annotations matching a query. |
| `getCommentAnnotationsCount(query?: CommentRequestQuery)` | `Observable<GetCommentAnnotationsCountResponse>` | Get the count of comment annotations matching a query. |
| `assignUser(assignUserRequest: AssignUserRequest)` | `Promise<AssignUserEvent \| null>` | Assign a user to a comment. |
| `updatePriority(updatePriorityRequest: UpdatePriorityRequest)` | `Promise<UpdatePriorityEvent \| null>` | Update comment priority. |
| `updateStatus(updateStatusRequest: UpdateStatusRequest)` | `Promise<UpdateStatusEvent \| null>` | Update comment status. |
| `updateAccess(updateAccessRequest: UpdateAccessRequest)` | `Promise<UpdateAccessEvent \| null>` | *(deprecated)* Update comment access. |
| `resolveCommentAnnotation(resolveCommentAnnotationRequest: ResolveCommentAnnotationRequest)` | `Promise<any>` | Resolve a comment annotation. |
| `getLink(getLinkRequest: GetLinkRequest)` | `Promise<GetLinkResponse \| null>` | Get a link to a comment. |
| `copyLink(copyLinkRequest: CopyLinkRequest)` | `Promise<CopyLinkEvent \| null>` | Copy a link to a comment. |
| `addComment(addCommentRequest: AddCommentRequest)` | `Promise<AddCommentEvent \| null>` | Add a comment (reply) to an annotation. |
| `updateComment(updateCommentRequest: UpdateCommentRequest)` | `Promise<UpdateCommentEvent \| null>` | Update a comment. |
| `deleteComment(deleteCommentRequest: DeleteCommentRequest)` | `Promise<DeleteCommentEvent \| null>` | Delete a comment. |
| `getComment(getCommentRequest: GetCommentRequest)` | `Promise<Comment[]>` | Get comments. |
| `addAttachment(addAttachmentRequest: AddAttachmentRequest)` | `Promise<AddAttachmentResponse[]>` | Add an attachment. |
| `deleteAttachment(deleteAttachmentRequest: DeleteAttachmentRequest)` | `Promise<DeleteAttachmentEvent \| null>` | Delete an attachment. |
| `getAttachment(getAttachmentRequest: GetAttachmentRequest)` | `Promise<Attachment[]>` | Get attachments. |
| `deleteRecording(deleteRecordingRequest: DeleteRecordingRequest)` | `Promise<DeleteRecordingEvent \| null>` | Delete a recording. |
| `getRecording(getRecordingRequest: GetRecordingRequest)` | `Promise<RecordedData[]>` | Get recordings. |
| `addReaction(addReactionRequest: AddReactionRequest)` | `Promise<AddReactionEvent \| null>` | Add a reaction. |
| `deleteReaction(deleteReactionRequest: DeleteReactionRequest)` | `Promise<DeleteReactionEvent \| null>` | Delete a reaction. |
| `toggleReaction(toggleReactionRequest: ToggleReactionRequest)` | `Promise<ToggleReactionEvent \| null>` | Toggle a reaction. |
| `enableCustomAutocompleteSearch()` | `void` | Enable custom autocomplete search. |
| `disableCustomAutocompleteSearch()` | `void` | Disable custom autocomplete search. |
| `fetchCommentAnnotations(fetchCommentAnnotationsRequest: FetchCommentAnnotationsRequest)` | `Promise<FetchCommentAnnotationsResponse>` | Fetch comment annotations. |
| `setTransformContext(transformContext: TransformContext \| null)` | `void` | Set the transform context. |
| `enableSvgAsImg()` | `void` | Render SVGs as images. |
| `disableSvgAsImg()` | `void` | Stop rendering SVGs as images. |
| `enableFullExpanded()` | `void` | Enable full-expanded mode. |
| `disableFullExpanded()` | `void` | Disable full-expanded mode. |
| `enableCommentToNearestAllowedElement()` | `void` | Enable commenting on the nearest allowed element. |
| `disableCommentToNearestAllowedElement()` | `void` | Disable commenting on the nearest allowed element. |
| `enableDraftMode()` | `void` | Enable draft mode. |
| `disableDraftMode()` | `void` | Disable draft mode. |
| `enableDraftConfirmation()` | `void` | Enable the Keep Draft / Delete Draft confirmation popup. |
| `disableDraftConfirmation()` | `void` | Disable the draft confirmation popup. |
| `enableLazyLoadResolvedComments()` | `void` | Enable lazy loading of resolved comments. |
| `disableLazyLoadResolvedComments()` | `void` | Disable lazy loading of resolved comments. |
| `enableFilterCommentsOnDom()` | `void` | Enable filtering comments on the DOM. |
| `disableFilterCommentsOnDom()` | `void` | Disable filtering comments on the DOM. |
| `enableReplyAvatars()` | `void` | Enable reply avatars. |
| `disableReplyAvatars()` | `void` | Disable reply avatars. |
| `setMaxReplyAvatars(maxReplyAvatars: number)` | `void` | Set the maximum number of reply avatars. |
| `setSidebarButtonCountType(type: SidebarButtonCountType)` | `void` | Set the sidebar button count type. |
| `enableFilterGhostCommentsInSidebar()` | `void` | Enable filtering ghost comments in the sidebar. |
| `disableFilterGhostCommentsInSidebar()` | `void` | Disable filtering ghost comments in the sidebar. |
| `enableFullScreenInSidebar()` | `void` | Enable full-screen in the sidebar. |
| `disableFullScreenInSidebar()` | `void` | Disable full-screen in the sidebar. |
| `setComposerFileAttachments(data: UploadFileData)` | `void` | Set composer file attachments. |
| `setAllowedFileTypes(allowedFileTypes: string[])` | `void` | Set allowed file types for attachments. |
| `enableForceCloseAllOnEsc()` | `void` | Enable force-close-all on Esc. |
| `disableForceCloseAllOnEsc()` | `void` | Disable force-close-all on Esc. |
| `markAsRead(annotationId: string)` | `Promise<void>` | Mark an annotation as read. |
| `markAsUnread(annotationId: string)` | `Promise<void>` | Mark an annotation as unread. |
| `enableScreenshot()` | `void` | Enable screenshot. |
| `disableScreenshot()` | `void` | Disable screenshot. |
| `enablePaginatedContactList()` | `void` | Enable paginated contact list. |
| `disablePaginatedContactList()` | `void` | Disable paginated contact list. |
| `enableFormatOptions()` | `void` | Enable text format options. |
| `disableFormatOptions()` | `void` | Disable text format options. |
| `setFormatConfig(config: FormatConfig)` | `void` | Set the text format config. |
| `submitComment(request: SubmitCommentRequest)` | `void` | Programmatically trigger comment submission for the composer with the given `targetComposerElementId`. |
| `clearComposer(request: ClearComposerRequest)` | `void` | Programmatically clear the composer state for the given `targetComposerElementId`. |
| `on<T extends keyof CommentEventTypesMap>(action: T)` | `Observable<CommentEventTypesMap[T]>` | Subscribe to a typed comment event by action name. |
| `getComposerData(request: GetComposerDataRequest)` | `ComposerTextChangeEvent \| null` | One-time fetch of the current composer data for a given `targetComposerElementId` (same data as the `COMPOSER_TEXT_CHANGE` event), or null if not found. |

> Note: `onCommentNavigationButtonClick` exists in source but is commented out and not part of the public surface.

***

### Cursor: `client.getCursorElement()`

Class: `CursorElement`.

| Method | Returns | Description |
| - | - | - |
| `getLiveCursorsOnCurrentDocument()` | `Observable<CursorUser[] \| null>` | *(deprecated: use `getOnlineUsersOnCurrentDocument`)* Subscribe to cursors of all online users (active or inactive) on the current document. |
| `getOnlineUsersOnCurrentDocument()` | `Observable<CursorUser[] \| null>` | Subscribe to cursors of all online users (active or inactive) on the current document. |
| `setInactivityTime(time: number)` | `void` | Set inactivity time in milliseconds (default 2 minutes). |
| `allowedElementIds(elementIds: string[])` | `any` | Allow cursors only in specific elements by id. |

***

### Presence: `client.getPresenceElement()`

Class: `PresenceElement`.

| Method | Returns | Description |
| - | - | - |
| `enableFlockMode(options?: FlockOptions)` | `any` | Enable flock mode globally. |
| `disableFlockMode()` | `any` | Disable flock mode globally. |
| `startFollowingUser(userId: string, name: string)` | `void` | Start/join a flock session via leader user ID. *(Impl `_startFollowingUser(externalId)` joins via the leader's external/user ID.)* |
| `stopFollowingUser()` | `void` | Exit the flock session. |
| `getOnlineUsersOnCurrentDocument()` | `Observable<PresenceUser[] \| null>` | *(deprecated: use `getData`)* Subscribe to all online users (active or inactive) on the current document. |
| `setInactivityTime(time: number)` | `void` | Set inactivity time in milliseconds (default 5 minutes). |
| `enableSelf()` | `void` | Add self to the presence list. |
| `disableSelf()` | `void` | Remove self from the presence list. |
| `getData(query?: PresenceRequestQuery)` | `Observable<GetPresenceDataResponse>` | Get presence data (normalizes `documentId`/`organizationId` in the query). |
| `on<T extends keyof PresenceEventTypesMap>(action: T)` | `Observable<PresenceEventTypesMap[T]>` | Subscribe to presence actions/events. |
| `addUser(request: { user: Partial<PresenceUser>, localOnly?: boolean })` | `void` | Add a custom user (e.g. an AI agent) to the presence list. `localOnly` (default false) adds locally only, not persisted. |
| `removeUser(request: { user: Partial<PresenceUser>, localOnly?: boolean })` | `void` | Remove a previously added custom user. `localOnly` (default false) removes locally only. |

***

### Huddle: `client.getHuddleElement()`

Class: `HuddleElement`.

| Method | Returns | Description |
| - | - | - |
| `enableCursorMode()` | `void` | Enable huddle bubble on cursor. |
| `disableCursorMode()` | `void` | Disable huddle bubble on cursor. |
| `enableChat()` | `void` | Enable chat. |
| `disableChat()` | `void` | Disable chat. |
| `enableFlockModeOnAvatarClick()` | `void` | Enable flock mode on avatar click. |
| `disableFlockModeOnAvatarClick()` | `void` | Disable flock mode on avatar click. |

***

### Recorder: `client.getRecorderElement()`

Class: `RecorderElement`.

| Method | Returns | Description |
| - | - | - |
| `initRecording(type: string, panelId?: string)` | `any` | Start recording by type and optional panelId. |
| `onRecordedData()` | `Observable<RecordedData \| null>` | *(deprecated: use `on('recordingDone')`)* Subscribe to recorded data when recording completes. |
| `enableDarkMode()` | `any` | Enable dark mode. |
| `disableDarkMode()` | `any` | Disable dark mode. |
| `enableRecordingCountdown()` | `void` | Enable recording countdown. |
| `disableRecordingCountdown()` | `void` | Disable recording countdown. |
| `getRecordingDataByRecorderId(recorderId: string)` | `Observable<RecorderData \| null>` | *(deprecated: use `getRecordingData()`)* Get recording data by recorder id. |
| `enableRecordingTranscription()` | `void` | Enable recording transcription. |
| `disableRecordingTranscription()` | `void` | Disable recording transcription. |
| `getRecordingData(query: RecorderRequestQuery)` | `Promise<GetRecordingDataResponse>` | *(deprecated: use `fetchRecordings()`)* Get recording data by recorder ids. |
| `enableVideoEditor()` | `void` | Enable video editor. |
| `disableVideoEditor()` | `void` | Disable video editor. |
| `getRecordings(query?: RecorderRequestQuery)` | `Observable<GetRecordingsResponse[]>` | Get recordings by recorder ids (observable). |
| `fetchRecordings(query?: RecorderRequestQuery)` | `Promise<GetRecordingsResponse[]>` | Fetch recordings by recorder ids (promise). |
| `deleteRecordings(query?: RecorderRequestQuery)` | `Promise<DeleteRecordingsResponse[]>` | Delete recordings. |
| `on<T extends keyof RecorderEventTypesMap>(action: T)` | `Observable<RecorderEventTypesMap[T]>` | Subscribe to recorder actions/events. |
| `setRecordingQualityConstraints(constraints: RecorderQualityConstraints)` | `void` | Set recording quality constraints. |
| `setRecordingEncodingOptions(options: RecorderEncodingOptions)` | `void` | Set recording encoding options. |
| `downloadLatestVideo(recorderId: string)` | `Promise<boolean>` | Download the latest recorded video. |
| `enableRecordingMic()` | `void` | Enable recording mic. |
| `disableRecordingMic()` | `void` | Disable recording mic. |
| `enableOnboardingTooltip()` | `void` | Enable onboarding tooltip. |
| `disableOnboardingTooltip()` | `void` | Disable onboarding tooltip. |
| `enableRetakeOnVideoEditor()` | `void` | Enable retake on video editor. |
| `disableRetakeOnVideoEditor()` | `void` | Disable retake on video editor. |
| `askDevicePermission(options: RecorderDevicePermissionOptions)` | `void` | Ask for device permission. |
| `setMaxLength(seconds: number)` | `void` | Set max recording length in seconds. |
| `openPictureInPicture()` | `Promise<void>` | Open Picture-in-Picture mode for the video. |
| `exitPictureInPicture()` | `Promise<void>` | Exit Picture-in-Picture mode. |
| `requestScreenPermission()` | `Promise<MediaStream \| null>` | Request screen-sharing permission and get the screen stream. |
| `enablePictureInPicture()` | `void` | Enable Picture-in-Picture. |
| `disablePictureInPicture()` | `void` | Disable Picture-in-Picture. |
| `enablePlaybackOnPreviewClick()` | `void` | Enable playback on preview click. |
| `disablePlaybackOnPreviewClick()` | `void` | Disable playback on preview click. |

***

### Notifications: `client.getNotificationElement()`

Class: `NotificationElement`.

| Method | Returns | Description |
| - | - | - |
| `openHistoryPanel()` | `any` | Open the notification history panel. |
| `closeHistoryPanel()` | `any` | Close the notification history panel. |
| `toggleHistoryPanel()` | `any` | Toggle the notification history panel. |
| `getNotificationsData(query?: GetNotificationsDataQuery)` | `Observable<Notification[] \| null>` | Get notifications data. |
| `setMaxDays(days: number)` | `void` | Set max days for notification history. |
| `setTabConfig(tabConfig: NotificationTabConfig)` | `void` | Set tab configuration. |
| `enableReadNotificationsOnForYouTab()` | `void` | Enable read notifications on the For You tab. |
| `disableReadNotificationsOnForYouTab()` | `void` | Disable read notifications on the For You tab. |
| `setAllNotificationsAsRead(config?: { tabId: NotificationTabId })` | `void` | Mark all notifications as read (optionally scoped to a tab). |
| `getUnreadNotificationsCount()` | `Observable<{ forYou: number \| null, all: number \| null }>` | Get unread notifications count. |
| `markNotificationAsReadById(notificationId: string)` | `void` | Mark a notification as read by id. |
| `setSettings(config: NotificationSettingsConfig)` | `void` | Set notification settings. |
| `getSettings()` | `Observable<NotificationSettingsConfig \| null>` | Get notification settings. |
| `muteAllNotifications()` | `void` | Mute all notifications. |
| `enableSettings()` | `void` | Enable settings. |
| `disableSettings()` | `void` | Disable settings. |
| `enableSettingsAtOrganizationLevel()` | `void` | Enable settings at organization level. |
| `disableSettingsAtOrganizationLevel()` | `void` | Disable settings at organization level. |
| `enableSelfNotifications()` | `void` | Enable self notifications. |
| `disableSelfNotifications()` | `void` | Disable self notifications. |
| `setSettingsInitialConfig(settings: NotificationInitialSettingsConfig[])` | `void` | Set the initial settings config. |
| `openNotificationsPanel()` | `void` | Open the notifications panel. |
| `closeNotificationsPanel()` | `void` | Close the notifications panel. |
| `enableCurrentDocumentOnly()` | `void` | Enable current-document-only notifications. |
| `disableCurrentDocumentOnly()` | `void` | Disable current-document-only notifications. |
| `enableCrossOrganization(config?: CrossOrganizationConfig \| null)` | `void` | Opt in to cross-organization "For You" notifications (merges other orgs into the feed). |
| `disableCrossOrganization()` | `void` | Opt out of cross-organization "For You" notifications. |
| `enableUserScopedNotifications(config?: UserScopedNotificationsConfig \| null)` | `void` | Opt in to user-scoped "For You" notifications. |
| `disableUserScopedNotifications()` | `void` | Opt out of user-scoped "For You" notifications. |
| `on<T extends keyof NotificationEventTypesMap>(action: T)` | `Observable<NotificationEventTypesMap[T]>` | Subscribe to notification actions/events. |

***

### Reactions: `client.getReactionElement()`

Class: `ReactionElement`.

| Method | Returns | Description |
| - | - | - |
| `enableDarkMode()` | `any` | Enable dark mode in reactions. |
| `disableDarkMode()` | `any` | Disable dark mode in reactions. |
| `setCustomReactions(reactions: ReactionMap)` | `void` | Set custom reactions. |

***

### Activity Log: `client.getActivityElement()`

Class: `ActivityElement`.

| Method | Returns | Description |
| - | - | - |
| `getAllActivities(config?: ActivitySubscribeConfig)` | `Observable<ActivityRecord[] \| null>` | Subscribe to activities with optional filtering; auto-cleans up the internal subscription on unsubscribe. |
| `createActivity(data: CreateActivityData)` | `Promise<void>` | Create a new activity record. |

***

### Area: `client.getAreaElement()`

Class: `AreaElement`.

| Method | Returns | Description |
| - | - | - |
| `enableArea()` | `void` | *(deprecated: use `enableAreaComment`)* Enable area feature. |
| `disableArea()` | `void` | *(deprecated: use `disableAreaComment`)* Disable area feature. |
| `enableAreaComment()` | `void` | Enable area feature. |
| `disableAreaComment()` | `void` | Disable area feature. |

***

### Arrow: `client.getArrowElement()`

Class: `ArrowElement`.

| Method | Returns | Description |
| - | - | - |
| `allowedElementIds(elementIds: string[])` | `any` | Allow arrows only in specific elements by id. |

***

### Autocomplete: `client.getAutocompleteElement()`

Class: `AutocompleteElement`.

| Method | Returns | Description |
| - | - | - |
| `create(data: AutocompleteData)` | `void` | Set autocomplete data. |
| `onAutocompleteChipClick()` | `Observable<AutocompleteChipData>` | Callback on autocomplete chip click. |

***

### Tag: `client.getTagElement()`

Class: `TagElement`.

| Method | Returns | Description |
| - | - | - |
| `getAllTagAnnotations(documentId?: string, documentParams?: object)` | `Observable<TagAnnotation[] \| null>` | Subscribe to tags on the current document. |
| `deleteTag()` | `any` | Delete selected tags. |
| `allowedElementIds(elementIds: string[])` | `any` | Allow text selection only in specific elements by id. |
| `attachTag(elementId: string)` | `any` | Add tags on specific elements. |
| `addTagModeChange()` | `Observable<boolean>` | Subscribe to add-tag-mode change. |

***

### Contact: `client.getContactElement()`

Class: `ContactElement`.

| Method | Returns | Description |
| - | - | - |
| `isUserGlobalContact()` | `Observable<boolean>` | Get whether the user is part of the global contact list. |
| `onContactSelected()` | `Observable<SelectedUserContact \| null>` | Get selected contact details. |
| `enableAtHere()` | `void` | Enable `@here` for the contact list. |
| `setAtHereLabel(label: string)` | `void` | Set the `@here` label. |
| `setAtHereDescription(description: string)` | `void` | Set the `@here` description. |
| `disableAtHere()` | `void` | Disable `@here` for the contact list. |
| `updateContactListScopeForOrganizationUsers(scope: ContactListScopeForOrganizationUsers[])` | `void` | Update contact list scope for organization users. |
| `updateContactList(userContacts: UserContact[], config?: { merge: boolean, options?: any })` | `void` | Update the contact list. |
| `updateOrgList(config: UpdateOrgListConfig)` | `void` | Update the list of orgs/teams offered by the "Selected Teams" visibility picker. |
| `getContactList()` | `Observable<GetContactListResponse \| null>` | Get the contact list. |

***

### Selection: `client.getSelectionElement()`

Class: `SelectionElement`.

| Method | Returns | Description |
| - | - | - |
| `enableLiveSelection()` | `void` | Enable selections. |
| `disableLiveSelection()` | `void` | Disable selections. |
| `enableUserIndicator()` | `void` | Enable user indicator. |
| `disableUserIndicator()` | `void` | Disable user indicator. |
| `setUserIndicatorPosition(position: UserIndicatorPosition)` | `void` | Set user indicator position. |
| `setUserIndicatorType(type: UserIndicatorType)` | `void` | Set user indicator type. |
| `enableDefaultElementsTracking()` | `void` | Enable default elements tracking. |
| `disableDefaultElementsTracking()` | `void` | Disable default elements tracking. |
| `enableDefaultStyling()` | `void` | Enable default styling. |
| `disableDefaultStyling()` | `void` | Disable default styling. |
| `getLiveSelectionData()` | `Observable<LiveSelectionData \| null>` | Get live selection data. |
| `setInactivityTime(time: number)` | `void` | Set inactivity time in milliseconds (default 5 minutes). |

***

### CRDT: `client.getCrdtElement()`

Class: `CrdtElement`.

| Method | Returns | Description |
| - | - | - |
| `updateData(updateDataQuery: CrdtUpdateDataQuery)` | `Promise<any>` | Update CRDT data. |
| `onDataChange(onDataChangeQuery: CrdtOnDataChangeQuery)` | `() => void` | Subscribe to CRDT data changes; returns an unsubscribe function. |
| `getData(getDataQuery: CrdtGetDataQuery)` | `Promise<any>` | Get CRDT data. |
| `onStateChange(onStateChangeQuery: CrdtOnStateChangeQuery)` | `() => void` | Subscribe to CRDT state changes; returns an unsubscribe function. |
| `updateState(updateStateQuery: CrdtUpdateStateQuery)` | `Promise<any>` | Update CRDT state. |
| `registerSyncUser(registerSyncUserQuery: CrdtRegisterSyncUserQuery)` | `Promise<void>` | Register a sync user. |
| `onRegisteredUserChange(onRegisteredUserChangeQuery: CrdtOnRegisteredUserChangeQuery)` | `() => void` | Subscribe to registered-user changes; returns an unsubscribe function. |
| `setPresence(setPresenceQuery: CrdtSetPresenceQuery)` | `Promise<void>` | Set presence. |
| `onPresenceChange(onPresenceChangeQuery: CrdtOnPresenceChangeQuery)` | `() => void` | Subscribe to presence changes; returns an unsubscribe function. |
| `saveVersion(saveVersionQuery: CrdtSaveVersionQuery)` | `Promise<any>` | Save a version. |
| `getVersion(getVersionQuery: CrdtGetVersionQuery)` | `Promise<any>` | Get a version. |
| `getVersions(getVersionsQuery: CrdtGetVersionsQuery)` | `Promise<any>` | Get versions. |
| `enableWebhook()` | `void` | Enable webhook. |
| `disableWebhook()` | `void` | Disable webhook. |
| `setWebhookDebounceTime(time: number)` | `void` | Set webhook debounce time in milliseconds (default 5 seconds). |
| `pushMessage(pushMessageQuery: CrdtPushMessageQuery)` | `Promise<void>` | Push a lib0-encoded message to the unified message stream (sync + awareness). |
| `onMessage(onMessageQuery: CrdtOnMessageQuery)` | `() => void` | Subscribe to the unified message stream; emits each new message as it arrives. Returns an unsubscribe function. |
| `getMessages(getMessagesQuery: CrdtGetMessagesQuery)` | `Promise<CrdtMessageData[]>` | Fetch all messages after a given timestamp (one-time read for replay). |
| `getSnapshot(getSnapshotQuery: CrdtGetSnapshotQuery)` | `Promise<CrdtSnapshotData \| null>` | Get the latest full-state snapshot for a document. |
| `saveSnapshot(saveSnapshotQuery: CrdtSaveSnapshotQuery)` | `Promise<void>` | Save a full-state snapshot (state + vector) for fast initial load. |
| `pruneMessages(pruneMessagesQuery: CrdtPruneMessagesQuery)` | `Promise<void>` | Remove messages older than a given timestamp from the message stream. |
| `setActivityDebounceTime(time: number)` | `void` | Set activity debounce time for batching CRDT edits in milliseconds (default 10 min, minimum 10 sec). |
| `on<T extends keyof CrdtEventTypesMap>(action: T)` | `Observable<CrdtEventTypesMap[T]>` | Subscribe to CRDT actions/events. |

***

### Live State Sync / Store

*Getters: `client.getLiveStateSyncElement()` / `client.getStoreElement()`.*

Class: `LiveStateSyncElement`.

| Method | Returns | Description |
| - | - | - |
| `getLiveStateData$<T = unknown>(liveStateDataId?: string, liveStateDataConfig?: LiveStateDataConfig)` | `Observable<T>` | *(deprecated: use `getLiveStateData`)* Get live state data. |
| `getLiveStateData<T = unknown>(liveStateDataId?: string, liveStateDataConfig?: LiveStateDataConfig)` | `Observable<T>` | Get live state data. |
| `fetchLiveStateData<T = unknown>(request?: FetchLiveStateDataRequest)` | `Promise<T>` | Fetch live state data. |
| `setLiveStateData<T = unknown>(liveStateDataId: string, liveStateData: T, config?: SetLiveStateDataConfig)` | `Promise<void>` | Set live state data. |
| `enableSingleEditorMode(config?: SingleEditorConfig)` | `void` | Enable single editor mode. |
| `disableSingleEditorMode()` | `void` | Disable single editor mode. |
| `isUserEditor$()` | `Observable<UserEditorAccess \| null \| undefined>` | *(deprecated: use `isUserEditor`)* Check if the user is editor. |
| `isUserEditor()` | `Observable<UserEditorAccess \| null \| undefined>` | Check if the user is editor. |
| `getEditor()` | `Observable<User \| null>` | Get the editor. |
| `setUserAsEditor()` | `Promise<SetUserAsEditorResponse \| void>` | Set the current user as editor. |
| `resetUserAccess()` | `void` | Reset user editor access in single editor mode. |
| `singleEditorModeContainerIds(elementIds: string[])` | `void` | Disable elements inside specific elements only when single editor mode is on. |
| `enableAutoSyncState()` | `void` | Enable auto sync state. |
| `disableAutoSyncState()` | `void` | Disable auto sync state. |
| `requestEditorAccess()` | `Observable<boolean \| null>` | Request editor access. |
| `isEditorAccessRequested()` | `Observable<{ requestStatus: string, requestedBy: User } \| null>` | Check if editor access is requested. |
| `acceptEditorAccessRequest()` | `void` | Accept an editor-access request. |
| `rejectEditorAccessRequest()` | `void` | Reject an editor-access request. |
| `cancelEditorAccessRequest()` | `void` | Cancel an editor-access request. |
| `editCurrentTab()` | `void` | Edit the current tab. |
| `setEditorAccessTimeout(timeout: number)` | `void` | Set the editor-access timeout. |
| `enableEditorAccessTransferOnTimeOut()` | `void` | Enable editor-access transfer on timeout. |
| `disableEditorAccessTransferOnTimeOut()` | `void` | Disable editor-access transfer on timeout. |
| `enableDefaultSingleEditorUI()` | `void` | Enable the default single-editor UI. |
| `disableDefaultSingleEditorUI()` | `void` | Disable the default single-editor UI. |
| `getEditorAccessTimer()` | `Observable<EditorAccessTimer>` | Get the editor-access timer. |
| `onServerConnectionStateChange()` | `Observable<ServerConnectionState>` | Get the server connection state. |
| `updateUserPresence(userPresence: LiveStateSingleEditorExternalUserPresence)` | `void` | Update external user presence. |
| `enableHeartbeat()` | `void` | Enable heartbeat. |
| `disableHeartbeat()` | `void` | Disable heartbeat. |
| `on<T extends keyof LiveStateEventTypesMap>(action: T)` | `Observable<LiveStateEventTypesMap[T]>` | Subscribe to live state events. |

***

### Doc: `client.getDocElement()`

Class: `DocElement`.

| Method | Returns | Description |
| - | - | - |
| `getDocumentMetadata()` | `Observable<DocumentMetadata \| null>` | Get document metadata. |

***

### Rewriter: `client.getRewriterElement()`

Class: `RewriterElement`.

| Method | Returns | Description |
| - | - | - |
| `enableRewriter()` | `void` | Enable the rewriter feature. |
| `disableRewriter()` | `void` | Disable the rewriter feature. |
| `enableDefaultUI()` | `void` | Enable the default rewriter UI on text selection. |
| `disableDefaultUI()` | `void` | Disable the default rewriter UI on text selection. |
| `on<T extends keyof RewriterEventTypesMap>(action: T)` | `Observable<RewriterEventTypesMap[T]>` | Subscribe to rewriter events. |
| `askAi(request: RewriterAskAiRequest)` | `Promise<RewriterAskAiResponse>` | Call AI with the currently selected text. |
| `replaceText(request: RewriterReplaceTextRequest)` | `Promise<RewriterReplaceTextResponse>` | Replace the selected text in the DOM with the given text. |
| `addComment(request: RewriterAddCommentRequest)` | `Promise<RewriterAddCommentResponse>` | Add a comment annotation on the selected text. |

***

### Suggestion: `client.getSuggestionElement()`

Class: `SuggestionElement`.

| Method | Returns | Description |
| - | - | - |
| `enableSuggestionMode(config?: EnableSuggestionModeConfig)` | `void` | Turn on suggestion mode. |
| `disableSuggestionMode()` | `void` | Turn off suggestion mode. |
| `isSuggestionModeEnabled()` | `boolean` | Synchronous read of the suggestion-mode flag. |
| `isSuggestionModeEnabled$()` | `Observable<boolean>` | Reactive suggestion-mode stream. |
| `registerTarget<T = unknown>(config: RegisterTargetConfig<T>)` | `void` | Register a complex-object getter for a target. |
| `unregisterTarget(targetId: string)` | `void` | Drop the registered getter for a target. |
| `startSuggestion(targetId: string)` | `void` | Manually capture the current value as the snapshot for a target. |
| `commitSuggestion<T = unknown>(config: CommitSuggestionConfig<T>)` | `Promise<{ id: string }>` | Commit a suggestion. |
| `getSuggestions(filter?: SuggestionGetSuggestionsFilter)` | `Suggestion[]` | Synchronous read of all suggestions on the current document. |
| `getSuggestions$(filter?: SuggestionGetSuggestionsFilter)` | `Observable<Suggestion[]>` | Reactive variant of `getSuggestions`. |
| `getPendingSuggestion<T = unknown>(targetId: string)` | `Suggestion<T> \| null` | Newest pending suggestion for a target, or null. |
| `getPendingSuggestion$<T = unknown>(targetId: string)` | `Observable<Suggestion<T> \| null>` | Reactive variant of `getPendingSuggestion`. |
| `on<T extends SuggestionEventType>(action: T)` | `Observable<SuggestionEventTypesMap[T]>` | Subscribe to a suggestion event. |

***

### Views: `client.getViewsElement()`

Class: `ViewsElement`.

| Method | Returns | Description |
| - | - | - |
| `getUniqueViewsByUser(clientLocationId?: string)` | `Observable<ViewsByUser>` | Get unique views by user. |
| `getUniqueViewsByDate(clientLocationId?: string)` | `Observable<ViewsByDate>` | Get unique views by date. |

***

### Injector (base): `client.getInjectorElement()`

Class: `InjectorElement`: the base class all feature elements extend. It exposes a single public method (the rest are `protected`).

| Method | Returns | Description |
| - | - | - |
| `ha(hideAnalytics: boolean)` | *(none declared)* | Set the `hideAnalytics` flag (suppresses analytics tracking). |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.