Skip to Content
UI ComponentsComponent Events

Component Events

Base components emit normalized events so flows can branch, data can be captured, and analytics stay consistent. The lists below map directly to components that exist in src/components/* (excluding games and diagram tooling).

Visibility lifecycle

EventFired byPayload highlights
component_viewedAny visual component (Banner, CardsPack, etc.) when it becomes visible on screen.{ componentId, viewport: "full" | "partial" }
component_hiddenSame components when they exit the viewport or the page closes.{ componentId, reason: "scroll" | "page_exit" }

These lifecycle events power simple “impression” metrics without relying on page-level events.

Action & CTA events

EventFired byPayload highlights
button_clickedButton.vue, Banner.vue/PrizeBanner.vue CTA slots.{ componentId, label, value? }
banner_dismissedConnectionBanner when the user closes the notice.{ componentId }
card_selectedCardsPack, TaskList when a card or task is tapped.{ componentId, itemId }
photo_slider_changedPhotoSlider after swipe/arrow navigation.{ componentId, index }
achievement_viewedAchievementsList when a badge details view opens.{ componentId, achievementId }
leaderboard_viewedLeaderboard when a user scrolls into the widget or expands it.{ componentId }

Game events

EventFired byPayload highlights
lottery:checkDaily Reward Picks when the player confirms their selected cards.{ componentId, selectedCards, introPayloadUrl, balanceRemaining }
lottery:completedDaily Reward Picks when the check action finishes the game flow.{ componentId, balanceRemaining }

Input & form events

EventFired byPayload highlights
textinput_changedTextInput inside LeadForm/AuthPanel.{ componentId, field, valueLength }
checkbox_changedCheckbox, typically bound to consent fields.{ componentId, value: boolean }
codeinput_completedCodeInput when all slots are filled.{ componentId, digits }
form_submittedLeadForm when validation succeeds.{ componentId, fields, valid }
auth_submittedAuthPanel when credentials/OTP sent.{ componentId, flow: "magic_link" | "otp" }

These events feed node logic (branch, compute) to continue the flow only after successful submissions.

Status & utility events

EventFired byPayload highlights
timer_started / timer_expiredTimer component; helps gate limited-time offers.{ componentId, durationMs }
confetti_shownConfettiOverlay when celebration animation plays.{ componentId, trigger }
status_badge_updatedStatusBadge when bound data changes state.{ componentId, state }
skeleton_replacedSkeleton when real data arrived and placeholder disappears.{ componentId }

Page/system anchors

EventPurpose
page_displayedFired whenever a page node becomes active. Includes pageId, experiment metadata, and preview flag.
page_closedEmitted on navigation away (success, dismissal, timeout).
preview_time_override_appliedLogged when Time Travelling offsets the preview clock, so downstream analytics can ignore synthetic timestamps.

Using the catalog

  • Node transitions can listen for these events directly (e.g., move to “Next Page” only after card_selected firs for a specific componentId).
  • Analytics gets a consistent schema regardless of which base component triggered the event.
  • Partners can extend the catalog with custom events, but aligning with these base names keeps Studio automation (validation, wiring) working out of the box.
Last updated on