@expofp/floorplan 3.10.0 → 3.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/dist/browser/{Button-CbNlJYq-.js → Button-DdPvRBTh.js} +5 -5
  2. package/dist/browser/{CookieConsent-BVLqsKtm.js → CookieConsent-C39dYjaQ.js} +7 -7
  3. package/dist/browser/{Debug-DniNgMUO.js → Debug-B5r6LCAX.js} +7 -7
  4. package/dist/browser/{Demo-BXOuVfdG.js → Demo-Dbrjn3oi.js} +9 -9
  5. package/dist/browser/{Free-DbDrs1SH.js → Free-DUcGDkLZ.js} +9 -9
  6. package/dist/browser/{Gallery-CK2yO-rS.js → Gallery-CvO5_8hs.js} +9 -9
  7. package/dist/browser/{GpsLoader-B5WB_xlb.js → GpsLoader-Cybs-6Z0.js} +21 -21
  8. package/dist/browser/{KioskStore-CzIrPa11.js → KioskStore-Df_lwtgJ.js} +34 -34
  9. package/dist/browser/{MaplibreAdapter-CSa9XGJa.js → MaplibreAdapter-BgOzaHlx.js} +2387 -2387
  10. package/dist/browser/{ModalContainer-CduduGaw.js → ModalContainer-DXVCm1fb.js} +10 -10
  11. package/dist/browser/{PermissionNotice-B62dyKda.js → PermissionNotice-B0OJFFky.js} +6 -6
  12. package/dist/browser/{SetKioskMode-DvbL360U.js → SetKioskMode-BdOX40be.js} +12 -12
  13. package/dist/browser/ShowKiosk-cvnSTpd2.js +28 -0
  14. package/dist/browser/{TouchHand-BHu7qEu9.js → TouchHand-RDWCILm_.js} +4 -4
  15. package/dist/browser/{ViewerMenuPanel-TTUNLqUt.js → ViewerMenuPanel-BlCzm_mm.js} +10 -10
  16. package/dist/browser/{add-debug-secret-listener-DN1tIBbN.js → add-debug-secret-listener-lYBneebf.js} +1 -1
  17. package/dist/browser/{boolean-editor-CcJuEdkU.js → boolean-editor-C_bdHxC2.js} +9 -9
  18. package/dist/browser/{bootIntercom-DyEAiiah.js → bootIntercom-Bf4CaruD.js} +2 -2
  19. package/dist/browser/booth-by-xy-WnHwiopn.js +1067 -0
  20. package/dist/browser/{browser-Ctb0x-hW.js → browser-BGtGwkTn.js} +2 -2
  21. package/dist/browser/bundle.json +62 -62
  22. package/dist/browser/{classnames-CeriETl9.js → classnames-DRy7JPyJ.js} +2 -2
  23. package/dist/browser/{client-hS_SUT9J.js → client-BE52OM0U.js} +4 -4
  24. package/dist/browser/{components-CcIkwnTn.js → components-BfKSs6sY.js} +1647 -1647
  25. package/dist/browser/{debug-overlay-DBRVNju-.js → debug-overlay-mKmIzOYk.js} +10 -10
  26. package/dist/browser/{debug-ui-Vy_hMYMs.js → debug-ui-DLxMK2XU.js} +6 -6
  27. package/dist/browser/{dist-CyHdGr2I.js → dist-DSRSA5oz.js} +6 -6
  28. package/dist/browser/{dist-Bimiy1i5.js → dist-QsCYWHCu.js} +5 -5
  29. package/dist/browser/{dist-D3O88lUU.js → dist-eojWwYB5.js} +3 -3
  30. package/dist/browser/{efp-debug-init-C0HXaTIA.js → efp-debug-init-C5HgsgC2.js} +2 -2
  31. package/dist/browser/{enum-editor-DkQTyshB.js → enum-editor-BqpFqXiM.js} +11 -11
  32. package/dist/browser/{es5-BI29YLB7.js → es5-7bslpbjj.js} +2 -2
  33. package/dist/browser/{event-not-found-C45GofSi.js → event-not-found-Bc1SpnKw.js} +1 -1
  34. package/dist/browser/{exports-B2fVUjK8.js → exports-CYJRF2aW.js} +1 -1
  35. package/dist/browser/{favicon-CZB9txqZ.js → favicon-CRiidRYo.js} +1 -1
  36. package/dist/browser/{fetch-retry.umd-C_1YSqZv.js → fetch-retry.umd-Btwt1fg_.js} +2 -2
  37. package/dist/browser/{flex-C4nAB--c.js → flex-ITkzmA3C.js} +5 -5
  38. package/dist/browser/{floorplan.loader-D9ci7TWk.js → floorplan.loader-DJVlfwah.js} +11 -11
  39. package/dist/browser/{floorplan.ready-Cou1AYpA.js → floorplan.ready-7KwBZy9I.js} +156 -156
  40. package/dist/browser/{fuse-DLH3KYAO.js → fuse-CcYz7YAl.js} +2 -2
  41. package/dist/browser/{i18n-C0K3C5Jv.js → i18n-CeVxHTr1.js} +4 -4
  42. package/dist/browser/index.js +12 -12
  43. package/dist/browser/{index.module-BMETmKP4.js → index.module-CV2WVv52.js} +4 -4
  44. package/dist/browser/{is-webview-CxvtAxIZ.js → is-webview-BOqof5Uq.js} +1 -1
  45. package/dist/browser/{jsx-runtime-B9nB58Uq.js → jsx-runtime-BiSrB4Oo.js} +2 -2
  46. package/dist/browser/{lib-CcxG8Udi.js → lib-Dg9vXDVM.js} +4 -4
  47. package/dist/browser/{loadImage-B-fxupzg.js → loadImage-VYhbBgH6.js} +4 -4
  48. package/dist/browser/{logDeviceInfo-kZTVPeyv.js → logDeviceInfo-B8Mi-9H5.js} +9 -9
  49. package/dist/browser/{main-B_62LzEM.js → main-D6ItQIYj.js} +1 -1
  50. package/dist/browser/{mobx-CUQ-tbco.js → mobx-Deoo_wpx.js} +4 -4
  51. package/dist/browser/{particles.min-Csuxu9yr.js → particles.min-BNwqgit-.js} +2 -2
  52. package/dist/browser/{prop-types-B7Gun2Sn.js → prop-types-CuEYshV7.js} +2 -2
  53. package/dist/browser/{react-ZKXuYPAa.js → react-BMPhuMz9.js} +2 -2
  54. package/dist/browser/{react-dom-D82ielqJ.js → react-dom-DSdkXj0b.js} +3 -3
  55. package/dist/browser/{reset-all-settings-BwbmLw6_.js → reset-all-settings-C2yTiJ1V.js} +7 -7
  56. package/dist/browser/{rolldown-runtime-75nnKCA3.js → rolldown-runtime-I1EwXf_t.js} +1 -1
  57. package/dist/browser/{settings-CfbArDtc.js → settings-Dr8bs0FB.js} +2 -2
  58. package/dist/browser/{settings-item-R9UibMb5.js → settings-item-DjfyQTQB.js} +6 -6
  59. package/dist/browser/{store-DANngpFy.js → store-CVdrQCza.js} +6737 -5892
  60. package/dist/browser/{string-editor-CURRcjvv.js → string-editor-3sN4j-ci.js} +7 -7
  61. package/dist/browser/{theme-Nw3wi1eA.js → theme-BSTLt6eV.js} +8 -8
  62. package/dist/browser/{ui-CzHA_XVw.js → ui-CiFfwrN8.js} +8 -8
  63. package/dist/browser/{useRenderTarget-KMx97ZHc.js → useRenderTarget-DF7LdnYr.js} +4 -4
  64. package/dist/esm/components/Map/Map.js +1 -1
  65. package/dist/esm/components/Maplibre/useWayfindingAndMarkers.js +1 -1
  66. package/dist/esm/store/RouteStore.d.ts +1 -2
  67. package/dist/esm/store/RouteStore.js +1 -1
  68. package/dist/esm/wayfinding/adapters/canvasIconProvider.d.ts +1 -1
  69. package/dist/esm/wayfinding/adapters/canvasIconProvider.js +1 -1
  70. package/dist/esm/wayfinding/adapters/graphDataSource.d.ts +2 -1
  71. package/dist/esm/wayfinding/adapters/graphDataSource.js +1 -1
  72. package/dist/esm/wayfinding/adapters/index.d.ts +3 -4
  73. package/dist/esm/wayfinding/adapters/index.js +1 -1
  74. package/dist/esm/wayfinding/bindMobxReactions.d.ts +6 -0
  75. package/dist/esm/wayfinding/bindMobxReactions.js +1 -1
  76. package/dist/esm/wayfinding/core/__tests__/helpers.d.ts +4 -4
  77. package/dist/esm/wayfinding/core/createWayfindingEngine.js +1 -1
  78. package/dist/esm/wayfinding/core/graph/buildGraph.d.ts +1 -1
  79. package/dist/esm/wayfinding/core/graph/buildNGraph.d.ts +2 -2
  80. package/dist/esm/wayfinding/core/graph/findShortestPath.d.ts +2 -2
  81. package/dist/esm/wayfinding/core/graph/graphHelpers.d.ts +4 -4
  82. package/dist/esm/wayfinding/core/graph/graphHelpers.js +1 -1
  83. package/dist/esm/wayfinding/core/graph/linkCost.d.ts +2 -2
  84. package/dist/esm/wayfinding/core/index.d.ts +8 -8
  85. package/dist/esm/wayfinding/core/index.js +1 -1
  86. package/dist/esm/wayfinding/core/position/gpsThreshold.d.ts +2 -2
  87. package/dist/esm/wayfinding/core/routing/getRouteLength.d.ts +1 -1
  88. package/dist/esm/wayfinding/core/types.d.ts +19 -9
  89. package/dist/esm/wayfinding/createWayfinding.d.ts +15 -1
  90. package/dist/esm/wayfinding/createWayfinding.js +1 -1
  91. package/dist/esm/wayfinding/handlers/yahHandler.d.ts +3 -3
  92. package/dist/esm/wayfinding/handlers/yahHandler.js +1 -1
  93. package/dist/esm/wayfinding/index.d.ts +13 -0
  94. package/dist/esm/wayfinding/index.js +1 -0
  95. package/dist/esm/wayfinding/renderer/createWayfindingRenderer.js +1 -1
  96. package/dist/esm/wayfinding/renderer/iconManager.d.ts +3 -3
  97. package/dist/esm/wayfinding/renderer/routeLineManager.d.ts +5 -5
  98. package/dist/esm/wayfinding/renderer/trailManager.d.ts +2 -2
  99. package/dist/esm/wayfinding/runtime/createWayfindingRuntime.js +1 -1
  100. package/dist/esm/wayfinding/runtime/endpointView.d.ts +1 -2
  101. package/dist/esm/wayfinding/runtime/positionTrailView.d.ts +5 -6
  102. package/dist/esm/wayfinding/runtime/positionView.d.ts +2 -3
  103. package/dist/esm/wayfinding/runtime/routeUpdate.d.ts +3 -3
  104. package/dist/esm/wayfinding/runtime/trailView.d.ts +1 -2
  105. package/dist/esm/wayfinding/runtime/transitionView.d.ts +2 -3
  106. package/dist/esm/wayfinding/runtime/types.d.ts +10 -2
  107. package/package.json +4 -4
  108. package/dist/browser/ShowKiosk-CK47Q2V7.js +0 -28
  109. package/dist/browser/createWayfinding-D3oRCnRo.js +0 -1892
  110. package/dist/esm/wayfinding/adapters/iconProvider.d.ts +0 -15
  111. package/dist/esm/wayfinding/adapters/iconProvider.js +0 -1
