@mapvx/web-js 3.6.0-dev.1 → 4.0.0-dev.2

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 (191) hide show
  1. package/README.md +6 -1
  2. package/dist/cjs/index.js +2 -95
  3. package/dist/cjs/index.js.LICENSE.txt +1 -0
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/es/controllers/routeController.d.ts.map +1 -1
  6. package/dist/es/controllers/routeController.js +25 -8
  7. package/dist/es/controllers/routeController.js.map +1 -1
  8. package/dist/es/domain/models/scene3D.d.ts +13 -0
  9. package/dist/es/domain/models/scene3D.d.ts.map +1 -1
  10. package/dist/es/logger/sentry.js +1 -1
  11. package/dist/es/map/liveMapFitTransform.d.ts +11 -5
  12. package/dist/es/map/liveMapFitTransform.d.ts.map +1 -1
  13. package/dist/es/map/liveMapFitTransform.js +28 -19
  14. package/dist/es/map/liveMapFitTransform.js.map +1 -1
  15. package/dist/es/map/map.d.ts +0 -1
  16. package/dist/es/map/map.d.ts.map +1 -1
  17. package/dist/es/map/map.js +7 -22
  18. package/dist/es/map/map.js.map +1 -1
  19. package/dist/es/map/scene3DController.d.ts +15 -4
  20. package/dist/es/map/scene3DController.d.ts.map +1 -1
  21. package/dist/es/map/scene3DController.js +22 -10
  22. package/dist/es/map/scene3DController.js.map +1 -1
  23. package/dist/umd/index.js +961 -166
  24. package/dist/umd/index.js.map +1 -1
  25. package/dist/umd/styles.css +1 -1
  26. package/dist/umd/styles.css.map +1 -1
  27. package/package.json +7 -4
  28. package/dist/cjs/assets/icons.js +0 -85
  29. package/dist/cjs/assets/icons.js.map +0 -1
  30. package/dist/cjs/config/draco.js +0 -15
  31. package/dist/cjs/config/draco.js.map +0 -1
  32. package/dist/cjs/config/sdkConfig.js +0 -3
  33. package/dist/cjs/config/sdkConfig.js.map +0 -1
  34. package/dist/cjs/controllers/markerLayoutController.js +0 -359
  35. package/dist/cjs/controllers/markerLayoutController.js.map +0 -1
  36. package/dist/cjs/controllers/routeController.js +0 -1549
  37. package/dist/cjs/controllers/routeController.js.map +0 -1
  38. package/dist/cjs/domain/models/_internal.js +0 -14
  39. package/dist/cjs/domain/models/_internal.js.map +0 -1
  40. package/dist/cjs/domain/models/_rtl.js +0 -10
  41. package/dist/cjs/domain/models/_rtl.js.map +0 -1
  42. package/dist/cjs/domain/models/animation.js +0 -64
  43. package/dist/cjs/domain/models/animation.js.map +0 -1
  44. package/dist/cjs/domain/models/banner.js +0 -24
  45. package/dist/cjs/domain/models/banner.js.map +0 -1
  46. package/dist/cjs/domain/models/campaign.js +0 -73
  47. package/dist/cjs/domain/models/campaign.js.map +0 -1
  48. package/dist/cjs/domain/models/categories.js +0 -37
  49. package/dist/cjs/domain/models/categories.js.map +0 -1
  50. package/dist/cjs/domain/models/circle.js +0 -253
  51. package/dist/cjs/domain/models/circle.js.map +0 -1
  52. package/dist/cjs/domain/models/cityFilterOption.js +0 -3
  53. package/dist/cjs/domain/models/cityFilterOption.js.map +0 -1
  54. package/dist/cjs/domain/models/configuration.js +0 -3
  55. package/dist/cjs/domain/models/configuration.js.map +0 -1
  56. package/dist/cjs/domain/models/cssCustomization.js +0 -3
  57. package/dist/cjs/domain/models/cssCustomization.js.map +0 -1
  58. package/dist/cjs/domain/models/fitOptions.js +0 -3
  59. package/dist/cjs/domain/models/fitOptions.js.map +0 -1
  60. package/dist/cjs/domain/models/innerFloors.js +0 -3
  61. package/dist/cjs/domain/models/innerFloors.js.map +0 -1
  62. package/dist/cjs/domain/models/institution.js +0 -45
  63. package/dist/cjs/domain/models/institution.js.map +0 -1
  64. package/dist/cjs/domain/models/latLng.js +0 -3
  65. package/dist/cjs/domain/models/latLng.js.map +0 -1
  66. package/dist/cjs/domain/models/location.js +0 -3
  67. package/dist/cjs/domain/models/location.js.map +0 -1
  68. package/dist/cjs/domain/models/loggeable.js +0 -52
  69. package/dist/cjs/domain/models/loggeable.js.map +0 -1
  70. package/dist/cjs/domain/models/mapCamera.js +0 -3
  71. package/dist/cjs/domain/models/mapCamera.js.map +0 -1
  72. package/dist/cjs/domain/models/mapConfig.js +0 -37
  73. package/dist/cjs/domain/models/mapConfig.js.map +0 -1
  74. package/dist/cjs/domain/models/marker.js +0 -502
  75. package/dist/cjs/domain/models/marker.js.map +0 -1
  76. package/dist/cjs/domain/models/multilanguage.js +0 -17
  77. package/dist/cjs/domain/models/multilanguage.js.map +0 -1
  78. package/dist/cjs/domain/models/openingHours.js +0 -3
  79. package/dist/cjs/domain/models/openingHours.js.map +0 -1
  80. package/dist/cjs/domain/models/place.js +0 -127
  81. package/dist/cjs/domain/models/place.js.map +0 -1
  82. package/dist/cjs/domain/models/platform.js +0 -3
  83. package/dist/cjs/domain/models/platform.js.map +0 -1
  84. package/dist/cjs/domain/models/popover.js +0 -3
  85. package/dist/cjs/domain/models/popover.js.map +0 -1
  86. package/dist/cjs/domain/models/product.js +0 -3
  87. package/dist/cjs/domain/models/product.js.map +0 -1
  88. package/dist/cjs/domain/models/property.js +0 -104
  89. package/dist/cjs/domain/models/property.js.map +0 -1
  90. package/dist/cjs/domain/models/route.js +0 -166
  91. package/dist/cjs/domain/models/route.js.map +0 -1
  92. package/dist/cjs/domain/models/routeConfiguration.js +0 -82
  93. package/dist/cjs/domain/models/routeConfiguration.js.map +0 -1
  94. package/dist/cjs/domain/models/routeInstance.js +0 -30
  95. package/dist/cjs/domain/models/routeInstance.js.map +0 -1
  96. package/dist/cjs/domain/models/routeStyle.js +0 -3
  97. package/dist/cjs/domain/models/routeStyle.js.map +0 -1
  98. package/dist/cjs/domain/models/scene3D.js +0 -3
  99. package/dist/cjs/domain/models/scene3D.js.map +0 -1
  100. package/dist/cjs/domain/models/transport.js +0 -22
  101. package/dist/cjs/domain/models/transport.js.map +0 -1
  102. package/dist/cjs/domain/ports/ICache.js +0 -3
  103. package/dist/cjs/domain/ports/ICache.js.map +0 -1
  104. package/dist/cjs/domain/ports/IHttpClient.js +0 -3
  105. package/dist/cjs/domain/ports/IHttpClient.js.map +0 -1
  106. package/dist/cjs/domain/ports/ILogger.js +0 -23
  107. package/dist/cjs/domain/ports/ILogger.js.map +0 -1
  108. package/dist/cjs/domain/ports/index.js +0 -10
  109. package/dist/cjs/domain/ports/index.js.map +0 -1
  110. package/dist/cjs/infrastructure/cache/CacheManager.js +0 -258
  111. package/dist/cjs/infrastructure/cache/CacheManager.js.map +0 -1
  112. package/dist/cjs/infrastructure/cache/LRUCache.js +0 -153
  113. package/dist/cjs/infrastructure/cache/LRUCache.js.map +0 -1
  114. package/dist/cjs/infrastructure/cache/PersistentCache.js +0 -168
  115. package/dist/cjs/infrastructure/cache/PersistentCache.js.map +0 -1
  116. package/dist/cjs/infrastructure/cache/cacheConfig.js +0 -70
  117. package/dist/cjs/infrastructure/cache/cacheConfig.js.map +0 -1
  118. package/dist/cjs/infrastructure/http/FetchHttpClient.js +0 -75
  119. package/dist/cjs/infrastructure/http/FetchHttpClient.js.map +0 -1
  120. package/dist/cjs/infrastructure/logging/MVXLogger.js +0 -80
  121. package/dist/cjs/infrastructure/logging/MVXLogger.js.map +0 -1
  122. package/dist/cjs/interfaces/cache.js +0 -3
  123. package/dist/cjs/interfaces/cache.js.map +0 -1
  124. package/dist/cjs/interfaces/healthResponse.js +0 -3
  125. package/dist/cjs/interfaces/healthResponse.js.map +0 -1
  126. package/dist/cjs/interfaces/institutionResponse.js +0 -3
  127. package/dist/cjs/interfaces/institutionResponse.js.map +0 -1
  128. package/dist/cjs/interfaces/metadata.js +0 -3
  129. package/dist/cjs/interfaces/metadata.js.map +0 -1
  130. package/dist/cjs/interfaces/placeResponse.js +0 -3
  131. package/dist/cjs/interfaces/placeResponse.js.map +0 -1
  132. package/dist/cjs/interfaces/routeCacheResponse.js +0 -3
  133. package/dist/cjs/interfaces/routeCacheResponse.js.map +0 -1
  134. package/dist/cjs/interfaces/routeResponse.js +0 -3
  135. package/dist/cjs/interfaces/routeResponse.js.map +0 -1
  136. package/dist/cjs/interfaces/styleResponse.js +0 -3
  137. package/dist/cjs/interfaces/styleResponse.js.map +0 -1
  138. package/dist/cjs/logger/logger.js +0 -78
  139. package/dist/cjs/logger/logger.js.map +0 -1
  140. package/dist/cjs/logger/sentry.js +0 -81
  141. package/dist/cjs/logger/sentry.js.map +0 -1
  142. package/dist/cjs/map/fitCamera.js +0 -124
  143. package/dist/cjs/map/fitCamera.js.map +0 -1
  144. package/dist/cjs/map/liveMapFitTransform.js +0 -180
  145. package/dist/cjs/map/liveMapFitTransform.js.map +0 -1
  146. package/dist/cjs/map/map.js +0 -2766
  147. package/dist/cjs/map/map.js.map +0 -1
  148. package/dist/cjs/map/mapInteractionOptions.js +0 -73
  149. package/dist/cjs/map/mapInteractionOptions.js.map +0 -1
  150. package/dist/cjs/map/scene3DController.js +0 -849
  151. package/dist/cjs/map/scene3DController.js.map +0 -1
  152. package/dist/cjs/repository/repository.js +0 -694
  153. package/dist/cjs/repository/repository.js.map +0 -1
  154. package/dist/cjs/repository/requester.js +0 -771
  155. package/dist/cjs/repository/requester.js.map +0 -1
  156. package/dist/cjs/sdk.js +0 -438
  157. package/dist/cjs/sdk.js.map +0 -1
  158. package/dist/cjs/utils/3d.js +0 -245
  159. package/dist/cjs/utils/3d.js.map +0 -1
  160. package/dist/cjs/utils/deckLayers.js +0 -153
  161. package/dist/cjs/utils/deckLayers.js.map +0 -1
  162. package/dist/cjs/utils/error.js +0 -19
  163. package/dist/cjs/utils/error.js.map +0 -1
  164. package/dist/cjs/utils/images.js +0 -25
  165. package/dist/cjs/utils/images.js.map +0 -1
  166. package/dist/cjs/utils/loadGlb.js +0 -190
  167. package/dist/cjs/utils/loadGlb.js.map +0 -1
  168. package/dist/cjs/utils/mapvxHostname.js +0 -21
  169. package/dist/cjs/utils/mapvxHostname.js.map +0 -1
  170. package/dist/cjs/utils/nav-functions.js +0 -150
  171. package/dist/cjs/utils/nav-functions.js.map +0 -1
  172. package/dist/cjs/utils/opening-hours-helper.js +0 -914
  173. package/dist/cjs/utils/opening-hours-helper.js.map +0 -1
  174. package/dist/cjs/utils/preconnect.js +0 -131
  175. package/dist/cjs/utils/preconnect.js.map +0 -1
  176. package/dist/cjs/utils/route-utils.js +0 -57
  177. package/dist/cjs/utils/route-utils.js.map +0 -1
  178. package/dist/cjs/utils/semaphore.js +0 -143
  179. package/dist/cjs/utils/semaphore.js.map +0 -1
  180. package/dist/cjs/utils/three.js +0 -113
  181. package/dist/cjs/utils/three.js.map +0 -1
  182. package/dist/cjs/utils/threeScene.js +0 -126
  183. package/dist/cjs/utils/threeScene.js.map +0 -1
  184. package/dist/cjs/utils/update-css.js +0 -76
  185. package/dist/cjs/utils/update-css.js.map +0 -1
  186. package/dist/cjs/utils/utils.js +0 -104
  187. package/dist/cjs/utils/utils.js.map +0 -1
  188. package/dist/es/domain/models/_rtl.d.ts +0 -7
  189. package/dist/es/domain/models/_rtl.d.ts.map +0 -1
  190. package/dist/es/domain/models/_rtl.js +0 -7
  191. package/dist/es/domain/models/_rtl.js.map +0 -1
