@mapvx/web-js 1.8.0 → 2.0.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 (97) hide show
  1. package/dist/cjs/config/draco.js +15 -0
  2. package/dist/cjs/config/draco.js.map +1 -0
  3. package/dist/cjs/domain/models/mapConfig.js.map +1 -1
  4. package/dist/cjs/domain/models/scene3D.js +3 -0
  5. package/dist/cjs/domain/models/scene3D.js.map +1 -0
  6. package/dist/cjs/index.js +3 -3
  7. package/dist/cjs/index.js.map +1 -1
  8. package/dist/cjs/infrastructure/logging/{CountlyLogger.js → MVXLogger.js} +15 -13
  9. package/dist/cjs/infrastructure/logging/MVXLogger.js.map +1 -0
  10. package/dist/cjs/logger/logger.js +30 -54
  11. package/dist/cjs/logger/logger.js.map +1 -1
  12. package/dist/cjs/logger/sentry.js +76 -0
  13. package/dist/cjs/logger/sentry.js.map +1 -0
  14. package/dist/cjs/map/map.js +40 -9
  15. package/dist/cjs/map/map.js.map +1 -1
  16. package/dist/cjs/map/scene3DController.js +443 -0
  17. package/dist/cjs/map/scene3DController.js.map +1 -0
  18. package/dist/cjs/utils/3d.js +133 -0
  19. package/dist/cjs/utils/3d.js.map +1 -0
  20. package/dist/cjs/utils/deckLayers.js +153 -0
  21. package/dist/cjs/utils/deckLayers.js.map +1 -0
  22. package/dist/cjs/utils/loadGlb.js +45 -0
  23. package/dist/cjs/utils/loadGlb.js.map +1 -0
  24. package/dist/cjs/utils/three.js +75 -0
  25. package/dist/cjs/utils/three.js.map +1 -0
  26. package/dist/cjs/utils/threeScene.js +45 -0
  27. package/dist/cjs/utils/threeScene.js.map +1 -0
  28. package/dist/es/config/draco.d.ts +12 -0
  29. package/dist/es/config/draco.d.ts.map +1 -0
  30. package/dist/es/config/draco.js +12 -0
  31. package/dist/es/config/draco.js.map +1 -0
  32. package/dist/es/domain/models/loggeable.d.ts +1 -1
  33. package/dist/es/domain/models/loggeable.d.ts.map +1 -1
  34. package/dist/es/domain/models/mapConfig.d.ts +23 -0
  35. package/dist/es/domain/models/mapConfig.d.ts.map +1 -1
  36. package/dist/es/domain/models/mapConfig.js.map +1 -1
  37. package/dist/es/domain/models/scene3D.d.ts +308 -0
  38. package/dist/es/domain/models/scene3D.d.ts.map +1 -0
  39. package/dist/es/domain/models/scene3D.js +2 -0
  40. package/dist/es/domain/models/scene3D.js.map +1 -0
  41. package/dist/es/domain/ports/ILogger.d.ts +2 -2
  42. package/dist/es/index.d.ts +2 -1
  43. package/dist/es/index.d.ts.map +1 -1
  44. package/dist/es/index.js +1 -1
  45. package/dist/es/index.js.map +1 -1
  46. package/dist/es/infrastructure/logging/{CountlyLogger.d.ts → MVXLogger.d.ts} +13 -11
  47. package/dist/es/infrastructure/logging/MVXLogger.d.ts.map +1 -0
  48. package/dist/es/infrastructure/logging/{CountlyLogger.js → MVXLogger.js} +13 -11
  49. package/dist/es/infrastructure/logging/MVXLogger.js.map +1 -0
  50. package/dist/es/logger/logger.d.ts +2 -3
  51. package/dist/es/logger/logger.d.ts.map +1 -1
  52. package/dist/es/logger/logger.js +30 -51
  53. package/dist/es/logger/logger.js.map +1 -1
  54. package/dist/es/logger/sentry.d.ts +26 -0
  55. package/dist/es/logger/sentry.d.ts.map +1 -0
  56. package/dist/es/logger/sentry.js +72 -0
  57. package/dist/es/logger/sentry.js.map +1 -0
  58. package/dist/es/map/map.d.ts +12 -0
  59. package/dist/es/map/map.d.ts.map +1 -1
  60. package/dist/es/map/map.js +40 -9
  61. package/dist/es/map/map.js.map +1 -1
  62. package/dist/es/map/scene3DController.d.ts +74 -0
  63. package/dist/es/map/scene3DController.d.ts.map +1 -0
  64. package/dist/es/map/scene3DController.js +439 -0
  65. package/dist/es/map/scene3DController.js.map +1 -0
  66. package/dist/es/utils/3d.d.ts +54 -0
  67. package/dist/es/utils/3d.d.ts.map +1 -0
  68. package/dist/es/utils/3d.js +120 -0
  69. package/dist/es/utils/3d.js.map +1 -0
  70. package/dist/es/utils/deckLayers.d.ts +51 -0
  71. package/dist/es/utils/deckLayers.d.ts.map +1 -0
  72. package/dist/es/utils/deckLayers.js +144 -0
  73. package/dist/es/utils/deckLayers.js.map +1 -0
  74. package/dist/es/utils/loadGlb.d.ts +11 -0
  75. package/dist/es/utils/loadGlb.d.ts.map +1 -0
  76. package/dist/es/utils/loadGlb.js +42 -0
  77. package/dist/es/utils/loadGlb.js.map +1 -0
  78. package/dist/es/utils/three.d.ts +51 -0
  79. package/dist/es/utils/three.d.ts.map +1 -0
  80. package/dist/es/utils/three.js +38 -0
  81. package/dist/es/utils/three.js.map +1 -0
  82. package/dist/es/utils/threeScene.d.ts +24 -0
  83. package/dist/es/utils/threeScene.d.ts.map +1 -0
  84. package/dist/es/utils/threeScene.js +41 -0
  85. package/dist/es/utils/threeScene.js.map +1 -0
  86. package/dist/umd/index.js +17848 -12587
  87. package/dist/umd/index.js.map +1 -1
  88. package/package.json +15 -5
  89. package/dist/cjs/infrastructure/logging/CountlyLogger.js.map +0 -1
  90. package/dist/cjs/logger/rollbar.js +0 -37
  91. package/dist/cjs/logger/rollbar.js.map +0 -1
  92. package/dist/es/infrastructure/logging/CountlyLogger.d.ts.map +0 -1
  93. package/dist/es/infrastructure/logging/CountlyLogger.js.map +0 -1
  94. package/dist/es/logger/rollbar.d.ts +0 -4
  95. package/dist/es/logger/rollbar.d.ts.map +0 -1
  96. package/dist/es/logger/rollbar.js +0 -33
  97. package/dist/es/logger/rollbar.js.map +0 -1
