✨ Features and improvements
- Add queryTerrainElevation allows getting terrain elevation in meters at specific point ([2264](https://github.com/maplibre/maplibre-gl-js/pull/2264))
- Improve performance by sending style layers to worker thread before processing it on main thread to allow parallel processing ([2131](https://github.com/maplibre/maplibre-gl-js/pull/2131))
- ⚠️ Breaking - Resize map when container element is resized. The resize related events now has different data associated with it ([2157](https://github.com/maplibre/maplibre-gl-js/pull/2157)). Previously the originalEvent field was the reason of this change, for example it could be a `resize` event from the browser. Now it is `ResizeObserverEntry`, see more [here](https://developer.mozilla.org/en-US/docs/web/api/resizeobserverentry).
- Add Map.getImage() to retrieve previously-loaded images. ([2168](https://github.com/maplibre/maplibre-gl-js/pull/2168))
- Add method to enable/disable cooperative gestures
- ⚠️ Breaking - `LngLat.toBounds()` is replaced by a static method `LngLatBounds.fromLngLat()` ([2188](https://github.com/maplibre/maplibre-gl-js/pull/2188))
- Update CONTRIBUTING.md with details on setting up on M1 mac ([2196](https://github.com/maplibre/maplibre-gl-js/pull/2196))
- Update default type of originalEvent in MapLibreEvent to be `unknown` ([2243](https://github.com/maplibre/maplibre-gl-js/pull/2243))
- Improve performance when forcing full symbol placement by short circuiting pause checks ([2241](https://github.com/maplibre/maplibre-gl-js/pull/2241))
- Adding a `warnonce` when terrain and hillshade source are the same ([2298](https://github.com/maplibre/maplibre-gl-js/pull/2298))
- Remove a deprecation warning by removing an empty texture that is no longer being used in the codebase ([2299](https://github.com/maplibre/maplibre-gl-js/pull/2299))
- Improve initial loading performance by lazy serializing layers only when needed. ([2306](https://github.com/maplibre/maplibre-gl-js/pull/2306))
- ⚠️ Breaking - Cancel unloaded tile request on zooming in across multiple zoom. Previously these requests were not cancelled. ([2377](https://github.com/maplibre/maplibre-gl-js/pull/2377))
- Add validateStyle MapOption to allow disabling style validation for faster performance in production environment. ([2390](https://github.com/maplibre/maplibre-gl-js/pull/2390))
- ⚠️ Breaking - Remove support for `hsl` css color in a format that does not comply with the CSS Color specification. Colors defined in `hsl(110, 0.7, 0.055)` format will no longer work, instead it is recommended to use the format with percentages `hsl(110, 70%, 5.5%)`. ([2376](https://github.com/maplibre/maplibre-gl-js/pull/2376))
🐞 Bug fixes
- Fix the type of the `features` property on `MapLayerMouseEvent` and `MapLayerTouchEvent` to be `MapGeoJSONFeature[]` in lieu of `GeoJSON.Feature[]` ([2244](https://github.com/maplibre/maplibre-gl-js/pull/2244))
- Fix GeolocateControl error if removed quickly ([2391](https://github.com/maplibre/maplibre-gl-js/pull/2391))
- Fix issue unloading sprite sheet when using `setStyle(style, {diff:true})` ([2146](https://github.com/maplibre/maplibre-gl-js/pull/2146))
- Fix wrap coords in `getTerrain` when `fitBounds` across the AM ([2155](https://github.com/maplibre/maplibre-gl-js/pull/2155))
- Fix LngLat `toArray` method return type to [number,number] ([2233](https://github.com/maplibre/maplibre-gl-js/issues/2233))
- Fix handling of text-offset with symbol-placement: line ([2170](https://github.com/maplibre/maplibre-gl-js/issues/2170) and [#2171](https://github.com/maplibre/maplibre-gl-js/issues/2171))
- Fix geolocate control permissions failure on IOS16 web view with fallback to `window.navigator.geolocation` ([2359](https://github.com/maplibre/maplibre-gl-js/pull/2359))
- Prevent unnecessary reload of raster sources when RTL Text Plugin loads ([2380](https://github.com/maplibre/maplibre-gl-js/issues/2380))
- Fix Handle AddProtocol callback function returning an HTMLImageElement ([](https://github.com/maplibre/maplibre-gl-js/pull/2393)2393](https://github.com/maplibre/maplibre-gl-js/pull/2393))
- Fix raster tiles being retained when raster-fade-duration is 0 ([2445](https://github.com/maplibre/maplibre-gl-js/issues/2445))