maplibre-gl-layers 0.3.0 → 0.5.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.
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.3.0
3
+ * version: 0.5.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: fd90d1fd66e4ca9c0defa49e68ecaeb9c14fbd06
8
+ * git.commit.hash: ce37eea48b788c36b4bf98cdfce83b95a85833ee
9
9
  */
10
10
 
11
11
  import { EasingFunction, SpriteInterpolationMode, SpriteInterpolationOptions, SpriteLocation } from './types';
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.3.0
3
+ * version: 0.5.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: fd90d1fd66e4ca9c0defa49e68ecaeb9c14fbd06
8
+ * git.commit.hash: ce37eea48b788c36b4bf98cdfce83b95a85833ee
9
9
  */
10
10
 
11
11
  import { SpriteLocation } from './types';
package/dist/math.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.3.0
3
+ * version: 0.5.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: fd90d1fd66e4ca9c0defa49e68ecaeb9c14fbd06
8
+ * git.commit.hash: ce37eea48b788c36b4bf98cdfce83b95a85833ee
9
9
  */
10
10
 
11
11
  import { SpriteAnchor, SpriteImageOffset, SpriteLocation, SpriteScalingOptions } from './types';
@@ -30,11 +30,6 @@ export declare const RAD2DEG: number;
30
30
  * @constant
31
31
  */
32
32
  export declare const TILE_SIZE = 512;
33
- /**
34
- * Default values that fill in missing {@link SpriteScalingOptions} fields supplied by callers.
35
- * @constant
36
- */
37
- export declare const DEFAULT_SPRITE_SCALING_OPTIONS: SpriteScalingOptions;
38
33
  /**
39
34
  * Structure holding resolved sprite scaling options.
40
35
  * @property {number} metersPerPixel - Effective number of meters represented by each rendered pixel.
@@ -45,7 +40,7 @@ export declare const DEFAULT_SPRITE_SCALING_OPTIONS: SpriteScalingOptions;
45
40
  * @property {number} spriteMinPixel - Lower clamp for sprite size in pixels.
46
41
  * @property {number} spriteMaxPixel - Upper clamp for sprite size in pixels.
47
42
  */
