@mappedin/mappedin-js 6.6.0 → 6.8.0

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,8 +1,8 @@
1
1
  import { Color as Color$1, CompositeExpression, DiffCommand, DiffOperations, Feature as Feature$2, FeatureFilter, FeatureState, FilterSpecification, Formatted, FormattedSection, GlobalProperties, ICanonicalTileID, IMercatorCoordinate, InterpolationType, LayerSpecification, LightSpecification, Padding, ProjectionSpecification, PromoteIdSpecification, PropertyValueSpecification, ResolvedImage, SkySpecification, SourceExpression, SourceSpecification, SpriteSpecification, StylePropertyExpression, StylePropertySpecification, StyleSpecification, TerrainSpecification, TransitionSpecification, VariableAnchorOffsetCollection } from '@maplibre/maplibre-gl-style-spec';
2
- import { AnnotationCollection, AnnotationSymbol, AreaCollection, AreaId, BaseTextAreaProperties, Category as MVFCategory, CategoryId, Connection as MVFConnection, Details, EnterpriseCategory as MVFEnterpriseCategory, EnterpriseCategory as MvfEnterpriseCategory, EnterpriseCategoryId as MVFEnterpriseCategoryId, EnterpriseLocation as MVFEnterpriseLocation, EnterpriseLocation as MvfEnterpriseLocation, EnterpriseLocationId as MVFEnterpriseLocationId, EnterpriseLocationInstance, EnterpriseTexture, EnterpriseVenue as MVFEnterpriseVenue, EntranceCollection, EntranceFeature, Facade as MVFFacade, Feature, Feature as MVFFeature, FeatureCollection, FloatingFloorTextProperties, FloorCollection, FloorId, FloorProperties as MVFFloor, FloorProperties as MvfFloor, FloorStack as MVFFloorStack, FloorStack as MvfFloorStack, FloorTextCommonProperties, Geometry, Hyperlink as MVFHyperlink, Image as MVFImage, Language, LineStringStyle, LineStringStyle as TMVFLineStringStyle, Location as MVFLocation, LocationId, LocationLink, LocationSocial, LocationState, MultiPolygon, NavigationFlagDeclarations, NodeCollection, NodeCollection as MVFNodeCollection, NodeId, ObstructionCollection, ObstructionFeature, ObstructionId, ObstructionProperties, OpeningHoursSpecification, OperationHours, ParsedMVF, ParsedMVF as TMVF, ParsedMVFLocalePack, Point, PointStyle, PointStyle as TMVFPointStyle, Polygon, PolygonStyle, PolygonStyle as TMVFPolygonStyle, SiblingGroup, SpaceCollection, SpaceFeature, SpaceId, SpaceProperties, Style as TMVFStyle, StyleCollection, StyleCollection as TMVFStyleCollection, TilesetStyle } from '@mappedin/mvf-v2';
3
- import { ParsedMVF, RawMVF } from '@mappedin/mvf-v2/no-validator';
2
+ import { AnnotationCollection, AnnotationSymbol, AreaCollection, AreaId, BaseTextAreaProperties, Category as MVFCategory, CategoryId, Connection as MVFConnection, Details, EnterpriseCategory as MVFEnterpriseCategory, EnterpriseCategory as MvfEnterpriseCategory, EnterpriseCategoryId as MVFEnterpriseCategoryId, EnterpriseLocation as MVFEnterpriseLocation, EnterpriseLocation as MvfEnterpriseLocation, EnterpriseLocationId as MVFEnterpriseLocationId, EnterpriseLocationInstance, EnterpriseTexture, EnterpriseVenue as MVFEnterpriseVenue, EnterpriseVenueType, EntranceCollection, EntranceFeature, Facade as MVFFacade, Feature, Feature as MVFFeature, FeatureCollection, FloatingFloorTextProperties, FloorCollection, FloorId, FloorProperties as MVFFloor, FloorProperties as MvfFloor, FloorStack as MVFFloorStack, FloorStack as MvfFloorStack, FloorTextCommonProperties, Geometry, Hyperlink as MVFHyperlink, Image as MVFImage, Language, LineStringStyle, LineStringStyle as TMVFLineStringStyle, Location as MVF2Location, LocationId, LocationLink, LocationSocial, LocationState, MultiPolygon, NavigationFlagDeclarations, NodeCollection, NodeCollection as MVFNodeCollection, NodeId, ObstructionCollection, ObstructionFeature, ObstructionId, ObstructionProperties, OpeningHoursSpecification, OperationHours, ParsedMVF, ParsedMVF as TMVF, ParsedMVFLocalePack, ParsedMVFv3, Point, PointStyle, PointStyle as TMVFPointStyle, Polygon, PolygonStyle, PolygonStyle as TMVFPolygonStyle, SiblingGroup, SpaceCollection, SpaceFeature, SpaceId, SpaceProperties, Style as TMVFStyle, StyleCollection, StyleCollection as TMVFStyleCollection, TilesetStyle } from '@mappedin/mvf-v2';
3
+ import { ParsedMVF, ParsedMVFv3, RawMVF } from '@mappedin/mvf-v2/no-validator';
4
4
  import { Group as TweenGroup, Tween } from '@tweenjs/tween.js';
5
- import { AmbientLight, BatchedMesh, BatchedMeshGeometryRange, BufferAttribute, BufferGeometry, Camera, Camera as ThreeCamera, Color, DirectionalLight, Group, Intersection, LineSegments, Mesh, MeshLambertMaterial, MeshLambertMaterialParameters, Object3D, Object3DEventMap, PerspectiveCamera, Plane, PlaneGeometry, Raycaster, Scene, ShaderMaterial, Texture, TubeGeometry, Vector2, Vector3, WebGLRenderer } from 'three';
5
+ import { AmbientLight, BatchedMesh, BatchedMeshGeometryRange, Box3, BufferAttribute, BufferGeometry, Camera, Camera as ThreeCamera, Color, DirectionalLight, Group, Intersection, LineSegments, Mesh, MeshLambertMaterial, MeshLambertMaterialParameters, Object3D, Object3DEventMap, PerspectiveCamera, Plane, PlaneGeometry, Raycaster, Scene, ShaderMaterial, Texture, TubeGeometry, Vector2, Vector3, WebGLRenderer } from 'three';
6
6
  import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
