maplibre-gl-layers 0.17.0 → 0.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 (38) hide show
  1. package/dist/SpriteLayer.d.ts +3 -3
  2. package/dist/config.d.ts +2 -2
  3. package/dist/const.d.ts +7 -4
  4. package/dist/default.d.ts +2 -2
  5. package/dist/gl/atlas.d.ts +2 -2
  6. package/dist/gl/hitTest.d.ts +3 -3
  7. package/dist/gl/mouseEvents.d.ts +36 -0
  8. package/dist/gl/shader.d.ts +2 -2
  9. package/dist/gl/text.d.ts +2 -2
  10. package/dist/gl/tracking.d.ts +36 -0
  11. package/dist/host/calculationHost.d.ts +15 -13
  12. package/dist/host/mapLibreProjectionHost.d.ts +2 -2
  13. package/dist/host/projectionHost.d.ts +2 -2
  14. package/dist/host/runtime.d.ts +2 -2
  15. package/dist/host/wasmCalculationHost.d.ts +7 -7
  16. package/dist/host/wasmHost.d.ts +2 -2
  17. package/dist/host/wasmProjectionHost.d.ts +2 -2
  18. package/dist/index.cjs +1144 -1108
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.ts +2 -2
  21. package/dist/index.mjs +1144 -1108
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/internalTypes.d.ts +18 -46
  24. package/dist/interpolation/degreeInterpolation.d.ts +8 -40
  25. package/dist/interpolation/distanceInterpolation.d.ts +9 -23
  26. package/dist/interpolation/easing.d.ts +2 -2
  27. package/dist/interpolation/interpolationChannels.d.ts +18 -6
  28. package/dist/interpolation/locationInterpolation.d.ts +30 -0
  29. package/dist/interpolation/rotationInterpolation.d.ts +2 -3
  30. package/dist/types.d.ts +57 -53
  31. package/dist/utils/color.d.ts +2 -2
  32. package/dist/utils/image.d.ts +2 -2
  33. package/dist/utils/looseQuadTree.d.ts +2 -2
  34. package/dist/utils/math.d.ts +38 -58
  35. package/dist/utils/utils.d.ts +2 -2
  36. package/dist/wasm/config.json.d.ts +2 -2
  37. package/package.json +6 -6
  38. package/dist/interpolation/interpolation.d.ts +0 -48
@@ -1,15 +1,19 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.17.0
3
+ * version: 0.19.0
4
4
  * description: MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/maplibre-gl-layers.git
8
- * git.commit.hash: 9fe9aa30db6602d13643e32c94af39ae2b26b082
8
+ * git.commit.hash: 7bc93c11d7855dedb8d60f140af4e413252c32a7
9
9
  */
10
10
 
11
- import { SpriteAnchor, SpriteImageOffset, SpriteLocation, SpritePoint, SpriteScalingOptions, SpriteScreenPoint } from '../types';
11
+ import { SpriteAnchor, SpriteLocation, SpritePoint, SpriteScalingOptions, SpriteScreenPoint } from '../types';
12
12
  import { InternalSpriteCurrentState, MatrixInput, ProjectionHost, SpriteMercatorCoordinate } from '../internalTypes';
13
+ export type OffsetInput = {
14
+ offsetMeters?: number;
15
+ offsetDeg?: number;
16
+ } | undefined;
13
17
  /**
14
18
  * Produces a deep copy so later updates do not mutate the original object.
15
19
  */