@@ -1,4 +1,3 @@
1
- import { type IconProvider } from '../adapters';
2
1
  import { type WayfindingRenderer } from '../renderer';
3
2
  import { type FloorContext } from '../runtime/types';
4
3
  /**
@@ -14,9 +13,10 @@ export type YahHandler = (position: {
14
13
  readonly y: number;
15
14
  readonly layer: string;
16
15
  } | null) => void;
17
- export declare function createYahHandler({ renderer, iconProvider, floorContext, layer, }: {
16
+ export declare function createYahHandler({ renderer, iconMap, pixelRatio, floorContext, layer, }: {
18
17
  renderer: WayfindingRenderer;
19
- iconProvider: IconProvider;
18
+ iconMap: Map<string, HTMLImageElement>;
19
+ pixelRatio: number;
20
20
  floorContext: FloorContext;
21
21
  layer: string;
22
22
  }): YahHandler;
@@ -1 +1 @@
1
- const t="yah";export function createYahHandler({renderer:a,iconProvider:n,floorContext:s,layer:e}){return c=>{if(!c){a.setIcon("yah",null),a.flush();return}const l=s.isLayerVisible(c.layer);a.setIcon("yah",{canvas:n.getIcon("yah").canvas,layer:e,x:c.x,y:c.y,hidden:!l,dimmed:!l,origin:[.5,1]}),a.flush()}}
1
+ import{createImageCanvas as f,createYahCanvas as l}from"../../components/Map/drawing/config/canvases";import{decreaseByPercentage as o}from"../../utils/math";const c="yah",u="#ff4343",A=64,C=90,_=32;function E(a,e){const n=a.get(c);return n?(n.id=c,f(n,o(A,_),o(C,_),e)):l(e,u)}export function createYahHandler({renderer:a,iconMap:e,pixelRatio:n,floorContext:i,layer:I}){const s=E(e,n);return s.id="current-location-2",t=>{if(!t){a.setIcon(c,null),a.flush();return}const r=i.isLayerVisible(t.layer);a.setIcon(c,{canvas:s,layer:I,x:t.x,y:t.y,hidden:!r,dimmed:!r,origin:[.5,1]}),a.flush()}}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * efp-side wayfinding facade — the single entry the floorplan app imports from
3
+ * (stores, mount points). Re-exports the bootstrap (`createWayfinding`), the
4
+ * runtime facade (`buildRoute`/`isWayfindingReady`), the glue endpoint helpers,
5
+ * and the `RouteLine` type.
6
+ *
7
+ * When `core`/`runtime`/`renderer` move into `@expofp/wayfinding`, this file
8
+ * stays on the efp side and re-points the type exports at the package.
9
+ */
10
+ export { boothToEndpoint, CURRENT_LOCATION_NAME, CURRENT_POSITION_POINT_ID, KIOSK_ANCHOR_POINT_ID, toArbitraryPoint, } from './adapters';
11
+ export type { RouteLine } from './core';
12
+ export { buildRoute, createWayfinding, isWayfindingReady } from './createWayfinding';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ export{boothToEndpoint,CURRENT_LOCATION_NAME,CURRENT_POSITION_POINT_ID,KIOSK_ANCHOR_POINT_ID,toArbitraryPoint}from"./adapters";export{buildRoute,createWayfinding,isWayfindingReady}from"./createWayfinding";
@@ -1 +1 @@
1
- import{createLayerManager as d}from"./layerManager";import{createIconManager as m}from"./iconManager";import{createTrailManager as f}from"./trailManager";import{createRouteLineManager as u}from"./routeLineManager";const v={passed:"#B5B7BC",remaining:"#A4CCE2",active:"#0794EA"};export function createWayfindingRenderer(r,i={}){const l={...v,...i.colors},n=d(r),e=m(n,r),t=f(n,r),o=u(n,r,l),a=r.renderer;if(!a)throw new Error("renderer: rendererService.renderer is null \u2014 start RendererService before constructing renderer");a.events.addEventListener("pointer:click",e.handleClick),a.events.addEventListener("pointer:move",e.handleHover);const c={setIcon:e.setIcon,clearIcons:e.clearIcons,setTrail:t.setTrail,setRouteLines:o.setRouteLines,clearRoute(){o.clearLines(),t.destroy(),e.hideAll()},flush:n.flush,destroy(){c.clearRoute();const s=r.renderer;s&&(s.events.removeEventListener("pointer:click",e.handleClick),s.events.removeEventListener("pointer:move",e.handleHover)),e.destroy(),t.destroy(),o.destroy(),n.destroy()}};return c}
1
+ import{createIconManager as d}from"./iconManager";import{createLayerManager as m}from"./layerManager";import{createRouteLineManager as f}from"./routeLineManager";import{createTrailManager as u}from"./trailManager";const v={passed:"#B5B7BC",remaining:"#A4CCE2",active:"#0794EA"};export function createWayfindingRenderer(r,i={}){const l={...v,...i.colors},n=m(r),e=d(n,r),t=u(n,r),o=f(n,r,l),a=r.renderer;if(!a)throw new Error("renderer: rendererService.renderer is null \u2014 start RendererService before constructing renderer");a.events.addEventListener("pointer:click",e.handleClick),a.events.addEventListener("pointer:move",e.handleHover);const c={setIcon:e.setIcon,clearIcons:e.clearIcons,setTrail:t.setTrail,setRouteLines:o.setRouteLines,clearRoute(){o.clearLines(),t.destroy(),e.hideAll()},flush:n.flush,destroy(){c.clearRoute();const s=r.renderer;s&&(s.events.removeEventListener("pointer:click",e.handleClick),s.events.removeEventListener("pointer:move",e.handleHover)),e.destroy(),t.destroy(),o.destroy(),n.destroy()}};return c}
@@ -1,7 +1,7 @@
1
1
  import type { MouseEventData } from '@expofp/renderer';
