@mappedin/mappedin-js 6.20.0 → 6.21.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.
@@ -1,4 +1,4 @@
1
- import * as _mappedin_mvf_v25 from "@mappedin/mvf-v2";
1
+ import * as _mappedin_mvf_v22 from "@mappedin/mvf-v2";
2
2
  import { AnnotationCollection, AnnotationSymbol, AreaCollection, AreaId, BaseTextAreaProperties, Category, CategoryId, Connection as Connection$1, Details, EnterpriseCategory as EnterpriseCategory$1, EnterpriseCategoryId, EnterpriseLocation as EnterpriseLocation$1, EnterpriseLocationId, EnterpriseLocationInstance, EnterpriseTexture, EnterpriseVenue as EnterpriseVenue$1, EnterpriseVenueType, EntranceCollection, EntranceFeature, Facade as Facade$1, Feature as Feature$1, FeatureCollection as FeatureCollection$1, FloatingFloorTextProperties, FloorCollection, FloorId, FloorProperties, FloorStack as FloorStack$1, FloorTextCommonProperties, Geometry as Geometry$1, Hyperlink as Hyperlink$1, Image, Language, LineStringStyle, LineStringStyle as TMVFLineStringStyle, Location, LocationId, LocationLink, LocationSocial, LocationSocial as LocationSocial$1, LocationState, LocationState as LocationState$1, MVFv2_STANDARD_MVFv3, MultiPolygon as MultiPolygon$1, NavigationFlagDeclarations, NodeCollection, NodeId, ObstructionCollection, ObstructionCollection as ObstructionCollection$1, ObstructionFeature, ObstructionId, OpeningHoursSpecification, OperationHours, OperationHours as OperationHours$1, ParsedMVF, ParsedMVF as TMVF, ParsedMVFLocalePack, Point as Point$1, PointStyle, PointStyle as TMVFPointStyle, Polygon as Polygon$1, PolygonStyle, PolygonStyle as TMVFPolygonStyle, SiblingGroup, SiblingGroup as SiblingGroup$1, SpaceCollection, SpaceCollection as SpaceCollection$1, SpaceFeature, SpaceId, SpaceProperties, Style as TMVFStyle, StyleCollection, StyleCollection as TMVFStyleCollection, TilesetStyle } from "@mappedin/mvf-v2";
3
3
  import { MVFv2_STANDARD_MVFv3 as MVFv2_STANDARD_MVFv3$1, ParsedMVF as ParsedMVF$1, RawMVF } from "@mappedin/mvf-v2/no-validator-lite";
4
4
  import * as _mappedin_renderer_three0 from "@mappedin/renderer-three";
