Changelog
3.7.8 (2026-06-18)
🩹 Fixes
- Viewer mode: the search box home button now uses a solid icon with a highlighted style.
- Maintenance: upgrade the build and test toolchain (Nx 23, Vitest 4, TypeScript 6, Babel 8) and switch to Vite's native tsconfig path resolution. No changes to the public API or runtime behavior.
3.7.7 (2026-06-17)
🩹 Fixes
- Standardize type-only imports to inline
import { type X }syntax. Internal code-style change with no impact on runtime behavior or the published API.
3.7.6 (2026-06-17)
🩹 Fixes
- Fix maps misrouting when opened via links carrying analytics parameters (Google Analytics gl/_ga, ad-click ids, utm*).
3.7.5 (2026-06-17)
🩹 Fixes
- Fix wayfinding animation by updating the underlying rendering engine to its latest release.
3.7.4 (2026-06-16)
🩹 Fixes
- Fix rebooking links sometimes opening as a regular floor plan instead of rebooking mode. The floor plan state could initialize more than once and corrupt exhibitor data through a race condition; state now initializes exactly once after data loads, so rebooking mode activates reliably.
3.7.3 (2026-06-16)
🩹 Fixes
- Fix kiosk coordinates not being saved to the database when an existing kiosk is edited. Editing a kiosk's position, heading, scale, or camera now updates the stored record instead of only saving locally.
3.7.2 (2026-06-16)
🩹 Fixes
- Category search buttons now display the correct exhibitor count and highlight matching booths on the floor plan when selected.
3.7.1 (2026-06-15)
🩹 Fixes
- Fix kiosk mode so the map can be zoomed and clicked again — the kiosk panel overlay no longer blocks interaction with the map underneath it.
3.7.0 (2026-06-15)
🚀 Features
- Add getGeoConfig() to read the map's geographic configuration: its bearing (degrees clockwise from north; 0 when the map is north-aligned) and the GPS anchor points (p0, p1, p2) used to georeference the plan. Returns null when the plan has no GPS configuration.
3.6.8 (2026-06-12)
🩹 Fixes
- Fix icons in bus routes by updating the rendering engine.
3.6.7 (2026-06-11)
🩹 Fixes
- Update the rendering engine to its newest release.
3.6.6 (2026-06-11)
🩹 Fixes
- Update the rendering engine to the latest version.
3.6.5 (2026-06-11)
🩹 Fixes
- Allow swapping the route start and end points in wayfinding even when one of them has not been chosen yet.
3.6.4 (2026-06-10)
🩹 Fixes
- Fix multibooth wayfinding to route from the selected exhibitor instead of the first one listed alphabetically; minor booth-color and detail-panel UI refinements.
3.6.3 (2026-06-10)
🩹 Fixes
- Open the debug panel with 7 quick taps in a screen corner — works on kiosks and touch devices without a keyboard
3.6.2 (2026-06-10)
🩹 Fixes
- Update bundled Sentry error-monitoring dependency to 10.57
3.6.1 (2026-06-10)
🩹 Fixes
- Maintenance: internal build and lint tooling updates. No changes to published package behavior.
3.6.0 (2026-06-09)
🚀 Features
- Wayfinding routes can now start from or end at any point on the map, not only booths.
3.5.2 (2026-06-09)
🩹 Fixes
- Keep booth labels oriented correctly when rotating MapLibre maps.
3.5.1 (2026-06-08)
🩹 Fixes
- Expose a window.__expofpReady latch alongside the expofp:ready event so listeners that attach after the plan is ready can still detect readiness.
3.5.0 (2026-06-08)
🚀 Features
- Add data.flags.customSetKiosk to override the kiosk-mode trigger command; improve search to match mid-string fuzzy hits and handle HTML tags and casing in description fallback.
3.4.5 (2026-06-05)
🩹 Fixes
- Improve the debug settings panel layout so each setting's control sits beside its label, with text inputs filling the available width, and the controls and action buttons reflow onto their own lines on narrow screens.
3.4.4 (2026-06-05)
🩹 Fixes
- Fix the maplibre debug override setting.
3.4.3 (2026-06-05)
🩹 Fixes
- Fix the floor plan appearing blank in some Android WebView embeds, where the map could collapse to zero size.
3.4.2 (2026-06-05)
🩹 Fixes
- Fix the on-screen debug console not opening on Android and other touch devices: the activation shortcut is now recognized from soft-keyboard (IME) input, not only physical keyboards.
3.4.1 (2026-06-04)
🩹 Fixes
- Sort the debug settings panel alphabetically so options are easier to find.
- Add a debug settings override to force the experimental Maplibre map on or off (or inherit the default), independent of event data.
- Improve accessibility across floor plan UI components and fix minor rendering issues in speaker and entity lists.
3.4.0 (2026-06-04)
🚀 Features
- Add Maplibre-based map rendering with offline tile support and related floorplan integration updates.
3.3.8 (2026-06-04)
🩹 Fixes
- Sync with upstream main: refactor internal UI components into a presentation/container architecture. No public API changes.
3.3.7 (2026-06-03)
🩹 Fixes
- Update bundled and peer dependencies (Sentry error reporting and React) to their latest patch releases for stability and bug fixes.
3.3.6 (2026-06-03)
🩹 Fixes
- Improve rebooking-mode UX (exhibitors panel alignment, close button, and reset behavior), focus the blue dot when targeting a position via URL parameter, and rename the kiosk location label to "Your Location".
3.3.5 (2026-06-03)
🩹 Fixes
- Internal: add Storybook dev setup with CI smoke tests — no SDK-facing changes.
3.3.4 (2026-06-02)
🩹 Fixes
- Fix map rendering so guided-tour pathway layers stay visible above booth badges
3.3.3 (2026-06-02)
🩹 Fixes
- The Intercom support chat no longer appears on kiosk displays.
3.3.2 (2026-05-31)
🩹 Fixes
- Debug overlay now displays as a translucent, blurred panel over the floor plan instead of a solid black screen, keeping the floor plan visible underneath while debugging.
3.3.1 (2026-05-29)
🩹 Fixes
- Show an "Event not found" message when an event's data cannot be loaded, instead of leaving a blank or broken floor plan.
3.3.0 (2026-05-29)
🚀 Features
- Danish (
da) is now available as a UI language for the floor plan viewer.
3.2.16 (2026-05-28)
🩹 Fixes
- Removed an unused
jspdfruntime dependency, fixing installation failures for SDK consumers on pnpm 11. Workspace tooling also upgraded to pnpm 11.
3.2.15 (2026-05-28)
🩹 Fixes
- Update internal dependencies and build tooling to their latest compatible versions.
- Sync with upstream main: tour launch on mobile collapses overlay to medium.
3.2.14 (2026-05-20)
🩹 Fixes
- Internal refactor: extract pure UI primitives (Alert, Badge, Button, etc.) into separate modules — no functional changes for SDK consumers.
3.2.13 (2026-05-19)
🩹 Fixes
- Add a per-event
flagsbag ondata.flags(typed viaFloorPlanFlags).enableExperimentalReroutingnow reads fromdata.flags.enableExperimentalRerouting, falling back to the legacyfpGeo.properties.config.enableExperimentalReroutingso existing events keep working.
3.2.12 (2026-05-19)
🩹 Fixes
- Floor plan host elements no longer receive the auto-applied
expofp-floorplan-defaultclass. The class was an internal marker (debug overlay) and was never part of the documented public API. If your CSS targeted.expofp-floorplan-default, switch to a selector you control on the container element (e.g. an#idor your own class).
3.2.11 (2026-05-19)
🩹 Fixes
- Embedding the floor plan in a custom container no longer requires
!importantin your CSS. Default layout styles (position,inset,width,height) are now applied via a low-specificity stylesheet, so any#floorplan { ... }rule in your page beats the SDK's defaults naturally. Useful for in-flow embeds.
3.2.10 (2026-05-15)
🩹 Fixes
- Visible-area calculation now respects camera rotation; previously a rotated map could over-report which booths were on-screen.
3.2.9 (2026-05-13)
🩹 Fixes
- Restore booth polygon-bounds in wayfinding graph candidate search; refine free-license banner typography.
3.2.8 (2026-05-12)
🩹 Fixes
- Fix map overlay visible-rect recalc and wayfinding transition selection; remove legacy
?yah=URL parameter (Kiosk default still supported).
3.2.7 (2026-05-11)
🩹 Fixes
- Fix: Isolate the Intercom launcher in a shadow DOM to prevent floor-plan styles from leaking into the chat widget.
3.2.6 (2026-05-07)
🩹 Fixes
- Fix: passing
focus=falsewhen reporting current position no longer triggers camera refocus or reroute.
3.2.5 (2026-05-07)
🩹 Fixes
- Fix multi-floor bookmark/visited highlight and camera fit, blue-dot pan when GPS is outside the area map, and make wayfinding rerouting opt-in via
fpGeo.
3.2.4 (2026-05-06)
🩹 Fixes
- Floorplan now fills the dynamic viewport on mobile (no jump as the browser chrome collapses) and disables the page-level pull-to-refresh gesture so it cannot interrupt floorplan interactions on iOS Safari.
3.2.3 (2026-05-06)
🩹 Fixes
- Silence a benign React 19 dev warning from
mobx-react-liteat the SDK entry.
3.2.2 (2026-05-06)
🩹 Fixes
- Avoid a stray React dev warning when entering kiosk edit mode.
3.2.1 (2026-05-06)
🩹 Fixes
- Internal QR code refactor (no behavior change).
3.2.0 (2026-05-06)
🚀 Features
- Add
selectAccessibleRoute()to restrict wayfinding to accessible-only segments.
3.1.16 (2026-05-06)
🩹 Fixes
- Debug panel: custom-setting registration moved from
window.efpDebug.settings[key] = schematowindow.efpDebugUi[key] = schema. Thelabeloption has been removed — the setting's key is now used as the heading text in the panel. - Fix the floor plan failing to load on Safari 14 due to a
SyntaxErrorin the JSON import helper. The loader now detects browsers without dynamic-import attribute support and falls back tofetch.
3.1.15 (2026-05-06)
🩹 Fixes
- Bump
@expofp/rendererto 3.1.6
3.1.14 (2026-05-05)
🩹 Fixes
- Debug mode now uses the namespaced
efp:debuglocalStorage key withtrue/falsevalues (previouslydebugwith1/0). The toggle is registered with thewindow.efpDebug.settingsregistry for the debug panel.
3.1.13 (2026-05-05)
🩹 Fixes
- Debug panel: register custom settings from any code via
window.efpDebug.settings— no@expofp/debugimport required.
3.1.12 (2026-05-05)
🩹 Fixes
- Cookie consent banner: restore bottom-left placement on desktop
3.1.11 (2026-05-05)
🩹 Fixes
- Viewer mode: refined Search and Menu styling, smoother overlay animation
3.1.10 (2026-05-05)
🩹 Fixes
- Fix: Log tab now correctly captures
debugnpm output in production browser bundles. (The bundler had been inlining the console-wrap install module so the wraps applied afterdebugnpm captured its console references; now the wrap install is forced into its own chunk that evaluates first.)
3.1.9 (2026-05-05)
🩹 Fixes
- Debug panel:
- New Log tab captures
console.log/debug/info/warn/erroroutput with%ccolor formatting preserved, including styled output from thedebugnpm library. Capped at 5000 entries (oldest evicted first). - New "Debug namespaces" text input accepts wildcards like
efp:*and applies them immediately without reload.
- New Log tab captures
3.1.8 (2026-05-04)
🩹 Fixes
- Map: keep booth logos within bounds when the floor plan is rotated.
3.1.7 (2026-05-04)
🩹 Fixes
- Traffic: silently ignore
204/ non-OK responses from/v1/routeswhen there are no bus routes for the plan.
3.1.6 (2026-05-04)
🩹 Fixes
- Update bundled
@expofp/rendererto 3.1.4.
3.1.5 (2026-05-04)
🩹 Fixes
- Restore debug overlay styling when Shadow DOM is enabled
3.1.4 (2026-04-30)
🩹 Fixes
- Simplify search placeholder, refresh translations, and improve language switcher accessibility
3.1.3 (2026-04-30)
🩹 Fixes
- Lazy-load Intercom messenger and gate it to ExpoFP-hosted floor plans (skipped offline). Heatmap mode now displays markers.
3.1.2 (2026-04-29)
🩹 Fixes
- Pin ESLint plugins to versions compatible with
@nx/eslint(ESLint 9) - Update all dependencies to their latest compatible versions, including build tooling.
3.1.1 (2026-04-29)
🩹 Fixes
- Link
@expofppackages on npm to the developer docs site, and add a quickstart README to@expofp/floorplan.
3.1.0 (2026-04-29)
🚀 Features
- Add Intercom messenger integration with subscription-based gating; refresh free banner ribbon and cookie consent UX
3.0.4 (2026-04-28)
🩹 Fixes
- Fix locales not loading when SDK is imported from a redirecting CDN URL (e.g.
unpkg.com/@expofp/floorplan@VERSION)
3.0.3 (2026-04-28)
🩹 Fixes
- Redo upstream main merge to fix runtime regressions (e.g., Menu rendering as blank screen on events with register links).
3.0.2 (2026-04-28)
🩹 Fixes
- Fix traffic visualization crash before renderer init and adjust overlay sizing on booth selection.
3.0.1 (2026-04-24)
🩹 Fixes
- Fuzzy search: tighter match threshold and position-aware scoring for more relevant results
3.0.0 (2026-04-24)
🩹 Fixes
- Adopted a two-channel release model: regular releases ship to the
@latestdist-tag; a separate@stabledist-tag will be maintained as a soak-delayed pointer for production-critical installs (moved manually after a bake period).
3.0.0-alpha.22 (2026-04-24)
🩹 Fixes
- Docs: grammar polish across guides; fixed malformed bookmarks tables in the query-parameters reference; clarified the search example to avoid clashing with
?b=bookmarks. - Docs: clearer v2 → v3 migration guide with side-by-side before/after; examples and guide snippets now import
@expofp/floorplandirectly (no more@nextdist-tag).
3.0.0-alpha.21 (2026-04-23)
🩹 Fixes
- Browser bundle's
index.jsnow contains the main module directly instead of re-exporting from an intermediate chunk, reducing one HTTP request on direct browser loads
3.0.0-alpha.20 (2026-04-23)
🩹 Fixes
- Booth badges now support
noLabelsbooths with exhibitors, respecthideExhibitorBoothNumber, render above plan layers, and keep consistent size on retina displays; search matches non-consecutive query terms within a field
3.0.0-alpha.19 (2026-04-15)
🩹 Fixes
- feat(telemetry): respect Retry-After on throttling, plus attribution and overflow fixes
- Telemetry: Retry-After handling — The SDK now pauses outbound telemetry when the collector responds with HTTP 429 or 503 and a
Retry-Afterheader, honoring both seconds and HTTP-date formats (capped at 5 minutes). Traffic automatically backs off when the telemetry endpoint is throttled or degraded instead of retrying in a tight loop. - Telemetry: event storage cap — Failed batches merged back into pending storage are now capped at 1,000 events, preventing unbounded
localStoragegrowth if the telemetry endpoint stays unreachable for an extended period. - Telemetry: cross-session attribution fix — Events persisted in
localStoragefrom a previous event/expo are now re-attributed to the current expo on send, so switching between expos on the same device no longer mixes analytics across events. - Telemetry: large-batch delivery fix — Large accumulated batches no longer silently fail to send; the
keepaliverequest flag is omitted for payloads above ~63KB, and payload size is measured in bytes (viaTextEncoder) so multi-byte characters are counted correctly. - Kiosk: zoom stability — Fixes a
NaNzoom level when a kiosk configuration specifiesmapPtScaleof zero; zoom is now left unchanged in that case instead of producing an invalid value.
- Telemetry: Retry-After handling — The SDK now pauses outbound telemetry when the collector responds with HTTP 429 or 503 and a
3.0.0-alpha.18 (2026-04-15)
🩹 Fixes
- fix: favicon link in floor plan HTML and custom CSS with Shadow DOM
- Favicon —
index.htmlincludes the favicon link in the correct place for the dev entry. - Custom CSS with Shadow DOM —
loadCustomCssresolves the style root when the map runs inside a shadow root.
- Favicon —
3.0.0-alpha.17 (2026-04-14)
🩹 Fixes
- feat: virtual line distance in routing cost and completed reactive i18n
- Virtual line distance in routing cost — When a virtual line has a
virtualLengthvalue configured per-line in the designer, the pathfinder uses that as the edge cost instead of treating virtual links as free (cost 0). Multi-floor routes now prefer staying on the same floor when virtual lengths are set, producing more natural directions. Explicit0is still honored. - Reactive i18n refactor completed — The
LanguageStorehas been removed; locale state now lives in a single source of truth inutils/i18n. RTL direction updates reactively whenchangeLanguage()is called, without any re-render hacks in the overlay. - Legacy language key auto-migration — Users with a locale saved under the old
languagelocalStorage key are read once on startup and migrated to the newefp-localekey, so existing installs retain the user's previous selection. - Public type rename:
FloorPlanLanguage→Language— The language entity type exported fromFloorPlanEntityhas been renamed and narrowed to{ readonly id: string; readonly name: string; readonly entity: { readonly type: "language" } }. Integrators that destructure language entities from search results or entity lists may need to adjust type imports. - Wayfinding module refactor — Wayfinding is now a self-contained module (
src/wayfinding/) with a hexagonal (ports/adapters) architecture. Public API is unchanged; the refactor isolates pathfinding, routing, position tracking, and rendering behind clean interfaces so future extensions land without touching call sites. - Wayfinding stability fixes — Hotfix for an infinite loop on certain route configurations; event-specific rerouting disabled for the CloudNext26 layout where heuristic-based rerouting produced poor transitions.
- New
mathutility — Shared helpers (toRadians,decreaseByPercentage) now live inutils/math.ts, replacing the removedutils/toRadians.ts. Not part of the public API.
- Virtual line distance in routing cost — When a virtual line has a
3.0.0-alpha.16 (2026-04-09)
🩹 Fixes
- feat: viewer app mode, event metadata panel, reactive translations, and route planner v2
- Viewer app mode — New
viewerModeoption opens a full-screen menu with an event metadata panel;onLeaveEventcallback fires when the user exits, and the menu icon becomes a home icon while viewer mode is active - Event metadata panel — Shows event title, venue, and date range from data; displays a "Now" badge when the event is currently live and an "Ongoing" label when start/end dates are missing
- Reactive translations —
t()now re-renders UI automatically whenchangeLanguage()is called, so language switching updates every label without a manual refresh expofp:readyDOM event — Dispatched onwindowwhen the floor plan finishes initializing (detail contains the floorplan instance), so integrators can listen instead of pollingwindow.___fp- Route planner v2 — Multi-floor routes now show a floor selector; stop items display booth name plus a level badge; non-routable bookmarks no longer surface the route planner entry
- Custom floor indexing — Honors
floorIndexfrom data so events can define a custom floor ordering instead of relying on declaration order - Bookmarks: share button — Moved from the search box into the bookmarks panel, where sharing a saved set of booths makes more sense
FloorPlanBooth.title— Exposed as an optional field on search results so integrators can surface richer booth titlesreset()now fits bounds — Callingreset()re-centers the map on the full floor; in kiosk mode with a configuredresetCameraFn, the kiosk camera hook runs instead- TouchHand indicator — Only shown in kiosk mode (previously appeared in all modes)
- Wayfinding stability — Hotfix for an infinite loop on certain routes; fixes for floor-switching collisions and selector click issues
- Floor index fix — Corrects floor index resolution for multi-floor plans
- Blue dot layering — Current-position marker now resolves to the correct layer when the position specifies an explicit
z - Modal rendering in Shadow DOM — Modal portal container now resolves correctly whether the floor plan is mounted inside a shadow root or the regular DOM
- Route tracking deduplication — Stops firing duplicate analytics events on automatic route recalculation; events only fire on explicit user-initiated route resets
- Viewer app mode — New
3.0.0-alpha.15 (2026-04-08)
🩹 Fixes
- Publish Sentry source maps and release tags so integrator error reports resolve to original source and group by SDK release
- Fix pathfinding failure that broke route calculation
3.0.0-alpha.14 (2026-04-01)
🩹 Fixes
- Add native SDK compatibility helper for WKWebView bridge timing
- Offline ZIP archives now nest all files under the expo name directory
3.0.0-alpha.12 (2026-03-31)
🩹 Fixes
- Fix offline runtime entry path resolution for relative imports (7e188dfd)
- Camera reset now fits map to visible bounds, route planner button in sidebar actions, and updated tour data (fa7486eb)
3.0.0-alpha.11 (2026-03-22)
🩹 Fixes
- fix: remove ./ prefix from zip entry paths (9d0c0ef6)
- Rename public API exports for clarity: niceFetch → fetchWithRetry, importJsonModule → importJson, importRuntimeJsonModule → importRuntimeJson, sha256Base62Truncated → shortHash, slugifyFilesystemUnique → safeSlugify (5c61e5be)
3.0.0-alpha.10 (2026-03-17)
🩹 Fixes
- feat: route planner, optimized routing, lazy QR code, and pathfinding improvements (2efdcd3d)
- Route Planner — Plan multi-stop routes from bookmarks or custom selections, with automatic start-point detection and drag-to-reorder stops
- Optimized Multi-Stop Routing —
getOptimizedRoutes()SDK method uses nearest-neighbor + 2-opt heuristic to minimize total travel distance across waypoints - Lazy QR Code Loading — QR code component is now lazy-loaded, reducing initial bundle size
- Pathfinding Improvements — Virtual (non-physical) route segments are now penalized in pathfinding to prefer real walkable paths