Skip to main content

enableSingleEditorMode

Enables single editor mode, allowing only one user to edit the document at a time while others remain in read-only mode. Params
  • config: (object, optional). Configuration object for controlling single editor mode behavior
    • customMode: (boolean, optional). When true, SDK won’t automatically make HTML elements read-only for viewers. You need to handle this manually with the help of other APIs listed here. (default: false)
    • singleTabEditor: (boolean, optional). When enabled, restricts the editor to edit in only one browser tab at a time, preventing them from making changes across multiple tabs simultaneously (default: true)

disableSingleEditorMode

Disables single editor mode and returns to normal editing.

Define Single Editor Mode Elements

Restrict to specific containers

  • Restrict Single Editor Mode to specific containers.
  • By default Single Editor Mode is enabled at the entire DOM level. You can restrict this feature to only certain HTML containers & their children by using this.

Fine tune elements control

Control which elements are controlled by Single Editor Mode.
You must add the data-velt-sync-access-* attributes to native HTML elements (e.g. button, input). It will not work directly on React components.

Timeout Configuration

setEditorAccessTimeout

  • Configure automatic editor access timeout.
  • Default: 5 seconds.

enableEditorAccessTransferOnTimeOut

  • When editor access timeout is reached, automatically transfer editor access to the next user in the queue.
  • Enabled by default.

disableEditorAccessTransferOnTimeOut

  • When editor access timeout is reached, do not automatically transfer editor access to the next user in the queue.
  • Enabled by default.

getEditorAccessTimer

Track the state of editor access request timeout. Returns
  • EditorAccessTimer object:
    • state ('idle' | 'inProgress' | 'completed')
    • durationLeft (number)

Auto-Sync Text Elements

  • Enable automatic syncing of text element contents across all users.
  • Supported elements:
    • <input>
    • <textarea>
    • ContentEditable <div>
  • First enable the feature and then define which elements should sync realtime.

Editor

setUserAsEditor

Sets the current user as the editor, making all other users read-only.

Error handling

setUserAsEditor includes validations to prevent assigning an editor when one already exists. It returns a promise that resolves to an optional error object.
Possible error values:

isUserEditor

  • Get the current user’s editor status.
Returns
  • null: When the state is not available yet.
  • undefined: When there are no current editors available in single editor mode.
  • UserEditorAccess: When there is at least one editor available in single editor mode.
    • isEditor (boolean) - Whether the user is the editor
    • isEditorOnCurrentTab (boolean) - Whether the user is editor on current tab
To unsubscribe from the subscription:

getEditor

Get information about the current editor. Returns
  • User object:
    • email (string) - Editor’s email
    • name (string) - Editor’s name
    • photoUrl (string) - Editor’s photo URL
    • userId (string) - Editor’s unique ID
To unsubscribe from the subscription:

isEditorAccessRequested

Check if any viewer has requested editor access. Returns
  • null - User is not editor or request was canceled
  • EditorRequest object:
    • requestStatus (string) - ‘requested’ for active requests
    • requestedBy (User) - User object of the requester
To unsubscribe from the subscription:

acceptEditorAccessRequest

Accept editor access requests.

rejectEditorAccessRequest

Reject editor access requests.

editCurrentTab

Make current tab editable when editor has multiple tabs open.

Viewer

requestEditorAccess

Request editor access from the current editor. Returns
  • null - Request is pending
  • true - Request accepted
  • false - Request rejected
To unsubscribe from the subscription:

cancelEditorAccessRequest

Cancel the editor access request.

Heartbeat

The heartbeat mechanism provides more reliable presence detection in single editor mode scenarios. This feature is enabled by default when single editor mode is enabled.
If you want to disable heartbeat functionality, you must disable it before enabling single editor mode.

enableHeartbeat

Enables/Disables the heartbeat mechanism for Single Editor Mode presence detection. Default: enabled

Presence Heartbeat

updateUserPresence

Send a lightweight heartbeat from your host app to Velt. Velt will use that as a fallback in rare edge cases if it fails to detect multi‑tab/device presence. Most apps don’t need this; use only if you see ambiguity in who’s the active editor.

resetUserAccess

Reset editor access for all users.

UI

enableDefaultSingleEditorUI

  • Control the visibility of the default Single Editor Mode System UI.
  • The default UI shows:
    • Current user’s editor/viewer status
    • Editor access requests
    • Request timeout countdown
    • Request rejection options
  • If you disable the default UI, you’ll need to implement your own UI for these features.

Embed Single Editor Mode Panel

  • Embed the Single Editor Mode Panel into your UI.

Event Subscription

on

Subscribe to Single Editor Mode Events. Here is the list of events you can subscribe to and the event objects you will receive.
CategoryEvent TypeDescriptionEvent Object
EditoraccessRequestedWhen a user requests editor access. Editor will get this event.AccessRequestEvent
EditoraccessRequestCanceledWhen a user cancels their request for editor access. Editor will get this event.AccessRequestEvent
VieweraccessAcceptedWhen a user’s request for editor access is accepted. Requesting Viewer will get this event.AccessRequestEvent
VieweraccessRejectedWhen a user’s request for editor access is rejected. Requesting Viewer will get this event.AccessRequestEvent
Access AssignmenteditorAssignedWhen a user is assigned as the editor.SEMEvent
Access AssignmentviewerAssignedWhen a user is assigned as a viewer.SEMEvent
EditoreditorOnDifferentTabDetectedWhen the editor opens the same document in a different browser tab. Editor will get this event.SEMEvent
Using Hooks:
Using API:

Best Practices

  • Use singleTabEditor to prevent confusion when users have multiple tabs open
  • Add IDs to HTML elements with sync attributes for more robust syncing
  • Only apply sync attributes to native HTML elements, not framework components