Appearance
UI outlets reference
Mount with api.ui.mount(name, callback). The callback receives an HTMLElement container and a read-only context. Return cleanup for owned DOM and listeners.
Global outlets
page-header:actionsmodal-root
Brand-directory outlets
brands:topbrands:list:beforebrands:list:afterbrands:card:badges— context includessource: 'brands'andbrand
Landing outlets
landing:toplanding:shop-actions:beforelanding:shop-actions:afterlanding:featured-brands:beforelanding:featured-brands:afterlanding:brand-card:badgeslanding:new-arrivals:beforelanding:new-arrivals:afterlanding:wheel-card:badges— context includes landing wheellanding:wheel-card:actions— context includes landing wheellanding:wheel-card:decorations— context includes landing wheellanding:bottom
Wheel result and detail outlets
wheel-card:badgeswheel-card:actionswheel-card:decorationswheel-detail:actions
Wheel-card contexts contain source, the post-filter wheel, and the normalized wheelCard being rendered. Sources are by-size, by-vehicle, and by-brand.
Wheel-detail context contains source, wheel, optional exact spec, optional assets, and optional vehicle. Sources identify the spec sheet, exact detail page, vehicle-aware detail, or visualizer modal.
Interaction rules
- Badge and decoration outlets are noninteractive.
- Action outlets should render semantic buttons or accessible links where valid.
- Decorations receive no pointer input and should keep overflow bounded.
- The app remounts repeated outlets when their context changes.
- Empty contributions should return without adding DOM.
Mount callback
ts
type DomMountCallback<TContext> = (
container: HTMLElement,
context: Readonly<TContext>,
) => void | (() => void)The returned function must remove plugin-owned listeners, observers, renderer instances, and DOM. The plugin system removes API-registered mounts and styles during unregistration.
Brand-card context
ts
type BrandsCardOutletContext = Readonly<{
source: 'brands'
brand: PluginBrandRecord
}>Wheel-card context
ts
type WheelCardOutletContext = Readonly<{
source: 'by-size' | 'by-vehicle' | 'by-brand'
wheel: PluginWheelRecord
wheelCard: PluginWheelCardRecord
}>wheel is the post-filter catalog record. wheelCard contains normalized card display data, including available image, logo, size, summary, and exact-spec fields.
Landing wheel-card context
ts
type LandingWheelCardOutletContext = Readonly<{
source: 'landing'
wheel: PluginWheelRecord
}>Wheel-detail context
ts
type WheelDetailOutletContext = Readonly<{
source: 'wheel-spec-sheet' | 'wheel-detail' | 'wheel-by-vehicle' | 'visualizer'
wheel: PluginWheelRecord
spec: PluginWheelSpecRecord | null
assets: Record<string, unknown> | null
vehicle: PluginVehicleRecord | null
}>spec is null on model-level surfaces. vehicle is present only when the current workflow has vehicle context.
Listed outlets without a specialized context receive a read-only public record that may be empty.