Skip to content

Events reference

Every callback receives { type, timestamp, data }. Known names infer their payload through the SDK.

Application and route events

EventPayload summary
app:settings-loadedResolved public options and configured language names.
app:before-mountPublic configurator snapshot before the interface mounts.
app:mountedPublic snapshot immediately after the interface mounts.
app:readyPublic snapshot after initial plugin lifecycle completes.
route:changedSerializable to and from routes.
theme:changedCurrent light or dark theme.
language:changedCurrent language code.

Landing and search events

EventPayload summary
landing:viewedLanding-view context.
landing:featured-brands-loadedFeatured brand records.
landing:featured-wheels-loadedFeatured wheel records.
landing:data-load-failedPublic error message.
landing:section-visibleSection ID, plugin ID, and placement.
landing:section-item-selectedSection details, item ID, and action.
landing:section-action-failedSelection details and failure message.
search:navigation-openedOptional source.
search:vehicle-openedOptional source.
search:vehicle-submittedSubmitted public search data.
search:size-openedOptional source.
search:size-submittedSubmitted public search data.

Catalog and product events

EventPayload summary
brands:viewedBrand-directory source.
brands:loadedFiltered brands plus original and result counts.
brand:selectedBrand identity, record, source, and destination when available.
wheels:loadedSource, filters, result counts, and optional brand or vehicle.
wheel:selectedWheel, source, resolved destination, and available context.
wheel:viewedWheel image ID and available detail data.
wheel:spec-size-selectedSelected model-level size information.
wheel:spec-selectedSelected wheel, vehicle, and exact spec when available.

RFQ, campaign, modal, and error events

EventPayload summary
rfq:openedWheel, vehicle, tire-selection state, and tire inclusion.
rfq:dealer-selectedAvailable public identifiers for the selected dealer.
rfq:submittedSubmitted payload, response, success state, wheel, and vehicle.
campaign:shownCampaign ID, plugin ID, trigger, and optional data.
campaign:dismissedCampaign ID, plugin ID, and dismissal reason.
campaign:actionCampaign ID, plugin ID, and selected action.
modal:openedModal ID, plugin ID, title, and size.
modal:closedModal identity and close reason.
plugin:errorPlugin ID, plugin lifecycle phase, and public error message.

Custom event names remain type-compatible when a plugin supplies an explicit payload type, but the visualizer emits only documented product names.

Event envelope

Every subscription receives the event name, a millisecond timestamp, and its typed payload:

ts
type ConfiguratorEvent<T, TName extends string> = {
  type: TName
  timestamp: number
  data: T
}

Lifecycle payloads

app:settings-loaded contains approved public options and configured language names:

ts
type AppSettingsLoadedPayload = {
  options: PluginSettingsOptions
  languages: Array<{ langName: string }>
}

app:before-mount, app:mounted, and app:ready carry a ConfiguratorSnapshot.

Route and preference payloads

ts
type RouteChangedPayload = {
  to: SerializableRoute
  from: SerializableRoute
}

type SerializableRoute = {
  name: string | null | undefined
  path: string
  fullPath: string
  query: Record<string, unknown>
  params: Record<string, unknown>
}

type ThemeChangedPayload = { theme: 'light' | 'dark' }
type LanguageChangedPayload = { lang: string }

Landing payloads

EventFields
landing:viewedPublic landing context when available.
landing:featured-brands-loadedbrands: PluginBrandRecord[]
landing:featured-wheels-loadedwheels: PluginWheelRecord[]
landing:data-load-failedmessage: string
landing:section-visiblesectionId, pluginId, placement
landing:section-item-selectedSection fields plus itemId and action
landing:section-action-failedSelection fields plus public message

Catalog payloads

ts
type BrandsLoadedPayload = {
  source: 'brands'
  brands: PluginBrandRecord[]
  originalCount: number
  resultCount: number
}

type BrandSelectedPayload = {
  source?: string
  brandId: string | number
  brand?: PluginBrandRecord
  destination?: PluginRouteLocation
}

type WheelsLoadedPayload = {
  source: string
  filters: Record<string, unknown>
  resultCount: number
  recordCount: number
  brand?: PluginBrandRecord | null
  vehicle?: unknown
}

Wheel events contain the following supported fields:

EventFields
wheel:selectedsource, wheel, and optional wheelCard, destination, brand, vehicle, and filters
wheel:viewedsource, wheelImageId, and optional partNumber, details, specs, and assets
wheel:spec-size-selectedsource and optional wheelImageId, details, and pill
wheel:spec-selectedsource and optional wheel, vehicle, and spec

Fields typed as unknown must be narrowed before use. Do not assume that optional context is available on every product surface.

RFQ payloads

ts
type RFQOpenedPayload = {
  wheel: unknown
  vehicle?: unknown
  initialIsSelecting: '' | 'TIRES'
  includesTires: boolean
}

type RFQDealerSelectedPayload = {
  dealerId?: string | number
  dealerCode?: string | number
}

type RFQSubmittedPayload = {
  payload: unknown
  rfq: unknown
  response: unknown
  success: boolean
  wheel: unknown
  vehicle?: unknown
}

Treat RFQ records as sensitive customer interaction data. Forward only explicitly required fields to customer-owned systems.

Campaign and modal payloads are documented with the Campaigns API and Plugin modals API. plugin:error contains pluginId, phase, and a public message.

Icon Visualizer developer documentation