7
7
 
8
8
  declare const VALID_CONTEXTS: readonly [
@@ -576,7 +576,11 @@ declare function createEnvControl(): {
576
576
  __getState: () => Environment;
577
577
  };
578
578
  type EnvControl = ReturnType<typeof createEnvControl>;
579
- export declare function unzipAndParseMVFv2(data: Uint8Array, inputVersion?: string): Promise<ParsedMVF>;
579
+ type ParsedMVFResult = {
580
+ mvf2: ParsedMVF;
581
+ mvf3?: ParsedMVFv3;
582
+ };
583
+ export declare function unzipAndParseMVFv2(data: Uint8Array, inputVersion?: string): Promise<ParsedMVFResult>;
580
584
  type TDrawFn = (ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, x: number, y: number) => void;
581
585
  type MaterialSide = "back" | "front" | "double";
582
586
  type Style = {
@@ -1009,6 +1013,7 @@ declare class BatchedStandardMaterial extends MeshLambertMaterial {
1009
1013
  removeSideTexture(batchId: number): void;
1010
1014
  removeTopTexture(batchId: number): void;
1011
1015
  dispose(): void;
1016
+ clone(params?: MeshLambertMaterialParameters): this;
1012
1017
  }
1013
1018
  interface StandardSchemaV1<Input = unknown, Output = Input> {
1014
1019
  /** The Standard Schema properties. */
@@ -4837,6 +4842,44 @@ type PathState = {
4837
4842
  * Only applies when smoothingTension > 0.
4838
4843
  */
4839
4844
  smoothingCornerRadius: number;
4845
+ /**
4846
+ * Whether the path should be rendered as a dashed line.
4847
+ */
4848
+ dashed: boolean;
4849
+ /**
4850
+ * Length of each dash segment as fraction of path (0-1).
4851
+ */
4852
+ dashLength: number;
4853
+ /**
4854
+ * Length of each gap between dashes as fraction of path (0-1).
4855
+ */
4856
+ dashGap: number;
4857
+ /**
4858
+ * When true, dashSize and gapSize are interpreted as multiples of path width.
4859
+ * When false, dashLength and dashGap are used as fractions of path length.
4860
+ */
4861
+ dashRelativeToWidth: boolean;
4862
+ /**
4863
+ * Length of each dash as a multiple of path width. Only used when dashRelativeToWidth is true.
4864
+ */
4865
+ dashSize: number;
4866
+ /**
4867
+ * Length of each gap as a multiple of path width. Only used when dashRelativeToWidth is true.
4868
+ */
4869
+ gapSize: number;
4870
+ /**
4871
+ * When true, dashMeters and gapMeters are used as absolute sizes in meters.
4872
+ * Takes precedence over dashRelativeToWidth.
4873
+ */
4874
+ dashAbsolute: boolean;
4875
+ /**
4876
+ * Length of each dash in meters. Only used when dashAbsolute is true.
4877
+ */
4878
+ dashMeters: number;
4879
+ /**
4880
+ * Length of each gap in meters. Only used when dashAbsolute is true.
4881
+ */
4882
+ gapMeters: number;
4840
4883
  };
4841
4884
  type AddPathOptions = {
4842
4885
  /**
@@ -4908,6 +4951,48 @@ type AddPathOptions = {
4908
4951
  * @default 0.0
4909
4952
  */
4910
4953
  smoothingCornerRadius?: number;
4954
+ /**
4955
+ * Length of each dash segment as fraction of path (0-1).
4956
+ * @default 0.1
4957
+ */
4958
+ dashLength?: number;
4959
+ /**
4960
+ * Length of each gap between dashes as fraction of path (0-1).
4961
+ * @default 0.1
4962
+ */
4963
+ dashGap?: number;
4964
+ /**
4965
+ * When true, dashSize and gapSize are interpreted as multiples of path width (deck.gl style).
4966
+ * When false (default), dashLength and dashGap are used as fractions of path length.
4967
+ * @default false
4968
+ */
4969
+ dashRelativeToWidth?: boolean;
4970
+ /**
4971
+ * Length of each dash as a multiple of path width. Only used when dashRelativeToWidth is true.
4972
+ * @default 3.0
4973
+ */
4974
+ dashSize?: number;
4975
+ /**
4976
+ * Length of each gap as a multiple of path width. Only used when dashRelativeToWidth is true.
4977
+ * @default 2.0
4978
+ */
4979
+ gapSize?: number;
4980
+ /**
4981
+ * When true, dashMeters and gapMeters are used as absolute sizes in meters.
4982
+ * Takes precedence over dashRelativeToWidth.
4983
+ * @default false
4984
+ */
4985
+ dashAbsolute?: boolean;
4986
+ /**
4987
+ * Length of each dash in meters. Only used when dashAbsolute is true.
4988
+ * @default 1.0
4989
+ */
4990
+ dashMeters?: number;
4991
+ /**
4992
+ * Length of each gap in meters. Only used when dashAbsolute is true.
4993
+ * @default 0.5
4994
+ */
4995
+ gapMeters?: number;
4911
4996
  };
4912
4997
  declare class PathComponent {
4913
4998
  #private;
@@ -4936,6 +5021,14 @@ declare class PathComponent {
4936
5021
  dashed: boolean;
4937
5022
  smoothingTension: number;
4938
5023
  smoothingCornerRadius: number;
5024
+ dashLength: number;
5025
+ dashGap: number;
5026
+ dashRelativeToWidth: boolean;
5027
+ dashSize: number;
5028
+ gapSize: number;
5029
+ dashAbsolute: boolean;
5030
+ dashMeters: number;
5031
+ gapMeters: number;
4939
5032
  /**
4940
5033
  * If the path is vertical it will be rebuilt whenever altitudeDirty = true. This will be set during the first render of the path.
4941
5034
  */
@@ -5129,8 +5222,15 @@ declare class OutlineComponent implements Outline {
5129
5222
  }
5130
5223
  declare class FocusableComponent {
5131
5224
  readonly type: "focusable";
5132
- focusMesh?: Mesh;
5133
5225
  dirty: boolean;
5226
+ /**
5227
+ * Vertices of the geometry in world space
5228
+ */
5229
+ vertices?: Vector3[];
5230
+ /**
5231
+ * Bounding box computed from object for frustum culling
5232
+ */
5233
+ boundingBox: Box3;
5134
5234
  }
5135
5235
  type TextureStyle = {
5136
5236
  texture?: SingleTexture;
@@ -5387,6 +5487,38 @@ interface PathUniforms {
5387
5487
  type: "f";
5388
5488
  value: number;
5389
5489
  };
5490
+ dashLength: {
5491
+ type: "f";
5492
+ value: number;
5493
+ };
5494
+ dashGap: {
5495
+ type: "f";
5496
+ value: number;
5497
+ };
5498
+ dashRelativeToWidth: {
5499
+ type: "b";
5500
+ value: boolean;
5501
+ };
5502
+ dashSize: {
5503
+ type: "f";
5504
+ value: number;
5505
+ };
5506
+ gapSize: {
5507
+ type: "f";
5508
+ value: number;
5509
+ };
5510
+ dashAbsolute: {
5511
+ type: "b";
5512
+ value: boolean;
5513
+ };
5514
+ dashMeters: {
5515
+ type: "f";
5516
+ value: number;
5517
+ };
5518
+ gapMeters: {
5519
+ type: "f";
5520
+ value: number;
5521
+ };
5390
5522
  }
5391
5523
  declare class PubSub<EVENT_PAYLOAD, EVENT extends keyof EVENT_PAYLOAD = keyof EVENT_PAYLOAD> {
5392
5524
  /**
@@ -5397,13 +5529,37 @@ declare class PubSub<EVENT_PAYLOAD, EVENT extends keyof EVENT_PAYLOAD = keyof EV
5397
5529
  /**
5398
5530
  * @private
5399
5531
  * @internal
5532
+ * AbortController for managing lifecycle and cleanup
5400
5533
  */
5401
- private _destroyed;
5534
+ private _abortController;
5535
+ /**
5536
+ * @protected
5537
+ * @internal
5538
+ * Tracks all cleanup functions for subscriptions made via on()
5539
+ */
5540
+ protected _cleanupFunctions: Array<() => void>;
5541
+ /**
5542
+ * Returns the AbortSignal for this PubSub instance.
5543
+ * Use this signal with APIs that support cancellation (fetch, addEventListener, etc.)
5544
+ * When the PubSub is destroyed, the signal will be aborted and all listeners using it will be automatically removed.
5545
+ *
5546
+ * @example
5547
+ * ```typescript
5548
+ * // Automatically cleaned up when PubSub is destroyed
5549
+ * pubsub.addEventListener(window, 'resize', handler, { signal: pubsub.signal });
5550
+ * ```
5551
+ */
5552
+ get signal(): AbortSignal;
5402
5553
  /**
5403
5554
  * @private
5404
5555
  * @internal
5405
5556
  */
5406
5557
  publish<EVENT_NAME extends EVENT>(eventName: EVENT_NAME, data?: EVENT_PAYLOAD[EVENT_NAME]): void;
5558
+ /**
5559
+ * Subscribe a function to be called when the signal is aborted.
5560
+ * @param fn The function to call when the signal is aborted.
5561
+ */
5562
+ onAbort<T extends (...args: any[]) => void>(fn: T): void;
5407
5563
  /**
5408
5564
  * Subscribe a function to an event.
5409
5565
  *
@@ -5411,6 +5567,9 @@ declare class PubSub<EVENT_PAYLOAD, EVENT extends keyof EVENT_PAYLOAD = keyof EV
5411
5567
  * function.
5412
5568
  * @param fn A callback that gets called when the corresponding event is fired. The
5413
5569
  * callback will get passed an argument with a type that's one of event payloads.
5570
+ * @param options Optional options object. If a signal is provided, the subscription will be
5571
+ * automatically cleaned up when that signal is aborted.
5572
+ * @returns A cleanup function that unsubscribes the event listener when called.
5414
5573
  * @example
5415
5574
  * // Subscribe to the 'click' event
5416
5575
  * const handler = (event) => {
@@ -5422,7 +5581,9 @@ declare class PubSub<EVENT_PAYLOAD, EVENT extends keyof EVENT_PAYLOAD = keyof EV
5422
5581
  */
5423
5582
  on<EVENT_NAME extends EVENT>(eventName: EVENT_NAME, fn: (payload: EVENT_PAYLOAD[EVENT_NAME] extends {
5424
5583
  data: null;
5425
- } ? EVENT_PAYLOAD[EVENT_NAME]["data"] : EVENT_PAYLOAD[EVENT_NAME]) => void): void;
5584
+ } ? EVENT_PAYLOAD[EVENT_NAME]["data"] : EVENT_PAYLOAD[EVENT_NAME]) => void, options?: {
5585
+ signal?: AbortSignal;
5586
+ }): () => void;
5426
5587
  /**
5427
5588
  * Unsubscribe a function previously subscribed with {@link on}
5428
5589
  *
@@ -5443,6 +5604,7 @@ declare class PubSub<EVENT_PAYLOAD, EVENT extends keyof EVENT_PAYLOAD = keyof EV
5443
5604
  /**
5444
5605
  * @private
5445
5606
  * @internal
5607
+ * Destroys the PubSub instance and automatically unsubscribes all listeners registered via on().
5446
5608
  */
5447
5609
  destroy(): void;
5448
5610
  }
@@ -5702,13 +5864,37 @@ declare class PubSub$1<EVENT_PAYLOAD, EVENT extends keyof EVENT_PAYLOAD = keyof
5702
5864
  /**
5703
5865
  * @private
5704
5866
  * @internal
5867
+ * AbortController for managing lifecycle and cleanup
5868
+ */
5869
+ private _abortController;
5870
+ /**
5871
+ * @protected
5872
+ * @internal
5873
+ * Tracks all cleanup functions for subscriptions made via on()
5705
5874
  */
5706
- private _destroyed;
5875
+ protected _cleanupFunctions: Array<() => void>;
5876
+ /**
5877
+ * Returns the AbortSignal for this PubSub instance.
5878
+ * Use this signal with APIs that support cancellation (fetch, addEventListener, etc.)
5879
+ * When the PubSub is destroyed, the signal will be aborted and all listeners using it will be automatically removed.
5880
+ *
5881
+ * @example
5882
+ * ```typescript
5883
+ * // Automatically cleaned up when PubSub is destroyed
5884
+ * pubsub.addEventListener(window, 'resize', handler, { signal: pubsub.signal });
5885
+ * ```
5886
+ */
5887
+ get signal(): AbortSignal;
5707
5888
  /**
5708
5889
  * @private
5709
5890
  * @internal
5710
5891
  */
5711
5892
  publish<EVENT_NAME extends EVENT>(eventName: EVENT_NAME, data?: EVENT_PAYLOAD[EVENT_NAME]): void;
5893
+ /**
5894
+ * Subscribe a function to be called when the signal is aborted.
5895
+ * @param fn The function to call when the signal is aborted.
5896
+ */
5897
+ onAbort<T extends (...args: any[]) => void>(fn: T): void;
5712
5898
  /**
5713
5899
  * Subscribe a function to an event.
5714
5900
  *
@@ -5716,6 +5902,9 @@ declare class PubSub$1<EVENT_PAYLOAD, EVENT extends keyof EVENT_PAYLOAD = keyof
5716
5902
  * function.
5717
5903
  * @param fn A callback that gets called when the corresponding event is fired. The
5718
5904
  * callback will get passed an argument with a type that's one of event payloads.
5905
+ * @param options Optional options object. If a signal is provided, the subscription will be
5906
+ * automatically cleaned up when that signal is aborted.
5907
+ * @returns A cleanup function that unsubscribes the event listener when called.
5719
5908
  * @example
5720
5909
  * // Subscribe to the 'click' event
5721
5910
  * const handler = (event) => {
@@ -5727,7 +5916,9 @@ declare class PubSub$1<EVENT_PAYLOAD, EVENT extends keyof EVENT_PAYLOAD = keyof
5727
5916
  */
5728
5917
  on<EVENT_NAME extends EVENT>(eventName: EVENT_NAME, fn: (payload: EVENT_PAYLOAD[EVENT_NAME] extends {
5729
5918
  data: null;
5730
- } ? EVENT_PAYLOAD[EVENT_NAME]["data"] : EVENT_PAYLOAD[EVENT_NAME]) => void): void;
5919
+ } ? EVENT_PAYLOAD[EVENT_NAME]["data"] : EVENT_PAYLOAD[EVENT_NAME]) => void, options?: {
5920
+ signal?: AbortSignal;
5921
+ }): () => void;
5731
5922
  /**
5732
5923
  * Unsubscribe a function previously subscribed with {@link on}
5733
5924
  *
@@ -5748,6 +5939,7 @@ declare class PubSub$1<EVENT_PAYLOAD, EVENT extends keyof EVENT_PAYLOAD = keyof
5748
5939
  /**
5749
5940
  * @private
5750
5941
  * @internal
5942
+ * Destroys the PubSub instance and automatically unsubscribes all listeners registered via on().
5751
5943
  */