@@ -0,0 +1,443 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Scene3DController = void 0;
4
+ const maplibre_gl_1 = require("maplibre-gl");
5
+ const _3d_1 = require("../utils/3d");
6
+ const deckLayers_1 = require("../utils/deckLayers");
7
+ const loadGlb_1 = require("../utils/loadGlb");
8
+ const three_1 = require("../utils/three");
9
+ const threeScene_1 = require("../utils/threeScene");
10
+ /**
11
+ * Owns the experimental 3D scene for a MapLibre map: the deck.gl overlay layers (elevated room
12
+ * outlines, indoor labels, POI icons, store logos) and the declarative GLB custom layer rendered
13
+ * with Three.js.
14
+ *
15
+ * This is the WebGL / deck.gl "glue": creating the `WebGLRenderer`, instantiating deck layers and
16
+ * driving the per-frame render loop all require a real GPU context and a live map, so this module is
17
+ * excluded from unit-test coverage (see `sonar.coverage.exclusions`). The unit-testable logic it
18
+ * relies on lives in `utils/deckLayers.ts`, `utils/threeScene.ts` and `utils/3d.ts`.
19
+ *
20
+ * The map creates one instance only when {@link MapConfig.mode} is `"3D"` and
21
+ * {@link Scene3DConfig.enabled} is not `false`, and forwards its lifecycle to the `on*` methods.
22
+ *
23
+ * @group Map
24
+ */
25
+ class Scene3DController {
26
+ constructor(map, scene3DConfig, initialCenter) {
27
+ /** Latest known floor key; updated by the floor-change hooks and read when (re)building layers. */
28
+ this.currentFloor = "";
29
+ // Lazily-loaded Three.js / deck.gl runtime handles (see loadThree()/loadDeck()).
30
+ this.threeMod = undefined;
31
+ this.deckMod = undefined;
32
+ this.deckOverlay = undefined;
33
+ this.scene3DGlbScene = undefined;
34
+ /** Loaded GLB roots keyed by URL (deduplicated). */
35
+ this.scene3DGlbRootByUrl = new globalThis.Map();
36
+ /** Per-asset template root and bottom anchor for cloning. */
37
+ this.scene3DGlbTemplateById = new globalThis.Map();
38
+ /** Number of light objects in `scene3DGlbScene` (kept when clearing meshes). */
39
+ this.scene3DGlbLightCount = 0;
40
+ /** Container group holding all placed GLB pivots; rebuilt on each floor change. */
41
+ this.scene3DModelsGroup = undefined;
42
+ this.spriteIconMapping = {};
43
+ this.spriteAtlasImage = new Image();
44
+ this.map = map;
45
+ this.scene3DConfig = scene3DConfig;
46
+ this.initialCenter = initialCenter;
47
+ }
48
+ // Lifecycle entry points forwarded by the map ---------------------------------------------
49
+ /**
50
+ * Sets up the deck.gl overlay and GLB custom layer once the map style has loaded. Awaits the lazy
51
+ * library load first so the base 2D flow is never blocked by it.
52
+ */
53
+ async onMapLoad() {
54
+ var _a, _b;
55
+ try {
56
+ await this.ensure3DLibs();
57
+ }
58
+ catch (err) {
59
+ console.error("Failed to load 3D libraries (three/deck.gl)", err);
60
+ return;
61
+ }
62
+ if (!this.deckMod)
63
+ return;
64
+ // Load the sprite atlas (icons/logos) before building deck layers so the first
65
+ // updateDeckOverlay has the atlas available.
66
+ const spriteUrl = (_b = (_a = this.scene3DConfig.customLayers) === null || _a === void 0 ? void 0 : _a.iconLayers) === null || _b === void 0 ? void 0 : _b.spriteUrl;
67
+ if (spriteUrl) {
68
+ await this.loadSpriteAtlas(spriteUrl).catch((err) => console.error("Failed to load sprite atlas", err));
69
+ }
70
+ this.deckOverlay = new this.deckMod.MapboxOverlay({ layers: [] });
71
+ this.map.addControl(this.deckOverlay);
72
+ // Hide MapLibre icon layers — replaced by deck.gl IconLayer
73
+ this.hideLayers(this.scene3DConfig.hideLayers);
74
+ const models = this.scene3DConfig.models;
75
+ const glbModelsActive = models !== undefined && models.enabled !== false && models.assets.length > 0;
76
+ if (glbModelsActive) {
77
+ this.map.addLayer(this.createGlbCustomLayer());
78
+ }
79
+ }
80
+ /** Re-applies zoom-based model transparency; call on every map `zoom`. */
81
+ onZoom() {
82
+ this.applyModelZoomOpacity();
83
+ }
84
+ /** Rebuilds the deck overlay and GLB placements for the given floor. */
85
+ onFloorChange(currentFloor) {
86
+ this.currentFloor = currentFloor !== null && currentFloor !== void 0 ? currentFloor : "";
87
+ this.updateDeckOverlay();
88
+ this.placeScene3DModels();
89
+ }
90
+ /** Rebuilds only the deck overlay (no GLB replacement) for the given floor. */
91
+ refreshOverlay(currentFloor) {
92
+ this.currentFloor = currentFloor !== null && currentFloor !== void 0 ? currentFloor : "";
93
+ this.updateDeckOverlay();
94
+ }
95
+ // Internal implementation -----------------------------------------------------------------
96
+ /**
97
+ * Lazily loads the Three.js / deck.gl runtime handles (dynamic import) and caches them so the
98
+ * heavy libraries stay out of the base 2D bundle.
99
+ */
100
+ async ensure3DLibs() {
101
+ var _a, _b;
102
+ (_a = this.threeMod) !== null && _a !== void 0 ? _a : (this.threeMod = await (0, three_1.loadThree)());
103
+ (_b = this.deckMod) !== null && _b !== void 0 ? _b : (this.deckMod = await (0, three_1.loadDeck)());
104
+ }
105
+ createGlbCustomLayer() {
106
+ const three = this.threeMod.THREE;
107
+ const refMercator = maplibre_gl_1.MercatorCoordinate.fromLngLat(this.initialCenter, 0);
108
+ const meterScale = refMercator.meterInMercatorCoordinateUnits();
109
+ const modelTransform = new three.Matrix4()
110
+ .makeTranslation(refMercator.x, refMercator.y, refMercator.z)
111
+ .scale(new three.Vector3(meterScale, -meterScale, meterScale))
112
+ .multiply(new three.Matrix4().makeRotationX(Math.PI / 2));
113
+ this.scene3DGlbScene = new three.Scene();
114
+ const models = this.scene3DConfig.models;
115
+ if (models && models.enabled !== false && models.assets.length > 0) {
116
+ const lights = (0, _3d_1.resolveModels3DLights)(models);
117
+ this.scene3DGlbLightCount = (0, threeScene_1.addScene3DLights)(three, this.scene3DGlbScene, lights);
118
+ }
119
+ else {
120
+ this.scene3DGlbLightCount = 0;
121
+ }
122
+ void this.loadScene3DGlbTemplates()
123
+ .then(() => this.placeScene3DModels())
124
+ .catch((err) => {
125
+ console.error("Failed to initialize declarative GLB models", err);
126
+ });
127
+ let renderer = undefined;
128
+ let camera = undefined;
129
+ const tmpMatrix = new three.Matrix4();
130
+ return {
131
+ id: "3d-glb-models",
132
+ type: "custom",
133
+ renderingMode: "3d",
134
+ onAdd: (_map, gl) => {
135
+ camera = new three.Camera();
136
+ renderer = new three.WebGLRenderer({
137
+ canvas: _map.getCanvas(),
138
+ context: gl,
139
+ antialias: true,
140
+ });
141
+ renderer.autoClear = false;
142
+ // MapLibre owns canvas dimensions; only sync the GL viewport on resize.
143
+ renderer.setSize = function (width, height) {
144
+ this.setViewport(0, 0, width, height);
145
+ };
146
+ },
147
+ render: (_gl, args) => {
148
+ var _a;
149
+ if (!camera ||
150
+ !renderer ||
151
+ !this.scene3DGlbScene ||
152
+ !this.scene3DModelsGroup ||
153
+ this.scene3DModelsGroup.children.length === 0) {
154
+ return;
155
+ }
156
+ const canvas = this.map.getCanvas();
157
+ const width = canvas.width;
158
+ const height = canvas.height;
159
+ // Skip while the framebuffer has no drawable area (e.g. devtools opening).
160
+ if (width === 0 || height === 0) {
161
+ return;
162
+ }
163
+ const mainMatrix = (_a = args.defaultProjectionData) === null || _a === void 0 ? void 0 : _a.mainMatrix;
164
+ if (!mainMatrix) {
165
+ return;
166
+ }
167
+ renderer.setSize(width, height);
168
+ tmpMatrix.fromArray(mainMatrix).multiply(modelTransform);
169
+ camera.projectionMatrix.copy(tmpMatrix);
170
+ renderer.resetState();
171
+ renderer.render(this.scene3DGlbScene, camera);
172
+ },
173
+ };
174
+ }
175
+ async loadScene3DGlbTemplates() {
176
+ var _a;
177
+ const three = (_a = this.threeMod) === null || _a === void 0 ? void 0 : _a.THREE;
178
+ const models = this.scene3DConfig.models;
179
+ if (!three || !models || models.enabled === false || models.assets.length === 0) {
180
+ return;
181
+ }
182
+ this.scene3DGlbRootByUrl.clear();
183
+ this.scene3DGlbTemplateById.clear();
184
+ for (const asset of models.assets) {
185
+ try {
186
+ let root = this.scene3DGlbRootByUrl.get(asset.url);
187
+ if (!root) {
188
+ root = await (0, loadGlb_1.loadGlbRoot)(asset.url);
189
+ this.scene3DGlbRootByUrl.set(asset.url, root);
190
+ }
191
+ const center = (0, threeScene_1.computeGlbBottomAnchor)(three, root);
192
+ this.scene3DGlbTemplateById.set(asset.id, { root, center });
193
+ }
194
+ catch (err) {
195
+ console.error(`Failed to load GLB asset "${asset.id}" from ${asset.url}`, err);
196
+ }
197
+ }
198
+ }
199
+ placeScene3DModels() {
200
+ var _a, _b, _c, _d, _e, _f, _g, _h;
201
+ const three = (_a = this.threeMod) === null || _a === void 0 ? void 0 : _a.THREE;
202
+ if (!three || !this.scene3DGlbScene) {
203
+ return;
204
+ }
205
+ const models = this.scene3DConfig.models;
206
+ if (!models || models.enabled === false) {
207
+ return;
208
+ }
209
+ if (this.scene3DModelsGroup) {
210
+ this.scene3DGlbScene.remove(this.scene3DModelsGroup);
211
+ this.scene3DModelsGroup = undefined;
212
+ }
213
+ if (this.scene3DGlbTemplateById.size === 0) {
214
+ return;
215
+ }
216
+ const refMercator = maplibre_gl_1.MercatorCoordinate.fromLngLat(this.initialCenter, 0);
217
+ const meterScale = refMercator.meterInMercatorCoordinateUnits();
218
+ const floorKey = this.currentFloor;
219
+ const modelsGroup = new three.Group();
220
+ modelsGroup.position.set((_c = (_b = models.globalOffset) === null || _b === void 0 ? void 0 : _b.x) !== null && _c !== void 0 ? _c : 0, (_e = (_d = models.globalOffset) === null || _d === void 0 ? void 0 : _d.y) !== null && _e !== void 0 ? _e : 0, (_g = (_f = models.globalOffset) === null || _f === void 0 ? void 0 : _f.z) !== null && _g !== void 0 ? _g : 0);
221
+ for (const placement of models.placements) {
222
+ if (!(0, _3d_1.isPlacementVisibleOnFloor)(placement, floorKey)) {
223
+ continue;
224
+ }
225
+ const template = this.scene3DGlbTemplateById.get(placement.assetId);
226
+ if (!template) {
227
+ continue;
228
+ }
229
+ const asset = models.assets.find((a) => a.id === placement.assetId);
230
+ if (!asset) {
231
+ continue;
232
+ }
233
+ const target = maplibre_gl_1.MercatorCoordinate.fromLngLat([placement.position.lng, placement.position.lat], (_h = placement.position.altitude) !== null && _h !== void 0 ? _h : 0);
234
+ const [posX, posY, posZ] = (0, _3d_1.computeScenePosition)(target, refMercator, meterScale, asset.defaultModelOffset, placement.offset);
235
+ const pivot = new three.Group();
236
+ pivot.position.set(posX, posY, posZ);
237
+ const mergedRot = (0, _3d_1.mergeRotation3D)(asset.defaultRotation, placement.rotation);
238
+ pivot.rotation.set(three.MathUtils.degToRad(mergedRot.pitch), three.MathUtils.degToRad(-mergedRot.yaw), three.MathUtils.degToRad(mergedRot.roll), "YXZ");
239
+ const [sx3, sy3, sz3] = (0, _3d_1.mergeGlbScale)(asset.defaultScale, placement.scale);
240
+ pivot.scale.set(sx3, sy3, sz3);
241
+ const model = template.root.clone(true);
242
+ // `clone(true)` shares materials between instances; clone them per placement so each
243
+ // placement's zoom-based opacity is independent and does not bleed into sibling models.
244
+ model.traverse((obj) => {
245
+ const mesh = obj;
246
+ if (!mesh.isMesh) {
247
+ return;
248
+ }
249
+ mesh.material = Array.isArray(mesh.material)
250
+ ? mesh.material.map((m) => m.clone())
251
+ : mesh.material.clone();
252
+ });
253
+ model.position.set(-template.center.x, -template.center.y, -template.center.z);
254
+ // Stash the resolved zoom-transparency config so it can be re-applied on every zoom change.
255
+ pivot.userData.zoomTransparency = (0, _3d_1.resolveZoomTransparency)(models, asset, placement);
256
+ pivot.add(model);
257
+ modelsGroup.add(pivot);
258
+ }
259
+ this.scene3DModelsGroup = modelsGroup;
260
+ this.scene3DGlbScene.add(modelsGroup);
261
+ this.applyModelZoomOpacity();
262
+ this.map.triggerRepaint();
263
+ }
264
+ /**
265
+ * Applies zoom-based transparency to placed GLB models, using each placement's resolved
266
+ * {@link ZoomTransparencyConfig} stored in `pivot.userData.zoomTransparency`. Hard threshold:
267
+ * fully opaque below the configured zoom, configured opacity at/above it. Only triggers a
268
+ * repaint when at least one material actually changed.
269
+ */
270
+ applyModelZoomOpacity() {
271
+ if (!this.scene3DModelsGroup) {
272
+ return;
273
+ }
274
+ const zoom = this.map.getZoom();
275
+ let changed = false;
276
+ for (const pivot of this.scene3DModelsGroup.children) {
277
+ const cfg = pivot.userData.zoomTransparency;
278
+ const opacity = (0, _3d_1.opacityForZoom)(cfg, zoom);
279
+ pivot.traverse((obj) => {
280
+ const mesh = obj;
281
+ if (!mesh.isMesh) {
282
+ return;
283
+ }
284
+ const materials = Array.isArray(mesh.material) ? mesh.material : [mesh.material];
285
+ for (const material of materials) {
286
+ if (material.opacity !== opacity) {
287
+ material.transparent = opacity < 1;
288
+ material.opacity = opacity;
289
+ // Disable depth writes while transparent to avoid draw-order artifacts.
290
+ material.depthWrite = opacity >= 1;
291
+ changed = true;
292
+ }
293
+ }
294
+ });
295
+ }
296
+ if (changed) {
297
+ this.map.triggerRepaint();
298
+ }
299
+ }
300
+ async loadSpriteAtlas(spriteUrl) {
301
+ const [json, img] = await Promise.all([
302
+ fetch(`${spriteUrl}.json`).then((r) => r.json()),
303
+ new Promise((resolve, reject) => {
304
+ const image = new Image();
305
+ image.crossOrigin = "anonymous";
306
+ image.onload = () => resolve(image);
307
+ image.onerror = reject;
308
+ image.src = `${spriteUrl}.png`;
309
+ }),
310
+ ]);
311
+ this.spriteIconMapping = json;
312
+ this.spriteAtlasImage = img;
313
+ }
314
+ makeElevatedLinesLayer(floorKey, layerConfig) {
315
+ var _a;
316
+ const deck = this.deckMod;
317
+ if (!deck)
318
+ return null;
319
+ return new deck.MVTLayer({
320
+ id: "indoor-lines-elevated",
321
+ data: layerConfig.dataUrl,
322
+ binary: (_a = layerConfig.binaryData) !== null && _a !== void 0 ? _a : false,
323
+ renderSubLayers: (props) => {
324
+ var _a, _b, _c, _d;
325
+ const paths = (0, deckLayers_1.buildElevatedPaths)((props.data || []), floorKey, (_a = layerConfig.defaultHeight) !== null && _a !== void 0 ? _a : 5);
326
+ if (!paths.length)
327
+ return null;
328
+ // Default color hardcoded to "#cbcbcb" (from the original style) to avoid a type mismatch.
329
+ return new deck.PathLayer(Object.assign(Object.assign({}, props), { id: `${props.id}-paths`, data: paths, getPath: (d) => d.path, getColor: (0, _3d_1.hexToRgb)((_b = layerConfig.lineColor) !== null && _b !== void 0 ? _b : "#cbcbcb"), getWidth: (_c = layerConfig.lineWidth) !== null && _c !== void 0 ? _c : 1.5, widthUnits: (_d = layerConfig.widthUnits) !== null && _d !== void 0 ? _d : "pixels", pickable: false }));
330
+ },
331
+ updateTriggers: {
332
+ renderSubLayers: [floorKey],
333
+ },
334
+ });
335
+ }
336
+ makeLabelLayer(floorKey, layerConfig, useSdf = true) {
337
+ var _a, _b, _c;
338
+ const deck = this.deckMod;
339
+ if (!deck)
340
+ return null;
341
+ return new deck.MVTLayer({
342
+ id: "indoor-labels",
343
+ data: layerConfig.dataUrl,
344
+ binary: (_a = layerConfig.binaryData) !== null && _a !== void 0 ? _a : false,
345
+ minZoom: (_b = layerConfig.minZoom) !== null && _b !== void 0 ? _b : 19.5,
346
+ maxZoom: (_c = layerConfig.maxZoom) !== null && _c !== void 0 ? _c : 24,
347
+ renderSubLayers: (props) => {
348
+ var _a, _b, _c, _d, _e, _f;
349
+ // Use area_name and poi Point features — unique per tile, no duplicates.
350
+ // If a logo-{name} image exists in the sprite, the icon takes priority over the text label.
351
+ const textData = (0, deckLayers_1.buildLabelData)((props.data || []), floorKey, (imageId) => this.map.hasImage(imageId), (_a = layerConfig.defaultHeight) !== null && _a !== void 0 ? _a : 5);
352
+ if (!textData.length)
353
+ return null;
354
+ return new deck.TextLayer(Object.assign(Object.assign({}, props), { id: `${props.id}-labels`, data: textData, getPosition: (d) => d.position, getText: (d) => d.text, getSize: (_b = layerConfig.size) !== null && _b !== void 0 ? _b : 16, getColor: (0, _3d_1.hexToRgb)((_c = layerConfig.color) !== null && _c !== void 0 ? _c : "#91969b"), outlineColor: useSdf ? [255, 255, 255, 255] : [0, 0, 0, 0], outlineWidth: useSdf ? 4 : 0, fontSettings: { sdf: useSdf }, fontFamily: (_d = layerConfig.fontFamily) !== null && _d !== void 0 ? _d : "Open Sans, sans-serif", fontWeight: (_e = layerConfig.fontWeight) !== null && _e !== void 0 ? _e : 600, billboard: true, pickable: false, characterSet: "auto", wordBreak: "break-word", maxWidth: (_f = layerConfig.maxWidth) !== null && _f !== void 0 ? _f : 150 }));
355
+ },
356
+ updateTriggers: {
357
+ renderSubLayers: [floorKey],
358
+ },
359
+ });
360
+ }
361
+ makePoiIconLayer(floorKey, layerConfig) {
362
+ var _a, _b, _c;
363
+ const deck = this.deckMod;
364
+ if (!deck || !this.spriteIconMapping || !this.spriteAtlasImage)
365
+ return null;
366
+ return new deck.MVTLayer({
367
+ id: "indoor-poi-icons",
368
+ data: layerConfig.dataUrl,
369
+ binary: (_a = layerConfig.binaryData) !== null && _a !== void 0 ? _a : false,
370
+ minZoom: (_b = layerConfig.minZoom) !== null && _b !== void 0 ? _b : 17,
371
+ maxZoom: (_c = layerConfig.maxZoom) !== null && _c !== void 0 ? _c : 24,
372
+ renderSubLayers: (props) => {
373
+ var _a, _b, _c, _d, _e;
374
+ const iconData = (0, deckLayers_1.buildPoiIconData)((props.data || []), floorKey, (_a = layerConfig.defaultHeight) !== null && _a !== void 0 ? _a : 5);
375
+ if (!iconData.length)
376
+ return null;
377
+ return new deck.IconLayer(Object.assign(Object.assign({}, props), { id: `${props.id}-poi-icons`, data: iconData, iconAtlas: this.spriteAtlasImage, iconMapping: this.spriteIconMapping, getIcon: (d) => d.icon, getPosition: (d) => d.position, getSize: (_b = layerConfig.size) !== null && _b !== void 0 ? _b : 2, sizeUnits: (_c = layerConfig.sizeUnits) !== null && _c !== void 0 ? _c : "meters", sizeScale: (_d = layerConfig.sizeScale) !== null && _d !== void 0 ? _d : 1, billboard: (_e = layerConfig.billboard) !== null && _e !== void 0 ? _e : true, pickable: false }));
378
+ },
379
+ updateTriggers: {
380
+ renderSubLayers: [floorKey],
381
+ },
382
+ });
383
+ }
384
+ makeStoreLogoLayer(floorKey, layerConfig) {
385
+ var _a, _b, _c;
386
+ const deck = this.deckMod;
387
+ if (!deck || !this.spriteIconMapping || !this.spriteAtlasImage)
388
+ return null;
389
+ return new deck.MVTLayer({
390
+ id: "indoor-store-logos",
391
+ data: layerConfig.dataUrl,
392
+ binary: (_a = layerConfig.binaryData) !== null && _a !== void 0 ? _a : false,
393
+ minZoom: (_b = layerConfig.minZoom) !== null && _b !== void 0 ? _b : 13,
394
+ maxZoom: (_c = layerConfig.maxZoom) !== null && _c !== void 0 ? _c : 24,
395
+ renderSubLayers: (props) => {
396
+ var _a, _b, _c, _d;
397
+ const logoData = (0, deckLayers_1.buildStoreLogoData)((props.data || []), floorKey, this.spriteIconMapping, (_a = layerConfig.defaultHeight) !== null && _a !== void 0 ? _a : 5);
398
+ if (!logoData.length)
399
+ return null;
400
+ return new deck.IconLayer(Object.assign(Object.assign({}, props), { id: `${props.id}-store-logos`, data: logoData, iconAtlas: this.spriteAtlasImage, iconMapping: this.spriteIconMapping, getIcon: (d) => d.icon, getPosition: (d) => d.position, getAngle: (d) => -d.rotation, getSize: (d) => { var _a; return (0, deckLayers_1.computeStoreLogoSize)(this.spriteIconMapping, d.icon, (_a = layerConfig.logoScale) !== null && _a !== void 0 ? _a : {}); }, sizeUnits: (_b = layerConfig.sizeUnits) !== null && _b !== void 0 ? _b : "meters", sizeScale: (_c = layerConfig.sizeScale) !== null && _c !== void 0 ? _c : 1, billboard: (_d = layerConfig.billboard) !== null && _d !== void 0 ? _d : false, pickable: false }));
401
+ },
402
+ updateTriggers: {
403
+ renderSubLayers: [floorKey],
404
+ },
405
+ });
406
+ }
407
+ updateDeckOverlay() {
408
+ if (!this.deckOverlay || !this.currentFloor)
409
+ return;
410
+ if (!this.scene3DConfig.customLayers)
411
+ return;
412
+ const { customLayers } = this.scene3DConfig;
413
+ const layers = [];
414
+ if (customLayers.elevatedLinesLayer) {
415
+ layers.push(this.makeElevatedLinesLayer(this.currentFloor, customLayers.elevatedLinesLayer));
416
+ }
417
+ if (customLayers.labelsLayer) {
418
+ layers.push(this.makeLabelLayer(this.currentFloor, customLayers.labelsLayer, false));
419
+ }
420
+ if (customLayers.iconLayers) {
421
+ const { storeLogosLayer, poiIconsLayer } = customLayers.iconLayers;
422
+ if (storeLogosLayer) {
423
+ layers.push(this.makeStoreLogoLayer(this.currentFloor, storeLogosLayer));
424
+ }
425
+ if (poiIconsLayer) {
426
+ layers.push(this.makePoiIconLayer(this.currentFloor, poiIconsLayer));
427
+ }
428
+ }
429
+ this.deckOverlay.setProps({ layers });
430
+ }
431
+ hideLayers(layersIds) {
432
+ if (!layersIds)
433
+ return;
434
+ for (const layerId of layersIds) {
435
+ const layer = this.map.getLayer(layerId);
436
+ if (!layer)
437
+ continue;
438
+ this.map.setLayoutProperty(layer.id, "visibility", "none");
439
+ }
440
+ }
441
+ }
442
+ exports.Scene3DController = Scene3DController;
443
+ //# sourceMappingURL=scene3DController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene3DController.js","sourceRoot":"","sources":["../../../src/map/scene3DController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hexToRgba = exports.hexToRgb = exports.DEFAULT_SCENE3D_LIGHTS = void 0;
4
+ exports.resolveModels3DLights = resolveModels3DLights;
5
+ exports.mergeRotation3D = mergeRotation3D;
6
+ exports.normalizeScale = normalizeScale;
7
+ exports.mergeGlbScale = mergeGlbScale;
8
+ exports.resolveZoomTransparency = resolveZoomTransparency;
9
+ exports.opacityForZoom = opacityForZoom;
10
+ exports.isPlacementVisibleOnFloor = isPlacementVisibleOnFloor;
11
+ exports.computeScenePosition = computeScenePosition;
12
+ /**
13
+ * Default lights matching the legacy escalator scene when {@link Models3DConfig.lights} is unset.
14
+ * @internal
15
+ */
16
+ exports.DEFAULT_SCENE3D_LIGHTS = [
17
+ { type: "directional", color: 0xffffff, intensity: 2, position: { x: 50, y: 100, z: 80 } },
18
+ { type: "directional", color: 0xffffff, intensity: 1.5, position: { x: -50, y: 80, z: -60 } },
19
+ { type: "ambient", color: 0xffffff, intensity: 1.5 },
20
+ ];
21
+ const hexToRgb = (hex) => {
22
+ const matches = hex.match(/\w\w/g);
23
+ if (!matches || matches.length < 3) {
24
+ throw new Error(`Invalid hex color: ${hex}`);
25
+ }
26
+ const r = Number.parseInt(matches[0], 16);
27
+ const g = Number.parseInt(matches[1], 16);
28
+ const b = Number.parseInt(matches[2], 16);
29
+ return [r, g, b];
30
+ };
31
+ exports.hexToRgb = hexToRgb;
32
+ const hexToRgba = (hex) => {
33
+ const matches = hex.match(/\w\w/g);
34
+ if (!matches || matches.length < 3) {
35
+ throw new Error(`Invalid hex color: ${hex}`);
36
+ }
37
+ const r = Number.parseInt(matches[0], 16);
38
+ const g = Number.parseInt(matches[1], 16);
39
+ const b = Number.parseInt(matches[2], 16);
40
+ const a = matches.length >= 4 ? Number.parseInt(matches[3], 16) : 255;
41
+ return [r, g, b, a];
42
+ };
43
+ exports.hexToRgba = hexToRgba;
44
+ /**
45
+ * Resolves lights for the declarative GLB scene: {@link Models3DConfig.lights} when set, otherwise SDK defaults.
46
+ */
47
+ function resolveModels3DLights(models) {
48
+ if (models.lights && models.lights.length > 0) {
49
+ return [...models.lights];
50
+ }
51
+ return [...exports.DEFAULT_SCENE3D_LIGHTS];
52
+ }
53
+ /**
54
+ * Merges two partial rotations by adding each axis in degrees.
55
+ */
56
+ function mergeRotation3D(a, b) {
57
+ var _a, _b, _c, _d, _e, _f;
58
+ return {
59
+ yaw: ((_a = a === null || a === void 0 ? void 0 : a.yaw) !== null && _a !== void 0 ? _a : 0) + ((_b = b === null || b === void 0 ? void 0 : b.yaw) !== null && _b !== void 0 ? _b : 0),
60
+ pitch: ((_c = a === null || a === void 0 ? void 0 : a.pitch) !== null && _c !== void 0 ? _c : 0) + ((_d = b === null || b === void 0 ? void 0 : b.pitch) !== null && _d !== void 0 ? _d : 0),
61
+ roll: ((_e = a === null || a === void 0 ? void 0 : a.roll) !== null && _e !== void 0 ? _e : 0) + ((_f = b === null || b === void 0 ? void 0 : b.roll) !== null && _f !== void 0 ? _f : 0),
62
+ };
63
+ }
64
+ /**
65
+ * Normalizes a uniform or per-axis scale; undefined uses `fallback` on all axes.
66
+ */
67
+ function normalizeScale(scale, fallback) {
68
+ if (scale === undefined) {
69
+ return [fallback, fallback, fallback];
70
+ }
71
+ if (typeof scale === "number") {
72
+ return [scale, scale, scale];
73
+ }
74
+ return [scale[0], scale[1], scale[2]];
75
+ }
76
+ /**
77
+ * Placement scale overrides asset default when provided; otherwise asset (or 1) applies.
78
+ */
79
+ function mergeGlbScale(assetDefault, placementOverride) {
80
+ const base = normalizeScale(assetDefault, 1);
81
+ if (placementOverride === undefined) {
82
+ return base;
83
+ }
84
+ return normalizeScale(placementOverride, 1);
85
+ }
86
+ /**
87
+ * Resolves the effective zoom-based transparency for a placement, applying precedence:
88
+ * placement > asset > global. Returns `undefined` when none is configured.
89
+ */
90
+ function resolveZoomTransparency(models, asset, placement) {
91
+ var _a, _b;
92
+ return (_b = (_a = placement.zoomTransparency) !== null && _a !== void 0 ? _a : asset === null || asset === void 0 ? void 0 : asset.zoomTransparency) !== null && _b !== void 0 ? _b : models.zoomTransparency;
93
+ }
94
+ /**
95
+ * Opacity for a given zoom under a hard-threshold {@link ZoomTransparencyConfig}.
96
+ * Returns `cfg.opacity` when `zoom >= cfg.zoom`, otherwise `1` (fully opaque).
97
+ * With no config, returns `1`.
98
+ */
99
+ function opacityForZoom(cfg, zoom) {
100
+ if (!cfg) {
101
+ return 1;
102
+ }
103
+ return zoom >= cfg.zoom ? cfg.opacity : 1;
104
+ }
105
+ /**
106
+ * Whether a GLB placement should be visible for the given floor key.
107
+ */
108
+ function isPlacementVisibleOnFloor(placement, floorKey) {
109
+ if (placement.visibility.mode === "allFloors") {
110
+ return true;
111
+ }
112
+ return placement.visibility.floorKey === floorKey;
113
+ }
114
+ /**
115
+ * Computes a GLB pivot's scene-space position (in metres) from a placement's Mercator target and a
116
+ * Mercator reference origin, plus the asset-level and placement-level offsets.
117
+ *
118
+ * X/Z come from the Mercator delta divided by the metre scale; Y comes only from the offsets (the
119
+ * model is bottom-aligned separately). All offsets are in map-space metres.
120
+ */
121
+ function computeScenePosition(target, ref, meterScale, assetOffset, placementOffset) {
122
+ var _a, _b, _c, _d, _e, _f;
123
+ const sx = (target.x - ref.x) / meterScale;
124
+ const sz = (target.y - ref.y) / meterScale;
125
+ const ax = (_a = assetOffset === null || assetOffset === void 0 ? void 0 : assetOffset.x) !== null && _a !== void 0 ? _a : 0;
126
+ const ay = (_b = assetOffset === null || assetOffset === void 0 ? void 0 : assetOffset.y) !== null && _b !== void 0 ? _b : 0;
127
+ const az = (_c = assetOffset === null || assetOffset === void 0 ? void 0 : assetOffset.z) !== null && _c !== void 0 ? _c : 0;
128
+ const px = (_d = placementOffset === null || placementOffset === void 0 ? void 0 : placementOffset.x) !== null && _d !== void 0 ? _d : 0;
129
+ const py = (_e = placementOffset === null || placementOffset === void 0 ? void 0 : placementOffset.y) !== null && _e !== void 0 ? _e : 0;
130
+ const pz = (_f = placementOffset === null || placementOffset === void 0 ? void 0 : placementOffset.z) !== null && _f !== void 0 ? _f : 0;
131
+ return [sx + ax + px, ay + py, sz + az + pz];
132
+ }
133
+ //# sourceMappingURL=3d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"3d.js","sourceRoot":"","sources":["../../../src/utils/3d.ts"],"names":[],"mappings":"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"}