2
- import type { RendererService } from '../../renderer';
3
- import type { IconConfig } from './types';
2
+ import { type RendererService } from '../../renderer';
4
3
  import type { LayerManager } from './layerManager';
4
+ import type { IconConfig } from './types';
5
5
  /**
6
6
  * Manages `ImageDef` icons in the scene graph.
7
7
  *
@@ -13,7 +13,7 @@ export interface IconManager {
13
13
  /** Place, update, or hide an icon. See {@link WayfindingRenderer.setIcon}. */
14
14
  setIcon(name: string, config: IconConfig | null, key?: string | number): void;
15
15
  /** Hide all icons matching the given name(s). */
16
- clearIcons(names: string | ReadonlyArray<string>): void;
16
+ clearIcons(names: string | readonly string[]): void;
17
17
  /** Hide every managed icon (used by `clearRoute`). */
18
18
  hideAll(): void;
19
19
  /** Unregister all scale/roll handlers and clear internal state. */
@@ -1,12 +1,12 @@
1
- import type { RendererService } from '../../renderer';
2
- import type { RouteColors } from './types';
1
+ import { type RendererService } from '../../renderer';
3
2
  import type { LayerManager } from './layerManager';
3
+ import type { RouteColors } from './types';
4
4
  /**
5
5
  * Manages static route lines (passed + remaining) and an animated overlay
6
6
  * on the remaining segment.
7
7
  */
