@mappedin/mappedin-js 6.17.1 → 6.19.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.
Files changed (37) hide show
  1. package/THIRD_PARTY_LICENSES.txt +624 -12
  2. package/lib/esm/GLTFExporter-G4WLRGTD.js +1 -0
  3. package/lib/esm/GLTFLoader-6KS65AUU.js +1 -0
  4. package/lib/esm/{chunk-43W5ISDI.js → chunk-5DTIPZIM.js} +1 -1
  5. package/lib/esm/chunk-7ZLJ5BZG.js +956 -0
  6. package/lib/esm/chunk-PJFSEFCS.js +660 -0
  7. package/lib/esm/chunk-PWEV3AFA.js +1 -0
  8. package/lib/esm/chunk-S634J4FK.js +3819 -0
  9. package/lib/esm/chunk-XH3AOOQM.js +1515 -0
  10. package/lib/esm/index.css +1 -1
  11. package/lib/esm/index.d.ts +1079 -177
  12. package/lib/esm/index.js +1 -1
  13. package/lib/esm/inspector-IMRVE3SS.js +482 -0
  14. package/lib/esm/inspector-PGGVNGUZ.css +1 -0
  15. package/lib/esm/internal-75ZEUF5X.js +1 -0
  16. package/lib/esm/internal-Q5HDG37N.css +1 -0
  17. package/lib/esm/{roboto-regular-MRBWMLOE.js → roboto-regular-6ZYOMS3F.js} +1 -1
  18. package/lib/esm/src-RKBRVS5G.js +1 -0
  19. package/lib/esm/src-WUAFLQGO.css +1 -0
  20. package/lib/esm/text3d-YG2QJ2JU.js +252 -0
  21. package/lib/esm/workers/collision-worker.csp.js +1 -1
  22. package/lib/index.css +1 -1
  23. package/package.json +2 -2
  24. package/lib/esm/GLTFExporter-CXO2YAF3.js +0 -1
  25. package/lib/esm/GLTFLoader-I7TPEHSY.js +0 -1
  26. package/lib/esm/chunk-72VREA6L.js +0 -1
  27. package/lib/esm/chunk-IGHVNMJ3.js +0 -1
  28. package/lib/esm/chunk-PCYD3VDS.js +0 -1
  29. package/lib/esm/chunk-PUC4BMPX.js +0 -1
  30. package/lib/esm/chunk-RTTZ7LHQ.js +0 -1
  31. package/lib/esm/inspector-AQXLD4YL.js +0 -1
  32. package/lib/esm/inspector-YWC6NP6D.css +0 -1
  33. package/lib/esm/internal-7BZS3RBF.js +0 -1
  34. package/lib/esm/internal-QC6SWNN2.css +0 -1
  35. package/lib/esm/src-GA2Z4OON.css +0 -1
  36. package/lib/esm/src-YUNUBHAQ.js +0 -1
  37. package/lib/esm/text3d-Z7SSD7IN.js +0 -1
@@ -2,12 +2,12 @@ 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";
5
- import { AddLabelOptionsInternal, AddText3DOptions, AddText3DOptions as AddText3DOptions$1, AddText3DPointOptions, CameraSystemState, ColorString, EntityId, EnvMapOptions, EnvMapOptions as EnvMapOptions$1, GLTFExportOptions as GLTFExportOptions$1, GroupContainerState, ISystemPlugin, ISystemPlugin as ISystemPlugin$1, ImagePlacementOptions, InitializeModelState, InitializeModelState as InitializeModelState$1, InitializeText3DState, InsetPadding, InsetPadding as InsetPadding$1, InsetPaddingOption, InsetPaddingOption as InsetPaddingOption$1, InterpolateOn, Interpolation, Interpolation as Interpolation$1, LabelAppearance as LabelAppearance$1, LabelRenderedState, LabelTextPlacement as LabelTextPlacement$1, LineStyle, LineStyle as LineStyle$1, MapViewState, MarkerState, OutlinesOptions, PaintStyle, PaintStyle as PaintStyle$1, PathState, Position as Position$1, RendererCore, RendererCoreOptions, Shading, Text3DState, WatermarkUpdateOptions } from "@mappedin/renderer-three";
5
+ import { AddLabelOptionsInternal, AddText3DOptions, AddText3DOptions as AddText3DOptions$1, AddText3DPointOptions, CameraSystemState, ColorString, DebugState, DebugState as DebugState$1, EntityId, EnvMapOptions, EnvMapOptions as EnvMapOptions$1, GLTFExportOptions as GLTFExportOptions$1, GroupContainerState, ISystemPlugin, ISystemPlugin as ISystemPlugin$1, ImagePlacementOptions, InitializeModelState, InitializeModelState as InitializeModelState$1, InitializeText3DState, InsetPadding, InsetPadding as InsetPadding$1, InsetPaddingOption, InsetPaddingOption as InsetPaddingOption$1, InterpolateOn, Interpolation, LabelAppearance as LabelAppearance$1, LabelRenderedState, LabelTextPlacement as LabelTextPlacement$1, LineStyle, LineStyle as LineStyle$1, MapViewState, MarkerState, OutlinesOptions, PaintStyle, PaintStyle as PaintStyle$1, PathState, PathWidth, PathWidth as PathWidth$1, PixelWidth, Position as Position$1, RendererCore, RendererCoreOptions, RendererCoreOptions as RendererCoreOptions$1, Shading, Text3DState, WatermarkUpdateOptions } from "@mappedin/renderer-three";
6
6
  import * as _tweenjs_tween_js0 from "@tweenjs/tween.js";
7
7
  import { Group, Tween } from "@tweenjs/tween.js";
8
8
  import { CustomLayerInterface, IControl, Map as Map$1, MapEventType } from "@mappedin/outdoor-context";
9
+ import { ANIMATION_TWEENS, PathWidth as PathWidth$2, PathWidth as PathWidth$3, enableTestMode } from "@mappedin/renderer-shared";
9
10
  import { MatchInfo, SearchResult as SearchResult$1, Suggestion, Suggestion as Suggestion$1 } from "minisearch";
10
- import { ANIMATION_TWEENS, enableTestMode } from "@mappedin/renderer-shared";
11
11
  import * as three0 from "three";
12
12
  import { AmbientLight, BatchedMesh, BatchedMeshGeometryRange, Box3, BufferAttribute, BufferGeometry, Camera as Camera$1, Color, DirectionalLight, Group as Group$1, Intersection, LineSegments, Matrix4, Mesh, MeshLambertMaterial, MeshLambertMaterialParameters, Object3D, Object3DEventMap, PerspectiveCamera, Plane, PlaneGeometry, Raycaster, Scene, ShaderMaterial, Texture, TubeGeometry, Vector2, Vector3, WebGLRenderer } from "three";
13
13
  import { BatchedText, BatchedText as BatchedText$1, Text, Text as Text$1 } from "troika-three-text";
@@ -290,6 +290,12 @@ type TGetMapDataSharedOptions = {
290
290
  * @internal
291
291
  */
292
292
  version?: string;
293
+ /**
294
+ * The externalId parameter attaches a custom tracking identifier to every analytics event sent during the session.
295
+ * This is useful for correlating Mappedin analytics data with an external system — for example, linking a map session
296
+ * back to a specific marketing campaign, CRM record, or third-party tracking platform.
297
+ */
298
+ externalId?: string;
293
299
  };
294
300
  search?: TSearchOptions;
295
301
  /**
@@ -542,7 +548,7 @@ declare class AnalyticsInternal {
542
548
  sendGetDirectionsEvent: DebouncedFunction<(start: string, end: string, accessible?: boolean) => void | Promise<void> | Promise<Response>>;
543
549
  sendBlueDotEvents(event: BlueDotEvents): void | Promise<void> | Promise<Response>;
544
550
  }
545
- type UpdateStateParam = Partial<Pick<AnalyticState, 'geolocationMode' | 'context' | 'logEvents' | 'userPosition' | 'mapId' | 'sendEvents' | 'logEvents' | 'accessToken' | 'sessionId' | 'deviceId'>>;
551
+ type UpdateStateParam = Partial<Pick<AnalyticState, 'geolocationMode' | 'context' | 'logEvents' | 'userPosition' | 'mapId' | 'sendEvents' | 'logEvents' | 'accessToken' | 'sessionId' | 'deviceId' | 'externalId'>>;
546
552
  /**
547
553
  * Maps reserved analytics event names to their payload structures.
548
554
  *
@@ -641,6 +647,12 @@ declare class Analytics {
641
647
  logEvents: boolean;
642
648
  /** Flag to enable sending of events. */
643
649
  sendEvents: boolean;
650
+ /**
651
+ * The externalId parameter attaches a custom tracking identifier to every analytics event sent during the session.
652
+ * This is useful for correlating Mappedin analytics data with an external system — for example, linking a map session
653
+ * back to a specific marketing campaign, CRM record, or third-party tracking platform.
654
+ */
655
+ externalId?: string;
644
656
  /** The API key for authentication. */
645
657
  key?: string;
646
658
  /** The API secret for authentication. */
@@ -693,6 +705,12 @@ type AnalyticState = {
693
705
  logEvents: boolean;
694
706
  /** Flag to enable sending of events. */
695
707
  sendEvents: boolean;
708
+ /**
709
+ * The externalId parameter attaches a custom tracking identifier to every analytics event sent during the session.
710
+ * This is useful for correlating Mappedin analytics data with an external system — for example, linking a map session
711
+ * back to a specific marketing campaign, CRM record, or third-party tracking platform.
712
+ */
713
+ externalId?: string;
696
714
  } & AnalyticsAuth;
697
715
  type AnalyticsOptions = Partial<Omit<AnalyticState, 'analyticsBaseUrl' | 'geolocationMode' | 'userPosition'>>;
698
716
  type AnalyticsUpdateOptions = Omit<AnalyticsOptions, keyof AnalyticsAuth> & ((Required<Pick<AnalyticsAuth, 'key' | 'secret'>> & Partial<Pick<AnalyticsAuth, 'accessToken'>>) | (Required<Pick<AnalyticsAuth, 'accessToken'>> & Partial<Pick<AnalyticsAuth, 'key' | 'secret'>>));
