@tangram.gl/tangram-renderer 0.0.0-stage → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/README.md +60 -2
  2. package/dist/core.js +36923 -0
  3. package/dist/core.js.map +6 -0
  4. package/dist/index.js +32 -0
  5. package/dist/loaders-gl-worker.js +82 -0
  6. package/dist/loaders-gl-worker.js.map +6 -0
  7. package/dist/map-logic.js +2 -0
  8. package/dist/map-logic.js.map +6 -0
  9. package/dist/projected-basemaps-worker.js +3 -0
  10. package/dist/projected-basemaps-worker.js.map +6 -0
  11. package/dist/shader-modules.js +141 -0
  12. package/dist/shader-modules.js.map +6 -0
  13. package/dist/style-schema.js +126 -0
  14. package/dist/style-schema.js.map +6 -0
  15. package/dist/tangram-style.schema.json +882 -0
  16. package/dist/tangram.debug.mjs +37139 -0
  17. package/dist/tangram.debug.mjs.map +6 -0
  18. package/dist/tangram.min.mjs +4950 -0
  19. package/dist/types/builders/earcut.d.ts +15 -0
  20. package/dist/types/core.d.ts +29 -0
  21. package/dist/types/gl/constants.d.ts +2 -0
  22. package/dist/types/gl/globe_mesh.d.ts +48 -0
  23. package/dist/types/gl/glsl.d.ts +17 -0
  24. package/dist/types/gl/vertex-constants.d.ts +4 -0
  25. package/dist/types/gl/vertex-types.d.ts +34 -0
  26. package/dist/types/gl/vertex_data.d.ts +32 -0
  27. package/dist/types/gl/vertex_elements.d.ts +8 -0
  28. package/dist/types/gl/vertex_layout.d.ts +32 -0
  29. package/dist/types/glsl.d.ts +14 -0
  30. package/dist/types/gpu/luma_device_renderer.d.ts +66 -0
  31. package/dist/types/gpu/resource_lifecycle.d.ts +4 -0
  32. package/dist/types/gpu/tangram_gpu_backend.d.ts +151 -0
  33. package/dist/types/index.d.ts +155 -0
  34. package/dist/types/lights/light-definitions.d.ts +121 -0
  35. package/dist/types/map-logic/draped-terrain-bounds.d.ts +41 -0
  36. package/dist/types/map-logic/globe-terrain-preparation.d.ts +85 -0
  37. package/dist/types/map-logic/globe-terrain.d.ts +54 -0
  38. package/dist/types/map-logic/index.d.ts +33 -0
  39. package/dist/types/map-logic/label-identity.d.ts +22 -0
  40. package/dist/types/map-logic/label-placement.d.ts +32 -0
  41. package/dist/types/map-logic/screen-bounds.d.ts +15 -0
  42. package/dist/types/map-logic/terrain-data.d.ts +55 -0
  43. package/dist/types/map-logic/terrain-error.d.ts +51 -0
  44. package/dist/types/map-logic/terrain-ground-topology.d.ts +26 -0
  45. package/dist/types/map-logic/terrain-height-field.d.ts +59 -0
  46. package/dist/types/map-logic/terrain-navigation.d.ts +27 -0
  47. package/dist/types/map-logic/terrain-neighborhood.d.ts +5 -0
  48. package/dist/types/map-logic/terrain-query.d.ts +33 -0
  49. package/dist/types/map-logic/terrain-resource-budget.d.ts +51 -0
  50. package/dist/types/map-logic/terrain-transition-topology.d.ts +23 -0
  51. package/dist/types/map-logic/tile-build-queue.d.ts +51 -0
  52. package/dist/types/map-logic/tile-cache-policy.d.ts +46 -0
  53. package/dist/types/map-logic/tile-residency.d.ts +17 -0
  54. package/dist/types/map-logic/triangle-query-index.d.ts +87 -0
  55. package/dist/types/procedures/js-yaml.d.ts +15 -0
  56. package/dist/types/procedures/mesh-projector.d.ts +107 -0
  57. package/dist/types/procedures/mvt-dependencies.d.ts +20 -0
  58. package/dist/types/procedures/projected-coordinate-transform.d.ts +27 -0
  59. package/dist/types/procedures/projection-batch-executor.d.ts +53 -0
  60. package/dist/types/procedures/scene-yaml-legacy.d.ts +6 -0
  61. package/dist/types/procedures/terrain-draping.d.ts +165 -0
  62. package/dist/types/procedures/terrain-globe.d.ts +6 -0
  63. package/dist/types/procedures/terrain-styled-topology.d.ts +34 -0
  64. package/dist/types/procedures/web-mercator-legacy.d.ts +4 -0
  65. package/dist/types/procedures/web-mercator-math.d.ts +4 -0
  66. package/dist/types/scene/globals.d.ts +11 -0
  67. package/dist/types/scene/ground_footprint.d.ts +16 -0
  68. package/dist/types/scene/host_frame.d.ts +54 -0
  69. package/dist/types/scene/projection_math.d.ts +52 -0
  70. package/dist/types/scene/scene-resource-types.d.ts +177 -0
  71. package/dist/types/scene/scene_bundle.d.ts +69 -0
  72. package/dist/types/scene/visibility_adapter.d.ts +106 -0
  73. package/dist/types/selection/draped-terrain-surface.d.ts +78 -0
  74. package/dist/types/selection/terrain_surface.d.ts +149 -0
  75. package/dist/types/shader-modules/globe-horizon.d.ts +15 -0
  76. package/dist/types/shader-modules/height-decode.d.ts +13 -0
  77. package/dist/types/shader-modules/hillshade.d.ts +13 -0
  78. package/dist/types/shader-modules/index.d.ts +6 -0
  79. package/dist/types/shader-modules/planar.d.ts +12 -0
  80. package/dist/types/shader-modules/sphere-map.d.ts +13 -0
  81. package/dist/types/shader-modules/triplanar.d.ts +15 -0
  82. package/dist/types/sources/decoded_tile_store.d.ts +95 -0
  83. package/dist/types/sources/tile_source_metadata.d.ts +32 -0
  84. package/dist/types/styles/text/fontfaceobserver.d.ts +10 -0
  85. package/dist/types/tile/tile_id.d.ts +37 -0
  86. package/dist/types/tile/tile_traversal_adapter.d.ts +63 -0
  87. package/dist/types/types.d.ts +293 -0
  88. package/dist/types/utils/geo.d.ts +57 -0
  89. package/dist/types/utils/hash.d.ts +1 -0
  90. package/dist/types/utils/log.d.ts +27 -0
  91. package/dist/types/utils/props.d.ts +6 -0
  92. package/dist/types/utils/subscribe.d.ts +10 -0
  93. package/dist/types/utils/thread.d.ts +6 -0
  94. package/dist/types/utils/urls.d.ts +26 -0
  95. package/dist/types/utils/utils.d.ts +26 -0
  96. package/dist/types/utils/version.d.ts +2 -0
  97. package/dist/types/utils/worker-types.d.ts +68 -0
  98. package/dist/types/utils/worker_broker.d.ts +3 -0
  99. package/package.json +103 -3
  100. package/src/builders/common.ts +41 -0
  101. package/src/builders/earcut.d.ts +15 -0
  102. package/src/builders/geometry-types.ts +60 -0
  103. package/src/builders/points.ts +115 -0
  104. package/src/builders/polygons.ts +225 -0
  105. package/src/builders/polylines.ts +682 -0
  106. package/src/builders/wireframe.ts +31 -0
  107. package/src/core.d.ts +29 -0
  108. package/src/core.ts +33 -0
  109. package/src/experimental/loaders-gl-worker.ts +19 -0
  110. package/src/experimental/projected-basemaps-worker.ts +13 -0
  111. package/src/experimental/projected-mesh-cache.ts +137 -0
  112. package/src/experimental/projected-mesh-domain.ts +110 -0
  113. package/src/experimental/projected-mesh-refinement.ts +193 -0
  114. package/src/experimental/projected-mesh.ts +399 -0
  115. package/src/experimental/projected-normal.ts +26 -0
  116. package/src/experimental/projected-symbol-mesh.ts +74 -0
  117. package/src/gl/constants.ts +18 -0
  118. package/src/gl/context.ts +103 -0
  119. package/src/gl/extensions.ts +30 -0
  120. package/src/gl/globe_mesh.ts +285 -0
  121. package/src/gl/glsl.ts +257 -0
  122. package/src/gl/mesh-types.ts +56 -0
  123. package/src/gl/render_state.ts +111 -0
  124. package/src/gl/shader_program.ts +1310 -0
  125. package/src/gl/texture.ts +814 -0
  126. package/src/gl/uniform_buffer.ts +340 -0
  127. package/src/gl/vao.ts +154 -0
  128. package/src/gl/vbo_mesh.ts +349 -0
  129. package/src/gl/vertex-constants.ts +19 -0
  130. package/src/gl/vertex-types.ts +35 -0
  131. package/src/gl/vertex_data.ts +126 -0
  132. package/src/gl/vertex_elements.ts +54 -0
  133. package/src/gl/vertex_layout.ts +241 -0
  134. package/src/glsl.d.ts +14 -0
  135. package/src/gpu/luma_device_renderer.ts +579 -0
  136. package/src/gpu/pixel_readback.ts +51 -0
  137. package/src/gpu/resource_lifecycle.ts +32 -0
  138. package/src/gpu/tangram_gpu_backend.ts +195 -0
  139. package/src/index.d.ts +155 -0
  140. package/src/index.ts +105 -0
  141. package/src/labels/collision-types.ts +94 -0
  142. package/src/labels/collision.ts +273 -0
  143. package/src/labels/collision_grid.ts +61 -0
  144. package/src/labels/intersect.ts +30 -0
  145. package/src/labels/label-types.ts +91 -0
  146. package/src/labels/label.ts +207 -0
  147. package/src/labels/label_line.ts +801 -0
  148. package/src/labels/label_point.ts +131 -0
  149. package/src/labels/main-pass-types.ts +73 -0
  150. package/src/labels/main_pass.ts +221 -0
  151. package/src/labels/point_anchor.ts +100 -0
  152. package/src/labels/point_placement.ts +150 -0
  153. package/src/labels/projected-pass.ts +259 -0
  154. package/src/labels/repeat_group.ts +72 -0
  155. package/src/lights/ambient_light.glsl +18 -0
  156. package/src/lights/directional_light.glsl +39 -0
  157. package/src/lights/geographic-lights.ts +21 -0
  158. package/src/lights/light-definitions.ts +285 -0
  159. package/src/lights/light.ts +590 -0
  160. package/src/lights/lighting-uniforms.ts +80 -0
  161. package/src/lights/lighting-wgsl.ts +116 -0
  162. package/src/lights/material.glsl +237 -0
  163. package/src/lights/material.ts +145 -0
  164. package/src/lights/native-falloff.ts +37 -0
  165. package/src/lights/point_light.glsl +96 -0
  166. package/src/lights/spot_light.glsl +111 -0
  167. package/src/map-logic/draped-terrain-bounds.ts +71 -0
  168. package/src/map-logic/globe-terrain-preparation.ts +217 -0
  169. package/src/map-logic/globe-terrain.ts +296 -0
  170. package/src/map-logic/index.ts +37 -0
  171. package/src/map-logic/label-identity.ts +36 -0
  172. package/src/map-logic/label-placement.ts +117 -0
  173. package/src/map-logic/screen-bounds.ts +34 -0
  174. package/src/map-logic/terrain-data.ts +107 -0
  175. package/src/map-logic/terrain-error.ts +134 -0
  176. package/src/map-logic/terrain-ground-topology.ts +164 -0
  177. package/src/map-logic/terrain-height-field.ts +254 -0
  178. package/src/map-logic/terrain-navigation.ts +50 -0
  179. package/src/map-logic/terrain-neighborhood.ts +43 -0
  180. package/src/map-logic/terrain-query.ts +51 -0
  181. package/src/map-logic/terrain-resource-budget.ts +124 -0
  182. package/src/map-logic/terrain-transition-topology.ts +164 -0
  183. package/src/map-logic/tile-build-queue.ts +110 -0
  184. package/src/map-logic/tile-cache-policy.ts +89 -0
  185. package/src/map-logic/tile-residency.ts +50 -0
  186. package/src/map-logic/triangle-query-index.ts +265 -0
  187. package/src/procedures/js-yaml.d.ts +15 -0
  188. package/src/procedures/mesh-projector.ts +191 -0
  189. package/src/procedures/mlt-loaders.ts +55 -0
  190. package/src/procedures/mvt-dependencies.d.ts +20 -0
  191. package/src/procedures/mvt-legacy.ts +150 -0
  192. package/src/procedures/mvt-loaders.ts +53 -0
  193. package/src/procedures/mvt-parser.ts +48 -0
  194. package/src/procedures/mvt-properties.ts +36 -0
  195. package/src/procedures/mvt-tile-provider.ts +72 -0
  196. package/src/procedures/pmtiles-loader.ts +75 -0
  197. package/src/procedures/projected-coordinate-transform.ts +79 -0
  198. package/src/procedures/projection-batch-executor.ts +140 -0
  199. package/src/procedures/scene-yaml-legacy.ts +16 -0
  200. package/src/procedures/scene-yaml-loaders.ts +10 -0
  201. package/src/procedures/terrain-draping.ts +713 -0
  202. package/src/procedures/terrain-globe.ts +32 -0
  203. package/src/procedures/terrain-styled-topology.ts +184 -0
  204. package/src/procedures/web-mercator-legacy.ts +24 -0
  205. package/src/procedures/web-mercator-math.ts +50 -0
  206. package/src/scene/camera.ts +298 -0
  207. package/src/scene/camera_base.ts +116 -0
  208. package/src/scene/classic_scene.ts +20 -0
  209. package/src/scene/external_camera.ts +101 -0
  210. package/src/scene/globals.ts +120 -0
  211. package/src/scene/ground_footprint.ts +139 -0
  212. package/src/scene/host_frame.ts +326 -0
  213. package/src/scene/projected_tile_lod.ts +125 -0
  214. package/src/scene/projection_math.ts +142 -0
  215. package/src/scene/projection_shaders.ts +183 -0
  216. package/src/scene/renderer.ts +516 -0
  217. package/src/scene/scene-resource-types.ts +174 -0
  218. package/src/scene/scene.ts +2378 -0
  219. package/src/scene/scene_bundle.ts +304 -0
  220. package/src/scene/scene_debug.ts +129 -0
  221. package/src/scene/scene_loader.ts +402 -0
  222. package/src/scene/scene_worker.ts +528 -0
  223. package/src/scene/view.ts +683 -0
  224. package/src/scene/visibility_adapter.ts +319 -0
  225. package/src/scene/worker_url.ts +15 -0
  226. package/src/selection/draped-terrain-surface.ts +377 -0
  227. package/src/selection/selection-types.ts +79 -0
  228. package/src/selection/selection.ts +542 -0
  229. package/src/selection/selection_fragment.glsl +18 -0
  230. package/src/selection/selection_globals.glsl +9 -0
  231. package/src/selection/selection_pixels.ts +59 -0
  232. package/src/selection/selection_vertex.glsl +15 -0
  233. package/src/selection/terrain_surface.ts +298 -0
  234. package/src/shader-modules/globe-horizon.ts +52 -0
  235. package/src/shader-modules/height-decode.ts +41 -0
  236. package/src/shader-modules/hillshade.ts +70 -0
  237. package/src/shader-modules/index.ts +10 -0
  238. package/src/shader-modules/planar.ts +24 -0
  239. package/src/shader-modules/sphere-map.ts +38 -0
  240. package/src/shader-modules/triplanar.ts +45 -0
  241. package/src/sources/aligned_tile_source.ts +122 -0
  242. package/src/sources/data_source.ts +655 -0
  243. package/src/sources/decoded_tile_store.ts +245 -0
  244. package/src/sources/geojson.ts +300 -0
  245. package/src/sources/mvt.ts +247 -0
  246. package/src/sources/raster.ts +341 -0
  247. package/src/sources/shared_tile_source_adapter.ts +117 -0
  248. package/src/sources/sources.ts +10 -0
  249. package/src/sources/tile_source_adapter.ts +84 -0
  250. package/src/sources/tile_source_metadata.ts +65 -0
  251. package/src/sources/tile_source_state.ts +112 -0
  252. package/src/sources/topojson.ts +90 -0
  253. package/src/styles/feature_annotations.ts +16 -0
  254. package/src/styles/filter.ts +190 -0
  255. package/src/styles/geometry-style-types.ts +209 -0
  256. package/src/styles/globe_visibility_wgsl.ts +22 -0
  257. package/src/styles/layer-types.ts +45 -0
  258. package/src/styles/layer.ts +586 -0
  259. package/src/styles/lines/dasharray.ts +49 -0
  260. package/src/styles/lines/lines.ts +707 -0
  261. package/src/styles/lines/lines_wgsl.ts +224 -0
  262. package/src/styles/points/point-runtime-types.ts +125 -0
  263. package/src/styles/points/points.ts +1079 -0
  264. package/src/styles/points/points_fragment.glsl +126 -0
  265. package/src/styles/points/points_vertex.glsl +230 -0
  266. package/src/styles/points/points_wgsl.ts +189 -0
  267. package/src/styles/polygons/polygons.ts +268 -0
  268. package/src/styles/polygons/polygons_fragment.glsl +173 -0
  269. package/src/styles/polygons/polygons_vertex.glsl +213 -0
  270. package/src/styles/polygons/polygons_wgsl.ts +127 -0
  271. package/src/styles/property-types.ts +125 -0
  272. package/src/styles/raster/raster.ts +33 -0
  273. package/src/styles/raster/raster_globals.glsl +46 -0
  274. package/src/styles/style-mixing-types.ts +101 -0
  275. package/src/styles/style-runtime-types.ts +220 -0
  276. package/src/styles/style-schema.ts +133 -0
  277. package/src/styles/style.ts +1033 -0
  278. package/src/styles/style_globals.glsl +69 -0
  279. package/src/styles/style_manager.ts +464 -0
  280. package/src/styles/style_parser.ts +620 -0
  281. package/src/styles/text/font_manager.ts +180 -0
  282. package/src/styles/text/fontfaceobserver.d.ts +10 -0
  283. package/src/styles/text/text-types.ts +220 -0
  284. package/src/styles/text/text.ts +378 -0
  285. package/src/styles/text/text_canvas.ts +773 -0
  286. package/src/styles/text/text_labels.ts +436 -0
  287. package/src/styles/text/text_segments.ts +142 -0
  288. package/src/styles/text/text_settings.ts +228 -0
  289. package/src/styles/text/text_wgsl.ts +159 -0
  290. package/src/styles/text/text_wrap.ts +194 -0
  291. package/src/tile/globe_tile_preload.ts +40 -0
  292. package/src/tile/tangram_tileset_2d.ts +108 -0
  293. package/src/tile/tile-build-types.ts +155 -0
  294. package/src/tile/tile.ts +807 -0
  295. package/src/tile/tile_id.ts +172 -0
  296. package/src/tile/tile_manager.ts +889 -0
  297. package/src/tile/tile_pyramid.ts +119 -0
  298. package/src/tile/tile_resource_cache.ts +91 -0
  299. package/src/tile/tile_traversal_adapter.ts +132 -0
  300. package/src/types.ts +332 -0
  301. package/src/utils/debounce.ts +17 -0
  302. package/src/utils/debug_settings.ts +43 -0
  303. package/src/utils/errors.ts +12 -0
  304. package/src/utils/functions.ts +95 -0
  305. package/src/utils/geo.ts +364 -0
  306. package/src/utils/hash.ts +14 -0
  307. package/src/utils/log.ts +108 -0
  308. package/src/utils/media_capture.ts +193 -0
  309. package/src/utils/merge.ts +44 -0
  310. package/src/utils/obb.ts +134 -0
  311. package/src/utils/props.ts +43 -0
  312. package/src/utils/slice.ts +14 -0
  313. package/src/utils/subscribe.ts +58 -0
  314. package/src/utils/task.ts +154 -0
  315. package/src/utils/thread.ts +26 -0
  316. package/src/utils/urls.ts +223 -0
  317. package/src/utils/utils.ts +310 -0
  318. package/src/utils/vector.ts +197 -0
  319. package/src/utils/version.ts +8 -0
  320. package/src/utils/worker-types.ts +79 -0
  321. package/src/utils/worker_broker.ts +523 -0