8
8
  export interface RouteLineManager {
9
- setRouteLines(passed: ReadonlyArray<{
9
+ setRouteLines(passed: readonly {
10
10
  readonly p0: {
11
11
  x: number;
12
12
  y: number;
@@ -15,7 +15,7 @@ export interface RouteLineManager {
15
15
  x: number;
16
16
  y: number;
17
17
  };
18
- }>, remaining: ReadonlyArray<{
18
+ }[], remaining: readonly {
19
19
  readonly p0: {
20
20
  x: number;
21
21
  y: number;
@@ -24,7 +24,7 @@ export interface RouteLineManager {
24
24
  x: number;
25
25
  y: number;
26
26
  };
27
- }>, options: {
27
+ }[], options: {
28
28
  readonly linesLayer: string;
29
29
  readonly animatedLinesLayer: string;
30
30
  readonly resetAnimation?: boolean;
@@ -1,6 +1,6 @@
1
- import type { RendererService } from '../../renderer';
2
- import type { Point } from './types';
1
+ import { type RendererService } from '../../renderer';
3
2
  import type { LayerManager } from './layerManager';
3
+ import type { Point } from './types';
4
4
  /**
5
5
  * Manages named trails of evenly-spaced dots between two points.
6
6
  *
@@ -1 +1 @@
1
- import{Box as C}from"@expofp/geometry";import{CURRENT_POSITION_POINT_ID as G}from"./positionView";import{getRouteLength as H,snapToRoute as J}from"../core";import{getRouteLines as K}from"./getRouteLines";import{createEndpointView as Q}from"./endpointView";import{createPositionTrailView as X}from"./positionTrailView";import{createRouteLinesView as Y}from"./routeLinesView";import{computeRouteRenderData as Z}from"./routeRenderData";import{computeRouteUpdate as $}from"./routeUpdate";import{createTrailView as D}from"./trailView";import{createTransitionView as x}from"./transitionView";const tt=A=>A.flatMap(e=>[e.p0,e.p1]);export function createWayfindingRuntime({engine:A,renderer:e,iconProvider:P,floorContext:c,layers:f,snapThreshold:E,onTransitionClick:B,onRouteUpdate:N,onRouteDistance:R}){const d=Q({renderer:e,iconProvider:P,floorContext:c,layer:f.points}),I=x({renderer:e,iconProvider:P,floorContext:c,onTransitionClick:B,layer:f.points}),M=D({renderer:e,iconProvider:P,floorContext:c,layer:f.trail}),l=X({renderer:e,iconProvider:P,floorContext:c,trails:M,iconLayer:f.currentPosition,snapThreshold:E}),O=Y({renderer:e,linesLayer:f.lines,animatedLinesLayer:f.linesAnimated});let u=[],o=null,r=null,s=null,p=0,y=!1,T=!1;function S(){return c.showAllFloors()?null:c.getActiveFloor()}function _(){const t=S();return t===null?u.filter(n=>!n.virtual):u.filter(n=>n.p0.layer===t&&!n.virtual)}function V(){if(!o||!r)return null;const t=_();return t.length?{from:o,to:r,routePoints:tt(t),visibleLines:t}:null}function m(t=null,n=!1){if(!o||!r)return;const i=Z({routeLines:u,currentRouteLayer:S(),from:o,to:r,snap:t});O.draw(i,n),p=i.distance}function g(t){const n=V();if(!n){l.setTrail(null,null);return}const i=s&&t&&!t.snapped?s:null,h=a=>a.bounds?.length?null:a.id===G?i:a,L=y?null:h(n.from);if(L){l.setTrail(n.routePoints[n.routePoints.length-1],L);return}const b=h(n.to);l.setTrail(b?n.routePoints[0]:null,b)}function U(){if(!o||!r)return;const t=V();if(!t){d.hide(),I.clear(),l.clearTrail(),m();return}d.place(o,r,t.routePoints,T),I.place(u),m(),g(null)}function w(){if(!o||!r)return;const t=V();t&&d.place(o,r,t.routePoints,T)}function F(){if(T=!1,!s||!o||!r)return null;const t=u.filter(h=>!h.virtual);if(!t.length)return null;const n=V(),i=n?l.applyToRoute(s,n,t):J(s,t,{snapThreshold:E,from:o,to:r});return i.snapped&&(y=!0),T=i.snapped,i}function k(){const t=$(u,_());return N(t.lines,t.bounds),t}function W({from:t,to:n,waypoints:i,accessible:h}){const L=K({engine:A,from:t,to:n,waypoints:i,accessible:h});if(!L.length)return v(),!1;y=!1,o=t,r=n,u=L,U();const{lines:b}=k(),a=F();return w(),g(a),a&&m(a,!0),R(a?p:H(b)),e.flush(),!0}function j(t){const n=s!==null;if(s=t,!t){T=!1,l.hideIcon(),g(null),n&&w(),m(),R(p),e.flush();return}l.placeIcon(t);const i=F();w(),g(i),i&&m(i,!0),R(p),e.flush()}function q(){U();const t=F();w(),g(t),t&&m(t,!0),u.length&&k(),R(p),e.flush()}function v(){y=!1,u=[],o=null,r=null,p=0,d.hide(),I.clear(),l.clearTrail(),O.clear(),N([],new C),R(0),e.flush()}function z(){v(),s=null,e.destroy()}return{setRoute:W,onPositionChanged:j,onFloorChanged:q,clearRoute:v,destroy:z}}
1
+ import{Box as C}from"@expofp/geometry";import{getRouteLength as G,snapToRoute as H}from"../core";import{createEndpointView as J}from"./endpointView";import{getRouteLines as K}from"./getRouteLines";import{createPositionTrailView as Q}from"./positionTrailView";import{CURRENT_POSITION_POINT_ID as X}from"./positionView";import{createRouteLinesView as Y}from"./routeLinesView";import{computeRouteRenderData as Z}from"./routeRenderData";import{computeRouteUpdate as $}from"./routeUpdate";import{createTrailView as D}from"./trailView";import{createTransitionView as x}from"./transitionView";const tt=A=>A.flatMap(e=>[e.p0,e.p1]);export function createWayfindingRuntime({engine:A,renderer:e,iconProvider:P,floorContext:c,layers:f,snapThreshold:E,onTransitionClick:B,onRouteUpdate:N,onRouteDistance:R}){const d=J({renderer:e,iconProvider:P,floorContext:c,layer:f.points}),I=x({renderer:e,iconProvider:P,floorContext:c,onTransitionClick:B,layer:f.points}),M=D({renderer:e,iconProvider:P,floorContext:c,layer:f.trail}),l=Q({renderer:e,iconProvider:P,floorContext:c,trails:M,iconLayer:f.currentPosition,snapThreshold:E}),O=Y({renderer:e,linesLayer:f.lines,animatedLinesLayer:f.linesAnimated});let u=[],o=null,r=null,s=null,p=0,y=!1,T=!1;function S(){return c.showAllFloors()?null:c.getActiveFloor()}function _(){const t=S();return t===null?u.filter(n=>!n.virtual):u.filter(n=>n.p0.layer===t&&!n.virtual)}function V(){if(!o||!r)return null;const t=_();return t.length?{from:o,to:r,routePoints:tt(t),visibleLines:t}:null}function m(t=null,n=!1){if(!o||!r)return;const i=Z({routeLines:u,currentRouteLayer:S(),from:o,to:r,snap:t});O.draw(i,n),p=i.distance}function g(t){const n=V();if(!n){l.setTrail(null,null);return}const i=s&&t&&!t.snapped?s:null,h=a=>a.bounds?.length?null:a.id===X?i:a,L=y?null:h(n.from);if(L){l.setTrail(n.routePoints[n.routePoints.length-1],L);return}const b=h(n.to);l.setTrail(b?n.routePoints[0]:null,b)}function U(){if(!o||!r)return;const t=V();if(!t){d.hide(),I.clear(),l.clearTrail(),m();return}d.place(o,r,t.routePoints,T),I.place(u),m(),g(null)}function w(){if(!o||!r)return;const t=V();t&&d.place(o,r,t.routePoints,T)}function F(){if(T=!1,!s||!o||!r)return null;const t=u.filter(h=>!h.virtual);if(!t.length)return null;const n=V(),i=n?l.applyToRoute(s,n,t):H(s,t,{snapThreshold:E,from:o,to:r});return i.snapped&&(y=!0),T=i.snapped,i}function k(){const t=$(u,_());return N(t.lines,t.bounds),t}function W({from:t,to:n,waypoints:i,accessible:h}){const L=K({engine:A,from:t,to:n,waypoints:i,accessible:h});if(!L.length)return v(),!1;y=!1,o=t,r=n,u=L,U();const{lines:b}=k(),a=F();return w(),g(a),a&&m(a,!0),R(a?p:G(b)),e.flush(),!0}function j(t){const n=s!==null;if(s=t,!t){T=!1,l.hideIcon(),g(null),n&&w(),m(),R(p),e.flush();return}l.placeIcon(t);const i=F();w(),g(i),i&&m(i,!0),R(p),e.flush()}function q(){U();const t=F();w(),g(t),t&&m(t,!0),u.length&&k(),R(p),e.flush()}function v(){y=!1,u=[],o=null,r=null,p=0,d.hide(),I.clear(),l.clearTrail(),O.clear(),N([],new C),R(0),e.flush()}function z(){v(),s=null,e.destroy()}return{setRoute:W,onPositionChanged:j,onFloorChanged:q,clearRoute:v,destroy:z}}
@@ -1,7 +1,6 @@
1
- import { type IconProvider } from '../adapters';
2
1
  import { type RouteEndpoint, type RoutePoint } from '../core';
3
2
  import { type WayfindingRenderer } from '../renderer';
4
- import { type FloorContext } from './types';
3
+ import { type FloorContext, type IconProvider } from './types';
5
4
  interface EndpointView {
6
5
  /** Place source/destination icons. `snapped` — the live CP is currently on the route, so its
7
6
  * source shows greyed-out. A kiosk anchor (off-graph origin that isn't the CP) stays hidden;
@@ -1,8 +1,7 @@
1
- import type { IconProvider } from '../adapters';
2
- import type { RouteEndpoint, RouteLine, RoutePoint, RouteSnapResult } from '../core';
1
+ import { type RouteEndpoint, type RouteLine, type RoutePoint, type RouteSnapResult } from '../core';
3
2
  import type { WayfindingRenderer } from '../renderer';
4
- import type { FloorContext, PositionInput } from './types';
5
3
  import type { TrailView } from './trailView';
4
+ import type { FloorContext, IconProvider, PositionInput } from './types';
6
5
  /**
7
6
  * Snapshot of the visible route the position-trail view operates on. The runtime computes it
8
7
  * (visibility filtering, route-points derivation) and passes it in so the view stays free of
@@ -11,8 +10,8 @@ import type { TrailView } from './trailView';
11
10
  export interface RouteSnapshot {
12
11
  readonly from: RouteEndpoint;
13
12
  readonly to: RouteEndpoint;
14
- readonly routePoints: ReadonlyArray<RoutePoint>;
15
- readonly visibleLines: ReadonlyArray<RouteLine>;
13
+ readonly routePoints: readonly RoutePoint[];
14
+ readonly visibleLines: readonly RouteLine[];
16
15
  }
17
16
  /**
18
17
  * Owns the user-position icon and the single off-graph trail slot. The runtime decides which end of
@@ -32,7 +31,7 @@ interface PositionTrailView {
32
31
  * `routeLines` is decoupled from `route.visibleLines` so the snap stays correct regardless of
33
32
  * which floor is currently selected in the UI.
34
33
  */
35
- applyToRoute(position: PositionInput, route: RouteSnapshot, routeLines: ReadonlyArray<RouteLine>): RouteSnapResult;
34
+ applyToRoute(position: PositionInput, route: RouteSnapshot, routeLines: readonly RouteLine[]): RouteSnapResult;
36
35
  /** Draw the trail from `tip` (a route's graph endpoint) to `anchor` (the off-graph point).
37
36
  * Passing either as null hides the trail. */
38
37
  setTrail(tip: RoutePoint | null, anchor: RoutePoint | null): void;
@@ -1,6 +1,5 @@
1
- import type { IconProvider } from '../adapters';
2
- import type { WayfindingRenderer } from '../renderer';
3
- import type { PositionInput } from './types';
1
+ import { type WayfindingRenderer } from '../renderer';
2
+ import { type IconProvider, type PositionInput } from './types';
4
3
  export declare const CURRENT_POSITION_POINT_ID = "current-position";
5
4
  interface PositionView {
6
5
  /**
@@ -1,5 +1,5 @@
1
- import type { RouteLine } from '../core';
2
- import { Box } from '@expofp/geometry';
1
+ import { type Box } from '@expofp/geometry';
2
+ import { type RouteLine } from '../core';
3
3
  /**
4
4
  * Compute the payload for the runtime's `onRouteUpdate` callback:
5
5
  * - `lines`: route lines as the consumer sees them — virtual graph-internal
@@ -8,7 +8,7 @@ import { Box } from '@expofp/geometry';
8
8
  * (`bounds.isEmpty()`) when the route is empty or collapses to a single point
9
9
  * (no useful viewport to fit); consumers check `isEmpty()` rather than null.
10
10
  */
11
- export declare function computeRouteUpdate(routeLines: ReadonlyArray<RouteLine>, visibleLines: ReadonlyArray<RouteLine>): {
11
+ export declare function computeRouteUpdate(routeLines: readonly RouteLine[], visibleLines: readonly RouteLine[]): {
12
12
  lines: RouteLine[];
13
13
  bounds: Box;
14
14
  };
@@ -1,7 +1,6 @@
1
- import { type IconProvider } from '../adapters';
2
1
  import { type RoutePoint } from '../core';
3
2
  import { type WayfindingRenderer } from '../renderer';
4
- import { type FloorContext } from './types';
3
+ import { type FloorContext, type IconProvider } from './types';
5
4
  /**
6
5
  * Callers choose the slot name and provide two route-points; the view draws a dotted trail between them (or hides
7
6
  * them if the layers are not on the active floor)
@@ -1,7 +1,6 @@
1
- import type { IconProvider } from '../adapters';
2
- import type { RouteLine, TransitionPointDef } from '../core';
1
+ import { type RouteLine, type TransitionPointDef } from '../core';
3
2
  import type { WayfindingRenderer } from '../renderer';
4
- import type { FloorContext } from './types';
3
+ import type { FloorContext, IconProvider } from './types';
5
4
  interface TransitionView {
6
5
  /** Recomputes transition points from route lines + floor context and places their icons. */
7
6
  place(routeLines: RouteLine[]): void;
@@ -1,7 +1,15 @@
1
1
  import type { Box } from '@expofp/geometry';
2
2
  import type { RouteEndpoint, RouteLine, TransitionPointDef, WayfindingEngine } from '../core';
3
3
  import type { WayfindingRenderer } from '../renderer';
4
- import type { IconProvider } from '../adapters';
4
+ export type IconName = 'source' | 'source_inactive' | 'destination' | 'current' | 'current_arrow' | 'transition' | 'transition_up' | 'transition_down' | 'transition_entry' | 'trail';
5
+ export interface IconAsset {
6
+ readonly canvas: HTMLCanvasElement;
7
+ readonly width: number;
8
+ readonly height: number;
9
+ }
10
+ export interface IconProvider {
11
+ getIcon(name: IconName): IconAsset;
12
+ }
5
13
  /** User position + optional heading, without efp store coupling. */
6
14
  export interface PositionInput {
7
15
  readonly x: number;
@@ -20,7 +28,7 @@ export interface LayerNames {
20
28
  export interface SetRouteInput {
21
29
  readonly from: RouteEndpoint;
22
30
  readonly to: RouteEndpoint;
23
- readonly waypoints?: ReadonlyArray<RouteEndpoint>;
31
+ readonly waypoints?: readonly RouteEndpoint[];
24
32
  readonly accessible: boolean;
25
33
  }
26
34
  export interface WayfindingRuntime {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expofp/floorplan",
3
- "version": "3.10.0",
3
+ "version": "3.10.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/expofp/efp-app.git",
@@ -72,9 +72,9 @@
72
72
  "tslib": "^2.3.0",
73
73
  "uuid": "^9.0.1",
74
74
  "zod": "4.3.5",
75
- "@expofp/debug": "3.10.0",
76
- "@expofp/geometry": "3.10.0",
77
- "@expofp/resolve": "3.10.0"
75
+ "@expofp/debug": "3.10.1",
76
+ "@expofp/geometry": "3.10.1",
77
+ "@expofp/resolve": "3.10.1"
78
78
  },
79
79
  "devDependencies": {
80
80
  "@babel/plugin-proposal-decorators": "^8.0.2",
@@ -1,28 +0,0 @@
1
- (function() {
2
- try {
3
- var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
- e.SENTRY_RELEASE = { id: "3.10.0" };
5
- var t = new e.Error().stack;
6
- t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "6d17f9c3-15f0-4e0a-bcd4-f8ac25d1ed0d", e._sentryDebugIdIdentifier = "sentry-dbid-6d17f9c3-15f0-4e0a-bcd4-f8ac25d1ed0d");
7
- } catch {}
8
- })();
9
- import "./rolldown-runtime-75nnKCA3.js";
10
- import { t as e } from "./react-ZKXuYPAa.js";
11
- import { t } from "./jsx-runtime-B9nB58Uq.js";
12
- import "./i18n-C0K3C5Jv.js";
13
- import { t as n } from "./index.module-BMETmKP4.js";
14
- import { ct as r, lt as i, o as a } from "./store-DANngpFy.js";
15
- import { n as o } from "./mobx-CUQ-tbco.js";
16
- import { t as s } from "./KioskStore-CzIrPa11.js";
17
- import { t as c } from "./TouchHand-BHu7qEu9.js";
18
- e();
19
- var l = t(), u = n(() => (o(() => {
20
- if (localStorage.getItem("kiosk") === "0") return;
21
- s.restoreData();
22
- let e = s.kiosk;
23
- if (e) return r(e, !0), i(e), s.resetCamera(), a.setResetCameraFn(() => s.resetCamera()), () => {
24
- a.uiState.setKioskData(null), a.uiState.resetMapSettings();
25
- };
26
- }), a.uiState.kiosk && a.uiState.inIdle ? /* @__PURE__ */ (0, l.jsx)(c, {}) : null));
27
- //#endregion
28
- export { u as default };