Skip to content

Commit be6ba64

Browse files
authored
chore: deck.gl 9.2 upgrade & loaders.gl, luma.gl upgrades (#3271)
* chore: upgrade to deckgl 9.2.11 Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fixes Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix lint follow up Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix blending Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix geojson layer Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * more fixes for aggregation layers Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix h3 layer Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * potential fix for issues with geoarrow in point and line layers Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix postprocessing effects Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fixes for light and shadow effect Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * shadow and light effect - restore uniform shadow during the nighttime Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * don't hide line and arc layers when layer type changed Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * restore filters for aggregation layers Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix aggregation layers - hightlight outlines Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fixes for raster tile layer - raster pmtiles related Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fixes for raster tiles shader modules updates Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix lint Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * more lint Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * try to fix CI lint Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * try to fix CI tests Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * install webgpu Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * try to fix Ci test env setup Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * cont fix setup browser env Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * remove upgrade in examples - not yet released packages Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix more tests Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fixes for line layer Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * _resizeRenderBuffers override changes Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * revert jupyter loaders bump Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * change luma shader validation logic for raster tile layer Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * Replaced the injected standalone with a proper UBO-backed shader module Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * unify deckgl type fixes Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix plot container deckGLProps; fix lint Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * lint again Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * restore test for aggregation layers Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix cpu aggregator Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * more error handling for aggregation layers Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fixes to enchanced column draw Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * restore trip layer tests Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix raster tile shader again Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix for pickInfo types Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * postpone patchDeckRendererForPostProcessing Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * minor ts fix Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * add missing effect deps Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * ts changes Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix lint Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * more small fixes Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * sync yarn Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix lint again Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix build Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * remove unused hubble.gl from deps Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * ts fixes; test fixes Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * minor fixes Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * minor fixes Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * ts fixes Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * move gpu constants to constants module Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix lint Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * raster tile layer - migrate shaders to UBOs Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * raster tile fixes; ts impr Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * remove deprecated blending setter Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * more detailed tests Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * patch pipeline validation only if raster tile layers are created Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fight with any Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * add migration steps to docs Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix: aggregation - infinite config changes; add patch for non-numerical fields in aggregation - not supported in deck 9 Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * update aggr update triggers Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix for count to column agg type change (numeric) Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * disable loggin mouse move and hover by default in console Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix tests Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fog effects Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix lint Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * docs updates; typos Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * more docs upd Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix remove shadow effect layer crash Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix surface fog Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix light and shadow image export; remove hubble warnings; hide loading indicator during image export Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fix image export - wait for tiled layers Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * enable tile 3d layer Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * docs update; new install fix Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fog adjuements; note about performance on older hardware Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * update docs; fixes to 3d tile layer Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * ui fixes; to bounds fix Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * fixes Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> * editable layer + effects -> disable Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com> --------- Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>
1 parent bc59e88 commit be6ba64

197 files changed

Lines changed: 6768 additions & 2914 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,9 @@ Kepler.gl is also a React component that uses [Redux](https://redux.js.org/) to
5151

5252
## Env
5353

54-
Use Node 18.18.2 or above, older node versions have not been supported/ tested.
55-
For best results, use [nvm](https://github.com/creationix/nvm) `nvm install`.
54+
For **developing this repository**, use Node **18.18.2** (see `.nvmrc`): run `nvm install` and `nvm use`. Newer Node versions can make `yarn install` / `yarn bootstrap` try to compile the `gl` dev dependency from source; if that fails, see [Troubleshooting: gl package install](contributing/DEVELOPERS.md#troubleshooting-gl-package-install).
55+
56+
When **using kepler.gl as a dependency** in your own app, use Node 18.18.2 or a supported LTS; older Node versions are not supported or tested.
5657

5758
## Install kepler.gl modules
5859

SUMMARY.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
* [Examples](examples/README.md)
7171
* [Node/Express](examples/node-app/README.md)
7272
* [Demo App](examples/demo-app/README.md)
73-
* [Open modal](examples/replace-component/README.md)
73+
* [Replace Component](examples/replace-component/README.md)
7474
* [Open modal](examples/open-modal/README.md)
7575
* [UMD client](examples/umd-client/README.md)
7676
* [Customize kepler.gl Theme](examples/custom-theme/README.md)
@@ -80,3 +80,4 @@
8080
* [Contributor Covenant Code of Conduct](contributing/CODE_OF_CONDUCT.md)
8181
* [Change Log](CHANGELOG.md)
8282
* [Upgrade Guide](UPGRADE-GUIDE.md)
83+
* [Upgrade Guide v3.3](docs/upgrade-guide-v3.3.md)

contributing/DEVELOPERS.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Table of contents
44

55
- [Development Setup](./#development-setup)
6+
- [Troubleshooting: gl package install](./#troubleshooting-gl-package-install)
67
- [Running Tests](./#running-tests)
78
- [Coding Rules](./#coding-rules)
89
- [Commit Message Guidelines](./#git-commit-guidelines)
@@ -68,6 +69,7 @@ On Unix, MacOS
6869
# install Volta on Unix
6970
curl https://get.volta.sh | bash
7071
```
72+
7173
On Windows
7274

7375
```bash
@@ -117,6 +119,29 @@ An demo app will be served at `http://localhost:8080/`
117119

118120
This is the demo app we hosted on [http://kepler.gl/#/demo][demo-app]. By default, it serves non-minified source code inside the src directory.
119121

122+
### Troubleshooting: gl package install
123+
124+
Yarn may report that the `gl` package (a dev dependency used for headless WebGL in tests) **could not be built**. That usually happens for one of two reasons:
125+
126+
1. **No prebuilt binary for your Node version and platform**
127+
`prebuild-install` only ships binaries for certain Node releases and OS/arch pairs (for example, very new Node versions on Apple Silicon often have none). Yarn then falls back to compiling `gl` from source with `node-gyp`.
128+
129+
2. **Source build needs a `python` command**
130+
The ANGLE sources invoked during that compile run `python` (not `python3`). macOS Command Line Tools typically install `python3` only, so the log shows `python: command not found` and `gyp ERR! configure error` even though `node-gyp` found Python 3.
131+
132+
**What to do**
133+
134+
- **Prefer the Node version pinned for this repo** (see `.nvmrc`, currently 18.18.2). After `nvm install` and `nvm use` (or Volta, as above), run `yarn install` / `yarn bootstrap` again. A matching prebuild is often available, so the native compile step never runs.
135+
136+
- **If you must use a newer Node** and the install compiles from source, ensure `python` is on your `PATH` and points to Python 3, for example on macOS:
137+
138+
```bash
139+
sudo mkdir -p /usr/local/bin
140+
sudo ln -sf /usr/bin/python3 /usr/local/bin/python
141+
```
142+
143+
Use another location if `/usr/local/bin` is not early in your `PATH`.
144+
120145
#### Develop with deck.gl
121146

122147
When develop, upgrade, debug deck.gl, Demo app can load deck.gl directly from src

docs/RFC/table-class.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,12 @@ Missing features
6666

6767
#### Current kepler.gl methods:
6868

69-
1. `initalize`
69+
1. `initialize`
7070

7171
to replace utils/dataset-utils `createNewDataEntry` This table method takes a `ProtoTable` and returns a `Table` to be saved in kepler state.
7272

7373
```js
74-
table.initalize(protoTable);
74+
table.initialize(protoTable);
7575

7676
// following meta data should be initialized
7777
table.allIndexes,
@@ -102,7 +102,7 @@ table.allIndexes,
102102
Value the field value, type the field type
103103

104104
7. `sortDatasetByColumn`
105-
Sort a column, return an sorted index, assign to `sortColumn`, `sortOrder`
105+
Sort a column, return a sorted index, assign to `sortColumn`, `sortOrder`
106106

107107
8. `filterDataset(filters, layers, opt)`
108108
to replace `filter-utils.js` `filterDataset`

docs/api-reference/actions/actions.md

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ Callback when load map style success
298298

299299
### mapConfigChange
300300

301-
Update `visibleLayerGroups`to change layer group visibility
301+
Update `visibleLayerGroups` to change layer group visibility
302302

303303
- **ActionTypes**: [`ActionTypes.MAP_CONFIG_CHANGE`][12]
304304
- **Updaters**: [`mapStyleUpdaters.mapConfigChangeUpdater`][171]
@@ -343,12 +343,12 @@ Set 3d building layer group color
343343
## main
344344

345345
Main kepler.gl actions, these actions handles loading data and config into kepler.gl reducer. These actions
346-
is listened by all subreducers,
346+
are listened to by all subreducers.
347347

348348
### addDataToMap
349349

350350
Add data to kepler.gl reducer, prepare map with preset configuration if config is passed.
351-
Kepler.gl provides a handy set of utils to parse data from different formats to the `data` object required in dataset. You rarely need to manually format the data obejct.
351+
Kepler.gl provides a handy set of utils to parse data from different formats to the `data` object required in dataset. You rarely need to manually format the data object.
352352

353353
Use `KeplerGlSchema.getConfigToSave` to generate a json blob of the currents instance config.
354354
The config object value will always have higher precedence than the options properties.
@@ -533,7 +533,7 @@ Trigger CPU filter of selected dataset
533533

534534
**Parameters**
535535

536-
- `dataId` **([string][162] | Arrary&lt;[string][162]>)** single dataId or an array of dataIds
536+
- `dataId` **([string][162] | Array&lt;[string][162]>)** single dataId or an array of dataIds
537537

538538
Returns **{type: ActionTypes.APPLY_CPU_FILTER, dataId: [string][162]}**
539539

@@ -593,7 +593,7 @@ Update layer text label
593593

594594
### layerTypeChange
595595

596-
Update layer type. Previews layer config will be copied if applicable.
596+
Update layer type. Previous layer config will be copied if applicable.
597597

598598
- **ActionTypes**: [`ActionTypes.LAYER_TYPE_CHANGE`][12]
599599
- **Updaters**: [`visStateUpdaters.layerTypeChangeUpdater`][192]
@@ -697,7 +697,7 @@ Returns **{type: ActionTypes.MAP_CLICK}**
697697

698698
### onMouseMove
699699

700-
Trigger map mouse moveevent, payload would be
700+
Trigger map mouse move event, payload would be
701701
React-map-gl MapLayerMouseEvent
702702
[https://visgl.github.io/react-map-gl/docs/api-reference/types#maplayermouseevent][202]
703703

@@ -708,7 +708,7 @@ React-map-gl MapLayerMouseEvent
708708

709709
- `evt` **[Object][164]** MapLayerMouseEvent
710710

711-
Returns **{type: ActionTypes.MAP_CLICK}**
711+
Returns **{type: ActionTypes.MOUSE_MOVE}**
712712

713713
### removeDataset
714714

@@ -784,10 +784,10 @@ Set the map mode
784784
**Examples**
785785

786786
```javascript
787-
import {setMapMode} from '@kepler.gl/actions';
787+
import {setEditorMode} from '@kepler.gl/actions';
788788
import {EDITOR_MODES} from '@kepler.gl/constants';
789789

790-
this.props.dispatch(setMapMode(EDITOR_MODES.DRAW_POLYGON));
790+
this.props.dispatch(setEditorMode(EDITOR_MODES.DRAW_POLYGON));
791791
```
792792

793793
### setFilter
@@ -822,18 +822,16 @@ Returns **{type: ActionTypes.SET_FILTER_PLOT, idx: any, newProp: any}**
822822

823823
### setMapInfo
824824

825-
Set the property of a filter plot
825+
Set map info such as title and description
826826

827827
- **ActionTypes**: [`ActionTypes.SET_MAP_INFO`][12]
828828
- **Updaters**: [`visStateUpdaters.setMapInfoUpdater`][211]
829829

830830
**Parameters**
831831

832-
- `info`
833-
- `idx` **[Number][188]**
834-
- `newProp` **[Object][164]** key value mapping of new prop `{yAxis: 'histogram'}`
832+
- `info` **[Object][164]** map info object, e.g. `{title: 'My Map', description: 'My map description'}`
835833

836-
Returns **{type: ActionTypes.SET_FILTER_PLOT, idx: any, newProp: any}**
834+
Returns **{type: ActionTypes.SET_MAP_INFO, info: info}**
837835

838836
### showDatasetTable
839837

@@ -958,9 +956,9 @@ Returns **{type: ActionTypes.UPDATE_VIS_DATA, datasets: datasets, options: optio
958956
## uiStateActions
959957

960958
Actions handled mostly by `uiState` reducer.
961-
They manage UI changes in tha app, such as open and close side panel,
959+
They manage UI changes in the app, such as open and close side panel,
962960
switch between tabs in the side panel, open and close modal dialog for exporting data / images etc.
963-
It also manges which settings are selected during image and map export
961+
It also manages which settings are selected during image and map export
964962

965963
### addNotification
966964

@@ -1037,7 +1035,7 @@ Whether to export filtered data, `true` or `false`
10371035

10381036
**Parameters**
10391037

1040-
- `payload` **[boolean][165]** set `true` to ony export filtered data
1038+
- `payload` **[boolean][165]** set `true` to only export filtered data
10411039

10421040
### setExportImageDataUri
10431041

@@ -1474,7 +1472,7 @@ Set the export map format (html, json)
14741472
[173]: ../reducers/map-style.md#mapstyleupdatersrequestmapstylesupdater
14751473
[174]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array
14761474
[175]: ../reducers/map-style.md#mapstyleupdatersset3dbuildingcolorupdater
1477-
[176]: ../reducers/composers.md#combinedupdatersadddatatomapupdater
1475+
[176]: ../reducers/combine.md#combinedupdatersadddatatomapupdater
14781476
[177]: ../reducers/map-style.md#mapstyleupdatersinitmapstyleupdater
14791477
[178]: ../reducers/map-state.md#mapstateupdatersreceivemapconfigupdater
14801478
[179]: ../reducers/map-style.md#mapstyleupdatersreceivemapconfigupdater

docs/api-reference/advanced-usages/custom-initial-state.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Here is an example modify `uiState` `initialState` to hide side panel, and selec
66

77
```js
88
import {combineReducers} from 'redux';
9-
import {keplerGlReducer} from '@kepler.gl/reducers';
9+
import keplerGlReducer from '@kepler.gl/reducers';
1010

1111
const customizedKeplerGlReducer = keplerGlReducer
1212
.initialState({

docs/api-reference/advanced-usages/custom-map-styles.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ By default, kepler.gl uses mapbox-gl.js to render its base maps, displayed in [m
77
You can custom kepler.gl to use other base map services, by passing in style.json written in [Mapbox GL Style Spec](https://docs.mapbox.com/mapbox-gl-js/style-spec/). With custom style.json kepler.gl can render base map independent of mapbox vector tile service.
88

99

10-
For instance. there is a example [style.json](https://raw.githubusercontent.com/heshan0131/kepler.gl-data/master/style/basic.json). It points to the tile server described in the `sources` field.
10+
For instance. there is an example [style.json](https://raw.githubusercontent.com/heshan0131/kepler.gl-data/master/style/basic.json). It points to the tile server described in the `sources` field.
1111

1212
```json
1313
"sources": {
@@ -129,7 +129,7 @@ If your map styles are not using Mapbox services, and you replaced all kepler.gl
129129

130130
#### 4. `DEFAULT_LAYER_GROUPS`
131131

132-
If `layerGroups` is not suppied, kepler.gl uses the default layer groups below.
132+
If `layerGroups` is not supplied, kepler.gl uses the default layer groups below.
133133

134134

135135
```js

docs/api-reference/advanced-usages/custom-mapbox-host.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ and In render:
3838
<KeplerGl
3939
id="foo"
4040
mapboxApiAccessToken={this.token}
41-
mapboxApiUrl={}
41+
mapboxApiUrl={this.apiHost}
4242
mapStyles={this.mapStyles}
4343
width={width}
4444
height={height}/>

docs/api-reference/advanced-usages/forward-actions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ import {toggleFullScreen, wrapTo} from '@kepler.gl/actions';
5353
const wrapToMap = wrapTo('foo');
5454
const MapContainer = ({dispatch}) => (
5555
<div>
56-
<button onClick={() => dispatch(wrapToMap(toggleFullScreen())} />
56+
<button onClick={() => dispatch(wrapToMap(toggleFullScreen()))} />
5757
<KeplerGl id="foo"/>
5858
</div>
5959
);

docs/api-reference/advanced-usages/saving-loading-w-schema.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
![Processor and Schema][processor-schema]
44

5-
Kelper.gl provides a schema manager to save and load maps. It converts current map data and configuration into a smaller JSON blob. You can then load that JSON blob into an empty map by passing it to `addDataToMap`.
5+
Kepler.gl provides a schema manager to save and load maps. It converts current map data and configuration into a smaller JSON blob. You can then load that JSON blob into an empty map by passing it to `addDataToMap`.
66

77
The reason kepler.gl provides a Schema manager is to make it easy for users to connect the kepler.gl client app to any database, saving map data / config and later load it back. With the schema manager, a map saved in an older version can still be parsed and loaded with the latest kepler.gl library.
88

@@ -16,7 +16,7 @@ Under the hood, `SchemaManager.save()` calls `SchemaManager.getDatasetToSave()`
1616
- `SchemaManager.getDatasetToSave()` will output an array of dataset.
1717
- `SchemaManager.getConfigToSave()` will output a JSON blob of the current config.
1818

19-
In the example blow, `foo` is the id of the KeplerGl instance to be save.
19+
In the example below, `foo` is the id of the KeplerGl instance to be save.
2020

2121
```js
2222
import KeplerGlSchema from '@kepler.gl/schemas';

0 commit comments

Comments
 (0)