Skip to main content
Source of truth: exhaustive for what it covers. Generated from Velt directive metadata.
  • If a name isn’t on this page, it doesn’t exist: don’t use it (a missing identifier resolves to undefined / 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: this page is exhaustive for the directive syntax: the velt-if / velt-class / velt-class-<name> / velt-data directives and the {…} token grammar (operators, nested access, the three usage forms). The slot catalog (which *-wireframe slots each component exposes) is delegated to Wireframe components; the variable catalog (every {name} per component) is delegated to Wireframe variables.
How to read live state inside a wireframe. Used by Wireframes. This page is the syntax (operators, nested access, the three usage forms). For the complete variable catalog (every {name}, grouped by feature, with the 🔑 state flags) see Wireframe variables.
A token not in Wireframe variables resolves to undefined: only use names listed there (source-of-truth invariant).

Token syntax

A token is {…}. The resolver matches /\{(.*?)\}/g and supports nested paths:

The three usage forms

Booleans are most useful in velt-if/velt-class; strings/numbers/dates in velt-data; compound objects via deep paths (e.g. field="annotation.from.name").

Show or hide a group with VeltIf

Wrap wireframe components and custom markup in VeltIf when the same condition should apply to a group of elements.

Show or hide one wireframe slot

Use the velt-if attribute when the condition applies to a single wireframe component.
field="context.someProperty" resolves from the component’s local UI state context (e.g. the Inline Comments Section’s own context), not from the annotation. To read context stored on the annotation, use field="annotation.context.someProperty".

Toggle CSS classes with velt-class

Operators allowed in velt-if

Examples: condition="{enableResolve} && {canResolveAnnotation}", condition="{commentIndex} === 0", condition="!{noCommentsFound}". Anything outside this whitelist is stripped before evaluation (safe by design).

Strict CSP policy

Some environments enforce a strict Content Security Policy that disallows unsafe-eval. If your CSP blocks condition evaluation, enable Velt’s safe evaluator before rendering your wireframes.

Mapped vs. flat-config features (which name form to use)

Two access conventions exist, as a rule of thumb:
  • Mapped: use short aliases like {annotation.from.name}: Comment Dialog, Comments Sidebar, Comment Bubble, Inline Comments Section, Multi-Thread Comment Dialog, Text Comment, Notifications Panel, Notifications Tool, Activity Log.
  • Flat-config: use the explicit {componentConfig.<name>} form: Cursor, Presence, Huddle, Recording, Transcription, View Analytics, Area, Arrow, Tag, Reactions, Selection, Rewriter, Comments Tool, Sidebar Button, Autocomplete.
If a short alias resolves to undefined in a flat-config feature, fall back to {componentConfig.<name>}. Mapped features accept the explicit form too; it’s just not required.

Variables that support nested access

Only these root names allow {root.nested.field}; any other variable resolves to its root only. (Per-component variable lists with examples: Wireframe variables.)
If a deep path returns undefined, first check the root is on this list.

Frequently used variables (Comment Dialog / Sidebar)

A small starter set: see the per-feature page for the full list and types:

Debugging a token that shows nothing

If a token renders undefined/blank, check, in order:
  1. Spelling: exact name from Wireframe variables (case-sensitive).
  2. Nested access: is the root in the nested-access list above? If not, you can only read its root.
  3. Context: are you inside a slot that actually receives that variable? (e.g. {comment}/{commentIndex} exist only inside thread-card descendants; {notification} only in the notifications panel.)
  4. Mapped vs flat: for flat-config features use {componentConfig.<name>}.
The full variable list (and which roots allow nested access) is in Wireframe variables.