Skip to main content
Emoji reactions: the add-reaction tool, the emoji picker panel, reaction pins (with a hover tooltip listing who reacted), and an inline reactions section. Wireframed + custom emoji sets.

Components

Full examples: the per-component pages have complete tabbed code examples and screenshots: Inline reactions and Reactions wireframe variables.
There is no VeltReactionPin React primitive: customize pins only via VeltReactionPinWireframe / CSS. Reaction data/actions live on the comment element, so there’s no useReactionUtils (see hooks).

Config props

No general config props beyond the custom emoji set. Replace the default reactions with your own via the customReactions prop (ReactionMap = { [reactionId]: { url?, svg?, emoji? } }):
(Malformed customReactions JSON silently no-ops.)

CSS: stateful classes

(Override with !important because Velt’s runtime styles are high-specificity; see CSS.)

Wireframes: slot trees + tokens

Reactions are flat-config (what this means), so read tokens as {componentConfig.<x>} (🔑 = state flag you’ll typically use in velt-if / velt-class): pin {componentConfig.isReactionSelectedByCurrentUser} 🔑, {componentConfig.tooltipVisible} 🔑, {componentConfig.annotation.reactions.length}, {componentConfig.type} ('comment'|'inline'|'timeline'|'standalone'); inline section {componentConfig.skeletonLoading} 🔑, {componentConfig.annotations.length}. type="standalone" renders even at 0 reactions; type="timeline" is the compact variant.

Headless hooks

Reactions are actions on the comment element: (No useReactionUtils; for custom emoji config call setCustomReactions on the reaction/comment element.)

Limitations

  • No standalone reaction-pin primitive (wireframe/CSS only).
  • Two distinct emoji fields: picker items use emoji.value/.key; pins render annotation.icon.
  • shadowDom defaults differ (inline section true, pin/tool false).