Skip to main content
Before you reach for wireframes or CSS, check whether a prop already gives you the layout/mode you want. Velt components expose many layout/variant props: flipping one is the cheapest customization of all. These are real props on the React components.
Use these with primitives (and they apply to the same components in any framework as kebab-case attributes). For trimming features on/off (reactions, status, …) see Primitives.

The most layout-rich component. Key props (present on both unless noted): The sidebar has three filter surfaces: the minimal filter (the quick all/unread/resolved bar), the main filter panel (the full dropdown of categories), and custom filters you define. All are customizable. 1. Choose which filters appear + add your own: the filters prop (a CommentSidebarFilterConfig). It’s a map of filter keys → a FilterTypeConfig:
Built-in keys: location, document, people, assigned, tagged, involved, priority, status, category, commentType, version. Toggle/relabel/reorder them, and add a custom filter by adding your own key with type: 'custom' + options:
(miniFilters / minimalFilters configure the quick-bar the same way; groupConfig controls list grouping.) A custom filter matches annotations by the option id you set on them (via customListDataOnAnnotation / annotation metadata). Set filter values programmatically with client.getCommentElement().setCommentSidebarFilters({ status: ["OPEN"], severity: ["sev1"] }). 2. Choose the filter layout (props above): filterPanelLayout ('menu' panel vs 'bottomSheet'), filterOptionLayout ('checkbox' vs 'dropdown'), filterOperator ('and'/'or'), filterCount, defaultMinimalFilter. 3. Fully restyle the filter UI with wireframe slots (Wireframe components). The V2 sidebar exposes: FilterButton (+ AppliedIcon), FilterDropdown (Trigger, Content → List → Item / Category), and FilterContainer (Title, CloseButton, GroupBy, ResetButton, ApplyButton, SectionList → Section → Label / Field → Control(Value, ChipList→Chip, Search, Chevron) / OptionList → Option(Checkbox, Name, Count)). Fill these to build a fully custom filter dropdown / panel while Velt keeps the filtering logic. In wireframes you can read {appliedFiltersCount} and {filterState} to drive your own filter UI. (See Wireframe variables.)
Same trade as everywhere: config props for which filters + layout (cheapest); wireframe slots to restructure the filter dropdown/panel; the filtering behavior stays Velt’s.

Notifications: VeltNotificationsPanel

Comment Dialog: VeltCommentDialog

All <VeltComments> props (the full 129-prop table with types, defaults, and descriptions) are in Props. This page focuses on the layout/mode props for the sidebar, dialog, and notifications.

Comments host: VeltComments

Mostly feature toggles (see Primitives), plus layout/mode flags: floatingCommentDialog, inboxMode, inlineCommentMode, privateCommentMode, persistentCommentMode, multiThread, composerMode ('default'|'expanded'), unreadIndicatorMode ('minimal'|'verbose'), minimap / minimapPosition, and granular shadow-DOM / dark-mode flags (pinShadowDom, dialogShadowDom, dialogDarkMode, pinDarkMode, …).

Recorder: VeltRecorderControlPanel & VeltRecorderPlayer

Transcription: VeltTranscription & VeltSubtitles

Presence: VeltPresence

Cursor: VeltCursor


Custom data: your own statuses, priorities, categories, reactions

These props let you replace Velt’s default option sets with your own. They’re a core part of customization: the values flow into the UI (status/priority dropdowns, chips), into the wireframe variables (statusOptions, priorityOptions, customStatusesShown, …), and into the primitive dropdown items (so your custom dialog dropdown shows your statuses). Pass them on VeltComments:
Exact shapes:
  • customStatus: { id, name, color, type: 'default' | 'ongoing' | 'terminal', lightColor?, svg?, iconUrl? }[]: type controls semantics (terminal = resolved-like).
  • customPriority: { id, name, color, lightColor? }[].
  • customCategory: { id, name, color }[].
  • customReactions: a map of emoji → { label, emoji } (a ReactionMap).
  • customListDataOnAnnotation (a CustomAnnotationDropdownData): the custom chip/dropdown on a thread (powers the CustomAnnotationDropdown slot). Shape:
    The option id is what a custom sidebar filter matches against (see the filters example above): set the option on annotations via this prop, filter by the same id.
  • customListDataOnComment (an AutocompleteData): custom list on a comment (autocomplete-style). Shape:
When you build a custom status/priority dropdown with primitives (Primitives), this is where the statuses you map over come from. When you read {statusOptions} / {priorityOptions} in a wireframe (Wireframe variables), these are the values.

Notes

  • Prop before wireframe. If a prop gets you the layout (e.g. filterPanelLayout="bottomSheet", panelOpenMode="sidebar"), use it: it’s far less work than a wireframe.
  • Version differences: embedMode is boolean on V1 sidebar but string on V2: match the type to the component version you’re using.
  • Framework-agnostic: in vanilla/other frameworks these are kebab-case attributes on the <velt-*> element (e.g. filter-panel-layout="bottomSheet").