Skip to content

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 @latest dist-tag; a separate @stable dist-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/floorplan directly (no more @next dist-tag).

3.0.0-alpha.21 (2026-04-23)

🩹 Fixes

  • Browser bundle's index.js now 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 noLabels booths with exhibitors, respect hideExhibitorBoothNumber, 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-After header, 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 localStorage growth if the telemetry endpoint stays unreachable for an extended period.
    • Telemetry: cross-session attribution fix — Events persisted in localStorage from 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 keepalive request flag is omitted for payloads above ~63KB, and payload size is measured in bytes (via TextEncoder) so multi-byte characters are counted correctly.
    • Kiosk: zoom stability — Fixes a NaN zoom level when a kiosk configuration specifies mapPtScale of zero; zoom is now left unchanged in that case instead of producing an invalid value.

3.0.0-alpha.18 (2026-04-15)

🩹 Fixes

  • fix: favicon link in floor plan HTML and custom CSS with Shadow DOM
    • Faviconindex.html includes the favicon link in the correct place for the dev entry.
    • Custom CSS with Shadow DOMloadCustomCss resolves the style root when the map runs inside a shadow root.

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 virtualLength value 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. Explicit 0 is still honored.
    • Reactive i18n refactor completed — The LanguageStore has been removed; locale state now lives in a single source of truth in utils/i18n. RTL direction updates reactively when changeLanguage() is called, without any re-render hacks in the overlay.
    • Legacy language key auto-migration — Users with a locale saved under the old language localStorage key are read once on startup and migrated to the new efp-locale key, so existing installs retain the user's previous selection.
    • Public type rename: FloorPlanLanguageLanguage — The language entity type exported from FloorPlanEntity has 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 math utility — Shared helpers (toRadians, decreaseByPercentage) now live in utils/math.ts, replacing the removed utils/toRadians.ts. Not part of the public API.

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 viewerMode option opens a full-screen menu with an event metadata panel; onLeaveEvent callback 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 translationst() now re-renders UI automatically when changeLanguage() is called, so language switching updates every label without a manual refresh
    • expofp:ready DOM event — Dispatched on window when the floor plan finishes initializing (detail contains the floorplan instance), so integrators can listen instead of polling window.___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 floorIndex from 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 titles
    • reset() now fits bounds — Calling reset() re-centers the map on the full floor; in kiosk mode with a configured resetCameraFn, 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

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 RoutinggetOptimizedRoutes() 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