UNPKG

150 kBMarkdownView Raw
1## 1.6.0-beta.1
2
3## ✨ Features
4* Add ability to insert images into text labels using an `image` expression within a `format` expression: `"text-field": ["format", "Some text", ["image", "my-image"], "some more text"]` ([#8904](https://github.com/mapbox/mapbox-gl-js/pull/8904))
5* Add support for stretchable images (aka nine-part or nine-patch images). Stretchable images can be used with `icon-text-fit` to draw resized images with unstretched corners and borders. ([#8997](https://github.com/mapbox/mapbox-gl-js/pull/8997))
6* Add `in` expression. It can check if a value is in an array (`["in", value, array]`) or a substring is in a string (`["in", substring, string]`) ([#8876](https://github.com/mapbox/mapbox-gl-js/pull/8876))
7* Add `minPitch` and `maxPitch` map options ([#8834](https://github.com/mapbox/mapbox-gl-js/pull/8834))
8* Add `rotation`, `rotationAlignment` and `pitchAlignment` options to markers ([#8836](https://github.com/mapbox/mapbox-gl-js/pull/8836)) (h/t [dburnsii](https://github.com/dburnsii))
9* Add methods to Popup to manipulate container class names ([#8759](https://github.com/mapbox/mapbox-gl-js/pull/8759)) (h/t [Ashot-KR](https://github.com/Ashot-KR))
10* Add configurable inertia settings for panning (h/t @aMoniker) ([#8887](https://github.com/mapbox/mapbox-gl-js/pull/8887))
11* Add ability to localize mapbox UI controls ([#8095](https://github.com/mapbox/mapbox-gl-js/pull/8095)) (h/t [dmytro-gokun](https://github.com/dmytro-gokun))
12* Add LatLngBounds.contains() method ([#7512](https://github.com/mapbox/mapbox-gl-js/issues/7512), fixed by [#8200](https://github.com/mapbox/mapbox-gl-js/pull/8200))
13* Add option to load rtl-text-plugin lazily ([#8865](https://github.com/mapbox/mapbox-gl-js/pull/8865))
14* Add `essential` parameter to AnimationOptions that can override `prefers-reduced-motion: reduce` ([#8743](https://github.com/mapbox/mapbox-gl-js/issues/8743), fixed by [#8883](https://github.com/mapbox/mapbox-gl-js/pull/8883))
15
16## 🍏 Improvements
17* Allow rendering full world smaller than 512px. To restore the previous limit call `map.setMinZoom(0)` ([#9028](https://github.com/mapbox/mapbox-gl-js/pull/9028))
18* Add an es modules build of for mapbox-gl-style-spec in dist/ ([#8247](https://github.com/mapbox/mapbox-gl-js/pull/8247)) (h/t [ahocevar](https://github.com/ahocevar))
19* Add 'image/webp,*/*' accept header to fetch/ajax image requests when webp supported ([#8262](https://github.com/mapbox/mapbox-gl-js/pull/8262))
20* Improve documentation for setStyle, getStyle, and isStyleLoaded ([#8807](https://github.com/mapbox/mapbox-gl-js/pull/8807))
21
22## 🐞 Bug Fixes
23* Fix map rendering after addImage and removeImage are used to change a used image ([#9016](https://github.com/mapbox/mapbox-gl-js/pull/9016))
24* Fix visibility of controls in High Contrast mode in IE ([#8874](https://github.com/mapbox/mapbox-gl-js/pull/8874))
25* Fix customizable url hash string in IE 11 ([#8990](https://github.com/mapbox/mapbox-gl-js/pull/8990)) (h/t [pakastin](https://github.com/pakastin))
26* Allow expression stops up to zoom 24 instead of 22 ([#8908](https://github.com/mapbox/mapbox-gl-js/pull/8908)) (h/t [nicholas-l](https://github.com/nicholas-l))
27* Fix alignment of lines in really overscaled tiles ([#9024](https://github.com/mapbox/mapbox-gl-js/pull/9024))
28* Fix `Failed to execute 'shaderSource' on 'WebGLRenderingContext'` errors ([#9017](https://github.com/mapbox/mapbox-gl-js/pull/9017))
29* Make expression validation fail on NaN ([#8615](https://github.com/mapbox/mapbox-gl-js/pull/8615))
30* Fix setLayerZoomRange bug that caused tiles to be re-requested ([#7865](https://github.com/mapbox/mapbox-gl-js/issues/7865), fixed by [#8854](https://github.com/mapbox/mapbox-gl-js/pull/8854))
31* Fix `map.showTileBoundaries` rendering ([#7314](https://github.com/mapbox/mapbox-gl-js/pull/7314))
32* Fix using `generateId` in conjunction with `cluster` in a GeoJSONSource ([#8223](https://github.com/mapbox/mapbox-gl-js/issues/8223), fixed by [#8945](https://github.com/mapbox/mapbox-gl-js/pull/8945))
33* Fix opening popup on a marker from keyboard ([#6835](https://github.com/mapbox/mapbox-gl-js/pull/6835))
34* Fix error thrown when request aborted ([#7614](https://github.com/mapbox/mapbox-gl-js/issues/7614), fixed by [#9021](https://github.com/mapbox/mapbox-gl-js/pull/9021))
35* Fix attribution control when repeatedly removing and adding it ([#9052](https://github.com/mapbox/mapbox-gl-js/pull/9052))
36
37## 1.5.1
38This patch introduces two workarounds that address longstanding issues related to unbounded memory growth in Safari, including [#8771](https://github.com/mapbox/mapbox-gl-js/issues/8771) and [#4695](https://github.com/mapbox/mapbox-gl-js/issues/4695). We’ve identified two memory leaks in Safari: one in the [CacheStorage](https://developer.mozilla.org/en-US/docs/Web/API/CacheStorage) API, addressed by [#8956](https://github.com/mapbox/mapbox-gl-js/pull/8956), and one in transferring data between web workers through [Transferables](https://developer.mozilla.org/en-US/docs/Web/API/Transferable), addressed by [#9003](https://github.com/mapbox/mapbox-gl-js/pull/9003).
39
40## 🍏 Improvements
41* Implement workaround for memory leak in Safari when using the `CacheStorage` API. ( [#8856](https://github.com/mapbox/mapbox-gl-js/pull/8956))
42* Implement workaround for memory leak in Safari when using `Transferable` objects to transfer `ArrayBuffers` to WebWorkers. If GL-JS detetcts that it is running in Safari, the use of `Transferables` to transfer data to WebWorkers is disabled. ( [#9003](https://github.com/mapbox/mapbox-gl-js/pull/9003))
43* Improve animation performance when using `map.setData`. ([#8913](https://github.com/mapbox/mapbox-gl-js/pull/8913)) (h/t [msbarry](https://github.com/msbarry))
44
45## 1.5.0
46
47## ✨ Features
48* Add disabled icon to GeolocateControl if user denies geolocation permission. [#8871](https://github.com/mapbox/mapbox-gl-js/pull/8871))
49* Add `outofmaxbounds` event to GeolocateControl, which is emitted when the user is outside of `map.maxBounds` ([#8756](https://github.com/mapbox/mapbox-gl-js/pull/8756)) (h/t [MoradiDavijani](https://github.com/MoradiDavijani))
50* Add `mapboxgl.getRTLTextPluginStatus()` to query the current status of the `rtl-text-plugin` to make it easier to allow clearing the plugin when necessary. (ref. [#7869](https://github.com/mapbox/mapbox-gl-js/issues/7869)) ([#8864](https://github.com/mapbox/mapbox-gl-js/pull/8864))
51* Allow `hash` Map option to be set as a string, which sets the map hash in the url to a custom query parameter. ([#8603](https://github.com/mapbox/mapbox-gl-js/pull/8603)) (h/t [SebCorbin](https://github.com/SebCorbin))
52
53## 🍏 Improvements
54* Fade symbols faster when zooming out quickly, reducing overlap. ([#8628](https://github.com/mapbox/mapbox-gl-js/pull/8628))
55* Reduce memory usage for vector tiles that contain long strings in feature properties. ( [#8863](https://github.com/mapbox/mapbox-gl-js/pull/8863))
56
57## 🐞 Bug Fixes
58* Fix `text-variable-anchor` not trying multiple placements during collision with icons when `icon-text-fit` is enabled. ([#8803](https://github.com/mapbox/mapbox-gl-js/pull/8803))
59* Fix `icon-text-fit` not properly respecting vertical labels. ([#8835](https://github.com/mapbox/mapbox-gl-js/pull/8835))
60* Fix opacity interpolation for composition expressions. ([#8818](https://github.com/mapbox/mapbox-gl-js/pull/8818))
61* Fix rotate and pitch events being fired at the same time. ([#8872](https://github.com/mapbox/mapbox-gl-js/pull/8872))
62* Fix memory leaks that occured during tile loading and map removal.([#8813](https://github.com/mapbox/mapbox-gl-js/pull/8813) and [#8850](https://github.com/mapbox/mapbox-gl-js/pull/8850))
63* Fix web-worker transfer of `ArrayBuffers` in environments where `instanceof ArrayBuffer` fails.(e.g `cypress`) ([#8868](https://github.com/mapbox/mapbox-gl-js/pull/8868))
64
65## 1.4.1
66
67## 🐞 Bug Fixes
68* Fix the way that `coalesce` handles the `image` operator so available images are rendered properly ([#8839](https://github.com/mapbox/mapbox-gl-js/pull/8839))
69* Do not emit the `styleimagemissing` event for an empty string value ([#8840](https://github.com/mapbox/mapbox-gl-js/pull/8840))
70* Fix serialization of `ResolvedImage` type so `*-pattern` properties work properly ([#8833](https://github.com/mapbox/mapbox-gl-js/pull/8833))
71
72## 1.4.0
73
74## ✨ Features
75* Add `image` expression operator to determine image availability ([#8684](https://github.com/mapbox/mapbox-gl-js/pull/8684))
76* Enable `text-offset` with variable label placement ([#8642](https://github.com/mapbox/mapbox-gl-js/pull/8642))
77
78## 🍏 Improvements
79* Faster loading and better look of raster terrain ([#8694](https://github.com/mapbox/mapbox-gl-js/pull/8694))
80* Improved code documentation around resizing and {get/set}RenderedWorldCopies and more ([#8748](https://github.com/mapbox/mapbox-gl-js/pull/8748), [#8754](https://github.com/mapbox/mapbox-gl-js/pull/8754))
81* Improve single vs. multi-touch zoom & pan interaction (#7196) ([#8100](https://github.com/mapbox/mapbox-gl-js/pull/8100))
82
83## 🐞 Bug fixes
84* Fix rendering of `collisionBox` when `text-translate` or `icon-translate` is enabled ([#8659](https://github.com/mapbox/mapbox-gl-js/pull/8659))
85* Fix `TypeError` when reloading a source and immediately removing the map ([#8711](https://github.com/mapbox/mapbox-gl-js/pull/8711))
86* Adding tooltip to the geolocation control button ([#8735](https://github.com/mapbox/mapbox-gl-js/pull/8735)) (h/t [BAByrne](https://github.com/BAByrne))
87* Add `originalEvent` property to NavigationControl events ([#8693](https://github.com/mapbox/mapbox-gl-js/pull/8693)) (h/t [stepankuzmin](https://github.com/stepankuzmin))
88* Don't cancel follow mode in the GeolocateControl when resizing the map or rotating the screen ([#8736](https://github.com/mapbox/mapbox-gl-js/pull/8736))
89* Fix error when calling `Popup#trackPointer` before setting its content or location ([#8757](https://github.com/mapbox/mapbox-gl-js/pull/8757)) (h/t [zxwandrew](https://github.com/zxwandrew))
90* Respect newline characters when text-max-width is set to zero ([#8706](https://github.com/mapbox/mapbox-gl-js/pull/8706))
91* Update earcut to v2.2.0 to fix polygon tesselation errors ([#8772](https://github.com/mapbox/mapbox-gl-js/pull/8772))
92* Fix icon-fit with variable label placement ([#8755](https://github.com/mapbox/mapbox-gl-js/pull/8755))
93* Icons stretched with `icon-text-fit` are now sized correctly ([#8741](https://github.com/mapbox/mapbox-gl-js/pull/8741))
94* Collision detection for icons with `icon-text-fit` now works correctly ([#8741](https://github.com/mapbox/mapbox-gl-js/pull/8741))
95
96## 1.3.2
97
98- Fix a SecurityError in Firefox >= 69 when accessing the cache [#8780](https://github.com/mapbox/mapbox-gl-js/pull/8780)
99
100## 1.3.1
101
102## 🐞 Bug Fixes
103
104- Fix a race condition that produced an error when a map was removed while reloading a source. [#8711](https://github.com/mapbox/mapbox-gl-js/pull/8711)
105- Fix a race condition were `render` event was sometimes not fired after `load` event in IE11. [#8708](https://github.com/mapbox/mapbox-gl-js/pull/8708)
106
107## 1.3.0
108
109### 🍏 Features
110
111- Introduce `text-writing-mode` symbol layer property to allow placing point labels vertically. [#8399](https://github.com/mapbox/mapbox-gl-js/pull/8399)
112- Extend variable text placement to work when `text/icon-allow-overlap` is set to `true`. [#8620](https://github.com/mapbox/mapbox-gl-js/pull/8620)
113- Allow `text-color` to be used in formatted expressions to be able to draw different parts of a label in different colors. [#8068](https://github.com/mapbox/mapbox-gl-js/pull/8068)
114
115### ✨ Improvements
116
117- Improve tile loading logic to cancel requests more aggressively, improving performance when zooming or panning quickly. [#8633](https://github.com/mapbox/mapbox-gl-js/pull/8633)
118- Display outline on control buttons when focused (e.g. with a tab key) for better accessibility. [#8520](https://github.com/mapbox/mapbox-gl-js/pull/8520)
119- Improve the shape of line round joins. [#8275](https://github.com/mapbox/mapbox-gl-js/pull/8275)
120- Improve performance of processing line layers. [#8303](https://github.com/mapbox/mapbox-gl-js/pull/8303)
121- Improve legibility of info displayed with `map.showTileBoundaries = true`. [#8380](https://github.com/mapbox/mapbox-gl-js/pull/8380) (h/t [@andrewharvey](https://github.com/andrewharvey))
122- Add `MercatorCoordinate.meterInMercatorCoordinateUnits` method to make it easier to convert from meter units to coordinate values used in custom layers. [#8524](https://github.com/mapbox/mapbox-gl-js/pull/8524) (h/t [@andrewharvey](https://github.com/andrewharvey))
123- Improve conversion of legacy filters with duplicate values. [#8542](https://github.com/mapbox/mapbox-gl-js/pull/8542)
124- Move out documentation & examples website source to a separate `mapbox-gl-js-docs` repo. [#8582](https://github.com/mapbox/mapbox-gl-js/pull/8582)
125
126## 🐞 Bug Fixes
127
128- Fix a bug where local CJK fonts would switch to server-generated ones in overzoomed tiles. [#8657](https://github.com/mapbox/mapbox-gl-js/pull/8657)
129- Fix precision issues in [deck.gl](https://deck.gl)-powered custom layers. [#8502](https://github.com/mapbox/mapbox-gl-js/pull/8502)
130- Fix a bug where fill and line layers wouldn't render correctly over fill extrusions when coming from the same source. [#8661](https://github.com/mapbox/mapbox-gl-js/pull/8661)
131- Fix map loading for documents loaded from Blob URLs. [#8612](https://github.com/mapbox/mapbox-gl-js/pull/8612)
132- Fix classification of relative file:// URLs when in documents loaded from a file URL. [#8612](https://github.com/mapbox/mapbox-gl-js/pull/8612)
133- Remove `esm` from package `dependencies` (so that it's not installed on `npm install mapbox-gl`). [#8586](https://github.com/mapbox/mapbox-gl-js/pull/8586) (h/t [@DatGreekChick](https://github.com/DatGreekChick))
134
135## 1.2.1
136
137### 🐞 Bug fixes
138
139* Fix bug in `NavigationControl` compass button that prevented it from rotating with the map ([#8605](https://github.com/mapbox/mapbox-gl-js/pull/8605))
140
141## 1.2.0
142
143### Features and improvements
144* Add `*-sort-key` layout property for circle, fill, and line layers, to dictate which features appear above others within a single layer([#8467](https://github.com/mapbox/mapbox-gl-js/pull/8467))
145* Add ability to instantiate maps with specific access tokens ([#8364](https://github.com/mapbox/mapbox-gl-js/pull/8364))
146* Accommodate `prefers-reduced-motion` settings in browser ([#8494](https://github.com/mapbox/mapbox-gl-js/pull/8494))
147* Add Map `visualizePitch` option that tilts the compass as the map pitches ([#8208](https://github.com/mapbox/mapbox-gl-js/issues/8208), fixed by [#8296](https://github.com/mapbox/mapbox-gl-js/pull/8296)) (h/t [pakastin](https://github.com/pakastin))
148* Make source options take precedence over TileJSON ([#8232](https://github.com/mapbox/mapbox-gl-js/pull/8232)) (h/t [jingsam](https://github.com/jingsam))
149* Make requirements for text offset properties more precise ([#8418](https://github.com/mapbox/mapbox-gl-js/pull/8418))
150* Expose `convertFilter` API in the style specification ([#8493](https://github.com/mapbox/mapbox-gl-js/pull/8493)
151
152### Bug fixes
153* Fix changes to `text-variable-anchor`, such that previous anchor positions would take precedence only if they are present in the updated array (considered a bug fix, but is technically a breaking change from previous behavior) ([#8473](https://github.com/mapbox/mapbox-gl-js/pull/8473))
154* Fix rendering of opaque pass layers over heatmap and fill-extrusion layers ([#8440](https://github.com/mapbox/mapbox-gl-js/pull/8440))
155* Fix rendering of extraneous vertical line in vector tiles ([#8477](https://github.com/mapbox/mapbox-gl-js/issues/8477), fixed by [#8479](https://github.com/mapbox/mapbox-gl-js/pull/8479))
156* Turn off 'move' event listeners when removing a marker ([#8465](https://github.com/mapbox/mapbox-gl-js/pull/8465))
157* Fix class toggling on navigation control for IE ([#8495](https://github.com/mapbox/mapbox-gl-js/pull/8495)) (h/t [cs09g](https://github.com/cs09g))
158* Fix background rotation hovering on geolocate control ([#8367](https://github.com/mapbox/mapbox-gl-js/pull/8367)) (h/t [GuillaumeGomez](https://github.com/GuillaumeGomez))
159* Fix error in click events on markers where `startPos` is not defined ([#8462](https://github.com/mapbox/mapbox-gl-js/pull/8462)) (h/t [@msbarry](https://github.com/msbarry))
160* Fix malformed urls when using custom `baseAPIURL` of a certain form ([#8466](https://github.com/mapbox/mapbox-gl-js/pull/8466))
161
162## 1.1.1
163
164### 🐞 Bug fixes
165
166* Fix unbounded memory growth caused by failure to cancel requests to the cache ([#8472](https://github.com/mapbox/mapbox-gl-js/pull/8472))
167* Fix unbounded memory growth caused by failure to cancel requests in IE ([#8481](https://github.com/mapbox/mapbox-gl-js/issues/8481))
168* Fix performance of getting tiles from the cache ([#8489](https://github.com/mapbox/mapbox-gl-js/pull/8449))
169
170## 1.1.0
171
172### ✨ Minor features and improvements
173* Improve line rendering performance by using a more compact line attributes layout ([#8306](https://github.com/mapbox/mapbox-gl-js/pull/8306))
174* Improve data-driven symbol layers rendering performance ([#8295](https://github.com/mapbox/mapbox-gl-js/pull/8295))
175* Add the ability to disable validation during `queryRenderedFeatures` and `querySourceFeatures` calls, as a performance optimization ([#8211](https://github.com/mapbox/mapbox-gl-js/pull/8211)) (h/t [gorshkov-leonid](https://github.com/gorshkov-leonid))
176* Improve `setFilter` performance by caching keys in `groupByLayout` routine ([#8122](https://github.com/mapbox/mapbox-gl-js/pull/8122)) (h/t [vallendm](https://github.com/vallendm))
177* Improve rendering of symbol layers with `symbol-z-order: viewport-y`, when icons are allowed to overlap but not text ([#8180](https://github.com/mapbox/mapbox-gl-js/pull/8180))
178* Prefer breaking lines at a zero width space to allow better break point suggestions for Japanese labels ([#8255](https://github.com/mapbox/mapbox-gl-js/pull/8255))
179* Add a `WebGLRenderingContext` argument to `onRemove` function of `CustomLayerInterface`, to allow direct cleanup of related context ([#8156](https://github.com/mapbox/mapbox-gl-js/pull/8156)) (h/t [ogiermaitre](https://github.com/ogiermaitre))
180* Allow zoom speed customization by adding `setZoomRate` and `setWheelZoomRate` methods to `ScrollZoomHandler` ([#7863](https://github.com/mapbox/mapbox-gl-js/pull/7863)) (h/t [sf31](https://github.com/sf31))
181* Add `trackPointer` method to `Popup` API that continuously repositions the popup to the mouse cursor when the cursor is within the map ([#7786](https://github.com/mapbox/mapbox-gl-js/pull/7786))
182* Add `getElement` method to `Popup` to retrieve the popup's HTML element ([#8123](https://github.com/mapbox/mapbox-gl-js/pull/8123)) (h/t [bravecow](https://github.com/bravecow))
183* Add `fill-pattern` example to the documentation ([#8022](https://github.com/mapbox/mapbox-gl-js/pull/8022)) (h/t [flawyte](https://github.com/flawyte))
184* Update script detection for Unicode 12.1 ([#8158](https://github.com/mapbox/mapbox-gl-js/pull/8158))
185* Add `nofollow` to Mapbox logo & "Improve this map" links ([#8106](https://github.com/mapbox/mapbox-gl-js/pull/8106)) (h/t [viniciuskneves](https://github.com/viniciuskneves))
186* Include source name in invalid GeoJSON error ([#8113](https://github.com/mapbox/mapbox-gl-js/pull/8113)) (h/t [Zirak](https://github.com/Zirak))
187
188### 🐞 Bug fixes
189* Fix `updateImage` not working as expected in Chrome ([#8199](https://github.com/mapbox/mapbox-gl-js/pull/8199))
190* Fix issues with double-tap zoom on touch devices ([#8086](https://github.com/mapbox/mapbox-gl-js/pull/8086))
191* Fix duplication of `movestart` events when zooming ([#8259](https://github.com/mapbox/mapbox-gl-js/pull/8259)) (h/t [bambielli-flex](https://github.com/bambielli-flex))
192* Fix validation of ``"format"`` expression failing when options are provided ([#8339](https://github.com/mapbox/mapbox-gl-js/pull/8339))
193* Fix `setPaintProperty` not working on `line-pattern` property ([#8289](https://github.com/mapbox/mapbox-gl-js/pull/8289))
194* Fix the GL context being left in unpredictable states when using custom layers ([#8132](https://github.com/mapbox/mapbox-gl-js/pull/8132))
195* Fix unnecessary updates to attribution control string ([#8082](https://github.com/mapbox/mapbox-gl-js/pull/8082)) (h/t [poletani](https://github.com/poletani))
196* Fix bugs in `findStopLessThanOrEqualTo` algorithm ([#8134](https://github.com/mapbox/mapbox-gl-js/pull/8134)) (h/t [Mike96Angelo](https://github.com/Mike96Angelo))
197* Fix map not displaying properly when inside an element with `text-align: center` ([#8227](https://github.com/mapbox/mapbox-gl-js/pull/8227)) (h/t [mc100s](https://github.com/mc100s))
198* Clarify in documentation that `Popup#maxWidth` accepts all `max-width` CSS values ([#8312](https://github.com/mapbox/mapbox-gl-js/pull/8312)) (h/t [viniciuskneves](https://github.com/viniciuskneves))
199* Fix location dot shadow not displaying ([#8119](https://github.com/mapbox/mapbox-gl-js/pull/8119)) (h/t [bravecow](https://github.com/bravecow))
200* Fix docs dev dependencies being mistakenly installed as package dependencies ([#8121](https://github.com/mapbox/mapbox-gl-js/pull/8121)) (h/t [bravecow](https://github.com/bravecow))
201* Various typo fixes ([#8230](https://github.com/mapbox/mapbox-gl-js/pull/8230), h/t [erictheise](https://github.com/erictheise)) ([#8236](https://github.com/mapbox/mapbox-gl-js/pull/8236), h/t [fredj](https://github.com/fredj))
202* Fix geolocate button CSS ([#8367](https://github.com/mapbox/mapbox-gl-js/pull/8367), h/t [GuillaumeGomez](https://github.com/GuillaumeGomez))
203* Fix caching for Mapbox tiles ([#8389](https://github.com/mapbox/mapbox-gl-js/pull/8389))
204
205## 1.0.0
206
207### ⚠️ Breaking changes
208
209This release replaces the existing “map views” pricing model in favor of a “map load” model. Learn more in [a recent blog post about these changes](https://blog.mapbox.com/new-pricing-46b7c26166e7).
210
211**By upgrading to this release, you are opting in to the new map loads pricing.**
212
213**Why is this change being made?**
214
215This change allows us to implement a more standardized and predictable method of billing GL JS map usage. You’ll be charged whenever your website or web application loads, not by when users pan and zoom around the map, incentivizing developers to create highly interactive map experiences. The new pricing structure also creates a significantly larger free tier to help developers get started building their applications with Mapbox tools while pay-as-you-go pricing and automatic volume discounts help your application scale with Mapbox. Session billing also aligns invoices with metrics web developers already track and makes it easier to compare usage with other mapping providers.
216
217**What is changing?**
218- Add SKU token to Mapbox API requests [#8276](https://github.com/mapbox/mapbox-gl-js/pull/8276)
219
220When (and only when) loading tiles from a Mapbox API with a Mapbox access token set (`mapboxgl.accessToken`), a query parameter named `sku` will be added to all requests for vector, raster and raster-dem tiles. Every map instance uses a unique `sku` value, which is refreshed every 12 hours. The token itself is comprised of a token version (always “1”), a sku ID (always “01”) and a random 10-digit base-62 number. The purpose of the token is to allow for metering of map sessions on the server-side. A session lasts from a new map instantiation until the map is destroyed or 12 hours passes, whichever comes first.
221
222For further information on the pricing changes, you can read our [blog post](https://blog.mapbox.com/new-pricing-46b7c26166e7) and check out our new [pricing page](https://www.mapbox.com/pricing), which has a price calculator. As always, you can also contact our team at [https://support.mapbox.com](https://support.mapbox.com).
223
224## 0.54.1
225
226### Bug fixes
227
228- Fix unbounded memory growth caused by failure to cancel requests in IE ([#8481](https://github.com/mapbox/mapbox-gl-js/issues/8481))
229
230## 0.54.0
231
232### Breaking changes
233
234- Turned `localIdeographFontFamily` map option on by default. This may change how CJK labels are rendered, but dramatically improves performance of CJK maps (because the browser no longer needs to download heavy amounts of font data from the server). Add `localIdeographFontFamily: false` to turn this off. [#8008](https://github.com/mapbox/mapbox-gl-js/pull/8008)
235- Added `Popup` `maxWidth` option, set to `"240px"` by default. [#7906](https://github.com/mapbox/mapbox-gl-js/pull/7906)
236
237### Major features
238
239- Added support for updating and animating style images. [#7999](https://github.com/mapbox/mapbox-gl-js/pull/7999)
240- Added support for generating style images dynamically (e.g. for drawing icons based on feature properties). [#7987](https://github.com/mapbox/mapbox-gl-js/pull/7987)
241- Added antialiasing support for custom layers. [#7821](https://github.com/mapbox/mapbox-gl-js/pull/7821)
242- Added a new `mapbox-gl-csp.js` bundle for strict CSP environments where `worker-src: blob` is disallowed. [#8044](https://github.com/mapbox/mapbox-gl-js/pull/8044)
243
244### Minor features and improvements
245
246- Improved performance of fill extrusions. [#7821](https://github.com/mapbox/mapbox-gl-js/pull/7821)
247- Improved performance of symbol layers. [#7967](https://github.com/mapbox/mapbox-gl-js/pull/7967)
248- Slightly improved rendering performance in general. [#7969](https://github.com/mapbox/mapbox-gl-js/pull/7969)
249- Slightly improved performance of HTML markers. [#8018](https://github.com/mapbox/mapbox-gl-js/pull/8018)
250- Improved diffing of styles with `"visibility": "visible"`. [#8005](https://github.com/mapbox/mapbox-gl-js/pull/8005)
251- Improved zoom buttons to grey out when reaching min/max zoom. [#8023](https://github.com/mapbox/mapbox-gl-js/pull/8023)
252- Added a title to fullscreen control button. [#8012](https://github.com/mapbox/mapbox-gl-js/pull/8012)
253- Added `rel="noopener"` attributes to links that lead to external websites (such as Mapbox logo and OpenStreetMap edit link) for improved security. [#7914](https://github.com/mapbox/mapbox-gl-js/pull/7914)
254- Added tile size info when `map.showTileBoundaries` is turned on. [#7963](https://github.com/mapbox/mapbox-gl-js/pull/7963)
255- Significantly improved load times of the benchmark suite. [#8066](https://github.com/mapbox/mapbox-gl-js/pull/8066)
256- Improved behavior of `canvasSource.pause` to be more reliable and able to render a single frame. [#8130](https://github.com/mapbox/mapbox-gl-js/pull/8130)
257
258### Bug fixes
259
260- Fixed a bug in Mac Safari 12+ where controls would disappear until you interact with the map. [8193](https://github.com/mapbox/mapbox-gl-js/pull/8193)
261- Fixed a memory leak when calling `source.setData(url)` many times. [#8035](https://github.com/mapbox/mapbox-gl-js/pull/8035)
262- Fixed a bug where marker lost focus when dragging. [#7799](https://github.com/mapbox/mapbox-gl-js/pull/7799)
263- Fixed a bug where `map.getCenter()` returned a reference to an internal `LngLat` object instead of cloning it, leading to potential mutability bugs. [#7922](https://github.com/mapbox/mapbox-gl-js/pull/7922)
264- Fixed a bug where default HTML marker positioning was slightly off. [#8074](https://github.com/mapbox/mapbox-gl-js/pull/8074)
265- Fixed a bug where adding a fill extrusion layer for non-polygon layers would lead to visual artifacts. [#7685](https://github.com/mapbox/mapbox-gl-js/pull/7685)
266- Fixed intermittent Flow failures on CI. [#8061](https://github.com/mapbox/mapbox-gl-js/pull/8061)
267- Fixed a bug where calling `Map#removeFeatureState` does not remove the state from some tile zooms [#8087](https://github.com/mapbox/mapbox-gl-js/pull/8087)
268- Fixed a bug where `removeFeatureState` didn't work on features with `id` equal to `0`. [#8150](https://github.com/mapbox/mapbox-gl-js/pull/8150) (h/t [jutaz](https://github.com/jutaz))
269
270## 0.53.1
271
272### Bug fixes
273* Turn off telemetry for Mapbox Atlas ([#7945](https://github.com/mapbox/mapbox-gl-js/pull/7945))
274* Fix order of 3D features in query results (fix #7883) ([#7953](https://github.com/mapbox/mapbox-gl-js/pull/7953))
275* Fix RemovePaintState benchmarks ([#7930](https://github.com/mapbox/mapbox-gl-js/pull/7930))
276
277## 0.53.0
278
279### Features and improvements
280* Enable `fill-extrusion` querying with ray picking ([#7499](https://github.com/mapbox/mapbox-gl-js/pull/7499))
281* Add `clusterProperties` option for aggregated cluster properties ([#2412](https://github.com/mapbox/mapbox-gl-js/issues/2412), fixed by [#7584](https://github.com/mapbox/mapbox-gl-js/pull/7584))
282* Allow initial map bounds to be adjusted with `fitBounds` options. ([#7681](https://github.com/mapbox/mapbox-gl-js/pull/7681)) (h/t [elyobo](https://github.com/elyobo))
283* Remove popups on `Map#remove` ([#7749](https://github.com/mapbox/mapbox-gl-js/pull/7749)) (h/t [andycalder](https://github.com/andycalder))
284* Add `Map#removeFeatureState` ([#7761](https://github.com/mapbox/mapbox-gl-js/pull/7761))
285* Add `number-format` expression ([#7626](https://github.com/mapbox/mapbox-gl-js/pull/7626))
286* Add `symbol-sort-key` style property ([#7678](https://github.com/mapbox/mapbox-gl-js/pull/7678))
287
288### Bug fixes
289* Upgrades Earcut to fix a rare bug in rendering polygons that contain a coincident chain of holes ([#7806](https://github.com/mapbox/mapbox-gl-js/issues/7806), fixed by [#7878](https://github.com/mapbox/mapbox-gl-js/pull/7878))
290* Allow `file://` protocol in XHR requests for Cordova/Ionic/etc ([#7818](https://github.com/mapbox/mapbox-gl-js/pull/7818))
291* Correctly handle WebP images in Edge 18 ([#7687](https://github.com/mapbox/mapbox-gl-js/pull/7687))
292* Fix bug which mistakenly requested WebP images in browsers that do not support WebP (#7817) ([#7819](https://github.com/mapbox/mapbox-gl-js/pull/7819))
293* Fix images not being aborted when dequeued ([#7655](https://github.com/mapbox/mapbox-gl-js/pull/7655))
294* Fix DEM layer memory leak ([#7690](https://github.com/mapbox/mapbox-gl-js/issues/7690), fixed by [#7691](https://github.com/mapbox/mapbox-gl-js/pull/7691))
295* Set correct color state before rendering custom layer ([#7711](https://github.com/mapbox/mapbox-gl-js/pull/7711))
296* Set `LngLat.toBounds()` default radius to 0 ([#7722](https://github.com/mapbox/mapbox-gl-js/issues/7722), fixed by [#7723](https://github.com/mapbox/mapbox-gl-js/pull/7723)) (h/t [cherniavskii](https://github.com/cherniavskii))
297* Fix race condition in `feature-state` dependent layers ([#7523](https://github.com/mapbox/mapbox-gl-js/issues/7523), fixed by [#7790](https://github.com/mapbox/mapbox-gl-js/pull/7790))
298* Prevent `map.repaint` from mistakenly enabling continuous repaints ([#7667](https://github.com/mapbox/mapbox-gl-js/pull/7667))
299* Prevent map shaking while zooming in on raster tiles ([#7426](https://github.com/mapbox/mapbox-gl-js/pull/7426))
300* Fix query point translation for multi-point geometry ([#6833](https://github.com/mapbox/mapbox-gl-js/issues/6833), fixed by [#7581](https://github.com/mapbox/mapbox-gl-js/pull/7581))
301
302## 0.52.0
303
304### Breaking changes
305* Canonicalize tile urls to `mapbox://` urls so they can be transformed with `config.API_URL` ([#7594](https://github.com/mapbox/mapbox-gl-js/pull/7594))
306
307### Features and improvements
308* Add getter and setter for `config.API_URL` ([#7594](https://github.com/mapbox/mapbox-gl-js/pull/7594))
309* Allow user to define element other than map container for full screen control ([#7548](https://github.com/mapbox/mapbox-gl-js/pull/7548))
310* Add validation option to style setters ([#7604](https://github.com/mapbox/mapbox-gl-js/pull/7604))
311* Add 'idle' event: fires when no further rendering is expected without further interaction. ([#7625](https://github.com/mapbox/mapbox-gl-js/pull/7625))
312
313### Bug fixes
314* Fire error when map.getLayoutProperty references missing layer ([#7537](https://github.com/mapbox/mapbox-gl-js/issues/7537), fixed by [#7539](https://github.com/mapbox/mapbox-gl-js/pull/7539))
315* Fix shaky sprites when zooming with scrolling ([#7558](https://github.com/mapbox/mapbox-gl-js/pull/7558))
316* Fix layout problems in attribution control ([#7608](https://github.com/mapbox/mapbox-gl-js/pull/7608)) (h/t [lucaswoj](https://github.com/lucaswoj))
317* Fixes resetting map's pitch to 0 if initial bounds is set ([#7617](https://github.com/mapbox/mapbox-gl-js/pull/7617)) (h/t [stepankuzmin](https://github.com/stepankuzmin))
318* Fix occasional failure to load images after multiple image request abortions [#7641](https://github.com/mapbox/mapbox-gl-js/pull/7641)
319* Update repo url to correct one ([#7486](https://github.com/mapbox/mapbox-gl-js/pull/7486)) (h/t [nicholas-l](https://github.com/nicholas-l))
320* Fix bug where symbols where sometimes not rendered immediately ([#7610](https://github.com/mapbox/mapbox-gl-js/pull/7610))
321* Fix bug where cameraForBounds returns incorrect CameraOptions with asymmetrical padding/offset ([#7517](https://github.com/mapbox/mapbox-gl-js/issues/7517), fixed by [#7518](https://github.com/mapbox/mapbox-gl-js/pull/7518)) (h/t [mike-marcacci](https://github.com/mike-marcacci))
322* Use diff+patch approach to map.setStyle when the parameter is a URL ([#4025](https://github.com/mapbox/mapbox-gl-js/issues/4025), fixed by [#7562](https://github.com/mapbox/mapbox-gl-js/pull/7562))
323* Begin touch zoom immediately when rotation disabled ([#7582](https://github.com/mapbox/mapbox-gl-js/pull/7582)) (h/t [msbarry](https://github.com/msbarry))
324* Fix symbol rendering under opaque fill layers ([#7612](https://github.com/mapbox/mapbox-gl-js/pull/7612))
325* Fix shaking by aligning raster sources to pixel grid only when map is idle ([7426](https://github.com/mapbox/mapbox-gl-js/pull/7426))
326* Fix raster layers in Edge 18 by disabling it's incomplete WebP support ([7687](https://github.com/mapbox/mapbox-gl-js/pull/7687))
327* Fix memory leak in hillshade layer ([7691](https://github.com/mapbox/mapbox-gl-js/pull/7691))
328* Fix disappearing custom layers ([7711](https://github.com/mapbox/mapbox-gl-js/pull/7711))
329
330## 0.51.0
331November 7, 2018
332
333### ✨ Features and improvements
334* Add initial bounds as map constructor option ([#5518](https://github.com/mapbox/mapbox-gl-js/pull/5518)) (h/t [stepankuzmin](https://github.com/stepankuzmin))
335* Improve performance on machines with > 8 cores ([#7407](https://github.com/mapbox/mapbox-gl-js/issues/7407), fixed by [#7430](https://github.com/mapbox/mapbox-gl-js/pull/7430))
336* Add `MercatorCoordinate` type ([#7488](https://github.com/mapbox/mapbox-gl-js/pull/7488))
337* Allow browser-native `contextmenu` to be enabled ([#2301](https://github.com/mapbox/mapbox-gl-js/issues/2301), fixed by [#7369](https://github.com/mapbox/mapbox-gl-js/pull/7369))
338* Add an unminified production build to the NPM package ([#7403](https://github.com/mapbox/mapbox-gl-js/pull/7403))
339* Add support for `LngLat` conversion from `{lat, lon}` ([#7507](https://github.com/mapbox/mapbox-gl-js/pull/7507)) (h/t [bfrengley](https://github.com/bfrengley))
340* Add tooltips for navigation controls ([#7373](https://github.com/mapbox/mapbox-gl-js/pull/7373))
341* Show attribution only for used sources ([#7384](https://github.com/mapbox/mapbox-gl-js/pull/7384))
342* Add telemetry event to log map loads ([#7431](https://github.com/mapbox/mapbox-gl-js/pull/7431))
343* **Tighten style validation**
344 * Disallow expressions as stop values ([#7396](https://github.com/mapbox/mapbox-gl-js/pull/7396))
345 * Disallow `feature-state` expressions in filters ([#7366](https://github.com/mapbox/mapbox-gl-js/pull/7366))
346
347### 🐛 Bug fixes
348* Fix for GeoJSON geometries not working when coincident with tile boundaries([#7436](https://github.com/mapbox/mapbox-gl-js/issues/7436), fixed by [#7448](https://github.com/mapbox/mapbox-gl-js/pull/7448))
349* Fix depth buffer-related rendering issues on some Android devices. ([#7471](https://github.com/mapbox/mapbox-gl-js/pull/7471))
350* Fix positioning of compact attribution strings ([#7444](https://github.com/mapbox/mapbox-gl-js/pull/7444), [#7445](https://github.com/mapbox/mapbox-gl-js/pull/7445), and [#7391](https://github.com/mapbox/mapbox-gl-js/pull/7391))
351* Fix an issue with removing markers in mouse event callbacks ([#7442](https://github.com/mapbox/mapbox-gl-js/pull/7442)) (h/t [vbud](https://github.com/vbud))
352* Remove controls before destroying a map ([#7479](https://github.com/mapbox/mapbox-gl-js/pull/7479))
353* Fix display of Scale control values < 1 ([#7469](https://github.com/mapbox/mapbox-gl-js/pull/7469)) (h/t [MichaelHedman](https://github.com/MichaelHedman))
354* Fix an error when using location `hash` within iframes in IE11 ([#7411](https://github.com/mapbox/mapbox-gl-js/pull/7411))
355* Fix depth mode usage in custom layers ([#7432](https://github.com/mapbox/mapbox-gl-js/pull/7432)) (h/t [markusjohnsson](https://github.com/markusjohnsson))
356* Fix an issue with shaky sprite images during scroll zooms ([#7558](https://github.com/mapbox/mapbox-gl-js/pull/7558))
357
358
359## 0.50.0
360October 10, 2018
361
362### ✨ Features and improvements
363* 🎉 Add Custom Layers that can be rendered into with user-provided WebGL code ([#7039](https://github.com/mapbox/mapbox-gl-js/pull/7039))
364* Add WebGL face culling for increased performance ([#7178](https://github.com/mapbox/mapbox-gl-js/pull/7178))
365* Improve speed of expression evaluation ([#7334](https://github.com/mapbox/mapbox-gl-js/pull/7334))
366* Automatically coerce to string for `concat` expression and `text-field` property ([#6190](https://github.com/mapbox/mapbox-gl-js/issues/6190), fixed by [#7280](https://github.com/mapbox/mapbox-gl-js/pull/7280))
367* Add `fill-extrusion-vertical-gradient` property for controlling shading of fill extrusions ([#5768](https://github.com/mapbox/mapbox-gl-js/issues/5768), fixed by [#6841](https://github.com/mapbox/mapbox-gl-js/pull/6841))
368* Add update functionality for images provided via `ImageSource` ([#4050](https://github.com/mapbox/mapbox-gl-js/issues/4050), fixed by [#7342](https://github.com/mapbox/mapbox-gl-js/pull/7342)) (h/t [dcervelli](https://github.com/dcervelli))
369
370
371
372### 🐛 Bug fixes
373* **Expressions**
374 * Fix expressions that use `log2` and `log10` in IE11 ([#7318](https://github.com/mapbox/mapbox-gl-js/issues/7318), fixed by [#7320](https://github.com/mapbox/mapbox-gl-js/pull/7320))
375 * Fix `let` expression stripping expected type during parsing ([#7300](https://github.com/mapbox/mapbox-gl-js/issues/7300), fixed by [#7301](https://github.com/mapbox/mapbox-gl-js/pull/7301))
376 * Fix superfluous wrapping of literals in `literal` expression ([#7336](https://github.com/mapbox/mapbox-gl-js/issues/7336), fixed by [#7337](https://github.com/mapbox/mapbox-gl-js/pull/7337))
377 * Allow calling `to-color` on values that are already of type `Color` ([#7260](https://github.com/mapbox/mapbox-gl-js/pull/7260))
378 * Fix `to-array` for empty arrays (([#7261](https://github.com/mapbox/mapbox-gl-js/pull/7261)))
379 * Fix identity functions for `text-field` when using formatted text ([#7351](https://github.com/mapbox/mapbox-gl-js/pull/7351))
380 * Fix coercion of `null` to `0` in `to-number` expression ([#7083](https://github.com/mapbox/mapbox-gl-js/issues/7083), fixed by [#7274](https://github.com/mapbox/mapbox-gl-js/pull/7274))
381* **Canvas source**
382 * Fix missing repeats of `CanvasSource` when it crosses the antimeridian ([#7273](https://github.com/mapbox/mapbox-gl-js/pull/7273))
383 * Fix `CanvasSource` not respecting alpha values set on `canvas` element ([#7302](https://github.com/mapbox/mapbox-gl-js/issues/7302), fixed by [#7309](https://github.com/mapbox/mapbox-gl-js/pull/7309))
384* **Rendering**
385 * Fix rendering of fill extrusions with really high heights ([#7292](https://github.com/mapbox/mapbox-gl-js/pull/7292))
386 * Fix an error where the map state wouldn't return to `loaded` after certain runtime styling changes when there were errored tiles in the viewport ([#7355](https://github.com/mapbox/mapbox-gl-js/pull/7355))
387 * Fix errors when rendering symbol layers without symbols ([#7241](https://github.com/mapbox/mapbox-gl-js/issues/7241), fixed by [#7253](https://github.com/mapbox/mapbox-gl-js/pull/7253))
388 * Don't fade in symbols with `*-allow-overlap: true` when panning into the viewport ([#7172](https://github.com/mapbox/mapbox-gl-js/issues/7172), fixed by[#7244](https://github.com/mapbox/mapbox-gl-js/pull/7244))
389* **Library**
390 * Fix disambiguation for `mouseover` event ([#7295](https://github.com/mapbox/mapbox-gl-js/issues/7295), fixed by [#7299](https://github.com/mapbox/mapbox-gl-js/pull/7299))
391 * Fix silent failure of `getImage` if an SVG is requested ([#7312](https://github.com/mapbox/mapbox-gl-js/issues/7312), fixed by [#7313](https://github.com/mapbox/mapbox-gl-js/pull/7313))
392 * Fix empty control group box shadow ([#7303](https://github.com/mapbox/mapbox-gl-js/issues/7303), fixed by [#7304](https://github.com/mapbox/mapbox-gl-js/pull/7304)) (h/t [Duder-onomy](https://github.com/Duder-onomy))
393 * Fixed an issue where a wrong timestamp was sent for Mapbox turnstile events ([#7381](https://github.com/mapbox/mapbox-gl-js/pull/7381))
394 * Fixed a bug that lead to attribution not showing up correctly in Internet Explorer ([#3945](https://github.com/mapbox/mapbox-gl-js/issues/3945), fixed by [#7391](https://github.com/mapbox/mapbox-gl-js/pull/7391))
395
396
397## 0.49.0
398September 6, 2018
399
400### ⚠️ Breaking changes
401* Use `client{Height/Width}` instead of `offset{Height/Width}` for map canvas sizing ([#6848](https://github.com/mapbox/mapbox-gl-js/issues/6848), fixed by [#7128](https://github.com/mapbox/mapbox-gl-js/pull/7128))
402
403### 🐛 Bug fixes
404* Fix [Top Issues list](https://mapbox.github.io/top-issues/#!mapbox/mapbox-gl-js) for mapbox-gl-js ([#7108](https://github.com/mapbox/mapbox-gl-js/issues/7108), fixed by [#7112](https://github.com/mapbox/mapbox-gl-js/pull/7112))
405* Fix bug in which symbols with `icon-allow-overlap: true, text-allow-overlap: true, text-optional: false` would show icons when they shouldn't ([#7041](https://github.com/mapbox/mapbox-gl-js/pull/7041))
406* Fix bug where the map would not stop at the exact zoom level requested by Map#FlyTo (#7222) ([#7223](https://github.com/mapbox/mapbox-gl-js/pull/7223)) (h/t [benoitbzl](https://github.com/benoitbzl))
407* Keep map centered on the center point of a multi-touch gesture when zooming (#6722) ([#7191](https://github.com/mapbox/mapbox-gl-js/pull/7191)) (h/t [pakastin](https://github.com/pakastin))
408* Update the style-spec's old `gl-style-migrate` script to include conversion of legacy functions and filters to their expression equivalents ([#6927](https://github.com/mapbox/mapbox-gl-js/issues/6927), fixed by [#7095](https://github.com/mapbox/mapbox-gl-js/pull/7095))
409* Fix `icon-size` for small data-driven values ([#7125](https://github.com/mapbox/mapbox-gl-js/pull/7125))
410* Fix bug in the way AJAX requests load local files on iOS web view ([#6610](https://github.com/mapbox/mapbox-gl-js/pull/6610)) (h/t [oscarfonts](https://github.com/oscarfonts))
411* Fix bug in which canvas sources would not render in world wrapped tiles at the edge of the viewport ([#7271]https://github.com/mapbox/mapbox-gl-js/issues/7271), fixed by [#7273](https://github.com/mapbox/mapbox-gl-js/pull/7273))
412
413### ✨ Features and improvements
414* Performance updates:
415 * Improve time to first render by updating how feature ID maps are transferred to the main thread ([#7110](https://github.com/mapbox/mapbox-gl-js/issues/7110), fixed by [#7132](https://github.com/mapbox/mapbox-gl-js/pull/7132))
416 * Reduce size of JSON transmitted from worker thread to main thread ([#7124](https://github.com/mapbox/mapbox-gl-js/pull/7124))
417 * Improve image/glyph atlas packing algorithm ([#7171](https://github.com/mapbox/mapbox-gl-js/pull/7171))
418 * Use murmur hash on symbol instance keys to reduce worker transfer costs ([#7127](https://github.com/mapbox/mapbox-gl-js/pull/7127))
419* Add GL state management for uniforms ([#6018](https://github.com/mapbox/mapbox-gl-js/pull/6018))
420* Add `symbol-z-order` symbol layout property to style spec ([#7219](https://github.com/mapbox/mapbox-gl-js/pull/7219))
421* Implement data-driven styling support for `*-pattern properties` ([#6289](https://github.com/mapbox/mapbox-gl-js/pull/6289))
422* Add `Map#fitScreenCoordinates` which fits viewport to two points, similar to `Map#fitBounds` but uses screen coordinates and supports non-zero map bearings ([#6894](https://github.com/mapbox/mapbox-gl-js/pull/6894))
423* Re-implement LAB/HSL color space interpolation for expressions ([#5326](https://github.com/mapbox/mapbox-gl-js/issues/5326), fixed by [#7123](https://github.com/mapbox/mapbox-gl-js/pull/7123))
424* Enable benchmark testing for Mapbox styles ([#7047](https://github.com/mapbox/mapbox-gl-js/pull/7047))
425* Allow `Map#setFeatureState` and `Map#getFeatureState` to accept numeric IDs ([#7106](https://github.com/mapbox/mapbox-gl-js/pull/7106)) (h/t [bfrengley](https://github.com/bfrengley))
426
427## 0.48.0
428August 16, 2018
429
430### ⚠️ Breaking changes
431* Treat tiles that error with status 404 as empty renderable tiles to prevent rendering duplicate features in some sparse tilesets ([#6803](https://github.com/mapbox/mapbox-gl-js/pull/6803))
432
433### 🐛 Bug fixes
434* Fix issue where `text-max-angle` property was being calculated incorrectly internally, causing potential rendering errors when `"symbol-placement": line`
435* Require `feature.id` when using `Map#setFeatureState` ([#6974](https://github.com/mapbox/mapbox-gl-js/pull/6974))
436* Fix issue with removing the `GeolocateControl` when user location is being used ([#6977](https://github.com/mapbox/mapbox-gl-js/pull/6977)) (h/t [sergei-zelinsky](https://github.com/sergei-zelinsky))
437* Fix memory leak caused by a failure to remove all controls added to the map ([#7042](https://github.com/mapbox/mapbox-gl-js/pull/7042))
438* Fix bug where the build would fail when using mapbox-gl webpack 2 and UglifyJSPlugin ([#4359](https://github.com/mapbox/mapbox-gl-js/issues/4359), fixed by [#6956](https://api.github.com/repos/mapbox/mapbox-gl-js/pulls/6956))
439* Fix bug where fitBounds called with coordinates outside the bounds of Web Mercator resulted in uncaught error ([#6906](https://github.com/mapbox/mapbox-gl-js/issues/6906), fixed by [#6918](https://api.github.com/repos/mapbox/mapbox-gl-js/pulls/6918))
440* Fix bug wherein `Map#querySourceFeatures` was returning bad results on zooms > maxZoom ([#7061](https://github.com/mapbox/mapbox-gl-js/pull/7061))
441* Relax typing for equality and order expressions ([#6459](https://github.com/mapbox/mapbox-gl-js/issues/6459), fixed by [#6961](https://api.github.com/repos/mapbox/mapbox-gl-js/pulls/6961))
442* Fix bug where `queryPadding` for all layers in a source was set by the first layer, causing incorrect querying on other layers and, in some cases, incorrect firing of events associated with individual layers ([#6909](https://github.com/mapbox/mapbox-gl-js/pull/6909))
443
444### ✨ Features and improvements
445
446* Performance Improvements:
447 * Stop unnecessary serialization of symbol source features. ([#7013](https://github.com/mapbox/mapbox-gl-js/pull/7013))
448 * Optimize calculation for getting visible tile coordinates ([#6998](https://github.com/mapbox/mapbox-gl-js/pull/6998))
449 * Improve performance of creating `{Glyph/Image}Atlas`es ([#7091](https://github.com/mapbox/mapbox-gl-js/pull/7091))
450 * Optimize and simplify tile retention logic ([#6995](https://github.com/mapbox/mapbox-gl-js/pull/6995))
451* Add a user turnstile event for users accessing Mapbox APIs ([#6980](https://github.com/mapbox/mapbox-gl-js/pull/6980))
452* Add support for autogenerating feature ids for GeoJSON sources so they can be used more easily with the `Map#setFeatureState` API ([#7043](https://www.github.com/mapbox/mapbox-gl-js/pull/7043))) ([#7091](https://github.com/mapbox/mapbox-gl-js/pull/7091))
453* Add ability to style symbol layers labels with multiple fonts and text sizes via `"format"` expression ([#6994](https://www.github.com/mapbox/mapbox-gl-js/pull/6994))
454* Add customAttribution option to AttributionControl ([#7033](https://github.com/mapbox/mapbox-gl-js/pull/7033)) (h/t [mklopets](https://github.com/mklopets))
455* Publish Flow type definitions alongside compiled bundle ([#7079](https://api.github.com/repos/mapbox/mapbox-gl-js/pulls/7079))
456* Introduce symbol cross fading when crossing integer zoom levels to prevent labels from disappearing before newly loaded tiles' labels can be rendered ([#6951](https://github.com/mapbox/mapbox-gl-js/pull/6951))
457* Improvements in label collision detection ([#6925](https://api.github.com/repos/mapbox/mapbox-gl-js/pulls/6925)))
458
459## 0.47.0
460
461### ✨ Features and improvements
462* Add configurable drag pan threshold ([#6809](https://github.com/mapbox/mapbox-gl-js/pull/6809)) (h/t [msbarry](https://github.com/msbarry))
463* Add `raster-resampling` raster paint property ([#6411](https://github.com/mapbox/mapbox-gl-js/pull/6411)) (h/t [andrewharvey](https://github.com/andrewharvey))
464* Add `symbol-placement: line-center` ([#6821](https://github.com/mapbox/mapbox-gl-js/pull/6821))
465* Add methods for inspecting GeoJSON clusters ([#3318](https://github.com/mapbox/mapbox-gl-js/issues/3318), fixed by [#6829](https://github.com/mapbox/mapbox-gl-js/pull/6829))
466* Add warning to geolocate control when unsupported ([#6923](https://github.com/mapbox/mapbox-gl-js/pull/6923)) (h/t [aendrew](https://github.com/aendrew))
467* Upgrade geojson-vt to 3.1.4 ([#6942](https://github.com/mapbox/mapbox-gl-js/pull/6942))
468* Include link to license in compiled bundle ([#6975](https://github.com/mapbox/mapbox-gl-js/pull/6975))
469
470### 🐛 Bug fixes
471* Use updateData instead of re-creating buffers for repopulated paint arrays ([#6853](https://github.com/mapbox/mapbox-gl-js/pull/6853))
472* Fix ScrollZoom handler setting tr.zoom = NaN ([#6924](https://github.com/mapbox/mapbox-gl-js/pull/6924))
473 - Failed to invert matrix error ([#6486](https://github.com/mapbox/mapbox-gl-js/issues/6486), fixed by [#6924](https://github.com/mapbox/mapbox-gl-js/pull/6924))
474 - Fixing matrix errors ([#6782](https://github.com/mapbox/mapbox-gl-js/issues/6782), fixed by [#6924](https://github.com/mapbox/mapbox-gl-js/pull/6924))
475* Fix heatmap tile clipping when layers are ordered above it ([#6806](https://github.com/mapbox/mapbox-gl-js/issues/6806), fixed by [#6807](https://github.com/mapbox/mapbox-gl-js/pull/6807))
476* Fix video source in safari (macOS and iOS) ([#6443](https://github.com/mapbox/mapbox-gl-js/issues/6443), fixed by [#6811](https://github.com/mapbox/mapbox-gl-js/pull/6811))
477* Do not reload errored tiles ([#6813](https://github.com/mapbox/mapbox-gl-js/pull/6813))
478* Fix send / remove timing bug in Dispatcher ([#6756](https://github.com/mapbox/mapbox-gl-js/pull/6756), fixed by [#6826](https://github.com/mapbox/mapbox-gl-js/pull/6826))
479* Fix flyTo not zooming to exact given zoom ([#6828](https://github.com/mapbox/mapbox-gl-js/pull/6828))
480* Don't stop animation on map resize ([#6636](https://github.com/mapbox/mapbox-gl-js/pull/6636))
481* Fix map.getBounds() with rotated map ([#6875](https://github.com/mapbox/mapbox-gl-js/pull/6875)) (h/t [zoltan-mihalyi](https://github.com/zoltan-mihalyi))
482* Support collators in feature filter expressions. ([#6929](https://github.com/mapbox/mapbox-gl-js/pull/6929))
483* Fix Webpack production mode compatibility ([#6981](https://github.com/mapbox/mapbox-gl-js/pull/6981))
484
485## 0.46.0
486
487### ⚠️ Breaking changes
488
489* Align implicit type casting behavior of `match` expressions with with `case/==` ([#6684](https://github.com/mapbox/mapbox-gl-js/pull/6684))
490
491### ✨ Features and improvements
492
493* :tada: Add `Map#setFeatureState` and `feature-state` expression to support interactive styling ([#6263](https://github.com/mapbox/mapbox-gl-js/pull/6263))
494* Create draggable `Marker` with `setDraggable` ([#6687](https://github.com/mapbox/mapbox-gl-js/pull/6687))
495* Add `Map#listImages` for listing all currently active sprites/images ([#6381](https://github.com/mapbox/mapbox-gl-js/issues/6381))
496* Add "crossSourceCollisions" option to disable cross-source collision detection ([#6566](https://github.com/mapbox/mapbox-gl-js/pull/6566))
497* Handle `text/icon-rotate` for symbols with `symbol-placement: point` ([#6075](https://github.com/mapbox/mapbox-gl-js/issues/6075))
498* Automatically compact Mapbox wordmark on narrow maps. ([#4282](https://github.com/mapbox/mapbox-gl-js/issues/4282)) (h/t [andrewharvey](https://github.com/andrewharvey))
499* Only show compacted AttributionControl on interactive displays ([#6506](https://github.com/mapbox/mapbox-gl-js/pull/6506)) (h/t [andrewharvey](https://github.com/andrewharvey))
500* Use postcss to inline svg files into css, reduce size of mapbox-gl.css ([#6513](https://github.com/mapbox/mapbox-gl-js/pull/6513)) (h/t [andrewharvey](https://github.com/andrewharvey))
501* Add support for GeoJSON attribution ([#6364](https://github.com/mapbox/mapbox-gl-js/pull/6364)) (h/t [andrewharvey](https://github.com/andrewharvey))
502* Add instructions for running individual unit and render tests ([#6686](https://github.com/mapbox/mapbox-gl-js/pull/6686))
503* Make Map constructor fail if WebGL init fails. ([#6744](https://github.com/mapbox/mapbox-gl-js/pull/6744)) (h/t [uforic](https://github.com/uforic))
504* Add browser fallback code for `collectResourceTiming: true` in web workers ([#6721](https://github.com/mapbox/mapbox-gl-js/pull/6721))
505* Remove ignored usage of gl.lineWidth ([#5541](https://github.com/mapbox/mapbox-gl-js/pull/5541))
506* Split new bounds calculation out of fitBounds into new method ([#6683](https://github.com/mapbox/mapbox-gl-js/pull/6683))
507* Allow integration tests to be organized in an arbitrarily deep directory structure ([#3920](https://github.com/mapbox/mapbox-gl-js/issues/3920))
508* Make "Missing Mapbox GL JS CSS" a console warning ([#5786](https://github.com/mapbox/mapbox-gl-js/issues/5786))
509* Add rel="noopener" to Mapbox attribution link. ([#6729](https://github.com/mapbox/mapbox-gl-js/pull/6729)) (h/t [gorbypark](https://github.com/gorbypark))
510* Update to deep equality check in example code ([#6599](https://github.com/mapbox/mapbox-gl-js/pull/6599)) (h/t [jonsadka](https://github.com/jonsadka))
511* Upgrades!
512 - Upgrade ESM dependency to ^3.0.39 ([#6750](https://github.com/mapbox/mapbox-gl-js/pull/6750))
513 - Ditch gl-matrix fork in favor of the original package ([#6751](https://github.com/mapbox/mapbox-gl-js/pull/6751))
514 - Update to latest sinon ([#6771](https://github.com/mapbox/mapbox-gl-js/pull/6771))
515 - Upgrade to Flow 0.69 ([#6594](https://github.com/mapbox/mapbox-gl-js/pull/6594))
516 - Update to mapbox-gl-supported 1.4.0 ([#6773](https://github.com/mapbox/mapbox-gl-js/pull/6773))
517
518### 🐛 Bug fixes
519
520* `collectResourceTiming: true` generates error on iOS9 Safari, IE 11 ([#6690](https://github.com/mapbox/mapbox-gl-js/issues/6690))
521* Fix PopupOptions flow type declarations ([#6670](https://github.com/mapbox/mapbox-gl-js/pull/6670)) (h/t [TimPetricola](https://github.com/TimPetricola))
522* Add className option to Popup constructor ([#6502](https://github.com/mapbox/mapbox-gl-js/pull/6502)) (h/t [Ashot-KR](https://github.com/Ashot-KR))
523* GeoJSON MultiLineStrings with `lineMetrics=true` only rendered first line ([#6649](https://github.com/mapbox/mapbox-gl-js/issues/6649))
524* Provide target property for mouseenter/over/leave/out events ([#6623](https://github.com/mapbox/mapbox-gl-js/issues/6623))
525* Don't break on sources whose name contains "." ([#6660](https://github.com/mapbox/mapbox-gl-js/issues/6660))
526* Rotate and pitch with navigationControl broke in v0.45 ([#6650](https://github.com/mapbox/mapbox-gl-js/issues/6650))
527* Zero-width lines remained visible ([#6769](https://github.com/mapbox/mapbox-gl-js/pull/6769))
528* Heatmaps inappropriately clipped at tile boundaries ([#6806](https://github.com/mapbox/mapbox-gl-js/issues/6806))
529* Use named exports for style-spec entrypoint module ([#6601](https://github.com/mapbox/mapbox-gl-js/issues/6601)
530* Don't fire click event if default is prevented on mousedown for a drag event ([#6697](https://github.com/mapbox/mapbox-gl-js/pull/6697), fixes [#6642](https://github.com/mapbox/mapbox-gl-js/issues/6642))
531* Double clicking to zoom in breaks map dragging/panning in Edge ([#6740](https://github.com/mapbox/mapbox-gl-js/issues/6740)) (h/t [GUI](https://github.com/GUI))
532* \*-transition properties cannot be set with setPaintProperty() ([#6706](https://github.com/mapbox/mapbox-gl-js/issues/6706))
533* Marker with `a` element does not open the url when clicked ([#6730](https://github.com/mapbox/mapbox-gl-js/issues/6730))
534* `setRTLTextPlugin` fails with relative URLs ([#6719](https://github.com/mapbox/mapbox-gl-js/issues/6719))
535* Collision detection incorrect for symbol layers that share the same layout properties ([#6548](https://github.com/mapbox/mapbox-gl-js/pull/6548))
536* Fix a possible crash when calling queryRenderedFeatures after querySourceFeatures
537 ([#6559](https://github.com/mapbox/mapbox-gl-js/pull/6559))
538* Fix a collision detection issue that could cause labels to temporarily be placed too densely during rapid panning ([#5654](https://github.com/mapbox/mapbox-gl-js/issues/5654))
539
540## 0.45.0
541
542### ⚠️ Breaking changes
543
544* `Evented#fire` and `Evented#listens` are now marked as private. Though `Evented` is still exported, and `fire` and `listens` are still functional, we encourage you to seek alternatives; a future version may remove their API accessibility or change its behavior. If you are writing a class that needs event emitting functionality, consider using [`EventEmitter`](https://nodejs.org/api/events.html#events_class_eventemitter) or similar libraries instead.
545* The `"to-string"` expression operator now converts `null` to an empty string rather than to `"null"`. [#6534](https://github.com/mapbox/mapbox-gl-js/pull/6534)
546
547### ✨ Features and improvements
548
549* :rainbow: Add `line-gradient` property [#6303](https://github.com/mapbox/mapbox-gl-js/pull/6303)
550* Add `abs`, `round`, `floor`, and `ceil` expression operators [#6496](https://github.com/mapbox/mapbox-gl-js/pull/6496)
551* Add `collator` expression for controlling case and diacritic sensitivity in string comparisons [#6270](https://github.com/mapbox/mapbox-gl-js/pull/6270)
552 - Rename `caseSensitive` and `diacriticSensitive` expressions to `case-sensitive` and `diacritic-sensitive` for consistency [#6598](https://github.com/mapbox/mapbox-gl-js/pull/6598)
553 - Prevent `collator` expressions for evaluating as constant to account for potential environment-specific differences in expression evaluation [#6596](https://github.com/mapbox/mapbox-gl-js/pull/6596)
554* Add CSS linting to test suite (h/t @jasonbarry) [#6071](https://github.com/mapbox/mapbox-gl-js/pull/6071)
555* Add support for configurable maxzoom in `raster-dem` tilesets [#6103](https://github.com/mapbox/mapbox-gl-js/pull/6103)
556* Add `Map#isZooming` and `Map#isRotating` methods [#6128](https://github.com/mapbox/mapbox-gl-js/pull/6128), [#6183](https://github.com/mapbox/mapbox-gl-js/pull/6183)
557* Add support for Mapzen Terrarium tiles in `raster-dem` sources [#6110](https://github.com/mapbox/mapbox-gl-js/pull/6110)
558* Add `preventDefault` method on `mousedown`, `touchstart`, and `dblclick` events [#6218](https://github.com/mapbox/mapbox-gl-js/pull/6218)
559* Add `originalEvent` property on `zoomend` and `moveend` for user-initiated scroll events (h/t @stepankuzmin) [#6175](https://github.com/mapbox/mapbox-gl-js/pull/6175)
560* Accept arguments of type `value` in [`"length"` expressions](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-length) [#6244](https://github.com/mapbox/mapbox-gl-js/pull/6244)
561* Introduce `MapWheelEvent`[#6237](https://github.com/mapbox/mapbox-gl-js/pull/6237)
562* Add setter for `ScaleControl` units (h/t @ryanhamley) [#6138](https://github.com/mapbox/mapbox-gl-js/pull/6138), [#6274](https://github.com/mapbox/mapbox-gl-js/pull/6274)
563* Add `open` event for `Popup` [#6311](https://github.com/mapbox/mapbox-gl-js/pull/6311)
564* Explicit `"object"` type assertions are no longer required when using expressions [#6235](https://github.com/mapbox/mapbox-gl-js/pull/6235)
565* Add `anchor` option to `Marker` [#6350](https://github.com/mapbox/mapbox-gl-js/pull/6350)
566* `HTMLElement` is now passed to `Marker` as part of the `options` object, but the old function signature is still supported for backwards compatibility [#6356](https://github.com/mapbox/mapbox-gl-js/pull/6356)
567* Add support for custom colors when using the default `Marker` SVG element (h/t @andrewharvey) [#6416](https://github.com/mapbox/mapbox-gl-js/pull/6416)
568* Allow `CanvasSource` initialization from `HTMLElement` [#6424](https://github.com/mapbox/mapbox-gl-js/pull/6424)
569* Add `is-supported-script` expression [6260](https://github.com/mapbox/mapbox-gl-js/pull/6260)
570
571### 🐛 Bug fixes
572
573* Align `raster-dem` tiles to pixel grid to eliminate blurry rendering on some devices [#6059](https://github.com/mapbox/mapbox-gl-js/pull/6059)
574* Fix label collision circle debug drawing on overzoomed tiles [#6073](https://github.com/mapbox/mapbox-gl-js/pull/6073)
575* Improve error reporting for some failed requests [#6126](https://github.com/mapbox/mapbox-gl-js/pull/6126), [#6032](https://github.com/mapbox/mapbox-gl-js/pull/6032)
576* Fix several `Map#queryRenderedFeatures` bugs:
577 - account for `{text, icon}-offset` when querying[#6135](https://github.com/mapbox/mapbox-gl-js/pull/6135)
578 - correctly query features that extend across tile boundaries [#5756](https://github.com/mapbox/mapbox-gl-js/pull/6283)
579 - fix querying of `circle` layer features with `-pitch-scaling: 'viewport'` or `-pitch-alignment: 'map'` [#6036](https://github.com/mapbox/mapbox-gl-js/pull/6036)
580 - eliminate flicker effects when using query results to set a hover effect by switching from tile-based to viewport-based symbol querying [#6497](https://github.com/mapbox/mapbox-gl-js/pull/6497)
581* Preserve browser history state when updating the `Map` hash [#6140](https://github.com/mapbox/mapbox-gl-js/pull/6140)
582* Fix undefined behavior when `Map#addLayer` is invoked with an `id` of a preexisting layer [#6147](https://github.com/mapbox/mapbox-gl-js/pull/6147)
583* Fix bug where `icon-image` would not be rendered if `text-field` is an empty string [#6164](https://github.com/mapbox/mapbox-gl-js/pull/6164)
584* Ensure all camera methods fire `rotatestart` and `rotateend` events [#6187](https://github.com/mapbox/mapbox-gl-js/pull/6187)
585* Always hide duplicate labels [#6166](https://github.com/mapbox/mapbox-gl-js/pull/6166)
586* Fix `DragHandler` bugs where a left-button mouse click would end a right-button drag rotate and a drag gesture would not end if the control key is down on `mouseup` [#6193](https://github.com/mapbox/mapbox-gl-js/pull/6193)
587* Add support for calling `{DragPanHandler, DragRotateHandler}#disable` while a gesture is in progress [#6232](https://github.com/mapbox/mapbox-gl-js/pull/6232)
588* Fix `GeolocateControl` user location dot sizing when `Map`'s `<div>` inherits `box-sizing: border-box;` (h/t @andrewharvey) [#6227](https://github.com/mapbox/mapbox-gl-js/pull/6232)
589* Fix bug causing an off-by-one error in `array` expression error messages (h/t @drewbo) [#6269](https://github.com/mapbox/mapbox-gl-js/pull/6269)
590* Improve error message when an invalid access token triggers a 401 error [#6283](https://github.com/mapbox/mapbox-gl-js/pull/6283)
591* Fix bug where lines with `line-width` larger than the sprite height of the `line-pattern` property would render other sprite images [#6246](https://github.com/mapbox/mapbox-gl-js/pull/6246)
592* Fix broken touch events for `DragPanHandler` on mobile using Edge (note that zoom/rotate/pitch handlers still do not support Edge touch events [#1928](https://github.com/mapbox/mapbox-gl-js/pull/1928)) [#6325](https://github.com/mapbox/mapbox-gl-js/pull/6325)
593* Fix race condition in `VectorTileWorkerSource#reloadTile` causing a rendering timeout [#6308](https://github.com/mapbox/mapbox-gl-js/issues/6308)
594* Fix bug causing redundant `gl.stencilFunc` calls due to incorrect state checking (h/t @yangdonglai) [#6330](https://github.com/mapbox/mapbox-gl-js/pull/6330)
595* Fix bug where `mousedown` or `touchstart` would cancel camera animations in non-interactive maps [#6338](https://github.com/mapbox/mapbox-gl-js/pull/6338)
596* Fix bug causing a full-screen flicker when the map is pitched and a symbol layer uses non-zero `text-translate` [#6365](https://github.com/mapbox/mapbox-gl-js/issues/6365)
597* Fix bug in `to-rgba` expression causing division by zero [6388](https://github.com/mapbox/mapbox-gl-js/pull/6388)
598* Fix bug in cross-fading for `*-pattern` properties with non-integer zoom stops [#6430](https://github.com/mapbox/mapbox-gl-js/pull/6430)
599* Fix bug where calling `Map#remove` on a map with constructor option `hash: true` throws an error (h/t @allthesignals) [#6490](https://github.com/mapbox/mapbox-gl-js/pull/6497)
600* Fix bug causing flickering when panning across the anti-meridian [#6438](https://github.com/mapbox/mapbox-gl-js/pull/6438)
601* Fix error when using tiles of non-power-of-two size [#6444](https://github.com/mapbox/mapbox-gl-js/pull/6444)
602* Fix bug causing `Map#moveLayer(layerId, beforeId)` to remove the layer when `layerId === beforeId` [#6542](https://github.com/mapbox/mapbox-gl-js/pull/6542)
603- Fix Rollup build for style-spec module [6575](https://github.com/mapbox/mapbox-gl-js/pull/6575)
604- Fix bug causing `Map#querySourceFeatures` to throw an `Uncaught TypeError`(https://github.com/mapbox/mapbox-gl-js/pull/6555)
605- Fix issue where label collision detection was inaccurate for some symbol layers that shared layout properties with another layer [#6558](https://github.com/mapbox/mapbox-gl-js/pull/6558)
606- Restore `target` property for `mouse{enter,over,leave,out}` events [#6623](https://github.com/mapbox/mapbox-gl-js/pull/6623)
607
608## 0.44.2
609
610### 🐛 Bug fixes
611
612* Workaround a breaking change in Safari causing page to scroll/zoom in response to user actions intended to pan/zoom the map [#6095](https://github.com/mapbox/mapbox-gl-js/issues/6095). (N.B., not to be confused with the workaround from April 2017 dealing with the same breaking change in Chrome [#4259](https://github.com/mapbox/mapbox-gl-js/issues/6095). See also https://github.com/WICG/interventions/issues/18, https://bugs.webkit.org/show_bug.cgi?id=182521, https://bugs.chromium.org/p/chromium/issues/detail?id=639227 .)
613
614## 0.44.1
615
616### 🐛 Bug fixes
617
618* Fix bug causing features from symbol layers to be omitted from `map.queryRenderedFeatures()` [#6074](https://github.com/mapbox/mapbox-gl-js/issues/6074)
619* Fix error triggered by simultaneous scroll-zooming and drag-panning. [#6106](https://github.com/mapbox/mapbox-gl-js/issues/6106)
620* Fix bug wherein drag-panning failed to resume after a brief pause [#6063](https://github.com/mapbox/mapbox-gl-js/issues/6063)
621
622## 0.44.0
623
624### ✨ Features and improvements
625
626* The CSP policy of a page using mapbox-gl-js no longer needs to include `script-src 'unsafe-eval'` [#559](https://github.com/mapbox/mapbox-gl-js/issues/559)
627* Add `LngLatBounds#isEmpty()` method [#5917](https://github.com/mapbox/mapbox-gl-js/pull/5917)
628* Updated to flow 0.62.0 [#5923](https://github.com/mapbox/mapbox-gl-js/issues/5923)
629* Make compass and zoom controls optional ([#5348](https://github.com/mapbox/mapbox-gl-js/pull/5348)) (h/t @matijs)
630* Add `collectResourceTiming` option to the enable collection of [Resource Timing](https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API/Using_the_Resource_Timing_API) data for requests that are made from Web Workers. ([#5948](https://github.com/mapbox/mapbox-gl-js/issues/5948))
631* Improve user location dot appearance across browsers ([#5498](https://github.com/mapbox/mapbox-gl-js/pull/5498)) (h/t @jasonbarry)
632
633### 🐛 Bug fixes
634
635* Fix error triggered by `==` and `!=` expressions [#5947](https://github.com/mapbox/mapbox-gl-js/issues/5947)
636* Image sources honor `renderWorldCopies` [#5932](https://github.com/mapbox/mapbox-gl-js/pull/5932)
637* Fix transitions to default fill-outline-color [#5953](https://github.com/mapbox/mapbox-gl-js/issues/5953)
638* Fix transitions for light properties [#5982](https://github.com/mapbox/mapbox-gl-js/issues/5982)
639* Fix minor symbol collisions on pitched maps [#5913](https://github.com/mapbox/mapbox-gl-js/pull/5913)
640* Fix memory leaks after `Map#remove()` [#5943](https://github.com/mapbox/mapbox-gl-js/pull/5943), [#5951](https://github.com/mapbox/mapbox-gl-js/pull/5951)
641* Fix bug wherein `GeoJSONSource#setData()` caused labels to fade out and back in ([#6002](https://github.com/mapbox/mapbox-gl-js/issues/6002))
642* Fix bug that could cause incorrect collisions for labels placed very near to each other at low zoom levels ([#5993](https://github.com/mapbox/mapbox-gl-js/issues/5993))
643* Fix bug causing `move` events to be fired out of sync with actual map movements ([#6005](https://github.com/mapbox/mapbox-gl-js/pull/6005))
644* Fix bug wherein `Map` did not fire `mouseover` events ([#6000](https://github.com/mapbox/mapbox-gl-js/pull/6000)] (h/t @jay-manday)
645* Fix bug causing blurry rendering of raster tiles ([#4552](https://github.com/mapbox/mapbox-gl-js/issues/4552))
646* Fix potential memory leak caused by removing layers ([#5995](https://github.com/mapbox/mapbox-gl-js/issues/5995))
647* Fix bug causing attribution icon to appear incorrectly in compact maps not using Mapbox data ([#6042](https://github.com/mapbox/mapbox-gl-js/pull/6042))
648* Fix positioning of default marker element ([#6012](https://github.com/mapbox/mapbox-gl-js/pull/6012)) (h/t @andrewharvey)
649
650## 0.43.0 (December 21, 2017)
651
652### ⚠️ Breaking changes
653
654* It is now an error to attempt to remove a source that is in use [#5562](https://github.com/mapbox/mapbox-gl-js/pull/5562)
655* It is now an error if the layer specified by the `before` parameter to `moveLayer` does not exist [#5679](https://github.com/mapbox/mapbox-gl-js/pull/5679)
656* `"colorSpace": "hcl"` now uses shortest-path interpolation for hue [#5811](https://github.com/mapbox/mapbox-gl-js/issues/5811)
657
658### ✨ Features and improvements
659
660* Introduce client-side hillshading with `raster-dem` source type and `hillshade` layer type [#5286](https://github.com/mapbox/mapbox-gl-js/pull/5286)
661* GeoJSON sources take 2x less memory and generate tiles 20%–100% faster [#5799](https://github.com/mapbox/mapbox-gl-js/pull/5799)
662* Enable data-driven values for text-font [#5698](https://github.com/mapbox/mapbox-gl-js/pull/5698)
663* Enable data-driven values for heatmap-radius [#5898](https://github.com/mapbox/mapbox-gl-js/pull/5898)
664* Add getter and setter for offset on marker [#5759](https://github.com/mapbox/mapbox-gl-js/pull/5759)
665* Add `Map#hasImage` [#5775](https://github.com/mapbox/mapbox-gl-js/pull/5775)
666* Improve typing for `==` and `!=` expressions [#5840](https://github.com/mapbox/mapbox-gl-js/pull/5840)
667* Made `coalesce` expressions more useful [#5755](https://github.com/mapbox/mapbox-gl-js/issues/5755)
668* Enable implicit type assertions for array types [#5738](https://github.com/mapbox/mapbox-gl-js/pull/5738)
669* Improve hash control precision [#5767](https://github.com/mapbox/mapbox-gl-js/pull/5767)
670* `supported()` now returns false on old IE 11 versions that don't support Web Worker blob URLs [#5801](https://github.com/mapbox/mapbox-gl-js/pull/5801)
671* Remove flow globals TileJSON and Transferable [#5668](https://github.com/mapbox/mapbox-gl-js/pull/5668)
672* Improve performance of image, video, and canvas sources [#5845](https://github.com/mapbox/mapbox-gl-js/pull/5845)
673
674### 🐛 Bug fixes
675
676* Fix popups and markers lag during pan animation [#4670](https://github.com/mapbox/mapbox-gl-js/issues/4670)
677* Fix fading of symbol layers caused by setData [#5716](https://github.com/mapbox/mapbox-gl-js/issues/5716)
678* Fix behavior of `to-rgba` and `rgba` expressions [#5778](https://github.com/mapbox/mapbox-gl-js/pull/5778), [#5866](https://github.com/mapbox/mapbox-gl-js/pull/5866)
679* Fix cross-fading of `*-pattern` and `line-dasharray` [#5791](https://github.com/mapbox/mapbox-gl-js/pull/5791)
680* Fix `colorSpace` function property [#5843](https://github.com/mapbox/mapbox-gl-js/pull/5843)
681* Fix style diffing when changing GeoJSON source properties [#5731](https://github.com/mapbox/mapbox-gl-js/issues/5731)
682* Fix missing labels when zooming out from overzoomed tile [#5827](https://github.com/mapbox/mapbox-gl-js/issues/5827)
683* Fix missing labels when zooming out and quickly using setData [#5837](https://github.com/mapbox/mapbox-gl-js/issues/5837)
684* Handle NaN as input to step and interpolate expressions [#5757](https://github.com/mapbox/mapbox-gl-js/pull/5757)
685* Clone property values on input and output [#5806](https://github.com/mapbox/mapbox-gl-js/pull/5806)
686* Bump geojson-rewind dependency [#5769](https://github.com/mapbox/mapbox-gl-js/pull/5769)
687* Allow setting Marker's popup before LngLat [#5893](https://github.com/mapbox/mapbox-gl-js/pull/5893)
688
689## 0.42.2 (November 21, 2017)
690
691### 🐛 Bug fixes
692
693- Add box-sizing to the "mapboxgl-ctrl-scale"-class [#5715](https://github.com/mapbox/mapbox-gl-js/pull/5715)
694- Fix rendering in Safari [#5712](https://github.com/mapbox/mapbox-gl-js/issues/5712)
695- Fix "Cannot read property 'hasTransition' of undefined" error [#5714](https://github.com/mapbox/mapbox-gl-js/issues/5714)
696- Fix misplaced raster tiles [#5713](https://github.com/mapbox/mapbox-gl-js/issues/5713)
697- Fix raster tile fading [#5722](https://github.com/mapbox/mapbox-gl-js/issues/5722)
698- Ensure that an unset filter is undefined rather than null [#5727](https://github.com/mapbox/mapbox-gl-js/pull/5727)
699- Restore pitch-with-rotate to nav control [#5725](https://github.com/mapbox/mapbox-gl-js/pull/5725)
700- Validate container option in map constructor [#5695](https://github.com/mapbox/mapbox-gl-js/pull/5695)
701- Fix queryRenderedFeatures behavior for features displayed in multiple layers [#5172](https://github.com/mapbox/mapbox-gl-js/issues/5172)
702
703## 0.42.1 (November 17, 2017)
704
705### 🐛 Bug fixes
706
707- Workaround for map flashing bug on Chrome 62+ with Intel Iris Graphics 6100 cards [#5704](https://github.com/mapbox/mapbox-gl-js/pull/5704)
708- Rerender map when `map.showCollisionBoxes` is set to `false` [#5673](https://github.com/mapbox/mapbox-gl-js/pull/5673)
709- Fix transitions from property default values [#5682](https://github.com/mapbox/mapbox-gl-js/pull/5682)
710- Fix runtime updating of `heatmap-color` [#5682](https://github.com/mapbox/mapbox-gl-js/pull/5682)
711- Fix mobile Safari `history.replaceState` error [#5613](https://github.com/mapbox/mapbox-gl-js/pull/5613)
712
713### ✨ Features and improvements
714
715- Provide default element for Marker class [#5661](https://github.com/mapbox/mapbox-gl-js/pull/5661)
716
717## 0.42.0 (November 10, 2017)
718
719### ⚠️ Breaking changes
720
721- Require that `heatmap-color` use expressions instead of stop functions [#5624](https://github.com/mapbox/mapbox-gl-js/issues/5624)
722- Remove support for validating and migrating v6 styles
723- Remove support for validating v7 styles [#5604](https://github.com/mapbox/mapbox-gl-js/pull/5604)
724- Remove support for including `{tokens}` in expressions for `text-field` and `icon-image` [#5599](https://github.com/mapbox/mapbox-gl-js/issues/5599)
725- Split `curve` expression into `step` and `interpolate` expressions [#5542](https://github.com/mapbox/mapbox-gl-js/pull/5542)
726- Disallow interpolation in expressions for `line-dasharray` [#5519](https://github.com/mapbox/mapbox-gl-js/pull/5519)
727
728### ✨ Features and improvements
729
730- Improve label collision detection [#5150](https://github.com/mapbox/mapbox-gl-js/pull/5150)
731 - Labels from different sources will now collide with each other
732 - Collisions caused by rotation and pitch are now smoothly transitioned with a fade
733 - Improved algorithm for fewer erroneous collisions, denser label placement, and greater label stability during rotation
734- Add `sqrt` expression [#5493](https://github.com/mapbox/mapbox-gl-js/pull/5493)
735
736### 🐛 Bug fixes and error reporting improvements
737
738- Fix viewport calculations for `fitBounds` when both zooming and padding change [#4846](https://github.com/mapbox/mapbox-gl-js/issues/4846)
739- Fix WebGL "range out of bounds for buffer" error caused by sorted symbol layers [#5620](https://github.com/mapbox/mapbox-gl-js/issues/5620)
740- Fix symbol fading across tile reloads [#5491](https://github.com/mapbox/mapbox-gl-js/issues/5491)
741- Change tile rendering order to better match GL Native [#5601](https://github.com/mapbox/mapbox-gl-js/pull/5601)
742- Ensure no errors are triggered when calling `queryRenderedFeatures` on a heatmap layer [#5594](https://github.com/mapbox/mapbox-gl-js/pull/5594)
743- Fix bug causing `queryRenderedSymbols` to return results from different sources [#5554](https://github.com/mapbox/mapbox-gl-js/issues/5554)
744- Fix CJK rendering issues [#5544](https://github.com/mapbox/mapbox-gl-js/issues/5544), [#5546](https://github.com/mapbox/mapbox-gl-js/issues/5546)
745- Account for `circle-stroke-width` in `queryRenderedFeatures` [#5514](https://github.com/mapbox/mapbox-gl-js/pull/5514)
746- Fix rendering of fill layers atop raster layers [#5513](https://github.com/mapbox/mapbox-gl-js/pull/5513)
747- Fix rendering of circle layers with a `circle-stroke-opacity` of 0 [#5496](https://github.com/mapbox/mapbox-gl-js/issues/5496)
748- Fix memory leak caused by actor callbacks [#5443](https://github.com/mapbox/mapbox-gl-js/issues/5443)
749- Fix source cache size for raster sources with tile sizes other than 512px [#4313](https://github.com/mapbox/mapbox-gl-js/issues/4313)
750- Validate that zoom expressions only appear at the top level of an expression [#5609](https://github.com/mapbox/mapbox-gl-js/issues/5609)
751- Validate that step and interpolate expressions don't have any duplicate stops [#5605](https://github.com/mapbox/mapbox-gl-js/issues/5605)
752- Fix rendering for `icon-text-fit` with a data-driven `text-size` [#5632](https://github.com/mapbox/mapbox-gl-js/pull/5632)
753- Improve validation to catch uses of deprecated function syntax [#5667](https://github.com/mapbox/mapbox-gl-js/pull/5667)
754- Permit altitude coordinates in `position` field in GeoJSON [#5608](https://github.com/mapbox/mapbox-gl-js/pull/5608)
755
756## 0.41.0 (October 11, 2017)
757
758### :warning: Breaking changes
759- Removed support for paint classes [#3643](https://github.com/mapbox/mapbox-gl-js/pull/3643). Instead, use runtime styling APIs or `Map#setStyle`.
760- Reverted the `canvas` source `contextType` option added in 0.40.0 [#5449](https://github.com/mapbox/mapbox-gl-js/pull/5449)
761
762### :bug: Bug fixes
763- Clip raster tiles to avoid tile overlap [#5105](https://github.com/mapbox/mapbox-gl-js/pull/5105)
764- Guard for offset edgecase in flyTo [#5331](https://github.com/mapbox/mapbox-gl-js/pull/5331)
765- Ensure the map is updated after the sprite loads [#5367](https://github.com/mapbox/mapbox-gl-js/pull/5367)
766- Limit animation duration on flyTo with maxDuration option [#5349](https://github.com/mapbox/mapbox-gl-js/pull/5349)
767- Make double-tapping on make zoom in by a factor of 2 on iOS [#5274](https://github.com/mapbox/mapbox-gl-js/pull/5274)
768- Fix rendering error with translucent raster tiles [#5380](https://github.com/mapbox/mapbox-gl-js/pull/5380)
769- Error if invalid 'before' argument is passed to Map#addLayer [#5401](https://github.com/mapbox/mapbox-gl-js/pull/5401)
770- Revert CanvasSource intermediary image buffer fix [#5449](https://github.com/mapbox/mapbox-gl-js/pull/5449)
771
772### :sparkles: Features and improvements
773- Use setData operation when diffing geojson sources [#5332](https://github.com/mapbox/mapbox-gl-js/pull/5332)
774- Return early from draw calls on layers where opacity=0 [#5429](https://github.com/mapbox/mapbox-gl-js/pull/5429)
775- A [heatmap](https://www.mapbox.com/mapbox-gl-js/example/heatmap-layer/) layer type is now available. This layer type allows you to visualize and explore massive datasets of points, reflecting the shape and density of data well while also looking beautiful. See [the blog post](https://blog.mapbox.com/sneak-peek-at-heatmaps-in-mapbox-gl-73b41d4b16ae) for further details.
776 ![](https://cdn-images-1.medium.com/max/1600/1*Dme5MAgdA3pYdTRHUQzvLw.png)
777- The value of a style property or filter can now be an [expression](http://www.mapbox.com/mapbox-gl-js/style-spec/#expressions). Expressions are a way of doing data-driven and zoom-driven styling that provides more flexibility and control, and unifies property and filter syntax.
778
779 Previously, data-driven and zoom-driven styling relied on stop functions: you specify a feature property and a set of input-output pairs that essentially define a “scale” for how the style should be calculated based on the feature property. For example, the following would set circle colors on a green-to-red scale based on the value of `feature.properties.population`:
780
781 ```
782 "circle-color": {
783 "property": "population",
784 "stops": [
785 [0, "green"],
786 [1000000, "red"]
787 ]
788 }
789 ```
790
791 This approach is powerful, but we’ve seen a number of use cases that stop functions don't satisfy. Expressions provide the flexibility to address use cases like these:
792
793 **Multiple feature properties**
794 Using more than one feature property to calculate a given style property. E.g., styling land polygon colors based on both `feature.properties.land_use_category` and `feature.properties.elevation`.
795
796 **Arithmetic**
797 For some use cases it’s necessary to do some arithmetic on the input data. One example is sizing circles to represent quantitative data. Since a circle’s visual size on the screen is really its area (and A=πr^2), the right way to scale `circle-radius` is `square_root(feature.properties.input_data_value)`. Another example is unit conversions: feature data may include properties that are in some particular unit. Displaying such data in units appropriate to, say, a user’s preference or location, requires being able to do simple arithmetic (multiplication, division) on whatever value is in the data.
798
799 **Conditional logic**
800 This is a big one: basic if-then logic, for example to decide exactly what text to display for a label based on which properties are available in the feature or even the length of the name. A key example of this is properly supporting bilingual labels, where we have to decide whether to show local + English, local-only, or English-only, based on the data that’s available for each feature.
801
802 **String manipulation**
803 More dynamic control over label text with things like uppercase/lowercase/title case transforms, localized number formatting, etc. Without this functionality, crafting and iterating on label content entails a large data-prep burden.
804
805 **Filters**
806 Style layer filters had similar limitations. Moreover, they use a different syntax, even though their job is very similar to that of data-driven styling functions: filters say, “here’s how to look at a feature and decide whether to draw it,” and data-driven style functions say, “here’s how to look at a feature and decide how to size/color/place it.” Expressions provide a unified syntax for defining parts of a style that need to be calculated dynamically from feature data.
807
808 For information on the syntax and behavior of expressions, please see [the documentation](http://www.mapbox.com/mapbox-gl-js/style-spec/#expressions).
809
810### :wrench: Development workflow improvements
811- Made the performance benchmarking runner more informative and statistically robust
812
813## 0.40.1 (September 18, 2017)
814
815### :bug: Bug fixes
816- Fix bug causing flicker when zooming in on overzoomed tiles [#5295](https://github.com/mapbox/mapbox-gl-js/pull/5295)
817- Remove erroneous call to Tile#redoPlacement for zoom-only or low pitch camera changes [#5284](https://github.com/mapbox/mapbox-gl-js/pull/5284)
818- Fix bug where `CanvasSource` coordinates were flipped and improve performance for non-animated `CanvasSource`s [#5303](https://github.com/mapbox/mapbox-gl-js/pull/5303)
819- Fix bug causing map not to render on some cases on Internet Explorer 11 [#5321](https://github.com/mapbox/mapbox-gl-js/pull/5321)
820- Remove upper limit on `fill-extrusion-height` property [#5320](https://github.com/mapbox/mapbox-gl-js/pull/5320)
821
822## 0.40.0 (September 13, 2017)
823
824### :warning: Breaking changes
825- `Map#addImage` now requires the image as an `HTMLImageElement`, `ImageData`, or object with `width`, `height`, and
826 `data` properties with the same format as `ImageData`. It no longer accepts a raw `ArrayBufferView` in the second
827 argument and `width` and `height` options in the third argument.
828- `canvas` sources now require a `contextType` option specifying the drawing context associated with the source canvas. [#5155](https://github.com/mapbox/mapbox-gl-js/pull/5155)
829
830
831### :sparkles: Features and improvements
832- Correct rendering for multiple `fill-extrusion` layers on the same map [#5101](https://github.com/mapbox/mapbox-gl-js/pull/5101)
833- Add an `icon-anchor` property to symbol layers [#5183](https://github.com/mapbox/mapbox-gl-js/pull/5183)
834- Add a per-map `transformRequest` option, allowing users to provide a callback that transforms resource request URLs [#5021](https://github.com/mapbox/mapbox-gl-js/pull/5021)
835- Add data-driven styling support for
836 - `text-max-width` [#5067](https://github.com/mapbox/mapbox-gl-js/pull/5067)
837 - `text-letter-spacing` [#5071](https://github.com/mapbox/mapbox-gl-js/pull/5071)
838 - `line-join` [#5020](https://github.com/mapbox/mapbox-gl-js/pull/5020)
839- Add support for SDF icons in `Map#addImage()` [#5181](https://github.com/mapbox/mapbox-gl-js/pull/5181)
840- Added nautical miles unit to ScaleControl [#5238](https://github.com/mapbox/mapbox-gl-js/pull/5238) (h/t @fmairesse)
841- Eliminate the map-wide limit on the number of glyphs and sprites that may be used in a style [#141](https://github.com/mapbox/mapbox-gl-js/issues/141). (Fixed by [#5190](https://github.com/mapbox/mapbox-gl-js/pull/5190), see also [mapbox-gl-native#9213](https://github.com/mapbox/mapbox-gl-native/pull/9213)
842- Numerous performance optimizations (including [#5108](https://github.com/mapbox/mapbox-gl-js/pull/5108) h/t @pirxpilot)
843
844
845### :bug: Bug fixes
846- Add missing documentation for mouseenter, mouseover, mouseleave events [#4772](https://github.com/mapbox/mapbox-gl-js/issues/4772)
847- Add missing documentation for `Marker#getElement()` method [#5242](https://github.com/mapbox/mapbox-gl-js/pull/5242)
848- Fix bug wherein removing canvas source with animate=true leaves map in render loop [#5097](https://github.com/mapbox/mapbox-gl-js/issues/5097)
849- Fix fullscreen detection on Firefox [#5272](https://github.com/mapbox/mapbox-gl-js/pull/5272)
850- Fix z-fighting on overlapping fills within the same layer [#3320](https://github.com/mapbox/mapbox-gl-js/issues/3320)
851- Fix handling of fractional values for `layer.minzoom` [#2929](https://github.com/mapbox/mapbox-gl-js/issues/2929)
852- Clarify coordinate ordering in documentation for `center` option [#5042](https://github.com/mapbox/mapbox-gl-js/pull/5042) (h/t @karthikb351)
853- Fix output of stop functions where two stops have the same input value [#5020](https://github.com/mapbox/mapbox-gl-js/pull/5020) (h/t @edpop )
854- Fix bug wherein using `Map#addLayer()` with an inline source would mutate its input [#4040](https://github.com/mapbox/mapbox-gl-js/issues/4040)
855- Fix invalid css keyframes selector [#5075](https://github.com/mapbox/mapbox-gl-js/pull/5075) (h/t @aar0nr)
856- Fix GPU-specific bug wherein canvas sources caused an error [#4262](https://github.com/mapbox/mapbox-gl-js/issues/4262)
857- Fix a race condition in symbol layer handling that caused sporadic uncaught errors [#5185](https://github.com/mapbox/mapbox-gl-js/pull/5185)
858- Fix bug causing line labels to render incorrectly on overzoomed tiles [#5120](https://github.com/mapbox/mapbox-gl-js/pull/5120)
859- Fix bug wherein `NavigationControl` triggered mouse events unexpectedly [#5148](https://github.com/mapbox/mapbox-gl-js/issues/5148)
860- Fix bug wherein clicking on the `NavigationControl` compass caused an error in IE 11 [#4784](https://github.com/mapbox/mapbox-gl-js/issues/4784)
861- Remove dependency on GPL-3-licensed `fast-stable-stringify` module [#5152](https://github.com/mapbox/mapbox-gl-js/issues/5152)
862- Fix bug wherein layer-specific an event listener produced an error after its target layer was removed from the map [#5145](https://github.com/mapbox/mapbox-gl-js/issues/5145)
863- Fix `Marker#togglePopup()` failing to return the marker instance [#5116](https://github.com/mapbox/mapbox-gl-js/issues/5116)
864- Fix bug wherein a marker's position failed to adapt to the marker element's size changing [#5133](https://github.com/mapbox/mapbox-gl-js/issues/5133)
865- Fix rendering bug affecting Broadcom GPUs [#5073](https://github.com/mapbox/mapbox-gl-js/pull/5073)
866
867### :wrench: Development workflow improvements
868- Add (and now require) Flow type annotations throughout the majority of the codebase.
869- Migrate to CircleCI 2.0 [#4939](https://github.com/mapbox/mapbox-gl-js/pull/4939)
870
871
872## 0.39.1 (July 24, 2017)
873
874### :bug: Bug fixes
875- Fix packaging issue in 0.39.0 [#5025](https://github.com/mapbox/mapbox-gl-js/issues/5025)
876- Correctly evaluate enum-based identity functions [#5023](https://github.com/mapbox/mapbox-gl-js/issues/5023)
877
878## 0.39.0 (July 21, 2017)
879
880### :warning: Breaking changes
881
882- `GeolocateControl` breaking changes #4479
883 * The option `watchPosition` has been replaced with `trackUserLocation`
884 * The camera operation has changed from `jumpTo` (not animated) to `fitBounds` (animated). An effect of this is the map pitch is no longer reset, although the bearing is still reset to 0.
885 * The accuracy of the geolocation provided by the device is used to set the view (previously it was fixed at zoom level 17). The `maxZoom` can be controlled via the new `fitBoundsOptions` option (defaults to 15).
886- Anchor `Marker`s at their center by default #5019 @andrewharvey
887- Increase `significantRotateThreshold` for the `TouchZoomRotateHandler` #4971, @dagjomar
888
889### :sparkles: Features and improvements
890- Improve performance of updating GeoJSON sources #4069, @ezheidtmann
891- Improve rendering speed of extrusion layers #4818
892- Improve line label legibility in pitched views #4781
893- Improve line label legibility on curved lines #4853
894- Add user location tracking capability to `GeolocateControl` #4479, @andrewharvey
895 * New option `showUserLocation` to draw a "dot" as a `Marker` on the map at the user's location
896 * An active lock and background state are introduced with `trackUserLocation`. When in active lock the camera will update to follow the user location, however if the camera is changed by the API or UI then the control will enter the background state where it won't update the camera to follow the user location.
897 * New option `fitBoundsOptions` to control the camera operation
898 * New `trackuserlocationstart` and `trackuserlocationend` events
899 * New `LngLat.toBounds` method to extend a point location by a given radius to a `LngLatBounds` object
900- Include main CSS file in `package.json` #4809, @tomscholz
901- Add property function (data-driven styling) support for `line-width` #4773
902- Add property function (data-driven styling) support for `text-anchor` #4997
903- Add property function (data-driven styling) support for `text-justify` #5000
904- Add `maxTileCacheSize` option #4778, @jczaplew
905- Add new `icon-pitch-alignment` and `circle-pitch-alignment` properties #4869 #4871
906- Add `Map#getMaxBounds` method #4890, @andrewharvey @lamuertepeluda
907- Add option (`localIdeographFontFamily`) to use TinySDF to avoid loading expensive CJK glyphs #4895
908- If `config.API_URL` includes a path prepend it to the request URL #4995
909- Bump `supercluster` version to expose `cluster_id` property on clustered sources #5002
910
911### :bug: Bug fixes
912- Do not display `FullscreenControl` on unsupported devices #4838, @stepankuzmin
913- Fix yarn build on Windows machines #4887
914- Prevent potential memory leaks by dispatching `loadData` to the same worker every time #4877
915- Fix bug preventing the rtlTextPlugin from loading before the initial style `load` #4870
916- Fix bug causing runtime-stying to not take effect in some situations #4893
917- Prevent requests of vertical glyphs for labels that can't be verticalized #4720
918- Fix character detection for Zanabazar Square #4940
919- Fix `LogoControl` logic to update correctly, and hide the `<div>` instead of removing it from the DOM when it is not needed #4842
920- Fix `GeoJSONSource#serialize` to include all options
921- Fix error handling in `GlyphSource#getSimpleGlyphs`#4992
922- Fix bug causing `setStyle` to reload raster tiles #4852
923- Fix bug causing symbol layers not to render on devices with non-integer device pixel ratios #4989
924- Fix bug where `Map#queryRenderedFeatures` would error when returning no results #4993
925- Fix bug where `Map#areTilesLoaded` would always be false on `sourcedata` events for reloading tiles #4987
926- Fix bug causing categorical property functions to error on non-ascending order stops #4996
927
928### :hammer_and_wrench: Development workflow changes
929- Use flow to type much of the code base #4629 #4903 #4909 #4910 #4911 #4913 #4915 #4918 #4932 #4933 #4948 #4949 #4955 #4966 #4967 #4973 :muscle: @jfirebaugh @vicapow
930- Use style specification to generate flow type #4958
931- Explicitly list which files to publish in `package.json` #4819 @tomscholz
932- Move render test ignores to a separate file #4977
933- Add code of conduct #5015 :sparkling_heart:
934
935## 0.38.0 (June 9, 2017)
936
937#### New features :sparkles:
938
939- Attenuate label size scaling with distance, improving readability of pitched maps [#4547](https://github.com/mapbox/mapbox-gl-js/pull/4547)
940
941#### Bug fixes :beetle:
942
943- Skip rendering for patterned layers when pattern is missing [#4687](https://github.com/mapbox/mapbox-gl-js/pull/4687)
944- Fix bug with map failing to rerender after `webglcontextlost` event [#4725](https://github.com/mapbox/mapbox-gl-js/pull/4725) @cdawi
945- Clamp zoom level in `flyTo` to within the map's specified min- and maxzoom to prevent undefined behavior [#4726](https://github.com/mapbox/mapbox-gl-js/pull/4726) @ IvanSanchez
946- Fix wordmark rendering in IE [#4741](https://github.com/mapbox/mapbox-gl-js/pull/4741)
947- Fix slight pixelwise symbol rendering bugs caused by incorrect sprite calculations [#4737](https://github.com/mapbox/mapbox-gl-js/pull/4737)
948- Prevent exceptions thrown by certain `flyTo` calls [#4761](https://github.com/mapbox/mapbox-gl-js/pull/4761)
949- Fix "Improve this map" link [#4685](https://github.com/mapbox/mapbox-gl-js/pull/4685)
950- Tweak `queryRenderedSymbols` logic to better account for pitch scaling [#4792](https://github.com/mapbox/mapbox-gl-js/pull/4792)
951- Fix for symbol layers sometimes failing to render, most frequently in Safari [#4795](https://github.com/mapbox/mapbox-gl-js/pull/4795)
952- Apply `text-keep-upright` after `text-offset` to keep labels upright when intended [#4779](https://github.com/mapbox/mapbox-gl-js/pull/4779) **[Potentially breaking :warning: but considered a bugfix]**
953- Prevent exceptions thrown by empty GeoJSON tiles [4803](https://github.com/mapbox/mapbox-gl-js/pull/4803)
954
955#### Accessibility improvements :sound:
956
957- Add `aria-label` to popup close button [#4799](https://github.com/mapbox/mapbox-gl-js/pull/4799) @andrewharvey
958
959#### Development workflow + testing improvements :wrench:
960
961- Fix equality assertion bug in tests [#4731](https://github.com/mapbox/mapbox-gl-js/pull/4731) @IvanSanchez
962- Benchmark results page improvements [#4746](https://github.com/mapbox/mapbox-gl-js/pull/4746)
963- Require node version >=6.4.0, enabling the use of more ES6 features [#4752](https://github.com/mapbox/mapbox-gl-js/pull/4752)
964- Document missing `pitchWithRotate` option [#4800](https://github.com/mapbox/mapbox-gl-js/pull/4800) @simast
965- Move Github-specific Markdown files into subdirectory [#4806](https://github.com/mapbox/mapbox-gl-js/pull/4806) @tomscholz
966
967## 0.37.0 (May 2nd, 2017)
968
969#### :warning: Breaking changes
970
971- Removed `LngLat#wrapToBestWorld`
972
973#### New features :rocket:
974
975- Improve popup/marker positioning #4577
976- Add `Map#isStyleLoaded` and `Map#areTilesLoaded` events #4321
977- Support offline sprites using `file:` protocol #4649 @oscarfonts
978
979#### Bug fixes :bug:
980
981- Fix fullscreen control in Firefox #4666
982- Fix rendering artifacts that caused tile boundaries to be visible in some cases #4636
983- Fix default calculation for categorical zoom-and-property functions #4657
984- Fix scaling of images on retina screens #4645
985- Rendering error when a transparent image is added via `Map#addImage` #4644
986- Fix an issue with rendering lines with duplicate points #4634
987- Fix error when switching from data-driven styles to a constant paint value #4611
988- Add check to make sure invalid bounds on tilejson don't error out #4641
989
990#### Development workflow improvements :computer:
991
992- Add flowtype interfaces and definitions @vicapow
993- Add stylelinting to ensure `mapboxgl-` prefix on all classes #4584 @asantos3026
994
995## 0.36.0 (April 19, 2017)
996
997#### New features :sparkles:
998
999- Replace LogoControl logo with the new Mapbox logo #4598
1000
1001#### Bug fixes :bug:
1002
1003- Fix bug with the BoxZoomHandler that made it glitchy if it is enabled after the DragPanHandler #4528
1004- Fix undefined behavior in `fill_outline` shaders #4600
1005- Fix `Camera#easeTo` interpolation on pitched maps #4540
1006- Choose property function interpolation method by the `property`'s type #4614
1007
1008#### Development workflow improvements :nerd_face:
1009
1010- Fix crash on missing `style.json` in integration tests
1011- `gl-style-composite` is now executable in line with the other tools @andrewharvey #4595
1012- `gl-style-composite` utility now throws an error if a name conflict would occur between layers @andrewharvey #4595
1013
1014## 0.35.1 (April 12, 2017)
1015
1016#### Bug fixes :bug:
1017
1018- Add `.json` extension to style-spec `require` statements for webpack compatibility #4563 @orangemug
1019- Fix documentation type for `Map#fitBounde` #4569 @andrewharvey
1020- Fix bug causing {Image,Video,Canvas}Source to throw exception if latitude is outside of +/-85.05113 #4574
1021- Fix bug causing overzoomed raster tiles to disappear from map #4567
1022- Fix bug causing queryRenderedFeatures to crash on polygon features that have an `id` field. #4581
1023
1024## 0.35.0 (April 7, 2017)
1025
1026#### New features :rocket:
1027- Use anisotropic filtering to improve rendering of raster tiles on pitched maps #1064
1028- Add `pitchstart` and `pitchend` events #2449
1029- Add an optional `layers` parameter to `Map#on` #1002
1030- Add data-driven styling support for `text-offset` #4495
1031- Add data-driven styling support for `text-rotate` #3516
1032- Add data-driven styling support for `icon-image` #4304
1033- Add data-driven styling support for `{text,icon}-size` #4455
1034
1035#### Bug fixes :bug:
1036- Suppress error messages in JS console due to missing tiles #1800
1037- Fix bug wherein `GeoJSONSource#setData()` could cause unnecessary DOM updates #4447
1038- Fix bug wherein `Map#flyTo` did not respect the `renderWorldCopies` setting #4449
1039- Fix regression in browserify support # 4453
1040- Fix bug causing poor touch event behavior on mobile devices #4259
1041- Fix bug wherein duplicate stops in property functions could cause an infinite loop #4498
1042- Respect image height/width in `addImage` api #4531
1043- Fix bug preventing correct behavior of `shift+zoom` #3334
1044- Fix bug preventing image source from rendering when coordinate area is too large #4550
1045- Show image source on horizontally wrapped worlds #4555
1046- Fix bug in the handling of `refreshedExpiredTiles` option #4549
1047- Support the TileJSON `bounds` property #1775
1048
1049#### Development workflow improvements :computer:
1050- Upgrade flow to 0.42.0 (#4500)
1051
1052
1053## 0.34.0 (March 17, 2017)
1054
1055#### New features :rocket:
1056- Add `Map#addImage` and `Map#removeImage` API to allow adding icon images at runtime #4404
1057- Simplify non-browserify bundler usage by making the distribution build the main entrypoint #4423
1058
1059#### Bug fixes :bug:
1060- Fix issue where coincident start/end points of LineStrings were incorrectly rendered as joined #4413
1061- Fix bug causing `queryRenderedFeatures` to fail in cases where both multiple sources and data-driven paint properties were present #4417
1062- Fix bug where tile request errors caused `map.loaded()` to incorrectly return `false` #4425
1063
1064#### Testing improvements :white_check_mark:
1065- Improve test coverage across several core modules #4432 #4431 #4422 #4244 :bowing_man:
1066
1067## 0.33.1 (March 10, 2017)
1068
1069#### Bug fixes :bug:
1070- Prevent Mapbox logo from being added to the map more than once #4386
1071- Add `type='button'` to `FullscreenControl` to prevent button from acting as a form submit #4397
1072- Fix issue where map would continue to rotate if `Ctrl` key is released before the click during a `DragRotate` event #4389
1073- Remove double `options.easing` description from the `Map#fitBounds` documentation #4402
1074
1075
1076## 0.33.0 (March 8, 2017)
1077
1078#### :warning: Breaking changes
1079- Automatically add Mapbox wordmark when required by Mapbox TOS #3933
1080- Increase default `maxZoom` from 20 to 22 #4333
1081- Deprecate `tiledata` and `tiledataloading` events in favor of `sourcedata` and `sourcedataloading`. #4347
1082- `mapboxgl.util` is no longer exported #1408
1083- `"type": "categorical"` is now required for all categorical functions. Previously, some forms of "implicitly" categorical functions worked, and others did not. #3717
1084
1085#### :white_check_mark: New features
1086- Add property functions support for most symbol paint properties #4074, #4186, #4226
1087- Add ability to specify default property value for undefined or invalid property values used in property functions. #4175
1088- Improve `Map#fitBounds` to accept different values for top, bottom, left, and right `padding` #3890
1089- Add a `FullscreenControl` for displaying a fullscreen map #3977
1090
1091#### :beetle: Bug fixes
1092- Fix validation error on categorical zoom-and-property functions #4220
1093- Fix bug causing expired resources to be re-requested causing an infinite loop #4255
1094- Fix problem where `MapDataEvent#isSourceLoaded` always returned false #4254
1095- Resolve an issue where tiles in the source cache were prematurely deleted, resulting in tiles flickering when zooming in and out and #4311
1096- Make sure `MapEventData` is passed through on calls `Map#flyTo` #4342
1097- Fix incorrect returned values for `Map#isMoving` #4350
1098- Fix categorical functions not allowing boolean stop domain values #4195
1099- Fix piecewise-constant functions to allow non-integer zoom levels. #4196
1100- Fix issues with `$id` in filters #4236 #4237
1101- Fix a race condition with polygon centroid algorithm causing tiles not to load in some cases. #4273
1102- Throw a meaningful error when giving non-array `layers` parameter to `queryRenderedFeatures` #4331
1103- Throw a meaningful error when supplying invalid `minZoom` and `maxZoom` values #4324
1104- Fix a memory leak when using the RTL Text plugin #4248
1105
1106#### Dev workflow changes
1107- Merged the [Mapbox GL style specification](https://github.com/mapbox/mapbox-gl-style-spec) repo to this one (now under `src/style-spec` and `test/unit/style-spec`).
1108
1109## 0.32.1 (Jan 26, 2017)
1110
1111#### Bug Fixes
1112
1113 - Fix bug causing [`mapbox-gl-rtl-text` plugin](https://github.com/mapbox/mapbox-gl-rtl-text) to not work #4055
1114
1115## 0.32.0 (Jan 26, 2017)
1116
1117#### Deprecation Notices
1118
1119- [Style classes](https://www.mapbox.com/mapbox-gl-style-spec/#layer-paint.*) are deprecated and will be removed in an upcoming release of Mapbox GL JS.
1120
1121#### New Features
1122
1123 - Add `Map#isSourceLoaded` method #4033
1124 - Automatically reload tiles based on their `Expires` and `Cache-Control` HTTP headers #3944
1125 - Add `around=center` option to `scrollZoom` and `touchZoomRotate` interaction handlers #3876
1126 - Add support for [`mapbox-gl-rtl-text` plugin](https://github.com/mapbox/mapbox-gl-rtl-text) to support right-to-left scripts #3758
1127 - Add `canvas` source type #3765
1128 - Add `Map#isMoving` method #2792
1129
1130#### Bug Fixes
1131
1132 - Fix bug causing garbled text on zoom #3962
1133 - Fix bug causing crash in Firefox and Mobile Safari when rendering a large map #4037
1134 - Fix bug causing raster tiles to flicker during zoom #2467
1135 - Fix bug causing exception when unsetting and resetting fill-outline-color #3657
1136 - Fix memory leak when removing raster sources #3951
1137 - Fix bug causing exception when when zooming in / out on empty GeoJSON tile #3985
1138 - Fix line join artifacts at very sharp angles #4008
1139
1140## 0.31.0 (Jan 10 2017)
1141
1142#### New Features
1143
1144- Add `renderWorldCopies` option to the `Map` constructor to give users control over whether multiple worlds are rendered in a map #3885
1145
1146#### Bug Fixes
1147
1148- Fix performance regression triggered when `Map` pitch or bearing is changed #3938
1149- Fix null pointer exception caused by trying to clear an `undefined` source #3903
1150
1151#### Miscellaneous
1152
1153- Incorporate integration tests formerly at [`mapbox-gl-test-suite`](https://github.com/mapbox/mapbox-gl-test-suite) into this repository #3834
1154
1155## 0.30.0 (Jan 5 2017)
1156
1157#### New Features
1158
1159 - Fire an error when map canvas is larger than allowed by `gl.MAX_RENDERBUFFER_SIZE` #2893
1160 - Improve error messages when referencing a nonexistent layer id #2597
1161 - Fire an error when layer uses a `geojson` source and specifies a `source-layer` #3896
1162 - Add inline source declaration syntax #3857
1163 - Improve line breaking behavior #3887
1164
1165#### Performance Improvements
1166
1167 - Improve `Map#setStyle` performance in some cases #3853
1168
1169#### Bug Fixes
1170
1171 - Fix unexpected popup positioning when some offsets are unspecified #3367
1172 - Fix incorrect interpolation in functions #3838
1173 - Fix incorrect opacity when multiple backgrounds are rendered #3819
1174 - Fix exception thrown when instantiating geolocation control in Safari #3844
1175 - Fix exception thrown when setting `showTileBoundaries` with no sources #3849
1176 - Fix incorrect rendering of transparent parts of raster layers in some cases #3723
1177 - Fix non-terminating render loop when zooming in in some cases #3399
1178
1179## 0.29.0 (December 20 2016)
1180
1181#### New Features
1182
1183 - Add support for property functions for many style properties on line layers #3033
1184 - Make `Map#setStyle` smoothly transition to the new style #3621
1185 - Add `styledata`, `sourcedata`, `styledataloading`, and `sourcedataloading` events
1186 - Add `isSourceLoaded` and `source` properties to `MapDataEvent` #3590
1187 - Remove "max zoom" cap of 20 #3683
1188 - Add `circle-stroke-*` style properties #3672
1189 - Add a more helpful error message when the specified `container` element doesn't exist #3719
1190 - Add `watchPosition` option to `GeolocateControl` #3739
1191 - Add `positionOptions` option to `GeolocateControl` #3739
1192 - Add `aria-label` to map canvas #3782
1193 - Adjust multipoint symbol rendering behavior #3763
1194 - Add support for property functions for `icon-offset` #3791
1195 - Improved antialiasing on pitched lines #3790
1196 - Allow attribution control to collapse to an ⓘ button on smaller screens #3783
1197 - Improve line breaking algorithm #3743
1198
1199#### Performance Improvements
1200
1201 - Fix memory leak when calling `Map#removeSource` #3602
1202 - Reduce bundle size by adding custom build of `gl-matrix` #3734
1203 - Improve performance of projection code #3721
1204 - Improve performance of style function evaluation #3816
1205
1206#### Bug fixes
1207
1208 - Fix exception thrown when using `line-color` property functions #3639
1209 - Fix exception thrown when removing a layer and then adding another layer with the same id but different type #3655
1210 - Fix exception thrown when passing a single point to `Map#fitBounds` #3655
1211 - Fix exception thrown occasionally during rapid map mutations #3681
1212 - Fix rendering defects on pitch=0 on some systems #3740
1213 - Fix unnecessary CPU usage when displaying a raster layer #3764
1214 - Fix bug causing sprite after `Map#setStyle` #3829
1215 - Fix bug preventing `Map` from emitting a `contextmenu` event on Windows browsers #3822
1216
1217## 0.28.0 (November 17 2016)
1218
1219#### New features and improvements
1220
1221- Performance improvements for `Map#addLayer` and `Map#removeLayer` #3584
1222- Add method for changing layer order at runtime - `Map#moveLayer` #3584
1223- Update vertical punctuation logic to Unicode 9.0 standard #3608
1224
1225#### Bug fixes
1226
1227- Fix data-driven `fill-opacity` rendering when using a `fill-pattern` #3598
1228- Fix line rendering artifacts #3627
1229- Fix incorrect rendering of opaque fills on top of transparent fills #2628
1230- Prevent `AssertionErrors` from pitching raster layers by only calling `Worker#redoPlacement` on vector and GeoJSON sources #3624
1231- Restore IE11 compatability #3635
1232- Fix symbol placement for cached tiles #3637
1233
1234
1235## 0.27.0 (November 11 2016)
1236
1237#### ⚠️ Breaking changes ⚠️
1238
1239- Replace `fill-extrude-height` and `fill-extrude-base` properties of `fill` render type with a separate `fill-extrusion` type (with corresponding `fill-extrusion-height` and `fill-extrusion-base` properties), solving problems with render parity and runtime switching between flat and extruded fills. https://github.com/mapbox/mapbox-gl-style-spec/issues/554
1240- Change the units for extrusion height properties (`fill-extrusion-height`, `fill-extrusion-base`) from "magic numbers" to meters. #3509
1241- Remove `mapboxgl.Control` class and change the way custom controls should be implemented. #3497
1242- Remove `mapboxgl.util` functions: `inherit`, `extendAll`, `debounce`, `coalesce`, `startsWith`, `supportsGeolocation`. #3441 #3571
1243- **`mapboxgl.util` is deprecated** and will be removed in the next release. #1408
1244
1245#### New features and improvements
1246
1247- Tons of **performance improvements** that combined make rendering **up to 3 times faster**, especially for complex styles. #3485 #3489 #3490 #3491 #3498 #3499 #3501 #3510 #3514 #3515 #3486 #3527 #3574 ⚡️⚡️⚡️
1248- 🈯 Added **vertical text writing mode** for languages that support it. #3438
1249- 🈯 Improved **line breaking of Chinese and Japanese text** in point-placed labels. #3420
1250- Reduce the default number of worker threads (`mapboxgl.workerCount`) for better performance. #3565
1251- Automatically use `categorical` style function type when input values are strings. #3384
1252- Improve control buttons accessibility. #3492
1253- Remove geolocation button if geolocation is disabled (e.g. the page is not served through `https`). #3571
1254- Added `Map#getMaxZoom` and `Map#getMinZoom` methods #3592
1255
1256#### Bugfixes
1257
1258- Fix several line dash rendering bugs. #3451
1259- Fix intermittent map flicker when using image sources. #3522
1260- Fix incorrect rendering of semitransparent `background` layers. #3521
1261- Fix broken `raster-fade-duration` property. #3532
1262- Fix handling of extrusion heights with negative values (by clamping to `0`). #3463
1263- Fix GeoJSON sources not placing labels/icons correctly after map rotation. #3366
1264- Fix icon/label placement not respecting order for layers with numeric names. #3404
1265- Fix `queryRenderedFeatures` working incorrectly on colliding labels. #3459
1266- Fix a bug where changing extrusion properties at runtime sometimes threw an error. #3487 #3468
1267- Fix a bug where `map.loaded()` always returned `true` when using raster tile sources. #3302
1268- Fix a bug where moving the map out of bounds sometimes threw `failed to invert matrix` error. #3518
1269- Fixed `queryRenderedFeatures` throwing an error if no parameters provided. #3542
1270- Fixed a bug where using multiple `\n` in a text field resulted in an error. #3570
1271
1272#### Misc
1273
1274- 🐞 Fix `npm install mapbox-gl` pulling in all `devDependencies`, leading to an extremely slow install. #3377
1275- Switch the codebase to ES6. #3388 #3408 #3415 #3421
1276- A lot of internal refactoring to make the codebase simpler and more maintainable.
1277- Various documentation fixes. #3440
1278
1279## 0.26.0 (October 13 2016)
1280
1281#### New Features & Improvements
1282
1283 * Add `fill-extrude-height` and `fill-extrude-base` style properties (3d buildings) :cityscape: #3223
1284 * Add customizable `colorSpace` interpolation to functions #3245
1285 * Add `identity` function type #3274
1286 * Add depth testing for symbols with `'pitch-alignment': 'map'` #3243
1287 * Add `dataloading` events for styles and sources #3306
1288 * Add `Control` suffix to all controls :warning: BREAKING CHANGE :warning: #3355
1289 * Calculate style layer `ref`s automatically and get rid of user-specified `ref`s :warning: BREAKING CHANGE :warning: #3486
1290
1291#### Performance Improvements
1292
1293 * Ensure removing style or source releases all tile resources #3359
1294
1295#### Bugfixes
1296
1297 * Fix bug causing an error when `Marker#setLngLat` is called #3294
1298 * Fix bug causing incorrect coordinates in `touchend` on Android Chrome #3319
1299 * Fix bug causing incorrect popup positioning at top of screen #3333
1300 * Restore `tile` property to `data` events fired when a tile is removed #3328
1301 * Fix bug causing "Improve this map" link to not preload map location #3356
1302
1303## 0.25.1 (September 30 2016)
1304
1305#### Bugfixes
1306
1307 * Fix bug causing attribution to not be shown #3278
1308 * Fix bug causing exceptions when symbol text has a trailing newline #3281
1309
1310## 0.25.0 (September 29 2016)
1311
1312#### Breaking Changes
1313
1314 * `Evented#off` now require two arguments; omitting the second argument in order to unbind all listeners for an event
1315 type is no longer supported, as it could cause unintended unbinding of internal listeners.
1316
1317#### New Features & Improvements
1318
1319 * Consolidate undocumented data lifecycle events into `data` and `dataloading` events (#3255)
1320 * Add `auto` value for style spec properties (#3203)
1321
1322#### Bugfixes
1323
1324 * Fix bug causing "Map#queryRenderedFeatures" to return no features after map rotation or filter change (#3233)
1325 * Change webpack build process (#3235) :warning: BREAKING CHANGE :warning:
1326 * Improved error messages for `LngLat#convert` (#3232)
1327 * Fix bug where the `tiles` field is omitted from the `RasterTileSource#serialize` method (#3259)
1328 * Comply with HTML spec by replacing the `div` within the `Navigation` control `<button>` with a `span` element (#3268)
1329 * Fix bug causing `Marker` instances to be translated to non-whole pixel coordinates that caused blurriness (#3270)
1330
1331#### Performance Improvements
1332
1333 * Avoid unnecessary style validation (#3224)
1334 * Share a single blob URL between all workers (#3239)
1335
1336## 0.24.0 (September 19 2016)
1337
1338#### New Features & Improvements
1339
1340 * Allow querystrings in `mapbox://` URLs #3113
1341 * Allow "drag rotate" interaction to control pitch #3105
1342 * Improve performance by decreasing `Worker` script `Blob` size #3158
1343 * Improve vector tile performance #3067
1344 * Decrease size of distributed library by removing `package.json` #3174
1345 * Add support for new lines in `text-field` #3179
1346 * Make keyboard navigation smoother #3190
1347 * Make mouse wheel zooming smoother #3189
1348 * Add better error message when calling `Map#queryRenderedFeatures` on nonexistent layer #3196
1349 * Add support for imperial units on `Scale` control #3160
1350 * Add map's pitch to URL hash #3218
1351
1352#### Bugfixes
1353
1354 * Fix exception thrown when using box zoom handler #3078
1355 * Ensure style filters cannot be mutated by reference #3093
1356 * Fix exceptions thrown when opening marker-bound popup by click #3104
1357 * Fix bug causing fills with transparent colors and patterns to not render #3107
1358 * Fix order of latitudes in `Map#getBounds` #3081
1359 * Fix incorrect evaluation of zoom-and-property functions #2827 #3155
1360 * Fix incorrect evaluation of property functions #2828 #3155
1361 * Fix bug causing garbled text rendering when multiple maps are rendered on the page #3086
1362 * Fix rendering defects caused by `Map#setFilter` and map rotation on iOS 10 #3207
1363 * Fix bug causing image and video sources to disappear when zooming in #3010
1364
1365
1366## 0.23.0 (August 25 2016)
1367
1368#### New Features & Improvements
1369
1370* Add support for `line-color` property functions #2938
1371* Add `Scale` control #2940 #3042
1372* Improve polygon label placement by rendering labels at the pole of inaccessability #3038
1373* Add `Popup` `offset` option #1962
1374* Add `Marker#bindPopup` method #3056
1375
1376#### Performance Improvements
1377
1378* Improve performance of pages with multiple maps using a shared `WebWorker` pool #2952
1379
1380#### Bugfixes
1381
1382* Make `LatLngBounds` obey its documented argument order (`southwest`, `northeast`), allowing bounds across the dateline #2414 :warning: **BREAKING CHANGE** :warning:
1383* Fix bug causing `fill-opacity` property functions to not render as expected #3061
1384
1385## 0.22.1 (August 18 2016)
1386
1387#### New Features & Improvements
1388
1389 * Reduce library size by using minified version of style specification #2998
1390 * Add a warning when rendering artifacts occur due to too many symbols or glyphs being rendered in a tile #2966
1391
1392#### Bugfixes
1393
1394 * Fix bug causing exception to be thrown by `Map#querySourceFeatures` #3022
1395 * Fix bug causing `Map#loaded` to return true while there are outstanding tile updates #2847
1396
1397## 0.22.0 (August 11 2016)
1398
1399#### Breaking Changes
1400
1401 * The `GeoJSONSource`, `VideoSource`, `ImageSource` constructors are now private. Please use `map.addSource({...})` to create sources and `map.getSource(...).setData(...)` to update GeoJSON sources. #2667
1402 * `Map#onError` has been removed. You may catch errors by listening for the `error` event. If no listeners are bound to `error`, error messages will be printed to the console. #2852
1403
1404#### New Features & Improvements
1405
1406 * Increase max glyph atlas size to accomodate alphabets with large numbers of characters #2930
1407 * Add support for filtering features on GeoJSON / vector tile `$id` #2888
1408 * Update geolocate icon #2973
1409 * Add a `close` event to `Popup`s #2953
1410 * Add a `offset` option to `Marker` #2885
1411 * Print `error` events without any listeners to the console #2852
1412 * Refactored `Source` interface to prepare for custom source types #2667
1413
1414#### Bugfixes
1415
1416 * Fix opacity property-functions for fill layers #2971
1417 * Fix `DataCloneError` in Firefox and IE11 #2559
1418 * Fix bug preventing camera animations from being triggered in `moveend` listeners #2944
1419 * Fix bug preventing `fill-outline-color` from being unset #2964
1420 * Fix webpack support #2887
1421 * Prevent buttons in controls from acting like form submit buttons #2935
1422 * Fix bug preventing map interactions near two controls in the same corner #2932
1423 * Fix crash resulting for large style batch queue #2926
1424
1425## 0.21.0 (July 13 2016)
1426
1427#### Breaking Changes
1428
1429 * GeoJSON polygon inner rings are now rewound for compliance with the [v2 vector tile](https://github.com/mapbox/vector-tile-spec/blob/master/2.1/README.md#4344-polygon-geometry-type). This may affect some uses of `line-offset`, reversing the direction of the offset. #2889
1430
1431#### New Features & Improvements
1432
1433 * Add `text-pitch-alignment` style property #2668
1434 * Allow query parameters on `mapbox://` URLs #2702
1435 * Add `icon-text-fit` and `icon-text-fit-padding` style properties #2720
1436 * Enable property functions for `icon-rotate` #2738
1437 * Enable property functions for `fill-opacity` #2733
1438 * Fire `Map#mouseout` events #2777
1439 * Allow query parameters on all sprite URLs #2772
1440 * Increase sprite atlas size to 1024px square, allowing more and larger sprites #2802
1441 * Add `Marker` class #2725 #2810
1442 * Add `{quadkey}` URL parameter #2805
1443 * Add `circle-pitch-scale` style property #2821
1444
1445#### Bugfixes
1446
1447 * Fix rendering of layers with large numbers of features #2794
1448 * Fix exceptions thrown during drag-rotate interactions #2840
1449 * Fix error when adding and removing a layer within the same update cycle #2845
1450 * Fix false "Geometry exceeds allowed extent" warnings #2568
1451 * Fix `Map#loaded` returning true while there are outstanding tile updates #2847
1452 * Fix style validation error thrown while removing a filter #2847
1453 * Fix event data object not being passed for double click events #2814
1454 * Fix multipolygons disappearing from map at certain zoom levels #2704
1455 * Fix exceptions caused by `queryRenderedFeatures` in Safari and Firefox #2822
1456 * Fix `mapboxgl#supported()` returning `true` in old versions of IE11 mapbox/mapbox-gl-supported#1
1457
1458## 0.20.1 (June 21 2016)
1459
1460#### Bugfixes
1461
1462* Fixed exception thrown when changing `*-translate` properties via `setPaintProperty` (#2762)
1463
1464## 0.20.0 (June 10 2016)
1465
1466#### New Features & Improvements
1467
1468 * Add limited WMS support #2612
1469 * Add `workerCount` constructor option #2666
1470 * Improve performance of `locationPoint` and `pointLocation` #2690
1471 * Remove "Not using VertexArrayObject extension" warning messages #2707
1472 * Add `version` property to mapboxgl #2660
1473 * Support property functions in `circle-opacity` and `circle-blur` #2693
1474
1475#### Bugfixes
1476
1477* Fix exception thrown by "drag rotate" handler #2680
1478* Return an empty array instead of an empty object from `queryRenderedFeatures` #2694
1479* Fix bug causing map to not render in IE
1480
1481## 0.19.1 (June 2 2016)
1482
1483#### Bugfixes
1484
1485* Fix rendering of polygons with more than 35k vertices #2657
1486
1487## 0.19.0 (May 31 2016)
1488
1489#### New Features & Improvements
1490
1491* Allow use of special characters in property field names #2547
1492* Improve rendering speeds on fill layers #1606
1493* Add data driven styling support for `fill-color` and `fill-outline-color` #2629
1494* Add `has` and `!has` filter operators mapbox/feature-filter#15
1495* Improve keyboard handlers with held-down keys #2530
1496* Support 'tms' tile scheme #2565
1497* Add `trackResize` option to `Map` #2591
1498
1499#### Bugfixes
1500
1501* Scale circles when map is displayed at a pitch #2541
1502* Fix background pattern rendering bug #2557
1503* Fix bug that prevented removal of a `fill-pattern` from a fill layer #2534
1504* Fix `line-pattern` and `fill-pattern`rendering #2596
1505* Fix some platform specific rendering bugs #2553
1506* Return empty object from `queryRenderedFeatures` before the map is loaded #2621
1507* Fix "there is no texture bound to the unit 1" warnings #2509
1508* Allow transitioned values to be unset #2561
1509
1510## 0.18.0 (April 13 2016)
1511
1512#### New Features & Improvements
1513
1514* Implement zoom-and-property functions for `circle-color` and `circle-size` #2454
1515* Dedupe attributions that are substrings of others #2453
1516* Misc performance improvements #2483 #2488
1517
1518#### Bugfixes
1519
1520* Fix errors when unsetting and resetting a style property #2464
1521* Fix errors when updating paint properties while using classes #2496
1522* Fix errors caused by race condition in unserializeBuckets #2497
1523* Fix overzoomed tiles in wrapped worlds #2482
1524* Fix errors caused by mutating a filter object after calling `Map#setFilter` #2495
1525
1526## 0.17.0 (April 13 2016)
1527
1528#### Breaking Changes
1529
1530* Remove `map.batch` in favor of automatically batching style mutations (i.e. calls to `Map#setLayoutProperty`, `Map#setPaintProperty`, `Map#setFilter`, `Map#setClasses`, etc.) and applying them once per frame, significantly improving performance when updating the style frequently #2355 #2380
1531* Remove `util.throttle` #2345
1532
1533#### New Features & Improvements
1534
1535* Improve performance of all style mutation methods by only recalculating affected properties #2339
1536* Improve fading of labels and icons #2376
1537* Improve rendering performance by reducing work done on the main thread #2394
1538* Validate filters passed to `Map#queryRenderedFeatures` and `Map#querySourceFeatures` #2349
1539* Display a warning if a vector tile's geometry extent is larger than supported #2383
1540* Implement property functions (i.e. data-driven styling) for `circle-color` and `circle-size` #1932
1541* Add `Popup#setDOMContent` method #2436
1542
1543#### Bugfixes
1544
1545* Fix a performance regression caused by using 1 `WebWorker` instead of `# cpus - 1` `WebWorker`s, slowing down tile loading times #2408
1546* Fix a bug in which `Map#queryRenderedFeatures` would sometimes return features that had been removed #2353
1547* Fix `clusterMaxZoom` option on `GeoJSONSource` not working as expected #2374
1548* Fix anti-aliased rendering for pattern fills #2372
1549* Fix exception caused by calling `Map#queryRenderedFeatures` or `Map#querySourceFeatures` with no arguments
1550* Fix exception caused by calling `Map#setLayoutProperty` for `text-field` or `icon-image` #2407
1551
1552## 0.16.0 (March 24 2016)
1553
1554#### Breaking Changes
1555
1556* Replace `Map#featuresAt` and `Map#featuresIn` with `Map#queryRenderedFeatures` and `map.querySourceFeatures` (#2224)
1557 * Replace `featuresAt` and `featuresIn` with `queryRenderedFeatures`
1558 * Make `queryRenderedFeatures` synchronous, remove the callback and use the return value.
1559 * Rename `layer` parameter to `layers` and make it an array of layer names.
1560 * Remove the `radius` parameter. `radius` was used with `featuresAt` to account for style properties like `line-width` and `circle-radius`. `queryRenderedFeatures` accounts for these style properties. If you need to query a larger area, use a bounding box query instead of a point query.
1561 * Remove the `includeGeometry` parameter because `queryRenderedFeatures` always includes geometries.
1562* `Map#debug` is renamed to `Map#showTileBoundaries` (#2284)
1563* `Map#collisionDebug` is renamed to `Map#showCollisionBoxes` (#2284)
1564
1565#### New Features & Improvements
1566
1567* Improve overall rendering performance. (#2221)
1568* Improve performance of `GeoJSONSource#setData`. (#2222)
1569* Add `Map#setMaxBounds` method (#2234)
1570* Add `isActive` and `isEnabled` methods to interaction handlers (#2238)
1571* Add `Map#setZoomBounds` method (#2243)
1572* Add touch events (#2195)
1573* Add `map.queryRenderedFeatures` to query the styled and rendered representations of features (#2224)
1574* Add `map.querySourceFeatures` to get features directly from vector tiles, independent of the style (#2224)
1575* Add `mapboxgl.Geolocate` control (#1939)
1576* Make background patterns render seamlessly across tile boundaries (#2305)
1577
1578#### Bugfixes
1579
1580* Fix calls to `setFilter`, `setLayoutProperty`, and `setLayerZoomRange` on ref children (#2228)
1581* Fix `undefined` bucket errors after `setFilter` calls (#2244)
1582* Fix bugs causing hidden symbols to be rendered (#2246, #2276)
1583* Fix raster flickering (#2236)
1584* Fix `queryRenderedFeatures` precision at high zoom levels (#2292)
1585* Fix holes in GeoJSON data caused by unexpected winding order (#2285)
1586* Fix bug causing deleted features to be returned by `queryRenderedFeatures` (#2306)
1587* Fix bug causing unexpected fill patterns to be rendered (#2307)
1588* Fix popup location with preceding sibling elements (#2311)
1589* Fix polygon anti-aliasing (#2319)
1590* Fix slivers between non-adjacent polygons (#2319)
1591* Fix keyboard shortcuts causing page to scroll (#2312)
1592
1593## 0.15.0 (March 1 2016)
1594
1595#### New Features & Improvements
1596
1597* Add `ImageSource#setCoordinates` and `VideoSource#setCoordinates` (#2184)
1598
1599#### Bugfixes
1600
1601* Fix flickering on raster layers (#2211)
1602* Fix browser hang when zooming quickly on raster layers (#2211)
1603
1604## 0.14.3 (Feb 25 2016)
1605
1606#### New Features & Improvements
1607
1608* Improve responsiveness of zooming out by using cached parent tiles (#2168)
1609* Improve contextual clues on style API validation (#2170)
1610* Improve performance of methods including `setData` (#2174)
1611
1612#### Bugfixes
1613
1614* Fix incorrectly sized line dashes (#2099)
1615* Fix bug in which `in` feature filter drops features (#2166)
1616* Fix bug preventing `Map#load` from firing when tile "Not Found" errors occured (#2176)
1617* Fix rendering artifacts on mobile GPUs (#2117)
1618
1619## 0.14.2 (Feb 19 2016)
1620
1621#### Bugfixes
1622
1623* Look for loaded parent tiles in cache
1624* Set tile cache size based on viewport size (#2137)
1625* Fix tile render order for layer-by-layer
1626* Remove source update throttling (#2139)
1627* Make panning while zooming more linear (#2070)
1628* Round points created during bucket creation (#2067)
1629* Correct bounds for a rotated or tilted map (#1842)
1630* Fix overscaled featuresAt (#2103)
1631* Allow using `tileSize: 512` as a switch to trade retina support for 512px raster tiles
1632* Fix the serialization of paint classes (#2107)
1633* Fixed bug where unsetting style properties could mutate the value of other style properties (#2105)
1634* Less slanted dashed lines near sharp corners (#967)
1635* Fire map#load if no initial style is set (#2042)
1636
1637## 0.14.1 (Feb 10 2016)
1638
1639#### Bugfixes
1640
1641* Fix incorrectly rotated symbols along lines near tile boundries (#2062)
1642* Fix broken rendering when a fill layer follows certain symbol layers (#2092)
1643
1644## 0.14.0 (Feb 8 2016)
1645
1646#### Breaking Changes
1647
1648* Switch `GeoJSONSource` clustering options from being measured in extent-units to pixels (#2026)
1649
1650#### New Features & Improvements
1651
1652* Improved error message for invalid colors (#2006)
1653* Added support for tiles with variable extents (#2010)
1654* Improved `filter` performance and maximum size (#2024)
1655* Changed circle rendering such that all geometry nodes are drawn, not just the geometry's outer ring (#2027)
1656* Added `Map#getStyle` method (#1982)
1657
1658#### Bugfixes
1659
1660* Fixed bug causing WebGL contexts to be "used up" by calling `mapboxgl.supported()` (#2018)
1661* Fixed non-deterministic symbol z-order sorting (#2023)
1662* Fixed garbled labels while zooming (#2012)
1663* Fixed icon jumping when touching trackpad with two fingers (#1990)
1664* Fixed overzoomed collision debug labels (#2033)
1665* Fixed dashes sliding along their line during zooming (#2039)
1666* Fixed overscaled `minzoom` setting for GeoJSON sources (#1651)
1667* Fixed overly-strict function validation for duplicate stops (#2075)
1668* Fixed crash due to `performance.now` not being present on some browsers (#2056)
1669* Fixed the unsetting of paint properties (#2037)
1670* Fixed bug causing multiple interaction handler event listeners to be attached (#2069)
1671* Fixed bug causing only a single debug box to be drawn (#2034)
1672
1673## 0.13.1 (Jan 27 2016)
1674
1675#### Bugfixes
1676
1677* Fixed broken npm package due to outdated bundled modules
1678
1679## 0.13.0 (Jan 27 2016)
1680
1681#### Bugfixes
1682
1683* Fixed easeTo pan, zoom, and rotate when initial rotation != 0 (#1950)
1684* Fixed rendering of tiles with an extent != 4096 (#1952)
1685* Fixed missing icon collision boxes (#1978)
1686* Fixed null `Tile#buffers` errors (#1987)
1687
1688#### New Features & Improvements
1689
1690* Added `symbol-avoid-edges` style property (#1951)
1691* Improved `symbol-max-angle` check algorithm (#1959)
1692* Added marker clustering! (#1931)
1693* Added zoomstart, zoom, and zoomend events (#1958)
1694* Disabled drag on mousedown when using boxzoom (#1907)
1695
1696## 0.12.4 (Jan 19 2016)
1697
1698#### Bugfixes
1699
1700* Fix elementGroups null value errors (#1933)
1701* Fix some glyph atlas overflow cases (#1923)
1702
1703## 0.12.3 (Jan 14 2016)
1704
1705#### API Improvements
1706* Support inline attribution options in map options (#1865)
1707* Improve flyTo options (#1854, #1429)
1708
1709#### Bugfixes
1710* Fix flickering with overscaled tiles (#1921)
1711* Remove Node.remove calls for IE browser compatibility (#1900)
1712* Match patterns at tile boundaries (#1908)
1713* Fix Tile#positionAt, fix query tests (#1899)
1714* Fix flickering on streets (#1875)
1715* Fix text-max-angle property (#1870)
1716* Fix overscaled line patterns (#1856)
1717* Fix patterns and icons for mismatched pixelRatios (#1851)
1718* Fix missing labels when text size 0 at max zoom (#1809)
1719* Use linear interp when pixel ratios don't match (#1601)
1720* Fix blank areas, flickering in raster layers (#1876, #675)
1721* Fix labels slipping/cropping at tile bounds (#757)
1722
1723#### UX Improvements
1724* Improve touch handler perceived performance (#1844)
1725
1726## 0.12.2 (Dec 22 2015)
1727
1728#### API Improvements
1729
1730* Support LngLat.convert([w, s, e, n]) (#1812)
1731* Invalid GeoJSON is now handled better
1732
1733#### Bugfixes
1734
1735* Fixed `Popup#addTo` when the popup is already open (#1811)
1736* Fixed warping when rotating / zooming really fast
1737* `Map#flyTo` now flies across the antimeridan if shorter (#1853)
1738
1739## 0.12.1 (Dec 8 2015)
1740
1741#### Breaking changes
1742
1743* Reversed the direction of `line-offset` (#1808)
1744* Renamed `Pinch` interaction handler to `TouchZoomRotate` (#1777)
1745* Made `Map#update` and `Map#render` private methods (#1798)
1746* Made `Map#remove` remove created DOM elements (#1789)
1747
1748#### API Improvements
1749
1750* Added an method to disable touch rotation (#1777)
1751* Added a `position` option for `Attribution` (#1689)
1752
1753#### Bugfixes
1754
1755* Ensure tile loading errors are properly reported (#1799)
1756* Ensure re-adding a previously removed pop-up works (#1477)
1757
1758#### UX Improvements
1759
1760* Don't round zoom level during double-click interaction (#1640)
1761
1762## 0.12.0 (Dec 2 2015)
1763
1764#### API Improvements
1765
1766* Added `line-offset` style property (#1778)
1767
1768## 0.11.5 (Dec 1 2015)
1769
1770#### Bugfixes
1771
1772* Fixed unstable symbol layer render order when adding / removing layers (#1558)
1773* Fire map loaded event even if raster tiles have errors
1774* Fix panning animation during easeTo with zoom change
1775* Fix pitching animation during flyTo
1776* Fix pitching animation during easeTo
1777* Prevent rotation from firing `mouseend` events (#1104)
1778
1779#### API Improvements
1780
1781* Fire `mousedown` and `mouseup` events (#1411)
1782* Fire `movestart` and `moveend` when panning (#1658)
1783* Added drag events (#1442)
1784* Request webp images for mapbox:// raster tiles in chrome (#1725)
1785
1786#### UX Improvements
1787
1788* Added inertia to map rotation (#620)
1789
1790## 0.11.4 (Nov 16 2015)
1791
1792#### Bugfixes
1793
1794* Fix alpha blending of alpha layers (#1684)
1795
1796## 0.11.3 (Nov 10 2015)
1797
1798#### Bugfixes
1799
1800* Fix GeoJSON rendering and performance (#1685)
1801
1802#### UX Improvements
1803
1804* Use SVG assets for UI controls (#1657)
1805* Zoom out with shift + dblclick (#1666)
1806
1807## 0.11.2 (Oct 29 2015)
1808
1809* Misc performance improvements
1810
1811#### Bugfixes
1812
1813* Fix sprites on systems with non-integer `devicePixelRatio`s (#1029 #1475 #1476)
1814* Fix layer minZoom being ignored if not less than source maxZoom
1815* Fix symbol placement at the start of a line (#1461)
1816* Fix `raster-opacity` on non-tile sources (#1270)
1817* Ignore boxzoom on shift-click (#1655)
1818
1819#### UX Improvements
1820
1821* Enable line breaks on common punctuation (#1115)
1822
1823#### API Improvements
1824
1825* Add toString and toArray methods to LngLat, LngLatBounds (#1571)
1826* Add `Transform#resize` method
1827* Add `Map#getLayer` method (#1183)
1828* Add `Transform#unmodified` property (#1452)
1829* Propagate WebGL context events (#1612)
1830
1831## 0.11.1 (Sep 30 2015)
1832
1833#### Bugfixes
1834
1835* Add statistics and checkboxes to debug page
1836* Fix `Map#featuresAt` for non-4096 vector sources (#1529)
1837* Don't fire `mousemove` on drag-pan
1838* Fix maxBounds constrains (#1539)
1839* Fix maxBounds infinite loop (#1538)
1840* Fix memory leak in worker
1841* Assert valid `TileCoord`, fix wrap calculation in `TileCoord#cover` (#1483)
1842* Abort raster tile load if not in viewport (#1490)
1843
1844#### API Improvements
1845
1846* Add `Map` event listeners for `mouseup`, `contextmenu` (right click) (#1532)
1847
1848
1849## 0.11.0 (Sep 11 2015)
1850
1851#### API Improvements
1852
1853* Add `Map#featuresIn`: a bounding-box feature query
1854* Emit stylesheet validation errors (#1436)
1855
1856#### UX Improvements
1857
1858* Handle v8 style `center`, `zoom`, `bearing`, `pitch` (#1452)
1859* Improve circle type styling (#1446)
1860* Improve dashed and patterned line antialiasing
1861
1862#### Bugfixes
1863
1864* Load images in a way that respects Cache-Control headers
1865* Filter for rtree matches to those crossing bbox
1866* Log errors by default (#1463)
1867* Fixed modification of `text-size` via `setLayoutProperty` (#1451)
1868* Throw on lat > 90 || < -90. (#1443)
1869* Fix circle clipping bug (#1457)
1870
1871
1872## 0.10.0 (Aug 21 2015)
1873
1874#### Breaking changes
1875
1876* Switched to [longitude, latitude] coordinate order, matching GeoJSON. We anticipate that mapbox-gl-js will be widely used
1877 with GeoJSON, and in the long term having a coordinate order that is consistent with GeoJSON will lead to less confusion
1878 and impedance mismatch than will a [latitude, longitude] order.
1879
1880 The following APIs were renamed:
1881
1882 * `LatLng` was renamed to `LngLat`
1883 * `LatLngBounds` was renamed to `LngLatBounds`
1884 * `Popup#setLatLng` was renamed to `Popup#setLngLat`
1885 * `Popup#getLatLng` was renamed to `Popup#getLngLat`
1886 * The `latLng` property of Map events was renamed `lngLat`
1887
1888 The following APIs now expect array coordinates in [longitude, latitude] order:
1889
1890 * `LngLat.convert`
1891 * `LngLatBounds.convert`
1892 * `Popup#setLngLat`
1893 * The `center` and `maxBounds` options of the `Map` constructor
1894 * The arguments to `Map#setCenter`, `Map#fitBounds`, `Map#panTo`, and `Map#project`
1895 * The `center` option of `Map#jumpTo`, `Map#easeTo`, and `Map#flyTo`
1896 * The `around` option of `Map#zoomTo`, `Map#rotateTo`, and `Map#easeTo`
1897 * The `coordinates` properties of video and image sources
1898
1899* Updated to mapbox-gl-style-spec v8.0.0 ([Changelog](https://github.com/mapbox/mapbox-gl-style-spec/blob/v8.0.0/CHANGELOG.md)). Styles are
1900 now expected to be version 8. You can use the [gl-style-migrate](https://github.com/mapbox/mapbox-gl-style-lint#migrations)
1901 utility to update existing styles.
1902
1903* The format for `mapbox://` style and glyphs URLs has changed. For style URLs, you should now use the format
1904 `mapbox://styles/:username/:style`. The `:style` portion of the URL no longer contains a username. For font URLs, you
1905 should now use the format `mapbox://fonts/:username/{fontstack}/{range}.pbf`.
1906* Mapbox default styles are now hosted via the Styles API rather than www.mapbox.com. You can make use of the Styles API
1907 with a `mapbox://` style URL pointing to a v8 style, e.g. `mapbox://styles/mapbox/streets-v8`.
1908* The v8 satellite style (`mapbox://styles/mapbox/satellite-v8`) is now a plain satellite style, and not longer supports labels
1909 or contour lines via classes. For a labeled satellite style, use `mapbox://styles/mapbox/satellite-hybrid`.
1910
1911* Removed `mbgl.config.HTTP_URL` and `mbgl.config.FORCE_HTTPS`; https is always used when connecting to the Mapbox API.
1912* Renamed `mbgl.config.HTTPS_URL` to `mbgl.config.API_URL`.
1913
1914#### Bugfixes
1915
1916* Don't draw halo when halo-width is 0 (#1381)
1917* Reverted shader changes that degraded performance on IE
1918
1919#### API Improvements
1920
1921* You can now unset layout and paint properties via the `setLayoutProperty` and `setPaintProperty` APIs
1922 by passing `undefined` as a property value.
1923* The `layer` option of `featuresAt` now supports an array of layers.
1924
1925## 0.9.0 (Jul 29 2015)
1926
1927* `glyphs` URL now normalizes without the `/v4/` prefix for `mapbox://` urls. Legacy behavior for `mapbox://fontstacks` is still maintained (#1385)
1928* Expose `geojson-vt` options for GeoJSON sources (#1271)
1929* bearing snaps to "North" within a tolerance of 7 degrees (#1059)
1930* Now you can directly mutate the minzoom and maxzoom layer properties with `map.setLayerZoomRange(layerId, minzoom, maxzoom)`
1931* Exposed `mapboxgl.Control`, a base class used by all UI controls
1932* Refactored handlers to be individually included in Map options, or enable/disable them individually at runtime, e.g. `map.scrollZoom.disable()`.
1933* New feature: Batch operations can now be done at once, improving performance for calling multiple style functions: (#1352)
1934
1935 ```js
1936 style.batch(function(s) {
1937 s.addLayer({ id: 'first', type: 'symbol', source: 'streets' });
1938 s.addLayer({ id: 'second', type: 'symbol', source: 'streets' });
1939 s.addLayer({ id: 'third', type: 'symbol', source: 'terrain' });
1940 s.setPaintProperty('first', 'text-color', 'black');
1941 s.setPaintProperty('first', 'text-halo-color', 'white');
1942 });
1943 ```
1944* Improved documentation
1945* `featuresAt` performance improvements by exposing `includeGeometry` option
1946* Better label placement along lines (#1283)
1947* Improvements to round linejoins on semi-transparent lines (mapbox/mapbox-gl-native#1771)
1948* Round zoom levels for raster tile loading (2a2aec)
1949* Source#reload cannot be called if source is not loaded (#1198)
1950* Events bubble to the canvas container for custom overlays (#1301)
1951* Move handlers are now bound on mousedown and touchstart events
1952* map.featuresAt() now works across the dateline
1953
1954## 0.8.1 (Jun 16 2015)
1955
1956* No code changes; released only to correct a build issue in 0.8.0.
1957
1958## 0.8.0 (Jun 15 2015)
1959
1960#### Breaking changes
1961
1962* `map.setView(latlng, zoom, bearing)` has been removed. Use
1963 [`map.jumpTo(options)`](https://www.mapbox.com/mapbox-gl-js/api/#map/jumpto) instead:
1964
1965 ```js
1966 map.setView([40, -74.50], 9) // 0.7.0 or earlier
1967 map.jumpTo({center: [40, -74.50], zoom: 9}); // now
1968 ```
1969* [`map.easeTo`](https://www.mapbox.com/mapbox-gl-js/api/#map/easeto) and
1970 [`map.flyTo`](https://www.mapbox.com/mapbox-gl-js/api/#map/flyto) now accept a single
1971 options object rather than positional parameters:
1972
1973 ```js
1974 map.easeTo([40, -74.50], 9, null, {duration: 400}); // 0.7.0 or earlier
1975 map.easeTo({center: [40, -74.50], zoom: 9, duration: 400}); // now
1976 ```
1977* `mapboxgl.Source` is no longer exported. Use `map.addSource()` instead. See the
1978 [GeoJSON line](https://www.mapbox.com/mapbox-gl-js/example/geojson-line/) or
1979 [GeoJSON markers](https://www.mapbox.com/mapbox-gl-js/example/geojson-markers/)
1980 examples.
1981* `mapboxgl.util.supported()` moved to [`mapboxgl.supported()`](https://www.mapbox.com/mapbox-gl-js/api/#mapboxgl/supported).
1982
1983#### UX improvements
1984
1985* Add perspective rendering (#1049)
1986* Better and faster labelling (#1079)
1987* Add touch interactions support on mobile devices (#949)
1988* Viewport-relative popup arrows (#1065)
1989* Normalize mousewheel zooming speed (#1060)
1990* Add proper handling of GeoJSON features that cross the date line (#1275)
1991* Sort overlapping symbols in the y direction (#470)
1992* Control buttons are now on a 30 pixel grid (#1143)
1993* Improve GeoJSON processing performance
1994
1995#### API Improvements
1996
1997* Switch to JSDoc for documentation
1998* Bundling with browserify is now supported
1999* Validate incoming map styles (#1054)
2000* Add `Map` `setPitch` `getPitch`
2001* Add `Map` `dblclick` event. (#1168)
2002* Add `Map` `getSource` (660a8c1)
2003* Add `Map` `setFilter` and `getFilter` (#985)
2004* Add `Map` `failIfMajorPerformanceCaveat` option (#1082)
2005* Add `Map` `preserveDrawingBuffer` option (#1232)
2006* Add `VideoSource` `getVideo()` (#1162)
2007* Support vector tiles with extents other than 4096 (#1227)
2008* Use a DOM hierarchy that supports evented overlays (#1217)
2009* Pass `latLng` to the event object (#1068)
2010
2011#### UX Bugfixes
2012
2013* Fix rendering glitch on iOS 8 (#750)
2014* Fix line triangulation errors (#1120, #992)
2015* Support unicode range 65280-65535 (#1108)
2016* Fix cracks between fill patterns (#972)
2017* Fix angle of icons aligned with lines (37a498a)
2018* Fix dashed line bug for overscaled tiles (#1132)
2019* Fix icon artifacts caused by sprite neighbors (#1195)
2020
2021#### API Bugfixes
2022
2023* Don't fire spurious `moveend` events on mouseup (#1107)
2024* Fix a race condition in `featuresAt` (#1220)
2025* Fix for brittle fontstack name convention (#1070)
2026* Fix broken `Popup` `setHTML` (#1272)
2027* Fix an issue with cross-origin image requests (#1269)
2028
2029
2030## 0.7.0 (Mar 3 2015)
2031
2032#### Breaking
2033
2034* Rename `Map` `hover` event to `mousemove`.
2035* Change `featuresAt` to return GeoJSON objects, including geometry (#1010)
2036* Remove `Map` `canvas` and `container` properties, add `getCanvas` and `getContainer` methods instead
2037
2038#### UX Improvements
2039
2040* Improve line label density
2041* Add boxzoom interaction (#1038)
2042* Add keyboard interaction (#1034)
2043* Faster `GeoJSONSource` `setData` without flickering (#973)
2044
2045#### API Improvements
2046
2047* Add Popup component (#325)
2048* Add layer API (#1022)
2049* Add filter API (#985)
2050* More efficient filter API (#1018)
2051* Accept plain old JS object for `addSource` (#1021)
2052* Reparse overscaled tiles
2053
2054#### Bugfixes
2055
2056* Fix `featuresAt` for LineStrings (#1006)
2057* Fix `tileSize` argument to `GeoJSON` worker (#987)
2058* Remove extraneous files from the npm package (#1024)
2059* Hide "improve map" link in print (#988)
2060
2061
2062## 0.6.0 (Feb 9 2015)
2063
2064#### Bugfixes
2065
2066* Add wrapped padding to sprite for repeating images (#972)
2067* Clear color buffers before rendering (#966)
2068* Make line-opacity work with line-image (#970)
2069* event.toElement fallback for Firefox (#932)
2070* skip duplicate vertices at ends of lines (#776)
2071* allow characters outside \w to be used in token
2072* Clear old tiles when new GeoJSON is loaded (#905)
2073
2074#### Improvements
2075
2076* Added `map.setPaintProperty()`, `map.getPaintProperty()`, `map.setLayoutProperty()`, and `map.getLayoutProperty()`.
2077* Switch to ESLint and more strict code rules (#957)
2078* Grab 2x raster tiles if retina (#754)
2079* Support for mapbox:// style URLs (#875)
2080
2081#### Breaking
2082
2083* Updated to mapbox-gl-style-spec v7.0.0 ([Changelog](https://github.com/mapbox/mapbox-gl-style-spec/blob/a2b0b561ce16015a1ef400dc870326b1b5255091/CHANGELOG.md)). Styles are
2084 now expected to be version 7. You can use the [gl-style-migrate](https://github.com/mapbox/mapbox-gl-style-lint#migrations)
2085 utility to update existing styles.
2086* HTTP_URL and HTTPS_URL config options must no longer include a `/v4` path prefix.
2087* `addClass`, `removeClass`, `setClasses`, `hasClass`, and `getClasses` are now methods
2088 on Map.
2089* `Style#cascade` is now private, pending a public style mutation API (#755).
2090* The format for `featuresAt` results changed. Instead of result-per-geometry-cross-layer,
2091 each result has a `layers` array with all layers that contain the feature. This avoids
2092 duplication of geometry and properties in the result set.
2093
2094
2095## 0.5.2 (Jan 07 2015)
2096
2097#### Bugfixes
2098
2099* Remove tiles for unused sources (#863)
2100* Fix fill pattern alignment
2101
2102#### Improvements
2103
2104* Add GeoJSONSource maxzoom option (#760)
2105* Return ref layers in featuresAt (#847)
2106* Return any extra layer keys provided in the stylesheet in featuresAt
2107* Faster protobuf parsing
2108
2109## 0.5.1 (Dec 19 2014)
2110
2111#### Bugfixes
2112
2113* Fix race conditions with style loading/rendering
2114* Fix race conditions with setStyle
2115* Fix map.remove()
2116* Fix featuresAt properties
2117
2118## 0.5.0 (Dec 17 2014)
2119
2120#### Bugfixes
2121
2122* Fix multiple calls to setStyle
2123
2124#### Improvements
2125
2126* `featuresAt` now returns additional information
2127* Complete style/source/tile event suite:
2128 style.load, style.error, style.change,
2129 source.add, source.remove, source.load, source.error, source.change,
2130 tile.add, tile.remove, tile.load, tile.error
2131* Vastly improved performance and correctness for GeoJSON sources
2132* Map#setStyle accepts a style URL
2133* Support {prefix} in tile URL templates
2134* Provide a source map with minified source
2135
2136#### Breaking
2137
2138* Results format for `featuresAt` changed
2139
2140## 0.4.2 (Nov 14 2014)
2141
2142#### Bugfixes
2143
2144- Ensure only one easing is active at a time (#807)
2145- Don't require style to perform easings (#817)
2146- Fix raster tiles sometimes not showing up (#761)
2147
2148#### Improvements
2149
2150- Internet Explorer 11 support (experimental)
2151
2152## 0.4.1 (Nov 10 2014)
2153
2154#### Bugfixes
2155
2156- Interpolate to the closest bearing when doing rotation animations (#818)
2157
2158## 0.4.0 (Nov 4 2014)
2159
2160#### Breaking
2161
2162- Updated to mapbox-gl-style-spec v6.0.0 ([Changelog](https://github.com/mapbox/mapbox-gl-style-spec/blob/v6.0.0/CHANGELOG.md)). Styles are
2163 now expected to be version 6. You can use the [gl-style-migrate](https://github.com/mapbox/mapbox-gl-style-lint#migrations)
2164 utility to update existing styles.
2165
2166## 0.3.2 (Oct 23 2014)
2167
2168#### Bugfixes
2169
2170- Fix worker initialization with deferred or async scripts
2171
2172#### Improvements
2173
2174- Added map.remove()
2175- CDN assets are now served with gzip compression
2176
2177## 0.3.1 (Oct 06 2014)
2178
2179#### Bugfixes
2180
2181- Fixed iteration over arrays with for/in
2182- Made browserify deps non-dev (#752)
2183
2184## 0.3.0 (Sep 23 2014)
2185
2186#### Breaking
2187
2188- Updated to mapbox-gl-style-spec v0.0.5 ([Changelog](https://github.com/mapbox/mapbox-gl-style-spec/blob/v0.0.5/CHANGELOG.md)). Styles are
2189 now expected to be version 5. You can use the [gl-style-migrate](https://github.com/mapbox/mapbox-gl-style-lint#migrations)
2190 utility to update existing styles.
2191- Removed support for composite layers for performance reasons. [#523](https://github.com/mapbox/mapbox-gl-js/issues/523#issuecomment-51731405)
2192- `raster-hue-rotate` units are now degrees.
2193
2194### Improvements
2195
2196- Added LatLng#wrap
2197- Added support for Mapbox fontstack API.
2198- Added support for remote, non-Mapbox TileJSON sources and inline TileJSON sources (#535, #698).
2199- Added support for `symbol-avoid-edges` property to allow labels to be placed across tile edges.
2200- Fixed mkdir issue on Windows (#674).
2201- Fixed drawing beveled line joins without overlap.
2202
2203#### Bugfixes
2204
2205- Fixed performance when underzooming a layer's minzoom.
2206- Fixed `raster-opacity` for regular raster layers.
2207- Fixed various corner cases of easing functions.
2208- Do not modify original stylesheet (#728).
2209- Inherit video source from source (#699).
2210- Fixed interactivity for geojson layers.
2211- Stop dblclick on navigation so the map does not pan (#715).
2212
2213## 0.2.2 (Aug 12 2014)
2214
2215#### Breaking
2216
2217- `map.setBearing()` no longer supports a second argument. Use `map.rotateTo` with an `offset` option and duration 0
2218if you need to rotate around a point other than the map center.
2219
2220#### Improvements
2221
2222- Improved `GeoJSONSource` to also accept URL as `data` option, eliminating a huge performance bottleneck in case of large GeoJSON files.
2223[#669](https://github.com/mapbox/mapbox-gl-js/issues/669) [#671](https://github.com/mapbox/mapbox-gl-js/issues/671)
2224- Switched to a different fill outlines rendering approach. [#668](https://github.com/mapbox/mapbox-gl-js/issues/668)
2225- Made the minified build 12% smaller gzipped (66 KB now).
2226- Added `around` option to `Map` `zoomTo`/`rotateTo`.
2227- Made the permalink hash more compact.
2228- Bevel linejoins no longer overlap and look much better when drawn with transparency.
2229
2230#### Bugfixes
2231
2232- Fixed the **broken minified build**. [#679](https://github.com/mapbox/mapbox-gl-js/issues/679)
2233- Fixed **blurry icons** rendering. [#666](https://github.com/mapbox/mapbox-gl-js/issues/666)
2234- Fixed `util.supports` WebGL detection producing false positives in some cases. [#677](https://github.com/mapbox/mapbox-gl-js/issues/677)
2235- Fixed invalid font configuration completely blocking tile rendering. [#662](https://github.com/mapbox/mapbox-gl-js/issues/662)
2236- Fixed `Map` `project`/`unproject` to properly accept array-form values.
2237- Fixed sprite loading race condition. [#593](https://github.com/mapbox/mapbox-gl-js/issues/593)
2238- Fixed `GeoJSONSource` `setData` not updating the map until zoomed or panned. [#676](https://github.com/mapbox/mapbox-gl-js/issues/676)
2239
2240## 0.2.1 (Aug 8 2014)
2241
2242#### Breaking
2243
2244- Changed `Navigation` control signature: now it doesn't need `map` in constructor
2245and gets added with `map.addControl(nav)` or `nav.addTo(map)`.
2246- Updated CSS classes to have consistent naming prefixed with `mapboxgl-`.
2247
2248#### Improvements
2249
2250- Added attribution control (present by default, disable by passing `attributionControl: false` in options).
2251- Added rotation by dragging the compass control.
2252- Added grabbing cursors for the map by default.
2253- Added `util.inherit` and `util.debounce` functions.
2254- Changed the default debug page style to OSM Bright.
2255- Token replacements now support dashes.
2256- Improved navigation control design.
2257
2258#### Bugfixes
2259
2260- Fixed compass control to rotate its icon with the map.
2261- Fixed navigation control cursors.
2262- Fixed inertia going to the wrong direction in a rotated map.
2263- Fixed inertia race condition where error was sometimes thrown after erratic panning/zooming.
2264
2265
2266## 0.2.0 (Aug 6 2014)
2267
2268- First public release.
2269
\No newline at end of file