@@ -0,0 +1,197 @@
1
+ // Tangram
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) 2013-2016 Brett Camper and Mapzen
4
+ // Copyright (c) 2026 vis.gl contributors
5
+
6
+ /** A numeric vector accepted by Tangram's vector utilities. */
7
+ export type NumericVector = readonly number[];
8
+
9
+ /** A mutable numeric vector returned or updated by Tangram's vector utilities. */
10
+ export type MutableNumericVector = number[];
11
+
12
+ function copy(vector: NumericVector): MutableNumericVector {
13
+ return [...vector];
14
+ }
15
+
16
+ function negate(vector: NumericVector): MutableNumericVector {
17
+ return vector.map(component => -component);
18
+ }
19
+
20
+ function add(left: NumericVector, right: NumericVector): MutableNumericVector {
21
+ const length = Math.min(left.length, right.length);
22
+ const result: MutableNumericVector = [];
23
+ for (let index = 0; index < length; index++) {
24
+ result[index] = left[index] + right[index];
25
+ }
26
+ return result;
27
+ }
28
+
29
+ function subtract(left: NumericVector, right: NumericVector): MutableNumericVector {
30
+ const length = Math.min(left.length, right.length);
31
+ const result: MutableNumericVector = [];
32
+ for (let index = 0; index < length; index++) {
33
+ result[index] = left[index] - right[index];
34
+ }
35
+ return result;
36
+ }
37
+
38
+ function signedArea(first: NumericVector, second: NumericVector, third: NumericVector): number {
39
+ return (
40
+ (second[0] - first[0]) * (third[1] - first[1]) -
41
+ (third[0] - first[0]) * (second[1] - first[1])
42
+ );
43
+ }
44
+
45
+ function multiply(
46
+ vector: NumericVector,
47
+ multiplier: number | NumericVector
48
+ ): MutableNumericVector {
49
+ const length = typeof multiplier === 'number'
50
+ ? vector.length
51
+ : Math.min(vector.length, multiplier.length);
52
+ const result: MutableNumericVector = [];
53
+ for (let index = 0; index < length; index++) {
54
+ result[index] = vector[index] * (
55
+ typeof multiplier === 'number' ? multiplier : multiplier[index]
56
+ );
57
+ }
58
+ return result;
59
+ }
60
+
61
+ function divide(vector: NumericVector, divisor: number | NumericVector): MutableNumericVector {
62
+ const length = typeof divisor === 'number'
63
+ ? vector.length
64
+ : Math.min(vector.length, divisor.length);
65
+ const result: MutableNumericVector = [];
66
+ for (let index = 0; index < length; index++) {
67
+ result[index] = vector[index] / (typeof divisor === 'number' ? divisor : divisor[index]);
68
+ }
69
+ return result;
70
+ }
71
+
72
+ function perpendicular(first: NumericVector, second: NumericVector): MutableNumericVector {
73
+ return [second[1] - first[1], first[0] - second[0]];
74
+ }
75
+
76
+ function rotate(vector: NumericVector, angleRadians: number): MutableNumericVector {
77
+ const cosine = Math.cos(angleRadians);
78
+ const sine = Math.sin(angleRadians);
79
+ return [
80
+ vector[0] * cosine - vector[1] * sine,
81
+ vector[0] * sine + vector[1] * cosine
82
+ ];
83
+ }
84
+
85
+ function angle([x, y]: NumericVector): number {
86
+ return Math.atan2(y, x);
87
+ }
88
+
89
+ function angleBetween(first: NumericVector, second: NumericVector): number {
90
+ let delta = dot(normalize(copy(first)), normalize(copy(second)));
91
+ if (delta > 1) {
92
+ delta = 1;
93
+ }
94
+ return Math.acos(delta);
95
+ }
96
+
97
+ function isEqual(first: NumericVector, second: NumericVector): boolean {
98
+ for (let index = 0; index < first.length; index++) {
99
+ if (first[index] !== second[index]) {
100
+ return false;
101
+ }
102
+ }
103
+ return true;
104
+ }
105
+
106
+ function lengthSquared(vector: NumericVector): number {
107
+ if (vector.length === 2) {
108
+ return vector[0] * vector[0] + vector[1] * vector[1];
109
+ }
110
+ if (vector.length >= 3) {
111
+ return vector[0] * vector[0] + vector[1] * vector[1] + vector[2] * vector[2];
112
+ }
113
+ return 0;
114
+ }
115
+
116
+ function getLength(vector: NumericVector): number {
117
+ return Math.sqrt(lengthSquared(vector));
118
+ }
119
+
120
+ function normalize<VectorType extends MutableNumericVector>(vector: VectorType): VectorType {
121
+ if (vector.length !== 2 && vector.length < 3) {
122
+ return vector;
123
+ }
124
+
125
+ let magnitudeSquared = vector[0] * vector[0] + vector[1] * vector[1];
126
+ if (vector.length >= 3) {
127
+ magnitudeSquared += vector[2] * vector[2];
128
+ }
129
+ if (magnitudeSquared === 1) {
130
+ return vector;
131
+ }
132
+
133
+ const magnitude = Math.sqrt(magnitudeSquared);
134
+ if (magnitude !== 0) {
135
+ vector[0] /= magnitude;
136
+ vector[1] /= magnitude;
137
+ if (vector.length >= 3) {
138
+ vector[2] /= magnitude;
139
+ }
140
+ } else {
141
+ vector[0] = 0;
142
+ vector[1] = 0;
143
+ if (vector.length >= 3) {
144
+ vector[2] = 0;
145
+ }
146
+ }
147
+ return vector;
148
+ }
149
+
150
+ function cross(
151
+ first: NumericVector,
152
+ second: NumericVector
153
+ ): number | MutableNumericVector | undefined {
154
+ if (first.length === 2) {
155
+ return first[0] * second[1] - first[1] * second[0];
156
+ }
157
+ if (first.length === 3) {
158
+ return [
159
+ first[1] * second[2] - first[2] * second[1],
160
+ first[2] * second[0] - first[0] * second[2],
161
+ first[0] * second[1] - first[1] * second[0]
162
+ ];
163
+ }
164
+ return undefined;
165
+ }
166
+
167
+ function dot(first: NumericVector, second: NumericVector): number {
168
+ const length = Math.min(first.length, second.length);
169
+ let result = 0;
170
+ for (let index = 0; index < length; index++) {
171
+ result += first[index] * second[index];
172
+ }
173
+ return result;
174
+ }
175
+
176
+ /** Tangram's numeric vector operations. */
177
+ export const Vector = {
178
+ copy,
179
+ neg: negate,
180
+ add,
181
+ sub: subtract,
182
+ signed_area: signedArea,
183
+ mult: multiply,
184
+ div: divide,
185
+ perp: perpendicular,
186
+ rot: rotate,
187
+ angle,
188
+ angleBetween,
189
+ isEqual,
190
+ lengthSq: lengthSquared,
191
+ length: getLength,
192
+ normalize,
193
+ cross,
194
+ dot
195
+ };
196
+
197
+ export default Vector;
@@ -0,0 +1,8 @@
1
+ // Tangram
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) 2013-2016 Brett Camper and Mapzen
4
+ // Copyright (c) 2026 vis.gl contributors
5
+
6
+ import {version} from '../../package.json';
7
+
8
+ export default 'v' + version;
@@ -0,0 +1,79 @@
1
+ // tangram-layers
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ /** Worker transport surface; registration still requires a native Worker. */
6
+ export type BrokerWorker = Pick<Worker, 'postMessage' | 'addEventListener'>;
7
+
8
+ /** Remote method name and optional serialization for non-cloneable log arguments. */
9
+ export type BrokerMethod = string | {method: string; stringify?: boolean};
10
+
11
+ /** Invocation crossing the main/worker boundary. Arguments are not known to the transport. */
12
+ export interface BrokerInvocation {
13
+ type: 'main_send' | 'worker_send';
14
+ message_id: number;
15
+ method: string;
16
+ message: unknown[];
17
+ /** Optional diagnostic target supplied by older callers. */
18
+ target?: string;
19
+ }
20
+
21
+ /** Reply crossing the main/worker boundary. Truthy errors reject the pending invocation. */
22
+ export interface BrokerReply {
23
+ type: 'main_reply' | 'worker_reply';
24
+ message_id: number;
25
+ message?: unknown;
26
+ error?: unknown;
27
+ }
28
+
29
+ /** Wire packet, decoded once at the transport boundary. */
30
+ export type BrokerPacket = BrokerInvocation | BrokerReply;
31
+
32
+ /** Promise callbacks retained until a reply arrives. */
33
+ export interface PendingBrokerMessage {
34
+ method: string;
35
+ message: unknown[];
36
+ resolve(value: unknown): void;
37
+ reject(error: unknown): void;
38
+ }
39
+
40
+ /** Buffer and its original owner, used for legacy post-transfer cleanup. */
41
+ export interface BrokerTransferable {
42
+ object: ArrayBuffer;
43
+ parent: object | null;
44
+ property: string | number | null;
45
+ }
46
+
47
+ /** Tuple of remote arguments or the single result wrapped for buffer transfer. */
48
+ export interface TransferEnvelope<Values extends unknown[] = unknown[]> {
49
+ value: Values;
50
+ transferables: BrokerTransferable[];
51
+ }
52
+
53
+ /** The legacy wrapper supports both ordinary calls and construction. */
54
+ export interface TransferEnvelopeFactory {
55
+ <Values extends unknown[]>(...value: Values): TransferEnvelope<Values>;
56
+ new <Values extends unknown[]>(...value: Values): TransferEnvelope<Values>;
57
+ }
58
+
59
+ /** Thread-specific invocation overloads; the caller supplies its remote result contract. */
60
+ export interface BrokerPostMessage {
61
+ <Result = unknown>(workers: BrokerWorker[], method: BrokerMethod, ...message: unknown[]): Promise<Result[]>;
62
+ <Result = unknown>(worker: BrokerWorker, method: BrokerMethod, ...message: unknown[]): Promise<Result>;
63
+ <Result = unknown>(method: BrokerMethod, ...message: unknown[]): Promise<Result>;
64
+ }
65
+
66
+ /** Staged broker object shared with the logger during circular module initialization. */
67
+ export interface WorkerBrokerApi {
68
+ targets: Record<string, unknown>;
69
+ addTarget(name: string, target: unknown): void;
70
+ removeTarget(name: string): void;
71
+ postMessage: BrokerPostMessage;
72
+ /** Installed on the main thread only. */
73
+ addWorker(worker: Worker): void;
74
+ /** Main-thread debugging access to pending invocations. */
75
+ getMessages(): Record<number, PendingBrokerMessage>;
76
+ /** Main-thread debugging access to the next invocation identifier. */
77
+ getMessageId(): number;
78
+ withTransferables: TransferEnvelopeFactory;
79
+ }