Documentation / @expofp/schema / Data
Type Alias: Data
type Data = object;The expo data document — the __data global of the legacy data.js: every config field optional, plus the deprecated nested flags.
Type Declaration
Index Signature
[key: string]: unknownallow3dView?
optional allow3dView?: boolean;allowConsent?
optional allowConsent?: boolean;alwaysShowSidebar?
optional alwaysShowSidebar?: boolean;autoTrackingGps?
optional autoTrackingGps?: boolean;booths?
optional booths?: (
| {
[key: string]: unknown;
availColor?: string;
buyUrl?: string;
exhibitors?: number[];
externalId?: string;
holdColor?: string;
id: number;
labelColor?: string;
meta?: Record<string, string>;
name: string;
poiTypeId?: number;
price?: string;
reserveUrl?: string;
size?: string;
soldColor?: string;
status?: "onhold" | "reserved";
title?: string;
type?: string;
}
| {
[key: string]: unknown;
color?: string;
description?: string;
exhibitors?: number[];
externalId?: string;
id: number;
meta?: Record<string, string>;
name: string;
poiTypeId?: number;
special: true;
title?: string;
})[];boothTerm?
optional boothTerm?: string;busRoutes?
optional busRoutes?: boolean;Enable live bus/transport routing on the floor plan.
Disabled by default: most plans have no transit routes, and probing for them issues an extra HTTP request on every load. Set to true only for plans that actually provide bus routes.
camera?
optional camera?: object = CameraSchema;The initial camera, applied once at boot (an empty object means "don't move"). The runtime counterpart is FloorPlan.setCamera / the setCamera intent; the legacy ?centerxy=/?center=/?z=/?bearing=/?zoomtime= URL params translate into this shape.
camera.bearing?
optional bearing?: number;Map rotation in degrees (0–360).
camera.floor?
optional floor?: string;Floor name to activate.
camera.lat?
optional lat?: number;Center, GPS latitude (paired with lng).
camera.lng?
optional lng?: number;Center, GPS longitude (paired with lat).
camera.x?
optional x?: number;Center, floor-plan projected coordinates (paired with y).
camera.y?
optional y?: number;Center, floor-plan projected coordinates (paired with x).
camera.zoomTime?
optional zoomTime?: number;Camera movement animation duration in milliseconds.
categories?
optional categories?: object[];Index Signature
[key: string]: unknownconsent?
optional consent?: "ask" | "granted" | "denied" = ConsentSchema;customCss?
optional customCss?: string;customCssFonts?
optional customCssFonts?: object[];Index Signature
[key: string]: unknowncustomKioskQrCodeUrl?
optional customKioskQrCodeUrl?: string;customSetKiosk?
optional customSetKiosk?: string;Custom setkiosk phrase.
debugMode?
optional debugMode?: boolean;Debug mode: verbose logs, the in-map debug overlay, dev-leniency in error paths.
debugPattern?
optional debugPattern?: string;dimensionless?
optional dimensionless?: boolean;disableBookmarked?
optional disableBookmarked?: boolean;Disable adding entities to bookmarks.
disableFeatured?
optional disableFeatured?: boolean;Drop the featured flag from every exhibitor (no featured view).
disableGps?
optional disableGps?: boolean;Start with GPS tracking off.
disableRuntimeAlerts?
optional disableRuntimeAlerts?: boolean;enableExperimentalMaplibre?
optional enableExperimentalMaplibre?: boolean;Enable experimental MapLibre GL JS support.
enableExperimentalOutdoorMarkers?
optional enableExperimentalOutdoorMarkers?: boolean;Enable experimental outdoor PoI markers: booths on an Outdoor* layer leave the renderer scene and draw as fixed-size native MapLibre markers with clustering.
Unset or false disables the feature outright — Outdoor layers then render like any other layer, exactly as they did before it existed. Unlike enableExperimentalMaplibre this is NOT tri-state: no drawing field opts a plan in, so there is nothing for undefined to defer to.
enableIPS?
optional enableIPS?: boolean;enableRotation?
optional enableRotation?: boolean;endDate?
optional endDate?: string;events?
optional events?: object[];Index Signature
[key: string]: unknownexhibitors?
optional exhibitors?: object[];Index Signature
[key: string]: unknownexhibitorTerm?
optional exhibitorTerm?: string;exhibitorTermPlural?
optional exhibitorTermPlural?: string;expo?
optional expo?: string;expoFpAd?
optional expoFpAd?: boolean;filterButtonsConfig?
optional filterButtonsConfig?: object = FilterButtonsConfigSchema;Index Signature
[key: string]: unknownfilterButtonsConfig.isExplicit?
optional isExplicit?: boolean;filterButtonsConfig.searchButtons?
optional searchButtons?: object[];Index Signature
[key: string]: unknownfilterButtonsConfig.sortType?
optional sortType?: "custom" | "alphabetical";filters?
optional filters?: object = FiltersSchema;Search filters applied once at boot by the URL filter manager (an empty object applies nothing). Canonical URL form ?filters[categories][0]=food; the legacy ?categories=/?poiType=/?poiTypes=/?exhibitors=true keys keep working — and remain the form the floor plan writes back to the URL as the visitor changes filters.
filters.categories?
optional categories?: string[];Category names to pre-select; opens the category filter panel.
filters.exhibitors?
optional exhibitors?: boolean;true opens the exhibitors list at boot.
filters.poiType?
optional poiType?: string;A single POI type to pre-select; also activates its search filter button.
filters.poiTypes?
optional poiTypes?: string[];POI type names to pre-select (no filter-button activation).
flags?
optional flags?: object;Index Signature
[key: string]: unknownflags.busRoutes?
optional busRoutes?: boolean;Enable live bus/transport routing on the floor plan.
Disabled by default: most plans have no transit routes, and probing for them issues an extra HTTP request on every load. Set to true only for plans that actually provide bus routes.
flags.customSetKiosk?
optional customSetKiosk?: string;Custom setkiosk phrase.
flags.enableExperimentalMaplibre?
optional enableExperimentalMaplibre?: boolean;Enable experimental MapLibre GL JS support.
flags.enableExperimentalOutdoorMarkers?
optional enableExperimentalOutdoorMarkers?: boolean;Enable experimental outdoor PoI markers: booths on an Outdoor* layer leave the renderer scene and draw as fixed-size native MapLibre markers with clustering.
Unset or false disables the feature outright — Outdoor layers then render like any other layer, exactly as they did before it existed. Unlike enableExperimentalMaplibre this is NOT tri-state: no drawing field opts a plan in, so there is nothing for undefined to defer to.
flags.hideBoothBadges?
optional hideBoothBadges?: boolean;Hide booth number badges.
fpSvgJsRef?
optional fpSvgJsRef?:
| {
$ref: string;
}
| null;fp.svg.js ref (the drawing); null derives <legacyDataUrlBase>fp.svg.js.
fpSvgLayerJsRefs?
optional fpSvgLayerJsRefs?: Record<string, {
$ref: string;
}>;Per-layer fp.svg.<layerName>.js refs (by layer name), resolved on demand.
free?
optional free?: boolean;gallery?
optional gallery?: string[];gtag?
optional gtag?: string;heatmap?
optional heatmap?: object = HeatmapSchema;Heatmap mode, engaged once at boot (an empty object — the default — means no heatmap). A non-empty node engages the mode unless enabled is explicitly false, so heatmap: { variant: 'yah' } implies enabled; variant picks the dataset (booths view stats by default, yah for "You are here" QR scans; kiosk: true narrows yah to kiosk positions). Heatmap mode freezes the page URL for the whole session (the legacy contract). The legacy ?heatmap=true&type=yah&subtype=kiosk links keep working as a translation; the access token ?t= stays a separate raw query param, not config.
heatmap.enabled?
optional enabled?: boolean;Engage the heatmap explicitly; false vetoes an otherwise non-empty node.
heatmap.kiosk?
optional kiosk?: boolean;Narrow the yah variant to kiosk positions (ignored for booths).
heatmap.variant?
optional variant?: "booths" | "yah";The dataset shown: booths (the default) — booth/exhibitor view stats; yah — "You are here" QR-code scan counts, with a stripped-down monochrome presentation.
hide3dMapDefault?
optional hide3dMapDefault?: boolean;hideBookmarks?
optional hideBookmarks?: boolean;hideBookmarksLink?
optional hideBookmarksLink?: boolean;hideBoothBadges?
optional hideBoothBadges?: boolean;Hide booth number badges.
hideCategoriesLink?
optional hideCategoriesLink?: boolean;hideDirections?
optional hideDirections?: boolean;hideDownloadPdfLink?
optional hideDownloadPdfLink?: boolean;hideEventHomeLink?
optional hideEventHomeLink?: boolean;hideExhibitorBoothNumber?
optional hideExhibitorBoothNumber?: boolean;hideExhibitors?
optional hideExhibitors?: boolean;hideHeaderLogo?
optional hideHeaderLogo?: boolean;Hide the header logo (and the ExpoFP logo).
hideLanguage?
optional hideLanguage?: boolean;hideLanguageLink?
optional hideLanguageLink?: boolean;hideLogoInBooth?
optional hideLogoInBooth?: boolean;Hide exhibitor logos inside booths.
hideModeSwitchButton?
optional hideModeSwitchButton?: boolean;hideRegisterToAttendLink?
optional hideRegisterToAttendLink?: boolean;hideShareButton?
optional hideShareButton?: boolean;hideWayInformation?
optional hideWayInformation?: boolean;homeUrl?
optional homeUrl?: string;ignoreQuery?
optional ignoreQuery?: boolean;intents?
optional intents?: (
| {
args: [string];
name: "selectBooth";
}
| {
args: [string];
name: "selectExhibitor";
}
| {
args: [string];
name: "changeLanguage";
}
| {
args: [string];
name: "selectCategory";
}
| {
args: [string];
name: "select";
}
| {
args: [
| "exhibitors"
| "bookmarks"
| "visited"
| "sessions"
| "speakers"
| "tours"
| "language"];
name: "showList";
}
| {
args: [string];
name: "selectTour";
}
| {
args: [{
from?: string;
fromBookmarks?: boolean;
items?: string[];
}];
name: "openPlanner";
}
| {
args: [];
name: "startBuildRoute";
}
| {
args: [{
bearing?: number;
floor?: string;
lat?: number;
lng?: number;
x?: number;
y?: number;
zoomTime?: number;
}];
name: "setCamera";
}
| {
args: [{
controls?: boolean;
header?: boolean;
levels?: boolean;
overlay?: boolean;
searchButtons?: boolean;
}];
name: "setVisibility";
}
| {
args: [string[]];
name: "selectRoute";
}
| {
args: [string[]];
name: "selectAccessibleRoute";
}
| {
args: [string, string[]];
name: "showPathway";
}
| {
args: [{
angle?: number;
lat?: number;
lng?: number;
x: number;
y: number;
z?: string | number;
}, boolean, number?];
name: "selectCurrentPosition";
})[];isRebooking?
optional isRebooking?: boolean;isTrial?
optional isTrial?: boolean;kiosk?
optional kiosk?: object = KioskSchema;The kiosk anchor — where a kiosk device stands and how its camera is framed, applied at boot when the device has no locally-saved kiosk (the on-device SetKiosk flow wins; localStorage['kiosk']='0' disables both). Canonical URL form ?kiosk[x]=…; the legacy kiosk_* params stay the per-navigation translation and ?kiosk=1/0 keeps toggling kiosk mode.
kiosk.heading?
optional heading?: number;Device heading in degrees — rotates the you-are-here marker.
kiosk.iconSizePercent?
optional iconSizePercent?: number;You-are-here icon size, in percent.
kiosk.lat?
optional lat?: number;GPS latitude (with lng, an alternative fix to x/y).
kiosk.lng?
optional lng?: number;GPS longitude.
kiosk.mapBearingDegrees?
optional mapBearingDegrees?: number;Map bearing at the home framing, degrees (map mode).
kiosk.mapCenterLat?
optional mapCenterLat?: number;Home framing center latitude (map mode).
kiosk.mapCenterLng?
optional mapCenterLng?: number;Home framing center longitude (map mode).
kiosk.mapCenterX?
optional mapCenterX?: number;Home framing center x.
kiosk.mapCenterY?
optional mapCenterY?: number;Home framing center y.
kiosk.mapInitialPtScale?
optional mapInitialPtScale?: number;The pt-scale captured when the kiosk was set up (zoom reference).
kiosk.mapPitch?
optional mapPitch?: number;Map pitch at the home framing, degrees.
kiosk.mapPitchDegrees?
optional mapPitchDegrees?: number;Map pitch at the home framing, degrees (map mode).
kiosk.mapPtScale?
optional mapPtScale?: number;The pt-scale of the saved framing.
kiosk.mapRollDegrees?
optional mapRollDegrees?: number;Map roll at the kiosk's home framing, degrees.
kiosk.mapZoom?
optional mapZoom?: number;Map zoom level at the home framing (map mode).
kiosk.uiScale?
optional uiScale?: number;Per-device UI scale preference (the applied range is 0.8–1.4).
kiosk.x?
optional x?: number;Anchor x in plan coordinates.
kiosk.y?
optional y?: number;Anchor y in plan coordinates.
kiosk.z?
optional z?: string | number | null;Floor: the level name (a numeric index is accepted and stringified). Nullable — the on-device SetKiosk flow writes null for a plan with no layers, and that record round-trips through localStorage.
levelTerm?
optional levelTerm?: string;locale?
optional locale?: string;logo?
optional logo?: string;maplibre?
optional maplibre?: object = MapLibreConfigSchema;Index Signature
[key: string]: unknownmaplibre.offline?
optional offline?: boolean;The style and everything it references (tiles, sprites, glyphs) are reachable without network — lets the map stay enabled while navigator.onLine is false.
maplibre.style?
optional style?: any;Inline style object (takes precedence over styleUrl). With no style URL to resolve against, every URL inside it must already be full.
maplibre.styleUrl?
optional styleUrl?: string;Full, rooted, or relative URL of a MapLibre style document, fetched by MapLibre GL itself. Its internal resources are resolved by the SDK before MapLibre consumes the loaded style.
monochrome?
optional monochrome?: boolean;Render the plan in grayscale.
noFeatured?
optional noFeatured?: boolean;noOverlay?
optional noOverlay?: boolean;offHistory?
optional offHistory?: boolean;onlyFeaturedExhibitors?
optional onlyFeaturedExhibitors?: boolean;poiTypes?
optional poiTypes?: object[];Index Signature
[key: string]: unknownpreviewMode?
optional previewMode?: boolean;registerUrl?
optional registerUrl?: string;reserveButtonTerm?
optional reserveButtonTerm?: string;reserveInstructions?
optional reserveInstructions?: string;searchText?
optional searchText?: string;sendLoginLinkUrl?
optional sendLoginLinkUrl?: string;shortLevelName?
optional shortLevelName?: boolean;showCategories?
optional showCategories?: boolean;showCompaniesAndBooths?
optional showCompaniesAndBooths?: boolean;showDebugButton?
optional showDebugButton?: boolean;showLevelLabel?
optional showLevelLabel?: boolean;showOtherSpaces?
optional showOtherSpaces?: boolean;startDate?
optional startDate?: string;subtitle?
optional subtitle?: string;title?
optional title?: string;trackerUrl?
optional trackerUrl?: string;trialExpiresAt?
optional trialExpiresAt?: string;viewerMode?
optional viewerMode?: boolean;viewOptimizationLevel?
optional viewOptimizationLevel?: number;visibility?
optional visibility?: object = VisibilitySchema;Visibility of the map chrome, applied once at boot (an empty object leaves the chrome untouched; a non-empty one resets every omitted element to visible — the legacy ?hide= list semantics). The runtime counterpart is FloorPlan.setVisibility / the setVisibility intent; the legacy ?hide=a,b deep link keeps its store-level translation.
visibility.controls?
optional controls?: boolean;The map controls (zoom buttons, …).
visibility.header?
optional header?: boolean;The header bar — logos and the free/demo badge.
visibility.levels?
optional levels?: boolean;The floor selector.
visibility.overlay?
optional overlay?: boolean;The overlay panel — search, lists, entity details.
visibility.searchButtons?
optional searchButtons?: boolean;The search-filter buttons row. Omitted, it follows overlay; an explicit true keeps the buttons while the overlay is hidden — clicking one opens the overlay on demand (?visibility[overlay]=false&visibility[searchButtons]=true).
wfDataJsRef?
optional wfDataJsRef?:
| {
$ref: string;
}
| null;wf.data.js (wayfinding graph) ref; null without legacy data.