5752
5944
  destroy(): void;
5753
5945
  }
@@ -15989,12 +16181,6 @@ declare class DOMVisibilitySystem {
15989
16181
  constructor(state: RendererState, domTree: Entity2DHTMLDivElementContainer);
15990
16182
  update(): void;
15991
16183
  }
15992
- declare class TwoDProjectionSystem {
15993
- state: RendererState;
15994
- project: (projection: Vector2, position: Vector3) => void;
15995
- constructor(state: RendererState, project: (projection: Vector2, position: Vector3) => void);
15996
- update(): void;
15997
- }
15998
16184
  declare enum PINVISIBILITY {
15999
16185
  /** The pin is visible. */
16000
16186
  ACTIVE = 1,
@@ -16697,7 +16883,6 @@ declare class CameraSystem extends PubSub<CameraEvents> {
16697
16883
  private addMouseEventListeners;
16698
16884
  private addMouseMoveEventListeners;
16699
16885
  private removeMouseMoveEventListeners;
16700
- private removeEventListeners;
16701
16886
  private removeMouseUpEventListeners;
16702
16887
  private onContextMenu;
16703
16888
  private onMouseUp;
@@ -16818,7 +17003,11 @@ export declare const ANIMATION_TWEENS: {
16818
17003
  "ease-out": (amount: number) => number;
16819
17004
  "ease-in-out": (amount: number) => number;
16820
17005
  };
16821
- declare class Camera$2 {
17006
+ declare class Camera$2 extends PubSub$1<{
17007
+ "padding-change": {
17008
+ padding: InsetPadding;
17009
+ };
17010
+ }> {
16822
17011
  #private;
16823
17012
  /**
16824
17013
  * @internal
@@ -17111,7 +17300,7 @@ declare class ImageSystem extends PubSub$1<{
17111
17300
  private naturalBearing;
17112
17301
  private imagePlacementOptions;
17113
17302
  private cameraFrustum;
17114
- constructor(rendererState: RendererState, convertTo3DMapPosition: Core["convertTo3DMapPosition"], projectToScreen: (projectVector: Vector2, position: Vector3) => void, initialBearing?: number, naturalBearing?: number, imagePlacementOptions?: ImagePlacementOptions);
17303
+ constructor(rendererState: RendererState, convertTo3DMapPosition: Core["convertTo3DMapPosition"], projectToScreen: Core["project"], initialBearing?: number, naturalBearing?: number, imagePlacementOptions?: ImagePlacementOptions);
17115
17304
  private createImageMesh;
17116
17305
  private getOrDownloadImage;
17117
17306
  /**
@@ -17140,28 +17329,51 @@ declare class GeometryInFocusSystem extends PubSub$1<{
17140
17329
  focusablesDirty: boolean;
17141
17330
  private state;
17142
17331
  private camera;
17332
+ private cameraFrustum;
17333
+ private viewProjectionMatrix;
17334
+ private tempScreenPos;
17143
17335
  private debugEl;
17144
- private raycasters;
17145
17336
  private collisions;
17146
17337
  private focusableEntities;
17147
- private debugRaycasters;
17148
- constructor(state: RendererState, camera: PerspectiveCamera);
17338
+ private debug;
17339
+ private debugBBoxElements;
17340
+ private viewfinder;
17341
+ private screenBoundsMap;
17342
+ private screenDiagonal;
17343
+ constructor(state: RendererState, camera: Camera);
17149
17344
  resize(): void;
17150
17345
  /**
17151
- * Build 5 raycasters, one for the center of the screen, and one for each corner of the screen.
17152
- * the center one has the highest weight, and the corners have the lowest weight.
17153
- * this allows us to detect focus closer to the center of the screen more easily.
17346
+ * Everything within this square is considered "in focus" and ranked based on proximity to center.
17347
+ */
17348
+ private createViewfinder;
17349
+ /**
17350
+ * Filters vertices to keep only those on the perimeter (convex hull)
17351
+ * @param vertices - Array of all vertices in world space
17352
+ * @returns Array of perimeter vertices in world space
17353
+ */
17354
+ private simplifyVertices;
17355
+ /**
17356
+ * Computes screen-space bounding box and depth info from world-space vertices
17357
+ * Projects all vertices to clip space and finds the bounding box
17358
+ * Culls if the bounding box doesn't intersect the camera frustum
17359
+ *
17360
+ * @param focusableComponent - Component containing vertices and/or bounding box
17361
+ * @returns Screen-space bounding box and closest depth, or undefined if not visible
17154
17362
  */
17155
- private buildRaycasters;
17363
+ private computeScreenSpaceBounds;
17156
17364
  private updateFocusableEntities;
17157
17365
  update: (cameraIsMoving?: boolean, cameraStoppedMovingTime?: number) => void;
17158
17366
  updateRaf(): void;
17159
- raycast(): void;
17160
- showRaycasters(): void;
17161
- hideRaycasters(): void;
17367
+ /**
17368
+ * Updates debug visualization for screen-space bounding boxes
17369
+ */
17370
+ private updateDebugBBoxes;
17371
+ compute(): void;
17372
+ showDebug(): void;
17373
+ hideDebug(): void;
17162
17374
  destroy(): void;
17163
17375
  }
17164
- declare class OutdoorLayers {
17376
+ declare class OutdoorLayers extends PubSub<{}> {
17165
17377
  #private;
17166
17378
  idleQueue: IdleQueue;
17167
17379
  hideLayersIntersectingPolygons(polygons: Feature$1<Polygon$1 | MultiPolygon$1, any>[], layers: string[]): void;
@@ -17371,6 +17583,12 @@ declare class Core extends PubSub<MapEvent> {
17371
17583
  * @internal
17372
17584
  */
17373
17585
  constructor(container: HTMLElement, options?: RendererCoreOptions);
17586
+ /**
17587
+ * Projects a position into screen space. If a Vector3 is provided, the z-coordinate will include the depth from the camera.
17588
+ * @param projectVector - The vector to project the position into
17589
+ * @param position - The position to project
17590
+ */
17591
+ private project;
17374
17592
  /**
17375
17593
  * Add a container that can hold other containers, geometry groups, markers, labels and paths. Use this to group entities together.
17376
17594
  */
@@ -17624,16 +17842,7 @@ declare class Core extends PubSub<MapEvent> {
17624
17842
  /**
17625
17843
  * Remove a MapLibre event listener
17626
17844
  */
17627
- offMapLibreEvent(event: keyof MapEventType, handler: (...args: any[]) => void): void;
17628
- /**
17629
- * Returns true if the renderer has been aborted.
17630
- */
17631
- get aborted(): boolean;
17632
- /**
17633
- * Register a handler once to be called when the renderer is aborted.
17634
- * The handler will be removed after it is called.
17635
- */
17636
- onAbort(handler: () => void): void;
17845
+ offMapLibreEvent(event: LiteralUnion<keyof MapEventType, string>, handler: (...args: any[]) => void): void;
17637
17846
  /**
17638
17847
  * @internal for testing
17639
17848
  */
@@ -17662,7 +17871,7 @@ declare class Core extends PubSub<MapEvent> {
17662
17871
  * };
17663
17872
  * map.on('click', handler);
17664
17873
  */
17665
- on: <EventName extends keyof MapEvent>(eventName: EventName, fn: (payload: MapEventPayload<EventName>) => void) => void;
17874
+ on: PubSub<MapEvent>["on"];
17666
17875
  /**
17667
17876
  * Unsubscribe a function previously subscribed with {@link on}
17668
17877
  *
@@ -17677,7 +17886,7 @@ declare class Core extends PubSub<MapEvent> {
17677
17886
  * };
17678
17887
  * map.off('click', handler);
17679
17888
  */
17680
- off: <EventName extends keyof MapEvent>(eventName: EventName, fn: (payload: MapEventPayload<EventName>) => void) => void;
17889
+ off: PubSub<MapEvent>["off"];
17681
17890
  /**
17682
17891
  * @hidden
17683
17892
  * Returns the current cursor decided by Mappedin. This is useful when integrating with other overlays to show the correct user interaction.
@@ -18219,6 +18428,12 @@ type MapEvent = {
18219
18428
  * If outdoor view is enabled, this is fired when the style first loads or changes.
18220
18429
  */
18221
18430
  "outdoor-style-loaded": undefined;
18431
+ /**
18432
+ * Fired when outdoor style loading fails. The map will fall back to indoor-only rendering.
18433
+ */
18434
+ "outdoor-style-error": {
18435
+ error: unknown;
18436
+ };
18222
18437
  /**
18223
18438
  * Fired when the user starts interacting with the map.
18224
18439
  */
@@ -18249,9 +18464,6 @@ type MapEvent = {
18249
18464
  resize: undefined;
18250
18465
  "pan-bounds-change": PanBounds;
18251
18466
  };
18252
- type MapEventPayload<EventName extends keyof MapEvent> = MapEvent[EventName] extends {
18253
- data: null;
18254
- } ? MapEvent[EventName]["data"] : MapEvent[EventName];
18255
18467
  type All3DTypes = Geometry3DTypes | GeometryGroupObject3D | GroupContainerObject3D;
18256
18468
  type RendererState = {
18257
18469
  /**
@@ -19082,7 +19294,10 @@ declare class FloorObject implements MVFFloor {
19082
19294
  facadesByStyleId: Map<string, string[]>;
19083
19295
  get geoJSONBoundingBox(): BBox | undefined;
19084
19296
  constructor(parentId: string, floor: MVFFloor, mapObject: GeojsonApiMapObject, multiFloorView: Required<TShow3DMapOptions["multiFloorView"]>, options: TShow3DMapOptions, mvf?: ParsedMVF, styleMap?: AggregatedStyleMap, mapDataInternal?: MapDataInternal);
19085
- load: () => this;
19297
+ /**
19298
+ * @param focusable - Whether the floor is part of a building and should be focusable. This will be set on the geometry layer.
19299
+ */
19300
+ load: (focusable?: boolean) => this;
19086
19301
  /**
19087
19302
  * Add an occluder to the floor if it has a footprint.
19088
19303
  */
@@ -19093,6 +19308,7 @@ declare class FloorObject implements MVFFloor {
19093
19308
  get hasFacadeGeometry(): boolean;
19094
19309
  get visible(): boolean;
19095
19310
  setVisible(visible: boolean): void;
19311
+ setBatchedTextVisible(visible: boolean): void;
19096
19312
  }
19097
19313
  declare class FloorStackObject implements Omit<MVFFloorStack, "maps" | "floors" | "defaultFloor" | "footprint"> {
19098
19314
  #private;
@@ -19108,7 +19324,6 @@ declare class FloorStackObject implements Omit<MVFFloorStack, "maps" | "floors"
19108
19324
  metadata?: MVFFloorStack["metadata"];
19109
19325
  containerId: string;
19110
19326
  facade?: MVFFacade;
19111
- private renderer;
19112
19327
  constructor(floorStack: MVFFloorStack, parentId: string, renderer: Core, facade?: MVFFacade);
19113
19328
  get defaultFloor(): FloorObject;
19114
19329
  /**
@@ -21621,6 +21836,9 @@ declare const floorStateSchemaPartial: z.ZodObject<{
21621
21836
  type: z.ZodOptional<z.ZodDefault<z.ZodLiteral<"floor.areas">>>;
21622
21837
  visible: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
21623
21838
  }, z.core.$strip>>;
21839
+ text3d: z.ZodOptional<z.ZodObject<{
21840
+ visible: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
21841
+ }, z.core.$strip>>;
21624
21842
  type: z.ZodOptional<z.ZodDefault<z.ZodLiteral<"floor">>>;
21625
21843
  visible: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
21626
21844
  altitude: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
@@ -21668,6 +21886,9 @@ declare const floorStateSchemaStrict: z.ZodObject<{
21668
21886
  type: z.ZodDefault<z.ZodLiteral<"floor.areas">>;
21669
21887
  visible: z.ZodDefault<z.ZodBoolean>;
21670
21888
  }, z.core.$strict>;
21889
+ text3d: z.ZodObject<{
21890
+ visible: z.ZodDefault<z.ZodBoolean>;
21891
+ }, z.core.$strict>;
21671
21892
  type: z.ZodDefault<z.ZodLiteral<"floor">>;
21672
21893
  visible: z.ZodDefault<z.ZodBoolean>;
21673
21894
  altitude: z.ZodDefault<z.ZodNumber>;
@@ -21899,6 +22120,24 @@ declare const pathStateSchemaPartial: z.ZodObject<{
21899
22120
  xrayOpacity: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
21900
22121
  __EXPERIMENTAL_SMOOTHING_TENSION: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
21901
22122
  __EXPERIMENTAL_SMOOTHING_CORNER_RADIUS: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
22123
+ dashed: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
22124
+ __EXPERIMENTAL_DASH_OPTIONS: z.ZodOptional<z.ZodOptional<z.ZodDiscriminatedUnion<[
22125
+ z.ZodObject<{
22126
+ __EXPERIMENTAL_DASH_MODE: z.ZodLiteral<"length-scaling">;
22127
+ __EXPERIMENTAL_DASH_LENGTH: z.ZodDefault<z.ZodNumber>;
22128
+ __EXPERIMENTAL_DASH_GAP: z.ZodDefault<z.ZodNumber>;
22129
+ }, z.core.$strip>,
22130
+ z.ZodObject<{
22131
+ __EXPERIMENTAL_DASH_MODE: z.ZodLiteral<"width-scaling">;
22132
+ __EXPERIMENTAL_DASH_SIZE: z.ZodDefault<z.ZodNumber>;
22133
+ __EXPERIMENTAL_GAP_SIZE: z.ZodDefault<z.ZodNumber>;
22134
+ }, z.core.$strip>,
22135
+ z.ZodObject<{
22136
+ __EXPERIMENTAL_DASH_MODE: z.ZodLiteral<"absolute">;
22137
+ __EXPERIMENTAL_DASH_METERS: z.ZodDefault<z.ZodNumber>;
22138
+ __EXPERIMENTAL_GAP_METERS: z.ZodDefault<z.ZodNumber>;
22139
+ }, z.core.$strip>
22140
+ ], "__EXPERIMENTAL_DASH_MODE">>>;
21902
22141
  }, z.core.$strip>;
21903
22142
  declare const pathStateSchemaStrict: z.ZodObject<{
21904
22143
  type: z.ZodDefault<z.ZodLiteral<"path">>;
@@ -21915,9 +22154,27 @@ declare const pathStateSchemaStrict: z.ZodObject<{
21915
22154
  xrayOpacity: z.ZodDefault<z.ZodNumber>;
21916
22155
  __EXPERIMENTAL_SMOOTHING_TENSION: z.ZodDefault<z.ZodNumber>;
21917
22156
  __EXPERIMENTAL_SMOOTHING_CORNER_RADIUS: z.ZodDefault<z.ZodNumber>;
22157
+ dashed: z.ZodDefault<z.ZodBoolean>;
22158
+ __EXPERIMENTAL_DASH_OPTIONS: z.ZodOptional<z.ZodDiscriminatedUnion<[
22159
+ z.ZodObject<{
22160
+ __EXPERIMENTAL_DASH_MODE: z.ZodLiteral<"length-scaling">;
22161
+ __EXPERIMENTAL_DASH_LENGTH: z.ZodDefault<z.ZodNumber>;
22162
+ __EXPERIMENTAL_DASH_GAP: z.ZodDefault<z.ZodNumber>;
22163
+ }, z.core.$strip>,
22164
+ z.ZodObject<{
22165
+ __EXPERIMENTAL_DASH_MODE: z.ZodLiteral<"width-scaling">;
22166
+ __EXPERIMENTAL_DASH_SIZE: z.ZodDefault<z.ZodNumber>;
22167
+ __EXPERIMENTAL_GAP_SIZE: z.ZodDefault<z.ZodNumber>;
22168
+ }, z.core.$strip>,
22169
+ z.ZodObject<{
22170
+ __EXPERIMENTAL_DASH_MODE: z.ZodLiteral<"absolute">;
22171
+ __EXPERIMENTAL_DASH_METERS: z.ZodDefault<z.ZodNumber>;
22172
+ __EXPERIMENTAL_GAP_METERS: z.ZodDefault<z.ZodNumber>;
22173
+ }, z.core.$strip>
22174
+ ], "__EXPERIMENTAL_DASH_MODE">>;
21918
22175
  }, z.core.$strict>;
21919
22176
  export type TPathState = z.infer<typeof pathStateSchemaStrict>;
21920
- export type TPathUpdateState = z.infer<typeof pathStateSchemaPartial>;
22177
+ export type TPathUpdateState = z.input<typeof pathStateSchemaPartial>;
21921
22178
  declare const shapeStateSchemaPartial: z.ZodObject<{
21922
22179
  type: z.ZodOptional<z.ZodDefault<z.ZodLiteral<"shape">>>;
21923
22180
  visible: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
@@ -22509,6 +22766,12 @@ type GreedyLosOptions = BaseSimplifyOptions & {
22509
22766
  };
22510
22767
  type RdpOptions = BaseSimplifyOptions & {
22511
22768
  __EXPERIMENTAL_METHOD: "rdp";
22769
+ /**
22770
+ * Whether to include door-adjacent nodes (predecessor/successor of doors) in the must-include set.
22771
+ * When true, nodes immediately before and after doors are preserved during simplification.
22772
+ * @default true
22773
+ */
22774
+ mustIncludeDoorBufferNodes?: boolean;
22512
22775
  };
22513
22776
  type DpOptimalOptions = BaseSimplifyOptions & {
22514
22777
  __EXPERIMENTAL_METHOD: "dp-optimal";
@@ -23411,6 +23674,52 @@ export type TDirectionZone = {
23411
23674
  */
23412
23675
  floor?: Floor;
23413
23676
  };
23677
+ type TExperimentalDashOptions = {
23678
+ /**
23679
+ * Length-scaling mode: dash/gap as fractions of path length (0-1)
23680
+ */
23681
+ __EXPERIMENTAL_DASH_MODE: "length-scaling";
23682
+ /**
23683
+ * Dash length as fraction of path (0-1).
23684
+ * @default 0.1
23685
+ */
23686
+ __EXPERIMENTAL_DASH_LENGTH?: number;
23687
+ /**
23688
+ * Gap length as fraction of path (0-1).
23689
+ * @default 0.1
23690
+ */
23691
+ __EXPERIMENTAL_DASH_GAP?: number;
23692
+ } | {
23693
+ /**
23694
+ * Width-scaling mode: dash/gap as multiples of path width (deck.gl style)
23695
+ */
23696
+ __EXPERIMENTAL_DASH_MODE: "width-scaling";
23697
+ /**
23698
+ * Dash size as multiple of path width.
23699
+ * @default 3.0
23700
+ */
23701
+ __EXPERIMENTAL_DASH_SIZE?: number;
23702
+ /**
23703
+ * Gap size as multiple of path width.
23704
+ * @default 2.0
23705
+ */
23706
+ __EXPERIMENTAL_GAP_SIZE?: number;
23707
+ } | {
23708
+ /**
23709
+ * Absolute mode: dash/gap in meters (deterministic regardless of path length)
23710
+ */
23711
+ __EXPERIMENTAL_DASH_MODE: "absolute";
23712
+ /**
23713
+ * Dash length in meters.
23714
+ * @default 1.0
23715
+ */
23716
+ __EXPERIMENTAL_DASH_METERS?: number;
23717
+ /**
23718
+ * Gap length in meters.
23719
+ * @default 0.5
23720
+ */
23721
+ __EXPERIMENTAL_GAP_METERS?: number;
23722
+ };
23414
23723
  /**
23415
23724
  * Options for controlling the behavior of a {@link Path}.
23416
23725
  */
@@ -23533,6 +23842,13 @@ export type TAddPathOptions = {
23533
23842
  * @defaultValue 0.5
23534
23843
  */
23535
23844
  __EXPERIMENTAL_SMOOTHING_CORNER_RADIUS?: number;
23845
+ /**
23846
+ * @experimental
23847
+ * Dash configuration. When dashed=true, controls dash/gap sizing.
23848
+ * Uses discriminated union - mode determines which properties are valid.
23849
+ * @see TExperimentalDashOptions
23850
+ */
23851
+ __EXPERIMENTAL_DASH_OPTIONS?: TExperimentalDashOptions;
23536
23852
  };
23537
23853
  /**
23538
23854
  * Defines the priority levels for collider collision handling, allowing customization of collider visibility in congested areas.
@@ -23665,6 +23981,13 @@ export type TGetDirectionsOptions = {
23665
23981
  * Always uses line-of-sight validation (cannot be disabled).
23666
23982
  */
23667
23983
  __EXPERIMENTAL_METHOD: "rdp";
23984
+ /**
23985
+ * @experimental
23986
+ * Whether to include door-adjacent nodes (predecessor/successor of doors) in the must-include set.
23987
+ * When true (default), nodes immediately before and after doors are preserved during simplification.
23988
+ * @default true
23989
+ */
23990
+ __EXPERIMENTAL_MUST_INCLUDE_DOOR_BUFFER_NODES?: boolean;
23668
23991
  } | {
23669
23992
  /**
23670
23993
  * Enable or disable path smoothing.
@@ -24378,7 +24701,8 @@ export declare class ImageMetaData extends BaseMetaData {
24378
24701
  */
24379
24702
  destroy(): void;
24380
24703
  }
24381
- type LocationData = Omit<MVFLocation, "categories" | "spaces" | "obstructions" | "entrances" | "shapes" | "connections" | "annotations" | "areas" | "openingHoursSpecification" | "links" | "pictures" | "website" | "icon"> & {
24704
+ type MVF3Location = Required<ParsedMVFv3>["locations"][number];
24705
+ type LocationData = Omit<MVF2Location, "categories" | "spaces" | "obstructions" | "entrances" | "shapes" | "connections" | "annotations" | "areas" | "openingHoursSpecification" | "links" | "pictures" | "website" | "icon"> & {
24382
24706
  links: Hyperlink[];
24383
24707
  images: ImageMetaData[];
24384
24708
  icon?: ImageMetaData;
@@ -24433,9 +24757,28 @@ export declare class LocationProfile extends BaseMetaData implements LocationDat
24433
24757
  * @format uri
24434
24758
  */
24435
24759
  icon?: ImageMetaData;
24760
+ /**
24761
+ * Additional user defined data. The type is unknown, so it is recommended to validate the data before use.
24762
+ *
24763
+ * _Only available when loading MVFv3 data._
24764
+ *
24765
+ * ```ts
24766
+ * const mapData = await getMapData({
24767
+ * ...
24768
+ * mvfVersion: '3.0.0',
24769
+ * });
24770
+ *
24771
+ * const locationProfile = mapData.getById('location-profile', id);
24772
+ * if (typeof locationProfile?.extra?.myProperty === 'string') {
24773
+ * // Do something
24774
+ * }
24775
+ * ```
24776
+ */
24777
+ extra?: Record<string, unknown>;
24436
24778
  /** @internal */
24437
24779
  constructor(data: MapDataInternal, options: {
24438
- mvfData: MVFLocation;
24780
+ mvf2Data: MVF2Location;
24781
+ mvf3Data?: MVF3Location;
24439
24782
  });
24440
24783
  /**
24441
24784
  * Gets the {@link Space}s associated with the location.
@@ -25357,6 +25700,7 @@ type TMapDataInternalOptions = {
25357
25700
  binaryBundle?: Uint8Array;
25358
25701
  tokenManager?: TokenManager;
25359
25702
  getMapDataOptions?: TGetMapDataOptions;
25703
+ mvf3?: ParsedMVFv3;
25360
25704
  };
25361
25705
  type MVFNodeFeature = MVFNodeCollection["features"][number];
25362
25706
  type MVFFloorFeature = FloorCollection["features"][number];
@@ -25803,6 +26147,7 @@ type MapDataRecords = {
25803
26147
  [floorId: string]: AnnotationCollection["features"][number][];
25804
26148
  };
25805
26149
  mvfAreasById: Record<AreaId, AreaCollection["features"][number]>;
26150
+ mvf3LocationsById: Record<string, Required<ParsedMVFv3>["locations"][number]>;
25806
26151
  };
25807
26152
  type EnterpriseMapDataRecords = {
25808
26153
  connectionsByExternalId: Record<string, Connection[]>;
@@ -26212,6 +26557,10 @@ export declare class EnterpriseVenue extends BaseMetaData implements MVFEnterpri
26212
26557
  * The default map of the venue.
26213
26558
  */
26214
26559
  get defaultMap(): string;
26560
+ /**
26561
+ * The enterprise venue type.
26562
+ */
26563
+ get enterpriseType(): EnterpriseVenueType | undefined;
26215
26564
  /**
26216
26565
  * Serializes the EnterpriseVenue data to JSON.
26217
26566
  *