Skip to content

Documentation / @expofp/schema / UrlConfig

Type Alias: UrlConfig

ts
type UrlConfig = object;

The subset tunable from the page URL query.

Type Declaration

allowConsent?

ts
optional allowConsent?: boolean;

camera?

ts
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?

ts
optional bearing?: number;

Map rotation in degrees (0–360).

camera.floor?

ts
optional floor?: string;

Floor name to activate.

camera.lat?

ts
optional lat?: number;

Center, GPS latitude (paired with lng).

camera.lng?

ts
optional lng?: number;

Center, GPS longitude (paired with lat).

camera.x?

ts
optional x?: number;

Center, floor-plan projected coordinates (paired with y).

camera.y?

ts
optional y?: number;

Center, floor-plan projected coordinates (paired with x).

camera.zoomTime?

ts
optional zoomTime?: number;

Camera movement animation duration in milliseconds.

ts
optional consent?: "ask" | "granted" | "denied" = ConsentSchema;

disableBookmarked?

ts
optional disableBookmarked?: boolean;

Disable adding entities to bookmarks.

disableFeatured?

ts
optional disableFeatured?: boolean;

Drop the featured flag from every exhibitor (no featured view).

disableGps?

ts
optional disableGps?: boolean;

Start with GPS tracking off.

enableExperimentalMaplibre?

ts
optional enableExperimentalMaplibre?: boolean;

Enable experimental MapLibre GL JS support.

enableExperimentalOutdoorMarkers?

ts
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.

filters?

ts
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?

ts
optional categories?: string[];

Category names to pre-select; opens the category filter panel.

filters.exhibitors?

ts
optional exhibitors?: boolean;

true opens the exhibitors list at boot.

filters.poiType?

ts
optional poiType?: string;

A single POI type to pre-select; also activates its search filter button.

filters.poiTypes?

ts
optional poiTypes?: string[];

POI type names to pre-select (no filter-button activation).

heatmap?

ts
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?

ts
optional enabled?: boolean;

Engage the heatmap explicitly; false vetoes an otherwise non-empty node.

heatmap.kiosk?

ts
optional kiosk?: boolean;

Narrow the yah variant to kiosk positions (ignored for booths).

heatmap.variant?

ts
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.

ts
optional hideHeaderLogo?: boolean;

Hide the header logo (and the ExpoFP logo).

hideLogoInBooth?

ts
optional hideLogoInBooth?: boolean;

Hide exhibitor logos inside booths.

intents?

ts
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";
})[];

kiosk?

ts
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?

ts
optional heading?: number;

Device heading in degrees — rotates the you-are-here marker.

kiosk.iconSizePercent?

ts
optional iconSizePercent?: number;

You-are-here icon size, in percent.

kiosk.lat?

ts
optional lat?: number;

GPS latitude (with lng, an alternative fix to x/y).

kiosk.lng?

ts
optional lng?: number;

GPS longitude.

kiosk.mapBearingDegrees?

ts
optional mapBearingDegrees?: number;

Map bearing at the home framing, degrees (map mode).

kiosk.mapCenterLat?

ts
optional mapCenterLat?: number;

Home framing center latitude (map mode).

kiosk.mapCenterLng?

ts
optional mapCenterLng?: number;

Home framing center longitude (map mode).

kiosk.mapCenterX?

ts
optional mapCenterX?: number;

Home framing center x.

kiosk.mapCenterY?

ts
optional mapCenterY?: number;

Home framing center y.

kiosk.mapInitialPtScale?

ts
optional mapInitialPtScale?: number;

The pt-scale captured when the kiosk was set up (zoom reference).

kiosk.mapPitch?

ts
optional mapPitch?: number;

Map pitch at the home framing, degrees.

kiosk.mapPitchDegrees?

ts
optional mapPitchDegrees?: number;

Map pitch at the home framing, degrees (map mode).

kiosk.mapPtScale?

ts
optional mapPtScale?: number;

The pt-scale of the saved framing.

kiosk.mapRollDegrees?

ts
optional mapRollDegrees?: number;

Map roll at the kiosk's home framing, degrees.

kiosk.mapZoom?

ts
optional mapZoom?: number;

Map zoom level at the home framing (map mode).

kiosk.uiScale?

ts
optional uiScale?: number;

Per-device UI scale preference (the applied range is 0.8–1.4).

kiosk.x?

ts
optional x?: number;

Anchor x in plan coordinates.

kiosk.y?

ts
optional y?: number;

Anchor y in plan coordinates.

kiosk.z?

ts
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.

monochrome?

ts
optional monochrome?: boolean;

Render the plan in grayscale.

noOverlay?

ts
optional noOverlay?: boolean;

validateSchema?

ts
optional validateSchema?: boolean;

visibility?

ts
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?

ts
optional controls?: boolean;

The map controls (zoom buttons, …).

visibility.header?

ts
optional header?: boolean;

The header bar — logos and the free/demo badge.

visibility.levels?

ts
optional levels?: boolean;

The floor selector.

visibility.overlay?

ts
optional overlay?: boolean;

The overlay panel — search, lists, entity details.

visibility.searchButtons?

ts
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).