@@ -44,18 +48,10 @@ export declare const multiplyMatrixAndVector: (matrix: MatrixInput, x: number, y
44
48
  export interface ResolvedSpriteScalingOptions {
45
49
  /** Effective number of meters represented by each rendered pixel. */
46
50
  metersPerPixel: number;
47
- /** Lowest zoom level at which scaling interpolation begins. */
48
- zoomMin: number;
49
- /** Highest zoom level at which scaling interpolation ends. */
50
- zoomMax: number;
51
- /** Scale multiplier applied at {@link ResolvedSpriteScalingOptions.zoomMin}. */
52
- scaleMin: number;
53
- /** Scale multiplier applied at {@link ResolvedSpriteScalingOptions.zoomMax}. */
54
- scaleMax: number;
55
- /** Lower clamp for sprite size in pixels. */
56
- spriteMinPixel: number;
57
- /** Upper clamp for sprite size in pixels. */
58
- spriteMaxPixel: number;
51
+ /** Distance at or below which sprites stop growing further. */
52
+ minScaleDistanceMeters: number;
53
+ /** Distance at or above which sprites stop shrinking further. */
54
+ maxScaleDistanceMeters: number;
59
55
  }
60
56
  /**
61
57
  * Fills missing {@link SpriteScalingOptions} values with defaults so downstream math can assume a complete object.
@@ -64,12 +60,12 @@ export interface ResolvedSpriteScalingOptions {
64
60
  */
65
61
  export declare const resolveScalingOptions: (options?: SpriteScalingOptions) => ResolvedSpriteScalingOptions;
66
62
  /**
67
- * Computes a linear scale factor based on zoom level.
68
- * @param {number} zoom - Current zoom level from MapLibre's camera.
63
+ * Computes a scale factor based on camera-to-sprite distance.
64
+ * @param {number} distanceMeters - Calculated distance from camera to sprite.
69
65
  * @param {ResolvedSpriteScalingOptions} scaling - Resolved scaling options.
70
- * @returns {number} Scale value interpolated between {@link ResolvedSpriteScalingOptions.scaleMin} and {@link ResolvedSpriteScalingOptions.scaleMax}.
66
+ * @returns {number} Scale multiplier that clamps near/far distances to maintain consistent sizing.
71
67
  */
72
- export declare const calculateZoomScaleFactor: (zoom: number, scaling: ResolvedSpriteScalingOptions) => number;
68
+ export declare const calculateDistanceScaleFactor: (distanceMeters: number, scaling: ResolvedSpriteScalingOptions) => number;
73
69
  /**
74
70
  * Calculates meters per pixel at the given latitude.
75
71
  * Uses Web Mercator scale and applies the latitude-based cosine correction.
@@ -95,32 +91,30 @@ export declare const calculateDistanceAndBearingMeters: (from: SpriteLocation, t
95
91
  bearingDeg: number;
96
92
  };
97
93
  /**
98
- * Calculates billboard image dimensions in pixels and clamps them to display limits.
94
+ * Calculates billboard image dimensions in pixels.
99
95
  * @param {number | undefined} imageWidth - Source bitmap width in pixels.
100
96
  * @param {number | undefined} imageHeight - Source bitmap height in pixels.
101
97
  * @param {number} baseMetersPerPixel - Base scale derived from map zoom and latitude.
102
98
  * @param {number} imageScale - User-provided scale multiplier.
103
- * @param {number} zoomScaleFactor - Zoom-dependent scale multiplier derived from {@link calculateZoomScaleFactor}.
99
+ * @param {number} distanceScaleFactor - Distance-dependent scale multiplier.
104
100
  * @param {number} effectivePixelsPerMeter - Conversion between world meters and screen pixels.
105
- * @param {number} spriteMinPixel - Lower pixel clamp for the sprite's largest side.
106
- * @param {number} spriteMaxPixel - Upper pixel clamp for the sprite's largest side.
107
- * @returns {{ width: number; height: number; scaleAdjustment: number }} Pixel dimensions alongside the scale factor applied during clamping.
101
+ * @returns {{ width: number; height: number; scaleAdjustment: number }} Pixel dimensions alongside the scale factor (always 1 without clamping).
108
102
  */
109
- export declare const calculateBillboardPixelDimensions: (imageWidth: number | undefined, imageHeight: number | undefined, baseMetersPerPixel: number, imageScale: number, zoomScaleFactor: number, effectivePixelsPerMeter: number, spriteMinPixel: number, spriteMaxPixel: number) => {
103
+ export declare const calculateBillboardPixelDimensions: (imageWidth: number | undefined, imageHeight: number | undefined, baseMetersPerPixel: number, imageScale: number, distanceScaleFactor: number, effectivePixelsPerMeter: number) => {
110
104
  width: number;
111
105
  height: number;
112
106
  scaleAdjustment: number;
113
107
  };
114
108
  /**
115
109
  * Computes the billboard offset in screen-space pixels.
116
- * @param {SpriteImageOffset | undefined} offset - Offset configuration describing length (meters) and heading (degrees).
110
+ * @param {OffsetInput} offset - Offset configuration describing length (meters) and heading (degrees).
117
111
  * @param {number} imageScale - User-provided scale multiplier applied to the offset distance.
118
- * @param {number} zoomScaleFactor - Zoom-dependent scale multiplier.
112
+ * @param {number} distanceScaleFactor - Distance-dependent scale multiplier.
119
113
  * @param {number} effectivePixelsPerMeter - Conversion factor from meters to pixels.
120
114
  * @param {number} [sizeScaleAdjustment=1] - Additional scale factor applied when sprite size is clamped.
121
115
  * @returns {SpriteScreenPoint} Screen-space offset relative to the billboard center.
122
116
  */
123
- export declare const calculateBillboardOffsetPixels: (offset: SpriteImageOffset | undefined, imageScale: number, zoomScaleFactor: number, effectivePixelsPerMeter: number, sizeScaleAdjustment?: number) => SpriteScreenPoint;
117
+ export declare const calculateBillboardOffsetPixels: (offset: OffsetInput, imageScale: number, distanceScaleFactor: number, effectivePixelsPerMeter: number, sizeScaleAdjustment?: number) => SpriteScreenPoint;
124
118
  /**
125
119
  * Computes the screen-space shift caused by anchor rotation for billboards.
126
120
  * @param {number} halfWidth - Half of the sprite width in pixels.
@@ -136,14 +130,10 @@ export declare const calculateBillboardAnchorShiftPixels: (halfWidth: number, ha
136
130
  * @param {number | undefined} imageHeight - Source bitmap height in pixels.
137
131
  * @param {number} baseMetersPerPixel - World meters represented by a pixel at the current zoom.
138
132
  * @param {number} imageScale - User-provided scale multiplier.
139
- * @param {number} zoomScaleFactor - Zoom-dependent scale multiplier.
140
- * @returns {{ width: number; height: number; scaleAdjustment: number }} World dimensions in meters and the applied clamp scale factor.
133
+ * @param {number} distanceScaleFactor - Distance-dependent scale multiplier.
134
+ * @returns {{ width: number; height: number; scaleAdjustment: number }} World dimensions in meters and the applied clamp scale factor (always 1 without clamping).
141
135
  */
142
- export declare const calculateSurfaceWorldDimensions: (imageWidth: number | undefined, imageHeight: number | undefined, baseMetersPerPixel: number, imageScale: number, zoomScaleFactor: number, options?: {
143
- effectivePixelsPerMeter?: number;
144
- spriteMinPixel?: number;
145
- spriteMaxPixel?: number;
146
- }) => {
136
+ export declare const calculateSurfaceWorldDimensions: (imageWidth: number | undefined, imageHeight: number | undefined, baseMetersPerPixel: number, imageScale: number, distanceScaleFactor: number) => {
147
137
  width: number;
148
138
  height: number;
149
139
  scaleAdjustment: number;
@@ -159,13 +149,13 @@ export declare const calculateSurfaceWorldDimensions: (imageWidth: number | unde
159
149
  export declare const calculateSurfaceAnchorShiftMeters: (halfWidthMeters: number, halfHeightMeters: number, anchor: SpriteAnchor | undefined, totalRotateDeg: number) => SurfaceCorner;
160
150
  /**
161
151
  * Calculates surface image offsets in meters.
162
- * @param {SpriteImageOffset | undefined} offset - Offset configuration for the surface sprite.
152
+ * @param {OffsetInput} offset - Offset configuration for the surface sprite.
163
153
  * @param {number} imageScale - User-provided scale multiplier applied to the offset distance.
164
- * @param {number} zoomScaleFactor - Zoom-dependent scale multiplier.
154
+ * @param {number} distanceScaleFactor - Distance-dependent scale multiplier.
165
155
  * @param {number} [sizeScaleAdjustment=1] - Additional scale factor applied when sprite size is clamped.
166
156
  * @returns {SurfaceCorner} Offset vector in meters.
167
157
  */
168
- export declare const calculateSurfaceOffsetMeters: (offset: SpriteImageOffset | undefined, imageScale: number, zoomScaleFactor: number, sizeScaleAdjustment?: number) => SurfaceCorner;
158
+ export declare const calculateSurfaceOffsetMeters: (offset: OffsetInput, imageScale: number, distanceScaleFactor: number, sizeScaleAdjustment?: number) => SurfaceCorner;
169
159
  /**
170
160
  * Adds east/north distances (meters) to a longitude/latitude pair.
171
161
  * @param {number} location - Base location in degrees.
@@ -269,20 +259,16 @@ export interface BillboardCenterParams {
269
259
  baseMetersPerPixel: number;
270
260
  /** User-provided scaling multiplier. */
271
261
  imageScale: number;
272
- /** Zoom-dependent scale multiplier. */
273
- zoomScaleFactor: number;
262
+ /** Distance-dependent scale multiplier. */
263
+ distanceScaleFactor: number;
274
264
  /** Pixels per meter after perspective adjustments. */
275
265
  effectivePixelsPerMeter: number;
276
- /** Lower clamp for the sprite's largest pixel dimension. */
277
- spriteMinPixel: number;
278
- /** Upper clamp for the sprite's largest pixel dimension. */
279
- spriteMaxPixel: number;
280
266
  /** Aggregate rotation applied to the sprite in degrees. */
281
267
  totalRotateDeg: number;
282
268
  /** Anchor definition normalized between -1 and 1. */
283
269
  anchor?: Readonly<SpriteAnchor>;
284
270
  /** Offset definition applied in meters/deg. */
285
- offset?: Readonly<SpriteImageOffset>;
271
+ offset?: OffsetInput;
286
272
  }
287
273
  /**
288
274
  * Resolved properties describing the billboard center and derived dimensions.
@@ -290,13 +276,13 @@ export interface BillboardCenterParams {
290
276
  export interface BillboardCenterResult {
291
277
  /** Screen-space coordinate after offset adjustments. */
292
278
  center: SpriteScreenPoint;
293
- /** Half of the clamped pixel width. */
279
+ /** Half of the pixel width. */
294
280
  halfWidth: number;
295
- /** Half of the clamped pixel height. */
281
+ /** Half of the pixel height. */
296
282
  halfHeight: number;
297
- /** Full pixel width after scaling and clamping. */
283
+ /** Full pixel width after scaling. */
298
284
  pixelWidth: number;
299
- /** Full pixel height after scaling and clamping. */
285
+ /** Full pixel height after scaling. */
300
286
  pixelHeight: number;
301
287
  /** Pixel delta caused by anchor rotation. */
302
288
  anchorShift: SpritePoint;
@@ -365,20 +351,14 @@ export interface SurfaceCenterParams {
365
351
  baseMetersPerPixel: number;
366
352
  /** User-provided scaling multiplier. */
367
353
  imageScale: number;
368
- /** Zoom-dependent scale multiplier. */
369
- zoomScaleFactor: number;
354
+ /** Distance-dependent scale multiplier. */
355
+ distanceScaleFactor: number;
370
356
  /** Rotation applied to the sprite in degrees. */
371
357
  totalRotateDeg: number;
372
358
  /** Anchor definition normalized between -1 and 1. */
373
359
  anchor?: Readonly<SpriteAnchor>;
374
360
  /** Offset definition applied in meters/deg. */
375
- offset?: Readonly<SpriteImageOffset>;
376
- /** Conversion rate from meters to on-screen pixels. */
377
- effectivePixelsPerMeter?: number;
378
- /** Lower clamp for the sprite's largest pixel dimension. */
379
- spriteMinPixel?: number;
380
- /** Upper clamp for the sprite's largest pixel dimension. */
381
- spriteMaxPixel?: number;
361
+ offset?: OffsetInput;
382
362
  /** Projection function mapping longitude/latitude to screen space. */
383
363
  project?: ProjectLngLatFn;
384
364
  /** Projection into clip space when available. */
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.17.0
3
+ * version: 0.19.0
4
4
  * description: MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/maplibre-gl-layers.git
8
- * git.commit.hash: 9fe9aa30db6602d13643e32c94af39ae2b26b082
8
+ * git.commit.hash: 7bc93c11d7855dedb8d60f140af4e413252c32a7
9
9
  */
10
10
 
11
11
  import { ImageHandleBufferController, IdHandler, RenderTargetBucketBuffers, RenderTargetEntryLike, SpriteOriginReference } from '../internalTypes';
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.17.0
3
+ * version: 0.19.0
4
4
  * description: MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/maplibre-gl-layers.git
8
- * git.commit.hash: 9fe9aa30db6602d13643e32c94af39ae2b26b082
8
+ * git.commit.hash: 7bc93c11d7855dedb8d60f140af4e413252c32a7
9
9
  */
10
10
 
11
11
  declare const _default: {
package/package.json CHANGED
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "git": {
3
3
  "tags": [
4
- "0.17.0"
4
+ "0.19.0"
5
5
  ],
6
6
  "branches": [
7
7
  "main"
8
8
  ],
9
- "version": "0.17.0",
9
+ "version": "0.19.0",
10
10
  "commit": {
11
- "hash": "9fe9aa30db6602d13643e32c94af39ae2b26b082",
12
- "shortHash": "9fe9aa3",
13
- "date": "2025-11-20T13:44:53+09:00Z",
11
+ "hash": "7bc93c11d7855dedb8d60f140af4e413252c32a7",
12
+ "shortHash": "7bc93c1",
13
+ "date": "2025-11-23T22:35:51+09:00Z",
14
14
  "message": "Merge branch 'develop'"
15
15
  }
16
16
  },
17
- "version": "0.17.0",
17
+ "version": "0.19.0",
18
18
  "description": "MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images",
19
19
  "author": "Kouji Matsui (@kekyo@mi.kekyo.net)",
20
20
  "license": "MIT",
@@ -1,48 +0,0 @@
1
- /*!
2
- * name: maplibre-gl-layers
3
- * version: 0.17.0
4
- * description: MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images
5
- * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
- * license: MIT
7
- * repository.url: https://github.com/kekyo/maplibre-gl-layers.git
8
- * git.commit.hash: 9fe9aa30db6602d13643e32c94af39ae2b26b082
9
- */
10
-
11
- import { SpriteInterpolationOptions, SpriteLocation } from '../types';
12
- import { SpriteInterpolationEvaluationParams, SpriteInterpolationEvaluationResult, SpriteInterpolationState } from '../internalTypes';
13
- /**
14
- * Parameters required to create a fresh interpolation state for the next animation segment.
15
- */
16
- export interface CreateInterpolationStateParams {
17
- /** Sprite location currently rendered on screen. */
18
- currentLocation: SpriteLocation;
19
- /** Previously commanded target, used for feedforward extrapolation. */
20
- lastCommandLocation?: SpriteLocation;
21
- /** Upcoming commanded target that the sprite should reach. */
22
- nextCommandLocation: SpriteLocation;
23
- /** Raw interpolation options supplied by the caller. */
24
- options: SpriteInterpolationOptions;
25
- }
26
- /**
27
- * Result of preparing interpolation state, including a flag denoting whether any lerp is needed.
28
- */
29
- export interface CreateInterpolationStateResult {
30
- /** Prepared interpolation state ready for evaluation. */
31
- readonly state: SpriteInterpolationState<SpriteLocation>;
32
- /** Indicates whether lerping is needed or an immediate snap is sufficient. */
33
- readonly requiresInterpolation: boolean;
34
- }
35
- /**
36
- * Creates interpolation state for the next sprite movement and signals if interpolation is necessary.
37
- *
38
- * @param params - The context needed to build interpolation state, including locations and configuration.
39
- * @returns The prepared state alongside a boolean indicating whether animation should run.
40
- */
41
- export declare const createInterpolationState: (params: CreateInterpolationStateParams) => CreateInterpolationStateResult;
42
- /**
43
- * Evaluates an interpolation state at a specific point in time and returns the intermediate location.
44
- *
45
- * @param params - The interpolation state and the reference timestamp for evaluation.
46
- * @returns The lerped location, whether the interpolation has finished, and the effective start time.
47
- */
48
- export declare const evaluateInterpolation: (params: SpriteInterpolationEvaluationParams) => SpriteInterpolationEvaluationResult;