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

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, R9b.)

Wireframes: slot trees + tokens

Reactions are flat-config: read tokens as {componentConfig.<x>}: 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).