@@ -4916,6 +4916,10 @@ declare class Navigation {
4916
4916
  get travelledFraction(): number | null;
4917
4917
  /**
4918
4918
  * Highlights path section between two coordinates. This can be used to highlight any section of the path or indicated the currently traveled path.
4919
+ *
4920
+ * In multi-destination mode the highlight is scoped to the active path so
4921
+ * that a `from`/`to` pair on the active route doesn't accidentally pull in
4922
+ * (or get matched to) segments from other destinations.
4919
4923
  */
4920
4924
  highlightPathSection(from: Coordinate, to: Coordinate, options?: TPathSectionHighlightOptions): {
4921
4925
  animation: Promise<unknown>;
@@ -5080,6 +5084,12 @@ declare class FloorObject implements FloorProperties {
5080
5084
  shortName?: string | undefined;
5081
5085
  subtitle?: string | undefined;
5082
5086
  occluderId?: number;
5087
+ /**
5088
+ * Entity id of the per-floor geometry group container created in {@link load}.
5089
+ * Used to parent ancillary content (e.g. the focusable footprint) so visibility
5090
+ * is driven by the same container as the rest of the floor geometry.
5091
+ */
5092
+ geometryContainer?: EntityId<GroupContainerState>;
5083
5093
  private loaded;
5084
5094
  private styleMap;
5085
5095
  private obstructions?;
@@ -5128,6 +5138,14 @@ declare class FloorObject implements FloorProperties {
5128
5138
  * Add an occluder to the floor if it has a footprint.
5129
5139
  */
5130
5140
  addOccluder(): void;
5141
+ /**
5142
+ * Adds an invisible extruded footprint geometry to the floor that participates
5143
+ * in dynamic focus. Using a single merged feature gives the geometry-in-focus
5144
+ * system a stable bounding volume per floor without scanning every interior
5145
+ * space, and the resulting entity id `${FOCUSABLE_FOOTPRINT_PREFIX}${floorId}-merged`
5146
+ * is the canonical id resolved back to the floor by `getFacadeFromEntityId`.
5147
+ */
5148
+ addFocusFootprint(): void;
5131
5149
  /**
5132
5150
  * Whether the floor contains facade geometry.
5133
5151
  */
@@ -7633,7 +7651,7 @@ declare class Camera {
7633
7651
  /**
7634
7652
  * The camera's current pan mode.
7635
7653
  */
7636
- get panMode(): "default" | "elevation";
7654
+ get panMode(): "elevation" | "default";
7637
7655
  /**
7638
7656
  * Set the camera's pan mode. 'elevation' moves the camera up and down, while 'default' allows the camera to pan in all directions.
7639
7657
  * @experimental
@@ -9077,7 +9095,7 @@ declare const geometryStateSchemaPartial: ZodObject<{
9077
9095
  color: ZodOptional<ZodDefault<ZodUnion<readonly [ZodString, ZodLiteral<"initial">]>>>;
9078
9096
  topColor: ZodOptional<ZodOptional<ZodUnion<readonly [ZodString, ZodLiteral<"initial">]>>>;
9079
9097
  hoverColor: ZodOptional<ZodOptional<ZodUnion<readonly [ZodString, ZodLiteral<"initial">]>>>;
9080
- interactive: ZodOptional<ZodDefault<ZodBoolean>>;
9098
+ interactive: ZodOptional<ZodDefault<ZodUnion<readonly [ZodBoolean, ZodLiteral<"pass-through">]>>>;
9081
9099
  opacity: ZodOptional<ZodDefault<ZodNumber>>;
9082
9100
  height: ZodOptional<ZodDefault<ZodNumber>>;
9083
9101
  altitude: ZodOptional<ZodDefault<ZodNumber>>;
@@ -9100,7 +9118,7 @@ declare const geometryStateSchemaStrict: ZodObject<{
9100
9118
  color: ZodDefault<ZodUnion<readonly [ZodString, ZodLiteral<"initial">]>>;
9101
9119
  topColor: ZodOptional<ZodUnion<readonly [ZodString, ZodLiteral<"initial">]>>;
9102
9120
  hoverColor: ZodOptional<ZodUnion<readonly [ZodString, ZodLiteral<"initial">]>>;
9103
- interactive: ZodDefault<ZodBoolean>;
9121
+ interactive: ZodDefault<ZodUnion<readonly [ZodBoolean, ZodLiteral<"pass-through">]>>;
9104
9122
  opacity: ZodDefault<ZodNumber>;
9105
9123
  height: ZodDefault<ZodNumber>;
9106
9124
  altitude: ZodDefault<ZodNumber>;
@@ -9227,8 +9245,8 @@ declare const markerStateSchema: ZodObject<{
9227
9245
  }, $strip>;
9228
9246
  /** @internal */
9229
9247
  declare const markerStateSchemaPartial: ZodObject<{
9230
- enabled: ZodOptional<ZodDefault<ZodBoolean>>;
9231
9248
  type: ZodOptional<ZodDefault<ZodLiteral<"marker">>>;
9249
+ enabled: ZodOptional<ZodDefault<ZodBoolean>>;
9232
9250
  interactive: ZodOptional<ZodDefault<ZodUnion<readonly [ZodBoolean, ZodLiteral<"pointer-events-auto">]>>>;
9233
9251
  rank: ZodOptional<ZodCustom<"initial" | TCollisionRankingTier, "initial" | TCollisionRankingTier>>;
9234
9252
  occlude: ZodOptional<ZodDefault<ZodBoolean>>;
@@ -9294,6 +9312,7 @@ declare const pathStateSchemaPartial: ZodObject<{
9294
9312
  highlightColor: ZodOptional<ZodDefault<ZodString>>;
9295
9313
  highlightWidthMultiplier: ZodOptional<ZodDefault<ZodNumber>>;
9296
9314
  highlightCompleteFraction: ZodOptional<ZodDefault<ZodNumber>>;
9315
+ highlightDisplayArrowsOnPath: ZodOptional<ZodDefault<ZodBoolean>>;
9297
9316
  xrayOpacity: ZodOptional<ZodDefault<ZodNumber>>;
9298
9317
  travelledEndFraction: ZodOptional<ZodDefault<ZodNumber>>;
9299
9318
  travelledColor: ZodOptional<ZodDefault<ZodString>>;
@@ -9345,6 +9364,7 @@ declare const pathStateSchemaStrict: ZodObject<{
9345
9364
  highlightColor: ZodDefault<ZodString>;
9346
9365
  highlightWidthMultiplier: ZodDefault<ZodNumber>;
9347
9366
  highlightCompleteFraction: ZodDefault<ZodNumber>;
9367
+ highlightDisplayArrowsOnPath: ZodDefault<ZodBoolean>;
9348
9368
  xrayOpacity: ZodDefault<ZodNumber>;
9349
9369
  travelledEndFraction: ZodDefault<ZodNumber>;
9350
9370
  travelledColor: ZodDefault<ZodString>;
@@ -9403,7 +9423,7 @@ declare const shapeStateSchemaPartial: ZodObject<{
9403
9423
  hoverColor: ZodOptional<ZodOptional<ZodString>>;
9404
9424
  height: ZodOptional<ZodDefault<ZodNumber>>;
9405
9425
  opacity: ZodOptional<ZodDefault<ZodNumber>>;
9406
- interactive: ZodOptional<ZodDefault<ZodBoolean>>;
9426
+ interactive: ZodOptional<ZodDefault<ZodUnion<readonly [ZodBoolean, ZodLiteral<"pass-through">]>>>;
9407
9427
  bevel: ZodOptional<ZodOptional<ZodObject<{
9408
9428
  enabled: ZodOptional<ZodBoolean>;
9409
9429
  thickness: ZodOptional<ZodNumber>;
@@ -9422,7 +9442,7 @@ declare const shapeStateSchemaStrict: ZodObject<{
9422
9442
  hoverColor: ZodOptional<ZodString>;
9423
9443
  height: ZodDefault<ZodNumber>;
9424
9444
  opacity: ZodDefault<ZodNumber>;
9425
- interactive: ZodDefault<ZodBoolean>;
9445
+ interactive: ZodDefault<ZodUnion<readonly [ZodBoolean, ZodLiteral<"pass-through">]>>;
9426
9446
  bevel: ZodOptional<ZodObject<{
9427
9447
  enabled: ZodOptional<ZodBoolean>;
9428
9448
  thickness: ZodOptional<ZodNumber>;
@@ -12192,6 +12212,16 @@ type TPathSectionHighlightOptions = {
12192
12212
  * @default 1500
12193
12213
  */
12194
12214
  animationDuration?: number;
12215
+ /**
12216
+ * Independently controls whether direction arrows are drawn inside the
12217
+ * highlighted section, regardless of the path-level `displayArrowsOnPath`.
12218
+ * If omitted, the highlighted section inherits the path-level setting.
12219
+ *
12220
+ * Animation still follows the path-level `animateArrowsOnPath`, so the
12221
+ * highlighted arrows will animate when the path was created with
12222
+ * `animateArrowsOnPath: true`.
12223
+ */
12224
+ displayArrowsOnPath?: boolean;
12195
12225
  };
12196
12226
  /**
12197
12227
  * Altitude and visual height data for a single floor elevation.
@@ -12845,8 +12875,8 @@ declare class Area extends DetailedMapData<AreaCollection['features'][number]> i
12845
12875
  */
12846
12876
  get geoJSON(): {
12847
12877
  properties: null;
12848
- type: _mappedin_mvf_v25.FeatureType;
12849
- geometry: _mappedin_mvf_v25.Polygon;
12878
+ type: _mappedin_mvf_v22.FeatureType;
12879
+ geometry: _mappedin_mvf_v22.Polygon;
12850
12880
  };
12851
12881
  /** @internal */
12852
12882
  get focusTarget(): this;
@@ -12948,8 +12978,8 @@ declare class Door extends DetailedMapData<EntranceFeature> implements IGeoJSOND
12948
12978
  */
12949
12979
  get geoJSON(): {
12950
12980
  properties: null;
12951
- type: _mappedin_mvf_v25.FeatureType;
12952
- geometry: _mappedin_mvf_v25.LineString;
12981
+ type: _mappedin_mvf_v22.FeatureType;
12982
+ geometry: _mappedin_mvf_v22.LineString;
12953
12983
  };
12954
12984
  /** @internal */
12955
12985
  get focusTarget(): Coordinate;
@@ -13085,8 +13115,8 @@ declare class Space extends DetailedMapData<SpaceFeature> implements IGeoJSONDat
13085
13115
  */
13086
13116
  get geoJSON(): {
13087
13117
  properties: null;
13088
- type: _mappedin_mvf_v25.FeatureType;
13089
- geometry: _mappedin_mvf_v25.Point | _mappedin_mvf_v25.Polygon | _mappedin_mvf_v25.LineString;
13118
+ type: _mappedin_mvf_v22.FeatureType;
13119
+ geometry: _mappedin_mvf_v22.Point | _mappedin_mvf_v22.Polygon | _mappedin_mvf_v22.LineString;
13090
13120
  };
13091
13121
  /** @internal */
13092
13122
  get focusTarget(): this | Coordinate;
@@ -13172,7 +13202,7 @@ declare class PointOfInterest extends DetailedMapData<FeatureCollection$1<Point$
13172
13202
  */
13173
13203
  get geoJSON(): {
13174
13204
  properties: null;
13175
- type: _mappedin_mvf_v25.FeatureType;
13205
+ type: _mappedin_mvf_v22.FeatureType;
13176
13206
  geometry: Point$1;
13177
13207
  };
13178
13208
  /**
@@ -13286,8 +13316,8 @@ declare class Annotation extends DetailedMapData<AnnotationCollection['features'
13286
13316
  */
13287
13317
  get geoJSON(): {
13288
13318
  properties: null;
13289
- type: _mappedin_mvf_v25.FeatureType;
13290
- geometry: _mappedin_mvf_v25.Point;
13319
+ type: _mappedin_mvf_v22.FeatureType;
13320
+ geometry: _mappedin_mvf_v22.Point;
13291
13321
  };
13292
13322
  /** @internal */
13293
13323
  get focusTarget(): Coordinate;
@@ -13503,8 +13533,8 @@ declare class MapObject extends DetailedMapData<ObstructionFeature> implements I
13503
13533
  */
13504
13534
  get geoJSON(): {
13505
13535
  properties: null;
13506
- type: _mappedin_mvf_v25.FeatureType;
13507
- geometry: _mappedin_mvf_v25.Polygon | _mappedin_mvf_v25.LineString;
13536
+ type: _mappedin_mvf_v22.FeatureType;
13537
+ geometry: _mappedin_mvf_v22.Polygon | _mappedin_mvf_v22.LineString;
13508
13538
  };
13509
13539
  /** @internal */
13510
13540
  get anchorTarget(): Coordinate;
@@ -13817,8 +13847,8 @@ declare class Node extends BaseMetaData implements IGeoJSONData, IFocusable, IAn
13817
13847
  */
13818
13848
  get geoJSON(): {
13819
13849
  properties: null;
13820
- type: _mappedin_mvf_v25.FeatureType;
13821
- geometry: _mappedin_mvf_v25.Point;
13850
+ type: _mappedin_mvf_v22.FeatureType;
13851
+ geometry: _mappedin_mvf_v22.Point;
13822
13852
  };
13823
13853
  /** @internal */
13824
13854
  get focusTarget(): Coordinate;
@@ -13909,9 +13939,15 @@ declare class FloorStack extends BaseMapData implements IGeoJSONData, IFocusable
13909
13939
  */
13910
13940
  get floors(): [Floor, ...Floor[]];
13911
13941
  /**
13912
- * Get the default floor for this floor stack
13942
+ * Gets the default floor for this floor stack.
13943
+ *
13944
+ * Resolution order:
13945
+ * 1. The explicitly configured default floor, when it resolves to a known {@link Floor}.
13946
+ * 2. Otherwise, the floor whose elevation is nearest to ground level (zero).
13947
+ *
13948
+ * @returns The default {@link Floor}, or `undefined` when this floor stack has no floors.
13913
13949
  */
13914
- get defaultFloor(): Floor;
13950
+ get defaultFloor(): Floor | undefined;
13915
13951
  /**
13916
13952
  * Gets the facade ({@link Facade}) representing this floor stack, if it exists.
13917
13953
  */
@@ -14260,7 +14296,7 @@ declare class EnterpriseLocation extends BaseMetaData implements Omit<Enterprise
14260
14296
  parentId?: string;
14261
14297
  });
14262
14298
  /** @internal */
14263
- get focusTarget(): Coordinate[] | Space[];
14299
+ get focusTarget(): Space[] | Coordinate[];
14264
14300
  /** @internal */
14265
14301
  get navigationTarget(): Space[];
14266
14302
  /**
@@ -15868,7 +15904,7 @@ declare class MapData {
15868
15904
  * console.log(`Current language: ${language.name} (${language.code})`);
15869
15905
  * ```
15870
15906
  */
15871
- get currentLanguage(): _mappedin_mvf_v25.Language | undefined;
15907
+ get currentLanguage(): _mappedin_mvf_v22.Language | undefined;
15872
15908
  /**
15873
15909
  * Gets the natural bearing of the map.
15874
15910
  *
@@ -16148,6 +16184,11 @@ declare class StyleComponent implements Style$1 {
16148
16184
  opacity: number;
16149
16185
  width: number;
16150
16186
  height: number;
16187
+ /**
16188
+ * The height the geometry's vertices were baked at; the divisor for instance
16189
+ * height scaling (`height / initialHeight`). Provisional until the deferred bake:
16190
+ * re-anchored to the actual baked height in `BatchedMeshSystem.populateEntityMesh`.
16191
+ */
16151
16192
  initialHeight: number;
16152
16193
  altitude: number;
16153
16194
  join: LineStyle$2['join'];
@@ -16551,10 +16592,18 @@ type FeatureCollectionState = {
16551
16592
  */
16552
16593
  side?: MaterialSide;
16553
16594
  /**
16554
- * @deprecated Per-feature property; read-through to the first child is
16555
- * preserved for now.
16595
+ * Controls how the feature collection participates in pointer-event raycasting.
16596
+ * Setting this cascades to every child geometry.
16597
+ *
16598
+ * - `true`: hover and click handlers fire on the child geometries.
16599
+ * - `false` (default): each child geometry captures the raycast — clicks
16600
+ * land on whichever feature is in front and stop there — but no hover or
16601
+ * click handler fires. Children still shield anything rendered behind
16602
+ * them from receiving events.
16603
+ * - `'pass-through'`: raycasts skip every feature in the collection so
16604
+ * pointer events fall through to whatever is rendered behind.
16556
16605
  */
16557
- interactive?: boolean;
16606
+ interactive?: InteractiveMode;
16558
16607
  /**
16559
16608
  * Collection-level visibility. Maps directly to `Object3D.visible` on the
16560
16609
  * wrapping `FeatureCollectionObject3D`; toggling cascades to children via
@@ -16761,10 +16810,18 @@ declare class SimpleGeometryMaterial extends MeshLambertMaterial {
16761
16810
  }
16762
16811
  //#endregion
16763
16812
  //#region ../renderer-three/src/components/image.d.ts
16764
- declare class EntityMesh$1 extends Mesh {
16765
- userData: {
16766
- entityId: string | number;
16767
- };
16813
+ /** userData carried by an {@link ImageMesh}: the entity id plus per-asset metadata hoisted once at
16814
+ * creation so the per-frame update loop never recomputes it. */
16815
+ interface ImageMeshUserData {
16816
+ entityId: string | number;
16817
+ /** Cache key into the LOD controller; hoisted once in createImageMesh, read each frame. */
16818
+ cacheKey: string;
16819
+ /** Whether the asset URL supports server-side resizing; hoisted to avoid per-frame recompute. */
16820
+ isResizable: boolean;
16821
+ }
16822
+ /** Per-image Three.js mesh. Image-only — distinct from the generic `EntityMesh<T>` in `types/index.ts`. */
16823
+ declare class ImageMesh extends Mesh {
16824
+ userData: ImageMeshUserData;
16768
16825
  }
16769
16826
  type ImageStyle = {
16770
16827
  /**
@@ -16829,7 +16886,7 @@ type ImageState = {
16829
16886
  };
16830
16887
  declare class ImageComponent {
16831
16888
  mesh: Geometry3DObject3D;
16832
- imageMesh?: EntityMesh$1;
16889
+ imageMesh?: ImageMesh;
16833
16890
  outline?: LineSegments;
16834
16891
  readonly type = "image";
16835
16892
  instanceIndex: number;
@@ -16906,14 +16963,21 @@ type GeometryState = {
16906
16963
  */
16907
16964
  hoverColor?: string;
16908
16965
  /**
16909
- * Whether the geometry is interactive, which means it can be hovered over and clicked on.
16966
+ * Controls how the geometry participates in pointer-event raycasting.
16967
+ *
16968
+ * - `true`: hover and click handlers fire on this geometry.
16969
+ * - `false` (default): the geometry captures the raycast — clicks land on
16970
+ * it and stop there — but no hover or click handler fires. The geometry
16971
+ * still shields anything rendered behind it from receiving events.
16972
+ * - `'pass-through'`: raycasts skip this geometry entirely so pointer
16973
+ * events fall through to whatever is rendered behind it.
16910
16974
  *
16911
16975
  * @example
16912
16976
  * ```javascript
16913
16977
  * renderer.on('click', ({ geometry }) => {});
16914
16978
  * ```
16915
16979
  */
16916
- interactive: boolean;
16980
+ interactive: InteractiveMode;
16917
16981
  /**
16918
16982
  * Whether the geometry is outlined with a 30% darkened color. This effect adds lines around the geometry to make it stand out.
16919
16983
  */
@@ -17001,6 +17065,15 @@ declare class MeshComponent {
17001
17065
  textEntityId?: string;
17002
17066
  readonly type = "geometry";
17003
17067
  dirty: boolean;
17068
+ /**
17069
+ * Single source of truth for `interactive: 'pass-through'`. When true, the
17070
+ * interaction system excludes this mesh from `_hitBoxes` so the raycast
17071
+ * never hits it and pointer events fall through to whatever is rendered
17072
+ * behind. Set via `setState({ interactive: 'pass-through' })`. Distinct
17073
+ * from the presence of `InteractionComponent`, which represents
17074
+ * `interactive: true`.
17075
+ */
17076
+ pointerEventsPassThrough: boolean;
17004
17077
  shouldDetach: boolean;
17005
17078
  detached: boolean;
17006
17079
  instanceIndex: number;
@@ -17205,6 +17278,12 @@ type PathState$1 = {
17205
17278
  highlightColor: string;
17206
17279
  highlightWidthMultiplier: number;
17207
17280
  highlightCompleteFraction: number;
17281
+ /**
17282
+ * Independently controls whether arrows are drawn inside the highlighted
17283
+ * section of the path. When omitted on `addPath` it inherits from
17284
+ * `displayArrowsOnPath`. Animation still follows `animateArrowsOnPath`.
17285
+ */
17286
+ highlightDisplayArrowsOnPath: boolean;
17208
17287
  /**
17209
17288
  * The opacity of the path when it's behind geometry (x-ray effect). Value from 0 to 1.
17210
17289
  * @default 0.25
@@ -17366,6 +17445,12 @@ type AddPathOptions = {
17366
17445
  highlightColor?: string;
17367
17446
  highlightWidthMultiplier?: number;
17368
17447
  highlightCompleteFraction?: number;
17448
+ /**
17449
+ * Independently controls whether arrows are drawn inside the highlighted
17450
+ * section of the path. When omitted, it inherits from `displayArrowsOnPath`.
17451
+ * Animation still follows `animateArrowsOnPath`.
17452
+ */
17453
+ highlightDisplayArrowsOnPath?: boolean;
17369
17454
  /**
17370
17455
  * The opacity of the path when it's behind geometry (x-ray effect). Value from 0 to 1.
17371
17456
  * @default 0.25
@@ -17503,6 +17588,7 @@ declare class PathComponent {
17503
17588
  highlightCompleteFraction: number;
17504
17589
  highlightWidthMultiplier: number;
17505
17590
  highlightColor: string;
17591
+ highlightDisplayArrowsOnPath: boolean;
17506
17592
  xrayOpacity: number;
17507
17593
  xrayStyle?: XrayStyleConfig;
17508
17594
  travelledEndFraction: number;
@@ -18021,6 +18107,10 @@ interface PathUniforms {
18021
18107
  type: 'f';
18022
18108
  value: number;
18023
18109
  };
18110
+ highlightDisplayArrowsOnPath: {
18111
+ type: 'b';
18112
+ value: boolean;
18113
+ };
18024
18114
  travelledEndFraction: {
18025
18115
  type: 'f';
18026
18116
  value: number;
@@ -18941,6 +19031,18 @@ declare class CameraSystem extends PubSub<CameraEvents> {
18941
19031
  private createCameraPlane;
18942
19032
  private addEventListeners;
18943
19033
  private addMouseEventListeners;
19034
+ /**
19035
+ * Ends an in-progress drag only when the pointer actually leaves the browser
19036
+ * window. `mouseout` bubbles, so it also fires when the pointer merely moves
19037
+ * from the canvas onto another in-page element rendered above it — for
19038
+ * example an interactive HTML marker or a developer-owned overlay. Treating
19039
+ * those in-page transitions as drag-end froze pan/rotate gestures until the
19040
+ * mouse button was released and pressed again. When the pointer leaves the
19041
+ * window, `relatedTarget` is `null`; in-page transitions always carry a
19042
+ * non-null `relatedTarget`.
19043
+ * @param event - The `mouseout` event from the window listener.
19044
+ */
19045
+ private onWindowMouseOut;
18944
19046
  private addMouseMoveEventListeners;
18945
19047
  private removeMouseMoveEventListeners;
18946
19048
  private removeMouseUpEventListeners;
@@ -19531,49 +19633,24 @@ declare class ImageSystem extends PubSub<{
19531
19633
  private naturalBearing;
19532
19634
  private imagePlacementOptions;
19533
19635
  private cameraFrustum;
19534
- private transformImageRequest?;
19535
19636
  private cameraWorldPosition;
19536
19637
  private debug;
19537
19638
  get debugLOD(): boolean;
19538
19639
  set debugLOD(value: boolean);
19539
19640
  /**
19540
- * Cache for tracking image LOD state. Stores the original image element
19541
- * and textures at each LOD level for memory-efficient switching.
19641
+ * The overlay LOD controller: owns all per-asset texture state and the download→promote upgrade
19642
+ * pipeline. ImageSystem holds only ECS/mesh/material/visibility and calls this seam
19643
+ * (register / get / requestUpgrade / drainPromotions / effectiveLOD / dispose). Not to be confused
19644
+ * with `TextureSystem`, which paints fixed-resolution surface textures onto polygon materials.
19542
19645
  */
19543
- private cache;
19646
+ private lod;
19544
19647
  constructor(rendererState: RendererState, convertTo3DMapPosition: Core['convertTo3DMapPosition'], projectToScreen: Core['project'], initialBearing?: number, naturalBearing?: number, imagePlacementOptions?: ImagePlacementOptions$1, transformImageRequest?: TransformImageRequest);
19545
19648
  private createImageMesh;
19546
- /**
19547
- * Gets or downloads an image texture. Cache entry must exist before calling.
19548
- * For resizable URLs (Mappedin CDN): uses server-side resizing with LOD levels.
19549
- * For non-resizable URLs: caps to the specified size once at load.
19550
- * @param cacheKey - Cache key (URL or URL|size for non-resizable images)
19551
- * @param url - The image URL for loading
19552
- * @param targetSize - Texture dimension in pixels
19553
- * @returns Promise that resolves to the texture
19554
- */
19555
- private getOrDownloadImage;
19556
- /**
19557
- * Returns the texture capped to maxSize. Only scales if the image exceeds maxSize.
19558
- * Used for external images to prevent VRAM exhaustion on mobile.
19559
- * @param sourceTexture - The loaded texture from TextureLoader
19560
- * @param maxSize - Maximum dimension in pixels
19561
- * @returns The original texture if within limits, or a new CanvasTexture if scaled
19562
- */
19563
- private createCappedTexture;
19564
- /**
19565
- * Updates the LOD for an image mesh based on camera distance.
19566
- * Only applies to resizable URLs (Mappedin CDN) - server handles the scaling.
19567
- * Non-resizable URLs use a fixed image size set at load time.
19568
- * @param url - The image URL
19569
- * @param imageMesh - The mesh to update
19570
- * @param position - The world position of the image
19571
- * @param maxImageSize - Maximum image size for non-resizable images (used for cache key)
19572
- */
19573
- private updateLODIfNeeded;
19574
19649
  /**
19575
19650
  * Applies debug LOD colors to all image materials when debug mode is enabled.
19576
- * Calculates LOD based on current camera position and applies appropriate color tinting.
19651
+ * Colors reflect the ACTUAL decoded resolution of the resident texture (`hi ?? base`), bucketed to
19652
+ * the ladder — not the requested tier (`hiLod`) and not the distance target. So a raster source
19653
+ * smaller than its requested tier (e.g. 666px requested at 2048) tints by what the GPU truly holds.
19577
19654
  */
19578
19655
  private applyDebugLODColors;
19579
19656
  /**
@@ -19584,10 +19661,19 @@ declare class ImageSystem extends PubSub<{
19584
19661
  currentImageScreenBBoxes: Rectangle[];
19585
19662
  private viewProjectionMatrix;
19586
19663
  private lastLODUpdateTime;
19664
+ /**
19665
+ * Reconciles a material's map to the effective resident texture (`hi ?? base`) for an asset.
19666
+ * This is the single per-frame resync point: it swaps in a deferred upgrade once it lands and
19667
+ * keeps materials sharing an asset consistent. Hot path — no allocation. Returns whether a
19668
+ * texture is resident.
19669
+ * @param material - The mesh material to reconcile
19670
+ * @param cacheKey - The asset cache key
19671
+ * @returns True if an effective texture is resident (mesh can be shown)
19672
+ */
19673
+ private reconcileMaterialTexture;
19587
19674
  update(cameraRotationRadians: number, isCameraMoving: boolean, cameraStoppedTime: number): void;
19588
19675
  /**
19589
- * Disposes all cached textures and clears the cache.
19590
- * Called when the renderer is destroyed to prevent GPU memory leaks.
19676
+ * Disposes all cached textures and clears state. Called on renderer destroy to prevent GPU leaks.
19591
19677
  */
19592
19678
  destroy(): void;
19593
19679
  updateImageScreenBBoxes(meshComponent: MeshComponent | ImageComponent): void;
@@ -20715,6 +20801,16 @@ type MapViewState$1 = {
20715
20801
  hoverColor: string;
20716
20802
  text3dHoverColor: string;
20717
20803
  };
20804
+ /**
20805
+ * Style accepted by {@link Core.addFeatureCollection}: the GeoJSON-shape-specific
20806
+ * paint/line style plus `focusable`, which enrolls the resulting mesh in the
20807
+ * dynamic-focus system. To set `interactive` (including `'pass-through'`), cascade
20808
+ * it via `setState` on the FC id after creation; that path already handles all
20809
+ * the per-leaf bookkeeping.
20810
+ */
20811
+ type FCFeatureStyle<T$1 extends FeatureCollection<Polygon | MultiPolygon | LineString, any>> = (T$1 extends FeatureCollection<LineString, any> ? LineStyle$2 : PaintStyle$2) & {
20812
+ focusable?: boolean;
20813
+ };
20718
20814
  declare class Core extends PubSub<MapEvent> {
20719
20815
  #private;
20720
20816
  options: Omit<RendererCoreOptions$2, 'outdoorView'>;
@@ -20768,6 +20864,11 @@ declare class Core extends PubSub<MapEvent> {
20768
20864
  addGroupContainer(id: string, options?: {
20769
20865
  visible?: boolean;
20770
20866
  altitude?: number;
20867
+ /**
20868
+ * Group containers do not accept `'pass-through'` (they have no mesh
20869
+ * of their own to skip). Mark individual descendants as
20870
+ * `interactive: 'pass-through'` instead.
20871
+ */
20771
20872
  interactive?: boolean;
20772
20873
  focusable?: boolean;
20773
20874
  preloadGeometry?: boolean;
@@ -20799,7 +20900,7 @@ declare class Core extends PubSub<MapEvent> {
20799
20900
  * The only collection-level concern honored at creation time is the optional
20800
20901
  * mask — read from `style(features[0])`.
20801
20902
  */
20802
- addFeatureCollection<T$1 extends FeatureCollection<Polygon | MultiPolygon | LineString, any>>(id: string, geometry: T$1, style?: ((feature: Feature<Polygon | MultiPolygon | LineString, any>) => T$1 extends FeatureCollection<LineString, any> ? LineStyle$2 : PaintStyle$2) | (T$1 extends FeatureCollection<LineString, any> ? LineStyle$2 : PaintStyle$2), fcState?: {
20903
+ addFeatureCollection<T$1 extends FeatureCollection<Polygon | MultiPolygon | LineString, any>>(id: string, geometry: T$1, style?: ((feature: Feature<Polygon | MultiPolygon | LineString, any>) => FCFeatureStyle<T$1>) | FCFeatureStyle<T$1>, fcState?: {
20803
20904
  altitude?: number;
20804
20905
  visible?: boolean;
20805
20906
  }, parent?: EntityId$1<GroupContainerState$1> | string | number | null): EntityId$1<FeatureCollectionState>;
@@ -21106,6 +21207,21 @@ type GroupContainerState$1 = {
21106
21207
  * The altitude of the group container above the ground in meters
21107
21208
  */
21108
21209
  altitude: number;
21210
+ /**
21211
+ * Controls whether the group container itself fires hover and click events.
21212
+ *
21213
+ * - `true`: container-level hover and click handlers fire when the user
21214
+ * interacts with any descendant. The container appears in the
21215
+ * `groupContainers` array of the event payload.
21216
+ * - `false` (default): no container-level handler fires. Descendants still
21217
+ * capture the raycast independently based on their own `interactive`
21218
+ * state.
21219
+ *
21220
+ * `'pass-through'` is intentionally not supported on group containers —
21221
+ * group containers have no mesh of their own to skip. Mark individual
21222
+ * descendant geometries / shapes / feature collections as
21223
+ * `interactive: 'pass-through'` instead.
21224
+ */
21109
21225
  interactive: boolean;
21110
21226
  /**
21111
21227
  * The opacity of the group container, which sets the opacity of all its children
@@ -21276,6 +21392,13 @@ type RendererCoreOptions$2 = Partial<{
21276
21392
  transformImageRequest?: TransformImageRequest;
21277
21393
  useWorkers?: boolean;
21278
21394
  useCollisionWorker?: boolean;
21395
+ /**
21396
+ * When true, skips zod validation of label/marker inputs on add and update.
21397
+ * Map-global perf escape hatch for bulk operations where inputs are already
21398
+ * known-good. Mirrors the `disableUpdateStateValidation` map option.
21399
+ * @default false
21400
+ */
21401
+ disableUpdateStateValidation?: boolean;
21279
21402
  /**
21280
21403
  * Shadow rendering configuration
21281
21404
  * @experimental
@@ -21406,6 +21529,25 @@ declare class EntityMesh<T$1> extends Mesh<any> {
21406
21529
  entity: T$1;
21407
21530
  };
21408
21531
  }
21532
+ /**
21533
+ * Controls how an entity participates in pointer-event raycasting.
21534
+ *
21535
+ * In all three modes the geometry is rendered identically — the difference is
21536
+ * purely about how pointer events are routed.
21537
+ *
21538
+ * - `true`: the entity opts in to events. Hover and click handlers registered
21539
+ * on the map view fire when the user interacts with this entity.
21540
+ * - `false` (default): the entity captures the raycast — pointer events land
21541
+ * on it and stop there — but no hover or click handler fires. This is the
21542
+ * right choice for static, non-clickable decoration that should still
21543
+ * shield whatever is rendered behind it (for example a wall in front of an
21544
+ * interactive space). Anything behind the entity will not receive events.
21545
+ * - `'pass-through'`: raycasts skip the entity entirely, so pointer events
21546
+ * fall through to whatever is rendered behind it. Useful for invisible
21547
+ * helper geometry that must never block clicks on the real content beneath
21548
+ * it (for example a per-floor focus footprint).
21549
+ */
21550
+ type InteractiveMode = boolean | 'pass-through';
21409
21551
  /**
21410
21552
  * Options for configuring bevel effects on extruded geometry.
21411
21553
  */
@@ -21736,6 +21878,8 @@ type RendererState = {
21736
21878
  readonly geometryScene: GroupContainerObject3D;
21737
21879
  hoverColor: string;
21738
21880
  text3dHoverColor: string;
21881
+ /** When true, label/marker input validation is skipped (perf escape hatch). */
21882
+ disableUpdateStateValidation: boolean;
21739
21883
  center?: Position$2;
21740
21884
  insetsPadding: InsetPadding$2;
21741
21885
  shouldMeasureCanvas: boolean;
package/lib/esm/index.js CHANGED
@@ -1 +1 @@
1
- import{A as C,B as D,C as E,D as F,E as M,F as N,I as O,J as P,K as Q,L as R,M as S,N as T,O as U,P as V,Q as W,R as X,S as Y,T as Z,U as _,V as $,W as aa,X as ba,a as c,b as d,c as e,d as f,e as g,f as h,g as i,h as j,i as k,j as l,k as m,l as n,m as o,n as p,o as q,p as r,q as s,r as t,s as u,t as v,u as w,v as x,w as y,x as z,y as A,z as B}from"./chunk-QISNVXXC.js";import{v as K,x as L}from"./chunk-JTQDGBFM.js";import{Ca as I,P as G,Y as H,a,c as b,mb as J}from"./chunk-344UV3KW.js";import"./chunk-PCLZGYNN.js";import"./chunk-S5CGAT7I.js";import"./chunk-PWEV3AFA.js";export{y as ACTION_TYPE,G as ANIMATION_TWEENS,p as Annotation,i as Area,z as BEARING_TYPE,A as CONNECTION_TYPE,m as Connection,c as Coordinate,C as DOORS,g as DetailedMapData,D as Directions,j as Door,a as E_SDK_LOG_LEVEL,t as EnterpriseCategory,s as EnterpriseLocation,u as EnterpriseVenue,r as Facade,l as Floor,q as FloorStack,e as Hyperlink,f as ImageMetaData,F as LocationCategory,E as LocationProfile,h as MAPPEDIN_COLORS,n as MapObject,P as MapView,d as Node,o as PointOfInterest,k as Space,B as WALLS,I as __INTERNAL__MAPPEDIN_LAYER_ID,L as __INTERNAL__MapLibreOverlay,K as __INTERNAL__RendererCore,R as __INTERNAL__convertToRendererCoreOptions,T as __setWatermarkOnClickFn,_ as checkWorkerUrls,N as disableText3DWorker,H as enableTestMode,S as findPreferredLanguageInVenue,W as forceEnterpriseLocations,Y as getMapData,Z as getMapDataEnterprise,M as getMultiFloorState,aa as getVersion,Q as hydrateMapData,U as hydrateMapDataFromMVF,v as parseMVF,J as preloadFont,b as setLoggerLevel,V as setUseEnterpriseAPI,O as setWorkersUrl,X as shouldForceEnterpriseLocations,$ as show3dMap,ba as show3dMapGeojson,x as unzipAndParseMVFv2,w as unzipMVF};
1
+ import{A as C,B as D,C as E,D as F,E as M,F as N,I as O,J as P,K as Q,L as R,M as S,N as T,O as U,P as V,Q as W,R as X,S as Y,T as Z,U as _,V as $,W as aa,X as ba,a as c,b as d,c as e,d as f,e as g,f as h,g as i,h as j,i as k,j as l,k as m,l as n,m as o,n as p,o as q,p as r,q as s,r as t,s as u,t as v,u as w,v as x,w as y,x as z,y as A,z as B}from"./chunk-HQ5BIBGU.js";import{v as K,x as L}from"./chunk-B5PVUD5J.js";import{Da as I,P as G,Y as H,a,c as b,nb as J}from"./chunk-23SDKQLF.js";import"./chunk-DEPTGCUS.js";import"./chunk-73NFNZ3A.js";import"./chunk-PWEV3AFA.js";export{y as ACTION_TYPE,G as ANIMATION_TWEENS,p as Annotation,i as Area,z as BEARING_TYPE,A as CONNECTION_TYPE,m as Connection,c as Coordinate,C as DOORS,g as DetailedMapData,D as Directions,j as Door,a as E_SDK_LOG_LEVEL,t as EnterpriseCategory,s as EnterpriseLocation,u as EnterpriseVenue,r as Facade,l as Floor,q as FloorStack,e as Hyperlink,f as ImageMetaData,F as LocationCategory,E as LocationProfile,h as MAPPEDIN_COLORS,n as MapObject,P as MapView,d as Node,o as PointOfInterest,k as Space,B as WALLS,I as __INTERNAL__MAPPEDIN_LAYER_ID,L as __INTERNAL__MapLibreOverlay,K as __INTERNAL__RendererCore,R as __INTERNAL__convertToRendererCoreOptions,T as __setWatermarkOnClickFn,_ as checkWorkerUrls,N as disableText3DWorker,H as enableTestMode,S as findPreferredLanguageInVenue,W as forceEnterpriseLocations,Y as getMapData,Z as getMapDataEnterprise,M as getMultiFloorState,aa as getVersion,Q as hydrateMapData,U as hydrateMapDataFromMVF,v as parseMVF,J as preloadFont,b as setLoggerLevel,V as setUseEnterpriseAPI,O as setWorkersUrl,X as shouldForceEnterpriseLocations,$ as show3dMap,ba as show3dMapGeojson,x as unzipAndParseMVFv2,w as unzipMVF};