Libraries
@veltdev/react@veltdev/client@veltdev/sdk
Improvements
-
[Comments]: Added backward compatibility so V4 custom wireframes using property names
allowAssignment,allowEdit,allowToggleNotification, andallowChangeCommentAccessModeautomatically resolve to their v5 equivalents. No changes to your wireframe code are required when upgrading from v4 to v5. -
[Comments]: Added edit composer wireframe reuse in comment thread cards so it now applies the same
velt-comment-dialog-composer-wireframecustomization as the reply composer. Previously the edit composer always rendered the default template.
Bug Fixes
-
[Comments]: Fixed custom wireframes for nested comment dialog components — including thread cards, priority/status dropdowns, attachment layouts, reply avatars, and seen dropdowns — silently falling back to the default template instead of rendering correctly. This restores the v4 behavior where parent components extracted nested wireframes via
querySelectorand passed them to children. -
[Comments]: Fixed
veltDynamicTemplateplacement in multiple components so it wraps only the replaceable inner content (e.g., an icon) instead of the entire component structure. Previously the default template always rendered and the wireframe content was never injected. -
[Comments]: Fixed
velt-classconditional styling in custom wireframes not resolving correctly for per-item data such as{commentObj.*},{attachment.*}, and{file.*}. AddedapplyConditionalClasses()calls with per-item data contexts across 40+ comment dialog primitive components. -
[Comments]: Fixed click event handlers being lost when custom wireframes replace default content by moving handlers from inside
veltDynamicTemplateblocks to wrapper elements outside the template directive. This restores click functionality for custom wireframes on mark-as-read, dropdown items, options, and priority/status items. -
[Comments]: Fixed per-dialog state (
localUIStateSignal) not being propagated to child primitives andveltDynamicTemplatecontexts throughout the entire comment dialog component tree, including through wireframe-replaced sections. -
[Comments]: Fixed custom wireframes using data bindings like
<VeltData field="attachment.name" />displaying empty content by adding per-item data fields (attachment,commentObj,file,item, etc.) toveltDynamicTemplatecontext objects. -
[Comments]: Fixed layout issues caused by styled wrapper elements persisting outside the template when wireframes replaced inner content. Visual styling classes (width, height, padding) are now inside the
veltDynamicTemplatedefault content. -
[Comments]: Restored CSS class names on the priority dropdown content item components to their v4 names (
velt-priority-dropdown-content-item,velt-priority-dropdown-content-item-tick,s-priority-*) so existing CSS overrides continue to work without changes. - [Comments]: Fixed mark-as-read not firing when clicking a comment in sidebar focused-thread mode or inline comment section mode. Previously the comment dialog is always in a selected state in these modes, preventing the mark-as-read path from triggering.
- [Comments]: Fixed the attachment image download button not hiding for anonymous users, disabled states, and expired plans. The button now correctly matches v4 behavior.
-
[Comments]: Fixed attachment loading spinners crashing when
config.uiStateis not yet initialized (e.g., in standalone usage or during initialization race conditions). - [Comments]: Fixed sidebar deselection accidentally re-selecting an annotation that was already removed from the selected annotations map by another code path.
New Features
- [Comments]: Added
enableAttachmentDownload()/disableAttachmentDownload()API methods and anattachmentDownloadprop on<VeltComments>to control whether clicking an attachment triggers a file download. A newattachmentDownloadClickedevent fires on every attachment click regardless of the download setting, letting you intercept clicks for custom viewers, analytics, or access control. Download is enabled by default so there is no breaking change.
- React / Next.js
- Other Frameworks
AttachmentDownloadClickedEvent interface has the following shape:Improvements
-
[Comments]: The wireframe template for the resolve and unresolve buttons in the assignee banner is now nested inside the button component rather than wrapping it, giving custom wireframes direct access to button state, styling, and event handlers. The affected wireframes are
velt-comment-dialog-assignee-banner-resolve-button-wireframeandvelt-comment-dialog-assignee-banner-unresolve-button-wireframe. -
[Comments]: Added CSS classes to comment composer attachment components to reflect loading and edit-mode states:
.velt-composer-attachment-container,.velt-composer-attachment--loading, and.velt-composer-attachment--edit-mode. -
[Comments]: Added
.s-comment-dialog-assign-to-menuand.velt-thread-card--assign-to-menuCSS classes to the assign-to menu component for more granular styling control.
Bug Fixes
-
[Comments]: Added
'iframe'to the list of non-nestable elements so thatgetHostElement()returns the iframe’s parent element instead of attempting to place a comment pin inside the iframe document context. - [Comments]: Fixed a regression where navigating back from a focused thread triggered an unintended draft auto-save. A guard now skips auto-save when the focused thread dialog is destroyed via back navigation.
- [Comments]: Fixed stale selection state in the sidebar after back-navigating from a focused annotation. The annotation is now properly deselected from the internal selection map on exit.
-
[Comments]: Thread card attachment components now use
isTemplateEmpty()to detect empty wireframe templates instead of a truthy check, so attachments correctly fall back to default rendering when an empty wireframe is provided. - [Comments]: Custom thread card wireframes that do not include an edit composer wireframe now automatically render the default edit composer, so inline comment editing remains functional without requiring wireframe changes.
New Features
- [Comments]: Added
clearContextoption toPageModeComposerConfigto control whether comment context is cleared after page mode composer submission. SetclearContext: falseto preserve context data across submissions (defaults totrue).
- React / Next.js
- Other Frameworks
Bug Fixes
-
[Comments]: Removed host CSS classes
velt-composer-openandvelt-composer-input-focusedfrom the Comment Dialog Composer component. If your custom styles targeted these classes, update your selectors accordingly. -
[Comments]: Fixed wireframe template forwarding in Comment Dialog so custom templates set via
dialogTemplateare now correctly applied to all child components. -
[Comments]: Fixed nested wireframe template extraction in Comment Dialog Threads so custom
velt-comment-dialog-thread-card-wireframeandvelt-comment-dialog-more-reply-wireframetemplates are correctly applied. - [Comments]: Fixed Mark as Read/Unread wireframe template structure so custom wireframe templates now provide proper control over the button’s internal elements.
- [Comments]: Added proper wireframe template wrapper to the parent Mark as Read component with a clickable container that includes accessibility attributes for the toggle action.
-
[Comments]: Fixed comment annotation data resolution in button click handlers so
commentAnnotationcontext data now correctly resolves from the updated component config structure.
New Features
- [Notifications]: Added ability to enable organization-level notification settings. This allows you to configure notifications once for all documents in an organization instead of per document.
- React / Next.js
- Other Frameworks
Improvements
- [Comments]: Comments sidebar group-by views now display “Unassigned” for annotations without assignees and “Untagged” for annotations without tagged users.
Bug Fixes
- [Comments]: Fixed an issue where image attachments in comment dialog were not opening in a lightbox view.
-
[Comments]: Fixed an issue where sometimes user mentions did not include the leading
@symbol in display text. - [Comments]: Fixed an issue where the recorder control panel in comment dialog composer did not appear when a valid comment dialog ID was not present in component configuration.
- [Comments]: Fixed an issue where assignment and private comment options did not respect explicit configuration in sidebar mode.
-
[Comments]: Fixed an issue where the comment dialog internal tag was changed from
snippyly-comment-dialogtovelt-comment-dialog-internalfor correct sidebar focus and keyboard behavior.
Improvements
- [Comments]: Added ability to enable/disable Private Comments feature in Velt Console
Improvements
- [Comments]: Added
batchedPerDocumentmode forgetCommentAnnotationsCount()that makes the query more efficient by up to 80% while maintaining per-document granularity. Very useful for UIs that need to display comment counts for 100 documents or less on the same page.
- React / Next.js
- Other Frameworks
Bug Fixes
- [Comments]: Fixed draft mode not working properly. Draft content is now preserved when the dialog is closed and the shake animation now works as expected.
-
[Comments]: Fixed context property access in
velt-dataelements. Templates can now access context properties using{context.propertyName}patterns. - [Comments]: Fixed edit mode state persisting after dialog close. Reopening the dialog now shows the normal view instead of the edit composer.
- [Comments]: Fixed text reappearing when using select-all-and-delete in edit mode composer. Users can now properly delete all text in edit mode.
- [Comments]: Fixed links in comment body not clickable. Clicking links in comment text now opens them in a new tab.
- [Comments]: Fixed paste handling. Pasting a URL over selected text creates a hyperlink, multiline text preserves line breaks, and images paste as attachments.
- [Comments]: Fixed ghost comment banners not displaying. “Comment is syncing…” messages now properly show while annotation data is loading.
- [Comments]: Fixed priority selection not working on new annotations. Users can now set priority before submitting the first comment.
-
[Comments]: Fixed email detection after @ symbol. Typing
@user@example.comand pressing space now creates an email mention. - [Comments]: Fixed recording in progress flag not clearing. Dialog now properly closes on click outside after recording finishes.
- [Comments]: Fixed links and @here mentions not highlighted in comment text. URLs are now styled as clickable links and @here mentions are properly highlighted.
New Features
- [Comments]: Introducing Private Comments feature: Added
updateVisibility()method to programmatically set comment access (public, organization, or private). Learn more
- React / Next.js
- Other Frameworks
Bug Fixes
- [Comments]: Fixed mentioned users not receiving notifications. Users @mentioned in comments now correctly receive notifications.
- [Comments]: Fixed notification action type validation. Clients only receive data for valid event types.
- [Comments]: Fixed status reset when deleting comments. Status now only resets when current status is terminal.
New Features
- [Comments]: Added
addCommentAnnotationDraftevent to dynamically set context when creating comment annotations. Triggered beforeaddCommentAnnotationevent clicks on the comment tool and the composer is rendered.
- React / Next.js
- Other Frameworks
Improvements
- [Comments]: Added
setContextProvidermethod to set a global context provider for all comment annotations. Also addeduseSetContextProviderhook for React applications.
- React / Next.js
- Other Frameworks
Bug Fixes
- [Comments]: Fixed page mode and multi-thread annotation ID not found error. Page mode and multi-thread comments now work as expected.
-
[Comments]: Fixed
updateOverlayPositionfunction not triggering. Comment dialog now opens in the correct position. - [Comments]: Fixed unread status issues in inline and focused thread modes. Annotations are now marked as read when opened or clicked.
- [Comments]: Fixed three-dot menu not visible in sidebar.
- [Comments]: Fixed composer not being focused when opened.
- [Comments]: Fixed comments navigating on click. Comments now only navigate when the navigation button is clicked.
Bug Fixes
- [Comments]: Fixed
lastUpdatedtimestamp not being updated when changing context in comment annotation via SDK. Ensures context updates are properly synced to other users.
Improvements
- [Core]: Added robustness to initialization when
VeltProviderwas re-rendered multiple times over a slow network.
Bug Fixes
-
[Comments]: Refactored
submitCommentmethod to fix resolver issue forvelt-comment-composer. Now follows the standard comment submission flow. - [Comments]: Fixed unread status not updating correctly in bottom sheet. This was a regression in v5.
- [Comments]: Fixed navigation button not working properly. This was a regression in v5.
-
[Comments]: Fixed disable recording option not working in
velt-comment-composer. This was a regression in v5.
New Features
- [Core]: Added
globalStylesoption to control whether Velt’s global CSS is loaded. Set tofalseto disable default styles when implementing custom theming.
- React / Next.js
- Other Frameworks
- [Comments]: Added
submitComment(targetElementId)method to programmatically trigger comment submission. Enables custom buttons or keyboard shortcuts for submitting comments. Learn more
- React / Next.js
- Other Frameworks
- [Comments]: Added
placeholderprop to customize input placeholder text in comment composer. Overrides default placeholders. Learn more
- React / Next.js
- Other Frameworks
- [Comments]: Added
composerTextChangeevent that fires when text changes in any comment composer. Enables features like auto-save drafts, character counters, or real-time validation. Learn more
- React / Next.js
- Other Frameworks
Bug Fixes
Comment Dialog Primitives
Released 115+ primitive components for building custom comment dialogs. Each subcomponent can now be used independently without requiring the full dialog structure.- React / Next.js
- Other Frameworks
- Header/Body: Header, Body, CloseButton
- Thread: ThreadCard with Avatar, Name, Time, Message, Reactions, Recordings, Reply, Options, and more
- Composer: Composer, ComposerInput, ComposerActionButton, ComposerAttachmentButton, ComposerRecorderButton, ComposerRecorderPlayer, ComposerFiles
- Dropdowns: StatusDropdown, PriorityDropdown, OptionsDropdown, CustomAnnotationDropdown (each with full sub-component breakdown)
- Additional: ReplyAvatars, AssigneeBanner, ResolveButton, UnresolveButton, CopyLink, DeleteButton, PrivateBanner, NavigationButton, and 90+ more

