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-datadirectives and the{…}token grammar (operators, nested access, the three usage forms). The slot catalog (which*-wireframeslots each component exposes) is delegated toWireframe components; the variable catalog (every{name}per component) is delegated toWireframe variables.
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.
Token syntax
A token is{…}. The resolver matches /\{(.*?)\}/g and supports nested paths:
The three usage forms
Booleans are most useful invelt-if/velt-class; strings/numbers/dates invelt-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.
- React / Next.js
- Other Frameworks
Show or hide one wireframe slot
Use thevelt-if attribute when the condition applies to a single wireframe component.
- React / Next.js
- Other Frameworks
Print a value with VeltData
- React / Next.js
- Other Frameworks
Toggle CSS classes with velt-class
- React / Next.js
- Other Frameworks
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 disallowsunsafe-eval. If your CSP blocks condition evaluation, enable Velt’s safe evaluator before rendering your wireframes.
- React / Next.js
- Other Frameworks
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.
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.)
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 rendersundefined/blank, check, in order:
- Spelling: exact name from
Wireframe variables(case-sensitive). - Nested access: is the root in the nested-access list above? If not, you can only read its root.
- 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.) - Mapped vs flat: for flat-config features use
{componentConfig.<name>}.
The full variable list (and which roots allow nested access) is in Wireframe variables.

