Filtering
The V2 sidebar exposes its filter, sort, group, and search behavior declaratively through inputs. Filters and sorts are described as data; the sidebar renders the matching surfaces and applies the selections client-side viaapplyCommentSidebarClientFilters().
There are three filter surfaces, each driven by its own input:
filters— the Main Filter bottom-sheet/menu surface.miniFilters— a single header funnel dropdown.minimalFilters— multiple header dropdowns. When present, these replace the single funnel dropdown.
filters
- Define the Main Filter panel sections.
- Pass an array of
FilterFieldto define sections. Built-in fields are referenced byfieldid; custom fields usevaluePath. - When passed a
CommentSidebarFiltersobject (e.g.{ status: ['OPEN'] }) instead ofFilterField[], it is treated as active filter selections. Included keys replace their current selections, omitted keys are preserved, and Reset clears all selections. A present-but-empty array clears just that field; an empty object{}clears all selections.
[]
- React / Next.js
- Other Frameworks
CommentSidebarFilters object instead of a FilterField[] to apply active filter selections. The values render as checked options in the filter panel and are cleared by Reset:
- React / Next.js
- Other Frameworks
default status selection
On first load, the Status field selects the default Open status and every status whose type is In Progress. These selections are visible and clearable in the Main Filter panel. The sidebar does not seed these statuses after it restores filter state fromsessionStorage, after you provide a status selection through setCommentSidebarFilters(), or after the user changes the Status selection. If the status catalog loads after the sidebar, an untouched default selection refreshes to the catalog’s current default and ongoing status ids.
Selecting All, clearing the Status field, or using Reset shows resolved and terminal comments. Clearing another field does not change whether resolved comments are shown, and Reset does not seed the default statuses again.
priority “Not set” option
The default Priority field includes a Not set option for comments without a priority. A customFilterField with includeUnset: false omits this option.
setCommentSidebarFilters
UsesetCommentSidebarFilters() to apply client-provided values as selected options in the sidebar. Each call replaces selections for keys it includes and preserves omitted keys:
- Pass an empty array to clear one field.
- Pass an empty object (
{}) to clear every selected field. - Use Reset in the Main Filter panel to clear client-provided selections.
location: byid, falling back tolocationNamepeople,assigned,tagged, andinvolved: byuserId, falling back toemailstatus,priority, andcategory: by the provided values without normalizationaccessModes: by comment visibility ('public'or'private')version: byid- Custom fields: string values or objects containing
idandname
- React / Next.js
- Other Frameworks
location identity
The sidebar identifies a location by itsid, falling back to locationName when the id is null, undefined, or an empty string. An id of 0 remains valid, numeric annotation ids compare with equivalent string filter values, and id takes precedence when both fields are present.
This identity is used consistently by grouping, location filter options and matching, page mode, and client filters. Comments without any location context appear in the Others group.
people filter identity
People, Involved, Assigned, and Tagged options are keyed byuserId and use the person’s name as the label, with an email fallback. Records containing only an email do not create filter options, preventing duplicate options when another record for the same person contains a userId.
miniFilters
- Render a single header funnel dropdown with one section per field.
[]
- React / Next.js
- Other Frameworks
minimalFilters
- Renders one or more dropdowns in the sidebar header (these replace the single
miniFiltersfunnel when present). - Each entry in the array creates one dropdown. The entry’s
typedecides what that dropdown contains, and the matching input (fields,sorts, oractions) provides its content.
[]
Filter-dropdown type scoping
type | The dropdown shows | Built from |
|---|---|---|
filter | Category checkbox sections (e.g. status, priority, assignee) | fields |
sort | Single-select sort options (e.g. by date or unread) | sorts |
quick | One-click filters (presets and/or path predicates) | actions |
actions | A combined menu: a sort group and a quick group separated by a divider | sorts + actions |
| (unset) | Default quick presets plus any configured sections | — |
{ path: 'from.userId', value: '1.1' } keeps comments authored by the user with id 1.1. The value is a literal (there is no @me token), and paths auto-flatten nested arrays (e.g. comments.taggedUserContacts.contact.userId).
Each dropdown is rendered by the filter-dropdown primitive (VeltCommentSidebarV2FilterDropdown / velt-comment-sidebar-filter-dropdown-v2).
The examples below show one dropdown per type.
filter — category checkboxes (built from fields):
- React / Next.js
- Other Frameworks
sort — sort options (built from sorts):
- React / Next.js
- Other Frameworks
quick — one-click filters (built from actions — presets and/or path predicates):
- React / Next.js
- Other Frameworks
conditions plus an operator:
- React / Next.js
- Other Frameworks
actions — combined sort + quick menu (built from sorts + actions, separated by a divider):
- React / Next.js
- Other Frameworks
- React / Next.js
- Other Frameworks
Prefer configuring dropdowns through
minimalFilters as shown above. If you need to place or restyle a dropdown directly in your own markup, you can set these same inputs on the filter-dropdown primitive — see Comment Sidebar V2 Primitives.defaultMinimalFilter
- Set the default active quick filter applied on load (one of the
minimalFiltersquick presets). - Type:
'all' | 'read' | 'unread' | 'resolved' | 'open' | 'assignedToMe' | 'reset'
- React / Next.js
- Other Frameworks
filterOperator
- Control how active selections across different filter sections combine.
- Options:
andoror - This directly configures the Comment Sidebar V2 filter engine. The shared
systemFiltersOperatorinput and API update the same effective operator.
and
- React / Next.js
- Other Frameworks
filterPanelLayout
- Change the layout of the Main Filter panel.
- Options:
bottomSheetormenu
bottomSheet
- React / Next.js
- Other Frameworks
filterOptionLayout
- Change how options render within a filter section.
- Options:
dropdownorcheckbox
dropdown
- React / Next.js
- Other Frameworks
filterCount
- Show per-option facet counts. Counts remain absolute within the current page-scoped annotation set and do not shrink around selections supplied through
setCommentSidebarFilters(). Disabling improves performance.
true
- React / Next.js
- Other Frameworks
systemFiltersOperator
- Specify whether different filter fields are combined with an
andororoperator in the sidebar filter engine. Values within a single field always match with OR. - Applies to client filters set via
setCommentSidebarFilters()as well, including a value set before the sidebar initializes and changes made at runtime. - An explicit
filterOperatorset during initialization is preserved instead of being overwritten by the shared operator’s initial default value.
and
- React / Next.js
- Other Frameworks
Using Props:Using API:
filterGhostCommentsInSidebar
- Filter out and hide ghost comments from the sidebar.
false
- React / Next.js
- Other Frameworks
Using Props:Using API:
excludeLocationIds
- Filter out comments from certain locations. These comments are not displayed in the sidebar.
[]
- React / Next.js
- Other Frameworks
Using Props:Using API:
customActions
- Enable custom actions in the sidebar so you can add your own wireframe-driven controls.
false
- React / Next.js
- Other Frameworks
Using Props:Using API:
applyCommentSidebarClientFilters
- Apply client-provided
CommentSidebarFiltersto a set of annotations, honoring the currentsystemFiltersOperator.
- React / Next.js
- Other Frameworks
Sorting
sortBy
- Set the default sort field. This sets the default sort, it does not render a sort dropdown.
- Type:
SortBy— a built-in preset (e.g.'date','unread') or a custom field key / dot-path (e.g.'comments.createdAt').
- React / Next.js
- Other Frameworks
sortOrder
- Set the default sort direction.
- Type:
SortOrder('asc' | 'desc')
- React / Next.js
- Other Frameworks
sortData
- Provide a custom-field sort path used when sorting by a custom field.
- React / Next.js
- Other Frameworks
Grouping
groupConfig
- Configure grouping in the sidebar. Grouping defaults to by-location when enabled.
- For location grouping, the current and additional-location groups start expanded while other location groups start collapsed. For document grouping, the current document starts expanded while other documents start collapsed.
- Status, priority, and custom-field groups start expanded.
- Explicit user expansion takes precedence over explicit collapse, which takes precedence over the grouping default. Both overrides persist in
sessionStorage. - A real location change resets the overrides so the new current group expands. The initial location emitted during a reload preserves restored overrides.
- React / Next.js
- Other Frameworks
Navigation
onCommentClick
- Listen for click events on comments in the sidebar to trigger actions like navigation.
- The event callback provides access to the clicked comment’s annotation object, which includes
locationandcontextdata.
- React / Next.js
- Other Frameworks
onCommentNavigationButtonClick
- Triggered when the navigation button in the comment dialog in the sidebar is clicked.
- Use this event to implement custom navigation logic.
- React / Next.js
- Other Frameworks
urlNavigation
- Enable automatic URL navigation when clicking comments in the sidebar.
- By default, clicking a comment doesn’t update the page URL where the comment was added.
false
- React / Next.js
- Other Frameworks
Using Props:Using API:
enableUrlNavigation is a deprecated alias for urlNavigation. Prefer urlNavigation.queryParamsComments
- Sync the selected comment to URL query params.
false
- React / Next.js
- Other Frameworks
UI
pageMode
- Adds a composer in the sidebar where users can add comments without attaching them to any specific element.
- The list is scoped using the current location identity, so a location with only
locationNamebehaves the same as an id-based location.
false
- React / Next.js
- Other Frameworks
focusedThreadMode
- When you click a comment in the sidebar, it opens the thread in an expanded view within the sidebar itself.
- Other threads and actions like filters and search are hidden behind a back button.
- Enabling this mode also adds a navigation button in the comment dialog.
false
- React / Next.js
- Other Frameworks
openAnnotationInFocusMode
- When enabled, opens the comment dialog in focus mode when
focusedThreadModeis enabled and either the reply button is clicked or a comment is selected viaselectCommentByAnnotationId(). - Requires
focusedThreadModeto be enabled.
false
- React / Next.js
- Other Frameworks
readOnly
- Make comment dialogs in the sidebar read-only to prevent users from editing comments.
false
- React / Next.js
- Other Frameworks
embedMode
- Add the sidebar inline within your component; it takes up the full width and height of its container.
- In embed mode, the sidebar does not have a close button. Implement your own open/close on the host component.
null
- React / Next.js
- Other Frameworks
floatingMode
- Open the sidebar in an overlay panel that floats over the page content.
- If you use this mode, do not add the sidebar component to your app separately.
false
- React / Next.js
- Other Frameworks
position
- Change the side of the viewport the sidebar opens from.
- Options:
leftorright
right
- React / Next.js
- Other Frameworks
variant
- Set the layout variant of the sidebar.
sidebar
- React / Next.js
- Other Frameworks
dialogVariant
- Set the variant for the embedded comment dialog rendered in the list.
sidebar
- React / Next.js
- Other Frameworks
focusedThreadDialogVariant
- Set the variant for the focused-thread dialog.
sidebar
- React / Next.js
- Other Frameworks
pageModeComposerVariant
- Set the variant for the page-mode composer.
sidebar
- React / Next.js
- Other Frameworks
forceClose
- Force the sidebar to close on outside click, even when opened programmatically via API.
true
This does not affect embed mode sidebar.
- React / Next.js
- Other Frameworks
fullScreen
- Add a fullscreen toggle button to the header. In fullscreen mode the sidebar expands to fill the viewport.
- Observe state changes with the
onFullscreenClickevent.
false
- React / Next.js
- Other Frameworks
Using Props:Using API:
fullExpanded
- Render the sidebar fully expanded.
false
- React / Next.js
- Other Frameworks
shadowDom
- Render the sidebar body inside a shadow root for style isolation.
- Shadow-DOM isolation is enabled by default. Opt out by setting
shadow-dom="false"or callingdisableSidebarShadowDOM().
- React / Next.js
- Other Frameworks
currentLocationSuffix
- Adds a “(this page)” suffix to the group name when the current location matches the group’s location.
false
- React / Next.js
- Other Frameworks
dialogSelection
- When disabled, clicking a comment in the sidebar triggers a click event instead of opening the dialog inline.
true
- React / Next.js
- Other Frameworks
expandOnSelection
- Control whether comment dialogs automatically expand when selected in the sidebar.
true
- React / Next.js
- Other Frameworks
searchPlaceholder
- Customize the placeholder text shown in the search input of the sidebar.
Search comments
- React / Next.js
- Other Frameworks
commentPlaceholder
- Customize the placeholder text for the dialog composer (the comment input that appears in comment dialogs/threads).
- React / Next.js
- Other Frameworks
replyPlaceholder
- Customize the placeholder text for reply input fields in the sidebar.
- React / Next.js
- Other Frameworks
pageModePlaceholder
- Customize the placeholder text for the page-mode composer.
- React / Next.js
- Other Frameworks
editPlaceholder
- Customize the placeholder text shown when editing an existing comment or reply.
- Use
editCommentPlaceholderfor the first comment andeditReplyPlaceholderfor replies; both take precedence overeditPlaceholder.
- React / Next.js
- Other Frameworks
sidebarButtonCountType
- Change what the sidebar button count reflects.
default: total count of comments in open and in-progress states.filter: count of the sidebar’s filtered comments, including0for an empty result. The count updates when comments are deleted.
- When
filterCommentsOnDomis enabled, the same filtered list controls which pins appear on the page. - The current filtered result is preserved while the sidebar is loading. It is cleared when the sidebar is destroyed so a removed sidebar no longer gates the badge or on-page pins.
- React / Next.js
- Other Frameworks
Using Props:Using API:
context
- Pass custom context data to page-mode composer comments in the sidebar. The provided context object is attached to any comment added via the page-mode composer.
null
- React / Next.js
- Other Frameworks
Virtual scrolling
- The V2 list uses virtual scrolling. Tune it with
measuredSize(estimated row size in px),minBufferPx, andmaxBufferPx. - Rows wider than the viewport are clipped to the sidebar width instead of creating a horizontal scrollbar.
measuredSize = 220, minBufferPx = 1000, maxBufferPx = 2000
- React / Next.js
- Other Frameworks
Events
onSidebarOpen
- Callback fired when the sidebar opens.
- React / Next.js
- Other Frameworks
onSidebarClose
- Callback fired when the sidebar closes.
- React / Next.js
- Other Frameworks
Sidebar controls
openCommentSidebar / closeCommentSidebar / toggleCommentSidebar
- Programmatically open, close, or toggle the sidebar.
- React / Next.js
- Other Frameworks
For V2 customization, see Comment Sidebar V2 Wireframes and Comment Sidebar V2 Primitives. The sidebar is shadow-DOM isolated by default.