48
- export type ResolvedSpriteScalingOptions = {
43
+ export interface ResolvedSpriteScalingOptions {
49
44
  metersPerPixel: number;
50
45
  zoomMin: number;
51
46
  zoomMax: number;
@@ -53,7 +48,7 @@ export type ResolvedSpriteScalingOptions = {
53
48
  scaleMax: number;
54
49
  spriteMinPixel: number;
55
50
  spriteMaxPixel: number;
56
- };
51
+ }
57
52
  /**
58
53
  * Fills missing {@link SpriteScalingOptions} values with defaults so downstream math can assume a complete object.
59
54
  * @param options Optional scaling configuration from the caller.
@@ -101,11 +96,12 @@ export declare const calculateDistanceAndBearingMeters: (from: SpriteLocation, t
101
96
  * @param {number} effectivePixelsPerMeter - Conversion between world meters and screen pixels.
102
97
  * @param {number} spriteMinPixel - Lower pixel clamp for the sprite's largest side.
103
98
  * @param {number} spriteMaxPixel - Upper pixel clamp for the sprite's largest side.
104
- * @returns {{ width: number; height: number }} Pixel dimensions after scaling and clamping.
99
+ * @returns {{ width: number; height: number; scaleAdjustment: number }} Pixel dimensions alongside the scale factor applied during clamping.
105
100
  */
106
101
  export declare const calculateBillboardPixelDimensions: (imageWidth: number | undefined, imageHeight: number | undefined, baseMetersPerPixel: number, imageScale: number, zoomScaleFactor: number, effectivePixelsPerMeter: number, spriteMinPixel: number, spriteMaxPixel: number) => {
107
102
  width: number;
108
103
  height: number;
104
+ scaleAdjustment: number;
109
105
  };
110
106
  /**
111
107
  * Computes the billboard offset in screen-space pixels.
@@ -113,9 +109,10 @@ export declare const calculateBillboardPixelDimensions: (imageWidth: number | un
113
109
  * @param {number} imageScale - User-provided scale multiplier applied to the offset distance.
114
110
  * @param {number} zoomScaleFactor - Zoom-dependent scale multiplier.
115
111
  * @param {number} effectivePixelsPerMeter - Conversion factor from meters to pixels.
112
+ * @param {number} [sizeScaleAdjustment=1] - Additional scale factor applied when sprite size is clamped.
116
113
  * @returns {{ x: number; y: number }} Screen-space offset relative to the billboard center.
117
114
  */
118
- export declare const calculateBillboardOffsetPixels: (offset: SpriteImageOffset | undefined, imageScale: number, zoomScaleFactor: number, effectivePixelsPerMeter: number) => {
115
+ export declare const calculateBillboardOffsetPixels: (offset: SpriteImageOffset | undefined, imageScale: number, zoomScaleFactor: number, effectivePixelsPerMeter: number, sizeScaleAdjustment?: number) => {
119
116
  x: number;
120
117
  y: number;
121
118
  };
@@ -138,11 +135,16 @@ export declare const calculateBillboardAnchorShiftPixels: (halfWidth: number, ha
138
135
  * @param {number} baseMetersPerPixel - World meters represented by a pixel at the current zoom.
139
136
  * @param {number} imageScale - User-provided scale multiplier.
140
137
  * @param {number} zoomScaleFactor - Zoom-dependent scale multiplier.
141
- * @returns {{ width: number; height: number }} Dimensions expressed as world-space meters.
138
+ * @returns {{ width: number; height: number; scaleAdjustment: number }} World dimensions in meters and the applied clamp scale factor.
142
139
  */
143
- export declare const calculateSurfaceWorldDimensions: (imageWidth: number | undefined, imageHeight: number | undefined, baseMetersPerPixel: number, imageScale: number, zoomScaleFactor: number) => {
140
+ export declare const calculateSurfaceWorldDimensions: (imageWidth: number | undefined, imageHeight: number | undefined, baseMetersPerPixel: number, imageScale: number, zoomScaleFactor: number, options?: {
141
+ effectivePixelsPerMeter?: number;
142
+ spriteMinPixel?: number;
143
+ spriteMaxPixel?: number;
144
+ }) => {
144
145
  width: number;
145
146
  height: number;
147
+ scaleAdjustment: number;
146
148
  };
147
149
  /**
148
150
  * Computes east/north shifts from anchor rotation on surface images.
@@ -160,9 +162,11 @@ export declare const calculateSurfaceAnchorShiftMeters: (halfWidthMeters: number
160
162
  * Calculates surface image offsets in meters.
161
163
  * @param {SpriteImageOffset | undefined} offset - Offset configuration for the surface sprite.
162
164
  * @param {number} imageScale - User-provided scale multiplier applied to the offset distance.
165
+ * @param {number} zoomScaleFactor - Zoom-dependent scale multiplier.
166
+ * @param {number} [sizeScaleAdjustment=1] - Additional scale factor applied when sprite size is clamped.
163
167
  * @returns {{ east: number; north: number }} Offset vector in meters.
164
168
  */
165
- export declare const calculateSurfaceOffsetMeters: (offset: SpriteImageOffset | undefined, imageScale: number) => {
169
+ export declare const calculateSurfaceOffsetMeters: (offset: SpriteImageOffset | undefined, imageScale: number, zoomScaleFactor: number, sizeScaleAdjustment?: number) => {
166
170
  east: number;
167
171
  north: number;
168
172
  };
@@ -399,6 +403,9 @@ export declare const calculateBillboardCornerScreenPositions: (params: Billboard
399
403
  * @property {number} totalRotateDeg - Rotation applied to the sprite in degrees.
400
404
  * @property {SpriteAnchor} [anchor] - Anchor definition normalized between -1 and 1.
401
405
  * @property {SpriteImageOffset} [offset] - Offset definition applied in meters/deg.
406
+ * @property {number} [effectivePixelsPerMeter] - Conversion rate from meters to on-screen pixels.
407
+ * @property {number} [spriteMinPixel] - Lower clamp for the sprite's largest pixel dimension.
408
+ * @property {number} [spriteMaxPixel] - Upper clamp for the sprite's largest pixel dimension.
402
409
  * @property {ProjectLngLatFn} [project] - Projection function mapping longitude/latitude to screen space.
403
410
  * @property {ProjectToClipSpaceFn} [projectToClipSpace] - Projection into clip space when available.
404
411
  * @property {number} [drawingBufferWidth] - WebGL drawing buffer width in device pixels.
@@ -417,6 +424,9 @@ export type SurfaceCenterParams = {
417
424
  totalRotateDeg: number;
418
425
  anchor?: SpriteAnchor;
419
426
  offset?: SpriteImageOffset;
427
+ effectivePixelsPerMeter?: number;
428
+ spriteMinPixel?: number;
429
+ spriteMaxPixel?: number;
420
430
  project?: ProjectLngLatFn;
421
431
  projectToClipSpace?: ProjectToClipSpaceFn;
422
432
  drawingBufferWidth?: number;
@@ -429,7 +439,7 @@ export type SurfaceCenterParams = {
429
439
  * Output describing the resolved surface center and displacement details.
430
440
  * @typedef SurfaceCenterResult
431
441
  * @property {{ x: number; y: number } | null} center - Projected screen coordinates or `null` when projection fails.
432
- * @property {{ width: number; height: number }} worldDimensions - Sprite dimensions in world meters.
442
+ * @property {{ width: number; height: number; scaleAdjustment: number }} worldDimensions - Sprite dimensions in world meters.
433
443
  * @property {{ east: number; north: number }} totalDisplacement - Combined anchor and offset displacement in meters.
434
444
  * @property {SpriteLocation} displacedLngLat - Geographic coordinates after applying displacement.
435
445
  * @property {{ x: number; y: number } | null | undefined} [anchorlessCenter] - Anchorless screen coordinates when requested.
@@ -444,6 +454,7 @@ export type SurfaceCenterResult = {
444
454
  worldDimensions: {
445
455
  width: number;
446
456
  height: number;
457
+ scaleAdjustment: number;
447
458
  };
448
459
  totalDisplacement: {
449
460
  east: number;
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.3.0
3
+ * version: 0.5.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: fd90d1fd66e4ca9c0defa49e68ecaeb9c14fbd06
8
+ * git.commit.hash: ce37eea48b788c36b4bf98cdfce83b95a85833ee
9
9
  */
10
10
 
11
11
  import { EasingFunction, SpriteNumericInterpolationOptions } from './types';
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.3.0
3
+ * version: 0.5.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: fd90d1fd66e4ca9c0defa49e68ecaeb9c14fbd06
8
+ * git.commit.hash: ce37eea48b788c36b4bf98cdfce83b95a85833ee
9
9
  */
10
10
 
11
11
  import { SpriteNumericInterpolationOptions } from './types';
package/dist/types.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.3.0
3
+ * version: 0.5.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: fd90d1fd66e4ca9c0defa49e68ecaeb9c14fbd06
8
+ * git.commit.hash: ce37eea48b788c36b4bf98cdfce83b95a85833ee
9
9
  */
10
10
 
11
11
  import { CustomLayerInterface } from 'maplibre-gl';
@@ -449,11 +449,14 @@ export type SpriteLayerEventListener<T, K extends keyof SpriteLayerEventMap<T>>
449
449
  * @property {number | undefined} zoomMax - Maximum zoom level before scaling adjustments apply.
450
450
  * @property {number | undefined} scaleMin - Lower limit for scale clamping.
451
451
  * @property {number | undefined} scaleMax - Upper limit for scale clamping.
452
- * @property {number | undefined} spriteMinPixel - Minimum on-screen pixel size for sprites.
453
- * @property {number | undefined} spriteMaxPixel - Maximum on-screen pixel size for sprites.
452
+ * @property {number | undefined} spriteMinPixel - Minimum on-screen pixel size for sprites (0 disables the lower clamp).
453
+ * @property {number | undefined} spriteMaxPixel - Maximum on-screen pixel size for sprites (0 disables the upper clamp).
454
454
  */
455
455
  export interface SpriteScalingOptions {
456
- /** Overrides the baseline meters-per-pixel ratio. */
456
+ /**
457
+ * Overrides the baseline meters-per-pixel ratio.
458
+ * We strongly recommend specifying the default value of 1, as this value affects all calculations.
459
+ */
457
460
  metersPerPixel?: number;
458
461
  /** Minimum zoom level before scaling adjustments apply. */
459
462
  zoomMin?: number;
@@ -463,16 +466,26 @@ export interface SpriteScalingOptions {
463
466
  scaleMin?: number;
464
467
  /** Upper limit for scale clamping. */
465
468
  scaleMax?: number;
466
- /** Minimum on-screen pixel size for sprites. */
469
+ /** Minimum on-screen pixel size for sprites (0 disables the lower clamp). */
467
470
  spriteMinPixel?: number;
468
- /** Maximum on-screen pixel size for sprites. */
471
+ /** Maximum on-screen pixel size for sprites (0 disables the upper clamp). */
469
472
  spriteMaxPixel?: number;
470
473
  }
474
+ /**
475
+ * Unlimited (default) values that fill in missing {@link SpriteScalingOptions} fields supplied by callers.
476
+ * metersPerPixel is 1.
477
+ */
478
+ export declare const UNLIMITED_SPRITE_SCALING_OPTIONS: SpriteScalingOptions;
479
+ /**
480
+ * Standard values that fill in missing {@link SpriteScalingOptions} fields supplied by callers.
481
+ * metersPerPixel is 1.
482
+ */
483
+ export declare const STANDARD_SPRITE_SCALING_OPTIONS: SpriteScalingOptions;
471
484
  /**
472
485
  * Options accepted when creating a SpriteLayer.
473
486
  *
474
487
  * @property {string | undefined} id - Optional layer identifier supplied to MapLibre.
475
- * @property {SpriteScalingOptions | undefined} spriteScaling - Optional scaling controls.
488
+ * @property {SpriteScalingOptions | undefined} spriteScaling - Optional scaling controls. Default is UNLIMITED_SPRITE_SCALING_OPTIONS.
476
489
  */
477
490
  export interface SpriteLayerOptions {
478
491
  /** Optional layer identifier supplied to MapLibre. */
@@ -489,6 +502,8 @@ export type SpriteTextGlyphPaddingPixel = number | {
489
502
  bottom?: number;
490
503
  left?: number;
491
504
  };
505
+ /** Border sides that can be rendered for a text glyph outline. */
506
+ export type SpriteTextGlyphBorderSide = 'top' | 'right' | 'bottom' | 'left';
492
507
  /** Additional size options accepted by registerTextGlyph. */
493
508
  export type SpriteTextGlyphDimensions = {
494
509
  readonly lineHeightPixel: number;
@@ -501,7 +516,6 @@ export type SpriteTextGlyphDimensions = {
501
516
  * Text glyph appearance options.
502
517
  *
503
518
  * @property {string | undefined} fontFamily - Font family name.
504
- * @property {number | undefined} fontSizePixel - Font size in pixels.
505
519
  * @property {string | undefined} fontWeight - CSS font-weight value.
506
520
  * @property {'normal' | 'italic' | undefined} fontStyle - CSS font-style value.
507
521
  * @property {string | undefined} color - Text fill color.
@@ -510,15 +524,15 @@ export type SpriteTextGlyphDimensions = {
510
524
  * @property {SpriteTextGlyphPaddingPixel | undefined} paddingPixel - Padding around the glyph.
511
525
  * @property {string | undefined} borderColor - Outline color.
512
526
  * @property {number | undefined} borderWidthPixel - Outline width in pixels.
527
+ * @property {SpriteTextGlyphBorderSide[] | undefined} borderSides - Border sides to draw (defaults to all four).
513
528
  * @property {number | undefined} borderRadiusPixel - Border radius in pixels.
514
529
  * @property {SpriteTextGlyphHorizontalAlign | undefined} textAlign - Horizontal alignment of multiline text.
515
- * @property {number | undefined} renderPixelRatio - Pixel ratio used when rendering the glyph.
530
+ * @property {number | undefined} fontSizePixelHint - It is not specified normally. Preferred font size in pixels before dimension constraints are enforced.
531
+ * @property {number | undefined} renderPixelRatio - Canvas pixel ratio multiplier (defaults to 1) applied before the glyph is resampled to its logical size.
516
532
  */
517
533
  export interface SpriteTextGlyphOptions {
518
534
  /** Font family name. */
519
535
  fontFamily?: string;
520
- /** Font size in pixels. */
521
- fontSizePixel?: number;
522
536
  /** CSS font-weight value. */
523
537
  fontWeight?: string;
524
538
  /** CSS font-style value. */
@@ -535,11 +549,15 @@ export interface SpriteTextGlyphOptions {
535
549
  borderColor?: string;
536
550
  /** Outline width in pixels. */
537
551
  borderWidthPixel?: number;
552
+ /** Border sides to draw; defaults to all four sides when omitted. */
553
+ borderSides?: readonly SpriteTextGlyphBorderSide[];
538
554
  /** Border radius in pixels. */
539
555
  borderRadiusPixel?: number;
540
556
  /** Horizontal alignment of multiline text. */
541
557
  textAlign?: SpriteTextGlyphHorizontalAlign;
542
- /** Pixel ratio used when rendering the glyph. */
558
+ /** It is not specified normally. Preferred font size in pixels; may shrink automatically to satisfy provided dimensions. */
559
+ fontSizePixelHint?: number;
560
+ /** Pixel ratio used when rendering the glyph; defaults to 1 and values > 1 render at higher resolution before downscaling. */
543
561
  renderPixelRatio?: number;
544
562
  }
545
563
  /**
package/dist/utils.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.3.0
3
+ * version: 0.5.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: fd90d1fd66e4ca9c0defa49e68ecaeb9c14fbd06
8
+ * git.commit.hash: ce37eea48b788c36b4bf98cdfce83b95a85833ee
9
9
  */
10
10
 
11
11
  /**
package/package.json CHANGED
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "git": {
3
3
  "tags": [
4
- "0.3.0"
4
+ "0.5.0"
5
5
  ],
6
6
  "branches": [
7
7
  "main"
8
8
  ],
9
- "version": "0.3.0",
9
+ "version": "0.5.0",
10
10
  "commit": {
11
- "hash": "fd90d1fd66e4ca9c0defa49e68ecaeb9c14fbd06",
12
- "shortHash": "fd90d1f",
13
- "date": "2025-10-29T13:58:42+09:00Z",
11
+ "hash": "ce37eea48b788c36b4bf98cdfce83b95a85833ee",
12
+ "shortHash": "ce37eea",
13
+ "date": "2025-10-30T12:28:02+09:00Z",
14
14
  "message": "Merge branch 'develop'"
15
15
  }
16
16
  },
17
- "version": "0.3.0",
17
+ "version": "0.5.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",
@@ -54,7 +54,7 @@
54
54
  ],
55
55
  "scripts": {
56
56
  "build": "vite build",
57
- "dev": "echo \"maplibre-gl-layers does not have dev rule.\"",
57
+ "dev": "npm run build",
58
58
  "test": "npm run build && vitest run",
59
59
  "test:e2e": "npm run build && playwright test",
60
60
  "pack": "npm run build && screw-up pack --pack-destination ../artifacts"