@@ -700,7 +718,7 @@ type AnalyticsUpdateOptions = Omit<AnalyticsOptions, keyof AnalyticsAuth> & ((Re
700
718
  * Options for updating the current state of analytics.
701
719
  * @interface
702
720
  */
703
- type TAnalyticsUpdateState = Pick<Partial<AnalyticState>, 'logEvents' | 'sendEvents' | 'baseUri' | 'accessToken'>;
721
+ type TAnalyticsUpdateState = Pick<Partial<AnalyticState>, 'logEvents' | 'sendEvents' | 'baseUri' | 'accessToken' | 'externalId'>;
704
722
  //#endregion
705
723
  //#region ../packages/shave-text/shave-text.d.ts
706
724
  type TDrawFn = (ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, x: number, y: number) => void;
@@ -3041,7 +3059,7 @@ declare const LABEL_LOW_PRIORITY = "low-priority";
3041
3059
  type LabelTextPlacement = (typeof LABEL_TEXT_PLACEMENT)[keyof typeof LABEL_TEXT_PLACEMENT];
3042
3060
  type LabelTextPlacementInternal = LabelTextPlacement | typeof LABEL_LOW_PRIORITY;
3043
3061
  type EasingCurve$1 = string;
3044
- type Interpolation$3<T$1 extends string, U$1 extends unknown[]> = {
3062
+ type Interpolation$2<T$1 extends string, U$1 extends unknown[]> = {
3045
3063
  on: T$1;
3046
3064
  input: number[];
3047
3065
  output: U$1;
@@ -3081,9 +3099,18 @@ declare const labelAppearanceSchemaBase: ZodObject<{
3081
3099
  }>>;
3082
3100
  iconVisible: ZodDefault<ZodUnion<readonly [ZodBoolean, ZodNumber]>>;
3083
3101
  opacity: ZodDefault<ZodNumber>;
3102
+ __EXPERIMENTAL_wrapperBackgroundColor: ZodOptional<ZodString>;
3103
+ __EXPERIMENTAL_wrapperPaddingX: ZodDefault<ZodNumber>;
3104
+ __EXPERIMENTAL_wrapperPaddingY: ZodDefault<ZodNumber>;
3105
+ __EXPERIMENTAL_wrapperBorderRadius: ZodDefault<ZodNumber>;
3106
+ __EXPERIMENTAL_wrapperDotSize: ZodDefault<ZodNumber>;
3107
+ __EXPERIMENTAL_wrapperShadowColor: ZodOptional<ZodString>;
3108
+ __EXPERIMENTAL_wrapperShadowOffsetX: ZodDefault<ZodNumber>;
3109
+ __EXPERIMENTAL_wrapperShadowOffsetY: ZodDefault<ZodNumber>;
3110
+ __EXPERIMENTAL_wrapperShadowBlur: ZodDefault<ZodNumber>;
3084
3111
  }, $strip>;
3085
3112
  type LabelAppearance = Partial<input<typeof labelAppearanceSchemaBase>> & {
3086
- iconScale?: number | Interpolation$3<'zoom-level', number[]>;
3113
+ iconScale?: number | Interpolation$2<'zoom-level', number[]>;
3087
3114
  };
3088
3115
  type LabelAppearanceWithDefaults = output<typeof labelAppearanceSchema>;
3089
3116
  declare const labelAppearanceSchema: ZodPipe<ZodObject<{
@@ -3120,6 +3147,15 @@ declare const labelAppearanceSchema: ZodPipe<ZodObject<{
3120
3147
  }>>;
3121
3148
  iconVisible: ZodDefault<ZodUnion<readonly [ZodBoolean, ZodNumber]>>;
3122
3149
  opacity: ZodDefault<ZodNumber>;
3150
+ __EXPERIMENTAL_wrapperBackgroundColor: ZodOptional<ZodString>;
3151
+ __EXPERIMENTAL_wrapperPaddingX: ZodDefault<ZodNumber>;
3152
+ __EXPERIMENTAL_wrapperPaddingY: ZodDefault<ZodNumber>;
3153
+ __EXPERIMENTAL_wrapperBorderRadius: ZodDefault<ZodNumber>;
3154
+ __EXPERIMENTAL_wrapperDotSize: ZodDefault<ZodNumber>;
3155
+ __EXPERIMENTAL_wrapperShadowColor: ZodOptional<ZodString>;
3156
+ __EXPERIMENTAL_wrapperShadowOffsetX: ZodDefault<ZodNumber>;
3157
+ __EXPERIMENTAL_wrapperShadowOffsetY: ZodDefault<ZodNumber>;
3158
+ __EXPERIMENTAL_wrapperShadowBlur: ZodDefault<ZodNumber>;
3123
3159
  }, $strip>, ZodTransform<Required<LabelAppearance>, {
3124
3160
  margin: number;
3125
3161
  maxLines: number;
@@ -3140,6 +3176,13 @@ declare const labelAppearanceSchema: ZodPipe<ZodObject<{
3140
3176
  iconOverflow: "hidden" | "visible";
3141
3177
  iconVisible: number | boolean;
3142
3178
  opacity: number;
3179
+ __EXPERIMENTAL_wrapperPaddingX: number;
3180
+ __EXPERIMENTAL_wrapperPaddingY: number;
3181
+ __EXPERIMENTAL_wrapperBorderRadius: number;
3182
+ __EXPERIMENTAL_wrapperDotSize: number;
3183
+ __EXPERIMENTAL_wrapperShadowOffsetX: number;
3184
+ __EXPERIMENTAL_wrapperShadowOffsetY: number;
3185
+ __EXPERIMENTAL_wrapperShadowBlur: number;
3143
3186
  textColor?: string | undefined;
3144
3187
  textOutlineColor?: string | undefined;
3145
3188
  pinColor?: string | undefined;
@@ -3147,6 +3190,8 @@ declare const labelAppearanceSchema: ZodPipe<ZodObject<{
3147
3190
  pinColorInactive?: string | undefined;
3148
3191
  pinOutlineColorInactive?: string | undefined;
3149
3192
  icon?: string | undefined;
3193
+ __EXPERIMENTAL_wrapperBackgroundColor?: string | undefined;
3194
+ __EXPERIMENTAL_wrapperShadowColor?: string | undefined;
3150
3195
  }>>;
3151
3196
  type AddLabelOptionsInternal$1 = {
3152
3197
  rank?: CollisionRankingTier;
@@ -3334,6 +3379,12 @@ type AddMarkerOptions = {
3334
3379
  * @default { size: 2, color: '#666' }
3335
3380
  */
3336
3381
  lowPriorityPin?: Partial<LowPriorityPinConfig>;
3382
+ /**
3383
+ * Whether the marker should animate visibility transitions.
3384
+ * When false, opacity is set directly without transitions.
3385
+ * @default true
3386
+ */
3387
+ animated?: boolean;
3337
3388
  };
3338
3389
  type MarkerStrategy = {
3339
3390
  name: MarkerPlacement;
@@ -3503,12 +3554,6 @@ declare class PubSub<EVENT_PAYLOAD, EVENT extends keyof EVENT_PAYLOAD = keyof EV
3503
3554
  * AbortController for managing lifecycle and cleanup
3504
3555
  */
3505
3556
  private _abortController;
3506
- /**
3507
- * @protected
3508
- * @internal
3509
- * Tracks all cleanup functions for subscriptions made via on()
3510
- */
3511
- protected _cleanupFunctions: Array<() => void>;
3512
3557
  /**
3513
3558
  * Returns the AbortSignal for this PubSub instance.
3514
3559
  * Use this signal with APIs that support cancellation (fetch, addEventListener, etc.)
@@ -3657,6 +3702,14 @@ declare class TwoDDrawSystem extends PubSub<{
3657
3702
  url: string;
3658
3703
  }>;
3659
3704
  pinCache: Record<string, [HTMLCanvasElement | OffscreenCanvas, HTMLCanvasElement | OffscreenCanvas]>;
3705
+ /**
3706
+ * Caches pre-rasterized experimental wrapper sprites (shape + baked shadow)
3707
+ * keyed by geometry + color + shadow params. Blitting the sprite with
3708
+ * `drawImage` sidesteps per-frame path construction and shadow
3709
+ * rasterization — the hot cost in the wrapper render path. Cleared on
3710
+ * full-redraw (`this.dirty`) to match `pinCache`/`textCache` invalidation.
3711
+ */
3712
+ wrapperCache: Record<string, OffscreenCanvas | HTMLCanvasElement>;
3660
3713
  /** Stores the loaded images ready to be drawn. */
3661
3714
  imageCache: Record<number, HTMLImageElement | ImageBitmap>;
3662
3715
  /** Stores the promises for each image fetch. */
@@ -3670,6 +3723,22 @@ declare class TwoDDrawSystem extends PubSub<{
3670
3723
  center?: OffscreenCanvas | HTMLCanvasElement;
3671
3724
  right?: OffscreenCanvas | HTMLCanvasElement;
3672
3725
  }>;
3726
+ /** Number of labels that cleared the `canShow && visible` gate this frame. */
3727
+ private drawCount;
3728
+ /**
3729
+ * Number of `project()` calls issued this frame. Owned and written by the
3730
+ * pipeline (which performs the actual projection loop); read-only here.
3731
+ */
3732
+ projectionCount: number;
3733
+ /**
3734
+ * Number of labels currently in `visibilitySystem.animating`. Owned and
3735
+ * written by the pipeline right before the draw pass; read-only here.
3736
+ */
3737
+ animatingCount: number;
3738
+ /** Number of labels that reached `recomputeCurrentStrategy` this frame. */
3739
+ private drawAttemptCount;
3740
+ /** Lazily-mounted DOM overlay that renders per-frame stats. */
3741
+ private statsElement?;
3673
3742
  /**
3674
3743
  * Runs the draw pass for all label entities.
3675
3744
  * @param zoomLevel - Current zoom level (for icon scale interpolation)
@@ -3684,6 +3753,72 @@ declare class TwoDDrawSystem extends PubSub<{
3684
3753
  cacheImage: (label: LabelComponent) => void;
3685
3754
  createPinCanvas: (label: LabelComponent, pinSize: number, backgroundColor: string, foregroundColor: string, maxIconScale?: number) => HTMLCanvasElement | OffscreenCanvas;
3686
3755
  prepare: (label: LabelComponent, labelCacheId: string, context: CanvasRenderingContext2D) => void;
3756
+ /**
3757
+ * Lazily mounts (and updates) a small DOM overlay reporting per-frame
3758
+ * label-pipeline stats:
3759
+ *
3760
+ * - `projections` — raw count of `project()` calls issued by the pipeline
3761
+ * (every entity, regardless of whether it lands on-screen).
3762
+ * - `draw-attempts` — labels that reached `recomputeCurrentStrategy`, i.e.
3763
+ * survived the `offscreen`/`visible` cull and had their layout/strategy
3764
+ * recomputed.
3765
+ * - `draws` — labels that cleared the final `canShow && visible` gate in
3766
+ * `draw()` and issued canvas draw calls.
3767
+ *
3768
+ * Intended as a lightweight diagnostic for tuning visibility strategies
3769
+ * and culling.
3770
+ */
3771
+ private updateStatsOverlay;
3772
+ /**
3773
+ * Creates an offscreen sprite containing a filled wrapper shape with its
3774
+ * drop shadow pre-rasterized. The shape is drawn at `(marginX, marginY)`
3775
+ * inside a canvas sized to fully contain the shadow spread.
3776
+ *
3777
+ * @param w - Shape width in canvas pixels (integer, excludes shadow margin).
3778
+ * @param h - Shape height in canvas pixels (integer, excludes shadow margin).
3779
+ * @param marginX - Horizontal padding added to the sprite to hold the shadow.
3780
+ * @param marginY - Vertical padding added to the sprite to hold the shadow.
3781
+ * @param drawShape - Callback that issues the path for the shape at the
3782
+ * provided top-left `(x, y)` with dimensions `(w, h)`. The caller already
3783
+ * set `fillStyle` + shadow properties; `beginPath` is the callback's
3784
+ * responsibility.
3785
+ * @param bgColor - Fill color for the shape.
3786
+ * @param shadowColor - Drop-shadow color; `''`/`undefined` disables shadow.
3787
+ * @param shadowOffsetX - Drop-shadow X offset in canvas pixels.
3788
+ * @param shadowOffsetY - Drop-shadow Y offset in canvas pixels.
3789
+ * @param shadowBlur - Drop-shadow blur radius in canvas pixels.
3790
+ * @returns An OffscreenCanvas (preferred) or HTMLCanvasElement fallback.
3791
+ */
3792
+ private createWrapperSprite;
3793
+ /**
3794
+ * Draws the experimental wrapper background shape behind the label.
3795
+ *
3796
+ * Shape varies with the active strategy:
3797
+ * - Text visible → rounded rectangle union of pin + text, expanded by
3798
+ * `__EXPERIMENTAL_wrapperPaddingX` / `__EXPERIMENTAL_wrapperPaddingY`.
3799
+ * - No text, pin ACTIVE (HIDDEN placement with visible icon) → filled
3800
+ * circle with radius `visiblePinRadius + max(paddingX, paddingY)` so the
3801
+ * icon sits inside a colored chip.
3802
+ * - No text, pin INACTIVE (LOW_PRIORITY / HIDDEN without icon) → tiny
3803
+ * filled dot. Radius is half of `__EXPERIMENTAL_wrapperDotSize` (CSS
3804
+ * pixels) when set, otherwise the intrinsic inactive pin fill radius.
3805
+ *
3806
+ * The pin contribution to the rect / chip uses the *visible* pin radius
3807
+ * (`(pinSize + PIN_STROKE_SIZE * pixelRatio) / 2`) rather than `drawSize`.
3808
+ * `drawSize` reflects the pin's padded canvas extent (includes transparent
3809
+ * margin for shadow / stroke headroom), which would otherwise inflate the
3810
+ * wrapper to ~2× the visible pin — making small padding values read as
3811
+ * much larger than requested.
3812
+ *
3813
+ * Hot-path optimization: the shape + shadow are rasterized once into an
3814
+ * offscreen sprite keyed by geometry/color/shadow params (see
3815
+ * `wrapperCache`) and blitted with `drawImage` on subsequent frames,
3816
+ * avoiding per-frame path construction and shadow rasterization.
3817
+ *
3818
+ * No-op unless the appearance sets `__EXPERIMENTAL_wrapperBackgroundColor`.
3819
+ * All coordinates are in canvas pixels (already multiplied by pixelRatio).
3820
+ */
3821
+ private drawWrapperBackground;
3687
3822
  /**
3688
3823
  * Draws a single label to the canvas.
3689
3824
  */
@@ -3744,6 +3879,8 @@ declare class TwoDPipeline {
3744
3879
  get drawSystem(): TwoDDrawSystem;
3745
3880
  /** Exposed for testing; DOM draw is internal to the pipeline */
3746
3881
  get domDrawSystem(): DOMDrawSystem;
3882
+ /** @internal Canvas used for rendering 2D labels. */
3883
+ get labelCanvas(): HTMLCanvasElement;
3747
3884
  constructor(container: HTMLElement, state: TwoDPipelineState, project: ProjectFn, options?: TwoDPipelineOptions);
3748
3885
  /**
3749
3886
  * Registers an entity in the lookup map without activating it.
@@ -4234,7 +4371,99 @@ declare class Path implements IFocusable {
4234
4371
  declare const EASING_CURVES: readonly ["ease-in", "ease-out", "ease-in-out", "linear", "ease-out-cubic"];
4235
4372
  type EasingCurve = (typeof EASING_CURVES)[number];
4236
4373
  //#endregion
4374
+ //#region src/navigation/tethered.d.ts
4375
+ /**
4376
+ * Preset visual styles for the connector line drawn from the tracked
4377
+ * coordinate to the path when outside the tether threshold.
4378
+ *
4379
+ * - `'dashed-boxes'` — chunky 1m absolute dashes (default). Reads loudly as
4380
+ * "off-route".
4381
+ * - `'dashed-stripes'` — long dashes with tiny gaps. Almost-solid striped look.
4382
+ * - `'dashed-sparse'` — same dash size as `dashed-boxes` but with a much
4383
+ * bigger gap. Quieter, more breathable rhythm.
4384
+ * - `'solid'` — continuous solid line, no dashing. A plain leader line.
4385
+ * - `'bordered'` — ribbon geometry with darkened edges. Reads as a
4386
+ * warning ribbon. Forces ribbon geometry on the connector.
4387
+ *
4388
+ * For fine-grained control (custom colour, exact width, etc.) use
4389
+ * `outsideThresholdPathOptions` — it is merged on top of the preset and
4390
+ * wins on any conflicting properties.
4391
+ */
4392
+ type TOutsideThresholdPathStyle = 'solid' | 'dashed-boxes' | 'dashed-stripes' | 'dashed-sparse' | 'bordered';
4393
+ /**
4394
+ * Options for tethering to a coordinate.
4395
+ */
4396
+ type TTetheredOptions = {
4397
+ /**
4398
+ * The distance threshold within which the coordinate will be tethered to the path (meters).
4399
+ * @default 10
4400
+ */
4401
+ tetherThresholdDistance?: number;
4402
+ /**
4403
+ * Visual preset for the connector line drawn from the tracked coordinate
4404
+ * to the path when outside the tether threshold. See
4405
+ * {@link TOutsideThresholdPathStyle} for the list of presets.
4406
+ *
4407
+ * For finer control, use {@link outsideThresholdPathOptions} which is
4408
+ * merged on top of the preset.
4409
+ *
4410
+ * @default 'dashed-boxes'
4411
+ */
4412
+ outsideThresholdPathStyle?: TOutsideThresholdPathStyle;
4413
+ /**
4414
+ * Low-level overrides applied on top of {@link outsideThresholdPathStyle}.
4415
+ * Anything specified here wins over the preset.
4416
+ */
4417
+ outsideThresholdPathOptions?: Partial<TAddPathOptions>;
4418
+ /**
4419
+ * Options for the tether path (solid path from threshold point to destination).
4420
+ */
4421
+ tetherPathOptions?: Partial<TAddPathOptions>;
4422
+ /**
4423
+ * Controls behavior when the coordinate is outside the threshold distance from the path.
4424
+ * - `'tether-and-dash'`: Creates both the tethered path and a dashed line from user to threshold point (default)
4425
+ * - `'tether-only'`: Creates only the tethered path, no dashed line
4426
+ * - `'untether'`: Untethers from the path until a coordinate within threshold is provided
4427
+ * @default 'tether-and-dash'
4428
+ */
4429
+ coordinateOutsideThresholdMode?: 'tether-and-dash' | 'tether-only' | 'untether';
4430
+ /**
4431
+ * Whether to hide markers on the portion of the path the user has already travelled past.
4432
+ * Markers on the remaining path (current segment ahead of the user and all subsequent
4433
+ * segments, including the destination marker) stay enabled.
4434
+ * @default false
4435
+ */
4436
+ hideMarkersOutsideThreshold?: boolean;
4437
+ };
4438
+ //#endregion
4439
+ //#region src/navigation/travelled.d.ts
4440
+ /**
4441
+ * Options for updating travelled path state.
4442
+ */
4443
+ type TTravelledOptions = {
4444
+ /**
4445
+ * The color to use for the travelled portion of the path.
4446
+ * @default '#999'
4447
+ */
4448
+ color?: string;
4449
+ };
4450
+ //#endregion
4237
4451
  //#region src/navigation/index.d.ts
4452
+ /**
4453
+ * Options for tracking a coordinate on the navigation path.
4454
+ */
4455
+ type TTrackCoordinateOptions = {
4456
+ /**
4457
+ * The tracking mode to use.
4458
+ * - 'tethered': Connect the user's position to the closest point on the path
4459
+ * - 'travelled': Show the travelled portion of the path with a different color
4460
+ */
4461
+ mode: 'tethered' | 'travelled';
4462
+ } & (({
4463
+ mode: 'tethered';
4464
+ } & TTetheredOptions) | ({
4465
+ mode: 'travelled';
4466
+ } & TTravelledOptions));
4238
4467
  /**
4239
4468
  * Controls marker creation for navigation points.
4240
4469
  *
@@ -4269,15 +4498,6 @@ type TNavigationPathOptions = TAddPathOptions & {
4269
4498
  * If not specified, connection paths use the main `color` property.
4270
4499
  */
4271
4500
  __EXPERIMENTAL__CONNECTION_COLOR?: string;
4272
- /**
4273
- * @experimental Controls billboarding for connection path geometry.
4274
- * - `boolean`: Enable/disable billboarding directly
4275
- * - `number`: Angle threshold in degrees (0-90). Billboard when path angle from horizontal >= threshold.
4276
- * For example, 80 means billboard only when path is >=80 degrees from horizontal (nearly vertical).
4277
- *
4278
- * @defaultValue false
4279
- */
4280
- __EXPERIMENTAL__CONNECTION_BILLBOARDING?: boolean | number;
4281
4501
  /**
4282
4502
  * @experimental Amount in meters to shorten connection path from each end.
4283
4503
  * Prevents visual overlap with floor paths at junctions.
@@ -4297,6 +4517,13 @@ type TNavigationPathOptions = TAddPathOptions & {
4297
4517
  * If not specified, connection paths use the main `__EXPERIMENTAL_GEOMETRY` property.
4298
4518
  */
4299
4519
  __EXPERIMENTAL__CONNECTION_GEOMETRY?: 'tube' | 'ribbon';
4520
+ /**
4521
+ * @experimental
4522
+ * @deprecated Use `__EXPERIMENTAL_BILLBOARDING` instead. With per-vertex angle gating in the shader,
4523
+ * billboarding applies to all path segments but only affects vertices above the angle threshold.
4524
+ * A numeric value (degrees) naturally billboards only steep connection segments while leaving floor paths flat.
4525
+ */
4526
+ __EXPERIMENTAL__CONNECTION_BILLBOARDING?: boolean | number;
4300
4527
  };
4301
4528
  /**
4302
4529
  * Options for navigation.
@@ -4335,7 +4562,7 @@ type TNavigationOptions = {
4335
4562
  /**
4336
4563
  * Path Options for the non-current path in multi-destination mode.
4337
4564
  */
4338
- inactivePathOptions?: Partial<TAddPathOptions>;
4565
+ inactivePathOptions?: Partial<TNavigationPathOptions>;
4339
4566
  /**
4340
4567
  * Controls whether the path drawing is animated across floors.
4341
4568
  * @default true
@@ -4465,6 +4692,102 @@ declare class Navigation {
4465
4692
  */
4466
4693
  setActivePathByDirections(target: Directions): void;
4467
4694
  clearHighlightedPathSection(): void;
4695
+ /**
4696
+ * Tracks the user's position on the navigation path using the specified mode.
4697
+ * Only one tracking mode can be active at a time — switching modes auto-clears
4698
+ * the previous mode's visual state.
4699
+ *
4700
+ * Call this on every position update (e.g. from BlueDot's `dot-position-update`
4701
+ * event). Use {@link stopTracking} to tear down all tracking state.
4702
+ *
4703
+ * @param coordinate - The user's current coordinate
4704
+ * @param options - Tracking options including mode ('tethered' or 'travelled') and mode-specific options
4705
+ * @returns For 'tethered' mode: path coordinates if successful, null otherwise.
4706
+ * For 'travelled' mode: the travelled fraction (0-1) if successful, null otherwise.
4707
+ * @experimental
4708
+ *
4709
+ * @example
4710
+ * ```ts
4711
+ * // 'tethered' — snap user position onto the closest point on the active path
4712
+ * blueDot.on('dot-position-update', e => {
4713
+ * mapView.Navigation.trackCoordinate(e.position, {
4714
+ * mode: 'tethered',
4715
+ * tetherThresholdDistance: 10,
4716
+ * coordinateOutsideThresholdMode: 'tether-and-dash',
4717
+ * outsideThresholdPathStyle: 'dashed-boxes',
4718
+ * });
4719
+ * });
4720
+ *
4721
+ * // 'travelled' — recolour the portion of the path the user has walked past
4722
+ * blueDot.on('dot-position-update', e => {
4723
+ * mapView.Navigation.trackCoordinate(e.position, {
4724
+ * mode: 'travelled',
4725
+ * color: '#999',
4726
+ * });
4727
+ * });
4728
+ * ```
4729
+ */
4730
+ trackCoordinate(coordinate: Coordinate, options: TTrackCoordinateOptions): Coordinate[] | number | null;
4731
+ /**
4732
+ * Stops any active coordinate tracking (tethering or travelled path visualization).
4733
+ * @experimental
4734
+ */
4735
+ stopTracking(): void;
4736
+ /**
4737
+ * Returns the current tracking mode, or `null` if no tracking is active.
4738
+ *
4739
+ * - `'tethered'` — coordinate is being snapped onto the active path.
4740
+ * - `'travelled'` — the traversed portion of the path is being recoloured.
4741
+ *
4742
+ * The mode is set as soon as {@link trackCoordinate} is called (even before
4743
+ * the first coordinate is matched). For a stricter "is the visualisation
4744
+ * currently active" check, use {@link isTracking}.
4745
+ *
4746
+ * @experimental
4747
+ */
4748
+ get currentTrackingMode(): 'tethered' | 'travelled' | null;
4749
+ /**
4750
+ * Returns true while a coordinate is actively being tracked and visualized
4751
+ * on the path.
4752
+ *
4753
+ * - In `'tethered'` mode this is true whenever a tethered path is drawn or
4754
+ * path segments behind the user have been hidden.
4755
+ * - In `'travelled'` mode this is true once one or more segments have been
4756
+ * marked as travelled.
4757
+ *
4758
+ * This is more precise than checking {@link currentTrackingMode}: the mode
4759
+ * is set as soon as {@link trackCoordinate} is called, but `isTracking`
4760
+ * only becomes true once the coordinate is successfully matched to the
4761
+ * path. It also becomes false again if `coordinateOutsideThresholdMode` is
4762
+ * `'untether'` and a coordinate falls outside the threshold.
4763
+ *
4764
+ * @experimental
4765
+ */
4766
+ get isTracking(): boolean;
4767
+ /**
4768
+ * Returns true while the dashed connector line from the tracked coordinate
4769
+ * to the path is being drawn. This only happens in `'tethered'` mode when
4770
+ * the coordinate is outside the tether threshold and
4771
+ * `coordinateOutsideThresholdMode` is `'tether-and-dash'` (the default).
4772
+ *
4773
+ * @experimental
4774
+ */
4775
+ get isShowingOutsideThresholdPath(): boolean;
4776
+ /**
4777
+ * Returns the fraction (0–1) of the active path that has been travelled
4778
+ * while in `'travelled'` mode. Returns `null` when not currently tracking
4779
+ * in travelled mode.
4780
+ *
4781
+ * Multiply by {@link Navigation.activePath}'s `distance` to get the
4782
+ * travelled distance in meters.
4783
+ *
4784
+ * In multi-destination mode this reflects progress along the currently
4785
+ * active destination's path only — it resets when the active path
4786
+ * changes.
4787
+ *
4788
+ * @experimental
4789
+ */
4790
+ get travelledFraction(): number | null;
4468
4791
  /**
4469
4792
  * Highlights path section between two coordinates. This can be used to highlight any section of the path or indicated the currently traveled path.
4470
4793
  */
@@ -4541,6 +4864,7 @@ declare class Footprint {
4541
4864
  private ceilingId?;
4542
4865
  private ceilingMaskId?;
4543
4866
  private basementMaskId?;
4867
+ private extrudedPolygonId?;
4544
4868
  private footprintColor;
4545
4869
  layer: EntityId<GroupContainerState>;
4546
4870
  groupContainer: EntityId<GroupContainerState>;
@@ -4568,6 +4892,23 @@ declare class Footprint {
4568
4892
  * @param voidPolygons Array of polygon features representing voids
4569
4893
  */
4570
4894
  buildVoidWalls(voidPolygons: Feature$1<Polygon$1, any>[]): void;
4895
+ /**
4896
+ * Builds the footprint as a single extruded polygon (no separate walls or ceiling).
4897
+ *
4898
+ * Used as the "simple mode" alternative to `buildWalls` + `buildVoidWalls` + `buildCeiling`
4899
+ * when no ceiling cuts are needed (i.e. `spacesOpenToBelowEnabled` is false, or it is
4900
+ * enabled but neither this floor nor the floor above contributes any cuts). Collapses
4901
+ * three feature collections into one, reducing draw calls per floor.
4902
+ *
4903
+ * The extruded mesh's top face acts as the "ceiling" — there is no separate ceiling
4904
+ * layer, so `ceilingVisible` and `ceilingThickness` are not honoured in simple mode.
4905
+ *
4906
+ * Holes are stripped from the source geometry before extrusion. The footprint may carry
4907
+ * void holes from MVF data, but in simple mode the user has opted out of "spaces open to
4908
+ * below" (or there are no cuts to apply), so the top and bottom faces must be solid —
4909
+ * matching the legacy `buildCeiling` path which also calls `removeHoles` before rendering.
4910
+ */
4911
+ buildExtrudedPolygon(): void;
4571
4912
  /**
4572
4913
  * Builds the ceiling with voids from the floor above
4573
4914
  */
@@ -4668,6 +5009,7 @@ declare class FloorObject implements FloorProperties {
4668
5009
  get visible(): boolean;
4669
5010
  setVisible(visible: boolean): void;
4670
5011
  buildCeiling(ceilingCuts: Feature$1<Polygon$1, any>[]): void;
5012
+ buildExtrudedPolygon(): void;
4671
5013
  buildBasementMask(): void;
4672
5014
  /**
4673
5015
  * Builds a gap footprint representing missing floors below this floor.
@@ -4779,7 +5121,7 @@ declare class GeojsonApiMapObject extends PubSub<{
4779
5121
  * @param floorStackId - The floor stack ID
4780
5122
  * @returns The altitude map for the floor stack
4781
5123
  */
4782
- getFloorStackAltitudeData(floorStackId: string): Map<any, any>;
5124
+ getFloorStackAltitudeData(floorStackId: string): Map<number, TFloorAltitudeData>;
4783
5125
  private cancelAnimation;
4784
5126
  Models: {
4785
5127
  add: (id: string, targets: Coordinate[], opts: TAddModelOptions & {
@@ -5029,9 +5371,9 @@ type InspectorOption = Partial<InspectorState>;
5029
5371
  //#region src/debug.d.ts
5030
5372
  declare class Debug {
5031
5373
  #private;
5032
- state: RendererCore['Debug']['state'];
5374
+ state: DebugState$1;
5033
5375
  constructor(core: RendererCore);
5034
- update: RendererCore['Debug']['update'];
5376
+ update: (updateState: Partial<DebugState$1>) => void;
5035
5377
  /**
5036
5378
  * Returns the current camera state as a JSON object that can be passed directly to `mapView.Camera.set()`.
5037
5379
  * @returns The current camera state including center, zoomLevel, bearing, and pitch.
@@ -6959,12 +7301,105 @@ declare class MapView {
6959
7301
  */
6960
7302
  set __INTERNAL__hidePathsNotOnCurrentFloor(value: boolean);
6961
7303
  /**
6962
- * @internal
7304
+ * **Super experimental — this API may change or be removed in any release without notice.
7305
+ * Do not depend on it in production.**
7306
+ *
7307
+ * Registers a plugin that runs every frame in the render loop.
7308
+ *
7309
+ * The plugin's {@link ISystemPlugin.update | update()} method receives the full
7310
+ * {@link TRendererState} — including the Three.js scene, camera, renderer, lighting,
7311
+ * and all ECS geometry entities — allowing you to inject custom Three.js objects,
7312
+ * apply per-frame effects, or read scene state.
7313
+ *
7314
+ * Plugins execute during the finalization phase of the render loop (after camera,
7315
+ * path, and 2D systems, but before `DrawSystem` and `paint()`).
7316
+ *
7317
+ * @param plugin - An object implementing {@link ISystemPlugin}. Must have an
7318
+ * `update(state: TRendererState)` method.
7319
+ *
7320
+ * @example
7321
+ * ### Standalone mode — add a spinning cube
7322
+ * ```ts
7323
+ * import { type ISystemPlugin, type TRendererState } from '@mappedin/mappedin-js';
7324
+ * import { BoxGeometry, Mesh, MeshStandardMaterial } from 'three';
7325
+ *
7326
+ * class CubePlugin implements ISystemPlugin {
7327
+ * private cube: Mesh | null = null;
7328
+ *
7329
+ * update(state: TRendererState): void {
7330
+ * if (!this.cube) {
7331
+ * this.cube = new Mesh(
7332
+ * new BoxGeometry(5, 5, 5),
7333
+ * new MeshStandardMaterial({ color: 0x00ff88 }),
7334
+ * );
7335
+ * this.cube.position.set(0, 0, 10);
7336
+ * state.threeJSScene.add(this.cube);
7337
+ * }
7338
+ * this.cube.rotation.y += 0.01;
7339
+ * }
7340
+ * }
7341
+ *
7342
+ * mapView.registerPlugin(new CubePlugin());
7343
+ * ```
7344
+ *
7345
+ * @example
7346
+ * ### MapLibre overlay mode — add a floating sphere
7347
+ * ```ts
7348
+ * import { type ISystemPlugin, type TRendererState } from '@mappedin/mappedin-js';
7349
+ * import { Mesh, MeshStandardMaterial, SphereGeometry } from 'three';
7350
+ *
7351
+ * class SpherePlugin implements ISystemPlugin {
7352
+ * private sphere: Mesh | null = null;
7353
+ *
7354
+ * update(state: TRendererState): void {
7355
+ * if (!this.sphere) {
7356
+ * this.sphere = new Mesh(
7357
+ * new SphereGeometry(3, 32, 32),
7358
+ * new MeshStandardMaterial({ color: 0xff4444 }),
7359
+ * );
7360
+ * // In overlay mode, add to geometryScene (not threeJSScene)
7361
+ * state.geometryScene.add(this.sphere);
7362
+ * }
7363
+ * }
7364
+ * }
7365
+ *
7366
+ * // Inside the overlay's 'loaded' callback:
7367
+ * overlay.on('loaded', ({ mapView }) => {
7368
+ * mapView.registerPlugin(new SpherePlugin());
7369
+ * });
7370
+ * ```
7371
+ *
7372
+ * @see {@link unregisterPlugin} to remove a plugin.
7373
+ * @see {@link ISystemPlugin} for the plugin interface and lifecycle details.
7374
+ *
6963
7375
  * @experimental
6964
7376
  */
6965
7377
  registerPlugin(plugin: ISystemPlugin$1): void;
6966
7378
  /**
6967
- * @internal
7379
+ * **Super experimental — this API may change or be removed in any release without notice.
7380
+ * Do not depend on it in production.**
7381
+ *
7382
+ * Removes a previously registered plugin from the render loop.
7383
+ *
7384
+ * After removal, the plugin's `update()` method will no longer be called.
7385
+ * Any Three.js objects the plugin added to the scene are **not** automatically
7386
+ * removed — the plugin is responsible for its own cleanup before or after
7387
+ * unregistration.
7388
+ *
7389
+ * @param plugin - The same plugin instance that was passed to {@link registerPlugin}.
7390
+ *
7391
+ * @example
7392
+ * ```ts
7393
+ * const plugin = new CubePlugin();
7394
+ *
7395
+ * mapView.registerPlugin(plugin);
7396
+ *
7397
+ * // Later, when the plugin is no longer needed:
7398
+ * mapView.unregisterPlugin(plugin);
7399
+ * ```
7400
+ *
7401
+ * @see {@link registerPlugin} to add a plugin.
7402
+ *
6968
7403
  * @experimental
6969
7404
  */
6970
7405
  unregisterPlugin(plugin: ISystemPlugin$1): void;
@@ -8563,6 +8998,7 @@ declare const markerStateSchema: ZodObject<{
8563
8998
  element: ZodCustom<HTMLElement, HTMLElement>;
8564
8999
  contentHTML: ZodString;
8565
9000
  occlude: ZodDefault<ZodBoolean>;
9001
+ animated: ZodDefault<ZodBoolean>;
8566
9002
  }, $strip>;
8567
9003
  declare const markerStateSchemaPartial: ZodObject<{
8568
9004
  type: ZodOptional<ZodDefault<ZodLiteral<"marker">>>;
@@ -8601,6 +9037,7 @@ declare const markerStateSchemaPartial: ZodObject<{
8601
9037
  color: ZodOptional<ZodString>;
8602
9038
  }, $strip>>>;
8603
9039
  contentHTML: ZodOptional<ZodString>;
9040
+ animated: ZodOptional<ZodDefault<ZodBoolean>>;
8604
9041
  }, $strip>;
8605
9042
  type TMarkerState = output<typeof markerStateSchema>;
8606
9043
  type TMarkerUpdateState = output<typeof markerStateSchemaPartial>;
@@ -8611,7 +9048,7 @@ type BorderColor = LiteralUnion<'darken', string>;
8611
9048
  declare const pathStateSchemaPartial: ZodObject<{
8612
9049
  type: ZodOptional<ZodDefault<ZodLiteral<"path">>>;
8613
9050
  color: ZodOptional<ZodDefault<ZodString>>;
8614
- width: ZodOptional<ZodType<number | Interpolation$1<"zoom-level", number[]>, unknown, $ZodTypeInternals<number | Interpolation$1<"zoom-level", number[]>, unknown>>>;
9051
+ width: ZodOptional<ZodType<PathWidth$2, unknown, $ZodTypeInternals<PathWidth$2, unknown>>>;
8615
9052
  completeFraction: ZodOptional<ZodDefault<ZodNumber>>;
8616
9053
  visible: ZodOptional<ZodDefault<ZodBoolean>>;
8617
9054
  verticalOffset: ZodOptional<ZodDefault<ZodNumber>>;
@@ -8621,6 +9058,8 @@ declare const pathStateSchemaPartial: ZodObject<{
8621
9058
  highlightWidthMultiplier: ZodOptional<ZodDefault<ZodNumber>>;
8622
9059
  highlightCompleteFraction: ZodOptional<ZodDefault<ZodNumber>>;
8623
9060
  xrayOpacity: ZodOptional<ZodDefault<ZodNumber>>;
9061
+ travelledEndFraction: ZodOptional<ZodDefault<ZodNumber>>;
9062
+ travelledColor: ZodOptional<ZodDefault<ZodString>>;
8624
9063
  __EXPERIMENTAL_SMOOTHING_TENSION: ZodOptional<ZodDefault<ZodNumber>>;
8625
9064
  __EXPERIMENTAL_SMOOTHING_CORNER_RADIUS: ZodOptional<ZodDefault<ZodNumber>>;
8626
9065
  dashed: ZodOptional<ZodDefault<ZodBoolean>>;
@@ -8642,18 +9081,24 @@ declare const pathStateSchemaPartial: ZodObject<{
8642
9081
  ribbon: "ribbon";
8643
9082
  }>>>;
8644
9083
  __EXPERIMENTAL_ENDCAP_EXTENSION: ZodOptional<ZodDefault<ZodTuple<[ZodNumber, ZodNumber], null>>>;
8645
- __EXPERIMENTAL_BILLBOARDING: ZodOptional<ZodDefault<ZodBoolean>>;
9084
+ __EXPERIMENTAL_BILLBOARDING: ZodOptional<ZodDefault<ZodUnion<readonly [ZodBoolean, ZodNumber]>>>;
8646
9085
  __EXPERIMENTAL_BORDER: ZodOptional<ZodOptional<ZodObject<{
8647
9086
  enabled: ZodBoolean;
8648
9087
  color: ZodCustom<BorderColor, BorderColor>;
8649
9088
  width: ZodOptional<ZodNumber>;
8650
9089
  }, $strip>>>;
8651
9090
  __EXPERIMENTAL_PREVENT_SELF_OVERLAP: ZodOptional<ZodDefault<ZodBoolean>>;
9091
+ __EXPERIMENTAL_XRAY_STYLE: ZodOptional<ZodOptional<ZodObject<{
9092
+ opacity: ZodOptional<ZodNumber>;
9093
+ color: ZodOptional<ZodString>;
9094
+ tint: ZodOptional<ZodNumber>;
9095
+ dithering: ZodOptional<ZodNumber>;
9096
+ }, $strip>>>;
8652
9097
  }, $strip>;
8653
9098
  declare const pathStateSchemaStrict: ZodObject<{
8654
9099
  type: ZodDefault<ZodLiteral<"path">>;
8655
9100
  color: ZodDefault<ZodString>;
8656
- width: ZodType<number | Interpolation$1<"zoom-level", number[]>>;
9101
+ width: ZodType<PathWidth$2>;
8657
9102
  completeFraction: ZodDefault<ZodNumber>;
8658
9103
  visible: ZodDefault<ZodBoolean>;
8659
9104
  verticalOffset: ZodDefault<ZodNumber>;
@@ -8663,6 +9108,8 @@ declare const pathStateSchemaStrict: ZodObject<{
8663
9108
  highlightWidthMultiplier: ZodDefault<ZodNumber>;
8664
9109
  highlightCompleteFraction: ZodDefault<ZodNumber>;
8665
9110
  xrayOpacity: ZodDefault<ZodNumber>;
9111
+ travelledEndFraction: ZodDefault<ZodNumber>;
9112
+ travelledColor: ZodDefault<ZodString>;
8666
9113
  __EXPERIMENTAL_SMOOTHING_TENSION: ZodDefault<ZodNumber>;
8667
9114
  __EXPERIMENTAL_SMOOTHING_CORNER_RADIUS: ZodDefault<ZodNumber>;
8668
9115
  dashed: ZodDefault<ZodBoolean>;
@@ -8684,13 +9131,19 @@ declare const pathStateSchemaStrict: ZodObject<{
8684
9131
  ribbon: "ribbon";
8685
9132
  }>>;
8686
9133
  __EXPERIMENTAL_ENDCAP_EXTENSION: ZodDefault<ZodTuple<[ZodNumber, ZodNumber], null>>;
8687
- __EXPERIMENTAL_BILLBOARDING: ZodDefault<ZodBoolean>;
9134
+ __EXPERIMENTAL_BILLBOARDING: ZodDefault<ZodUnion<readonly [ZodBoolean, ZodNumber]>>;
8688
9135
  __EXPERIMENTAL_BORDER: ZodOptional<ZodObject<{
8689
9136
  enabled: ZodBoolean;
8690
9137
  color: ZodCustom<BorderColor, BorderColor>;
8691
9138
  width: ZodOptional<ZodNumber>;
8692
9139
  }, $strip>>;
8693
9140
  __EXPERIMENTAL_PREVENT_SELF_OVERLAP: ZodDefault<ZodBoolean>;
9141
+ __EXPERIMENTAL_XRAY_STYLE: ZodOptional<ZodObject<{
9142
+ opacity: ZodOptional<ZodNumber>;
9143
+ color: ZodOptional<ZodString>;
9144
+ tint: ZodOptional<ZodNumber>;
9145
+ dithering: ZodOptional<ZodNumber>;
9146
+ }, $strip>>;
8694
9147
  }, $strict>;
8695
9148
  type TPathState = output<typeof pathStateSchemaStrict>;
8696
9149
  type TPathUpdateState = input<typeof pathStateSchemaPartial>;
@@ -8747,6 +9200,7 @@ declare const imageStateSchema: ZodObject<{
8747
9200
  rotation: ZodDefault<ZodNumber>;
8748
9201
  verticalOffset: ZodDefault<ZodNumber>;
8749
9202
  flipImagesToFaceCamera: ZodDefault<ZodBoolean>;
9203
+ interactive: ZodDefault<ZodBoolean>;
8750
9204
  }, $strip>;
8751
9205
  declare const imageStateSchemaPartial: ZodObject<{
8752
9206
  type: ZodOptional<ZodDefault<ZodLiteral<"image3d">>>;
@@ -8758,6 +9212,7 @@ declare const imageStateSchemaPartial: ZodObject<{
8758
9212
  rotation: ZodOptional<ZodDefault<ZodNumber>>;
8759
9213
  verticalOffset: ZodOptional<ZodDefault<ZodNumber>>;
8760
9214
  flipImagesToFaceCamera: ZodOptional<ZodDefault<ZodBoolean>>;
9215
+ interactive: ZodOptional<ZodDefault<ZodBoolean>>;
8761
9216
  }, $strip>;
8762
9217
  type TImage3DState = output<typeof imageStateSchema>;
8763
9218
  type TImage3DUpdateState = output<typeof imageStateSchemaPartial>;
@@ -8997,7 +9452,7 @@ declare class GeoJsonApi extends PubSub<TNavigationEvents> {
8997
9452
  * @param floorStackId - The floor stack ID
8998
9453
  * @returns A map of floor elevation to altitude and effective height data
8999
9454
  */
9000
- getFloorStackAltitudeData(floorStackId: string): Map<any, any>;
9455
+ getFloorStackAltitudeData(floorStackId: string): Map<number, TFloorAltitudeData>;
9001
9456
  /**
9002
9457
  * Create a coordinate from a screen coordinate
9003
9458
  * @param x - The x coordinate of the screen
@@ -9359,7 +9814,7 @@ declare class Navigator {
9359
9814
  private geometryEdgesByMapId;
9360
9815
  private flagDeclarations;
9361
9816
  private getDoorByNodeId;
9362
- private disabledNodeIds;
9817
+ private nonPublicNodeIds;
9363
9818
  /**
9364
9819
  * Constructs a Navigator instance to manage pathfinding with optional obstructions and grouping features.
9365
9820
  *
@@ -9384,7 +9839,11 @@ declare class Navigator {
9384
9839
  flagDeclarations?: NavigationFlagDeclarations;
9385
9840
  getDoorByNodeId: (nodeId: string) => DoorGeometry | undefined;
9386
9841
  });
9387
- private getDisabledNodeIds;
9842
+ /**
9843
+ * Build the set of node IDs that do not have the well-known `public` flag
9844
+ * set. Returns an empty set when the MVF does not declare the flag.
9845
+ */
9846
+ private getNonPublicNodeIds;
9388
9847
  /**
9389
9848
  * Calculates and returns a set of directions from origin nodes to destination nodes, including detailed properties.
9390
9849
  *
@@ -9393,6 +9852,7 @@ declare class Navigator {
9393
9852
  * @param {string[]} destinationNodeIds - IDs of destination nodes.
9394
9853
  * @param {string[]} [disabledConnectionNodeIds] - IDs of connection nodes that are disabled (ie. act as regular nodes).
9395
9854
  * @param {SimplifyDirectionsOptions} [simplify] - Options to simplify the pathfinding result.
9855
+ * @param {boolean} [includeNonPublic] - When true, nodes lacking the MVF `public` flag are routable. Defaults to false.
9396
9856
  * @returns {DirectionsCollection} A collection of directional features representing the path.
9397
9857
  */
9398
9858
  getDirections({
@@ -9404,7 +9864,8 @@ declare class Navigator {
9404
9864
  disabledConnectionNodeIds,
9405
9865
  simplify,
9406
9866
  multiplicativeDistanceWeightScaling,
9407
- overrideEdgeWeights
9867
+ overrideEdgeWeights,
9868
+ includeNonPublic
9408
9869
  }: {
9409
9870
  originIds: string[];
9410
9871
  destinationNodeIds: string[];
@@ -9415,6 +9876,7 @@ declare class Navigator {
9415
9876
  simplify?: SimplifyDirectionsOptions;
9416
9877
  multiplicativeDistanceWeightScaling?: boolean;
9417
9878
  overrideEdgeWeights?: Map<Edge, number>;
9879
+ includeNonPublic?: boolean;
9418
9880
  }): DirectionsCollection;
9419
9881
  /**
9420
9882
  * Generates a path from a series of edges, constructing a feature collection of directional steps.
@@ -9596,6 +10058,7 @@ declare class DirectionsInternal {
9596
10058
  zones: TDirectionZone[];
9597
10059
  excludedConnections: Connection[];
9598
10060
  connectionIdWeightMap: Record<string, number>;
10061
+ includeNonPublic: boolean;
9599
10062
  }, mapData: MapDataInternal) => Promise<Directions | undefined>;
9600
10063
  /** @deprecated use getDirections instead */
9601
10064
  getDirectionsSync: (from: TNavigationTarget[], to: TNavigationTarget[], options: {
@@ -9604,6 +10067,7 @@ declare class DirectionsInternal {
9604
10067
  zones: TDirectionZone[];
9605
10068
  excludedConnections: Connection[];
9606
10069
  connectionIdWeightMap: Record<string, number>;
10070
+ includeNonPublic: boolean;
9607
10071
  }, mapData: MapDataInternal) => Directions | undefined;
9608
10072
  /**
9609
10073
  * Get the node IDs of connections that do not match the accessibility setting provided.
@@ -9819,6 +10283,10 @@ type TClickPayload = {
9819
10283
  * Interactive {@link Model}s under the pointer.
9820
10284
  */
9821
10285
  models?: Model[];
10286
+ /**
10287
+ * Interactive {@link Image3DView | 3D Image}s under the pointer.
10288
+ */
10289
+ images?: Image3DView[];
9822
10290
  /**
9823
10291
  * Interactive {@link Label}s under the pointer.
9824
10292
  */
@@ -9922,6 +10390,10 @@ type TEvents = {
9922
10390
  * Emitted when the pan bounds of the camera changes.
9923
10391
  */
9924
10392
  'camera-bounds-change': CameraBounds;
10393
+ /**
10394
+ * Emitted when the camera's screen offsets change.
10395
+ */
10396
+ 'camera-screen-offsets-change': InsetPadding$1;
9925
10397
  /**
9926
10398
  * Emitted when a floor change starts.
9927
10399
  */
@@ -10253,6 +10725,8 @@ type TFocusOnOptions = TCameraAnimationOptions & {
10253
10725
  * @default: true
10254
10726
  */
10255
10727
  interruptible?: boolean;
10728
+ /** @internal @experimental Debug color override (CSS color string) for this point cloud. */
10729
+ debugColor?: string;
10256
10730
  };
10257
10731
  /**
10258
10732
  * Defines the target for camera operations.
@@ -10382,11 +10856,15 @@ type TAddPathOptions = {
10382
10856
  */
10383
10857
  pulsePauseDuration?: number;
10384
10858
  /**
10385
- * The width of the path in meters. Can be a number or an {@link Interpolation}.
10859
+ * The width of the path.
10860
+ * - `number` — meters (e.g. `1.5`)
10861
+ * - `'Npx'` — screen-space pixels (e.g. `'20px'`), ribbon geometry only
10862
+ * - `Interpolation` — zoom-interpolated meters
10863
+ * - `Interpolation<'zoom-level', PixelWidth[]>` — zoom-interpolated pixels (e.g. `output: ['10px', '20px']`), ribbon geometry only
10386
10864
  *
10387
10865
  * @defaultValue Interpolation { on: 'zoom-level', input: [17, 22], output: [0.8, 0.4] }
10388
10866
  */
10389
- width?: number | Interpolation$1<'zoom-level', number[]>;
10867
+ width?: PathWidth$1;
10390
10868
  /**
10391
10869
  * Duration of path drawing in milliseconds.
10392
10870
  *
@@ -10458,9 +10936,26 @@ type TAddPathOptions = {
10458
10936
  /**
10459
10937
  * The opacity of the path when it's behind geometry (x-ray effect). Value from 0 to 1.
10460
10938
  *
10939
+ * Prefer {@link __EXPERIMENTAL_XRAY_STYLE}.opacity instead.
10940
+ * If both are set, `__EXPERIMENTAL_XRAY_STYLE.opacity` takes precedence.
10941
+ *
10461
10942
  * @defaultValue 0.25
10462
10943
  */
10463
10944
  xrayOpacity?: number;
10945
+ /**
10946
+ * @experimental
10947
+ * Consolidated x-ray appearance configuration. Controls how paths look when behind geometry.
10948
+ */
10949
+ __EXPERIMENTAL_XRAY_STYLE?: {
10950
+ /** The opacity when behind geometry (0-1). @default 0.25 */
10951
+ opacity?: number;
10952
+ /** Explicit color override for the x-ray portion. Omit to auto-compute from path color. */
10953
+ color?: string;
10954
+ /** Tint strength (0-1). 0 = no muting, 1 = fully muted. @default 0.3 */
10955
+ tint?: number;
10956
+ /** Dithering cell size in screen pixels (e.g. 4 = 4x4px checkerboard). 0 or undefined = off. */
10957
+ dithering?: number;
10958
+ };
10464
10959
  /**
10465
10960
  * @experimental Controls the smoothness of path corners using CatmullRom curve tension. Higher values create smoother curves.
10466
10961
  * Values between 0.1-0.3 provide subtle smoothing suitable for most use cases.
@@ -10499,12 +10994,15 @@ type TAddPathOptions = {
10499
10994
  */
10500
10995
  __EXPERIMENTAL_ENDCAP_EXTENSION?: [number, number];
10501
10996
  /**
10502
- * @experimental When true and using ribbon geometry, the path will always face the camera (billboard effect).
10503
- * Most useful for vertical paths between floors.
10997
+ * @experimental Controls billboarding for ribbon path geometry.
10998
+ * - `true`: Every vertex faces the camera (unconditional billboard)
10999
+ * - `false`: Flat world-space orientation
11000
+ * - `number`: Angle threshold in degrees (0-90). Billboard only when path tangent
11001
+ * verticality >= threshold. E.g. 80 means billboard only nearly-vertical segments.
10504
11002
  *
10505
- * @defaultValue false
11003
+ * @defaultValue 80
10506
11004
  */
10507
- __EXPERIMENTAL_BILLBOARDING?: boolean;
11005
+ __EXPERIMENTAL_BILLBOARDING?: boolean | number;
10508
11006
  /**
10509
11007
  * @experimental Border configuration for ribbon path geometry.
10510
11008
  * Renders darkened edges along both sides of the ribbon.
@@ -10527,18 +11025,9 @@ type TAddPathOptions = {
10527
11025
  };
10528
11026
  /**
10529
11027
  * @experimental Options specific to connection paths (vertical paths between floors).
10530
- * Extends TAddPathOptions but with enhanced billboarding that supports angle-threshold activation.
11028
+ * Extends TAddPathOptions with junction inset control.
10531
11029
  */
10532
- type TConnectionPathOptions = Omit<TAddPathOptions, '__EXPERIMENTAL_BILLBOARDING'> & {
10533
- /**
10534
- * @experimental Controls billboarding for connection path geometry.
10535
- * - `boolean`: Enable/disable billboarding directly
10536
- * - `number`: Angle threshold in degrees (0-90). Billboard when path angle from horizontal >= threshold.
10537
- * For example, 80 means billboard only when path is >=80 degrees from horizontal (nearly vertical).
10538
- *
10539
- * @defaultValue false
10540
- */
10541
- __EXPERIMENTAL_BILLBOARDING?: boolean | number;
11030
+ type TConnectionPathOptions = TAddPathOptions & {
10542
11031
  /**
10543
11032
  * @experimental Amount in meters to shorten connection path from each end.
10544
11033
  * Prevents visual overlap with floor paths at junctions.
@@ -10588,6 +11077,15 @@ type TGetDirectionsOptions = {
10588
11077
  * @default false
10589
11078
  */
10590
11079
  accessible?: boolean;
11080
+ /**
11081
+ * When true, routing may traverse nodes that do not have the MVF `public`
11082
+ * flag set. Intended for emergency or staff-only pathing scenarios.
11083
+ *
11084
+ * Has no effect if the MVF does not declare a `public` navigation flag.
11085
+ *
11086
+ * @default false
11087
+ */
11088
+ includeNonPublic?: boolean;
10591
11089
  /**
10592
11090
  * Enable or disable path smoothing for directions.
10593
11091
  * When enabled, the path is simplified using line-of-sight checks to provide a more visually appealing route and shorter instructions.
@@ -10844,6 +11342,15 @@ type TAddImageOptions = {
10844
11342
  * @default 1024
10845
11343
  */
10846
11344
  maxImageSize?: number;
11345
+ /**
11346
+ * Whether the {@link Image3DView} should be clickable. When `true`, click and hover events
11347
+ * for the image will be dispatched via `MapView.on('click')` and `MapView.on('hover')` under
11348
+ * the `images` property of the event payload. Can be toggled at runtime via
11349
+ * `MapView.updateState(image, { interactive })`.
11350
+ *
11351
+ * @default false
11352
+ */
11353
+ interactive?: boolean;
10847
11354
  };
10848
11355
  /**
10849
11356
  * Options for controlling the behavior of a {@link Marker}.
@@ -11087,7 +11594,7 @@ interface UpdateGlobalState {
11087
11594
  /**
11088
11595
  * A map element that can be focused on by the camera.
11089
11596
  */
11090
- type TFocusTarget = Coordinate | Space | Area | MapObject | Floor | Shape;
11597
+ type TFocusTarget = Coordinate | Space | Area | MapObject | Floor | FloorStack | Shape;
11091
11598
  /**
11092
11599
  * Associates MapData type strings with their corresponding classes.
11093
11600
  */
@@ -12254,7 +12761,7 @@ declare class Space extends DetailedMapData<SpaceFeature> implements IGeoJSONDat
12254
12761
  get geoJSON(): {
12255
12762
  properties: null;
12256
12763
  type: _mappedin_mvf_v22.FeatureType;
12257
- geometry: _mappedin_mvf_v22.Point | _mappedin_mvf_v22.Polygon | _mappedin_mvf_v22.LineString;
12764
+ geometry: _mappedin_mvf_v22.Point | _mappedin_mvf_v22.LineString | _mappedin_mvf_v22.Polygon;
12258
12765
  };
12259
12766
  /** @internal */
12260
12767
  get focusTarget(): this | Coordinate;
@@ -12672,7 +13179,7 @@ declare class MapObject extends DetailedMapData<ObstructionFeature> implements I
12672
13179
  get geoJSON(): {
12673
13180
  properties: null;
12674
13181
  type: _mappedin_mvf_v22.FeatureType;
12675
- geometry: _mappedin_mvf_v22.Polygon | _mappedin_mvf_v22.LineString;
13182
+ geometry: _mappedin_mvf_v22.LineString | _mappedin_mvf_v22.Polygon;
12676
13183
  };
12677
13184
  /** @internal */
12678
13185
  get anchorTarget(): Coordinate;
@@ -13026,7 +13533,7 @@ declare class Node extends BaseMetaData implements IGeoJSONData, IFocusable, IAn
13026
13533
  *
13027
13534
  * FloorStacks are used to represent a group of floors that are part of a single entity.
13028
13535
  */
13029
- declare class FloorStack extends BaseMapData implements IGeoJSONData {
13536
+ declare class FloorStack extends BaseMapData implements IGeoJSONData, IFocusable {
13030
13537
  #private;
13031
13538
  /**
13032
13539
  * @internal
@@ -13084,6 +13591,10 @@ declare class FloorStack extends BaseMapData implements IGeoJSONData {
13084
13591
  * Gets the facade ({@link Facade}) representing this floor stack, if it exists.
13085
13592
  */
13086
13593
  get facade(): Facade | undefined;
13594
+ /**
13595
+ * Returns this FloorStack as the focus target for the camera.
13596
+ */
13597
+ get focusTarget(): FloorStack;
13087
13598
  /**
13088
13599
  * Gets the underlying GeoJSON Feature representation of this FloorStack.
13089
13600
  *
@@ -13424,7 +13935,7 @@ declare class EnterpriseLocation extends BaseMetaData implements Omit<Enterprise
13424
13935
  parentId?: string;
13425
13936
  });
13426
13937
  /** @internal */
13427
- get focusTarget(): Space[] | Coordinate[];
13938
+ get focusTarget(): Coordinate[] | Space[];
13428
13939
  /** @internal */
13429
13940
  get navigationTarget(): Space[];
13430
13941
  /**
@@ -15631,41 +16142,87 @@ declare class Mask {
15631
16142
  dirty: boolean;
15632
16143
  }
15633
16144
  //#endregion
15634
- //#region ../renderer-three/src/entities/geometry-group.d.ts
16145
+ //#region ../renderer-three/src/entities/feature-collection.d.ts
15635
16146
  /**
15636
- * State representing a Geometry Group, which is a container for Geometries and Models.
16147
+ * State representing a Feature Collection, which is a conceptual container for
16148
+ * GeoJSON features rendered via one or more THREE.js BatchedMeshes.
16149
+ *
16150
+ * Collection-level `visible` and `altitude` map directly to the wrapping
16151
+ * `FeatureCollectionObject3D` (`.visible` and `.position.z`) and do not
16152
+ * cascade into per-feature styles.
15637
16153
  */
15638
- type GeometryGroupState = {
16154
+ type FeatureCollectionState = {
15639
16155
  readonly id: string | number;
15640
- readonly type: 'geometry-group';
16156
+ readonly type: 'feature-collection';
15641
16157
  /**
15642
- * The ids of the children of the geometry group
16158
+ * The ids of the children of the feature collection
15643
16159
  */
15644
16160
  readonly children: (string | number)[];
15645
16161
  /**
15646
- * Whether the geometry group is visible
16162
+ * @deprecated The feature collection no longer dictates opacity. Opacity is
16163
+ * per-feature or controlled via the wrapping `GroupContainer`. Read-through
16164
+ * to the first child is preserved for now.
15647
16165
  */
15648
- visible: boolean;
16166
+ opacity?: number;
15649
16167
  /**
15650
- * Whether the geometry group is interactive, which means it can be hovered over and clicked on.
15651
- * This will affect all children of the geometry group and override their interactive state.
15652
- *
15653
- * @example
15654
- * ```javascript
15655
- * renderer.on('click', ({ geometry }) => {});
15656
- * ```
16168
+ * @deprecated The feature collection no longer dictates color. Set color
16169
+ * per-feature via the style callback. Read-through to the first child is
16170
+ * preserved for now.
15657
16171
  */
15658
- interactive: boolean;
15659
- altitude?: number;
15660
- opacity?: number;
15661
16172
  color?: string;
16173
+ /**
16174
+ * @deprecated Per-feature property; read-through to the first child is
16175
+ * preserved for now.
16176
+ */
15662
16177
  height?: number;
16178
+ /**
16179
+ * @deprecated Per-feature property; read-through to the first child is
16180
+ * preserved for now.
16181
+ */
15663
16182
  texture?: string;
16183
+ /**
16184
+ * @deprecated Per-feature property; read-through to the first child is
16185
+ * preserved for now.
16186
+ */
15664
16187
  topColor?: string;
16188
+ /**
16189
+ * @deprecated Per-feature property; read-through to the first child is
16190
+ * preserved for now.
16191
+ */
15665
16192
  topTexture?: string;
16193
+ /**
16194
+ * @deprecated Per-feature property; read-through to the first child is
16195
+ * preserved for now.
16196
+ */
15666
16197
  outline?: boolean;
16198
+ /**
16199
+ * @deprecated Per-feature property; read-through to the first child is
16200
+ * preserved for now.
16201
+ */
15667
16202
  shading?: Shading$1;
16203
+ /**
16204
+ * @deprecated Per-feature property; read-through to the first child is
16205
+ * preserved for now.
16206
+ */
15668
16207
  side?: MaterialSide;
16208
+ /**
16209
+ * @deprecated Per-feature property; read-through to the first child is
16210
+ * preserved for now.
16211
+ */
16212
+ interactive?: boolean;
16213
+ /**
16214
+ * Collection-level visibility. Maps directly to `Object3D.visible` on the
16215
+ * wrapping `FeatureCollectionObject3D`; toggling cascades to children via
16216
+ * three.js's normal scene-graph traversal. Per-feature `StyleComponent.visible`
16217
+ * is a separate axis controlled via `setState` on individual feature entities.
16218
+ */
16219
+ visible?: boolean;
16220
+ /**
16221
+ * Collection-level altitude. Maps directly to `position.z` on the wrapping
16222
+ * `FeatureCollectionObject3D`. Per-feature altitude is a separate axis set
16223
+ * via the style callback or on each child.
16224
+ */
16225
+ altitude?: number;
15669
16226
  /**
15670
16227
  * Bevel configuration for extruded shapes.
15671
16228
  */
@@ -15683,14 +16240,14 @@ type GeometryGroupState = {
15683
16240
  washOutAmount?: number;
15684
16241
  washOutUseDepth?: boolean;
15685
16242
  /**
15686
- * The position of the geometry group as a GeoJSON Position `[lon, lat]`.
15687
- * Always computable via centroid calculation. Vertical offset is managed by `altitude`.
16243
+ * The position of the feature collection as a GeoJSON Position `[lon, lat]`,
16244
+ * computed from the centroid of its child features. Vertical offset is a
16245
+ * per-feature concern and is not tracked at the collection level.
15688
16246
  */
15689
16247
  position: Position$2;
15690
16248
  };
15691
- declare class GeometryGroupObject3D extends Object3D {
15692
- visible: boolean;
15693
- readonly type: "geometry-group";
16249
+ declare class FeatureCollectionObject3D extends Object3D {
16250
+ readonly type: "feature-collection";
15694
16251
  components: [Mask?];
15695
16252
  getComponent(type: 'mask'): Mask | undefined;
15696
16253
  userData: {
@@ -15703,13 +16260,15 @@ declare class GeometryGroupObject3D extends Object3D {
15703
16260
  positionDirty: boolean;
15704
16261
  /** Cached world-space bounding-box center, updated after each position move */
15705
16262
  localCenter?: Vector3;
16263
+ isMerged?: boolean;
15706
16264
  };
15707
- setVisible(visible: boolean): void;
15708
16265
  removeEntity(): void;
15709
16266
  constructor(id: string);
15710
16267
  /**
15711
- * Get first child entity of a group if it's a batched mesh
15712
- * We use this logic a lot for getting the material of the group. since group does not have material and batched mesh does
16268
+ * Get first child entity of a collection if it's a batched mesh.
16269
+ * We use this logic for reading representative per-child state (e.g. color,
16270
+ * texture) in getState() because the collection does not directly own a
16271
+ * material; the batched mesh does.
15713
16272
  */
15714
16273
  getfirstChildEntityId(): string | number | undefined;
15715
16274
  }
@@ -15721,7 +16280,7 @@ declare class InteractionComponent {
15721
16280
  dirty: boolean;
15722
16281
  }
15723
16282
  //#endregion
15724
- //#region ../renderer-three/src/systems/mesh-creation-and-optimization/batched-material.d.ts
16283
+ //#region ../renderer-three/src/systems/batched-mesh/batched-material.d.ts
15725
16284
  declare class BatchedStandardMaterial extends MeshLambertMaterial {
15726
16285
  private propertiesTexture;
15727
16286
  texturesVisible: boolean;
@@ -15748,9 +16307,9 @@ declare class BatchedStandardMaterial extends MeshLambertMaterial {
15748
16307
  set blendTexture(value: boolean);
15749
16308
  setGradientShading(start: number, end: number, intensity: number): void;
15750
16309
  getGradientShading(): {
15751
- start: any;
15752
- end: any;
15753
- intensity: any;
16310
+ start: number;
16311
+ end: number;
16312
+ intensity: number;
15754
16313
  };
15755
16314
  /**
15756
16315
  * Sets the distance-based effect parameters.
@@ -15800,6 +16359,62 @@ declare class BatchedStandardMaterial extends MeshLambertMaterial {
15800
16359
  clone(params?: MeshLambertMaterialParameters): this;
15801
16360
  }
15802
16361
  //#endregion
16362
+ //#region ../renderer-three/src/systems/batched-mesh/simple-material.d.ts
16363
+ /**
16364
+ * Single-geometry variant of BatchedStandardMaterial.
16365
+ * Uses `uColor`/`uTopColor` uniforms instead of a per-instance data texture,
16366
+ * so no DataTexture is allocated. All gradient, shadow, and visual-effect
16367
+ * uniforms are identical to BatchedStandardMaterial.
16368
+ */
16369
+ declare class SimpleGeometryMaterial extends MeshLambertMaterial {
16370
+ texturesVisible: boolean;
16371
+ private pcfSampleCount;
16372
+ private uniforms;
16373
+ private colorSpace;
16374
+ constructor(params?: MeshLambertMaterialParameters);
16375
+ /**
16376
+ * Sets `color` and `topColor` as uniforms directly (no batchId / data texture).
16377
+ */
16378
+ setColor(color: Color, topColor: Color): void;
16379
+ getColor(): {
16380
+ color: Color;
16381
+ topColor: Color;
16382
+ };
16383
+ get texture(): Texture | null;
16384
+ set texture(texture: Texture | null);
16385
+ get topTexture(): Texture | null;
16386
+ set topTexture(texture: Texture | null);
16387
+ get blendTexture(): boolean;
16388
+ set blendTexture(value: boolean);
16389
+ setGradientShading(start: number, end: number, intensity: number): void;
16390
+ getGradientShading(): {
16391
+ start: number;
16392
+ end: number;
16393
+ intensity: number;
16394
+ };
16395
+ setEffectRange(start: number, distance: number): void;
16396
+ getEffectRange(): {
16397
+ start: number;
16398
+ distance: number;
16399
+ };
16400
+ setVisualEffect(darkenAmount: number, darkenUseDepth: boolean, desaturateAmount: number, desaturateUseDepth: boolean, washOutAmount: number, washOutUseDepth: boolean): void;
16401
+ getVisualEffect(): {
16402
+ darkenAmount: number;
16403
+ darkenUseDepth: number;
16404
+ desaturateAmount: number;
16405
+ desaturateUseDepth: number;
16406
+ washOutAmount: number;
16407
+ washOutUseDepth: number;
16408
+ };
16409
+ get repeatYFactor(): number;
16410
+ set repeatYFactor(value: number);
16411
+ showTextures: (_batchId: number) => void;
16412
+ hideTextures(_batchId: number): void;
16413
+ removeSideTexture(_batchId: number): void;
16414
+ removeTopTexture(_batchId: number): void;
16415
+ setShadowUniforms(shadowMap: Texture, lightMatrix: Matrix4, cameraNear: number, cameraFar: number, shadowBias: number, shadowOpacity: number, baseColor: Color, shadowMapSize: number, pcfSpread: number, pcfSamples: number, sunDir: Vector3, normalBias: number, depthRangeMax: number, shadowEnabled: boolean): void;
16416
+ }
16417
+ //#endregion
15803
16418
  //#region ../renderer-three/src/components/image.d.ts
15804
16419
  declare class EntityMesh$1 extends Mesh {
15805
16420
  userData: {
@@ -15821,6 +16436,11 @@ type ImageStyle = {
15821
16436
  * @default 1024
15822
16437
  */
15823
16438
  maxImageSize?: number;
16439
+ /**
16440
+ * Whether the image is interactive (receives click/hover events).
16441
+ * @default false
16442
+ */
16443
+ interactive?: boolean;
15824
16444
  };
15825
16445
  type ImageProperties = {
15826
16446
  width: number;
@@ -15857,6 +16477,10 @@ type ImageState = {
15857
16477
  * The opacity of the image
15858
16478
  */
15859
16479
  opacity: number;
16480
+ /**
16481
+ * Whether the image is interactive (receives click/hover events).
16482
+ */
16483
+ interactive: boolean;
15860
16484
  };
15861
16485
  declare class ImageComponent {
15862
16486
  mesh: Geometry3DObject3D;
@@ -15883,6 +16507,9 @@ declare class EntityBatchedMesh extends BatchedMesh {
15883
16507
  detached?: boolean;
15884
16508
  };
15885
16509
  }
16510
+ declare class EntityMergedMesh extends Mesh {
16511
+ type: "entityMergedMesh";
16512
+ }
15886
16513
  type MeshComponentProperties = {
15887
16514
  id: string;
15888
16515
  image?: ImageProperties & {
@@ -15908,7 +16535,7 @@ type GeometryState = {
15908
16535
  /**
15909
16536
  * The parent group of the geometry
15910
16537
  */
15911
- readonly parent: EntityId$1<GeometryGroupState>;
16538
+ readonly parent: EntityId$1<FeatureCollectionState>;
15912
16539
  /**
15913
16540
  * Whether the geometry is visible. This is independent of the visibility of the children, but will affect the visibility of the children if set to false.
15914
16541
  */
@@ -16020,7 +16647,7 @@ type GeometryState = {
16020
16647
  };
16021
16648
  declare class MeshComponent {
16022
16649
  #private;
16023
- mesh?: EntityBatchedMesh;
16650
+ mesh?: EntityBatchedMesh | EntityMergedMesh;
16024
16651
  imageMesh?: Mesh;
16025
16652
  /**
16026
16653
  * holds a pointer to space label text if the polygon has label active.
@@ -16038,10 +16665,10 @@ declare class MeshComponent {
16038
16665
  positionCount: number;
16039
16666
  geometryId: number;
16040
16667
  };
16041
- material?: BatchedStandardMaterial;
16042
- feature: Feature<Polygon | LineString | MultiPolygon | MultiLineString, MeshComponentProperties>;
16668
+ material?: BatchedStandardMaterial | SimpleGeometryMaterial;
16669
+ feature: Feature<Polygon | LineString | MultiPolygon | MultiLineString, MeshComponentProperties> | Feature<Polygon | LineString | MultiPolygon | MultiLineString, MeshComponentProperties>[];
16043
16670
  currentHeight: number;
16044
- constructor(feature: Feature<Polygon | LineString | MultiPolygon | MultiLineString, MeshComponentProperties>);
16671
+ constructor(feature: Feature<Polygon | LineString | MultiPolygon | MultiLineString, MeshComponentProperties> | Feature<Polygon | LineString | MultiPolygon | MultiLineString, MeshComponentProperties>[]);
16045
16672
  get visible(): boolean;
16046
16673
  set visible(visible: boolean);
16047
16674
  get renderOrder(): number;
@@ -16070,7 +16697,7 @@ type ModelState = {
16070
16697
  /**
16071
16698
  * The parent container of the marker
16072
16699
  */
16073
- readonly parent?: EntityId$1<GeometryGroupState> | string | number;
16700
+ readonly parent?: EntityId$1<FeatureCollectionState> | string | number;
16074
16701
  /**
16075
16702
  * The position of the model in [lon, lat]
16076
16703
  */
@@ -16147,6 +16774,19 @@ type BorderConfig = {
16147
16774
  /** Border width as fraction of total ribbon width (0-0.5). @default 0.1 */
16148
16775
  width?: number;
16149
16776
  };
16777
+ /**
16778
+ * @experimental
16779
+ * Configuration for the x-ray appearance of paths behind geometry.
16780
+ */
16781
+ type XrayStyleConfig = {
16782
+ /** Explicit color override for the x-ray base color. When omitted, uses the path color. Tint is always applied on top. */
16783
+ color?: string;
16784
+ /** Tint strength (0-1) controlling how much the color is desaturated.
16785
+ * 0 = no muting (same as base color), 1 = fully gray. @default 0.2 */
16786
+ tint?: number;
16787
+ /** Dithering cell size in screen pixels. 0 or undefined = off. */
16788
+ dithering?: number;
16789
+ };
16150
16790
  type PathProperties = {
16151
16791
  /**
16152
16792
  * The parentId of the point. The point will be anchored to the altitude of this parent group container.
@@ -16207,9 +16847,10 @@ type PathState$1 = {
16207
16847
  */
16208
16848
  animateArrowsOnPath: boolean;
16209
16849
  /**
16210
- * The width of the path in meters. Can be a number or an {@link Interpolation}.
16850
+ * The width of the path. Can be a number (meters), a pixel string like '20px',
16851
+ * or an {@link Interpolation} (meters or pixels).
16211
16852
  */
16212
- width: number | Interpolation$2<'zoom-level', number[]>;
16853
+ width: PathWidth$3;
16213
16854
  /**
16214
16855
  * The fraction of the path that should be highlighted. This can be used to animate the highlight.
16215
16856
  * @default 0
@@ -16224,6 +16865,22 @@ type PathState$1 = {
16224
16865
  * @default 0.25
16225
16866
  */
16226
16867
  xrayOpacity: number;
16868
+ /**
16869
+ * @experimental
16870
+ * Configuration for x-ray appearance when path is behind geometry.
16871
+ */
16872
+ xrayStyle?: XrayStyleConfig;
16873
+ /**
16874
+ * The fraction of the path that has been travelled. This is used to indicate how far the user has walked along the path.
16875
+ * Note: use values between 0 and 1.
16876
+ * @default 0
16877
+ */
16878
+ travelledEndFraction: number;
16879
+ /**
16880
+ * The color of the travelled portion of the path.
16881
+ * @default '#999'
16882
+ */
16883
+ travelledColor: string;
16227
16884
  /**
16228
16885
  * Controls the smoothness of path corners using CatmullRom curve tension. Higher values create smoother curves.
16229
16886
  * Values between 0.1-0.3 provide subtle smoothing suitable for most use cases.
@@ -16292,7 +16949,7 @@ type PathState$1 = {
16292
16949
  * Most useful for vertical paths between floors.
16293
16950
  * @default false
16294
16951
  */
16295
- __EXPERIMENTAL_BILLBOARDING: boolean;
16952
+ __EXPERIMENTAL_BILLBOARDING: boolean | number;
16296
16953
  /**
16297
16954
  * @experimental
16298
16955
  * Border configuration for ribbon path geometry.
@@ -16319,10 +16976,14 @@ type AddPathOptions = {
16319
16976
  id?: string | number;
16320
16977
  /**
16321
16978
  * The width of the path.
16979
+ * - `number` — meters (e.g. `1.5`)
16980
+ * - `'Npx'` — screen-space pixels (e.g. `'20px'`)
16981
+ * - `Interpolation` — zoom-interpolated meters
16982
+ * - `Interpolation<'zoom-level', PixelWidth[]>` — zoom-interpolated pixels (e.g. `output: ['10px', '20px']`)
16322
16983
  *
16323
16984
  * @default Interpolation { on: 'zoom-level', input: [17, 22], output: [0.8, 0.4] }
16324
16985
  */
16325
- width?: number | Interpolation$2<'zoom-level', number[]>;
16986
+ width?: PathWidth$3;
16326
16987
  /**
16327
16988
  * The color of the path.
16328
16989
  */
@@ -16365,6 +17026,22 @@ type AddPathOptions = {
16365
17026
  * @default 0.25
16366
17027
  */
16367
17028
  xrayOpacity?: number;
17029
+ /**
17030
+ * @experimental
17031
+ * Configuration for x-ray appearance when path is behind geometry.
17032
+ */
17033
+ xrayStyle?: XrayStyleConfig;
17034
+ /**
17035
+ * The fraction of the path that has been travelled. This is used to indicate how far the user has walked along the path.
17036
+ * Note: use values between 0 and 1.
17037
+ * @default 0
17038
+ */
17039
+ travelledEndFraction?: number;
17040
+ /**
17041
+ * The color of the travelled portion of the path.
17042
+ * @default '#999'
17043
+ */
17044
+ travelledColor?: string;
16368
17045
  /**
16369
17046
  * Controls the smoothness of path corners using CatmullRom curve tension. Higher values create smoother curves.
16370
17047
  * Values between 0.1-0.3 provide subtle smoothing suitable for most use cases.
@@ -16439,7 +17116,7 @@ type AddPathOptions = {
16439
17116
  * Most useful for vertical paths between floors.
16440
17117
  * @default false
16441
17118
  */
16442
- __EXPERIMENTAL_BILLBOARDING?: boolean;
17119
+ __EXPERIMENTAL_BILLBOARDING?: boolean | number;
16443
17120
  /**
16444
17121
  * @experimental
16445
17122
  * Border configuration for ribbon path geometry.
@@ -16463,8 +17140,12 @@ declare class PathComponent {
16463
17140
  outline?: LineSegments;
16464
17141
  feature: FeatureCollection<Point, PathProperties>;
16465
17142
  options: AddPathOptions;
16466
- width: number | Interpolation$2<'zoom-level', number[]>;
17143
+ width: PathWidth$3;
16467
17144
  breakpoint: number;
17145
+ /** Whether width is in screen-space pixels (derived from width value). */
17146
+ screenSpace: boolean;
17147
+ /** Pre-parsed numeric output values for interpolated widths. Avoids parseFloat on every frame. */
17148
+ parsedOutputValues: number[];
16468
17149
  altitudeBreakpoints?: number[];
16469
17150
  accentColor: string;
16470
17151
  completeFraction: number;
@@ -16478,6 +17159,9 @@ declare class PathComponent {
16478
17159
  highlightWidthMultiplier: number;
16479
17160
  highlightColor: string;
16480
17161
  xrayOpacity: number;
17162
+ xrayStyle?: XrayStyleConfig;
17163
+ travelledEndFraction: number;
17164
+ travelledColor: string;
16481
17165
  dashed: boolean;
16482
17166
  smoothingTension: number;
16483
17167
  smoothingCornerRadius: number;
@@ -16491,7 +17175,7 @@ declare class PathComponent {
16491
17175
  gapMeters: number;
16492
17176
  __EXPERIMENTAL_GEOMETRY: 'tube' | 'ribbon';
16493
17177
  __EXPERIMENTAL_ENDCAP_EXTENSION: [number, number];
16494
- __EXPERIMENTAL_BILLBOARDING: boolean;
17178
+ __EXPERIMENTAL_BILLBOARDING: boolean | number;
16495
17179
  __EXPERIMENTAL_BORDER?: BorderConfig;
16496
17180
  __EXPERIMENTAL_PREVENT_SELF_OVERLAP: boolean;
16497
17181
  /**
@@ -16501,6 +17185,7 @@ declare class PathComponent {
16501
17185
  dirty: boolean;
16502
17186
  materialDirty: boolean;
16503
17187
  constructor(feature: FeatureCollection<Point, PathProperties>, options?: AddPathOptions);
17188
+ updateScreenSpaceState(): void;
16504
17189
  setColor(): void;
16505
17190
  setOpacity(): void;
16506
17191
  set visible(visible: boolean);
@@ -16845,7 +17530,7 @@ declare class Geometry3D<M$1 extends MeshComponentTypes = MeshComponent, S exten
16845
17530
  */
16846
17531
  parentId?: string | number;
16847
17532
  get object3d(): M$1["mesh"];
16848
- get parentObject3D(): GroupContainerObject3D | GeometryGroupObject3D | null;
17533
+ get parentObject3D(): GroupContainerObject3D | FeatureCollectionObject3D | null;
16849
17534
  type: T$1;
16850
17535
  entities2D: Map<string | number, Geometry2D>;
16851
17536
  constructor(meshComponent: M$1, styleComponent: S);
@@ -16942,6 +17627,10 @@ interface PathUniforms {
16942
17627
  type: 'b';
16943
17628
  value: boolean;
16944
17629
  };
17630
+ xrayDithering: {
17631
+ type: 'f';
17632
+ value: number;
17633
+ };
16945
17634
  highlightStartFraction: {
16946
17635
  type: 'f';
16947
17636
  value: number;
@@ -16962,6 +17651,14 @@ interface PathUniforms {
16962
17651
  type: 'f';
16963
17652
  value: number;
16964
17653
  };
17654
+ travelledEndFraction: {
17655
+ type: 'f';
17656
+ value: number;
17657
+ };
17658
+ travelledColor: {
17659
+ type: 'c';
17660
+ value: Color;
17661
+ };
16965
17662
  dashLength: {
16966
17663
  type: 'f';
16967
17664
  value: number;
@@ -16998,9 +17695,9 @@ interface PathUniforms {
16998
17695
  type: 'b';
16999
17696
  value: boolean;
17000
17697
  };
17001
- billboarded: {
17002
- type: 'b';
17003
- value: boolean;
17698
+ billboardThreshold: {
17699
+ type: 'f';
17700
+ value: number;
17004
17701
  };
17005
17702
  borderEnabled: {
17006
17703
  type: 'b';
@@ -17026,6 +17723,14 @@ interface PathUniforms {
17026
17723
  type: 'm4';
17027
17724
  value: Matrix4;
17028
17725
  };
17726
+ screenSpace: {
17727
+ type: 'b';
17728
+ value: boolean;
17729
+ };
17730
+ metersPerPixel: {
17731
+ type: 'f';
17732
+ value: number;
17733
+ };
17029
17734
  }
17030
17735
  //#endregion
17031
17736
  //#region ../renderer-three/src/services/renderer.d.ts
@@ -17096,6 +17801,16 @@ declare class Renderer {
17096
17801
  setBackgroundColor(color: any, alpha: any): void;
17097
17802
  domElement(): HTMLCanvasElement | undefined;
17098
17803
  handleWebGLContextCreationError: (event: Event) => void;
17804
+ /**
17805
+ * The browser only fires the subsequent `webglcontextrestored` event if
17806
+ * the page calls `preventDefault()` on the `webglcontextlost` event.
17807
+ * Without this, after the GPU drops the context (e.g. iOS backgrounding,
17808
+ * thermal pressure, or another canvas exhausting the per-process WebGL
17809
+ * context budget), the canvas stays in a permanently lost state and any
17810
+ * subsequent draws produce garbage geometry.
17811
+ *
17812
+ * See: https://registry.khronos.org/webgl/specs/latest/1.0/#5.15.2
17813
+ */
17099
17814
  handleWebGLContextLost: (event: Event) => void;
17100
17815
  handleWebGLContextRestored: (event: Event) => void;
17101
17816
  }
@@ -17242,18 +17957,19 @@ declare class ExporterSystem {
17242
17957
  destroy(): void;
17243
17958
  }
17244
17959
  //#endregion
17245
- //#region ../renderer-three/src/systems/mesh-creation-and-optimization/system.d.ts
17246
- declare class MeshCreationAndOptimizationSystem extends PubSub<{
17960
+ //#region ../renderer-three/src/systems/batched-mesh/system.d.ts
17961
+ declare class BatchedMeshSystem extends PubSub<{
17247
17962
  'geometry-2d-added': void;
17248
17963
  'geometry-group-added': void;
17249
17964
  }> {
17965
+ #private;
17250
17966
  state: RendererState;
17251
17967
  convertTo3DMapPosition: any;
17252
17968
  constructor(state: RendererState, convertTo3DMapPosition: any);
17253
- createEntityFromFeature(id: string | number, feature: Feature<Polygon | LineString | MultiPolygon, MeshComponentProperties>, style?: (LineStyle$2 | PaintStyle$2) & {
17969
+ createEntityFromFeature(id: string | number, featureOrFeatures: Feature<Polygon | LineString | MultiPolygon, MeshComponentProperties> | Feature<Polygon | LineString | MultiPolygon, MeshComponentProperties>[], style?: (LineStyle$2 | PaintStyle$2) & {
17254
17970
  focusable?: boolean;
17255
17971
  }): Geometry3D<MeshComponent, StyleComponent, InteractionComponent, "geometry", OutlineComponent | undefined, FocusableComponent | undefined, TextureComponent | undefined, BorderComponent | undefined, ClippingPlaneComponent | undefined>;
17256
- populateEntityMesh(entity: Geometry3D, geometry: BufferGeometry): void;
17972
+ populateEntityMesh(entity: Geometry3D, geometry: BufferGeometry, isMerged?: boolean): void;
17257
17973
  populateEntityGroup(entities: Set<string | number>): Set<string | number>;
17258
17974
  update(): Promise<void>;
17259
17975
  }
@@ -17594,6 +18310,7 @@ declare class CameraSystem extends PubSub<CameraEvents> {
17594
18310
  private cameraMoving;
17595
18311
  private lastCameraMoveTime;
17596
18312
  constructor(camera: PerspectiveCamera, scene: Scene, renderer: WebGLRenderer, rendererState: RendererState, options: CameraControlsOptions);
18313
+ private addMovingStateListeners;
17597
18314
  /**
17598
18315
  * The amount the camera is shifted up/down
17599
18316
  * (corresponds to scroll amount in multifloor mode)
@@ -17671,6 +18388,25 @@ declare class CameraSystem extends PubSub<CameraEvents> {
17671
18388
  * @returns {Number} The time in ms the camera stopped moving.
17672
18389
  */
17673
18390
  lastCameraStoppedMovingTime: () => number;
18391
+ /**
18392
+ * Marks the camera as under active external manipulation (e.g. a Mapbox/MapLibre
18393
+ * overlay gesture) and publishes `pan-start`. While in this state, the per-tick
18394
+ * `*-start`/`*-end` publishes inside setters are gated off, so a burst of
18395
+ * setCenter/setZoom/setRotation/setTilt calls does not flicker
18396
+ * `cameraMoving` between true and false.
18397
+ *
18398
+ * @hidden
18399
+ */
18400
+ beginGesture: () => void;
18401
+ /**
18402
+ * Ends a gesture started by {@link beginGesture} and publishes `pan-end`.
18403
+ * No-op if state is not PAN — guards against stomping a concurrent
18404
+ * user-initiated drag, and against `moveend` firing without a matching
18405
+ * `movestart`.
18406
+ *
18407
+ * @hidden
18408
+ */
18409
+ endGesture: () => void;
17674
18410
  /**
17675
18411
  * Sets the camera anchor to a specifc x/y positon, in the global reference frame. 0,0 will be roughly the middle of the map, and panBounds holds the min/max points.
17676
18412
  *
@@ -17904,6 +18640,17 @@ declare class CameraSystem extends PubSub<CameraEvents> {
17904
18640
  getCurrentMetersPerPixel(): number;
17905
18641
  }
17906
18642
  //#endregion
18643
+ //#region ../renderer-three/src/camera-debug.d.ts
18644
+ type FocusOnDebugConfig = {
18645
+ pointCloud?: {
18646
+ size?: number;
18647
+ color?: string;
18648
+ } | false;
18649
+ boundingBox?: {
18650
+ color?: string;
18651
+ } | false;
18652
+ } | false;
18653
+ //#endregion
17907
18654
  //#region ../renderer-three/src/camera.d.ts
17908
18655
  type AnimationOptions = {
17909
18656
  duration?: number;
@@ -17920,6 +18667,10 @@ type FocusOnOptions = AnimationOptions & {
17920
18667
  maxZoomLevel?: number;
17921
18668
  interruptible?: boolean;
17922
18669
  verticalPadding?: number;
18670
+ /** Debug key — the target object used as a Map key so multiple debug visualizations coexist. */
18671
+ debugKey?: object;
18672
+ /** Debug color override (CSS color string) for this point cloud. */
18673
+ debugColor?: string;
17923
18674
  };
17924
18675
  type AnimateToOptions = AnimationOptions & {
17925
18676
  center?: Position$2;
@@ -18097,6 +18848,16 @@ declare class Camera$2 extends PubSub<{
18097
18848
  * @internal
18098
18849
  */
18099
18850
  hideCameraTargetsDebug(): void;
18851
+ /**
18852
+ * Enable 3D debug visualization of the focusOn point cloud and bounding boxes.
18853
+ * @internal
18854
+ */
18855
+ showFocusOnDebug(cfg: FocusOnDebugConfig): void;
18856
+ /**
18857
+ * Disable 3D debug visualization of the focusOn point cloud and bounding boxes.
18858
+ * @internal
18859
+ */
18860
+ hideFocusOnDebug(): void;
18100
18861
  /**
18101
18862
  * Enable debug visualization of screen offsets.
18102
18863
  * Shows colored overlays for each padding area.
@@ -18364,7 +19125,7 @@ declare class OutlineInterpolationSystem extends PubSub<{
18364
19125
  * @param options - Optional configuration for outline rendering
18365
19126
  */
18366
19127
  constructor(rendererState: RendererState, options?: OutlinesOptions$1);
18367
- buildOutlines(geometryGroupEntity: GeometryGroupObject3D): void;
19128
+ buildOutlines(geometryGroupEntity: FeatureCollectionObject3D): void;
18368
19129
  /**
18369
19130
  * Update the outline color of all entities with an outline component.
18370
19131
  * @param zoomLevel - The current zoom level.
@@ -18526,7 +19287,7 @@ declare class PathSystem extends PubSub<{
18526
19287
  getParentContainer: Core['getParentContainer'];
18527
19288
  convertZoomLevelToAltitude: CameraSystem['convertZoomLevelToAltitude'];
18528
19289
  constructor(rendererState: RendererState, convertTo3DMapPosition: Core['convertTo3DMapPosition'], getParentContainer: Core['getParentContainer'], convertZoomLevelToAltitude: CameraSystem['convertZoomLevelToAltitude']);
18529
- update(minZoomAltitude: number, maxZoomAltitude: number, currentZoomAltitude: number): void;
19290
+ update(minZoomAltitude: number, maxZoomAltitude: number, currentZoomAltitude: number, metersPerPixel: number): void;
18530
19291
  }
18531
19292
  //#endregion
18532
19293
  //#region ../renderer-three/src/systems/mesh-detachment/system.d.ts
@@ -18633,12 +19394,17 @@ declare const DEFAULT_DEBUG_STATE: {
18633
19394
  * - Cyan box: getFocusOnTransform bounding area
18634
19395
  */
18635
19396
  showCameraTargets: boolean;
19397
+ /**
19398
+ * Shows focusOn 3D debug visualization (point cloud spheres and/or wireframe bounding boxes).
19399
+ * Pass `{ pointCloud?: { size?, color? } | false, boundingBox?: { color? } | false }` to configure.
19400
+ */
19401
+ focusOn: FocusOnDebugConfig;
18636
19402
  };
18637
19403
  /**
18638
19404
  * Type definition for the debug state configuration.
18639
19405
  * Represents all available debug options that can be toggled.
18640
19406
  */
18641
- type DebugState = typeof DEFAULT_DEBUG_STATE;
19407
+ type DebugState$2 = typeof DEFAULT_DEBUG_STATE;
18642
19408
  /**
18643
19409
  * Debug utility class for toggling various debug visualization features.
18644
19410
  *
@@ -18697,6 +19463,11 @@ declare class Debug$1 {
18697
19463
  * - Cyan box: getFocusOnTransform bounding area
18698
19464
  */
18699
19465
  showCameraTargets: boolean;
19466
+ /**
19467
+ * Shows focusOn 3D debug visualization (point cloud spheres and/or wireframe bounding boxes).
19468
+ * Pass `{ pointCloud?: { size?, color? } | false, boundingBox?: { color? } | false }` to configure.
19469
+ */
19470
+ focusOn: FocusOnDebugConfig;
18700
19471
  };
18701
19472
  /** Reference to the core renderer instance */
18702
19473
  core: Core;
@@ -18724,7 +19495,7 @@ declare class Debug$1 {
18724
19495
  * });
18725
19496
  * ```
18726
19497
  */
18727
- update(updateState: Partial<DebugState>): void;
19498
+ update(updateState: Partial<DebugState$2>): void;
18728
19499
  /**
18729
19500
  * Handles the actual system updates based on changed debug state values.
18730
19501
  * This method applies the debug state changes to the appropriate renderer systems.
@@ -18736,6 +19507,16 @@ declare class Debug$1 {
18736
19507
  }
18737
19508
  //#endregion
18738
19509
  //#region ../renderer-three/src/systems/2d-occlusion/system.d.ts
19510
+ /**
19511
+ * Set to `true` by the visual regression harness (see `e2e/visual/fixtures.ts`)
19512
+ * before page load. When set we bypass the throttle so screenshots are
19513
+ * deterministic. Anything else leaves the throttle in effect.
19514
+ */
19515
+ declare global {
19516
+ interface Window {
19517
+ __MAPPEDIN_E2E__?: boolean;
19518
+ }
19519
+ }
18739
19520
  declare class Occlusion2DSystem {
18740
19521
  private state;
18741
19522
  private renderer;
@@ -18763,7 +19544,17 @@ declare class Occlusion2DSystem {
18763
19544
  resize: () => void;
18764
19545
  private shouldShowByXY;
18765
19546
  activeOccluders: Set<unknown>;
19547
+ private framesSinceLastUpdate;
19548
+ /**
19549
+ * Throttled per-frame entry point called by the render loop. Delegates to
19550
+ * {@link updateImmediately} once every {@link OCCLUSION_SKIP_FRAMES} calls.
19551
+ * Callers that need a guaranteed synchronous pass should use
19552
+ * {@link updateImmediately} directly. When running under the visual
19553
+ * regression harness (`?e2e=true`) the throttle is bypassed so every
19554
+ * render produces a deterministic occlusion state.
19555
+ */
18766
19556
  update: () => void;
19557
+ updateImmediately: () => void;
18767
19558
  destroy(): void;
18768
19559
  }
18769
19560
  //#endregion
@@ -18799,7 +19590,9 @@ declare class BorderSystem {
18799
19590
  convertTo3DMapPosition: Core['convertTo3DMapPosition'];
18800
19591
  constructor(rendererState: RendererState, convertTo3DMapPosition: Core['convertTo3DMapPosition']);
18801
19592
  update(): void;
19593
+ private buildBordersForFeatures;
18802
19594
  private colorToMaterialCache;
19595
+ private getOrCreateMaterials;
18803
19596
  private buildBorder;
18804
19597
  destroy(): void;
18805
19598
  }
@@ -18888,17 +19681,118 @@ declare class ClippingPlaneSystem {
18888
19681
  }
18889
19682
  //#endregion
18890
19683
  //#region ../renderer-three/src/systems/system-plugins/system.d.ts
19684
+ /**
19685
+ * **Super experimental — this API may change or be removed in any release without notice.
19686
+ * Do not depend on it in production.**
19687
+ *
19688
+ * Interface for plugins that hook into the Mappedin render loop.
19689
+ *
19690
+ * Plugins receive the full renderer state every frame, providing direct access
19691
+ * to the Three.js scene, camera, renderer, lighting, and all ECS geometry entities.
19692
+ * Use this to inject custom Three.js objects, apply per-frame effects, or read scene state.
19693
+ *
19694
+ * ## Lifecycle
19695
+ *
19696
+ * - `update()` is called **every frame** during the finalization phase of the render loop
19697
+ * (after camera, path, and 2D systems have run, but before `DrawSystem` applies
19698
+ * style changes and before `paint()` draws the frame).
19699
+ * - Plugins are called in registration order.
19700
+ *
19701
+ * ## Standalone vs. Overlay Mode
19702
+ *
19703
+ * | Concern | Standalone | MapLibre Overlay |
19704
+ * |---|---|---|
19705
+ * | Add meshes to | `state.threeJSScene` | `state.geometryScene` |
19706
+ * | Camera position | Reflects actual viewer position | **Not reliable** — MapLibre overwrites the projection matrix each frame |
19707
+ * | Coordinate space | Scene units (meters from map center) | Scene units (meters from map center) |
19708
+ *
19709
+ * ## Performance
19710
+ *
19711
+ * `update()` runs on the main thread every frame. Avoid heavy computation, allocations,
19712
+ * or GPU-blocking operations. Gate one-time work behind an initialization flag.
19713
+ *
19714
+ * @example
19715
+ * ### Adding a custom Three.js mesh
19716
+ * ```ts
19717
+ * import { type ISystemPlugin, type TRendererState } from '@mappedin/mappedin-js';
19718
+ * import { Mesh, MeshStandardMaterial, SphereGeometry } from 'three';
19719
+ *
19720
+ * class SpherePlugin implements ISystemPlugin {
19721
+ * private sphere: Mesh | null = null;
19722
+ *
19723
+ * update(state: TRendererState): void {
19724
+ * // One-time setup — add a sphere to the scene
19725
+ * if (!this.sphere) {
19726
+ * const geo = new SphereGeometry(3, 32, 32);
19727
+ * const mat = new MeshStandardMaterial({ color: 0xff4444 });
19728
+ * this.sphere = new Mesh(geo, mat);
19729
+ * // Use geometryScene for overlay mode, threeJSScene for standalone
19730
+ * state.geometryScene.add(this.sphere);
19731
+ * }
19732
+ * this.sphere.rotation.y += 0.01;
19733
+ * }
19734
+ * }
19735
+ *
19736
+ * mapView.registerPlugin(new SpherePlugin());
19737
+ * ```
19738
+ *
19739
+ * @example
19740
+ * ### Reading ECS component data
19741
+ * ```ts
19742
+ * class InspectorPlugin implements ISystemPlugin {
19743
+ * update(state: TRendererState): void {
19744
+ * for (const geometry of state.geometry3DsInScene) {
19745
+ * const style = geometry.getComponent('style');
19746
+ * if (style) {
19747
+ * console.log(geometry.id, style.color, style.opacity);
19748
+ * }
19749
+ * }
19750
+ * }
19751
+ * }
19752
+ * ```
19753
+ *
19754
+ * @example
19755
+ * ### Mutating ECS styles (mark dirty to apply)
19756
+ * ```ts
19757
+ * class HighlightPlugin implements ISystemPlugin {
19758
+ * update(state: TRendererState): void {
19759
+ * for (const geometry of state.geometry3DMap.values()) {
19760
+ * const style = geometry.getComponent('style');
19761
+ * if (style) {
19762
+ * style.color = 'red';
19763
+ * style.dirty = true; // Required — triggers DrawSystem to apply the change
19764
+ * }
19765
+ * }
19766
+ * }
19767
+ * }
19768
+ * ```
19769
+ *
19770
+ * @experimental
19771
+ */
18891
19772
  interface ISystemPlugin$2 {
18892
19773
  /**
19774
+ * Called every frame with the current renderer state.
18893
19775
  *
18894
- * @param state - The current state of the renderer.
19776
+ * @param state - The renderer state snapshot for this frame. Contains Three.js objects
19777
+ * (`threeJSScene`, `renderer`, `cameraObject`, `directionalLight`, `ambientLight`),
19778
+ * the geometry scene graph (`geometryScene`), and all ECS entity maps
19779
+ * (`geometry3DMap`, `geometry3DsInScene`, `geometry2DMap`, `geometry2DsInScene`).
18895
19780
  */
18896
19781
  update(state: RendererState): void;
18897
19782
  }
19783
+ /**
19784
+ * Manages registered {@link ISystemPlugin} instances and invokes them each frame.
19785
+ *
19786
+ * @internal — Not part of the public API. Use {@link MapView.registerPlugin} and
19787
+ * {@link MapView.unregisterPlugin} instead.
19788
+ */
18898
19789
  declare class PluginSystem {
18899
19790
  private plugins;
19791
+ /** @internal */
18900
19792
  registerPlugin(plugin: ISystemPlugin$2): void;
19793
+ /** @internal */
18901
19794
  unregisterPlugin(plugin: ISystemPlugin$2): void;
19795
+ /** @internal */
18902
19796
  update(state: RendererState): void;
18903
19797
  }
18904
19798
  //#endregion
@@ -19213,7 +20107,7 @@ declare class ModelSystem extends PubSub<{
19213
20107
  * @param tree - The geometry group container
19214
20108
  * @returns The created Object3D containing the model instances
19215
20109
  */
19216
- populateModelGroup(entities: Set<string | number>, url: string, tree: GeometryGroupObject3D): Promise<Geometry3DObject3D>;
20110
+ populateModelGroup(entities: Set<string | number>, url: string, tree: FeatureCollectionObject3D): Promise<Geometry3DObject3D>;
19217
20111
  /**
19218
20112
  * Updates the model system, processing any pending model loads and style updates
19219
20113
  * @returns A promise that resolves when all model loading is complete
@@ -19298,6 +20192,8 @@ declare class TwoDEntitySystem {
19298
20192
  constructor(container: HTMLElement, state: RendererState, pipelineState: TwoDPipelineState, projectFn: (out: Vector2, v3: Vector3) => void, options?: TwoDPipelineOptions);
19299
20193
  /** Returns the internal pipeline for direct access (test use only). */
19300
20194
  get pipeline(): TwoDPipeline;
20195
+ /** @internal Canvas used for rendering 2D labels. */
20196
+ get labelCanvas(): HTMLCanvasElement;
19301
20197
  /** Quad tree of interactive colliders for hit testing. */
19302
20198
  get interactiveCollidersQTree(): QuadTree<{
19303
20199
  entityId: string | number;
@@ -19387,7 +20283,7 @@ type Systems = {
19387
20283
  panBoundsSystem: PanBoundsSystem;
19388
20284
  twoDEntitySystem: TwoDEntitySystem;
19389
20285
  interactionSystem: InteractionSystem;
19390
- meshOptimizationSystem: MeshCreationAndOptimizationSystem;
20286
+ batchedMeshSystem: BatchedMeshSystem;
19391
20287
  modelSystem: ModelSystem;
19392
20288
  drawSystem: DrawSystem;
19393
20289
  renderSystem: RenderSystem;
@@ -19420,7 +20316,7 @@ type MapViewState$1 = {
19420
20316
  };
19421
20317
  declare class Core extends PubSub<MapEvent> {
19422
20318
  #private;
19423
- options: Omit<RendererCoreOptions$1, 'outdoorView'>;
20319
+ options: Omit<RendererCoreOptions$2, 'outdoorView'>;
19424
20320
  container: HTMLElement;
19425
20321
  Debug: Debug$1;
19426
20322
  /**
@@ -19453,7 +20349,7 @@ declare class Core extends PubSub<MapEvent> {
19453
20349
  /**
19454
20350
  * @internal
19455
20351
  */
19456
- constructor(container: HTMLElement, options?: RendererCoreOptions$1);
20352
+ constructor(container: HTMLElement, options?: RendererCoreOptions$2);
19457
20353
  /**
19458
20354
  * Projects a position into screen space. If a Vector3 is provided, the z-coordinate will include the depth from the camera.
19459
20355
  * @param projectVector - The vector to project the position into
@@ -19488,9 +20384,24 @@ declare class Core extends PubSub<MapEvent> {
19488
20384
  registerPlugin(plugin: ISystemPlugin$2): void;
19489
20385
  unregisterPlugin(plugin: ISystemPlugin$2): void;
19490
20386
  /**
19491
- * Add a geometry group from GeoJSON data
20387
+ * Add a conceptual feature collection from GeoJSON data.
20388
+ *
20389
+ * Each feature is converted into a batched entity, which may be split across
20390
+ * multiple BatchedMeshes internally based on material. The collection itself
20391
+ * is a lightweight container; visual properties such as color, opacity,
20392
+ * altitude, height, etc. are driven per-feature via the `style` callback.
20393
+ *
20394
+ * To toggle visibility of the whole collection, wrap it in a
20395
+ * `GroupContainer` via the `parent` argument and set visibility on the
20396
+ * container.
20397
+ *
20398
+ * The only collection-level concern honored at creation time is the optional
20399
+ * mask — read from `style(features[0])`.
19492
20400
  */
19493
- addGeometryGroup<T$1 extends FeatureCollection<Polygon | MultiPolygon | LineString, any>>(id: string, geometry: T$1, style?: (T$1 extends FeatureCollection<LineString, any> ? LineStyle$2 : PaintStyle$2) | ((feature: Feature<Polygon | MultiPolygon | LineString, any>) => T$1 extends FeatureCollection<LineString, any> ? LineStyle$2 : PaintStyle$2), parent?: EntityId$1<GroupContainerState$1> | string | number | null): EntityId$1<GeometryGroupState>;
20401
+ 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?: {
20402
+ altitude?: number;
20403
+ visible?: boolean;
20404
+ }, parent?: EntityId$1<GroupContainerState$1> | string | number | null): EntityId$1<FeatureCollectionState>;
19494
20405
  addOccluder<T$1 extends Feature<Polygon | MultiPolygon, any>>(feature: T$1, parent?: EntityId$1<GroupContainerState$1> | string | number | null): number;
19495
20406
  addImage(id: string, geometry: Feature<Point, ImageProperties>, style: ImageStyle, parent?: EntityId$1<GroupContainerState$1> | string | null): EntityId$1<ImageState> | undefined;
19496
20407
  /**
@@ -19502,7 +20413,7 @@ declare class Core extends PubSub<MapEvent> {
19502
20413
  }?: {
19503
20414
  parent?: EntityId$1<GroupContainerState$1> | string | null;
19504
20415
  onComplete?: () => void;
19505
- }): EntityId$1<GeometryGroupState> | undefined;
20416
+ }): EntityId$1<FeatureCollectionState> | undefined;
19506
20417
  /**
19507
20418
  * Add an HTML Marker at a GeoJSON coordinate.
19508
20419
  */
@@ -19584,9 +20495,9 @@ declare class Core extends PubSub<MapEvent> {
19584
20495
  * Get the current state of the map view, or any entity that was added, regardless of whether it is visible in the scene
19585
20496
  */
19586
20497
  getState(): MapViewState$1;
19587
- getState<T$1 extends EntityId$1<EntityState>>(geometryOrGeometryId: T$1): T$1 extends EntityId$1<LabelState> ? LabelState : T$1 extends EntityId$1<GeometryState> ? GeometryState : T$1 extends EntityId$1<MarkerState$1> ? MarkerState$1 : T$1 extends EntityId$1<GeometryGroupState> ? GeometryGroupState : T$1 extends EntityId$1<GroupContainerState$1> ? GroupContainerState$1 : T$1 extends EntityId$1<ModelState> ? ModelState : T$1 extends EntityId$1<PathState$1> ? PathState$1 : T$1 extends EntityId$1<ShapeState> ? ShapeState : T$1 extends EntityId$1<ImageState> ? ImageState : T$1 extends EntityId$1<Text3DState$1> ? Text3DState$1 : EntityState;
20498
+ getState<T$1 extends EntityId$1<EntityState>>(geometryOrGeometryId: T$1): T$1 extends EntityId$1<LabelState> ? LabelState : T$1 extends EntityId$1<GeometryState> ? GeometryState : T$1 extends EntityId$1<MarkerState$1> ? MarkerState$1 : T$1 extends EntityId$1<FeatureCollectionState> ? FeatureCollectionState : T$1 extends EntityId$1<GroupContainerState$1> ? GroupContainerState$1 : T$1 extends EntityId$1<ModelState> ? ModelState : T$1 extends EntityId$1<PathState$1> ? PathState$1 : T$1 extends EntityId$1<ShapeState> ? ShapeState : T$1 extends EntityId$1<ImageState> ? ImageState : T$1 extends EntityId$1<Text3DState$1> ? Text3DState$1 : EntityState;
19588
20499
  getState(geometryOrGeometryId?: Record<string | number, any> | string | number): EntityState;
19589
- getState<T$1 extends EntityState>(geometryOrGeometryId: T$1['id']): T$1 extends LabelState ? LabelState : T$1 extends GeometryState ? GeometryState : T$1 extends MarkerState$1 ? MarkerState$1 : T$1 extends GeometryGroupState ? GeometryGroupState : T$1 extends GroupContainerState$1 ? GroupContainerState$1 : T$1 extends ModelState ? ModelState : T$1 extends PathState$1 ? PathState$1 : T$1 extends ShapeState ? ShapeState : T$1 extends ImageState ? ImageState : EntityState;
20500
+ getState<T$1 extends EntityState>(geometryOrGeometryId: T$1['id']): T$1 extends LabelState ? LabelState : T$1 extends GeometryState ? GeometryState : T$1 extends MarkerState$1 ? MarkerState$1 : T$1 extends FeatureCollectionState ? FeatureCollectionState : T$1 extends GroupContainerState$1 ? GroupContainerState$1 : T$1 extends ModelState ? ModelState : T$1 extends PathState$1 ? PathState$1 : T$1 extends ShapeState ? ShapeState : T$1 extends ImageState ? ImageState : EntityState;
19590
20501
  /**
19591
20502
  * Get rendered state for an entity (e.g., runtime rendering state that changes frequently)
19592
20503
  * @param entity The entity to get rendered state for
@@ -19599,7 +20510,7 @@ declare class Core extends PubSub<MapEvent> {
19599
20510
  setState(object: Partial<Omit<MapViewState$1, 'type'>>): void;
19600
20511
  setState<T$1 extends EntityId$1<LabelState>>(object: T$1 | T$1['id'], state: Partial<LabelState>): void;
19601
20512
  setState<T$1 extends EntityId$1<MarkerState$1>>(object: T$1 | T$1['id'], state: Partial<MarkerStateUpdate>): void;
19602
- setState<T$1 extends EntityId$1<GeometryGroupState>>(object: T$1 | T$1['id'], state: Partial<GeometryGroupState>): void;
20513
+ setState<T$1 extends EntityId$1<FeatureCollectionState>>(object: T$1 | T$1['id'], state: Partial<FeatureCollectionState>): void;
19603
20514
  setState<T$1 extends EntityId$1<GroupContainerState$1>>(object: T$1 | T$1['id'], state: Partial<GroupContainerState$1>): void;
19604
20515
  setState<T$1 extends EntityId$1<GeometryState>>(object: T$1 | T$1['id'], state: Partial<GeometryState>): void;
19605
20516
  setState<T$1 extends EntityId$1<ShapeState>>(object: T$1 | T$1['id'], state: Partial<ShapeState>): void;
@@ -19785,7 +20696,7 @@ type GroupContainerState$1 = {
19785
20696
  /**
19786
20697
  * The states of the children of the group container
19787
20698
  */
19788
- readonly children: (PathState$1 | MarkerState$1 | LabelState | GroupContainerState$1 | GeometryGroupState)[];
20699
+ readonly children: (PathState$1 | MarkerState$1 | LabelState | GroupContainerState$1 | FeatureCollectionState)[];
19789
20700
  /**
19790
20701
  * Whether the group container is visible
19791
20702
  */
@@ -19807,7 +20718,7 @@ type GroupContainerState$1 = {
19807
20718
  };
19808
20719
  declare class GroupContainerObject3D extends Object3D {
19809
20720
  childrenIds: Set<string | number>;
19810
- children: (GroupContainerObject3D | GeometryGroupObject3D | BatchedText$1 | Geometry2D['object3d'] | NonNullable<Geometry3D['object3d']>)[];
20721
+ children: (GroupContainerObject3D | FeatureCollectionObject3D | BatchedText$1 | Geometry2D['object3d'] | NonNullable<Geometry3D['object3d']>)[];
19811
20722
  getComponent(): void;
19812
20723
  readonly type: "group-container";
19813
20724
  userData: {
@@ -19828,7 +20739,7 @@ declare class GroupContainerObject3D extends Object3D {
19828
20739
  components: [InteractionComponent?, FocusableComponent?];
19829
20740
  constructor(id: string);
19830
20741
  addOccluderFeature(feature: Feature<Polygon | MultiPolygon, any>, occluderId: number): void;
19831
- addEntity(entityGroupOrContainer: GroupContainerObject3D | GeometryGroupObject3D | Geometry2D | Geometry3DTypes): void;
20742
+ addEntity(entityGroupOrContainer: GroupContainerObject3D | FeatureCollectionObject3D | Geometry2D | Geometry3DTypes): void;
19832
20743
  removeEntity(entityGroupOrContainer: EntityTypes): void;
19833
20744
  setVisible(visible: boolean): void;
19834
20745
  setAltitude(altitude: number): void;
@@ -19869,7 +20780,7 @@ declare class Geometry2D {
19869
20780
  type: 'label' | 'marker';
19870
20781
  /** Lightweight entity for the 2D pipeline */
19871
20782
  entity2D: Entity2D;
19872
- get parentObject3D(): GroupContainerObject3D | GeometryGroupObject3D | null;
20783
+ get parentObject3D(): GroupContainerObject3D | FeatureCollectionObject3D | null;
19873
20784
  /** The geometry3D that this 2D entity is attached to */
19874
20785
  get attachedTo(): string | number | undefined;
19875
20786
  verticalOffset: number;
@@ -19879,6 +20790,12 @@ declare class Geometry2D {
19879
20790
  disposed: boolean;
19880
20791
  constructor(ui: MarkerComponent | LabelComponent, position: Vector3, verticalOffset?: number);
19881
20792
  private worldPosition;
20793
+ /**
20794
+ * Recomputes the cached world position from the Object3D scene graph.
20795
+ * matrixAutoUpdate must be temporarily enabled so updateWorldMatrix
20796
+ * (called internally by getWorldPosition) incorporates parent transforms.
20797
+ */
20798
+ private computeWorldPosition;
19882
20799
  get position(): Vector3;
19883
20800
  /**
19884
20801
  * When the position of the entity changes, this should be set to true, so that systems like pan bounds can update
@@ -19887,8 +20804,16 @@ declare class Geometry2D {
19887
20804
  set positionDirty(value: boolean);
19888
20805
  updatePosition(position: Vector3): void;
19889
20806
  setAltitude(z: number): void;
19890
- /** Copies the ThreeJS world position to the lightweight Entity2D */
20807
+ /**
20808
+ * Copies the ThreeJS world position to the lightweight Entity2D.
20809
+ * Uses the position getter which clears positionDirty.
20810
+ */
19891
20811
  syncPosition(): void;
20812
+ /**
20813
+ * Syncs the Entity2D world position without clearing positionDirty,
20814
+ * so that downstream systems (e.g. pan bounds) still see the dirty flag.
20815
+ */
20816
+ private syncEntity2DWorldPosition;
19892
20817
  }
19893
20818
  //#endregion
19894
20819
  //#region ../renderer-three/src/types/geometry.d.ts
@@ -19896,14 +20821,14 @@ type Position$2 = [lon: number, lat: number] | [lon: number, lat: number, alt: n
19896
20821
  //#endregion
19897
20822
  //#region ../renderer-three/src/types/options.d.ts
19898
20823
  type EnvMapOptions$2 = 'basic' | false;
19899
- type RendererCoreOptions$1 = Partial<{
20824
+ type RendererCoreOptions$2 = Partial<{
19900
20825
  center?: Position$2;
19901
20826
  zoomLevel?: number;
19902
20827
  pitch?: number;
19903
20828
  bearing?: number;
19904
20829
  naturalBearing?: number;
19905
20830
  outdoorView: {
19906
- headers: {
20831
+ headers?: {
19907
20832
  'x-mappedin-tiles-key': string;
19908
20833
  };
19909
20834
  style?: string;
@@ -20052,53 +20977,11 @@ type ShadowsOptions = {
20052
20977
  visibleAtZoomLevel?: number;
20053
20978
  };
20054
20979
  //#endregion
20055
- //#region ../renderer-three/src/types/interpolation.d.ts
20056
- /**
20057
- * Different properties that can be interpolated on, and what input values are expected.
20058
- */
20059
- type InterpolateOn$1 = {
20060
- 'zoom-level': number[];
20061
- };
20062
- /**
20063
- * Define interpolation behavior for a value.
20064
- * @example
20065
- * ```ts
20066
- * // Interpolate a value from 1 to 2 between zoom levels 17 and 18 with easing
20067
- * const value: Interpolation<'zoom-level', [number, number]> = {
20068
- * on: 'zoom-level',
20069
- * input: [17, 18],
20070
- * output: [1, 2],
20071
- * easing: 'ease-in',
20072
- * };
20073
- */
20074
- type Interpolation$2<T$1 extends keyof InterpolateOn$1, U$1 extends unknown[]> = {
20075
- /**
20076
- * The property to observe when interpolating.
20077
- *
20078
- * @defaultValue 'zoom-level'
20079
- */
20080
- on: T$1;
20081
- /**
20082
- * Breakpoints in the observed property.
20083
- */
20084
- input: [InterpolateOn$1[T$1][number], ...InterpolateOn$1[T$1]];
20085
- /**
20086
- * Output values corresponding to the input breakpoints.
20087
- */
20088
- output: [U$1[number], ...U$1];
20089
- /**
20090
- * The easing function to use for the interpolation.
20091
- *
20092
- * @defaultValue 'linear'
20093
- */
20094
- easing?: EasingCurve;
20095
- };
20096
- //#endregion
20097
20980
  //#region ../renderer-three/src/types/index.d.ts
20098
20981
  /**
20099
20982
  * The state of an entity, which can be a geometry, geometry group, group container, path, model, label, or marker.
20100
20983
  */
20101
- type EntityState = GeometryState | GeometryGroupState | GroupContainerState$1 | PathState$1 | ModelState | LabelState | MarkerState$1 | ImageState | Text3DState$1 | ShapeState;
20984
+ type EntityState = GeometryState | FeatureCollectionState | GroupContainerState$1 | PathState$1 | ModelState | LabelState | MarkerState$1 | ImageState | Text3DState$1 | ShapeState;
20102
20985
  /**
20103
20986
  * A wrapper object that contains the ID and type of an entity. This is returned when adding entities to the scene, and can be used
20104
20987
  * to `getState` and `setState` of the entity.
@@ -20270,6 +21153,11 @@ type ClickPayload = {
20270
21153
  * An array of 3D models IDs which the user interaction passed through. Will be empty if no models were interacted with.
20271
21154
  */
20272
21155
  models: [string | number] | [];
21156
+ /**
21157
+ * An array of 3D image IDs which the user interaction passed through. Will be empty if no images were interacted with.
21158
+ * Only images added with `interactive: true` are included.
21159
+ */
21160
+ images: [string | number] | [];
20273
21161
  /**
20274
21162
  * An array of label IDs which the user interaction passed through. Will be empty if no labels were interacted with.
20275
21163
  */
@@ -20379,7 +21267,7 @@ type MapEvent = {
20379
21267
  /**
20380
21268
  * All entities in 3D
20381
21269
  */
20382
- type All3DTypes = Geometry3DTypes | GeometryGroupObject3D | GroupContainerObject3D;
21270
+ type All3DTypes = Geometry3DTypes | FeatureCollectionObject3D | GroupContainerObject3D;
20383
21271
  type RendererState = {
20384
21272
  /**
20385
21273
  * A map of all 3D geometries in the world.
@@ -20410,7 +21298,7 @@ type RendererState = {
20410
21298
  /**
20411
21299
  * IDs of geometry groups that need to be loaded, including preloaded geometry groups that are not in the scene yet
20412
21300
  */
20413
- readonly geometryGroupIdsToLoad: Set<GeometryGroupObject3D['userData']['entityId']>;
21301
+ readonly geometryGroupIdsToLoad: Set<FeatureCollectionObject3D['userData']['entityId']>;
20414
21302
  readonly geometryScene: GroupContainerObject3D;
20415
21303
  hoverColor: string;
20416
21304
  text3dHoverColor: string;
@@ -20450,7 +21338,7 @@ type RendererState = {
20450
21338
  /**
20451
21339
  * All of the entities in the scene
20452
21340
  */
20453
- type EntityTypes = Geometry3DTypes | Geometry2D | GeometryGroupObject3D | GroupContainerObject3D;
21341
+ type EntityTypes = Geometry3DTypes | Geometry2D | FeatureCollectionObject3D | GroupContainerObject3D;
20454
21342
  /** @internal */
20455
21343
  type TransformImageRequest = (url: string) => Promise<{
20456
21344
  url: string;
@@ -20588,14 +21476,20 @@ declare class MapLibreOverlay<T$1> extends PubSub<T$1> implements IControl {
20588
21476
  origin?: Position$2;
20589
21477
  map?: Map$1;
20590
21478
  layer?: CustomLayerInterface;
20591
- constructor(origin: Position$2 | undefined, options?: RendererCoreOptions$1);
21479
+ private cameraSystem;
21480
+ constructor(origin: Position$2 | undefined, options?: RendererCoreOptions$2);
20592
21481
  private handleStyleChange;
21482
+ private handleMoveStart;
20593
21483
  private handleMove;
21484
+ private handleMoveEnd;
20594
21485
  private handleError;
20595
21486
  onAdd(map: Map$1): HTMLDivElement;
20596
21487
  onRemove(): void;
20597
21488
  }
20598
21489
  //#endregion
21490
+ //#region ../renderer-three/src/utils/constants.d.ts
21491
+ declare const MAPPEDIN_LAYER_ID = "mappedin";
21492
+ //#endregion
20599
21493
  //#region src/constants.d.ts
20600
21494
  declare const MAPPEDIN_COLORS: {
20601
21495
  orange: string;
@@ -20612,6 +21506,14 @@ declare enum E_SDK_LOG_LEVEL {
20612
21506
  }
20613
21507
  declare function setLoggerLevel(level: E_SDK_LOG_LEVEL): void;
20614
21508
  //#endregion
21509
+ //#region src/utils/convert-renderer-core-options.d.ts
21510
+ /**
21511
+ * Converts TShow3DMapOptions to RendererCoreOptions format.
21512
+ * Transforms outdoorView.token to outdoorView.headers['x-mappedin-tiles-key'].
21513
+ * @internal
21514
+ */
21515
+ declare function convertToRendererCoreOptions(options: TShow3DMapOptions | undefined): Partial<RendererCoreOptions$1> | undefined;
21516
+ //#endregion
20615
21517
  //#region src/api-geojson/multi-floor.d.ts
20616
21518
  type VisibilityState = {
20617
21519
  outdoorOpacity: number | 'initial';
@@ -21090,4 +21992,4 @@ declare const getVersion: () => string | undefined;
21090
21992
  */
21091
21993
  declare const show3dMapGeojson: (el: HTMLElement, mapData: MapData, options?: TShow3DMapOptions) => Promise<MapView>;
21092
21994
  //#endregion
21093
- export { ACTION_TYPE, ANIMATION_TWEENS, type AddText3DOptions, type Analytics, Annotation, Area, type AutoElements, BBox, BEARING_TYPE, CONNECTION_TYPE, type Camera, type CameraBounds, type CameraTransform, type CaptureEventsPayloadMap, type ColorString, Connection, Coordinate, DOORS, type Debug, DetailedMapData, Directions, Door, E_SDK_LOG_LEVEL, EnterpriseCategory, EnterpriseLocation, EnterpriseVenue, type EnvMapOptions, type Environment, type Exporter, Facade, Feature, FeatureCollection, Floor, FloorStack, type FootprintConfig, GeoJSON$1 as GeoJSON, GeoJsonGeometryTypes, GeoJsonObject, GeoJsonProperties, GeoJsonTypes, Geometry, GeometryCollection, GeometryObject, type GlobalState, Hyperlink, type IAnchorable, type IFocusable, type IGeoJSONData, type INavigatable, type ISystemPlugin, type Image3D, type Image3DView, ImageMetaData, type InitializeModelState, type InitializeText3DState, type InsetPadding, type InsetPaddingOption, type InterpolateOn, type Interpolation, type Label, type LabelAppearance, type LabelTextPlacement, type Labels, LineString, type LineStyle, LocationCategory, LocationProfile, type LocationSocial, type LocationState, MAPPEDIN_COLORS, type MapData, type MapDataElements, type MapElementToGetRenderedState, type MapElementToGetState, type MapElementToUpdateState, type MapElementsWithState, type MapFeatureOfType, MapObject, MapView, type MapViewElements, type MapViewState, type MappedinError, type MappedinRenderError, type Marker, type Markers, type MatchInfo, type Model, type Models, type MultiFloorViewEffectState, MultiLineString, MultiPoint, MultiPolygon, type Navigation, type NavigationState, Node, type OpeningHours, type OperationHours, type Outdoor, type OutlinesOptions, type PaintStyle, type Path, type PathSegment$1 as PathSegment, type Paths, type Places, Point, PointOfInterest, Polygon, type Position, type PubSub, type Query, type RendererCoreOptions, type Search, type SearchOptions, type SearchResult, type SearchResultEnterpriseCategory, type SearchResultEnterpriseLocations, type SearchResultItem, type SearchResultPlaces, type Shading, type Shape, type Shapes, type SiblingGroup, Space, type Style, type Suggestion, type TActionType, type TAddImageOptions, type TAddLabelOptions, type TAddMarkerOptions, type TAddModel, type TAddModelOptions, type TAddPathOptions, type TAddText3DAnchorableOptions, type TAddText3DOptions, type TAnalyticsUpdateState, type TAnimateStateResult, type TAnimationOptions, type TAntialiasingOptions, type TBearingType, type TCameraAnimationOptions, type TCameraInteractionsSetOptions, type TCameraTarget, type TCancellablePromise, type TClickPayload, type TCollisionRankingTier, type TConnectionPathOptions, type TConnectionType, type TCoordinateParams, type TCreateMarker, type TDirectionInstruction, type TDirectionInstructionAction, type TDirectionZone, type TDoorsState, type TDoorsUpdateState, type TEasingFunction, type TEventPayload, type TEvents, type TFacadeState, type TFacadeUpdateState, type TFindNearestOptions, type TFindNearestResult, type TFindPreferredLanguageInVenueOptions, type TFloorAltitudeData, type TFloorChangePayload, type TFloorChangeReason, type TFloorState, type TFloorUpdateState, type TFocusOnOptions, type TFocusTarget, type TGeometryState, type TGeometryUpdateState, type TGetDirectionsOptions, type TGetMapDataOptions, type TGetMapDataSharedOptions, type TGetMapDataWithAccessTokenOptions, type TGetMapDataWithCredentialsOptions, type TGetState, type THoverPayload, type THydrateMapDataBundle, type TImage3DState as TImageState, type TImage3DUpdateState as TImageUpdateState, type TLabelState, type TLabelUpdateState, type TMVF, type TMVFLineStringStyle, type TMVFPointStyle, type TMVFPolygonStyle, type TMVFStyle, type TMVFStyleCollection, type TMapDataEvents, type TMapDataObjectTypes, type TMapFeatureTypes, type TMapViewObjectTypes, type TMarkerPlacement, type TMarkerState, type TMarkerUpdateState, type TModelState, type TModelUpdateState, type TMultiFloorViewOptions, type TNavigationOptions, type TNavigationPathOptions, type TNavigationTarget, type TPathSectionHighlightOptions, type TPathState, type TPathUpdateState, type TQueriables, type TQueryAtResult, type RendererState as TRendererState, type TSearchOptions, type TSetFloorOptions, type TShapeState, type TShapeUpdateState, type TShow3DMapOptions, type TSpaceType, type TStateChangedInternalPayload, type TTakeScreenshotOptions, type TText3DState, type TText3DUpdateState, type TUpdateState, type TWallsState, type TWallsUpdateState, TWatermarkOptions, type Text3D, type Text3DView, type UpdateGlobalState, type VisibilityState, WALLS, type WithState, MapLibreOverlay as __INTERNAL__MapLibreOverlay, __setWatermarkOnClickFn, checkWorkerUrls, disableText3DWorker, enableTestMode, findPreferredLanguageInVenue, forceEnterpriseLocations, getMapData, getMapDataEnterprise, getMultiFloorState, getVersion, hydrateMapData, hydrateMapDataFromMVF, parseMVFv2 as parseMVF, preloadFont, setLoggerLevel, setUseEnterpriseAPI, setWorkersUrl, shouldForceEnterpriseLocations, show3dMap, show3dMapGeojson, unzipAndParseMVFv2, unzipMVFv2 as unzipMVF };
21995
+ export { ACTION_TYPE, ANIMATION_TWEENS, type AddText3DOptions, type Analytics, Annotation, Area, type AutoElements, BBox, BEARING_TYPE, CONNECTION_TYPE, type Camera, type CameraBounds, type CameraTransform, type CaptureEventsPayloadMap, type ColorString, Connection, Coordinate, DOORS, type Debug, type DebugState, DetailedMapData, Directions, Door, E_SDK_LOG_LEVEL, EnterpriseCategory, EnterpriseLocation, EnterpriseVenue, type EnvMapOptions, type Environment, type Exporter, Facade, Feature, FeatureCollection, Floor, FloorStack, type FootprintConfig, GeoJSON$1 as GeoJSON, GeoJsonGeometryTypes, GeoJsonObject, GeoJsonProperties, GeoJsonTypes, Geometry, GeometryCollection, GeometryObject, type GlobalState, Hyperlink, type IAnchorable, type IFocusable, type IGeoJSONData, type INavigatable, type ISystemPlugin, type Image3D, type Image3DView, ImageMetaData, type InitializeModelState, type InitializeText3DState, type InsetPadding, type InsetPaddingOption, type InterpolateOn, type Interpolation, type Label, type LabelAppearance, type LabelTextPlacement, type Labels, LineString, type LineStyle, LocationCategory, LocationProfile, type LocationSocial, type LocationState, MAPPEDIN_COLORS, type MapData, type MapDataElements, type MapElementToGetRenderedState, type MapElementToGetState, type MapElementToUpdateState, type MapElementsWithState, type MapFeatureOfType, MapObject, MapView, type MapViewElements, type MapViewState, type MappedinError, type MappedinRenderError, type Marker, type Markers, type MatchInfo, type Model, type Models, type MultiFloorViewEffectState, MultiLineString, MultiPoint, MultiPolygon, type Navigation, type NavigationState, Node, type OpeningHours, type OperationHours, type Outdoor, type OutlinesOptions, type PaintStyle, type Path, type PathSegment$1 as PathSegment, type PathWidth, type Paths, type PixelWidth, type Places, Point, PointOfInterest, Polygon, type Position, type PubSub, type Query, type RendererCoreOptions, type Search, type SearchOptions, type SearchResult, type SearchResultEnterpriseCategory, type SearchResultEnterpriseLocations, type SearchResultItem, type SearchResultPlaces, type Shading, type Shape, type Shapes, type SiblingGroup, Space, type Style, type Suggestion, type TActionType, type TAddImageOptions, type TAddLabelOptions, type TAddMarkerOptions, type TAddModel, type TAddModelOptions, type TAddPathOptions, type TAddText3DAnchorableOptions, type TAddText3DOptions, type TAnalyticsUpdateState, type TAnimateStateResult, type TAnimationOptions, type TAntialiasingOptions, type TBearingType, type TCameraAnimationOptions, type TCameraInteractionsSetOptions, type TCameraTarget, type TCancellablePromise, type TClickPayload, type TCollisionRankingTier, type TConnectionPathOptions, type TConnectionType, type TCoordinateParams, type TCreateMarker, type TDirectionInstruction, type TDirectionInstructionAction, type TDirectionZone, type TDoorsState, type TDoorsUpdateState, type TEasingFunction, type TEventPayload, type TEvents, type TExperimentalDashOptions, type TFacadeState, type TFacadeUpdateState, type TFindNearestOptions, type TFindNearestResult, type TFindPreferredLanguageInVenueOptions, type TFloorAltitudeData, type TFloorChangePayload, type TFloorChangeReason, type TFloorState, type TFloorUpdateState, type TFocusOnOptions, type TFocusTarget, type TGeometryState, type TGeometryUpdateState, type TGetDirectionsOptions, type TGetMapDataOptions, type TGetMapDataSharedOptions, type TGetMapDataWithAccessTokenOptions, type TGetMapDataWithCredentialsOptions, type TGetState, type THoverPayload, type THydrateMapDataBundle, type TImage3DState as TImageState, type TImage3DUpdateState as TImageUpdateState, type TLabelState, type TLabelUpdateState, type TMVF, type TMVFLineStringStyle, type TMVFPointStyle, type TMVFPolygonStyle, type TMVFStyle, type TMVFStyleCollection, type TMapDataEvents, type TMapDataObjectTypes, type TMapFeatureTypes, type TMapViewObjectTypes, type TMarkerPlacement, type TMarkerState, type TMarkerUpdateState, type TModelState, type TModelUpdateState, type TMultiFloorViewOptions, type TNavigationOptions, type TNavigationPathOptions, type TNavigationTarget, type TOutsideThresholdPathStyle, type TPathSectionHighlightOptions, type TPathState, type TPathUpdateState, type TQueriables, type TQueryAtResult, type RendererState as TRendererState, type TSearchOptions, type TSetFloorOptions, type TShapeState, type TShapeUpdateState, type TShow3DMapOptions, type TSpaceType, type TStateChangedInternalPayload, type TTakeScreenshotOptions, type TTetheredOptions as TTetherOptions, type TText3DState, type TText3DUpdateState, type TTrackCoordinateOptions, type TTravelledOptions, type TUpdateState, type TWallsState, type TWallsUpdateState, TWatermarkOptions, type Text3D, type Text3DView, type UpdateGlobalState, type VisibilityState, WALLS, type WithState, MAPPEDIN_LAYER_ID as __INTERNAL__MAPPEDIN_LAYER_ID, MapLibreOverlay as __INTERNAL__MapLibreOverlay, Core as __INTERNAL__RendererCore, convertToRendererCoreOptions as __INTERNAL__convertToRendererCoreOptions, __setWatermarkOnClickFn, checkWorkerUrls, disableText3DWorker, enableTestMode, findPreferredLanguageInVenue, forceEnterpriseLocations, getMapData, getMapDataEnterprise, getMultiFloorState, getVersion, hydrateMapData, hydrateMapDataFromMVF, parseMVFv2 as parseMVF, preloadFont, setLoggerLevel, setUseEnterpriseAPI, setWorkersUrl, shouldForceEnterpriseLocations, show3dMap, show3dMapGeojson, unzipAndParseMVFv2, unzipMVFv2 as unzipMVF };