Skip to main content
Source of truth: exhaustive for what it covers. Generated from Velt component metadata.
  • If a component or slot isn’t on this page, it doesn’t exist: don’t use it (a missing -wireframe tag renders nothing).
  • Never invent or guess a name; use only identifiers that appear verbatim here or that you verified against ground truth and added here.
  • Scope: exhaustive for the customization-surface components + slots of the in-scope features (comments, notifications, recorder, video, transcription, activity log, reactions, autocomplete, presence, cursors). Features with no customization surface (huddle, areas, arrows, tags, rewriter, selection, user-invite/request, view-analytics) are out of scope.
A flat list of every Velt component that has a customization surface: top-level components and every sub-component / wireframe slot, small to small: with a short definition of what each one does. Use it to look up what any customizable component is, or to figure out which component a design element corresponds to. (Features with no customization surface are out of scope here: see the next line.) Covers the features that have a customization surface (wireframe slots or composable primitives): comments, notifications, recorder, video player, transcription, activity log, reactions, autocomplete, presence, cursors. Features with neither (huddle, areas, arrows, tags, rewriter, selection, user-invite, user-request, view-analytics) are not listed. Names are the wireframe custom-element tags (e.g. velt-comment-dialog-header-wireframe); the React primitive (e.g. VeltCommentDialog) is noted in the definition for top-level components. Names follow the source-of-truth invariant.
Intent layer. Entries marked Intent · below carry a purpose / right-tool / wrong-tool note. They exist because the surface is commonly misapplied: applying the name literally produces a working-but-wrong UI. Read the Intent note before picking the component for a requirement: it tells you when to use a different mechanism instead. This follows the entry contract’s “right tool, not literal tool” rule.

Comment surfaces: anchored vs. statically-placed

Every comment surface is one of two kinds, and the kind decides the customization approach (per Decision tree and the entry contract’s Composition layer):
  • Anchored / Velt-positioned: Velt computes the surface’s on-page position (it tracks an anchor element, a pin coordinate, or the live page). Customize these with wireframes + CSS. Dropping to primitives or headless forfeits Velt’s positioning/anchoring: you would have to re-implement coordinate tracking, scroll-following, and z-index management yourself, which Velt does for free. Surfaces: the floating pin comment dialog (velt-comment-dialog-wireframe), comment pins (velt-comment-pin-wireframe), comment bubbles (velt-comment-bubble-wireframe), reaction pins, cursors (velt-cursor-pointer-wireframe), the minimap, and the floating multi-thread dialog (velt-multi-thread-comment-dialog-wireframe).
  • Statically-placed: you place the surface in your own layout (a panel, a column, an inline block); Velt does no positioning. There is no positioning penalty for primitives or headless here: reach for whichever rung the requirement needs. Surfaces: the sidebar (VeltCommentsSidebar / VeltCommentsSidebarV2), the inline comments section (velt-inline-comments-section-wireframe), and the notifications panel (velt-notifications-panel-wireframe).

Comments

Comment surfaces: text / canvas / chart primitives

These are additional anchored comment surfaces (Velt computes their on-page position from the anchor: a text span, a canvas coordinate, or a chart data point). Customize with wireframes + CSS; dropping to primitives/headless forfeits Velt’s positioning.

Comment dialog: config sub-components (standalone)

Standalone, composable parts of the comment dialog: each renders a real velt-comment-dialog-* live element and is an anchored part of the dialog (it inherits the dialog’s Velt-computed position). All accept annotationId (the annotation context) plus the common defaultCondition / inlineCommentSectionMode. Use them to compose a custom dialog layout from the individual controls.
  • velt-comment-dialog-visibility-dropdown-content: React: VeltCommentDialogVisibilityDropdownContent. The open menu panel of visibility options.
  • velt-comment-dialog-visibility-dropdown-content-private: React: VeltCommentDialogVisibilityDropdownContentPrivate. The “private” option in the menu.
  • velt-comment-dialog-visibility-dropdown-content-public: React: VeltCommentDialogVisibilityDropdownContentPublic. The “public” option in the menu.
  • velt-comment-dialog-visibility-dropdown-trigger: React: VeltCommentDialogVisibilityDropdownTrigger. The control that opens the dropdown.
  • velt-comment-dialog-visibility-dropdown-trigger-icon: React: VeltCommentDialogVisibilityDropdownTriggerIcon. The icon on the trigger showing the current scope.
  • velt-comment-dialog-visibility-dropdown-trigger-label: React: VeltCommentDialogVisibilityDropdownTriggerLabel. The text label on the trigger naming the current scope.

User selector dropdown (wireframe family)

A wireframe-only family (pure velt-*-wireframe slots: there is no separate live config element) that templates one selectable user row in a user/assignee-selection dropdown: it lays out the candidate’s avatar, name, email, and an error indicator. It is the per-option row template the assignee picker renders for each collaborator. Anchored: it renders inside the Velt-positioned dropdown popover, so it inherits that surface’s computed position; keep it on wireframes+CSS rather than placing it statically. Distinct from the comment-dialog assign controls (velt-comment-dialog-assign-dropdown / velt-comment-dialog-assign-menu-wireframe): those are the assignee picker control/menu bound to a thread’s assignTo, whereas this family is the reusable user-row template (avatar/name/email/error) the selection surface fills per candidate. None of these slots take input props beyond the common veltIf / veltClass / variant.
  • velt-user-selector-dropdown-avatar-wireframe: React: VeltUserSelectorDropdownWireframe.Avatar. The candidate user’s avatar.
  • velt-user-selector-dropdown-name-wireframe: React: VeltUserSelectorDropdownWireframe.Name. The candidate user’s display name.
  • velt-user-selector-dropdown-email-wireframe: React: VeltUserSelectorDropdownWireframe.Email. The candidate user’s email.
  • velt-user-selector-dropdown-error-icon-wireframe: React: VeltUserSelectorDropdownWireframe.ErrorIcon. An error indicator shown on the row (e.g. when the user cannot be resolved/selected).

Notifications

Recorder

Video Player

Transcription

Activity Log

Reactions

Autocomplete (@mentions)

Presence

Cursors