@@ -1,359 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MarkerLayoutController = exports.FALLBACK_ORDER = exports.ANCHOR_FRACTIONS = void 0;
4
- exports.computeIconRect = computeIconRect;
5
- exports.computeCandidateRect = computeCandidateRect;
6
- exports.expandRect = expandRect;
7
- exports.rectsIntersect = rectsIntersect;
8
- const marker_1 = require("../domain/models/marker");
9
- /**
10
- * Fraction of the icon's own box, along each axis, that MapLibre's Marker
11
- * anchor math (`translate(-x%, -y%)`) aligns to the geodetic point. Mirrors
12
- * MapLibre's own `anchorTranslate` table so the collision math agrees with
13
- * what's actually on screen.
14
- */
15
- exports.ANCHOR_FRACTIONS = {
16
- center: { fx: 0.5, fy: 0.5 },
17
- top: { fx: 0.5, fy: 0 },
18
- bottom: { fx: 0.5, fy: 1 },
19
- left: { fx: 0, fy: 0.5 },
20
- right: { fx: 1, fy: 0.5 },
21
- "top-left": { fx: 0, fy: 0 },
22
- "top-right": { fx: 1, fy: 0 },
23
- "bottom-left": { fx: 0, fy: 1 },
24
- "bottom-right": { fx: 1, fy: 1 },
25
- };
26
- /** Candidate order tried when a marker's preferred side is unavailable. */
27
- exports.FALLBACK_ORDER = [
28
- marker_1.TextPosition.right,
29
- marker_1.TextPosition.top,
30
- marker_1.TextPosition.left,
31
- marker_1.TextPosition.bottom,
32
- ];
33
- /** Builds the icon's on-screen rect from its projected point, size and anchor. */
34
- function computeIconRect(screen, iconSize, anchor) {
35
- var _a;
36
- const { fx, fy } = (_a = exports.ANCHOR_FRACTIONS[anchor]) !== null && _a !== void 0 ? _a : exports.ANCHOR_FRACTIONS.center;
37
- return {
38
- left: screen.x - fx * iconSize.width,
39
- top: screen.y - fy * iconSize.height,
40
- width: iconSize.width,
41
- height: iconSize.height,
42
- };
43
- }
44
- /**
45
- * Builds a candidate label rect for one side of an icon. Mirrors the CSS in
46
- * `styles.css` (`.text-container.right/left/top/bottom`) exactly, so a
47
- * position the algorithm picks as collision-free renders collision-free.
48
- */
49
- function computeCandidateRect(iconRect, labelSize, position, gapPx, verticalGapPx) {
50
- switch (position) {
51
- case marker_1.TextPosition.left:
52
- return {
53
- left: iconRect.left - gapPx - labelSize.width,
54
- top: iconRect.top + iconRect.height / 2 - labelSize.height / 2,
55
- width: labelSize.width,
56
- height: labelSize.height,
57
- };
58
- case marker_1.TextPosition.top:
59
- return {
60
- left: iconRect.left + iconRect.width / 2 - labelSize.width / 2,
61
- top: iconRect.top - verticalGapPx - labelSize.height,
62
- width: labelSize.width,
63
- height: labelSize.height,
64
- };
65
- case marker_1.TextPosition.bottom:
66
- return {
67
- left: iconRect.left + iconRect.width / 2 - labelSize.width / 2,
68
- top: iconRect.top + iconRect.height + verticalGapPx,
69
- width: labelSize.width,
70
- height: labelSize.height,
71
- };
72
- case marker_1.TextPosition.right:
73
- default:
74
- return {
75
- left: iconRect.left + iconRect.width + gapPx,
76
- top: iconRect.top + iconRect.height / 2 - labelSize.height / 2,
77
- width: labelSize.width,
78
- height: labelSize.height,
79
- };
80
- }
81
- }
82
- /** Expands a rect by `padding` on every side. */
83
- function expandRect(rect, padding) {
84
- return {
85
- left: rect.left - padding,
86
- top: rect.top - padding,
87
- width: rect.width + 2 * padding,
88
- height: rect.height + 2 * padding,
89
- };
90
- }
91
- /** Standard AABB intersection test. */
92
- function rectsIntersect(a, b) {
93
- return (a.left < b.left + b.width &&
94
- a.left + a.width > b.left &&
95
- a.top < b.top + b.height &&
96
- a.top + a.height > b.top);
97
- }
98
- /**
99
- * Automatic collision avoidance for marker text labels: keeps a marker's
100
- * icon fixed while moving (or hiding) its label to avoid overlapping
101
- * neighboring markers' icons/labels, similar to Google Maps' label
102
- * placement. Below `minZoomForLabels` it withholds every label instead, so
103
- * a zoomed-out map shows pins only. See {@link MarkerLayoutConfig}.
104
- *
105
- * Not part of the public SDK surface — owned and driven entirely by
106
- * {@link InternalMapVXMap}, mirroring `RouteController`.
107
- */
108
- class MarkerLayoutController {
109
- constructor(map, config) {
110
- this.labelSizeCache = new WeakMap();
111
- this.iconSizeCache = new WeakMap();
112
- this.lastAppliedState = new WeakMap();
113
- this.attached = false;
114
- this.mapvxMap = map;
115
- this.config = config;
116
- this.boundOnMove = () => this.scheduleRelayout();
117
- }
118
- get map() {
119
- return this.mapvxMap.map;
120
- }
121
- /**
122
- * Starts listening for camera movement. Safe to call once the underlying
123
- * MapLibre `Map` instance exists; a single `"move"` listener covers pan,
124
- * zoom, rotate, pitch and `resize()`.
125
- */
126
- attach() {
127
- if (this.attached)
128
- return;
129
- this.attached = true;
130
- this.map.on("move", this.boundOnMove);
131
- this.remeasureWhenFontsLoad();
132
- this.scheduleRelayout();
133
- }
134
- /**
135
- * Publishes the configured gaps and label width cap as CSS custom
136
- * properties, which `styles.css` reads to offset labels from their icon.
137
- * Without this the stylesheet would keep its hardcoded defaults while the
138
- * collision math used the configured values, so any custom `gapPx` /
139
- * `verticalGapPx` would produce placements this controller believes are
140
- * collision-free but that visibly overlap on screen.
141
- *
142
- * Called with the map's own container, so every marker MapLibre mounts
143
- * inside it inherits the values.
144
- */
145
- applyLayoutVariables(container) {
146
- container.style.setProperty("--mapvx-label-gap", `${this.config.gapPx}px`);
147
- container.style.setProperty("--mapvx-label-vertical-gap", `${this.config.verticalGapPx}px`);
148
- container.style.setProperty("--mapvx-label-max-width", `${this.config.maxLabelWidthPx}px`);
149
- }
150
- /**
151
- * A label measured before its web font finishes loading is measured in the
152
- * fallback font, and that wrong footprint would otherwise be cached for
153
- * the marker's lifetime. Drop every measurement once fonts settle.
154
- */
155
- remeasureWhenFontsLoad() {
156
- const fonts = document.fonts;
157
- if (!fonts)
158
- return;
159
- fonts.ready
160
- .then(() => {
161
- if (!this.attached)
162
- return;
163
- this.labelSizeCache = new WeakMap();
164
- this.iconSizeCache = new WeakMap();
165
- this.scheduleRelayout();
166
- })
167
- .catch(() => {
168
- // Font loading failing is not a layout error: the measurements
169
- // already taken in the fallback font stay in effect.
170
- });
171
- }
172
- /** Stops listening and cancels any pending layout pass. */
173
- destroy() {
174
- if (this.attached) {
175
- this.map.off("move", this.boundOnMove);
176
- this.attached = false;
177
- }
178
- if (this.rafHandle !== undefined) {
179
- cancelAnimationFrame(this.rafHandle);
180
- this.rafHandle = undefined;
181
- }
182
- }
183
- /**
184
- * Drops everything cached for a marker, e.g. after its text/content
185
- * changed.
186
- *
187
- * The last applied decision has to go too: rebuilding a marker's DOM
188
- * replaces its `.text-container` with a fresh one carrying the preferred
189
- * side and no `visibility`, so a decision remembered from the old element
190
- * would make {@link applyDecisions} short-circuit and leave the new label
191
- * on the wrong side — or visible when it should be hidden.
192
- */
193
- invalidateMarker(marker) {
194
- this.labelSizeCache.delete(marker);
195
- this.iconSizeCache.delete(marker);
196
- this.lastAppliedState.delete(marker);
197
- }
198
- /** Coalesces repeated calls into a single layout pass per animation frame. */
199
- scheduleRelayout() {
200
- if (!this.config.enabled || this.rafHandle !== undefined)
201
- return;
202
- this.rafHandle = requestAnimationFrame(() => {
203
- this.rafHandle = undefined;
204
- this.performLayout();
205
- });
206
- }
207
- performLayout() {
208
- // Guards against a relayout firing before the underlying MapLibre `map`
209
- // exists (e.g. a marker added before the "load" event) — `attach()`
210
- // schedules its own initial pass once it's safe to touch `this.map`.
211
- if (!this.attached)
212
- return;
213
- const markers = this.mapvxMap.getMarkers();
214
- if (markers.length === 0)
215
- return;
216
- const container = this.map.getContainer();
217
- const viewportWidth = container.clientWidth;
218
- const viewportHeight = container.clientHeight;
219
- const cullMargin = this.config.maxLabelWidthPx + Math.max(this.config.gapPx, this.config.verticalGapPx);
220
- // A single `>=` per pass, evaluated here rather than in `attach()` so it
221
- // tracks the live camera: the controller already relayouts on every
222
- // "move", which fires continuously through a pan/pinch, so labels cross
223
- // the threshold mid-gesture instead of snapping at its end.
224
- const labelsAllowed = this.map.getZoom() >= this.config.minZoomForLabels;
225
- const entries = this.readMarkers(markers, viewportWidth, viewportHeight, cullMargin);
226
- const decisions = this.decidePlacements(entries, labelsAllowed);
227
- this.applyDecisions(decisions);
228
- }
229
- /** Read phase: project + measure, no writes. Culls markers fully outside the viewport. */
230
- readMarkers(markers, viewportWidth, viewportHeight, cullMargin) {
231
- const entries = [];
232
- for (const marker of markers) {
233
- if (!marker.getElement().isConnected)
234
- continue;
235
- const screen = this.map.project(marker.getLngLat());
236
- const iconRect = computeIconRect(screen, this.resolveIconSize(marker), marker.anchorType);
237
- const outOfViewport = iconRect.left + iconRect.width < -cullMargin ||
238
- iconRect.left > viewportWidth + cullMargin ||
239
- iconRect.top + iconRect.height < -cullMargin ||
240
- iconRect.top > viewportHeight + cullMargin;
241
- if (outOfViewport)
242
- continue;
243
- entries.push({ marker, iconRect, labelSize: this.resolveLabelSize(marker) });
244
- }
245
- return entries;
246
- }
247
- resolveLabelSize(marker) {
248
- const textEl = marker.textContainerEl;
249
- if (!textEl)
250
- return undefined;
251
- return this.measureCached(this.labelSizeCache, marker, textEl);
252
- }
253
- /**
254
- * The icon's box. Markers built from a caller-supplied `element` with no
255
- * declared `iconProperties` are measured from the DOM, since their real
256
- * size is whatever that element renders at; everyone else's box is exactly
257
- * what `MarkerUtils.createMarkerElement` pinned it to.
258
- */
259
- resolveIconSize(marker) {
260
- var _a;
261
- if (!marker.measureIconFromDom)
262
- return marker.iconSize;
263
- return (_a = this.measureCached(this.iconSizeCache, marker, marker.getElement())) !== null && _a !== void 0 ? _a : marker.iconSize;
264
- }
265
- /**
266
- * Measures an element once and remembers it. A zero measurement is
267
- * returned but never cached: it means the element isn't laid out yet (a
268
- * `display: none` ancestor, a first pass before the web font loads), and
269
- * caching it would freeze that marker's footprint at nothing for the rest
270
- * of its life.
271
- */
272
- measureCached(cache, marker, element) {
273
- const cached = cache.get(marker);
274
- if (cached)
275
- return cached;
276
- const measured = { width: element.offsetWidth, height: element.offsetHeight };
277
- if (measured.width <= 0 || measured.height <= 0)
278
- return undefined;
279
- cache.set(marker, measured);
280
- return measured;
281
- }
282
- /**
283
- * Compute phase: pure, no DOM access. Icons always block; labels negotiate
284
- * a side or hide.
285
- *
286
- * Below `minZoomForLabels` every label is hidden and none is placed, so no
287
- * label ever becomes an obstacle for a neighbor at that zoom — a label the
288
- * threshold withheld must not displace anything on its way out.
289
- */
290
- decidePlacements(entries, labelsAllowed) {
291
- const placedLabels = [];
292
- const withLabel = entries.filter(hasLabelSize);
293
- const decisions = new Map();
294
- if (!labelsAllowed) {
295
- for (const entry of withLabel) {
296
- decisions.set(entry.marker, {
297
- position: entry.marker.preferredTextPosition,
298
- hidden: true,
299
- });
300
- }
301
- return decisions;
302
- }
303
- // Stable sort (spec-guaranteed): equal priority keeps insertion order.
304
- withLabel.sort((a, b) => b.marker.labelPriority - a.marker.labelPriority);
305
- for (const entry of withLabel) {
306
- const order = [
307
- entry.marker.preferredTextPosition,
308
- ...exports.FALLBACK_ORDER.filter((position) => position !== entry.marker.preferredTextPosition),
309
- ];
310
- const fit = order
311
- .map((position) => ({
312
- position,
313
- rect: computeCandidateRect(entry.iconRect, entry.labelSize, position, this.config.gapPx, this.config.verticalGapPx),
314
- }))
315
- .find(({ rect }) => !this.collides(rect, entry.marker, entries, placedLabels));
316
- if (fit) {
317
- placedLabels.push(fit.rect);
318
- decisions.set(entry.marker, { position: fit.position, hidden: false });
319
- }
320
- else {
321
- decisions.set(entry.marker, { position: entry.marker.preferredTextPosition, hidden: true });
322
- }
323
- }
324
- return decisions;
325
- }
326
- /**
327
- * Whether a candidate label rect clashes with any other marker's icon or
328
- * with a label already placed this pass.
329
- *
330
- * A label's own icon is deliberately excluded: `gapPx`/`verticalGapPx`
331
- * already define the spacing to it, and `paddingPx` is breathing room
332
- * against *neighbors*. Counting the own icon here would make top/bottom
333
- * impossible for every marker as soon as `paddingPx` exceeded
334
- * `verticalGapPx` (4 vs 4 by default) — and at `paddingPx: 10` would hide
335
- * every label on the map.
336
- */
337
- collides(rect, self, entries, placedLabels) {
338
- const padded = expandRect(rect, this.config.paddingPx);
339
- return (entries.some((other) => other.marker !== self && rectsIntersect(padded, other.iconRect)) ||
340
- placedLabels.some((label) => rectsIntersect(padded, label)));
341
- }
342
- /** Write phase: only touches the DOM for markers whose decision actually changed. */
343
- applyDecisions(decisions) {
344
- decisions.forEach((decision, marker) => {
345
- const last = this.lastAppliedState.get(marker);
346
- if (last && last.position === decision.position && last.hidden === decision.hidden)
347
- return;
348
- if (marker.textContainerEl) {
349
- marker_1.MarkerUtils.applyTextPosition(marker.textContainerEl, decision.position, decision.hidden);
350
- }
351
- this.lastAppliedState.set(marker, decision);
352
- });
353
- }
354
- }
355
- exports.MarkerLayoutController = MarkerLayoutController;
356
- function hasLabelSize(entry) {
357
- return entry.labelSize !== undefined;
358
- }
359
- //# sourceMappingURL=markerLayoutController.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markerLayoutController.js","sourceRoot":"","sources":["../../../src/controllers/markerLayoutController.ts"],"names":[],"mappings":"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"}