From 15fbffa6c1ef00c4b1d20c48aba96b0bc4e69b80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Bujnovsk=C3=BD?= <2659269+miakh@users.noreply.github.com> Date: Fri, 28 Aug 2026 00:09:06 +0200 Subject: [PATCH 1/2] fix(maplibre): align map props with MapOptions --- docs/api-reference/maplibre/map.md | 8 +++--- .../react-maplibre/src/maplibre/maplibre.ts | 14 +++++------ package.json | 6 +++-- test/types/maplibre-map-props.ts | 25 +++++++++++++++++++ test/types/tsconfig.json | 12 +++++++++ yarn.lock | 1 + 6 files changed, 53 insertions(+), 13 deletions(-) create mode 100644 test/types/maplibre-map-props.ts create mode 100644 test/types/tsconfig.json diff --git a/docs/api-reference/maplibre/map.md b/docs/api-reference/maplibre/map.md index 6af3d63ef..c88c9633c 100644 --- a/docs/api-reference/maplibre/map.md +++ b/docs/api-reference/maplibre/map.md @@ -129,25 +129,25 @@ Default: `null` The padding in pixels around the viewport. -#### `minZoom`: number {#minzoom} +#### `minZoom`: number | null {#minzoom} Default: `0` The minimum zoom level of the map (0-24). -#### `maxZoom`: number {#maxzoom} +#### `maxZoom`: number | null {#maxzoom} Default: `22` The maximum zoom level of the map (0-24). -#### `minPitch`: number {#minpitch} +#### `minPitch`: number | null {#minpitch} Default: `0` The minimum pitch of the map (0-85). -#### `maxPitch`: number {#maxpitch} +#### `maxPitch`: number | null {#maxpitch} Default: `60` diff --git a/modules/react-maplibre/src/maplibre/maplibre.ts b/modules/react-maplibre/src/maplibre/maplibre.ts index 3bef84e39..7de2c0756 100644 --- a/modules/react-maplibre/src/maplibre/maplibre.ts +++ b/modules/react-maplibre/src/maplibre/maplibre.ts @@ -25,7 +25,7 @@ import type { TerrainSpecification, ProjectionSpecification } from '../types/style-spec'; -import type {MapInstance} from '../types/lib'; +import type {MapInstance, MapOptions} from '../types/lib'; import type {CameraUpdateTransformFunction, MapEventType} from 'maplibre-gl'; import type { MapCallbacks, @@ -87,27 +87,27 @@ export type MaplibreProps = Partial & /** Minimum zoom available to the map. * @default 0 */ - minZoom?: number; + minZoom?: MapOptions['minZoom']; /** Maximum zoom available to the map. * @default 22 */ - maxZoom?: number; + maxZoom?: MapOptions['maxZoom']; /** Minimum pitch available to the map. * @default 0 */ - minPitch?: number; + minPitch?: MapOptions['minPitch']; /** Maximum pitch available to the map. * @default 85 */ - maxPitch?: number; + maxPitch?: MapOptions['maxPitch']; /** Bounds of the map. * @default [-180, -85.051129, 180, 85.051129] */ - maxBounds?: [number, number, number, number]; + maxBounds?: MapOptions['maxBounds']; /** Whether to render copies of the world or not. * @default true */ - renderWorldCopies?: boolean; + renderWorldCopies?: MapOptions['renderWorldCopies']; }; const DEFAULT_STYLE = {version: 8, sources: {}, layers: []} as StyleSpecification; diff --git a/package.json b/package.json index 676adba92..d802f23e4 100644 --- a/package.json +++ b/package.json @@ -19,11 +19,12 @@ "playwright:install": "playwright install chromium", "publish-beta": "ocular-publish version-only-beta", "publish-prod": "ocular-publish version-only-prod", - "test": "ocular-test node headless", + "test": "npm run test-types && ocular-test node headless", "test-browser": "ocular-test browser", "test-fast": "ocular-build && ocular-test node", "test-headless": "ocular-test headless", - "test-node": "ocular-test node", + "test-node": "npm run test-types && ocular-test node", + "test-types": "tsc --build modules/main/tsconfig.json && tsc --project test/types/tsconfig.json", "metrics": "ocular-metrics", "update-release-branch": "scripts/update-release-branch.sh" }, @@ -42,6 +43,7 @@ "pre-commit": "^1.2.2", "react": "^18.0.0", "react-dom": "^18.0.0", + "typescript": "^6.0.3", "vitest": "^4.0.18" }, "pre-commit": [ diff --git a/test/types/maplibre-map-props.ts b/test/types/maplibre-map-props.ts new file mode 100644 index 000000000..d849c050c --- /dev/null +++ b/test/types/maplibre-map-props.ts @@ -0,0 +1,25 @@ +import type {ComponentProps} from 'react'; +import Map from 'react-map-gl/maplibre'; +import type {MapOptions} from 'maplibre-gl'; + +type MapProps = ComponentProps; + +type MutableMapOptionKeys = + | 'minZoom' + | 'maxZoom' + | 'minPitch' + | 'maxPitch' + | 'maxBounds' + | 'renderWorldCopies'; + +declare const mapOptions: Pick; +const mapProps: Pick = mapOptions; +const nullableCameraConstraints: Pick = { + minZoom: null, + maxZoom: null, + minPitch: null, + maxPitch: null +}; + +void mapProps; +void nullableCameraConstraints; diff --git a/test/types/tsconfig.json b/test/types/tsconfig.json new file mode 100644 index 000000000..07e5f7535 --- /dev/null +++ b/test/types/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "allowJs": false, + "noEmit": true, + "strictNullChecks": true, + "paths": { + "react-map-gl/maplibre": ["../../modules/main/dist/maplibre.d.ts"] + } + }, + "include": ["maplibre-map-props.ts"] +} diff --git a/yarn.lock b/yarn.lock index c04f430b6..e60df04c3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6444,6 +6444,7 @@ __metadata: pre-commit: "npm:^1.2.2" react: "npm:^18.0.0" react-dom: "npm:^18.0.0" + typescript: "npm:^6.0.3" vitest: "npm:^4.0.18" dependenciesMeta: esbuild: From 6b806ff5e1d437ef2aa967d51b77befe1749a6ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Bujnovsk=C3=BD?= <2659269+miakh@users.noreply.github.com> Date: Fri, 28 Aug 2026 10:10:32 +0200 Subject: [PATCH 2/2] fix(maplibre): restore native constraint resets --- docs/api-reference/maplibre/map.md | 46 ++++---- .../react-maplibre/src/maplibre/maplibre.ts | 64 ++++------ modules/react-maplibre/src/utils/transform.ts | 58 +++++---- .../test/components/map.spec.jsx | 111 ++++++++++++++++++ .../test/utils/transform.spec.js | 39 +++++- package.json | 6 +- test/types/maplibre-map-props.ts | 25 ---- test/types/tsconfig.json | 12 -- yarn.lock | 1 - 9 files changed, 234 insertions(+), 128 deletions(-) delete mode 100644 test/types/maplibre-map-props.ts delete mode 100644 test/types/tsconfig.json diff --git a/docs/api-reference/maplibre/map.md b/docs/api-reference/maplibre/map.md index c88c9633c..04e9af602 100644 --- a/docs/api-reference/maplibre/map.md +++ b/docs/api-reference/maplibre/map.md @@ -129,29 +129,29 @@ Default: `null` The padding in pixels around the viewport. -#### `minZoom`: number | null {#minzoom} - -Default: `0` - -The minimum zoom level of the map (0-24). - -#### `maxZoom`: number | null {#maxzoom} - -Default: `22` - -The maximum zoom level of the map (0-24). - -#### `minPitch`: number | null {#minpitch} - -Default: `0` - -The minimum pitch of the map (0-85). - -#### `maxPitch`: number | null {#maxpitch} - -Default: `60` - -The maximum pitch of the map (0-85). +#### `minZoom`: number | null | undefined {#minzoom} + +Default: native MapLibre default (currently `-2`) + +The minimum zoom level of the map. Passing `null` or `undefined` resets it to the native MapLibre default. + +#### `maxZoom`: number | null | undefined {#maxzoom} + +Default: native MapLibre default (currently `22`) + +The maximum zoom level of the map. Passing `null` or `undefined` resets it to the native MapLibre default. + +#### `minPitch`: number | null | undefined {#minpitch} + +Default: native MapLibre default (currently `0`) + +The minimum pitch of the map. Passing `null` or `undefined` resets it to the native MapLibre default. + +#### `maxPitch`: number | null | undefined {#maxpitch} + +Default: native MapLibre default (currently `60`) + +The maximum pitch of the map. Passing `null` or `undefined` resets it to the native MapLibre default. #### `maxBounds`: [LngLatBoundsLike](./types.md#lnglatboundslike) {#maxbounds} diff --git a/modules/react-maplibre/src/maplibre/maplibre.ts b/modules/react-maplibre/src/maplibre/maplibre.ts index 7de2c0756..cd3e35205 100644 --- a/modules/react-maplibre/src/maplibre/maplibre.ts +++ b/modules/react-maplibre/src/maplibre/maplibre.ts @@ -35,8 +35,24 @@ import type { MapMouseEvent } from '../types/events'; +const cameraConstraintNames = ['minZoom', 'maxZoom', 'minPitch', 'maxPitch'] as const; + +type ReactiveMapOptions = Pick< + MapOptions, + (typeof cameraConstraintNames)[number] | 'maxBounds' | 'renderWorldCopies' +>; + +function removeNullishCameraConstraints(options: ReactiveMapOptions): void { + for (const propName of cameraConstraintNames) { + if (options[propName] === null || options[propName] === undefined) { + delete options[propName]; + } + } +} + export type MaplibreProps = Partial & - MapCallbacks & { + MapCallbacks & + ReactiveMapOptions & { /** Camera options used when constructing the Map instance */ initialViewState?: Partial & { /** The initial bounds of the map. If bounds is specified, it overrides longitude, latitude and zoom options. */ @@ -83,40 +99,11 @@ export type MaplibreProps = Partial & interactiveLayerIds?: string[]; /** CSS cursor */ cursor?: string; - - /** Minimum zoom available to the map. - * @default 0 - */ - minZoom?: MapOptions['minZoom']; - /** Maximum zoom available to the map. - * @default 22 - */ - maxZoom?: MapOptions['maxZoom']; - /** Minimum pitch available to the map. - * @default 0 - */ - minPitch?: MapOptions['minPitch']; - /** Maximum pitch available to the map. - * @default 85 - */ - maxPitch?: MapOptions['maxPitch']; - /** Bounds of the map. - * @default [-180, -85.051129, 180, 85.051129] - */ - maxBounds?: MapOptions['maxBounds']; - /** Whether to render copies of the world or not. - * @default true - */ - renderWorldCopies?: MapOptions['renderWorldCopies']; }; const DEFAULT_STYLE = {version: 8, sources: {}, layers: []} as StyleSpecification; const DEFAULT_SETTINGS = { - minZoom: 0, - maxZoom: 22, - minPitch: 0, - maxPitch: 85, maxBounds: [-180, -85.051129, 180, 85.051129], projection: 'mercator', renderWorldCopies: true @@ -302,6 +289,7 @@ export default class Maplibre { container, style: normalizeStyle(mapStyle) }; + removeNullishCameraConstraints(mapOptions); const viewState = mapOptions.initialViewState || mapOptions.viewState || mapOptions; Object.assign(mapOptions, { @@ -457,23 +445,23 @@ export default class Maplibre { const didUpdateZoom = updateZoomConstraint( this._map, { - min: nextProps.minZoom ?? DEFAULT_SETTINGS.minZoom, - max: nextProps.maxZoom ?? DEFAULT_SETTINGS.maxZoom + min: nextProps.minZoom, + max: nextProps.maxZoom }, { - min: currProps.minZoom ?? DEFAULT_SETTINGS.minZoom, - max: currProps.maxZoom ?? DEFAULT_SETTINGS.maxZoom + min: currProps.minZoom, + max: currProps.maxZoom } ); const didUpdatePitch = updatePitchConstraint( this._map, { - min: nextProps.minPitch ?? DEFAULT_SETTINGS.minPitch, - max: nextProps.maxPitch ?? DEFAULT_SETTINGS.maxPitch + min: nextProps.minPitch, + max: nextProps.maxPitch }, { - min: currProps.minPitch ?? DEFAULT_SETTINGS.minPitch, - max: currProps.maxPitch ?? DEFAULT_SETTINGS.maxPitch + min: currProps.minPitch, + max: currProps.maxPitch } ); diff --git a/modules/react-maplibre/src/utils/transform.ts b/modules/react-maplibre/src/utils/transform.ts index 3f7d2150f..5fb1d1099 100644 --- a/modules/react-maplibre/src/utils/transform.ts +++ b/modules/react-maplibre/src/utils/transform.ts @@ -83,32 +83,48 @@ export function applyViewStateToTransform( * @param setMin - setter for the minimum value * @param setMax - setter for the maximum value */ +type ConstraintValue = number | null | undefined; + +type ConstraintRange = {min: ConstraintValue; max: ConstraintValue}; + +function isConstraintReset(value: ConstraintValue): value is null | undefined { + return value === null || value === undefined; +} + +function sameConstraintValue(a: ConstraintValue, b: ConstraintValue): boolean { + return (isConstraintReset(a) && isConstraintReset(b)) || a === b; +} + function updateConstraint( - nextRange: {min: number; max: number}, - currentRange: {min: number; max: number}, - setMin: (v: number) => void, - setMax: (v: number) => void + nextRange: ConstraintRange, + currentRange: ConstraintRange, + getCurrentMin: () => number, + setMin: (v?: number | null) => void, + setMax: (v?: number | null) => void ): boolean { - if (nextRange.min === currentRange.min && nextRange.max === currentRange.max) { + const minChanged = !sameConstraintValue(nextRange.min, currentRange.min); + const maxChanged = !sameConstraintValue(nextRange.max, currentRange.max); + + if (!minChanged && !maxChanged) { return false; } - // When moving up (min increasing), update max first to make room - if (nextRange.min >= currentRange.min) { - if (nextRange.max !== currentRange.max) { - setMax(nextRange.max); - } - if (nextRange.min !== currentRange.min) { + // When lowering or resetting min, update it first to make room. + // Otherwise update max first before raising min. + if (isConstraintReset(nextRange.min) || nextRange.min < getCurrentMin()) { + if (minChanged) { setMin(nextRange.min); } - } else { - // When moving down (min decreasing), update min first to make room - if (nextRange.min !== currentRange.min) { - setMin(nextRange.min); + if (maxChanged) { + setMax(nextRange.max); } - if (nextRange.max !== currentRange.max) { + } else { + if (maxChanged) { setMax(nextRange.max); } + if (minChanged) { + setMin(nextRange.min); + } } return true; @@ -116,12 +132,13 @@ function updateConstraint( export function updateZoomConstraint( map: MapInstance, - nextRange: {min: number; max: number}, - currentRange: {min: number; max: number} + nextRange: ConstraintRange, + currentRange: ConstraintRange ): boolean { return updateConstraint( nextRange, currentRange, + () => map.getMinZoom(), v => map.setMinZoom(v), v => map.setMaxZoom(v) ); @@ -129,12 +146,13 @@ export function updateZoomConstraint( export function updatePitchConstraint( map: MapInstance, - nextRange: {min: number; max: number}, - currentRange: {min: number; max: number} + nextRange: ConstraintRange, + currentRange: ConstraintRange ): boolean { return updateConstraint( nextRange, currentRange, + () => map.getMinPitch(), v => map.setMinPitch(v), v => map.setMaxPitch(v) ); diff --git a/modules/react-maplibre/test/components/map.spec.jsx b/modules/react-maplibre/test/components/map.spec.jsx index 5394aed16..f9982c904 100644 --- a/modules/react-maplibre/test/components/map.spec.jsx +++ b/modules/react-maplibre/test/components/map.spec.jsx @@ -4,8 +4,18 @@ import * as React from 'react'; import {createRoot} from 'react-dom/client'; import {act} from 'react-dom/test-utils'; import {Map} from '@vis.gl/react-maplibre'; +import Maplibre from '../../src/maplibre/maplibre'; import {waitForMapLoad, actUntil} from '../utils/test-utils'; +function getCameraConstraints(map) { + return { + minZoom: map.getMinZoom(), + maxZoom: map.getMaxZoom(), + minPitch: map.getMinPitch(), + maxPitch: map.getMaxPitch() + }; +} + test('Map', async () => { expect(Map, 'Map is defined').toBeTruthy(); @@ -45,6 +55,107 @@ test('Map', async () => { await act(() => root.unmount()); }); +test('Map resets camera constraints to MapLibre defaults', async () => { + const root = createRoot(document.createElement('div')); + const mapRef = {current: null}; + + await act(() => root.render()); + await waitForMapLoad(mapRef); + + const defaults = getCameraConstraints(mapRef.current); + + await act(() => + root.render() + ); + + expect(getCameraConstraints(mapRef.current)).toEqual({ + minZoom: 2, + maxZoom: 10, + minPitch: 5, + maxPitch: 40 + }); + + await act(() => + root.render() + ); + + expect(getCameraConstraints(mapRef.current)).toEqual(defaults); + + await act(() => + root.render() + ); + await act(() => + root.render( + + ) + ); + + expect(getCameraConstraints(mapRef.current)).toEqual(defaults); + + await act(() => + root.render() + ); + await act(() => root.render()); + + expect(getCameraConstraints(mapRef.current)).toEqual(defaults); + + await act(() => root.unmount()); + + for (const resetValue of [null, undefined]) { + const initialRoot = createRoot(document.createElement('div')); + const initialMapRef = {current: null}; + await act(() => + initialRoot.render( + + ) + ); + await waitForMapLoad(initialMapRef); + expect(getCameraConstraints(initialMapRef.current)).toEqual(defaults); + await act(() => initialRoot.unmount()); + } +}); + +test('Map resets camera constraints when reusing a map', async () => { + const firstRoot = createRoot(document.createElement('div')); + const firstMapRef = {current: null}; + + await act(() => firstRoot.render()); + await waitForMapLoad(firstMapRef); + + const defaults = getCameraConstraints(firstMapRef.current); + + await act(() => + firstRoot.render( + + ) + ); + await act(() => firstRoot.unmount()); + + const secondRoot = createRoot(document.createElement('div')); + const secondMapRef = {current: null}; + await act(() => secondRoot.render()); + await waitForMapLoad(secondMapRef); + + expect(getCameraConstraints(secondMapRef.current)).toEqual(defaults); + + await act(() => secondRoot.unmount()); + while (Maplibre.savedMaps.length > 0) { + Maplibre.savedMaps.pop().destroy(); + } +}); + test('Map#uncontrolled', async () => { await actUntil(resolveTest => { const root = createRoot(document.createElement('div')); diff --git a/modules/react-maplibre/test/utils/transform.spec.js b/modules/react-maplibre/test/utils/transform.spec.js index 7533a13ab..a9cfb1b04 100644 --- a/modules/react-maplibre/test/utils/transform.spec.js +++ b/modules/react-maplibre/test/utils/transform.spec.js @@ -104,12 +104,15 @@ test('applyViewStateToTransform', () => { expect(changed, 'nothing changed').toEqual({}); }); -function createConstraintMap(setMinName, setMaxName) { +function createConstraintMap(setMinName, setMaxName, defaultRange) { let first = null; let currentMin = 0; let currentMax = 0; + const getMinName = setMinName.replace('set', 'get'); const map = { + [getMinName]: () => currentMin, [setMinName]: nextMin => { + nextMin ??= defaultRange.min; if (nextMin > currentMax) { throw new Error(`Setting ${setMinName} (${nextMin}) > current max (${currentMax})`); } @@ -119,6 +122,7 @@ function createConstraintMap(setMinName, setMaxName) { } }, [setMaxName]: nextMax => { + nextMax ??= defaultRange.max; if (nextMax < currentMin) { throw new Error(`Setting ${setMaxName} (${nextMax}) < current min (${currentMin})`); } @@ -141,8 +145,8 @@ function createConstraintMap(setMinName, setMaxName) { }; } -function testConstraintUpdate(updateFn, setMinName, setMaxName, label) { - const helper = createConstraintMap(setMinName, setMaxName); +function testConstraintUpdate(updateFn, setMinName, setMaxName, label, defaultRange) { + const helper = createConstraintMap(setMinName, setMaxName, defaultRange); // Range shifting down helper.reset(5, 10); @@ -194,6 +198,25 @@ function testConstraintUpdate(updateFn, setMinName, setMaxName, label) { updateFn(helper.map, {min: 3, max: 8}, {min: 6, max: 10}); expect(helper.getFirst(), `${label}: 6 - 10 -> 3 - 8, partial overlap shifting down`).toBe('min'); + // Resetting max may lower it below the current min + helper.reset(defaultRange.max + 1, defaultRange.max + 2); + updateFn( + helper.map, + {min: defaultRange.max - 2, max: undefined}, + {min: defaultRange.max + 1, max: defaultRange.max + 2} + ); + expect(helper.getFirst(), `${label}: lower min before resetting max`).toBe('min'); + + // All nullable forms represent the same native reset + helper.reset(defaultRange.min, defaultRange.max); + const nullableChanged = updateFn( + helper.map, + {min: null, max: undefined}, + {min: undefined, max: null} + ); + expect(nullableChanged, `${label}: nullable reset forms are equivalent`).toBe(false); + expect(helper.getFirst(), `${label}: nullable reset forms do not call setters`).toBe(null); + // No change returns false helper.reset(3, 10); const changed = updateFn(helper.map, {min: 3, max: 10}, {min: 3, max: 10}); @@ -201,9 +224,15 @@ function testConstraintUpdate(updateFn, setMinName, setMaxName, label) { } test('updateZoomConstraint', () => { - testConstraintUpdate(updateZoomConstraint, 'setMinZoom', 'setMaxZoom', 'zoom'); + testConstraintUpdate(updateZoomConstraint, 'setMinZoom', 'setMaxZoom', 'zoom', { + min: -2, + max: 22 + }); }); test('updatePitchConstraint', () => { - testConstraintUpdate(updatePitchConstraint, 'setMinPitch', 'setMaxPitch', 'pitch'); + testConstraintUpdate(updatePitchConstraint, 'setMinPitch', 'setMaxPitch', 'pitch', { + min: 0, + max: 60 + }); }); diff --git a/package.json b/package.json index d802f23e4..676adba92 100644 --- a/package.json +++ b/package.json @@ -19,12 +19,11 @@ "playwright:install": "playwright install chromium", "publish-beta": "ocular-publish version-only-beta", "publish-prod": "ocular-publish version-only-prod", - "test": "npm run test-types && ocular-test node headless", + "test": "ocular-test node headless", "test-browser": "ocular-test browser", "test-fast": "ocular-build && ocular-test node", "test-headless": "ocular-test headless", - "test-node": "npm run test-types && ocular-test node", - "test-types": "tsc --build modules/main/tsconfig.json && tsc --project test/types/tsconfig.json", + "test-node": "ocular-test node", "metrics": "ocular-metrics", "update-release-branch": "scripts/update-release-branch.sh" }, @@ -43,7 +42,6 @@ "pre-commit": "^1.2.2", "react": "^18.0.0", "react-dom": "^18.0.0", - "typescript": "^6.0.3", "vitest": "^4.0.18" }, "pre-commit": [ diff --git a/test/types/maplibre-map-props.ts b/test/types/maplibre-map-props.ts deleted file mode 100644 index d849c050c..000000000 --- a/test/types/maplibre-map-props.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type {ComponentProps} from 'react'; -import Map from 'react-map-gl/maplibre'; -import type {MapOptions} from 'maplibre-gl'; - -type MapProps = ComponentProps; - -type MutableMapOptionKeys = - | 'minZoom' - | 'maxZoom' - | 'minPitch' - | 'maxPitch' - | 'maxBounds' - | 'renderWorldCopies'; - -declare const mapOptions: Pick; -const mapProps: Pick = mapOptions; -const nullableCameraConstraints: Pick = { - minZoom: null, - maxZoom: null, - minPitch: null, - maxPitch: null -}; - -void mapProps; -void nullableCameraConstraints; diff --git a/test/types/tsconfig.json b/test/types/tsconfig.json deleted file mode 100644 index 07e5f7535..000000000 --- a/test/types/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "allowJs": false, - "noEmit": true, - "strictNullChecks": true, - "paths": { - "react-map-gl/maplibre": ["../../modules/main/dist/maplibre.d.ts"] - } - }, - "include": ["maplibre-map-props.ts"] -} diff --git a/yarn.lock b/yarn.lock index e60df04c3..c04f430b6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6444,7 +6444,6 @@ __metadata: pre-commit: "npm:^1.2.2" react: "npm:^18.0.0" react-dom: "npm:^18.0.0" - typescript: "npm:^6.0.3" vitest: "npm:^4.0.18" dependenciesMeta: esbuild: