Showing preview only (9,989K chars total). Download the full file or copy to clipboard to get everything.
Repository: keplergl/kepler.gl
Branch: master
Commit: e37561295998
Files: 1370
Total size: 9.3 MB
Directory structure:
gitextract_dlltgrd3/
├── .dockerignore
├── .editorconfig
├── .eslintrc.js
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report--jupyter-widget.md
│ │ ├── bug_report.md
│ │ ├── feature-request--jupyter-widget.md
│ │ └── feature_request.md
│ ├── SECURITY.md
│ └── workflows/
│ ├── build-publish-pypi.yml
│ ├── npmpublish.yml
│ └── test.yml
├── .gitignore
├── .nvmrc
├── .prettierrc.js
├── .stylelintrc
├── .yarnrc.yml
├── CHANGELOG.md
├── FILE-HEADER
├── LICENSE
├── README.md
├── SUMMARY.md
├── TODO.md
├── UPGRADE-GUIDE.md
├── babel-register.js
├── babel.config.js
├── bindings/
│ ├── kepler.gl-jupyter/
│ │ ├── .gitignore
│ │ ├── Dockerfile
│ │ ├── MANIFEST.in
│ │ ├── README.md
│ │ ├── RELEASE.md
│ │ ├── js/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── babel.config.js
│ │ │ ├── lib/
│ │ │ │ ├── embed.js
│ │ │ │ ├── extension.js
│ │ │ │ ├── index.js
│ │ │ │ ├── keplergl/
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config-panel.js
│ │ │ │ │ │ ├── panel-header.js
│ │ │ │ │ │ ├── root.js
│ │ │ │ │ │ └── side-bar.js
│ │ │ │ │ ├── kepler.gl.js
│ │ │ │ │ ├── main.js
│ │ │ │ │ ├── store.js
│ │ │ │ │ └── utils.js
│ │ │ │ ├── keplergl-plugin.js
│ │ │ │ ├── labplugin.js
│ │ │ │ └── log.js
│ │ │ ├── package.json
│ │ │ ├── template/
│ │ │ │ └── keplergl-html.ejs
│ │ │ └── webpack/
│ │ │ ├── build-html.js
│ │ │ ├── build.js
│ │ │ ├── config.js
│ │ │ └── dev.js
│ │ ├── keplergl/
│ │ │ ├── __init__.py
│ │ │ ├── _version.py
│ │ │ └── keplergl.py
│ │ ├── keplergl-jupyter.json
│ │ ├── notebooks/
│ │ │ ├── DataFrame.ipynb
│ │ │ ├── GeoDataFrame.ipynb
│ │ │ ├── GeoJSON.ipynb
│ │ │ ├── Load kepler.gl.ipynb
│ │ │ ├── geojson-data.json
│ │ │ ├── hex-data.csv
│ │ │ ├── hex_config.py
│ │ │ └── sf_zip_geo.json
│ │ ├── pyproject.toml
│ │ ├── requirements.txt
│ │ ├── setup.cfg
│ │ └── setup.py
│ └── python/
│ ├── DEVELOPMENT.md
│ ├── README.md
│ ├── esbuild.config.mjs
│ ├── keplergl/
│ │ ├── __init__.py
│ │ ├── _version.py
│ │ ├── serializers.py
│ │ └── widget.py
│ ├── notebooks/
│ │ ├── DataFrame.ipynb
│ │ ├── GeoDataFrame.ipynb
│ │ ├── GeoJSON.ipynb
│ │ ├── Load kepler.gl.ipynb
│ │ ├── geojson-data.json
│ │ ├── hex-data.csv
│ │ ├── hex_config.py
│ │ └── sf_zip_geo.json
│ ├── package.json
│ ├── pyproject.toml
│ ├── src/
│ │ ├── components/
│ │ │ └── App.tsx
│ │ ├── index.ts
│ │ ├── process-shim.js
│ │ ├── store.ts
│ │ ├── styles.css
│ │ ├── types.ts
│ │ ├── utils/
│ │ │ ├── data.ts
│ │ │ └── serialization.ts
│ │ └── widget.ts
│ ├── tests/
│ │ ├── conftest.py
│ │ ├── test_serializers.py
│ │ └── test_widget.py
│ └── tsconfig.json
├── contributing/
│ ├── CODE_OF_CONDUCT.md
│ ├── DEVELOPERS.md
│ └── README.md
├── docs/
│ ├── README.md
│ ├── RFC/
│ │ └── table-class.md
│ ├── api-reference/
│ │ ├── README.md
│ │ ├── actions/
│ │ │ ├── README.md
│ │ │ └── actions.md
│ │ ├── advanced-usages/
│ │ │ ├── custom-initial-state.md
│ │ │ ├── custom-map-styles.md
│ │ │ ├── custom-mapbox-host.md
│ │ │ ├── forward-actions.md
│ │ │ ├── reducer-plugin.md
│ │ │ ├── replace-ui-component.md
│ │ │ ├── saving-loading-w-schema.md
│ │ │ └── using-updaters.md
│ │ ├── cloud-providers/
│ │ │ ├── README.md
│ │ │ └── cloud-provider.md
│ │ ├── components/
│ │ │ └── README.md
│ │ ├── custom-theme/
│ │ │ └── README.md
│ │ ├── ecosystem.md
│ │ ├── get-started.md
│ │ ├── localization/
│ │ │ └── README.md
│ │ ├── processors/
│ │ │ ├── README.md
│ │ │ └── processors.md
│ │ ├── reducers/
│ │ │ ├── README.md
│ │ │ ├── combine.md
│ │ │ ├── map-state.md
│ │ │ ├── map-style.md
│ │ │ ├── reducers.md
│ │ │ ├── ui-state.md
│ │ │ └── vis-state.md
│ │ └── schemas/
│ │ └── README.md
│ ├── keplergl-jupyter/
│ │ └── README.md
│ ├── release-notes.md
│ ├── spatial-analysis-tutorial/
│ │ ├── README.md
│ │ ├── basic-mapping.md
│ │ ├── get-started.md
│ │ ├── rate-mapping.md
│ │ ├── spatial-data-gis.md
│ │ └── spatial-data-wrangling.md
│ ├── table-of-contents.json
│ └── user-guides/
│ ├── README.md
│ ├── ai-assistant.md
│ ├── b-kepler-gl-workflow/
│ │ ├── README.md
│ │ ├── a-add-data-to-the-map.md
│ │ └── b-add-data-layers/
│ │ ├── a-adding-data-layers.md
│ │ ├── b-create-a-layer.md
│ │ ├── c-hide-edit-and-delete-layers.md
│ │ └── d-blend-and-rearrange-layers.md
│ ├── c-types-of-layers/
│ │ ├── README.md
│ │ ├── a-point.md
│ │ ├── b-arc.md
│ │ ├── c-line.md
│ │ ├── d-grid.md
│ │ ├── e-polygon.md
│ │ ├── f-cluster.md
│ │ ├── g-icon.md
│ │ ├── h-hexbin.md
│ │ ├── i-heatmap.md
│ │ ├── j-h3.md
│ │ ├── k-trip.md
│ │ ├── l-s2.md
│ │ ├── m-vector-tile-layer.md
│ │ ├── n-raster-tile-layer.md
│ │ ├── o-wms-layer.md
│ │ └── vector.md
│ ├── d-layer-attributes.md
│ ├── e-filters.md
│ ├── f-map-styles.md
│ ├── g-interactions.md
│ ├── h-playback.md
│ ├── i-FAQ.md
│ ├── j-get-started.md
│ ├── k-save-and-export.md
│ ├── l-color-attributes.md
│ ├── m-map-settings.md
│ └── sql-data-explorer.md
├── esbuild/
│ └── umd-esbuild.config.mjs
├── examples/
│ ├── README.md
│ ├── custom-map-style/
│ │ ├── .babelrc
│ │ ├── README.md
│ │ ├── esbuild.config.mjs
│ │ ├── index.html
│ │ ├── package.json
│ │ └── src/
│ │ ├── app.tsx
│ │ ├── main.tsx
│ │ └── store.ts
│ ├── custom-reducer/
│ │ ├── .babelrc
│ │ ├── README.md
│ │ ├── esbuild.config.mjs
│ │ ├── index.html
│ │ ├── package.json
│ │ └── src/
│ │ ├── app-reducer.js
│ │ ├── app.js
│ │ ├── configurations/
│ │ │ └── config.js
│ │ ├── data/
│ │ │ └── sample-data.js
│ │ ├── main.js
│ │ └── store.js
│ ├── custom-theme/
│ │ ├── .babelrc
│ │ ├── README.md
│ │ ├── esbuild.config.mjs
│ │ ├── index.html
│ │ ├── package.json
│ │ └── src/
│ │ ├── actions.js
│ │ ├── app.js
│ │ ├── main.js
│ │ ├── reducers/
│ │ │ └── index.js
│ │ └── store.js
│ ├── demo-app/
│ │ ├── .yarnrc.yml
│ │ ├── README.md
│ │ ├── esbuild.config.mjs
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── actions.js
│ │ │ ├── app.tsx
│ │ │ ├── cloud-providers/
│ │ │ │ ├── carto/
│ │ │ │ │ ├── carto-icon.js
│ │ │ │ │ └── carto-provider.js
│ │ │ │ ├── dropbox/
│ │ │ │ │ ├── dropbox-error-modal.js
│ │ │ │ │ ├── dropbox-icon.js
│ │ │ │ │ └── dropbox-provider.js
│ │ │ │ ├── foursquare/
│ │ │ │ │ ├── foursquare-icon.js
│ │ │ │ │ └── foursquare-provider.js
│ │ │ │ └── index.js
│ │ │ ├── components/
│ │ │ │ ├── announcement.js
│ │ │ │ ├── banner.js
│ │ │ │ ├── load-data-modal/
│ │ │ │ │ ├── load-remote-map.js
│ │ │ │ │ ├── sample-data-viewer.js
│ │ │ │ │ └── sample-maps-tab.js
│ │ │ │ └── map-control/
│ │ │ │ ├── map-control.js
│ │ │ │ └── sql-panel-control.tsx
│ │ │ ├── constants/
│ │ │ │ ├── default-settings.js
│ │ │ │ └── localization.js
│ │ │ ├── data/
│ │ │ │ ├── sample-animate-trip-data.js
│ │ │ │ ├── sample-geojson-config.js
│ │ │ │ ├── sample-geojson-points.js
│ │ │ │ ├── sample-gps-data.js
│ │ │ │ ├── sample-hex-id-csv.js
│ │ │ │ ├── sample-icon-csv.js
│ │ │ │ ├── sample-row-data.js
│ │ │ │ ├── sample-s2-data.js
│ │ │ │ ├── sample-small-geojson.js
│ │ │ │ └── sample-trip-data.js
│ │ │ ├── factories/
│ │ │ │ ├── load-data-modal.js
│ │ │ │ ├── map-control.js
│ │ │ │ └── panel-header.js
│ │ │ ├── main.js
│ │ │ ├── reducers/
│ │ │ │ └── index.js
│ │ │ ├── store.js
│ │ │ └── utils/
│ │ │ ├── routes.js
│ │ │ └── strings.js
│ │ └── yarn.lock
│ ├── get-started/
│ │ ├── .yarnrc.yml
│ │ ├── esbuild.config.mjs
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── app.tsx
│ │ │ └── index.html
│ │ └── tsconfig.json
│ ├── get-started-vite/
│ │ ├── README.md
│ │ ├── eslint.config.js
│ │ ├── index.html
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── main.tsx
│ │ ├── tsconfig.json
│ │ ├── tsconfig.node.json
│ │ └── vite.config.ts
│ ├── node-app/
│ │ ├── .babelrc
│ │ ├── README.md
│ │ ├── esbuild.config.mjs
│ │ ├── index.html
│ │ ├── package.json
│ │ ├── server.js
│ │ └── src/
│ │ ├── app-reducer.js
│ │ ├── app.js
│ │ ├── main.js
│ │ └── store.js
│ ├── open-modal/
│ │ ├── .babelrc
│ │ ├── README.md
│ │ ├── esbuild.config.mjs
│ │ ├── index.html
│ │ ├── package.json
│ │ └── src/
│ │ ├── app-reducer.js
│ │ ├── app.js
│ │ ├── components/
│ │ │ ├── fresh-map.js
│ │ │ └── saved-map.js
│ │ ├── configurations/
│ │ │ └── config.js
│ │ ├── data/
│ │ │ └── sample-data.js
│ │ ├── main.js
│ │ └── store.js
│ ├── replace-component/
│ │ ├── .babelrc
│ │ ├── README.md
│ │ ├── esbuild.config.mjs
│ │ ├── index.html
│ │ ├── package.json
│ │ └── src/
│ │ ├── actions.js
│ │ ├── app-reducer.js
│ │ ├── app.js
│ │ ├── components/
│ │ │ ├── custom-map-popover.js
│ │ │ ├── custom-panel.js
│ │ │ ├── panel-header.js
│ │ │ ├── panel-toggle.js
│ │ │ └── side-bar.js
│ │ ├── data/
│ │ │ └── sample-data.js
│ │ ├── main.js
│ │ └── store.js
│ └── umd-client/
│ ├── README.md
│ └── index.html
├── jest.config.js
├── jest.setup.js
├── jsconfig.json
├── package.json
├── scripts/
│ ├── action-table-maker.js
│ ├── ast-helper.js
│ ├── documentation.js
│ ├── edit-version.js
│ ├── fix-dependencies.sh
│ ├── install-and-start.js
│ ├── license-header/
│ │ ├── README.md
│ │ ├── bin.mjs
│ │ └── license-fixer.mjs
│ ├── log.js
│ └── ts-smoosh/
│ ├── README.md
│ ├── bin.js
│ ├── smoosh.js
│ ├── test.js
│ └── tests/
│ ├── 01-functions/
│ │ ├── a.d.ts
│ │ ├── a.js
│ │ └── a.tsx
│ ├── 02-imports/
│ │ ├── b.d.ts
│ │ ├── c.js
│ │ └── c.tsx
│ └── 03-const/
│ ├── e.d.ts
│ ├── e.js
│ └── e.tsx
├── src/
│ ├── actions/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── action-types.ts
│ │ │ ├── action-wrapper.ts
│ │ │ ├── actions.ts
│ │ │ ├── identity-actions.ts
│ │ │ ├── index.ts
│ │ │ ├── map-state-actions.ts
│ │ │ ├── map-style-actions.ts
│ │ │ ├── provider-actions.ts
│ │ │ ├── ui-state-actions.ts
│ │ │ └── vis-state-actions.ts
│ │ └── tsconfig.production.json
│ ├── ai-assistant/
│ │ ├── README.md
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── actions.ts
│ │ │ ├── components/
│ │ │ │ ├── ai-assistant-component.tsx
│ │ │ │ ├── ai-assistant-config.tsx
│ │ │ │ └── ai-assistant-manager.tsx
│ │ │ ├── config/
│ │ │ │ └── models.ts
│ │ │ ├── constants.ts
│ │ │ ├── icons/
│ │ │ │ ├── ai-star.tsx
│ │ │ │ └── api-key.tsx
│ │ │ ├── index.ts
│ │ │ ├── localization.ts
│ │ │ ├── map/
│ │ │ │ └── ai-assistant-control.tsx
│ │ │ ├── plugin.ts
│ │ │ ├── reducers/
│ │ │ │ └── index.ts
│ │ │ └── tools/
│ │ │ ├── echarts-tools.tsx
│ │ │ ├── geo-tools.tsx
│ │ │ ├── kepler-tools/
│ │ │ │ ├── basemap-tool.tsx
│ │ │ │ ├── boundary-tool.tsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── layer-creation-tool.tsx
│ │ │ │ ├── layer-style-tool.tsx
│ │ │ │ ├── loaddata-tool.tsx
│ │ │ │ ├── save-data-tool.tsx
│ │ │ │ └── table-tool.tsx
│ │ │ ├── lisa-tool.tsx
│ │ │ ├── query-tool.tsx
│ │ │ ├── tools.tsx
│ │ │ └── utils.ts
│ │ └── tsconfig.production.json
│ ├── cloud-providers/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── base.tsx
│ │ │ ├── index.ts
│ │ │ ├── provider.ts
│ │ │ └── upload.tsx
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── common-utils/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── data-type.ts
│ │ │ ├── data.ts
│ │ │ ├── h3-utils.ts
│ │ │ ├── index.ts
│ │ │ ├── promise.ts
│ │ │ ├── string.ts
│ │ │ └── url.ts
│ │ └── tsconfig.production.json
│ ├── components/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── bottom-widget.tsx
│ │ │ ├── common/
│ │ │ │ ├── action-panel.tsx
│ │ │ │ ├── animation-control/
│ │ │ │ │ ├── animation-control.tsx
│ │ │ │ │ ├── animation-controller.ts
│ │ │ │ │ ├── animation-speed-slider.tsx
│ │ │ │ │ ├── animation-window-control.tsx
│ │ │ │ │ ├── floating-time-display.tsx
│ │ │ │ │ ├── play-control.tsx
│ │ │ │ │ ├── playback-controls.tsx
│ │ │ │ │ ├── reset-control.tsx
│ │ │ │ │ ├── speed-control.tsx
│ │ │ │ │ └── window-action-control.tsx
│ │ │ │ ├── checkbox.tsx
│ │ │ │ ├── color-legend.tsx
│ │ │ │ ├── column-stats-chart.tsx
│ │ │ │ ├── data-table/
│ │ │ │ │ ├── button.tsx
│ │ │ │ │ ├── canvas.tsx
│ │ │ │ │ ├── cell-size.ts
│ │ │ │ │ ├── display-format.tsx
│ │ │ │ │ ├── grid.tsx
│ │ │ │ │ ├── header-cell.tsx
│ │ │ │ │ ├── index.tsx
│ │ │ │ │ └── option-dropdown.tsx
│ │ │ │ ├── dataset-label.tsx
│ │ │ │ ├── dnd-layer-items.ts
│ │ │ │ ├── error-boundary.tsx
│ │ │ │ ├── field-selector.tsx
│ │ │ │ ├── field-token.tsx
│ │ │ │ ├── file-uploader/
│ │ │ │ │ ├── file-drop.tsx
│ │ │ │ │ ├── file-upload-progress.tsx
│ │ │ │ │ ├── file-upload.tsx
│ │ │ │ │ └── upload-button.tsx
│ │ │ │ ├── flex-container.ts
│ │ │ │ ├── histogram-plot.tsx
│ │ │ │ ├── icon-button.tsx
│ │ │ │ ├── icons/
│ │ │ │ │ ├── add.tsx
│ │ │ │ │ ├── anchor_window.tsx
│ │ │ │ │ ├── arrow-down-alt.tsx
│ │ │ │ │ ├── arrow-down-full.tsx
│ │ │ │ │ ├── arrow-down-small.tsx
│ │ │ │ │ ├── arrow-down-solid.tsx
│ │ │ │ │ ├── arrow-down.tsx
│ │ │ │ │ ├── arrow-left.tsx
│ │ │ │ │ ├── arrow-right.tsx
│ │ │ │ │ ├── arrow-up-alt.tsx
│ │ │ │ │ ├── arrow-up-solid.tsx
│ │ │ │ │ ├── arrow-up.tsx
│ │ │ │ │ ├── base-map.tsx
│ │ │ │ │ ├── base.tsx
│ │ │ │ │ ├── bug.tsx
│ │ │ │ │ ├── calendar.tsx
│ │ │ │ │ ├── cancel.tsx
│ │ │ │ │ ├── checkmark.tsx
│ │ │ │ │ ├── clipboard.tsx
│ │ │ │ │ ├── clock.tsx
│ │ │ │ │ ├── close.tsx
│ │ │ │ │ ├── cloud.tsx
│ │ │ │ │ ├── code-alt.tsx
│ │ │ │ │ ├── copy.tsx
│ │ │ │ │ ├── crosshairs.tsx
│ │ │ │ │ ├── cube-3d.tsx
│ │ │ │ │ ├── cursor-click.tsx
│ │ │ │ │ ├── cursor-point.tsx
│ │ │ │ │ ├── data-table.tsx
│ │ │ │ │ ├── db.tsx
│ │ │ │ │ ├── delete.tsx
│ │ │ │ │ ├── docs.tsx
│ │ │ │ │ ├── docs2.tsx
│ │ │ │ │ ├── drag-n-drop.tsx
│ │ │ │ │ ├── draggable-dots.tsx
│ │ │ │ │ ├── draw-polygon.tsx
│ │ │ │ │ ├── edit.tsx
│ │ │ │ │ ├── effects/
│ │ │ │ │ │ ├── brightness-contrast.tsx
│ │ │ │ │ │ ├── color-halftone.tsx
│ │ │ │ │ │ ├── dot-screen.tsx
│ │ │ │ │ │ ├── edge-work.tsx
│ │ │ │ │ │ ├── hexagonal-pixelate.tsx
│ │ │ │ │ │ ├── hue-saturation.tsx
│ │ │ │ │ │ ├── ink.tsx
│ │ │ │ │ │ ├── light-and-shadow.tsx
│ │ │ │ │ │ ├── magic-wand.tsx
│ │ │ │ │ │ ├── magnify.tsx
│ │ │ │ │ │ ├── noise.tsx
│ │ │ │ │ │ ├── sepia.tsx
│ │ │ │ │ │ ├── tilt-shift.tsx
│ │ │ │ │ │ ├── triangle-blur.tsx
│ │ │ │ │ │ ├── vibrance.tsx
│ │ │ │ │ │ ├── vignette.tsx
│ │ │ │ │ │ └── zoom-blur.tsx
│ │ │ │ │ ├── email.tsx
│ │ │ │ │ ├── expand.tsx
│ │ │ │ │ ├── eye-seen.tsx
│ │ │ │ │ ├── eye-unseen.tsx
│ │ │ │ │ ├── file-type.tsx
│ │ │ │ │ ├── file.tsx
│ │ │ │ │ ├── files.tsx
│ │ │ │ │ ├── filter-funnel.tsx
│ │ │ │ │ ├── free-window.tsx
│ │ │ │ │ ├── gear.tsx
│ │ │ │ │ ├── globe.tsx
│ │ │ │ │ ├── hash.tsx
│ │ │ │ │ ├── help.tsx
│ │ │ │ │ ├── histogram.tsx
│ │ │ │ │ ├── horizontal-resize-handle.tsx
│ │ │ │ │ ├── index.tsx
│ │ │ │ │ ├── info.tsx
│ │ │ │ │ ├── layers.tsx
│ │ │ │ │ ├── left-arrow.tsx
│ │ │ │ │ ├── legend.tsx
│ │ │ │ │ ├── line-chart.tsx
│ │ │ │ │ ├── location-marker.tsx
│ │ │ │ │ ├── login.tsx
│ │ │ │ │ ├── logout.tsx
│ │ │ │ │ ├── map-icon.tsx
│ │ │ │ │ ├── map-pin.tsx
│ │ │ │ │ ├── messages.tsx
│ │ │ │ │ ├── minus.tsx
│ │ │ │ │ ├── moon.tsx
│ │ │ │ │ ├── order-by-dataset.tsx
│ │ │ │ │ ├── order-by-list.tsx
│ │ │ │ │ ├── pause.tsx
│ │ │ │ │ ├── picture.tsx
│ │ │ │ │ ├── pin.tsx
│ │ │ │ │ ├── play.tsx
│ │ │ │ │ ├── pointer-click.tsx
│ │ │ │ │ ├── polygon.tsx
│ │ │ │ │ ├── rectangle.tsx
│ │ │ │ │ ├── reduce.tsx
│ │ │ │ │ ├── reset.tsx
│ │ │ │ │ ├── save.tsx
│ │ │ │ │ ├── save2.tsx
│ │ │ │ │ ├── search.tsx
│ │ │ │ │ ├── settings.tsx
│ │ │ │ │ ├── share.tsx
│ │ │ │ │ ├── speed.tsx
│ │ │ │ │ ├── split.tsx
│ │ │ │ │ ├── square-select.tsx
│ │ │ │ │ ├── sun.tsx
│ │ │ │ │ ├── sunrise.tsx
│ │ │ │ │ ├── sunset.tsx
│ │ │ │ │ ├── timeline-marker.tsx
│ │ │ │ │ ├── trash.tsx
│ │ │ │ │ ├── vert-dots.tsx
│ │ │ │ │ ├── vert-three-dots.tsx
│ │ │ │ │ ├── warning-sign.tsx
│ │ │ │ │ ├── warning.tsx
│ │ │ │ │ ├── zoom-in.tsx
│ │ │ │ │ └── zoom-out.tsx
│ │ │ │ ├── image-preview.tsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── info-helper.tsx
│ │ │ │ ├── item-selector/
│ │ │ │ │ ├── accessor.ts
│ │ │ │ │ ├── chickleted-input.tsx
│ │ │ │ │ ├── dropdown-list.tsx
│ │ │ │ │ ├── dropdown-select.tsx
│ │ │ │ │ ├── item-selector.tsx
│ │ │ │ │ └── typeahead.tsx
│ │ │ │ ├── line-chart.tsx
│ │ │ │ ├── link-renderer.tsx
│ │ │ │ ├── loading-spinner.tsx
│ │ │ │ ├── logo.tsx
│ │ │ │ ├── map-layer-selector.tsx
│ │ │ │ ├── modal.tsx
│ │ │ │ ├── portaled.tsx
│ │ │ │ ├── progress-bar.tsx
│ │ │ │ ├── radius-legend.tsx
│ │ │ │ ├── range-brush.tsx
│ │ │ │ ├── range-plot.tsx
│ │ │ │ ├── range-slider-timeline-panel.tsx
│ │ │ │ ├── range-slider-timeline.tsx
│ │ │ │ ├── range-slider.tsx
│ │ │ │ ├── slider/
│ │ │ │ │ ├── mouse-event.ts
│ │ │ │ │ ├── slider-bar-handle.tsx
│ │ │ │ │ ├── slider-handle.tsx
│ │ │ │ │ └── slider.tsx
│ │ │ │ ├── styled-components.tsx
│ │ │ │ ├── switch.tsx
│ │ │ │ ├── sync-timeline-control.tsx
│ │ │ │ ├── time-range-slider-time-title.tsx
│ │ │ │ ├── time-range-slider.tsx
│ │ │ │ ├── time-slider-marker.tsx
│ │ │ │ ├── timeline-slider.tsx
│ │ │ │ ├── tippy-tooltip.tsx
│ │ │ │ ├── toolbar-item.tsx
│ │ │ │ ├── toolbar.tsx
│ │ │ │ └── vertical-toolbar.tsx
│ │ │ ├── connect/
│ │ │ │ ├── keplergl-connect.ts
│ │ │ │ └── with-local-selector.tsx
│ │ │ ├── container.tsx
│ │ │ ├── context.tsx
│ │ │ ├── dnd-context.tsx
│ │ │ ├── editor/
│ │ │ │ ├── editor.tsx
│ │ │ │ └── feature-action-panel.tsx
│ │ │ ├── effects/
│ │ │ │ ├── compact-color-picker.tsx
│ │ │ │ ├── effect-configurator.tsx
│ │ │ │ ├── effect-list.tsx
│ │ │ │ ├── effect-manager.tsx
│ │ │ │ ├── effect-panel-header.tsx
│ │ │ │ ├── effect-panel.tsx
│ │ │ │ ├── effect-time-configurator.tsx
│ │ │ │ ├── effect-time-selector.tsx
│ │ │ │ ├── effect-time-slider.tsx
│ │ │ │ ├── effect-type-dropdown-list.tsx
│ │ │ │ ├── effect-type-list-item.tsx
│ │ │ │ ├── effect-type-selector.tsx
│ │ │ │ ├── side-panel-title.tsx
│ │ │ │ └── timezone-selector.tsx
│ │ │ ├── filter-animation-controller.tsx
│ │ │ ├── filters/
│ │ │ │ ├── components.ts
│ │ │ │ ├── filter-panels/
│ │ │ │ │ ├── filter-panel-with-field-select.tsx
│ │ │ │ │ ├── filter-synced-dataset-panel.tsx
│ │ │ │ │ ├── multi-select-filter-panel.tsx
│ │ │ │ │ ├── new-filter-panel.tsx
│ │ │ │ │ ├── polygon-filter-panel.tsx
│ │ │ │ │ ├── range-filter-panel.tsx
│ │ │ │ │ ├── single-select-filter-panel.tsx
│ │ │ │ │ ├── time-range-filter-panel.tsx
│ │ │ │ │ ├── time-synced-field-selector.tsx
│ │ │ │ │ └── types.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── multi-select-filter.tsx
│ │ │ │ ├── polygon-filter.tsx
│ │ │ │ ├── range-filter.tsx
│ │ │ │ ├── single-select-filter.tsx
│ │ │ │ ├── time-range-filter.tsx
│ │ │ │ ├── time-widget-top.tsx
│ │ │ │ ├── time-widget.tsx
│ │ │ │ └── types.ts
│ │ │ ├── geocoder/
│ │ │ │ └── geocoder.tsx
│ │ │ ├── geocoder-panel.tsx
│ │ │ ├── hooks/
│ │ │ │ ├── use-cloud-list-provider.tsx
│ │ │ │ ├── use-dnd-effects.tsx
│ │ │ │ ├── use-dnd-layers.tsx
│ │ │ │ ├── use-feature-flags.tsx
│ │ │ │ ├── use-fetch-raster-tile-metadata.ts
│ │ │ │ ├── use-fetch-vector-tile-metadata.ts
│ │ │ │ ├── use-legend-position.ts
│ │ │ │ └── use-on-click-outside.tsx
│ │ │ ├── index.ts
│ │ │ ├── injector.tsx
│ │ │ ├── kepler-gl.tsx
│ │ │ ├── layer-animation-controller.tsx
│ │ │ ├── loading-indicator.tsx
│ │ │ ├── map/
│ │ │ │ ├── coordinate-info.tsx
│ │ │ │ ├── effects/
│ │ │ │ │ └── effect-control.tsx
│ │ │ │ ├── layer-hover-info.tsx
│ │ │ │ ├── layer-selector-panel.tsx
│ │ │ │ ├── lazy-tippy.tsx
│ │ │ │ ├── locale-panel.tsx
│ │ │ │ ├── map-control-panel.tsx
│ │ │ │ ├── map-control-toolbar.tsx
│ │ │ │ ├── map-control-tooltip.tsx
│ │ │ │ ├── map-control.tsx
│ │ │ │ ├── map-draw-panel.tsx
│ │ │ │ ├── map-legend-panel.tsx
│ │ │ │ ├── map-legend.tsx
│ │ │ │ ├── map-popover-content.tsx
│ │ │ │ ├── map-popover.tsx
│ │ │ │ ├── split-map-button.tsx
│ │ │ │ └── toggle-3d-button.tsx
│ │ │ ├── map-container.tsx
│ │ │ ├── map-view-state-context.tsx
│ │ │ ├── maps-layout.tsx
│ │ │ ├── modal-container.tsx
│ │ │ ├── modals/
│ │ │ │ ├── add-map-style-modal.tsx
│ │ │ │ ├── cloud-components/
│ │ │ │ │ ├── cloud-header.tsx
│ │ │ │ │ ├── cloud-item.spec.tsx
│ │ │ │ │ ├── cloud-item.tsx
│ │ │ │ │ ├── cloud-maps.spec.tsx
│ │ │ │ │ ├── cloud-maps.tsx
│ │ │ │ │ ├── provider-loading.tsx
│ │ │ │ │ └── provider-select.tsx
│ │ │ │ ├── cloud-tile.tsx
│ │ │ │ ├── data-table-modal.tsx
│ │ │ │ ├── delete-data-modal.tsx
│ │ │ │ ├── error-display.tsx
│ │ │ │ ├── export-data-modal.tsx
│ │ │ │ ├── export-image-modal.tsx
│ │ │ │ ├── export-map-modal/
│ │ │ │ │ ├── components.tsx
│ │ │ │ │ ├── export-html-map.tsx
│ │ │ │ │ ├── export-json-map.tsx
│ │ │ │ │ └── export-map-modal.tsx
│ │ │ │ ├── image-modal-container.tsx
│ │ │ │ ├── load-data-modal.tsx
│ │ │ │ ├── load-storage-map.spec.tsx
│ │ │ │ ├── load-storage-map.tsx
│ │ │ │ ├── loading-dialog.tsx
│ │ │ │ ├── modal-dialog.tsx
│ │ │ │ ├── modal-tabs.tsx
│ │ │ │ ├── overwrite-map-modal.tsx
│ │ │ │ ├── save-map-modal.spec.tsx
│ │ │ │ ├── save-map-modal.tsx
│ │ │ │ ├── share-map-modal.spec.tsx
│ │ │ │ ├── share-map-modal.tsx
│ │ │ │ ├── status-panel.tsx
│ │ │ │ ├── storage-map-viewer.tsx
│ │ │ │ └── tilesets-modals/
│ │ │ │ ├── common.tsx
│ │ │ │ ├── load-data-footer.tsx
│ │ │ │ ├── load-tileset.tsx
│ │ │ │ ├── tileset-icon.tsx
│ │ │ │ ├── tileset-raster-form.tsx
│ │ │ │ ├── tileset-vector-form.tsx
│ │ │ │ └── tileset-wms-form.tsx
│ │ │ ├── notification-panel/
│ │ │ │ └── notification-item.tsx
│ │ │ ├── notification-panel.tsx
│ │ │ ├── plot-container.tsx
│ │ │ ├── side-panel/
│ │ │ │ ├── add-by-dataset-button.tsx
│ │ │ │ ├── cloud-storage-dropdown.tsx
│ │ │ │ ├── common/
│ │ │ │ │ ├── dataset-info.tsx
│ │ │ │ │ ├── dataset-tag.tsx
│ │ │ │ │ ├── dataset-title.tsx
│ │ │ │ │ ├── source-data-catalog.tsx
│ │ │ │ │ ├── source-data-selector-content.tsx
│ │ │ │ │ ├── source-data-selector.tsx
│ │ │ │ │ ├── source-selector.tsx
│ │ │ │ │ └── types.ts
│ │ │ │ ├── custom-panel.tsx
│ │ │ │ ├── filter-manager.tsx
│ │ │ │ ├── filter-panel/
│ │ │ │ │ ├── add-filter-button.tsx
│ │ │ │ │ ├── filter-panel-header.tsx
│ │ │ │ │ └── filter-panel.tsx
│ │ │ │ ├── interaction-manager.tsx
│ │ │ │ ├── interaction-panel/
│ │ │ │ │ ├── brush-config.tsx
│ │ │ │ │ ├── interaction-panel.tsx
│ │ │ │ │ ├── tooltip-config/
│ │ │ │ │ │ └── tooltip-chicklet.tsx
│ │ │ │ │ └── tooltip-config.tsx
│ │ │ │ ├── layer-manager.tsx
│ │ │ │ ├── layer-panel/
│ │ │ │ │ ├── add-layer-button.tsx
│ │ │ │ │ ├── aggr-scale-selector.tsx
│ │ │ │ │ ├── channel-by-value-selector.tsx
│ │ │ │ │ ├── color-breaks-panel.tsx
│ │ │ │ │ ├── color-palette-preset.tsx
│ │ │ │ │ ├── color-palette.tsx
│ │ │ │ │ ├── color-range-selector.tsx
│ │ │ │ │ ├── color-scale-selector.tsx
│ │ │ │ │ ├── color-selector.tsx
│ │ │ │ │ ├── column-selector.tsx
│ │ │ │ │ ├── custom-palette.tsx
│ │ │ │ │ ├── custom-picker.tsx
│ │ │ │ │ ├── dataset-layer-group.tsx
│ │ │ │ │ ├── dataset-layer-section.tsx
│ │ │ │ │ ├── dataset-section.tsx
│ │ │ │ │ ├── dimension-scale-selector.tsx
│ │ │ │ │ ├── how-to-button.tsx
│ │ │ │ │ ├── layer-color-selector.tsx
│ │ │ │ │ ├── layer-column-config.tsx
│ │ │ │ │ ├── layer-column-mode-config.tsx
│ │ │ │ │ ├── layer-config-group.tsx
│ │ │ │ │ ├── layer-configurator.tsx
│ │ │ │ │ ├── layer-error-message.tsx
│ │ │ │ │ ├── layer-list.tsx
│ │ │ │ │ ├── layer-panel-header.tsx
│ │ │ │ │ ├── layer-panel.tsx
│ │ │ │ │ ├── layer-type-dropdown-list.tsx
│ │ │ │ │ ├── layer-type-list-item.tsx
│ │ │ │ │ ├── layer-type-selector.tsx
│ │ │ │ │ ├── radius-by-zoom-input.tsx
│ │ │ │ │ ├── raster-tile-colormap-list-item.tsx
│ │ │ │ │ ├── raster-tile-layer-configurator.tsx
│ │ │ │ │ ├── single-color-palette.tsx
│ │ │ │ │ ├── text-label-panel.tsx
│ │ │ │ │ ├── vector-tile-layer-configurator.tsx
│ │ │ │ │ ├── vis-config-by-field-selector.tsx
│ │ │ │ │ ├── vis-config-slider.tsx
│ │ │ │ │ └── vis-config-switch.tsx
│ │ │ │ ├── map-manager.tsx
│ │ │ │ ├── map-style-panel/
│ │ │ │ │ ├── map-layer-group-color-picker.tsx
│ │ │ │ │ ├── map-layer-group-item.tsx
│ │ │ │ │ ├── map-layer-selector.tsx
│ │ │ │ │ └── map-style-selector.tsx
│ │ │ │ ├── panel-header-action.tsx
│ │ │ │ ├── panel-header.tsx
│ │ │ │ ├── panel-tab.tsx
│ │ │ │ ├── panel-title.tsx
│ │ │ │ ├── panel-toggle.tsx
│ │ │ │ ├── panel-view-list-toggle.tsx
│ │ │ │ └── side-bar.tsx
│ │ │ ├── side-panel.tsx
│ │ │ └── types.ts
│ │ └── tsconfig.production.json
│ ├── constants/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── color-palettes.ts
│ │ │ ├── colors-by-theme.ts
│ │ │ ├── dataset.ts
│ │ │ ├── default-settings.ts
│ │ │ ├── index.ts
│ │ │ ├── keyevent.ts
│ │ │ ├── layers.ts
│ │ │ ├── plot.ts
│ │ │ ├── time.ts
│ │ │ ├── tooltip.ts
│ │ │ ├── user-feedbacks.ts
│ │ │ └── user-guides.ts
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── deckgl-arrow-layers/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── constants.ts
│ │ │ ├── index.ts
│ │ │ ├── layers/
│ │ │ │ ├── geo-arrow-arc-layer.ts
│ │ │ │ ├── geo-arrow-scatterplot-layer.ts
│ │ │ │ └── geo-arrow-text-layer.ts
│ │ │ ├── types.ts
│ │ │ └── utils/
│ │ │ ├── picking.ts
│ │ │ ├── utils.ts
│ │ │ └── validate.ts
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── deckgl-layers/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── 3d-building-layer/
│ │ │ │ ├── 3d-building-layer.ts
│ │ │ │ ├── 3d-building-utils.ts
│ │ │ │ └── types.ts
│ │ │ ├── cluster-layer/
│ │ │ │ └── cluster-layer.ts
│ │ │ ├── column-layer/
│ │ │ │ └── enhanced-column-layer.ts
│ │ │ ├── deckgl-extensions/
│ │ │ │ ├── filter-arrow-layer.ts
│ │ │ │ └── filter-shader-module.ts
│ │ │ ├── grid-layer/
│ │ │ │ └── enhanced-cpu-grid-layer.ts
│ │ │ ├── hexagon-layer/
│ │ │ │ └── enhanced-hexagon-layer.ts
│ │ │ ├── index.ts
│ │ │ ├── layer-utils/
│ │ │ │ ├── cluster-utils.ts
│ │ │ │ ├── cpu-aggregator.ts
│ │ │ │ └── shader-utils.ts
│ │ │ ├── line-layer/
│ │ │ │ └── line-layer.ts
│ │ │ ├── raster/
│ │ │ │ ├── images.ts
│ │ │ │ ├── raster-layer/
│ │ │ │ │ ├── raster-layer-webgl1.fs.ts
│ │ │ │ │ ├── raster-layer-webgl1.vs.ts
│ │ │ │ │ ├── raster-layer-webgl2.fs.ts
│ │ │ │ │ ├── raster-layer-webgl2.vs.ts
│ │ │ │ │ └── raster-layer.ts
│ │ │ │ ├── raster-mesh-layer/
│ │ │ │ │ ├── matrix.ts
│ │ │ │ │ ├── raster-mesh-layer-webgl1.fs.ts
│ │ │ │ │ ├── raster-mesh-layer-webgl1.vs.ts
│ │ │ │ │ ├── raster-mesh-layer-webgl2.fs.ts
│ │ │ │ │ ├── raster-mesh-layer-webgl2.vs.ts
│ │ │ │ │ └── raster-mesh-layer.ts
│ │ │ │ ├── types.ts
│ │ │ │ ├── util.ts
│ │ │ │ └── webgl/
│ │ │ │ ├── color/
│ │ │ │ │ ├── colormap.ts
│ │ │ │ │ ├── filter.ts
│ │ │ │ │ ├── gamma-contrast.ts
│ │ │ │ │ ├── linear-rescale.ts
│ │ │ │ │ ├── saturation.ts
│ │ │ │ │ └── sigmoidal-contrast.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── pansharpen/
│ │ │ │ │ └── pansharpen-brovey.ts
│ │ │ │ ├── spectral-indices/
│ │ │ │ │ ├── evi.ts
│ │ │ │ │ ├── msavi.ts
│ │ │ │ │ ├── normalized-difference.ts
│ │ │ │ │ └── savi.ts
│ │ │ │ ├── texture/
│ │ │ │ │ ├── combine-bands.ts
│ │ │ │ │ ├── mask.ts
│ │ │ │ │ ├── reorder-bands.ts
│ │ │ │ │ └── rgba-image.ts
│ │ │ │ └── types.ts
│ │ │ ├── svg-icon-layer/
│ │ │ │ ├── scatterplot-icon-layer.ts
│ │ │ │ └── svg-icon-layer.ts
│ │ │ ├── typedefs/
│ │ │ │ └── deckgl.d.ts
│ │ │ └── wms/
│ │ │ └── wms-layer.ts
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── duckdb/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── adapters/
│ │ │ │ └── duckdb-wasm-adapter.ts
│ │ │ ├── components/
│ │ │ │ ├── index.tsx
│ │ │ │ ├── monaco-editor.tsx
│ │ │ │ ├── preview-data-panel.tsx
│ │ │ │ ├── schema-panel.tsx
│ │ │ │ ├── sql-panel.tsx
│ │ │ │ └── tree.tsx
│ │ │ ├── index.ts
│ │ │ ├── plugin.ts
│ │ │ ├── processors/
│ │ │ │ └── data-processor.ts
│ │ │ ├── table/
│ │ │ │ ├── duckdb-table-utils.ts
│ │ │ │ ├── duckdb-table.ts
│ │ │ │ └── index.ts
│ │ │ └── utils/
│ │ │ └── perf.ts
│ │ └── tsconfig.production.json
│ ├── effects/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── custom-deck-lighting-effect.ts
│ │ │ ├── effect.ts
│ │ │ ├── index.ts
│ │ │ ├── lighting-effect.ts
│ │ │ ├── post-processing-effect.ts
│ │ │ └── utils.ts
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── index.d.ts
│ ├── index.js
│ ├── layers/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── aggregation-layer.ts
│ │ │ ├── arc-layer/
│ │ │ │ ├── arc-layer-icon.tsx
│ │ │ │ └── arc-layer.ts
│ │ │ ├── base-layer.ts
│ │ │ ├── base.tsx
│ │ │ ├── cluster-layer/
│ │ │ │ ├── cluster-layer-icon.tsx
│ │ │ │ └── cluster-layer.ts
│ │ │ ├── default-layer-icon.tsx
│ │ │ ├── editor-layer/
│ │ │ │ ├── constants.ts
│ │ │ │ ├── editor-layer-utils.ts
│ │ │ │ ├── editor-layer.ts
│ │ │ │ ├── feature-styles.ts
│ │ │ │ └── modify-mode-extended.ts
│ │ │ ├── example-table.tsx
│ │ │ ├── geojson-layer/
│ │ │ │ ├── geojson-info-modal.tsx
│ │ │ │ ├── geojson-layer-icon.tsx
│ │ │ │ ├── geojson-layer.ts
│ │ │ │ └── geojson-utils.ts
│ │ │ ├── grid-layer/
│ │ │ │ ├── grid-layer-icon.tsx
│ │ │ │ ├── grid-layer.ts
│ │ │ │ └── grid-utils.ts
│ │ │ ├── h3-hexagon-layer/
│ │ │ │ ├── h3-hexagon-layer-icon.tsx
│ │ │ │ ├── h3-hexagon-layer.ts
│ │ │ │ └── index.ts
│ │ │ ├── heatmap-layer/
│ │ │ │ ├── heatmap-layer-icon.tsx
│ │ │ │ └── heatmap-layer.ts
│ │ │ ├── hexagon-layer/
│ │ │ │ ├── hexagon-layer-icon.tsx
│ │ │ │ ├── hexagon-layer.ts
│ │ │ │ └── hexagon-utils.ts
│ │ │ ├── icon-layer/
│ │ │ │ ├── icon-info-modal.tsx
│ │ │ │ ├── icon-layer-icon.tsx
│ │ │ │ └── icon-layer.ts
│ │ │ ├── index.ts
│ │ │ ├── layer-text-label.ts
│ │ │ ├── layer-update.ts
│ │ │ ├── layer-utils.ts
│ │ │ ├── line-layer/
│ │ │ │ ├── line-layer-icon.tsx
│ │ │ │ └── line-layer.ts
│ │ │ ├── mapbox-utils.ts
│ │ │ ├── mapboxgl-layer.ts
│ │ │ ├── point-layer/
│ │ │ │ ├── point-layer-icon.tsx
│ │ │ │ └── point-layer.ts
│ │ │ ├── raster-tile/
│ │ │ │ ├── config.ts
│ │ │ │ ├── gpu-utils.ts
│ │ │ │ ├── image.ts
│ │ │ │ ├── raster-tile-icon.tsx
│ │ │ │ ├── raster-tile-layer-schema.ts
│ │ │ │ ├── raster-tile-layer.ts
│ │ │ │ ├── raster-tile-utils.ts
│ │ │ │ ├── request-throttle.ts
│ │ │ │ ├── types.ts
│ │ │ │ └── url.ts
│ │ │ ├── s2-geometry-layer/
│ │ │ │ ├── s2-geometry-layer.ts
│ │ │ │ ├── s2-layer-icon.tsx
│ │ │ │ └── s2-utils.ts
│ │ │ ├── scenegraph-layer/
│ │ │ │ ├── scenegraph-info-modal.tsx
│ │ │ │ ├── scenegraph-layer-icon.tsx
│ │ │ │ └── scenegraph-layer.ts
│ │ │ ├── table.tsx
│ │ │ ├── trip-layer/
│ │ │ │ ├── trip-info-modal.tsx
│ │ │ │ ├── trip-layer-icon.tsx
│ │ │ │ ├── trip-layer.ts
│ │ │ │ └── trip-utils.ts
│ │ │ ├── typedefs/
│ │ │ │ └── deckgl.d.ts
│ │ │ ├── vector-tile/
│ │ │ │ ├── abstract-tile-layer.ts
│ │ │ │ ├── common-tile/
│ │ │ │ │ ├── iterable-tile-set.ts
│ │ │ │ │ ├── tile-dataset.ts
│ │ │ │ │ └── tile-utils.ts
│ │ │ │ ├── loading-counter.ts
│ │ │ │ ├── mvt-layer.ts
│ │ │ │ ├── vector-tile-icon.tsx
│ │ │ │ └── vector-tile-layer.ts
│ │ │ └── wms-layer/
│ │ │ ├── wms-layer-icon.tsx
│ │ │ └── wms-layer.ts
│ │ └── tsconfig.production.json
│ ├── localization/
│ │ ├── TRANSLATION_GUIDE.md
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── formatted-message.tsx
│ │ │ ├── index.ts
│ │ │ ├── locales.ts
│ │ │ ├── messages.ts
│ │ │ └── translations/
│ │ │ ├── ca.ts
│ │ │ ├── cn.ts
│ │ │ ├── en.ts
│ │ │ ├── es.ts
│ │ │ ├── fi.ts
│ │ │ ├── ja.ts
│ │ │ ├── pt.ts
│ │ │ └── ru.ts
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── processors/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── data-processor.ts
│ │ │ ├── file-handler.ts
│ │ │ ├── index.ts
│ │ │ ├── typedefs/
│ │ │ │ └── deckgl.d.ts
│ │ │ └── types.ts
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── reducers/
│ │ ├── UPGRADE-data-container.md
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── combined-updaters.ts
│ │ │ ├── composer-helpers.ts
│ │ │ ├── composers.ts
│ │ │ ├── core.ts
│ │ │ ├── data-utils.ts
│ │ │ ├── export-utils.ts
│ │ │ ├── index.ts
│ │ │ ├── interaction-utils.ts
│ │ │ ├── layer-utils.ts
│ │ │ ├── map-state-updaters.ts
│ │ │ ├── map-state.ts
│ │ │ ├── map-style-updaters.ts
│ │ │ ├── map-style.ts
│ │ │ ├── merger-handler.ts
│ │ │ ├── middleware.ts
│ │ │ ├── provider-state-updaters.ts
│ │ │ ├── provider-state.ts
│ │ │ ├── root.ts
│ │ │ ├── ui-state-updaters.ts
│ │ │ ├── ui-state.ts
│ │ │ ├── vis-state-merger.ts
│ │ │ ├── vis-state-selectors.ts
│ │ │ ├── vis-state-updaters.ts
│ │ │ └── vis-state.ts
│ │ └── tsconfig.production.json
│ ├── schemas/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── dataset-schema.ts
│ │ │ ├── index.ts
│ │ │ ├── map-state-schema.ts
│ │ │ ├── map-style-schema.ts
│ │ │ ├── schema-manager.ts
│ │ │ ├── schema-utils.ts
│ │ │ ├── schema.ts
│ │ │ ├── ui-state-schema.ts
│ │ │ ├── versions.ts
│ │ │ └── vis-state-schema.ts
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── styles/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── base.ts
│ │ │ ├── index.ts
│ │ │ └── media-breakpoints.ts
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── table/
│ │ ├── UPGRADE-data-container.md
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── dataset-utils.ts
│ │ │ ├── gpu-filter-utils.ts
│ │ │ ├── index.ts
│ │ │ ├── kepler-table.ts
│ │ │ └── tileset/
│ │ │ ├── raster-tile-utils.ts
│ │ │ ├── tileset-utils.ts
│ │ │ ├── vector-tile-utils.spec.ts
│ │ │ └── vector-tile-utils.ts
│ │ └── tsconfig.production.json
│ ├── tasks/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── index.ts
│ │ └── tsconfig.production.json
│ ├── types/
│ │ ├── actions.d.ts
│ │ ├── components.d.ts
│ │ ├── datasets.d.ts
│ │ ├── effects.d.ts
│ │ ├── index.d.ts
│ │ ├── layers.d.ts
│ │ ├── package.json
│ │ ├── reducers.d.ts
│ │ ├── schemas.d.ts
│ │ ├── stac.d.ts
│ │ └── types.d.ts
│ └── utils/
│ ├── babel.config.js
│ ├── map-utils.spec.js
│ ├── package.json
│ ├── src/
│ │ ├── aggregation.ts
│ │ ├── application-config-types.ts
│ │ ├── application-config.ts
│ │ ├── arrow-data-container.ts
│ │ ├── browser-utils.ts
│ │ ├── color-utils.ts
│ │ ├── data-container-interface.ts
│ │ ├── data-container-utils.ts
│ │ ├── data-row.ts
│ │ ├── data-scale-utils.ts
│ │ ├── data-utils.ts
│ │ ├── dataset-utils.ts
│ │ ├── dom-to-image.ts
│ │ ├── dom-utils.ts
│ │ ├── effect-utils.ts
│ │ ├── export-map-html.ts
│ │ ├── export-utils.ts
│ │ ├── filter-utils.ts
│ │ ├── format.ts
│ │ ├── gl-utils.ts
│ │ ├── index.ts
│ │ ├── indexed-data-container.ts
│ │ ├── locale-utils.ts
│ │ ├── map-info-utils.ts
│ │ ├── map-style-utils/
│ │ │ ├── mapbox-gl-style-editor.ts
│ │ │ └── mapbox-utils.ts
│ │ ├── map-utils.ts
│ │ ├── mapbox-utils.ts
│ │ ├── noop.ts
│ │ ├── notifications-utils.ts
│ │ ├── observe-dimensions.ts
│ │ ├── plot.ts
│ │ ├── position-utils.ts
│ │ ├── projection-utils.ts
│ │ ├── quick-insertion-sort.ts
│ │ ├── row-data-container.ts
│ │ ├── searcher-utils.ts
│ │ ├── split-map-utils.ts
│ │ ├── strings.ts
│ │ ├── time.ts
│ │ ├── types.ts
│ │ └── utils.ts
│ └── tsconfig.production.json
├── test/
│ ├── browser/
│ │ ├── components/
│ │ │ ├── bottom-widget-test.js
│ │ │ ├── common/
│ │ │ │ ├── animation-control-test.js
│ │ │ │ ├── color-legend-test.js
│ │ │ │ ├── column-stats-chart-test.js
│ │ │ │ ├── file-uploader-test.js
│ │ │ │ ├── index.js
│ │ │ │ ├── item-selector-test.js
│ │ │ │ ├── range-plot-test.js
│ │ │ │ └── range-slider-test.js
│ │ │ ├── container-test.js
│ │ │ ├── editor/
│ │ │ │ ├── feature-action-panel-test.js
│ │ │ │ └── index.js
│ │ │ ├── effects/
│ │ │ │ ├── effect-configurator-test.js
│ │ │ │ ├── effect-manager-test.js
│ │ │ │ ├── effect-time-configurator-test.js
│ │ │ │ └── index.js
│ │ │ ├── filters/
│ │ │ │ ├── index.js
│ │ │ │ └── time-widget-test.js
│ │ │ ├── geocoder-panel-test.js
│ │ │ ├── helpers.js
│ │ │ ├── hooks/
│ │ │ │ ├── use-dnd-effects.spec.js
│ │ │ │ ├── use-dnd-layers.spec.js
│ │ │ │ └── use-legend-position.spec.js
│ │ │ ├── index.js
│ │ │ ├── injector-test.js
│ │ │ ├── kepler-gl-test.js
│ │ │ ├── map/
│ │ │ │ ├── index.js
│ │ │ │ ├── map-control-test.js
│ │ │ │ ├── map-legend-test.js
│ │ │ │ └── map-popover-test.js
│ │ │ ├── map-container-test.js
│ │ │ ├── modals/
│ │ │ │ ├── data-table-modal-test.js
│ │ │ │ ├── export-image-modal-test.js
│ │ │ │ ├── index.js
│ │ │ │ └── load-data-modal-test.js
│ │ │ ├── notifications/
│ │ │ │ ├── index.js
│ │ │ │ ├── notification-item.spec.js
│ │ │ │ └── notification-panel-test.js
│ │ │ ├── plot-container-test.js
│ │ │ ├── side-panel/
│ │ │ │ ├── channel-by-value-selctor-test.js
│ │ │ │ ├── color-selector-test.js
│ │ │ │ ├── filter-manager-test.js
│ │ │ │ ├── index.js
│ │ │ │ ├── layer-configurator-test.js
│ │ │ │ ├── layer-list.spec.js
│ │ │ │ ├── layer-manager-test.js
│ │ │ │ ├── layer-panel-header-test.js
│ │ │ │ ├── save-export-dropdown-test.js
│ │ │ │ └── side-panel-test.js
│ │ │ └── tooltip-config-test.js
│ │ ├── file-handler-test.js
│ │ ├── index.js
│ │ ├── layer-tests/
│ │ │ ├── arc-layer-specs.js
│ │ │ ├── base-layer-specs.js
│ │ │ ├── cluster-layer-specs.js
│ │ │ ├── geojson-layer-specs.js
│ │ │ ├── grid-layer-specs.js
│ │ │ ├── h3-hexagon-layer-specs.js
│ │ │ ├── heatmap-layer-specs.js
│ │ │ ├── hexagon-layer-specs.js
│ │ │ ├── icon-layer-specs.js
│ │ │ ├── index.js
│ │ │ ├── line-layer-specs.js
│ │ │ ├── point-layer-specs.js
│ │ │ ├── raster-tile-layer-specs.js
│ │ │ ├── s2-geometry-layer-specs.js
│ │ │ ├── scenegraph-layer-specs.js
│ │ │ ├── trip-layer-specs.js
│ │ │ └── wms-layer-specs.js
│ │ └── reducers/
│ │ └── index.js
│ ├── browser-debug.js
│ ├── browser-drive.js
│ ├── browser-headless/
│ │ ├── component/
│ │ │ └── map-container-test.js
│ │ └── index.js
│ ├── browser-headless.js
│ ├── fixtures/
│ │ ├── config_v0_arc_cluster_point.js
│ │ ├── config_v0_geojson_point.js
│ │ ├── config_v0_geojson_poly_fill_ele.js
│ │ ├── config_v0_geojson_polygon.js
│ │ ├── geojson-style.js
│ │ ├── geojson.js
│ │ ├── points-with-polygon-filter-map.js
│ │ ├── polygon-filter-map.js
│ │ ├── polygon.js
│ │ ├── row-object.js
│ │ ├── s2-geometry.js
│ │ ├── state-saved-v0.js
│ │ ├── state-saved-v1-1.js
│ │ ├── state-saved-v1-2.js
│ │ ├── state-saved-v1-3.js
│ │ ├── state-saved-v1-4.js
│ │ ├── state-saved-v1-5.js
│ │ ├── state-saved-v1-6.js
│ │ ├── state-saved-v1-7.js
│ │ ├── synced-filter-with-trip-layer.js
│ │ ├── test-arc-data.js
│ │ ├── test-csv-data.js
│ │ ├── test-csv-object.js
│ │ ├── test-hex-id-data.js
│ │ ├── test-layer-data.js
│ │ ├── test-trip-csv-data.js
│ │ ├── test-trip-data.js
│ │ ├── tile-metadata.ts
│ │ └── trip-geojson.js
│ ├── helpers/
│ │ ├── comparison-utils.js
│ │ ├── component-jest-utils.js
│ │ ├── component-utils.js
│ │ ├── layer-utils.js
│ │ ├── mock-map-styles.js
│ │ ├── mock-provider.js
│ │ ├── mock-state-utils.js
│ │ ├── mock-state.js
│ │ ├── raw-states.js
│ │ ├── table-utils.js
│ │ └── utils.js
│ ├── js-dom.js
│ ├── node/
│ │ ├── index.js
│ │ ├── processors/
│ │ │ ├── file-handler-fixtures.js
│ │ │ ├── file-handler-test.js
│ │ │ └── index.js
│ │ ├── reducers/
│ │ │ ├── composer-state-test.js
│ │ │ ├── index.js
│ │ │ ├── map-state-test.js
│ │ │ ├── map-style-test.js
│ │ │ ├── provider-state-test.js
│ │ │ ├── root-test.js
│ │ │ ├── ui-state-test.js
│ │ │ ├── vis-state-merger-combine-configs-test.spec.js
│ │ │ ├── vis-state-merger-test.js
│ │ │ └── vis-state-test.js
│ │ ├── schemas/
│ │ │ ├── dataset-schema-test.js
│ │ │ ├── index.js
│ │ │ ├── map-state-schema-test.js
│ │ │ ├── map-style-schema-test.js
│ │ │ ├── schema-conversion-test.js
│ │ │ └── vis-state-schema-test.js
│ │ └── utils/
│ │ ├── aggregation-test.js
│ │ ├── color-util-test.js
│ │ ├── composer-helpers-test.js
│ │ ├── data-container-test.js
│ │ ├── data-processor-test.js
│ │ ├── data-scale-utils-test.js
│ │ ├── data-utils-test.js
│ │ ├── dataset-utils-test.js
│ │ ├── dom-to-image.js
│ │ ├── duckdb-utils-test.js
│ │ ├── editor-utils-test.js
│ │ ├── effect-utils-test.js
│ │ ├── export-utils-test.js
│ │ ├── filter-utils-test.js
│ │ ├── gpu-filter-utils-test.js
│ │ ├── index.js
│ │ ├── interaction-utils-test.js
│ │ ├── kepler-gl-utils-test.js
│ │ ├── kepler-table-test.js
│ │ ├── kepler-table-utils-test.js
│ │ ├── layer-utils-test.js
│ │ ├── map-info-utils-test.js
│ │ ├── mapbox-gl-style-editor-test.js
│ │ ├── mapbox-utils-test.js
│ │ ├── notifications-utils-test.js
│ │ ├── plot-test.js
│ │ ├── s2-utils-test.js
│ │ ├── timeline-test.js
│ │ └── util-test.js
│ ├── node.js
│ ├── setup-browser-env.js
│ └── webpack.config.js
├── tsconfig.json
├── tsconfig.production.json
├── webpack/
│ ├── build_types.js
│ ├── bundle.js
│ ├── shared-webpack-configuration.js
│ └── umd.js
├── website/
│ ├── .babelrc
│ ├── .yarnrc.yml
│ ├── README.md
│ ├── esbuild.config.mjs
│ ├── package.json
│ ├── src/
│ │ ├── README.md
│ │ ├── components/
│ │ │ ├── app.js
│ │ │ ├── common/
│ │ │ │ ├── card.js
│ │ │ │ ├── carousel.js
│ │ │ │ ├── section.js
│ │ │ │ ├── slideshow.js
│ │ │ │ ├── staggered-scroll-animation.js
│ │ │ │ ├── styled-components.js
│ │ │ │ ├── styles.js
│ │ │ │ └── swipeable.js
│ │ │ ├── desktop.js
│ │ │ ├── ecosystems.js
│ │ │ ├── examples.js
│ │ │ ├── features.js
│ │ │ ├── footer.js
│ │ │ ├── foursquare-logo.js
│ │ │ ├── header.js
│ │ │ ├── hero.js
│ │ │ ├── home.js
│ │ │ ├── mapbox-logo.js
│ │ │ ├── netlify-logo.js
│ │ │ ├── policy.js
│ │ │ ├── showcase.js
│ │ │ ├── studio.js
│ │ │ ├── tutorials.js
│ │ │ └── walkthrough.js
│ │ ├── constants.js
│ │ ├── content.js
│ │ ├── main.js
│ │ ├── reducers/
│ │ │ ├── analytics.js
│ │ │ ├── app.js
│ │ │ └── index.js
│ │ ├── routes.js
│ │ ├── static/
│ │ │ ├── _redirects
│ │ │ └── index.html
│ │ ├── styles.js
│ │ └── utils.js
│ └── webpack.config.js
└── website-gatsby/
├── .eslintignore
├── .gitignore
├── gatsby-browser.js
├── gatsby-config.js
├── gatsby-node.js
├── gatsby-ssr.js
├── package.json
├── src/
│ ├── components/
│ │ ├── app.js
│ │ ├── common/
│ │ │ ├── card.js
│ │ │ ├── carousel.js
│ │ │ ├── section.js
│ │ │ ├── slideshow.js
│ │ │ ├── staggered-scroll-animation.js
│ │ │ ├── styled-components.js
│ │ │ ├── styles.js
│ │ │ └── swipeable.js
│ │ ├── examples.js
│ │ ├── features.js
│ │ ├── footer.js
│ │ ├── header.js
│ │ ├── hero.js
│ │ ├── home.js
│ │ ├── info-panel.jsx
│ │ ├── mapbox-logo.js
│ │ ├── policy.js
│ │ ├── showcase.js
│ │ ├── tutorials.js
│ │ └── walkthrough.js
│ ├── constants.js
│ ├── content.js
│ ├── state/
│ │ ├── analytics.js
│ │ ├── app.js
│ │ ├── index.js
│ │ ├── redux-wrapper.js
│ │ └── test.js
│ ├── styles.js
│ └── utils.js
├── static/
│ └── CNAME
└── templates/
├── index.jsx
└── style.css
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
dist/
.venv/
.conda/
node_modules/
__pycache__/
build/
================================================
FILE: .editorconfig
================================================
# EditorConfig: http://editorconfig.org
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
================================================
FILE: .eslintrc.js
================================================
module.exports = {
env: {
es6: true,
browser: true,
node: true,
'jest/globals': true
},
globals: {
page: true,
browser: true,
context: true,
jestPuppeteer: true
},
parser: '@typescript-eslint/parser',
extends: ['eslint:recommended', 'plugin:prettier/recommended', 'plugin:react-hooks/recommended'],
plugins: ['babel', 'prettier', 'react', 'enzyme-deprecation'],
rules: {
'valid-jsdoc': 0,
'no-var': 0,
'max-len': 0,
'react/no-did-mount-set-state': 0,
'react/no-multi-comp': 0,
'react/sort-comp': 0,
'no-use-before-define': 'off',
'prefer-spread': 1,
'prefer-template': 1,
'prettier/prettier': 'error',
'quote-props': 0,
'spaced-comment': 1,
'max-params': 0,
'no-multiple-empty-lines': 1,
'no-process-env': 0,
'no-inline-comments': 0,
'no-invalid-this': 0,
'no-unused-expressions': 0,
'no-undef': 0,
camelcase: 0,
'consistent-return': 0,
'comma-dangle': 1,
'enzyme-deprecation/no-shallow': 2,
'enzyme-deprecation/no-mount': 2,
'no-constant-condition': ['error', {checkLoops: false}],
'no-unused-vars': ['warn', {argsIgnorePattern: '^_', varsIgnorePattern: '^_'}],
'@typescript-eslint/no-unused-vars': [
'warn',
{argsIgnorePattern: '^_', varsIgnorePattern: '^_'}
]
},
overrides: [
{
files: ['*.ts', '*.tsx'],
parser: '@typescript-eslint/parser',
// Plugins like @typescript-eslint provide different ruleset configs that can be extended
plugins: ['@typescript-eslint'],
extends: [
'plugin:@typescript-eslint/eslint-recommended',
'plugin:@typescript-eslint/recommended',
// This doesn't enable extra rules, but rather just helps with TS settings
'plugin:import/typescript'
],
rules: {
// TODO: Replace any declarations and enable
'@typescript-eslint/no-explicit-any': 'off',
// TODO: Enable this rule and provide description or fix the errors
'@typescript-eslint/ban-ts-comment': 'off',
'@typescript-eslint/no-var-requires': 'off'
}
},
{
files: ['src/**/src/**/*.spec.js'],
plugins: ['jest'],
extends: ['plugin:jest/recommended'],
rules: {'jest/prefer-expect-assertions': 'off'}
}
],
settings: {
react: {
version: 'detect'
},
// Settings related to eslint-plugin-import
'import/resolver': {
// Settings for eslint-import-resolver-typescript which resolves
// typescript aliases based on tsconfig.json "paths"
typescript: {
project: './tsconfig.json'
}
}
}
};
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report--jupyter-widget.md
================================================
---
name: 'Bug report: Jupyter widget'
about: Report Bug for keplergl Jupyter widget
title: "[Bug][Jupyter Widget]"
labels: jupyter
assignees: heshan0131
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. load kepler
2. Add data & config
3. Export map
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Environment (please complete the following information):**
- Python version: [e.g. python2, python3]
- keplergl Widget version [e.g. 0.1.0]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: "[Bug]"
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/feature-request--jupyter-widget.md
================================================
---
name: 'Feature request: Jupyter widget'
about: Suggest an idea for kepler.gl Jupyter Widget
title: ''
labels: jupyter
assignees: heshan0131
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for kepler.gl
title: ''
labels: ''
assignees: heshan0131
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/SECURITY.md
================================================
# Security Policy
## Supported Versions
Security updates are applied only to the latest release.
## Reporting a Vulnerability
If you have discovered a security vulnerability in this project, please report it privately. **Do not disclose it as a public issue.** This gives us time to work with you to fix the issue before public exposure, reducing the chance that the exploit will be used before a patch is released.
Please disclose it at [security advisory](https://github.com/keplergl/kepler.gl/security/advisories/new).
This project is maintained by a team of volunteers on a reasonable-effort basis. As such, please give us at least 90 days to work on a fix before public exposure.
## Escalation
If you do not receive an acknowledgement of your report within 6 business days, or if you cannot find a private security contact for the project, you may escalate to the OpenJS Foundation CNA at `security@lists.openjsf.org`.
If the project acknowledges your report but does not provide any further response or engagement within 14 days, escalation is also appropriate.
================================================
FILE: .github/workflows/build-publish-pypi.yml
================================================
name: Build and Publish KeplerGL Python Package
on:
push:
workflow_dispatch:
inputs:
prerelease:
description: 'Publish as prerelease (uncheck for official release)'
required: false
type: boolean
default: true
jobs:
build_and_publish:
runs-on: ubuntu-latest
permissions:
id-token: write
steps:
- uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v4
- name: Set up Python 3.11
run: uv python install 3.11
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Python dependencies
working-directory: bindings/python
run: uv sync --dev
- name: Install npm dependencies
working-directory: bindings/python
run: npm ci
- name: Build TypeScript
working-directory: bindings/python
env:
MapboxAccessTokenJupyter: ${{ secrets.mapbox_jupyter_token }}
run: npm run build
- name: Type check
working-directory: bindings/python
run: npm run typecheck
- name: Build Python package
working-directory: bindings/python
run: uv build
- name: Test KeplerGL
working-directory: bindings/python
run: |
uv pip install dist/*.whl
uv run pytest
- name: Create artifact
uses: actions/upload-artifact@v4
with:
name: keplergl-pypi
path: bindings/python/dist/
- name: Check version format
if: github.event_name == 'workflow_dispatch'
working-directory: bindings/python
run: |
VERSION=$(grep -Po '(?<=^version = ")[^"]+' pyproject.toml)
echo "Package version: $VERSION"
# Check if version contains prerelease indicators (a, b, rc, dev)
if [[ "$VERSION" =~ (a|b|rc|dev)[0-9]+ ]]; then
IS_PRERELEASE_VERSION=true
else
IS_PRERELEASE_VERSION=false
fi
echo "Is prerelease version: $IS_PRERELEASE_VERSION"
echo "Publishing as prerelease: ${{ inputs.prerelease }}"
# Fail if mismatch between version format and publish type
if [[ "${{ inputs.prerelease }}" == "true" && "$IS_PRERELEASE_VERSION" == "false" ]]; then
echo "::error::Publishing as prerelease but version '$VERSION' does not have a prerelease suffix (e.g., 0.4.0a1, 0.4.0b1, 0.4.0rc1)"
exit 1
fi
if [[ "${{ inputs.prerelease }}" == "false" && "$IS_PRERELEASE_VERSION" == "true" ]]; then
echo "::error::Cannot publish official release with prerelease version '$VERSION'. Please update the version in pyproject.toml."
exit 1
fi
- name: Publish to PyPI
if: github.event_name == 'workflow_dispatch'
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: bindings/python/dist/
================================================
FILE: .github/workflows/npmpublish.yml
================================================
name: Node.js Package
on:
release:
types: [created]
jobs:
publish-npm:
runs-on: ubuntu-latest
env:
NPM_AUTH_TOKEN: ${{secrets.npm_token}}
steps:
- uses: actions/checkout@v4
# use Volta to manage yarn/node versions
- uses: volta-cli/action@v4
- run: yarn install
- run: yarn bootstrap
- run: npm i -g npm@8.19.2
- name: Login to NPM
run: npm config set "//registry.npmjs.org/:_authToken=${NPM_AUTH_TOKEN}"
- name: Publish
run: npm publish --workspaces --access public
================================================
FILE: .github/workflows/test.yml
================================================
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
name: Node.js CI
on:
push:
branches: [master]
pull_request:
branches: [master]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x]
steps:
- uses: actions/checkout@v4
# use Volta to manage yarn/node versions
- uses: volta-cli/action@v4
- name: Install XVFB
run: sudo apt-get install xvfb
- name: Install Dependencies
run: yarn install && yarn bootstrap
# - name: Install Puppeteer
# run: yarn dlx "puppeteer@23.1.0"
- name: Lint
run: yarn lint
- name: Test
run: xvfb-run --auto-servernum yarn cover
- name: Coveralls
uses: coverallsapp/github-action@master
continue-on-error: true
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .gitignore
================================================
node_modules/
*/**/node_modules/
coverage/
*-coverage/
.nyc_output/
dist/
build/
umd/
*/**/dist/
__pycache__/
.pytest_cache/
.ipynb_checkpoints/
bindings/python/keplergl/static/
typedoc/
examples/**/yarn.lock
!examples/demo-app/yarn.lock
yarn-error.log
*/**/package-lock.json
package-lock.json
.DS_Store
.idea
.vscode/
.venv/
/bundle*.js
/favicon.png
/index.html
npm-debug.log
.history/
.yarn
.npmrc
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
# Local Netlify folder
.netlify
meta.json
.env
================================================
FILE: .nvmrc
================================================
18.18.2
================================================
FILE: .prettierrc.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
module.exports = {
bracketSpacing: false,
printWidth: 100,
semi: true,
singleQuote: true,
trailingComma: 'none',
arrowParens: 'avoid'
};
================================================
FILE: .stylelintrc
================================================
{
"processors": [
"stylelint-processor-styled-components"
],
"extends": [
"stylelint-config-recommended",
"stylelint-config-styled-components"
],
"rules": {
"no-descending-specificity": null,
"selector-pseudo-class-no-unknowny": null
}
}
================================================
FILE: .yarnrc.yml
================================================
# https://yarnpkg.com/configuration/yarnrc
nodeLinker: node-modules
# Define the registry to use when fetching packages.
npmRegistryServer: 'https://registry.yarnpkg.com'
================================================
FILE: CHANGELOG.md
================================================
# Change Log
All notable changes to kepler.gl will be documented in this file.
<!--
Each version should:
List its release date in the above format.
Group changes to describe their impact on the project, as follows:
Added for new features.
Changed for changes in existing functionality.
Deprecated for once-stable features removed in upcoming releases.
Removed for deprecated features removed in this release.
Fixed for any bug fixes.
Security to invite users to upgrade in case of vulnerabilities.
Ref: http://keepachangelog.com/en/0.3.0/
-->
## [3.2.6] - Mar 16 2026
- b5ffed55b feat: add extra map export resolutions (#3357)
- faa000c6c feat(kepler-jupyter): version 0.4.0rc1 (#3345)
- efb072eb5 fix: colors not working in trip layer of TABLE mode (#3347)
- ca30df0e1 fix: create trip layer from duckdb table (#3344)
- cc33b0c8f feat: add support to DECIMAL column type (#3341)
- 40ce323a8 docs(localization): add translation guide for contributors (#3335)
- 35ab765d4 fix: tileset loading indicator improvements (#3331)
- cec11f3cb fix: add security warning about Mapbox token in HTML exports (#3139) (#3330)
- e2f672cdc fix: replace broken vis.academy link with docs.kepler.gl (#3309)
- 8c5030c3e fix: export zoom icon (#3308)
- 8cf4274bf fix: layer configurator icon update (#3306)
- 192f0fd2b feat: getDuckDBColumnTypes improvements (#3304)
- 3762a2b36 feat: make tile loading indicator more explicit (#3305)
- e5b7df170 rollback change, and truncate tooltip (#3300)
- cbb3204cf feat: Implement WKT validation in data-type.ts (#3298)
- e705fc8aa fix: name new point layer using label if provided (follow-up) (#3297)
- 4bdf8f4ff fix: name new point layer using label if provided
- cf76bba68 fix: hide Kepler editor tooltip “top-left jump” on invalid hover coords (#3294)
- 2ba9f6e22 fix: Clamp legend height if it exceeds available space (#3276)
- 562cb1ba8 kepler.gl-jupyter: codespell (#3273)
## [3.2.5] - Dec 24 2025
- 81f490d94 fix: trigger a redraw from icon layer once the icons are loaded. (#3269)
- 26e4a17d4 fix(ai-assistant): clear LLM history on restart chat (#3262)
- 2d985982a fix: image export for non-webpack bundlers (#3266)
## [3.2.4] - Dec 9 2025
- 82630dee3 fix: ensure icon layer render with the latest geometry (#3259)
- 422c1b347 fix: Avoid Monaco AMD bundle when importing `@kepler.gl/duckdb` (#3255)
## [3.2.3] - Nov 28 2025
- 2288bc324 fix: Allow passing arrow tables to ArrowDataContainer (#3247)
- a0a4eefc1 fix: Yarn start failed (#3249)
## [3.2.2] - Nov 25 2025
- f66ab3c61 fix: Allow passing arrow tables to ArrowDataContainer (#3242)
- e2efa50dd fix: copy geometry when geometry is of binary format (#3236)
## [3.2.1] - Nov 3 2025
- d2b130f95 fix: detect h3 column in arrow (#3230)
- 2aa200913 fix: interaction panel causes layout shift (#3224)
- 2e24bd207 feat: extend bigInt casting to support UBIGINT HUGEINT UHUGEINT in duckdb (#3227)
- 79d745ae2 [fix] fix for wkb/wkt saved in DuckDB as varchar (#3208)
- 24529655d fix: fixes to channel by value (#3216)
- f211ccd0a [Bug]: Fix scrollTop reest when scrolling horizontally in data table (#3206)
- b6aee95f3 docs: add security escalation policy (#3210)
- a6e9cb998 feat: ai assistant support llm proxy server (#3188)
- 2005927bd [fix] icon layer - render default icon in case svgIconUrl loading fails (#3204)
- 64ec955ae [chore] Add missing release notes for 3.2 (#3200)
- 70a129c4e [feat] vector tile layer - add feature uid selector (#3203)
- 2b8af8260 [fix] vector tile layer - use highlightedFeatureId for hover (#3202)
- 32fb77f42 [chore] bump demo-app example to kepler.gl 3.2 (#3201)
- 96dcef6b9 [fix] fixes for legend (#3199)
- 26dd6e832 [website] fix mobile layout (#3197)
- 7be817789 [website] Add OpenJS Foundation copyright and logo (#3196)
## [3.2.0] - Aug 21 2025
- 3b0be2dda [chore] docs update (#3192)
- 9c132de28 [chore] docs update (#3180)
- d4d8d184b [chore] raster tile form - add link to docs (#3183)
- f91564fb9 [fix] save raster layer config with layer, don't rely on app config (#3184)
- 420bbf2ad [feat] add support for boolean filter in vector tiles (#3190)
- e4b64a080 [chore] Replace Studio section with Desktop section (#3189)
- 751148111 [chore] Fix and update examples to v3.1.10 (#3182)
## [3.1.10] - Aug 14 2025
- 09297acc0 [improvement] optimize speed of getCategoricalColorMap (#3178)
- 1545fafe5 [chore] Update react-modal types version (#3173)
- fc1b91fa9 [chore] Create props interface for LinkRenderer Component (#3172)
- 5f664c3a5 [chore] pass through logoComponent to PlotContainer (#3176)
- 46cc44109 [fix] fix for a crash in getBins when numeric strings are treated as numbers (#3175)
- 0850ef2eb [chore] Update the Screenshot Image in Readme (#3171)
- f2001983a [feat] export duckdb column logic (#3170)
- 3df1c4ddf [chore] expose showDeleteDataset prop (#3166)
- 2a666ae0c [chore] export dnd constants
## [3.1.9] - July 28 2025
- 0d6d5fd1a [chore] raster tile - hide server settings by default (#3163)
- 7551f5d7d [fix] DuckDB mode: space in column name breaks file import (#3153) (#3156)
- 047334712 [fix] fit to bounds - fix initial basemap and deck projections mismatch (#3155)
- d43e8bbff [chore] replace ai-assistant model config file with ts for npm availability (#3154)
- 1a93a2b99 [chore] raster tile layer tests (#3152)
- 343b554db [feat] WMS layer improvements (#3151)
- c1d2b8616 [fix] button spinner fix (#3150)
- a05b3cf6d [fix] WMS layer fixes 2 (#3149)
- 1a47e08a5 [fix] WMS layer fixes 1 (#3148)
- 272fd1ae7 [Feat] WMS Layer - development (#3092)
- 9f656e06c [Docs] Add tutorial Spatial Data Analysis with Kepler.gl AI Assistant (part1) (#3126)
- ca628b523 [Chore] rewrite plot container for perf improvement (#3133)
- 49f4c3de2 [chore] Update old imports (#3131)
- 3b6e9049a [fix] improvements for raster tile layer (#3124)
- 4237b0a0e [chore] migrate custom-palette from react-sortable-hoc to dnd-kit (#3128)
- 49fbf8faa [fix] aggregation layers fixes for custom color scale (#3129)
- edf1f1ddd [fix] spatial join ai instruction (#3127)
## [3.1.8] - May 26 2025
- 4fd570c3e [example] Kepler.gl getting started example with Vite (#3123)
- f57173d35 [fix] DuckDB - cast BigInts to Double by default (#3120)
- fd4702c4f [perf] disable strokes by default for polygons in geojson layer (#3118)
- 1542bb6f7 [Feat] Add OSM road tool to support point analysis on road networks (#3117)
- 9da33316c [feat] Generate "idea" buttons from LLM (#3115)
- 330030185 [Fix] AI Connection to Ollama failed (#3113)
- be6ee823a [Bug] fix update selected feature bbox (#3110)
- 0dcacc66e [fix] Custom picker fix when called during initialization (#3107)
- 4fc1344a1 [Chore] style tweak (#3109)
- 3769aaf74 [Chore] Better handle add data to map error and loading indicator (#3106)
## [3.1.7] - May 14 2025
- 014059b97 [fix] fixes for raster tile layer (#3102)
- 518c515d1 [feat] loading indicator improvements for tiled layers (#3097)
- e290f281e [fix] fix for getFieldsFromTile regression (#3099)
- 7087ffe15 [fix] fix tooltip crashing for trip layer (#3103)
- a231ebfc1 [fix] fix for image export with effects (#3105)
- da38e26b9 [chore] Update Comments in actions (#3098)
- 21aac1c85 [fix] fixes for custom input (#3095)
- 271b8cc98 [fix] fix types publishing for table module (#3096)
- 3d3bb9b54 [chore] add cdnUrl option to application config (#3093)
- 9cdf73ea4 [Bug] remove layer item z-index (#3091)
## [3.1.6] - May 8 2025
- 33203a6de [fix] fix loading indicotor not hidden regression (#3088)
- 913176bb6 [bug] fix lodash imports regression (#3089)
## [3.1.5] - May 8 2025
- 223d14b60 [chore] ts fixes
- 3570ac429 [feat] Raster Tile Layer - development in progress (#3048)
- 07e5beae2 [chore] import add tileset dialog styling (#3085)
- 6568c0c94 [Feat] Add Spatial Data Analysis tools to AI Assistants (#3057)
- fd08fa1a9 [Chore] export more kepler-gl prop selector (#3081)
## [3.1.4] - May 5 2025
- 03b8ea0a9 [Chore] Use clonedeep in interaction config load (#3080)
- a6104eafe [Chore] drop lodash per-method packages in favor of the main lodash (#3065)
- abb3fd473 [feat] h3 layer from decimal format (#3066)
- 191f66161 [fix] fix for exported maps. Change react-markdown to markdown-to-jsx (#3077)
- 3c83e74b3 [chore] Added types in Action (#3075)
- 8baddbbaf [Chore] export bottom widget field selector (#3078)
- afc21c263 [chore] Fix TypeScript Errors (#3076)
- 822cd0e32 [Style] align icon styles, use lucid icons (#3073)
## [3.1.3] - May 2 2025
- d5ef5f713 [Chore] remove dnd-kit from dependency of utils and reducer, remove use of withState in dnd context (#3067)
## [3.1.2] - May 1 2025
- fb3615b90 [chore] extra duckdb utils export (#3063)
- a0d14b770 [fix] updateVisDataUpdater early exit (#3058)
- 111b3180d [chore] pass props directly to Draggable legend, not withState (#3055)
- 6bb6c98a1 [fix] Legend positioning fixes (#3052)
- 7d601f110 [fix] Only open either the mapDraw dropdown or locale dropdown (#3056)
- 52a2d2a2b [CHORE] disable auto lyaer creation based on color by int column (#3049)
- e935ef51d [chore] extra exports from duckdb module (#3050)
- 864dbe5c6 [Chore] Fix more style components warnings (#3047)
- 9de30e2ba [Chore] Export duckdub utils, allow cols in validate dataset (#3042)
- 6cc1ee4ef [Bug] Fix styled-components warnings for passing props to Dom (#3039)
- cb5c14f81 [Bug] Add mapbox-gl dep to prevent Failed to resolve import in vite (#3036)
- 7c3365fcf [chore] Get started minimal example with esbuild (#3028)
- 224975a25 [chore] pass duckDB adapter via application config (#3023)
## [3.1.1] - March 11 2025
- e271c8f8c [fix] fix for potential freeze during add data pipeline (#3015)
- 9eef01c48 [fix] make onFilteredItemsChange callback optional (#3016)
- 7107e4177 [fix] fixes for vector-tile layer (#3013)
- b4b979d59 [fix] schema panel displays temp table (#3014)
- ed2b5f322 [chore] fix react deprecation warnings (#3011)
- ba75087a1 [fix] DuckDB: update schema after running a query (#3009)
- b57b1ff9a [chore] update umd example to latest stable release (#3010)
- 9762dc379 [feat] DuckDb plugin: drag and drop file directly as table (#2952)
- 8e737e8cc [chore] changes to webpack.config path separators (#2623)
- 8fbb3b0b4 [fix] Fix Save map action for FSQ provider (overwrite logic) (#3006)
- df829fbe9 [fix] fix for geocoder coordinates (#3002)
- 44acecf2a [fix] adjust getZoomFactor for icon layer (#3004)
- 69ea2a176 [fix] fix for Icon layer UI (#3003)
- 702b49e3f [fix] Fix for More than one copy of react-palm was loaded error message (#3007)
- a67a7fcab [Bug] make sure the RangeBrush updates on slider range changes (#2047)
- 631f7a304 [fix] Update geojson-utils.ts to support GeometryCollections (#2059)
- ce867606f [chore] Bump express from 4.19.2 to 4.21.0 (#2655)
- c9dd05f32 [chore] Bump nanoid from 3.3.7 to 3.3.8 in /bindings/kepler.gl-jupyter/js (#2906)
- b2e24345c [chore] Bump fast-xml-parser from 4.4.0 to 4.5.0 (#2688)
- 976b079b3 [chore] Bump lodash from 4.17.19 to 4.17.21 in /src/deckgl-layers (#2858)
- 4074b320f [chore] Bump esbuild from 0.23.1 to 0.25.0 in /examples/demo-app (#2994)
- 57573d344 [chore] Bump elliptic from 6.6.0 to 6.6.1 (#2997)
- c5dbd571d [chore] Fix lint issues displayed on GitHub's File Changes page (#3001)
- b98a39def [fix] Transform binary buffers to hex wkb when saved to json/hmtl maps (#2998)
- 221b243c2 [feat] improvements to duckDB column type handling (#2970)
- d30a95bcd [fix] improvements for layer type change logic (#2995)
- 547ffeb0c [fix] arrow text labels from non-string source vectors (#2990)
- 7e2e619e2 [chore] updates to website (#2992)
- 7e2db2b7d [chore] Improved Props and Gettings Started Docs (#2993)
- 1216d235b [fix] export geoarrow to CSV as geojson (#2988)
- 2c525ed8e [fix] restore suport for string wkb; save binary wkb as hex wkb (#2982)
- e149384df [chore] update to hubble.gl 1.4 (#2987)
- c39778ce9 [fix] AI Assistant sends messages to 127.0.0.1 instead of remote Ollama URL (#2985)
- 81780f5ab [chore] Update README.md (#2981)
- f8fbf2461 [fix] heatmap renders nothing with black color or duplicate color (#2978)
- 11350eecb [chore] check for required env variables in demo-app and output a warning (#2977)
- 0325ef6ee [fix] FSQ storage provider - use prompt instead of auto login after logout (#2975)
- bbe51b980 [fix] fix for point column suggestion not working (#2974)
- fa1cc4f1e [chore] Rename ".env.template " to ".env.template" to prevent git clone fail (#2976)
- 47cd3da81 [keplergl-jupyter] Release v0.3.7 #2969
- 7bbe0b839 [Jupyter][Fix] convert datetimes to str so they can convert to json (#2968)
- 5367abaee [fix] fix geojson and trip layer crash without data (#2964)
- e1c9f869c [fix] FSQ Storage provider temp fix (#2960)
- 098ee9b42 [fix] fix for minzoom in examples (#2959)
- f7f10379e [chore] update demo-app version (#2958)
- ab17e7565 [chore] update banner mesasge (#2957)
## [3.1.0] - January 29 2025
- 089aa8cf8 [chore] vector tiles refactoring (#2945)
- 405c36e23 [fix] DuckDB: make query result title more reusable (#2956)
- 8033578f2 [docs] update docs for Kepler.gl release 3.1 (#2941)
- b1953cff7 [feat] banner with extra release info (#2955)
- e95c4e5a4 [fix] arrow tables - save timestamps as iso date string (#2953)
- 4aef54a93 [fix] adjust margin for map save modal to show Save button without scrolling (#2954)
- f00b4b88d [chore] testing mp4 embed with gitbook (#2951)
- f292d6181 [Chore] Add DeepSeek in Ai Assistant (#2946)
- c5484e1ae [fix] plumbing for DuckDB plugin support (#2949)
- da9988532 [chore] demo-app bump kepler.gl version (#2944)
## [3.1.0-alpha.7] - January 27 2025
- 7356c5afe [fix] hotfix for arrow saving / loading, without support of binary data (#2943)
- 4031451b0 [feat] duckdb plugin (#2798)
- 029bcc548 [feat] loading indicator (#2936)
- 1a68d1bd2 [Chore] Remove SQL plugin for AI Assistant (#2938)
- 4be4b6987 [Misc] Update demo-app README.md (#2934)
- b38054fa8 [Feat] AI Assistant Query (#2819)
- 4cd912097 [fix] Added 24 limit for maximum zoom (#2635)
- b1bddd5fb [chore] Fixes for using in a vite app (#2898)
- 4d1bfb3d0 [feat] minZoom and maxZoom for examples (#2933)
- 81be74920 [fix] don't auto create point layer from vector tiles (#2932)
## [3.1.0-alpha.6] - January 22 2025
- 803b2f540 [fix] remove dependencies from useEffect (prev componentDidMount in app.tsx) (#2930)
- 57926442f [fix] use saved map config for saved maps instead of zoom in to data (#2929)
- 4af609245 [chore] add dot.env, updates to demo-app build, update gitignore (#2928)
- ce23c7668 [feat] duckdb module updates (#2927)
- fc974d852 [feat] duckdb module placeholder (#2926)
- d1b3c9799 [fix] demo-app resolve to proper node_modules (#2925)
- 594250bc7 [fix] fix demo-app yarn start (#2924)
- 913ba1ce0 [feat] support for table plugin in demo examples and privately stored datasets (#2923)
- 630728190 [fix] fixes for style editor preview and error (#2919)
- d6aa2757e [fix] fix neighbor mode hovering crash in arc/line layers (#2920)
- e2bd71d4e [fix] fix csv table examples for layers (#2921)
- a6e151a0f [fix] vector tile layer fixes (#2911)
## [3.1.0-alpha.5] - January 15 2025
- b117b08ab [fix] fix for exported html maps
## [3.1.0-alpha.4] - January 15 2025
- 933a91a2f [fix] check for geoarrow extension in geojson layer (#2916)
- 0abe9979d [fix] opening multiple examples breaks url (#2915)
- 49e7956e8 [fix] Don't show 0 when description is empty (#2913)
- cb5d4ed42 [fix] fix styled-components version in exported map (#2907)
- b1d243363 [fix] adjust tooltip style (#2910)
- f0c57a869 [fix] fix website commit section
- 2753321c5 [feat] Vector Tile layer fixes (#2899)
- 073c585e4 [Fix] add_data() function failed in keplergl-jupyter
- 6e425972e [feat] mapbox and maplibre simultaneous support (#2897)
- 22f9ba14d [Chore] Fix lint error for Register actions (#2896)
- ccfc2e2ad [fix] Image export legend positioning (#2895)
- cf02a3ca6 [chore] Upgrade styled components to v6 (#2894)
- 4c9ffe827 [fix] Prevent infinite useEffects loop in range-plot (#2892)
- 0b67c5409 [fix] fixed onOptionSelected handler when option is null (#2891)
- 40ba839e3 [fix] Add ellipsis in LayerTypeListItem (#2890)
- d0d31bdfa [fix] Handle selecting geojson polygon with missing properties (#2889)
- 79801bec0 [fix] Tippy tooltips in animation controls (#2888)
- 0ad53723a [feat] Adding setAnimationConfig action (#2887)
- 67b001980 [chore] export TimeFieldFilterProps (#2883)
- 603fde8d1 [fix] Fixed issue when mapstate latitude or langitude are out of bounds (#2882)
- 92c9e6abc [fix] Use floating-ui to deal with closing on click outside (#2886)
- 4bcf55bd6 [Feat] Custom color scale for categorical/ordinal field (#2880)
- 23f603428 [Bug] Prevent dragging legend component outside of container (#2885)
- d549fcd4e [fix] copy map config style (#2878)
- 34444fa54 [fix] check for allBins (#2876)
- 8335ba410 [fix] Custom Color Scale fixes (#2875)
- 141236513 [chore] Add several vis state mergers combineConfigs and improve TS (#2634)
- 9f3f08944 [Chore] Add composedReducerSchema to schema manager (#2633)
- e633177ef [chore] applyFilterConfig action (#2872)
- ceb930e2d [Fix] incorrect multi-dataset filter domain (#2871)
- 00dd00279 [fix] show scale options for Point Count in aggregation layers (#2870)
- a39fcf8c4 [fix] pass strings to color palette inputs (#2873)
- b89b19c6a [chore] Consolidate vis state tests (#2869)
- 77e785713 [feat] Support custom ordinal color scale on string field in layer config (#2868)
- cccc4be2b [feat] Free positioning of the legend (#2874)
- 2d1d8e5f5 [Fix] add_data() function in keplergl-jupyter (#2867)
- 3b46abd34 [feat] add LayerToggleVisibility for single splitMap (#2863)
- b2b6f10c8 [Release] Candidate Kepler-Jupyter v0.3.4 (#2588)
- 3bf006f41 [fix] Remove legend layer groups height capping (#2864)
- f1245d7e5 [chore] ts refactoring (#2861)
- a897715cc [Feat] Add custom color scale for aggregate layers (#2860)
- 6bc594602 [Feat] replaceDataInMap action - save colorsByDataId (#2859)
- be2f04e6d [chore] add fsq color palettes (#2862)
- c7d3777fc [fix] change process to globalThis.process (#2865)
- 5cb8a3431 [chore] Create SECURITY.md (#2845)
## [3.1.0-alpha.3] - December 25 2024
- 2cd7a859c [chore] fix missing dependencies in workspaces (#2856)
## [3.1.0-alpha.2] - December 24 2024
- f9b385a6e [fix] Fixed time filter bug where points located at the borders of the domains were not correctly displayed (#2854)
- 59abc6a19 [fix] fix for custom color scales with tile layer (#2853)
- 3a4bf667f [feat] histogram and point layer fixes (#2852)
- f9c52e538 [feat] color scale histogram (#2851)
- 3e7dc937a [fix] custom palette issues (#2850)
- d55797991 [docs] Replace yarn global add with yarn dlx for puppeteer installation (#2849)
- e106c1927 [feat] Plumbing for vector tile layer (#2839)
- a2abbf72d [fix] fix yarn cover regression (#2846)
- 6925bd429 [docs] update demo-app/README.md (#2847)
- f05b6e37d [chore] Bump nanoid from 3.3.7 to 3.3.8 in /website (#2840)
- 4baa44d9b [chore] Bump nanoid from 3.3.7 to 3.3.8 (#2837)
- b09d7eb95 [Enhancement] support mapbox url protocol (#2693)
- 215383661 [Feat] Redesign color range to use chormajs and d3 color function (#2835)
- bded7af76 [Feat] handle layer color scale by field.domainQuantiles (#2829)
- 5f7c26bd0 [fix] Prevent duplicate legend in line and arc layers (#2830)
- 639c7a5b9 [feat] Apply new legend style (#2831)
- f9c214dd5 [chore] getSelectedFeature (#2832)
- efdf2ea8d [chore] ts fixes (#2827)
- 074d123dd [Feat] Add display format setting for table/tooltip (#2826)
- aec75d819 [Chore] Minor ts refactoring (#2825)
- 1825b6572 [fix] Expand legend (#2824)
- bb6a376e8 [fix] adjust time range filter on value set (#2823)
- cef3faf19 [Feat] add h3 typed column (#2822)
- c5d42ddc9 [fix] Fix multiple field filtering in setFilterUpdater (#2821)
- c4d1cfff0 [FEAT] support domain.domainStops in layer color, render color legend based on zoom (#2815)
- 3a4feac59 [fix] Line layer is not displayed for between hex ids (#2820)
- 89411c820 [fix] Typescript 4.4 fixes (#2816)
- 240289603 [feat] Show selected fields in the tooltip for aggregation layers (#2814)
- 95c6ed14b [chore] Bump elliptic from 6.5.7 to 6.6.1 in /bindings/kepler.gl-jupyter/js (#2818)
- fb3fa7b58 [chore] Bump cross-spawn from 6.0.5 to 6.0.6 in /website (#2817)
- f476a1c4c [chore] Bump elliptic from 6.5.7 to 6.6.0 (#2720)
- c727356f7 [chore] Bump cross-spawn from 6.0.5 to 6.0.6 (#2772)
- 3950d73ab [chore] Fixes in README.md (#2810)
- 786aa36cf [Fix] Don't modify height for with fixed height enabled; Height UI unification (#2804)
- 2178d9057 [fix] show sync layer animations when there is one dataset (#2803)
- 6f35313f7 [chore] timeline refactoring (#2802)
- d50bbc831 [fix] Updated plot when changing cross filters (#2801)
- b4dfa2fce [fix] disable Share Map for FSQ provider (#2808)
- 86b5dda7e [Feat] AI Assistant [2] (#2777)
- 5a0cbca66 [Bug] Fix issue with React StrictMode causing Dataset table to not display (#2683)
- b147db8d5 [chore] Local Development Guide Update (#2806)
- 6223be939 [fix] Foursquare storage provider improvements (#2800)
## [3.1.0-alpha.1] - December 3 2024
- f6b37c6af [fix] fixes for exported maps
- 979c9a5a1 [fix] align upload icon (#2799)
- 6862eb85c [fix] Fix for Try Sample Data (#2796)
- f4f7fd2b4 [fix] fix examples - proper publicPath to include bundle chunks (#2795)
- 7ca7f9178 [chore] prepublishOnly command fixes (#2793)
- 40c6c8b09 [chore] npmpublish fixes - set npm registry manually (#2792)
- f60b94f48 [chore] fix npmpublish action (#2791)
- e77981e13 [chore] fix for package publishing (#2790)
## [3.1.0-alpha.0] - November 26 2024
- 5b4f6537 [feat] create new dataset action (#2778)
- a253cae1 [chore] Update the keplergl processors update (#2776)
- 931e2c6b [fix] Update the path to relative path in utils (#2775)
- ac469c13 [chore] Updated imports for Kepler GL Reducers in docs (#2774)
- 13b469d8 [chore] common-utils module (#2773)
- 6fd4f884 [Feat] Kepler.gl AI Assistant [1] (#2735)
- ab9e2530 [fix] Time Sync fixes and tests (#2771)
- 1689ed68 [fix] Custom color scale fixes (#2770)
- d0c9a3b9 [feat] Support custom breaks in color scale (#2739)
- 3f645002 [fix] restore arc and line layers in non-geoarrow modes (#2732)
- 966ee4c6 [Chore] Custom Initial State and Forward Actions Docs update (#2731)
- e88577de [chore] Docs action page import updates (#2729)
- d783b43c [feat] experimental support for ARROW:extension:point; support for arrrow:wkb for geojson layer (#2716)
- 26687575 [chore] Update Code examples in API Reference Get Started page (#2727)
- 8ea1cabe [fix] Fixed synced filter domain and interval calculation (#2725)
- 695861b2 [Bug] fix yaxis chat doesn't update (#2724)
- 8c37afaa [fix] time sync bugfixes (#2723)
- 4c2a6b3c [Improvement] Improved radius legend number formatting (#2726)
- c9658214 [Doc] Improve keplergl-jupyter documentation (#2697)
- 934f8e89 [feat] Improve timeline sync filer UI (#2722)
- d6f68379 [fix] Time Sync bugfixes (#2721)
- 40f82127 [feat] Sync filter with layer timeline (#2718)
- 0b6f320a [Enhancement] Synced filter small tuneup to synced filter panel (#2715)
- caf6e485 [fix] filter fields based on timestamp (#2714)
- c17dacf3 [feat] Layer animation (#2713)
- 0507bd60 [faat] deckgl-arrow-layers module (#2680)
- 8e4d723b [feat] Allow function return type of getData in getFilterValueAccessor (#2708)
- e20d5e82 [BUG] fix gpu filter update trigger attribute update in every render (#2707)
- 2d8161e3 [Feat] add color picker to single color selector (#2699)
- b258e8a9 [Bug] Fix synced time filter loaded value not saved (#892) (#2706)
- e5fe97be [feat] Updated time filter sync style (#2705)
- cb705c63 [fix] Prevent bottom time widget crash (#895) (#2703)
- ef2ac8f0 [chore] Add runGpuFilterForPlot to export, ts changes to KeplerTableModel (#2702)
- ee695327 [fix] remove duplicate "https:" in example (#2711)
- a743a276 [fix] add map control buttons back (#2709)
- 97df4c94 [Feat] Replaced filter enlarged with view: side | enlarged | minified - part 2 (#2537)
- 1c0ef9a9 [feat] add deck.gl onFilteredItemsChange callback to DeckGl overlays (#2691)
- d6082fe6 [feat] Time filter syncing (#2690)
- b28a263e [feat] Implemented ability to invert time series trend colors (#2692)
- ecb5ed41 [feat] Edit color legend value (#2681)
- 9c82daae [Enhancement] Add billboard and fadeTrail toggles (#2684)
- 69fc6c65 [Feat] Dynamic map lib config (#2678)
- 5764b069 [Chore] Remove default props and react-onclickoutside in react functional components (#2679)
- 09e19f86 [Fix] Tooltip not working in exported HTML map (#2556)
- a24ba5ec [Feat] Support radius legend (#2677)
- 1e7415a3 [Enhancement] call layer methods to validate visconfig when switching dataset (#2676)
- 25a5b60d [Chore] Adding application config (#2658)
- a9135ac6 [Feat] add geojson column mode for point layer (#2666)
- b6ac6540 [Feat] Add neighbor column mode to arc layer, support arc from hex (#2665)
- 2bc59371 [Feat] support create geojson path from point csv in polygon layer (#2664)
- 4c489940 [chore] Split out column mode config into separate component (#2663)
- add6192b [feat] Layer Column Mode (#2662)
- ef32f711 [fix] Fixed disappearing animation time control (#2625)
- c70ae07e [chore] Update @loaders to 4.1.1 (#2638)
- ad94d703 [Fix] legend wasn't interactive in shadow DOM (#2630)
- 6ffb1dcb [chore] Move create or update filter action (#2636)
- 16a3ac26 [fix] Improved map bounds calculation and handled latitude issues (#2632)
- 7e3ea28b [fix] prevent second shadow effect (#2631)
- f8e7b417 [fix] Upgrade react-router from 3.2.5 to 3.2.6 (#2637)
- 56c9c3ed [fix] Updated type data-utils getColumnFormatter method (#2640)
- 5d77b7ab [chore] Add className for LayerManager (#2629)
- 6f45f1f0 [feat] add autoFocus prop in TypeHead (#2646)
- 406b9787 [fix] Reset default values when DropdownList component unmounts (#2648)
- cf39ab20 [fix] Map controls tooltips break drag event positioning (#2649)
- e7deb4c6 [chore] Exporting missing types for PlaybackControls (#2650)
- edd1fd98 [fix] Making sure animated spinner has border width CSS prop set (#2651)
- b92b9707 [fix] Disable polygon filter menu for non-polygon features (#2652)
- e40d9b6e [feat] Call get after inject to create full cache (#2647)
- f15be57f [fix] Fixed effect panel width (#2644)
- 04280b33 [fix] Hiding legend scrollbar when in image export (#2643)
- 73704019 [chore] Update modal with test id (#2642)
- 4f9d261c [fix] data table right margin in header (#2641)
- 66b7fbdf [chore] Replaced deprecated "assert" with "with". (#2654)
- fb7fd817 [fix] build_and_publish fix (#2645)
- 9dbc80f1 [chore] migrate from webpack to esbuild to build demo-app locally (#2616)
- 7b512cfa [chore]: Upgrade to yarn 4 (#2610)
- a06d03c5 [chore] Bump setuptools from 69.5.1 to 70.0.0 in /bindings/kepler.gl-jupyter (#2587)
- f977b4f2 [chore] Bump elliptic from 6.5.6 to 6.5.7 (#2608)
- 40005446 [chore] Fix cover script generate cover report (#2609)
- affc5b65 [Chore] Upgrade to eslint 8.53.0 and prettier 2.8.8, fix lint and type errors (#2607)
- bc90b0e2 [Chore] fix tests (#2602)
- e5111dad [Bug] Fixes a number of issues preventing Kepler from building on fresh checkout (#2596)
- 9341911e [Bug] Fix custom map style input (#2564)
- 89180277 [chore] update deps; update doc; update version (#2568)
- ff52dda6 [fix] jupyter widget: don't take over <title> (#1723)
- 739aed86 [deps] Bump ip from 1.1.5 to 1.1.9 (#2527)
- 44526ebc [Feat] Kepler-Jupyter 0.3.4 with kepler v3 (#2565)
- 6667a966 [Docs] Update node.js version in docs to v18 (#2558)
- 4932e76a [Feat] use fixed height in geojson layer (#2533)
- 400120f3 [Enhancement] call layer methods to validate visconfig when switching dataset (#2532)
- 1f9757b8 [feat] Pass in custom transformRequest function (#2534)
- b644f203 [Fix] layer popover mapIndex (#2535)
- 4b3c950f [fix] Fix sample maps (#2529)
- 55fb2426 [chore] Update COC to OpenJS (#2496)
- 0959de6a [Feat]Support Zoom to layer in layer panel (#2516)
- ac0d3575 [Chore] docs: Add GeoArrow to supported formats (#2503)
- 084d807f [Chore] Bump path-parse from 1.0.6 to 1.0.7 (#1569)
- 46086e88 [Chore] Bump cached-path-relative from 1.0.2 to 1.1.0 (#1687)
- b8e5f865 [Chore] Bump ssri from 6.0.1 to 6.0.2 (#1866)
- 48e5839f [Chore] Bump postcss from 7.0.35 to 7.0.39 (#1691)
- 03d844c4 [Chore] Bump url-parse from 1.5.1 to 1.5.10 (#1724)
- f5d3be2c [Chore] Bump async from 2.6.3 to 2.6.4 (#1810)
- 012e9d7e [Chore] Bump shell-quote from 1.7.2 to 1.7.3 (#1847)
- 3222fa11 [Chore] Bump minimist from 1.2.3 to 1.2.6 (#2520)
- 248a759d [Chore] Bump hosted-git-info from 2.8.8 to 2.8.9 (#1865)
- 8659d4c9 [Chore] Bump decode-uri-component from 0.2.0 to 0.2.2 (#2053)
- 354fb8d2 [Chore] Bump browserify-sign from 4.2.1 to 4.2.2 (#2421)
- 59d81ef8 [Chore] Bump @adobe/css-tools from 4.3.1 to 4.3.2 (#2464)
- 776f11bc [Chore] Update docs to MapLibre and react-map-gl v7 (#2497)
- 0ad17b50 [Chore] Bump follow-redirects from 1.15.1 to 1.15.4 (#2507)
- b3be6c9e [Fix] fix example node-app arrow errors (#2508)
- 24acc1a0 [Chore] Update Uber References (#2495)
## [3.0.0] - December 21 2023
- 21a445fd [chore] update readme, fix examples, show effects button (#2492)
- de8cb971 [Fix] GeoArrow demo not working (#2491)
## [3.0.0-alpha.2] - December 17 2023
- 5264c5f5 [fix] add thumbnails (#2486)
- 34bb812e [chore] Update all licenses to OpenJS recommendation (#2471)
- df87781a [Feat] add polygon filter based on mean centers for GeoJsonLayer (#2476)
- 50924867 [chore] Add file license header script (#2472)
- f33b09f8 [Demo] Add GeoArrow sample dataset (#2483)
- 09aee384 [feat] MapLibre basemap (#2461)
- 1544e202 [Fix] basemap frozen when incrementally loading GeoArrow (#2474)
- b290d871 [chore] pin luma.gl version to 8.5.21, to avoid mismatch (#2463)
- 955633df [chore] bump loaders (#2480)
- b481611c [fix] fix map import (#2479)
- 2024a6d8 [Feat] GeoArrow incremental rendering (1) (#2459)
- aa1c7d10 [chore] fix typo in landing page (#2402)
- 155a5825 [fix] Fix cloud tile fetching logic (#2456)
- 5eb62a9b [fix] Fixed website configuration to correctly import local kepler files (#2454)
- 39494866 [fix] update min value for hexagonal pixelate effect (#2453)
- 8e7b0ad1 [fix] Effects: fix possible 'undefined' in effect parameters (#2452)
- 84053786 [chore] Validate parameters for effects (#2450)
- d60ef31d [feat] Introduce Foursquare cloud provider (#2437)
- 82d616e4 [fix] ScenegraphLayer has broken lighting and textures (#2443)
- 110c2991 [chore] bump deck.gl, luma.gl, loaders.gl (#2442)
- f70b20ea [fix] effects: prevent time reset with invalid valese (#2441)
- 3ca8df02 [chore] Add effect MapControl test (#2440)
- 68bff82a [fix] effect-related UI fixes (#2439)
- 82fc69e2 [chore] Refactored cloud provider flow for performance and multi provider support (#2436)
- d975ea1e [Feat] support GeoArrow format (#2385)
- ee6f0754 [feat] Effect manager - UI improvements (timezone, time slider, time dropdown) (#2433)
- b5a6e9ce [chore] Making EffectPanelHeader actions configurable (#2432)
- 1ae4cd02 [feat] UI updates for effects (#2428)
- a69b0878 [chore] Effects - config refactoring (#2422)
- bfec82e5 [chore] Bump to loaders.gl@4.0.0 (#2424)
- e6e5a4c9 [Chore] export LayerBlendingSelector (#2419)
- a1878138 [chore] SplitMap type changes (#2418)
- 5e0ad511 [fix] Legend is rendered outside of widget (#2417)
- 473bd801 [fix] feature menu not working in shadow DOM (#2416)
- b995c9b5 [fix] Hexbin layer color aggregation incorrect on load (#2415)
- 58f0bb71 [Chore] merge other properties in splitMap merger (#2413)
- bcb8c4e8 [fix] long name in filter panel header (#2412)
- b8fa6ce1 [chore] Remove paths from tsconfig (#2414)
- 79002ea6 [feat] Support customized ref in useDimensions (#2409)
- 4d723317 [feat] Update Icon Layer to allow passing in svg icons as a prop to bypass remote resource fetching (#2410)
- 2ff3738f [fix] Viewports not always locked (#2408)
- 975a4762 [fix] Using resolution-corrected mapState for image export (#2407)
- 7fae622e [chore] adds additional properties to mock basemaps (#2411)
- df1397fd [fix] handle empty properties in GeoJson file (#2381)
- c8e2a9f1 [chore] move dev env to Node.js 18 (#2399)
- bb559750 [fix] long names in tooltips (#2405)
- c9c34c86 [chore] add custom classes to dropdown (#2404)
- 22dd6236 [chore] Remove unused deps (#2403)
- a36ec68b [fix] effect related fixes (split maps, shadows, timeline) (#2396)
- 5e7dd9b5 [fix] Upgrade Mapbox SDK (#2397)
- b54c1739 [chore] Upgrade to loaders.gl@4.0 (#2394)
- e47ccc07 [fix] Re-enabled plugin section in home page (#2400)
- 81a6e1fa [fix] Update layer domain in addLayer (#2393)
- bed4b7f8 [chore] Removed abs paths in mock state and layer utils (#2392)
- f1e654d8 [fix] place null values at the end when sorting table (#2391)
- 4f51abc3 [chore] extra typing for effects (#2390)
- 459ae555 [chore] fix lint in cmpEffects (#2389)
- 87df1197 [feat] Effects: shadow color picker; use animation & current time (#2387)
- dde3a6e3 [chore] Fix ColorMap type (#2388)
- 08492a8a [chore] Export effects types/utils and incapsulate dnd logic into new hooks (#2384)
- 2500a277 [feat] reorder tooltips (#2378)
- fdecb052 [fix] minor effect-related fixes (#2380)
- 5c16027d [chore] Drag&Drop context: extra check for the object type (#2379)
- a958586d [fix] fix for process is undefined (#2376)
- 9eb6b328 [chore] bump examples (#2375)
## [3.0.0-alpha.1] - October 17 2023
- a3521948 [feat] introduction of deck.gl effects (#2372)
- c798961d [feat] Introduced dnd-context factory to better override dnd properties (#2364)
- 673646ac [fix] fix map dropbox share (#2370)
- ec0881d7 [fix] Fix react-map-gl mapbox api props (#2362)
- d0a86587 [chore] Avoid confusion in viewstate context (#2361)
- 1fcdfde9 [fix] fix image export (#2368)
- 89043bd0 [fix] Fixed load remote map dialog exception (#2367)
- 7f9f211b [fix] Improved validation of field pairs suggestions for LayerColumnConfig (#2359)
- fa1edab9 [fix] add autoCreateTooltips as a prop in AddDataToMapOptions (#2358)
- e8220b0e [chore] pass custom classes to ListHeader (#2357)
- 5a9fa5bd [fix] Stronger AnimationConfig types (#2356)
- a2fd52ca [fix] Fix mapbox/deck syncing issue (#2355)
- cfee75a2 [fix] Text labels: can't set prop to false/0 with multiple labels (#2354)
- 357f77a8 [fix] text outlines are barely visible after upgrade to deck 8.9 (#2353)
- 9d99f0b6 [chore] Upgrade deck.gl to 8.9 (#2352)
- 032ad763 [fix] Layer column config: sometimes a suggested field pair will hard crash (#2351)
- 56afb092 [fix] remove <img> from field name when show in tooltip (#2350)
- a9181f69 [feat] Table widged: pass getRowCell as prop (#2349)
- 1f169df1 [fix] Improve data table horizontal overflow and dataset tabs overflow (#2348)
- f2559445 [chore] Bump react-virtualized (#2347)
- ced842ea [chore] Update public CDN URL (#2346)
- 6ef400d2 [Fix] Dispatch click event instead of click() (#2345)
- cf9cf21a [fix] Add guard for null legend label (#2344)
- b5405f52 [fix] serializeLayer fixes (#2343)
- 4383bffd [feat] Text layer: add outline width, outline color, background color (#2342)
- a59d8342 [Fix] Resize observer crashes when passed a non-Element target (#2340)
- ec35ea97 [feat] introduced jest to replace tape/sinon/enzyme for browser tests; upgrade typescript to 4.5.5 (#2339)
- 85fa66f3 [feat] Adding applyLayerConfig action (#2337)
- ae26de55 [fix] Fix website kepler.gl example (#2338)
- d14e7ff4 [chore] Updated more deps to be compatible with react 18 (#2335)
- 70128119 [chore] updated modal and panel title types to react 18 (#2334)
- a0e5db72 [chore] Upgrade to react 18 (#2323)
- 52c69c54 [feat] Add Deck onAfterRender callback prop support (#2332)
- 0b8ae8bc [feat] deck.gl render callbacks (#2330)
- 6596187b [fix] Remove fixed height for list item (#2331)
- bcd3ff1b [fix] dropdown in color scale does not work (#2324)
- 203829aa [fix] dropdown list alignment and spacing (#2325)
- ba6259d3 [Fix] polygon context menu is offscreen (#2326)
- 6fd7f7a9 [fix] When editing a custom basemap style do not unintentionally drop extra properties (#2327)
- b3472a37 [chore] Upgrade deck to 8.8.27, loaders to 3.4.14 (#2320)
- d9c164bb [Feat] Support WKB geometry column in CSV (#2312)
- cfada4d5 [Chore] delete typeahead mousedown listener, pass onOptionSelected to ListItem (#2319)
- 2714c755 [fix] fix horizontal "over scrolling" and misalignment of header row vs. data cells (#2318)
- d28674ea [feat] Add onMouseMove callback (#2317)
- 66a6364f [feat] add prop to allow turning off custom webkit scrollbar CSS (#2316)
- 69ce4d06 [Chore] export action creator (#2315)
- e051eb55 [fix] Fix map attribution color (#2314)
- 090ef0ba [fix] Conditionally apply escapeXhtml to prevent export image crash (#2313)
- 8bb0d469 Introduce new fsq studio section in home page (#2308)
- 3e39337e updated cdn from unfolded to fsq (#2307)
- 5bae745b [chore] drill disabled prop to layer-type-selector (#2274)
- b6a2b804 [feat] Edit a custom base map style redux (#2281)
- 74bc22a6 [feat] add complimentary base map style property (#2280)
- e056d01a [feat] Remove a custom map style from the base maps side panel (#2279)
- e09ed287 [fix] map style selector: provide backup UI content (#2277)
- 963df0cf [chore] Update SavedCustomMapStyle accessToken property to be defined as optional (#2278)
- 46df6014 [Chore] improved saved layer and interaction type (#2275)
- 2dff78ff [fix] Long field names in filter UI obscure the delete icon (#2273)
- 32356b46 [chore] pass through className prop to TippyTooltip (#2272)
- 52fb6844 [chore] Add nx module tag (#2271)
- b255d60e [chore] Add tooltip format (#2269)
- 7b45e4f1 [fix] collapsible layer config group ui improvements (#2268)
- a1689540 [chore] update browserslist deps (#2267)
- 5db83285 [chore] specify filter id in addFilter (#2266)
- a8599dcf [feat] Update custom map style updater to support managed map style (#2264)
- 84c07360 [feat] Support map overlays (#2260)
- 8312d060 [Chore] Upgrade to Node 14 (#2257)
- 23763f0b [Chore] Add layer header action component to deps (#2265)
- 043db65f [Chore] export single color palette selector (#2262)
- d362fc21 [feat] H3 Layer separate layer opacity into unique fill opacity and stroke opacity (#2261)
- a1084016 [fix] Use auto width for pinned column in table preview (#2259)
- c79e9f90 [Chore] rewrite stack overflow functions (#2258)
- 9d57f575 [chore] upgrade gl dependency version (#2256)
- 11242f01 [Chore] Added collapsed prop for layer config group (#2255)
- 8d79f7d0 [chore] export types and components (#2254)
- 4a659e84 [feat] H3 Layer: default text label anchor to middle position (#2252)
- acd05e91 [chore] export more components and types (#2251)
- f6be2491 [Chore] expose functions and types to fix deep import issues (#2250)
- 5fcbcdab [feat] H3 Layer: Add fill transparency and stroke color settings (#2249)
- 94cb2a15 [feat] Layer property additions: H3 Layer: Add text labels (#2243)
- 9ba6bcdd [Chore] add exports to expose functions and components types (#2242)
- 88dd4b36 [fix] exported image has a thin white bar at the bottom (#2241)
- f562fbe0 [fix] range slider doesn't work when step < 1 in dataset filter (#2240)
- fa3bb9c9 [fix] Overlapping column names in drop down menu (#2239)
- 796a9d29 [fix] time ticks are the same when using Minute to set interval (#2238)
- b9cd1ec4 [Fix] Map popover z-index less than size panel (#2237)
- 8de7ae41 [Fix] mapbox logo has not been styled correctly (#2236)
- ed5cb8ad [Chore]: Add onClickControlBtn prop to MapControlButton to pass additional callbacks (#2235)
- 97126155 [fix] Remove split map controls from legend in exported image (#2234)
- bc1cfc55 [Chore] use unfolded cdn for base map, layer type select and icon layer svg (#2233)
- 07f8c9f9 [feat] Add extraReducers arg to keplerGlReducer.initialState (#2232)
- a112c0e9 [Fix] Feature Action Panel menu and editing tooltip are cut-off in dual map mode (#2231)
- 7fb4cada [fix] Fix types for Typescript 4.8 (#2229)
- 41c80993 [Chore] Pass onBruch, filter and datasets through range slide to plot (#2220)
- f80853b0 [Chore] add test for vis state schema column save undefined typeerror (#2219)
- e1e165e6 [Feat] Added new options parameter to override single action reducer default behavior (#2217)
- 1c1345b4 [Bug] preserveLayerOrder when replace data (#2214)
- c06ceca7 [chore] Exported layer utils methods and added onDragStart onDragEnd props (#2210)
- 7d3c6026 [fix] Fixed bug when switching to dataset layer view (#2209)
- 2275b8e6 [chore] Make dataId non-optional in layer config (#2205)
- c130a2f5 [Fix] vis state schema column save undefined typeerror (#2211)
- d8a5defa [Fix] ColorBlock component TypeError: e.color.slice(...).join is not a function (#2212)
- 1380644f [Fix] time widget animation: apply same duration for last time filter (#2218)
- 1094e734 [BUG] fix dropdown list fail to update when prop change (#2213)
- dafec9b8 [Chore] add exports for scenegraph to layers index (#2215)
- 14c6d014 [chore] layer testing support (#2216)
- e5686fda [Bug] Fix composer types, schema types (#2208)
- 28fbcdbf [feat] Convert layer order from idx to layer IDs (#2203)
- e1ccfdff [Enhancement] Allow empty column when layer created from config (#2206)
- 30792f47 [Fix] Add selected style for light dropdowns (#2207)
- 44aafd15 [Feat] add kepler.gl to info.source in exported kepler.gl.json (#2195)
- 95fd2369 [fix] Empty cells with date time data are filled with Invalid date (#2201)
- 3b73dc07 [Feat] Add display format setting for table/tooltip (#2199)
- 87b79c3b [Feat] add replaceDataInMap action (#2198)
- e9896def [Feat] add table config with custom number format (#2192)
- e635e4cb [fix] Fixed crash when switching to dataset layer view mode (#2191)
- a246574e [Fix] Auto-display legend in split mode + Fix legend and layer panel bugs (#2190)
- 2d141ff5 [fix] Layer drag and drop label is barely visible on light map (#2189)
- 70cde834 [Fix] Drop the same layer multiple times to one map (#2188)
- 2f5da5ec [Chore] Removed unneeded preventDefault (#2177)
- b364f3d8 [Fix] intervals rendered incorrectly in time widget (#2183)
- c8475737 [feat] Create layer correctly from saved layer config (#2179)
- 4c6e99e3 [fix] previous drawn-selected geometries are lost after click Select geometry (#2175)
- 79d8c756 [fix] support Polygon and LineString mode in idToPolygonGeo (#2182)
- 85897309 [Fix] hide pinned selection outline when layer is hidden (#2181)
- d441d5fd [feat] three dots button change (#2180)
- 4dd27abe [Feat] Drag and drop interaction for split map (#2172)
- 485252ad [fix] Improved split+unsynced mode for better handling (#2176)
- 90572720 [fix] handle undefined values in updateViewport (#2178)
- afee4800 [fix] hide side panel close button when data preview is open (#2174)
- 695bcccd [feat] Improve disabled zoom lock text styling (#2173)
- 9fc98e86 [Feat] Unlocked split map viewports (#2170)
- 8896dc13 [fix] fix visible layers toggle for split maps mode(#2168)
- f0727c97 [fix] type fixes for map popover (#2169)
- 04451827 [Feat] enhance mouse selection toolset (#2164)
- f640822a [Fix] round the float number to up to 4 decimal places in table (#2163)
- a41e0118 [Chore] Add more types for schema (#2162)
- 502c1ba3 [fix] remove duplicates from changelog (#2145)
- 7d996a68 [fix] Fix onViewStateChange callback (#2154)
- 2e57238b [chore] Type and export fixups (#2152)
- 245ac53b [chore] update filter types (#2153)
- ce4e5c7e [Fix] Datasets and basemap attributions separated by "|" (#2150)
- 1fd7bad0 [Fix] Datasets attribution width styling (#2149)
- 06f085db [Feat] render dataset attributions in map container (#2148)
- 425a6011 [chore] ts fixes (#2147)
- abb0d1ce [fix] improve handling of "interpolate" mapbox colors during basemap switching (#2144)
- a6a6b270 [fix] fixes to async merger (#2139)
- 9d568af3 [Feat] Support async mergers (#2129)
- 28c34901 [Chore] support offset in map legend panel (#2130)
- 953711ac [feat] Introduced updateDatasetProps to update dataset information (#2133)
- 332a94ad [Feat] Add arrow and light theme props to TippyTooltip (#2140)
- c79896be [Chore] Export LayerGroupColorPickerFactory from kepler-wide components (#2138)
- bf890fa9 [chore] Update react-modal version (#2131)
- def2ce12 [fix] Basemap overlay blending updater must pass through entire payload (#2137)
- e2848008 [Feat] Add "No Basemap" option with map background color control (#2136)
- 5cc6faab [fix] fixes the logic to set map overlay type properly when switching layer type (#2135)
- f605167f [Chore] Request map styles on demand (#2134)
- fb829922 [Feat] Add list toggle to filters (#2115)
- 20fcb662 [Bug] Object and array field types made numeric (#2127)
- 31e44350 [Chore] export LayerTypeListItem type (#2122)
- 390f5af8 [chore] changes to order layers by datasets (#2114)
- 210af2b4 [fix] remove constant scroll around layer config group (#2116)
- a438383b [feat] Add minZoom, maxZoom, maxBounds (#2124)
- 0e5a4bbc [Bug] data modal and data table scrollbar style (#2123)
- cdb69f4a [chore] Export parseGeoJsonRawFeature from utils (#2121)
- 3d5db39e [feat] add support for object and array field type (#2120)
- 1f20ef71 [Feat] Introduce MapPopoverContent (for tooltip charts) (#2119)
- 918aaf98 [Enhancement] Render data table with smarter cell size, prevent scroll back (#2117)
- b1d92c85 Bump ua-parser-js from 0.7.25 to 0.7.33 (#2112)
- 630e8ede [Enhancement] Improve Feature action panel style (#2099)
- 20134f01 [fix] Fixed time filter toggling and display the correct filter (#2098)
- 83673fd5 [chore] bump nebula; add picking width for polygons; preserve rectangles; (#2097)
- eeb50d6a [fix] Checking if drawing is active when delete an editor feature (#2093)
- d1abf3ee [Enhancement] Fix dropdown list disabled color (#2094)
- 943ee50a [Bug] fix update layer type reset layer dataId, new layer at the top (#2096)
- ac5f490e [fix] fix layer config group collapsible content overflow (#2092)
- 608fa0f3 [Feat] refactored AnimationControl to handle both layer and minified filter playback (#2079)
- 409db23e [fix] CSS fixes to avoid conflicts with Jupyter styling when embedded without iframe (#2095)
- e1b70000 [Enchancement] number formatting improvements (#2109)
- cf8d3321 [Enchancement] number formatting improvements (#2106)
- c9cc689c [fix] use dataset name as default h3 layer name (#2100)
- 7f01ca1c [fix] Trip Layer: issues for path from 2 points (#2101)
- 92bae8e0 [fix] Icon Layer - Labels are visible even if layer is hidden (#2102)
- 47cc281c fix: Open map control and geocoder for extension (#2103)
- 0cd0e379 [fix] Improve render cell size script perf for data table rendering (#2104)
- 4e06992b [Fix] Image export change resolution (#2105)
- 7d9d54b8 [Feat] Map overlay blending (#2086)
- f4329fcc chore: more specific error message for context lost error (#2090)
- 14ef4366 [Feat] Disable a layer after an error in Deck (#2072)
- d24ea4a5 [fix] dont show hidden layers as options in polygon dropdown menu (#2085)
- fd3a7a8b [fix] Prevent the app from crashing on geojson layer hover (#2087)
- a66f98f9 fix(filters): fix for broken filter state, load crash (#2069)
- 47b1124d fix 3d buildings rendering (#2080)
- 8edb5b2e [fix] lock react-vis version to prevent CI fails (#2082)
- 9416be4a save and merge editor features in map config (#2071)
- 217b89e7 chore: Child support and type exports for FeatureActionPanel (#2070)
- f53188b9 show filtered out and hidden layers as options in polygon filter menu (#2068)
- b53a6b75 [fix] Move FeatureActionPanel to class component (#2067)
- 0f7a4242 fix Cant right click on polygon or rectangle filters to get the menu (#2066)
- db549742 bump licence year to 2023 (#2073)
- a22e4259 [Feat](Editor) Replace react-map-gl-draw with Nebula.gl (#2054)
- 3de77995 [fix] fix import in demo-app carto provider (#2050)
- 3e7581b1 [Feat] Add hasStats prop to data table adjust first cell size (#2040)
- 15d1426e FIX: Fix margin for style panel icons (#420) (#2041)
- a865ce8b [fix] correct provider downloadMap type (#2049)
- c53d81fd Bump moment-timezone from 0.5.33 to 0.5.35 (#1966)
- efa32f75 [fix] include CenterFlexbox in common components (#2035)
- 5f3d185f correct @kepler.gl/styles types file location (#2034)
- 76e1a4d0 [fix] Updated dataset item cursor style (#2013)
- d0bcaa89 [Fix][perf] String filter freezes browser when loading a large dataset (#2012)
- 1214bd9d [fix] Time filter: Add padding if min/max values are the same (#2011)
- 36657380 [fix] Fixed hex tile play animation (#2010)
- 6c266665 [Fix] dropdown item title (#2009)
- 81fcbb41 Bump loader-utils from 1.4.0 to 1.4.2 (#2025)
- f1b7e1a8 [Fix] no aggregation options can be selected for date field when groupby (#2008)
- b9a04468 [Feat] Replaced filter enlarged with view: side | enlarged | minified (#2007)
- 6692585e Handle loading map style gracefully (#2005)
- 920659ff Add header cell stats control toggle (#2004)
- dbba7daa [Chore] bump and fix examples for v3.0.0.alpha.0 (#2030)
## [3.0.0-alpha.0] - November 5 2022
- 4eb6b24b [Chore] dependencies update + publish process update (#1978)
- 72f201c9 kepler.gl-jupyter: Fixed wording in documentation (#1938)
- 791bbe21 [Feat] make data table header cell overridable (#1995)
- 77ba9509 deck upgrade fix (#1997)
- 9b483b22 better regex for mapbox style boundary detection (#1996)
- 306da3a2 add onClose for color picker (#1992)
- 13bcaa06 update isRGBColor (#1991)
- 2845432e Moved animation control button to the right (#1990)
- 51a05ffe color picker crashes studio inside iframe (#1989)
- 73dba52e [Chore] Extra memoization for components to prevent re-rendering (#1988)
- 4e88e839 [Bug] "load from storage" and "Share" modals fix (#1976)
- 9029b8ea [Feat] Hide Mapbox attribution when using non-Mapbox tiles (#1975)
- d77ffcb4 [Feat] Improve fieldpair detection logic, add altitude (#1968)
- b70c35c2 [Chore] refactor dynamic require (#1971)
- 8878cff4 [Fix] polygon filter reload (#1970)
- ea738594 [Chore]: Typescript 4.4 fixes (#1957)
- 49321f87 [Feat] mobile bottom widget styling (#1930)
- db39b496 [Chore]: Technical: Isolate components (#1967)
- 90248326 [Chore] remove iconComponent from interactionConfig (#1973)
- 64542aa2 [Chore] bump to deck 8.6.0 (#1959)
- ab5f9f33 [Fix]: Item selector closeOnClickoutside conflict with portable (#1958)
- 9b81e49f [Chore]: Technical: Isolate schemas (#1962)
- 57dea6a3 [Chore]: Technical: Isolate reducers (#1961)
- 28578e76 Import for filters fixed (#1965)
- 359e0387 [Bug] Fix getSampleData import (#1964)
- c2cb8213 [Chore]: Technical: Isolate table-utils (#1949)
- af79e2e5 [Bug] fix layer order not correctly reloaded (#1956)
- 47a184c6 [Bug] Fix Range brush maximum update exceeds crashes (#1955)
- f9485018 [Enhancement] improve tooltip format label, make it more intuitive (#1954)
- a42aae33 [Enhancement] use portable in item-selector (#1953)
- 6e2fe3dd update layer selector types; get length for dc; (#1951)
- 0630c8b7 fix deck.gl version for src utils (#1950)
- d5f0f0cf [Docs] fix broken link (#1952)
- 5e20ac68 [Chore]: add class names to map control (#1940)
- c7ed4dbd [Chore]: change types for modal (#1939)
- f53117fb [Chore]: pin browserlist (#1935)
- 8ea93d40 [Chore]: Technical: Isolate actions (#1948)
- f828f695 [Feat]: Passing root context to tippy
- 34ebb889 [Chore] Fix debounce typing
- 3db186e5 [Chore] bump deck to 8.5.7 (#1934)
- 99b38d26 [Feat] Implemented new feature flag by passing features flags prop (#1933)
- 50eda73f [fix] 3d buildings aren't rendered without layers (#1931)
- f21afd8d [Chore]: Technical: Isolate tasks (#1941)
- 88039cd3 [Chore]: Technical: Isolate cloud-providers (#1942)
- a98a015b [Bug] Fix getSampleData util import (#1947)
- 4615c480 [Fix]: Kepler.gl site issue fixed (#1944)
- f2459c6c [Chore]: Technical: Isolate utils (#1876)
- 88e15d5e [Fix] fix lint (#1932)
- 3301a7c5 [Chore]: bump deck to 8.5.4, loaders to 3.0.9 (#1928)
- 0889d0d1 [Enhancement] (Map Control) use lazy tippy to improve map legend rendering perf (#1924)
- 82baedfb [Chore](Types) move howto button out, add layer conf types, yarn lint (#1926)
- c9ef6972 [Chore]: extra export (#1925)
- 4fc85960 [Chore]: layer-utils, map-utils refactor (#1923)
- 5c38f851 [fix] prevent deck crash due to layer id duplicate
- fb3f35ba [Chore]: Use relative import in test-utils (#1921)
- eff5f902 Map Control: Use MapControlTooltip with TippyTooltip (#1920)
- 5551abd6 [chore] Export IconButton type (#1919)
- d358b3a8 fixed findMinFromSorted when list is null (#1918)
- 3a3be58d [Chore] Upgrade to deck 8.5.2 (#1917)
- 20d39b8c [Enhancement] add bin to filter hiitogram construct (#1673)
- 41414ceb [Enhancement] change export video playback button order (#1916)
- 38734422 fix color pick type using react-color types (#1915)
- f739a499 chore: Updated filter-selector, item-selector, range-slider file typescript definitions (#1902)
- 40ac3068 [chore] test valueAccessor in field (#1906)
- f82494d6 [Feat] Use custom style token if available instead of the default token (#1913)
- 77dc2560 [BUG] Fix crash after layer type change (#1912)
- ac59ac7d [Bug] rename dataset should not use spread (#1911)
- 486e3239 Prevent "Cannot read property 'layers' of undefined" error (#299) (#1910)
- fae2058f [Bug] Fix map saved with empty filter cannt be load; validate empty filter.name when merging (#1909)
- 26b5f849 add type to keplerTable (#1905)
- bec013e5 improve reducer updater typing, change visstate to be more relaxed (#1908)
- 6c51a2ae [feat] Hubble gl integration (#1899)
- d31fe649 [Bug] Fix mouse event evt.point evt.lngLat undefined crash (#1903)
- 39427d46 [Bug] fix trip layer timestamp check (#1904)
- cb76ae0f [Enhancement] render warning in layer panel header (#1901)
- 9d171c60 [Enhancement] set initial layer config when set layer type (#1898)
- 8d35d9b8 [Chore] Export more type def (#1890)
- d90cd188 [Chore] fix types and missing import (#1891)
- 28cbb759 update shader modifications for deck 8.4.16 (#1892)
- 66de62cf Fix crash: visualChannels: Cannot read property label of undefined (#1886)
- 57f77dd2 deck to 8.4.16 (#1889)
- 41dbd570 [Enhancement] add disableDataOperation to dataset (#1897)
- 1f5e26c8 [Enhancement] pass schema to processKeplerGlDataset (#1885)
- 156f898b [Bug] fix comparison tooltip color and position (#1887)
- 6c99bb04 [Bug] Disable layer copy when layer is invalid (#1882)
- dfd73a53 add supportedDatasetTypes to layer, show dataset selector even if there is only 1 or no option (#1883)
- 40a82dfa [Enhancement] disable layer column selection if empty (#1888)
- 9c042fe5 Bump follow-redirects from 1.13.3 to 1.15.1 (#1871)
- 2a55a1e3 [Enhancement] Improve style of layer header panel (#1881)
- ceb23e21 fix for cluster layer z-fighting; fix - render 3d building map style only once (#1874)
- a983be75 [Bug] allow tooltip format to apply to aggregation layer hover (#1872)
- 723e6050 FILED_TYPE_DISPLAY -> FIELD_TYPE_DISPLAY (#1879)
- 7d328315 Chore: Fix lint script and issues (#1862)
- 940f9aad [Chore]: Technical: Isolate styles (#1861)
- ad7646ac [Chore]: Technical: Isolate localization (#1858)
- e798f317 Middleware isolation (#1860)
- 6c178d77 [Chore]: Technical: Isolate processors (#1857)
- 9e315d25 [Chore]: Technical: Isolate layers (#1856)
- c1e20348 [Feat] Upgrade deck.gl@8.4.11 luma.gl@8.4.3 loaders.gl@2.3.12 (#1674)
- b668fd28 [Chore]: Technical: Isolate deckgl-layers (#1851)
- 9feddc66 Fonts issue fix (#1846)
- 9a3da3c0 [Chore]: Technical: Translate deckgl-layers/cluster-layer (#1815)
- 10868ecf [Chore]: Technical: constants and types modules isolation (#1840)
- fe293e71 [Chore]: Technical: js to ts convertion components root modals (#1801)
- 55abc874 [Chore]: Technical: Notification item types added (#1824)
- bd8c3327 [Chore]: Technical: Translate map components to typescript (#1803)
- 371649c6 Debounce typings added (#1825)
- 1034c33d Lodash.memoize typings added (#1827)
- 69f8534d [Chore]: Technical: fix linting errors of @types/styled-components plugin (#1834)
- 5ee0cd4f [Chore]: Technical: add types for side panel root components (#1822)
- 9bee093e validate url of Add data modal (#1837)
- b7d8edf4 [Chore]: Technical: add types for layer panel components (#1819)
- 7b95c236 hide layer size legend with nullish label (#1836)
- ecc743af [Chore]: Technical:layer base config data allow to be null (#1835)
- 2b51c7bb [Chore]: Technical: Fixed errors happening in folders/files due to the addition of @types/styled-components: components/common/slider (#1831)
- e27cf134 [Chore]: Technical: fix attributes of styled components animation-control (#1829)
- 442d1b23 [Chore]: Technical: add types for filters (#1809)
- fc8ab5af [Chore]: Technical: Translate deckgl-layers/hexagon-layer (#1818)
- 959f1e0b [Chore]: Technical: Translate deckgl-layers/grid-layer (#1816)
- cbd26743 add types for styled components in styles (#1830)
- f7715892 [Chore]: Technical: Translate components to typescript (#1814)
- a5a347ba [Chore]: Technical: Translate components to typescript (#1812)
- 9225e005 Throttle typings added (#1826)
- f0671f06 [Chore]: Technical: add types for editor component (#1797)
- 4e8197d5 [Chore]: Technical: add types for processors (#1798)
- 47e4963e [Chore]: Technical: add types for side panel common (#1807)
- 0d3c98c8 [Chore]: Technical: add types for filters side panel (#1799)
- 8c5e5075 [Chore]: Technical: Translate layers final changes (#1783)
- e663bb16 [Chore] fix typo in docs (stule -> style) (#1823)
- 2d557df3 Typings for some lodash packages added (#1817)
- ca45cef8 [Bug] validate s2 token in s2 geometry layer (#1805)
- 7453b951 [Chore]: Technical: components/geocoder translated to typescript (#1808)
- 5b918e00 Review fixes (#1813)
- ae1173ec [Chore]: Technical: Translate deckgl-layers/layer-utils typesfix (#1791)
- 6a7d44bc [Bug] Build fix (#1811)
- 8ac5bbc6 [Bug] visual channels cannot read property 'label' of undefined (#1804)
- b7c6c8df Translate deckgl-layers/3d-building-layer to .ts (#1794)
- a5bcd814 [Chore]: Technical: Translate root components to typescript (#1790)
- 258c82da add types for svg-icon-layer (#1796)
- 0de32bec [Chore]: Technical: Translate deckgl-layers/line-layer (#1792)
- 013b9878 [Chore]: Technical: Translate deckgl-layers/column-layer (#1793)
- f64b551f [Chore]: Technical: Translate tasks (#1779)
- 65228a85 [Bug]: fix grid hexbin and cluster layer crash (#1795)
- 7ada98a0 [Chore]: Technical: Translate examples/custom-map-style (#1780)
- 84312384 [Chore]: Technical: Translate deckgl-layers/layer-utils (#1789)
- ec3351b6 [Chore]: Technical: Translate cloud-providers (#1778)
- 24e3549c Added deckgl-typings from community repo (#1787)
- 68abc5b5 [Chore]: Technical: Translate geojson-layer (#1757)
- 2d2ba1d7 [Chore]: Technical: Translate hexagon-layer (#1775)
- 543045d0 [Chore]: Technical: Translate heatmap-layer (#1773)
- cf57260a [Chore]: Technical: Translate trip-layer (#1777)
- e80c18b1 [Chore]: Technical: Translate line-layer (#1776)
- 9a0ad623 [Chore]: Technical: Translate cluster-layer (#1774)
- bc18a6c4 [Chore]: Technical: Translate scenegraph-layer (#1768)
- 831504f9 [Chore]: Technical: Translate icon-layer (#1763)
- b87bba3a [Chore]: Technical: Translate grid-layer (#1761)
- 079da4cc [Chore]: Technical: Translate h3-hexagon-layer (#1762)
- cd05dd4b [Chore]: Technical: Translate point-layer (#1764)
- 0b3f2c0c [Chore]: Technical: Translate s2-geometry-layer (#1765)
- 18342926 [Chore]: Technical: Translate mapboxgl-layer (#1755)
- 9b695f85 [Chore]: Technical: Translate aggregation-layer (#1753)
- 13ba6bb7 [Chore]: Technical: Translate arc-layer (#1749)
- a3ada4e9 UN-14 Technical: Translate components/[root files] to typescript: side-panel (#1712)
- fb2190f1 [Bugfix]: Fixed Babel configuration (#1754)
- d9e9d8aa [Chore]: Technical: Translate layer factory (#1748)
- c0f75341 [Chore]: Technical: Translate components/common final part (#1750)
- b06dfb1c [Chore] Typescript 'components/common/slider' (#1740)
- 0057a1e4 [Chore]: Technical: Setup for different Visual channels per layer (#1751)
- 1193258b UN-14 Technical: Translate components/[root files] to typescript: maps-layout (#1713)
- 8a06f711 Moving bottom-widget to ts (#1710)
- dd14702e [Chore]: Technical: Translate base-layer (#1746)
- 4a687ed4 [Chore]: Technical: Translate index and other files (#1745)
- 7a11260d [Chore]: Technical: Translate table utils (#1742)
- 7ee74ebe [Chore]: Technical: Translate filter-utils and gpu-filter-utils (#1744)
- e5d5d1ba [Chore]: Components/common 1st part (#1729)
- d8abca9d [Chore]: Technical: Translate utils (color and data) (#1732)
- 55a7b510 [Chore]: Technical: Translate utils (dataset-utils and export-utils) (#1734)
- 0505fda4 [Chore]: Technical: Translate redusers (vis-state) (#1727)
- 5304d4dc [Chore]: Technical: Translate utils (files without d.ts typings) (#1728)
- 30616984 [Chore]: Technical: Translate redusers (UI-state and provider-states) (#1726)
- 2ba94858 [Chore]: Technical: Translate actions to typescript part 2 (#1725)
- e36cac5b UN-12 Technical: Translate redusers (main files) to typescript (#1722)
- fb170ae0 [Feat]: Technical: Translate actions to typescript (#1704)
- cb542853 UN-13 Technical: Translate schemas to typescript (#1721)
- 8121893c [Feat]: Technical: Translate redusers (map-state and map-style) to typescript (#1717)
- fbe626be [Feat]: Technical: Translate redusers (composers and combined-updaters) to typescript (#1711)
- d8d7e44f [Feat]: Technical: Translate localization to typescript (#1705)
- 614a5003 [Feat]: Technical: Translate templates to typescript (#1702)
- 0ef5ccd8 [Feat]: Technical: Translate middleware to typescript (#1703)
- 20ec6666 [Feat]: Technical: Translate styles to typescript (#1701)
- 11c5b4cc [Feat]: Technical: Translate constants to typescript (#1697)
- 283586d0 [Feat]: Technical: Translate connect to typescript (#1700)
- 995f3f93 [Feat]: Setup build process for ts source code support (#1688)
- b71dd6b4 [Chore] Update license year 2022 (#1689)
- 0dfc7e1b [Bug] fix filtered datasets memoization (#1678)
- 1e8b3c1a [Enhancement] order layers by dataset (#1675)
- f9ae108a [Enhancement] extract layers list to a separate component (#1665)
- 52993525 [chore] export types, add script to build types (#1636)
- 6fb00fa0 [Bug] fix pin table column overide dataset (#1625)
- 22ea7a9d [Bug] do not display geocoder dataset in side panel
- a20db971 [Feat] allow custom value in layer slider (#1631)
- 5e6b1c45 [Bug] allow empty data rows (#1624)
- 612e18a9 [Feat] support pin map legend in map control (#1614)
- bfcce3fd [Enhancement]Allow changing MAX_DEFAULT_TOOLTIPS (#1627)
- a810ee13 [Chore] added more properties to export layer type (#1613)
- 0931a55c [Enhancement] Render map control tooltip with TippyTooltip (#1612)
- d0fb78de Add registry-url to avoid 404 issue when publishing keplergl npm package (#1623)
- 9936b7b7 [Feat] add color picker to dataset tag (#1608)
- 3e3d1631 [Jupyter] Update example versions
- 5b442c5d [Jupyter] keplergl==0.3.2 (#1619)
- a56206c8 keplergl-jupyter v0.3.1
- e12039c6 [Feat] Add Copy Button to Export Map Dialog (#1609)
- 3f876ac1 [Jupyter] bump kepler.gl js version release keplergl-jupyter=0.3.1 (#1617)
## [2.5.5] - September 12 2021
- 392e9a21 [Bug] lock deck.gl to 8.2.0 (#1602)
- 6121a343 [Chore] Fix explicit src import (#1596)
- 0b71f399 [Bug] fix locale panel (#1603)
- 8b42be29 [Bug] Fix integration with CARTO (#1600)
- e8ba7a05 [Feat] add setMapControlVisibility action to set mapControl visibility (#1590)
- 78274562 [Feat] add supportedFilterTypes to dataset (#1594)
- 41b364a6 [Enhancement] s2 updateLayerMeta: push instead of spread (#1593)
- 1b5e0235 fix for long processing time of data-utils::unique (#1592)
- 91a52b16 [Enhancement] Use layer.visible prop in deck.gl when toggle layer visibility (#1591)
- c106ee06 [Chore] Create factory for LayerLegendHeader and LayerLegendContent (#1589)
- 878750c4 [Feat] Add MapsLayoutFactory for custom split map layouts (#1588)
- d8db8f6f [Chore] Refactored map control and decoupled action components (#1552)
- 2f8b19f2 [Feat] update keplergl-jupyter widget for JupyterLab 3, add build for conda-forge (#1572)
- 6947c8c8 [Feat] Added Russian localization (#1570)
- 9726a400 [Docs] Data container upgrade notes (#1575)
- 070b04b2 [Feature] Abstract Data Container (#1555)
## [2.5.4] - July 31 2021
- 62d03ab2 [Examples] update replace-component example (#1557)
- 089bb7a9 [Jupyter] Make showing User Guide link optional for jupyter widget (#1559)
- 5985d201 [Bug] Fix screenshot with images (#1558)
## [2.5.3] - July 18 2021
- a4a6734a [Docs] fix add data to map docs (#1551)
- 8524061e [Enhancement] add displayName to field and show displayName whenever available (#1538)
- a0d2a76b [Feat] Save and load highlightColor from layer config (#1550)
- a9b2ba07 [Examples] fix panel toggle exmaple, add layer hove info demo (#1549)
- 9bcb3415 [feat] Using tippy for map popover (#1539)
- 2e6f8b79 [Chore] refactored side-panel from class to functional component (#1536)
- 16fab11c [Bug] Geojson layer is not updated when dataset updated (#1533)
- 29cf0829 [Enhancement] add toggleLayerAnimationControl action (#1537)
- 01e93966 [Enhancement] add disableClose to map control (#1529)
- c6e5b8a6 [Feat] use appName in exported image html json map and csv data (#1528)
- 72354560 [Bug] Fix geojson layer duplicated index (#1530)
- 1ed0fd6d [Bug] fix histogram in range (#1531)
- 305edfcd [Docs] Update Map Styles Link (#1512)
- 1890133d [Chore] Update peer dependencies for styled-components (#1527)
## [2.5.2] - June 28 2021
- 1c7521b1 [Bug] Fix center map accuracy (#1502)
- b662892a [Bug] trim string value before passing to type analyzer (#1503)
- d35ad489 [Website] Add ecosystem Section (#1491)
- 1935c70a [Chore] Bump ini from 1.3.5 to 1.3.8 (#1385)
- b7d333b4 [Chore] Bump y18n from 3.2.1 to 3.2.2 (#1449)
- aeb8b45a [Chore] Bump ssri from 6.0.1 to 6.0.2 (#1460)
- 86577263 [Chore] Bump ua-parser-js from 0.7.22 to 0.7.28 (#1471)
- f0fda0e4 [Chore] Bump handlebars from 4.7.6 to 4.7.7 (#1472)
- 027aecfa [Chore] Bump url-parse from 1.4.7 to 1.5.1 (#1473)
- 6d5981a0 [Chore] Bump hosted-git-info from 2.8.8 to 2.8.9 (#1474)
- 54690fc8 [Chore] Bump browserslist from 4.14.7 to 4.16.6 (#1494)
- 846ec388 [Chore] Bump dns-packet from 1.3.1 to 1.3.4 (#1497)
- c6def591 [Chore] Bump ws from 6.2.1 to 6.2.2 (#1500)
- 614750f4 [Feat] Make keplergl-jupyter work with JupyterLab 3 (#1501)
- b4fcf7be [Feature]: add copy geometry to feature action panel (#1495)
- d786d0f3 [Bug] fix arc layer configurator render crash (#1490)
- b24cc57a [Enhancement] Support elevation in Icon layer (#1483)
- d51f3050 [Enhancement] Support elevation in Line layer (#1481)
- a09cd589 [Enhancement] Elevation zoom factor toggle (#1478)
- 8a6d2635 [Enhancement] add Japanese translation (#1469)
- 910eb5e7 [Chore] Move 'uber-licence' to devDep (#1450)
- 0b03f3a6 [Docs] fix typos on playback readme (#1482)
- 14c35fc0 [Doc] Add example using none mapbox base map (#1440)
## [2.5.1] - Mar 30 2021
- 16703c0b [CHORE] add utils.js to package.json
- a15109b3 [Feat] add timezone and timeFormat prop for time display in animation control and time - widget (#1411)
- 13c6171e Bump elliptic from 6.5.3 to 6.5.4 (#1435)
- cdcc0eea [Enhancement] make panel tab a factory (#172) (#1412)
- 173811a3 [bug]: Fixed range slider null selection bug (#1413)
- df3fee5c [Bug]: Updated babel dependencies (#1410)
- 119c8933 [Bug] fix update dataId not update layer data (#1414)
- b97b58a9 [Enhancement] Choose the default field to be integer if no reals are present (#1409)
- 072876df [bug] upgrade colorbrewer to 1.5.0 (#1439)
- d4698bb8 [Chore] add initial version of ts-smoosh (#1437)
- 6b39c43f [Chore] reformat changelog
## [2.5.0] - Mar 3 2021
- 58af5b65 [bug] Set colorbrewer version to 1.4.0 #1416 (#1428)
- a03250a4 CHORE: export processKeplerglDataset (#1422)
- ddaa8bf7 FIX: incorrect type strin -> string (#1421)
- 9e5bfdca [Feat] Duplicate layer and add layer from config (#1401)
- 29bfa406 [Bug] Interval animation doesn't stop when speed is set to 0 (#1397)
- 9476c293 feat: Converted dataset object to kepler table class (#1239)
- 498305cc [Bug] save to map provider (#1399)
- 6728b30f [Bug] Clamping slider values outside range (#1395)
- f0e51743 [Enhancement] add changedFilters to datasets when filter data is called (#1396)
- 8d68001d [Bug] Add style prop to kepler-gl container (#1398)
- d295c762 [Enhancement]: Save filter speed to schema (#1394)
- fb801d70 [Chore] Update license year (#1393)
- fa6deff0 (0116-babel-deps) [Enhancement] Show an error notification for errors in deck (#1373)
- 5d4b4547 [Bug] Bug fixes (#1388)
- 35bf90a9 [Bug]: FIxed issue with map popover object being null (#1384)
- fc2fb04d [CHORE] Typescript fixes (#1383)
- d6e28377 [Bug] Fix 12350 format in tooltip (#1327)
- 2ea82deb [Feat] fixed augumented numeric formats with ~ (#1369)
- e88b4f19 [Bug] Fix speed button input on timeline (#1376)
- 7aeca210 [Enhancement] bump loaders.gl to 2.3.3 (#1366)
- eff0a15d [Enhancement] Choose layer color by default (point layer) (#1367)
- 823405ab [Bug] fix arc layer configurator (#1375)
- a11c63c3 [Enhancement] avoid calling mapPopover setstate infinitely (#1346)
- ae234e72 [Bug] Prevent crash in react-map-gl when zoom cannot be calculated (#1365)
- be61b70b [Enhancement] automatically re-project GeoDataFrame to EPSG:4326 (#1350)
- 2aad97f3 [Bug] Added better check for bins in bottom widget (#1361)
- ef8bdbaf [Chore]: Upgraded to node 12, migrate from TravisCi to Github actions (#1326)
- c7726680 [Enhancement]: Added uiStateUpdater showDatasetTable in order to intercept showDatasetTable action (#1363)
- f33c76b4 [FEAT] Add rename dataset reducer (#1362)
- 027985af [Bug] Fixed color picker closure when selecting first custom palette value) (#1347)
- 7f3be27f [Enhancement] check bounds before calling fitbounds (#1348)
- f046ac1b [Enhancement] better arc layer column config layout (#1345)
- 2ea853b1 [Bug] Fixed bug with fixed radius after remove size field in pointlayer (#1343)
- 32d80182 [Bug] fixed geocoder crash and added ability to pass coordinates (#1342)
- c2ba7f04 [Enhancement] Fix negative button border (#1344)
- 55f74dcd [Enhancement] added check for oldLayerData (#1357)
- 223af2b6 [Enhanment] extract valdiate layer and validate filter function (#1349)
- 06ea669d [Enhancement] pass dataset to renderLayer function (#1341)
- 524fc591 [Feat] Visual channel refactor generalize get accessor and updateTrigger (#1338)
- c1d4943b [Enhancement] Adjust input light styles (#1340)
- 5642ca8b [Chore] SidePanel panels are now passed through only through props or default ones (#1339)
- f802f393 [Chore] Decouple table from dataset Id (#1337)
- c7f50fdc [Chore] Export KeyEvent and downloadFile utils (#1335)
- 335f82a3 [Enhancement] Added the ability to pass supported data types when exporting (#1336)
- 239051f0 keplergl==0.2.2
- 55053230 keplergl-jupyter@0.2.2
- 1bac01ab update example app versions
## [2.4.0] - Nov 30 2020
- 259022ee [Upgrade] Support React 17 (#1323)
- 6c48c422 [Enhancement] Export more utils (#1317)
- 81bc6b37 [Enhancement] make provider injector function to get injectedApp back (#1318)
- 5e2b8988 [Enhancement] update spanish and catalan translations (#1319)
- 334f0b76 [Enhancement] extend template for light theme (#1305)
- abbe032e [Chore] Dependency upgrade (#1314)
- f0a966cd [Bug] check category (#1316)
- 7f5282b4 [Feat] add incremental timeline animation (#1315)
- c1a251de [Enhancement] make visConfigSwitch a factory (#1313)
- 37cf1457 [Enhancement] Enable polygon filter on h3 layer (#1306)
- bdbea264 [Feat] allow changing dataset in layer config (#1312)
- 28f5204d [Bug] fix radio button style (#1310)
- c990a477 [Enhancement] Upgrade d3-scale (#1311)
- ea69da8a [Enhancement] fix item-selector dropdown value overflow nad tooltip pin color (#1309)
- d94de814 [Chores] Exported default formatters (#1308)
- 307cd3d4 [Bug] avoid duplicated h3 layer detection (#93) (#1307)
- 8bc11a37 [Enhancement] Add inputBGdActive for light theme (#1301)
- 3f0f7a6c [Bug] Check for valid layer pinned prop before performing comparison (#1297)
- 42acc1cf [Bug] Fixed bug when reversing color schema (#1296)
- 9949888f Table of content -> Table of contents
- 9a13ce68 [Chores] Fixed security vulnerabilities and added new factories (#1294)
- 3276cef3 Merge branch 'upwards_update'
- 70687cab [Docs] Add usage example in doc for _repr_html_ method (#1282)
- 32b519af [Chores] Updated yarn.lock and file license
- aecbdc55 [Bug] Fixed typo in renderedSize cell-size (#90)
- 9f8b84e1 upgrade react-palm to 3.3.7 (#89)
- 7410cfa5 [Enhancement] Disable layer select option when no data is loaded (#88)
- 7a69c865 data table style tiny adjustment
- 21d09475 add fontFamily to input style
- 96c37618 export renderSize from cell-size.js
- f356fe43 [Enhancement] Added modalStyle prop Portaled to override default values (#83)
- b6fd3916 [Enhancement] UI input style improvement (#1284)
- 92a2bb65 [Enhancement] Add preserveLayerOrder to layer merger (#1288)
- 480ead69 [Enhancement] Add a CTA button type (#80) (#1286)
- d882ba09 [Enhancement] Layer config: Add column validators (#1287)
- e8fc1c5e Export typeahead (#1289)
- ad5ec020 [Enhancement] render last added filter first (#1285)
- 42569ec3 [Enhancement] Export StyledDropdownSelect (#1283)
- 1b748471 [Jupyter] add _repr_html_ method (#1202)
- fbbd4c45 [Enhancement] export more utils and schema (#1280)
- e5a6f9e8 [Enhancement] Improve schema and utils typing (#1279)
- ad651700 [Enhancement] Create factory for histogram and line chart, add brush handle to range brush (#1274)
- 6681d2e2 [Enhancement] pass light theme through to item selector (#1276)
- 0184cf1e [Enhancement] add setTimeAnimation action (#70) (#1263)
- 908a5e2b [Chores] Bump http-proxy from 1.18.0 to 1.18.1 (#1268)
- 7acb3d66 [Auto] Bump elliptic from 6.5.2 to 6.5.3 (#1210)
- 490cafb0 [Jupyter] Updated Docs for Jupyter (#1267)
- a7865c8d [Enhancement] Added factory for the icons of the map control (#1273)
- 77b4e018 [Enhancement] switch style tweak (#1262)
- 9dbb9e73 [Bug] fix dropdown list item lineheight (#1261)
- d677c18f [Feat] Move more css to theme and create more factories (#1248)
- 2ebd1368 [Enhancement] Typescript improvement (#1254)
- 959f1a33 [Bug] fix export image size not set (#1257)
- 678aacc2 [Upgrade] upgrade react-palm to 3.3.6 (#1255)
- f54d6afb [Enhancement] Map control style improve (#1253)
- 3e40a48c [Website] disable banner (#1252)
- 3b81b59f [Enhancement] Add new theme variables (#1245)
- b09aa2e1 [Bug] Fix load data modal crash (#1244)
- 42670d89 [Bug] Fix provider preview image during map save and share flow (#1243)
- efd3676d [Bug] Fix component exports
- 0b91f4d1 [Enhancement] Improve react intl support (#1237)
- 7ff0c459 [Enhancement] Save merger and schema to visState (#1235)
- ## [2.3.2] - Aug 16 2020
- 10468e19 [Enhancement] Export more utils (#1233)
- 242dcf99 [Enhancement] Upgrade dependencies and fix vulnerabilities (#1236)
- 3d72066f [Bug] Fixed image export bug due to mapbox attrition logo (#1229)
- f4951102 [Feat] add readonly prop to KeplerGl component (#1220)
- 04991352 [Enhancement] Added props to panel-header iconComponent (#64) (#1219)
- b91785ec [Feat] Auto detect h3 layer from h3 field data (#53) (#1218)
## [2.3.1] - Aug 4 2020
- [Bug] fix tooltip config, add boolean formatter (#1216)
- [Enhancement] Geocoder interaction improvements (#1214)
- [Enhancement] add options.autoCreateLayers to addDataToMap (#1215)
- [Bug] Hide BottomWidgetContainer nothing to render (#1213)
- [Enhancement] Cleanup unused babel plugins (#1211)
- [Bug] fix file handler row parsing to support single geojson feature (#1212)
- [Enhancement] Add KeplerGl.onDeckInitialized callback (#1193)
- [Enhancement] Render geocode in readOnly mode (#1177)
- [Feat] pass initialUiState to prop (#1187)
- [Docs] Fix `replace-component` Readme (#1207)
- [Jupyter] Convert to gdf to a dataframe instead of a copy (#1201)
- New image export approach (#1199)
- Add prop to disable file extension checking (#1195)
- Load: extract extensions from loader objects (#1194)
- Add `visState.loaders` to let app inject a list of loaders.gl loaders. (#1192)
- Enable modal prop types (#1190)
- Enable modal types (#1189)
- Add types to top-level KeplerGl component (#1188)
- Add typescript types for upload modal and components (#1185)
- Add types for composer helpers (#1186)
- [Feat] add zoom to coordinate tooltip (#1179)
- [Enhancement] export more layer configurator components (#1176)
- [Bug/Enhancement] Pass PanelHeader props to the onClick handler of action items (#1181)
- [Bug] Fix import of the user guide link (#1182)
- [examples] update example version to 2.3.0
## [2.3.0] - July 6 2020
- [Enhancement] Improve animation sliders (#1157)
- [Enhancement] speed control step to 0.001 (#1155)
- [website] remove unused env, relax on package engines requirement (#1173)
- [Feat] Pinned tooltip + Compare (#1132)
- [Feat] Integration with loaders.gl 2.2 (#1156)
- [Feat] Bump deck.gl and luma.gl to v8.2 (#1166)
- [Chore] Bump websocket-extensions from 0.1.3 to 0.1.4 (#1138)
- [Website] Add 2020 Survey (#1154)
- [Bug] Tooltip formatting (#1129)
- [Jupyter] Default centerMap to False so that zoom map state configurations are not (#1142)
- [Enhancement] close modal when press escape key (#1134)
- [Enhancement] Export time widget factories (#1133)
- [Enhancement] filter invalid value when calculate trip layer domain (#1131)
- [Feat] enable tooltip formatting in interaction config (#1102)
- [Feat] Add type definition (#1116)
- [RFC] table class RFC (#1109)
- [Docs] adding missing bracket (#1094)
- add side-panel inner class (#1113)
- [Bug] add hexagon layer translation (#1114)
- [Jupyter] fix gitignore add missing files (#1118)
- [Jupyter] Publish keplergl jupyter 0.2.0 (#1110)
- [Enhancement] fix attribution color, add kepler smaller font (#1092)
## [2.2.0] - May 10 2020
- [Enhancement] Added Editor and FeatureActionPanel factories (#1093)
- [Feat] Geocoder Search (#1068)
- [Doc] Updated release docs with gh-release instructions (#1059)
- [Bug] Aggregation layer fix out-of-domain coloring for valid strings (#1070)
- [Feat] Add Spanish and Catalan translation (#1087)
- [Doc] Update playback documentation (#1072)
- [Bug] Fix link to umd folder
- [Doc] Refactored doc files for better structure (#1084)
- [Enhancement] Add Portuguese translations (#1063)
- [Bug] Fixed download file for microsoft edge (#1074)
- [Bug] Fix broken redirects in jupyter user guide (#1077)
- [Docs] update upgrade guide (#1044)
## [2.1.2] - April 3 2020
- [Enhancement] Add support for localization and Finnish translations (#994)
- [Bug] Fixes for case sensitive fields in CARTO storage (#1057)
- [Chore] Removed engine requirements (#1049)
- [Chore] Improve the secondary button color for base theme (#1048)
- [Chore] Updated examples to v2.1.1 (#1043)
## [2.1.1] - March 31 2020
- [Chore] Updated example to 2.1.0 (#1041)
## [2.1.0] - March 30 2020
- [Enhancement] Remove table cell char limit and increased cell header height (#1038)
- [Docs] CHANGELOG.md markup update (#1029)
- [Enhancement] add classes to button for easier style override (#1035)
- [Bugfix] Remove incorrect outlier calculation for better map centering (#1026)
- [Bug] fix scatterplot stroke width in pixels (#1018)
- [Test] e2e test (#940)
- [Enhancement] Move layer panel visible toggle to end (#1017)
- [Bug] export formatCsv (#1022)
- [Enhancement] Refactor load file tasks to better handle multiple file types (#986)
- [Bug] Fixed carto-provider example: importing the correct kepler.gl processor path (#1016)
- [Feat] Add satellite basemap (#1007)
- [Feat] Improved data table rendering (#1010)
- [Chore] Upgrade to Node 10 (#1009)
- [Feat] S2 layer (#800)
- [BUG] Fix provider test (#1008)
- [Enhancement] better handling provider tile update (#1000)
- [Enhancement] Loading and error feedback for shared maps loaded from URL #1002 (#1003)
- [Enhancement] adjust button color in light theme (#1004)
- [Bug] Reset selected provider status after loading and before sharing (#999)
- [Feat] Add more light themes (#1001)
- [Bug] fix bug map loaded with custom map style not save correctly (#993)
- [Bug] Fix username set to null after loading map from URL #995 (#996)
- [Enhancement] Decrease filter step size for small domains (#958)
## [2.0.1] - March 9 2020
- [Bug] Add cloud-providers.js to package.json (#991)
- [Feat] CARTO provider for cloud storage (#985)
- [Bugfix] Fix typo on variable name (#987)
- [Enhancement] pass appWebsite to logo component (#984)
- [Chore] Removed testing from publish action (#980)
- [Bug] remove console.log in filter.utils
- [Feat] Load cloud map with provider (#947)
## [2.0.0] - Feb 25 2020
- [Enhancement] Independently customize Geojson layer fill stroke opacity (#966)
- [Bug] Fix text collision on toggle input (#973)
- [Chore] upgrade prettier to 1.19 to better handle single line function compositions (#971)
- [Style] run prettier and lint on tests (#968)
- [Bug] Select dataset filter bug (#965)
- [Bug] fix hexagon layer hover crash (#964)
- [Style] run prettier (#963)
- [Feat] Allow adding custom side panel tabs
- [Chore] Fix prettier update config (#767)
- [Bug] Fixed json map export and added tests (#956)
- [Bug] Resolve deck luma version conflict (#955)
- [Feat] upgrade to deck.gl@8 (#889)
- [Feat] UI for save map to backend storage (#906)
- [Bug] Fixed geo-filter extra layer issue (#936)
- [Bug] Fix low projection accuracy in higher zoom level (#946)
- [Bug] fix hexagon layer hover cause app crash (#933)
- [Bug] fix heatmap crash when there is no filter (#934)
- [Bug] should add redux devtools in demo app by default (#932)
- [Feat] Gpu data filter (#878)
- [Feat] Global export of image export constants (#923)
- [Bug] Fix mix int/float column interpreted as sting (#927)
- [Chore] Correctly update the copy changes to actions.js (#914)
- [Enhancement] Hide data modal in export map (#920)
- [Chore] remove action to publish to github package repo (#919)
- [Feat] Geo-Operations: create and apply polygon filters (#595)
- [Bug] Fix h3 layer projection error at edge of world map (#918)
## [1.1.13] - Jan 17 2020
- [Enhancement] added coordinate to tooltip export configuration (#876)
- [Bug] mapState not applied in exported map html (#913)
- [Chore] Update grammar, cleanup whitespace, fix broken link (#912)
- [Docs] add Upgrade-guide
- [Docs] Remove hyperlink with "Advanced Usage" (#903)
- [Docs] add initial cloud provider api (#868)
- [Enhancement] treat type-analyzer type: NUMBER as strings (#891)
- [Bug] remove argument.length check in injector (#899)
- [Enhancement] add disabled to layer-configurator group (#897)
- [Bug] Fix a bug in file-drop.js that causes error in server side render (#896)
- [Bug] Ensure all colors returned from get3DBuildingColor are RGB arrays (#871)
- [Chore] License 2020 (#883)
- [Bug] Correctly copy over field.filterProps when merging multiple filters (#884)
- [Bug] Fix newDateEntries typo and formatting fixes (#870)
- [Bug] Fix multiple geojson layer found when properties contain object and array (#872)
- [Bug] fix demo-app resolve react-redux (#866)
## [1.1.12] - Dec 14 2019
- [Bug] Remove sqrt, log from default color aggregation for count (#856)
- [Bug] fix cluster point count, cluster layer failed to render on export image (#855)
- [Style] Remove extra semicolon (#850)
- [Docs] Update api-reference overview links
- [Bug] Don't merge domain when update filter name (#841)
- [Enhancement] React 17: replace componentWillReceiveProps and componentWillMount (#745)
- [Bug] Fixed delete dataset action (#835)
- [Chore] Github action to publish npm package (#825)
- [Enhancement] Demo App Cloud provider refactor (#831)
## [1.1.11] - Nov 13 2019
- [Bug] Correctly save filterProps to field while merging filter from config (#829)
- [Docs] fixing api reference broken link (#812)
- [Bug] fix empty geometry causing trip layer detection to fail (#826)
- [Docs] update a-add-data-to-the-map.md with embed geometries in CSV
## [1.1.10] - Oct 30 2019
- [Docs] Add instructions for image and weblink in tooltip (#797)
- [Enhancement] Add Bug Report User Guides to demo app panel header (#787)
- [Docs] Fix typos in add-data-workflow-user-guide (#807)
- [Feat] add stdev and variance aggregators to aggregation layer (#809)
- [Feat] Multiple datasets per filter (#773)
- [Bug] Fixed loading urls with query params (#780)
- [Jupyter] Publish keplergl jupyter 0.1.2 (#784)
## [1.1.9] - Oct 11 2019
- [Enhancement] improve Geojson processing performance and error handling (#781)
- [Enhancement] add file format instruction to file upload (#770)
- [Bug] Filter invalid H3 IDs (#775)
- [Bug] fix readonly in addDataToMap (#783)
- [Enhancement] Expose LayerHoverInfoFactory and CoordinateInfoFactory (#769)
- [Bug] Fixed dropbox upload in Firefox. Passing explicit file name to upload function
- [Enhancement] Demo app sample info (#758)
- [Enhancement] Generate custom map style icon from style url (#762)
- [Jupyter][bug] fix lab widget window responsiveness, add version to header (#771)
- [Jupyter][docs] add installation instruction to jupyter widget user guide
- [Docs] Update add data to map docs
- [Jupyter] Publish keplergl-jupyter for Jupyter labs (#764)
- [Jupyter][bug] fix flashing html export when open in window (#756)
- [Enhancement] Add logo and GA to exported html (#757)
- [Docs] update Trip Layer md
## [1.1.8] - Sep 30 2019
- [Bug] Fix saving animation speed (#752)
- [Feat] Add Trip Layer - Final (#699)
- [Feat] add custom color editor (#601)
- [Chore] add coverall (#748)
- [Docs] mapboxApiUrl usage examples (#737)
- [Feat] Support Policy page (#724)
## [1.1.7] - Sep 11 2019
- [Enhancement] Create more factories from SourceDataCatalog, add onClickTitle (#720)
- [Enhancement] Express example (#704)
- [Bug] check new layers based on new dataset id (#721)
- [Feat] Add Log and Sqrt scale (#670)
- [Chore] Add a script to automatically edit kepler.gl version (#714)
## [1.1.6] - Sep 5 2019
- [Bug] Upgrade to deck 7.1.11 (#715)
## [1.1.5] - Sep 4 2019
- [Bug] Unlock luma.gl version (#713)
- [Bug] fix heatmap getBounds (#711)
- [Feat] HTML Export: provide read only mode (#709)
## [1.1.4] - Sep 3 2019
- [Bug] Lock deck.gl to version 7.1.5 (#688)
- [Enhancement] add keepExistingConfig option to addDataToMap (#619)
- [Bug] Fixed issue with geojson fields (#683)
- [Enhancement] Switch from callback refs to createRef (#622)
- [Bug] Fix uglify error compiling dom-to-image in prod (#682)
- [Enhancement] pass set useDevicePixels to deck.gl to plot container (#663)
- [jupyter] Upgrade to kepler.gl v1.1.3 (#660)
- [Chore] use xvfb as a service in travis-ci (#669)
## [1.1.3] - Aug 5 2019
- [Enhancement] Use preserved state to apply keplerGlInit. when mint=false (#649)
- [Enhancement] Replace react-data-grid with react-virtualized (#629)
## [1.1.2] - Aug 1 2019
- [Bug] Fix issue in Layer.registerVisConfig preventing custom boolean properties
- [Enhancement] Simplify map layer visible logic in splitMaps and deck, mapbox overlay renders (#642)
- Netlify badge (#641)
- [Enhancement] Add 3d building color editor (#633)
- [Enhancement] Update mapbox-gl css version (#634)
- [Bug] fix SolidPolygonLayer import causing 3d building layer crash (#625)
- [Bug] Don't show null for labels if there is no data (#626)
- [Bug] add deckGlProps to pass preserveDrawingBuffer to plot container (#624)
- [Enhancement] DemoApp: explicitly pass window.fetch to Dropbox to suppress warning (#621)
- [Enhancement] Use theme in histogram plot color (#607)
- [Enhancement] Bump supercluster version (#590)
- [Feat] Add mapboxApiUrl to `KeplerGL` (#554)
- [Docs] Update link to the GitHub repo (#589)
- Fixed python3 compatiability and wrong variable in string format (#587)
- [Bug] Remove isMouseOver state from MapPopover (#577)
- [Docs] fix: Correct Custom Theme Example Link (#578)
- [Bug][jupyter] Replacing print statement with () to make it Python 3 compatible (#582)
- Update build command: remove yarn since netlify runs yarn by default (#585)
- [Jupyter] cleanup examples (#574)
- [Feat] Publish keplergl jupyter 0.1.0a5 (#572)
- [Chore] Add issue template for kepler.gl Jupyter
- [Bug] Solve issue #547 avoid crash application (#564)
## [1.1.1] - Jun 24 2019
- [Bug] Fix radius rendering when value = 0 (#551)
- [Docs] Updating Layer User Guides (#373)
- [Feat] Display mouse coordinate (#550)
- [Docs] Replace CLA with DCO (162a9f7)
- [Style] fix README typo (c1fafbf)
- [Docs] Add jupyter widget user guide link o README (17d3ec8)
- [Chore] Add jupyter widget issue templates (a40c1fe)
- [Feat] Bump deck.gl to v7.1.5 (#568)
- [Feat] Add ScenegraphLayer (#540)
- [Feat] Add kepler.gl-jupyter python package (#543)
## [1.1.0] - Jun 15 2019
- Upgrade to deck.gl 7.1 (#559)
- [Docs] update user documentation with newer layers and features (#552)
- Upgrade to deck.gl 7 and luma.gl 7 (#544)
- [Bug] Display color legend for stroke color scale (#546)
- [Enhancement] Image export error handling (#538)
- [Bug] Fix typo on layer-configurator.js (#549)
## [1.0.0] - May 23 2019
- [Enhancement] Detecting mapbox token validity (#513)
- [Enhancement] Netlify webpack optimization (#525)
- [Feat] More control over point label (#515)
- [Enhancement] Applied changes for enable netlify deployment (#516)
- [Enhancement] Refactored modal dialog to be more responsive (#501)
- [Bug] fix side panel unnecessary rerender (#512)
- [Feat] Upgrade deck.gl to 6.4 (#456)
- [BUG] Fixed layer list sorting dnd effect (#509)
- [Feat] add onViewStateChange callback to KeplerGl (#506)
- [Enhancement] More granular speed control (#500)
- [Docs] update all uber links to keplergl org (#502)
## [1.0.0-2] - May 2 2019
- [Bug] Fix missing default map styles after loading custom map style from saved json (#490)
- [Bug] Fix `fix radius` in point layer unclickable (#491)
- [Bug] fix image export doesnt get called when map rendered (#494)
- [Enhancement] Merge export config and map into one interaction (#488)
## [1.0.0-1] - Apr 23 2019
- [Bug] Fix point layer brushing and highlight (#487)
- [Feat] Add a light theme to KeplerGl Prop (#489)
- [Bug] Fix browse for file upload (#486)
- [Enhancement] Cleanup load map style tasks (#472)
- [Enhancement] load svg icons from aws, add bundle analyzer, reduce bundle size -1mb (#479)
- [Bug] upgrade kepler.gl version in examples
- [Docs] Fixed link to addDataToMap (#459)
- [Enhancement] expand bottom widget to full length if in read only mode(#465)
## [1.0.0-0] - Apr 2 2019
- [Enhancement] Replace react anything sortable with React-Sortable-Hoc
- [Enhancement] Replaced DI object storage with an actual Map
- [Feat] Able to overwrite custom theme
- [Chore] Upgraded waypoint library to support react16
- [Chore] Dropbox UI enhancements
- [Bug] Fix points disappear while panning across 180th meridian
- [Chore] Tweak save and export documentation
- [Chore] Add oss header and middleware.js
- [Chore] Added file header for user-guide.js
- [Feat] Single map page export
- [Chore] Upgraded libraries: react, styled-components
##### BREAKING CHANGES
- React 15 is no longer supported
- Style components v4+ is now required because is now a peer dependency
## [0.2.4] - Mar 13 2019
- [Enhancement] Slider: use clientX to calculate delta to support windows IE and Tableau kepler.gl (#431)
- [Bug] Range slider: correctly setting ranch brush selection when mount (#433)
- [Feat] Add getMapboxRef prop (#372)
- [Enhancement] Automatically loading custom dependencies when inject custom component factor (#430)
- [Bug] Range brush width change should not trigger onBrush callback (#432)
- [Bug] fix processor export, support previous (#428)
## [0.2.3] - Mar 3 2019
- [Docs] Export processors and Add Docs (#421)
- [Docs] Add docs for actions and updaters (#368)
- [Bug] Fix image export component failed to render (#418)
## [0.2.2] - Feb 26 2019
- (HEAD -> master, origin/master, origin/HEAD) [Bug] Fixed web doc link (#369)
- [Bug]: Fixed example dependencies (#362)
- [Bug] Fix missing 3d building layer in image export (#361)
- [Bug] fix 3d building layer missing mapbox token, fix image export (#360)
- [Docs] Add API Docs (#279)
- [Feature] UMD module in unpkg (#349)
- Disabled banner (#352)
## [0.2.1] - Feb 6 2019
- (HEAD -> master, origin/master) [Feature] Collapsible layer group (#350)
- [Enhancement] Added default feature flags to disable dropbox (#338)
- [Bug]: fix alias and module resolve in webpack.config.local (#348)
- [Enhancement] Upgraded Webpack, Babel and Eslint (#342)
- [Feature] Notification systems with new UI panel and helpers to generate messages (#333)
- GitHub browser history (#321)
- [Bug] Fix Maximum call stack size exceeded when double click (#323)
- [Docs] Export identity actions individually and add JSDocs (#290)
- [Docs] Edit PR guidance in contribution guidelines (#320)
- [Docs] Add Contribution Guidelines (#261)
- (overide-style) [Enhancement] Upgrade type-analyzer to pass 0/1 as integer (#317)
- [Typo] Misspellings in comments (#314)
- [Housekeeping] Update Copyright header to 2019, Happy New Year (#316)
- Feat: Implemented Dropbox integration (#312)
## [0.2.1-beta.1] - Dec 17 2018
- [Feature] Added a Tiled 3D Building Deck.gl Layer (#270)
- [Enhancement] Fossa Integration (#309)
- [Enhancement] Change BottomWidget to pure functional component (#249)
- [Docs]: updated docs for better readability(alignments) (#255)
- [Enhancement] export processKeplerglJSON from processors (#299)
- [website] BugFix: missing tracking payload (#311)
- [Enhancement] Hexbin Layer: smaller radius step and dynamic hover (#310)
- [Bug] remove unpm from yarn.lock (#303)
- [Enhancement] use mapbox style url for default (published) uber map styles (#292)
- [Feature] Load data and kepler.gl file using URLs (#260)
## [0.2.1-beta.0] - Nov 16 2018
- [Bug] Fixing global color issue #130 for the heat map (#277)
- [Enhancement] More exports (#284)
## [0.2.0] - Nov 16 2018
- [Enhancement] Export side panel component factories (#282)
- [Feature] Upgrade to deck.gl v6 (#272)
- [Refactor] Small update of readability (#250)
- [website] Click logo should go to kepler.gl website (#251)
- [Enhancement] Add contribution guidelines on contributing.md file (#108)
- [Enhancement] Scan through all text labels to get the entire character set (#245)
## [0.1.6] - Oct 3 2018
- [Enhancement] save and load text label config (#242)
## [0.1.5] - Oct 2 2018
- [Enhancement] Fix z-fighting issue between text label and scatter plot (#234)
- [Bug] Sort color steps (#241)
- [Bug] fix a bug where field is valid is always false (#240)
## [0.1.4] - Sep 15 2018
- [Enhancement] Null check for missing arc column (#235)
## [0.1.3] - Sep 10 2018
- [Enhancement] Add H3 layer (#217) (#198)
- [Enhancement] Add text label in Point layer (#166)
## [0.1.2] - Aug 24 2018
- [Bug] Fix server render error, remove react-ace (#206)
## [0.1.1] - Aug 24 2018
- [Enhancement] Bump react-palm@1.1.2 (#215)
## [0.1.0] - Aug 21 2018
- Upgrade to Deck.gl v5.3.4 (#153)
## [0.0.28] - Aug 8 2018
- Fix cluster layer label rendering
## [0.0.27] - Aug 3 2018
- Fix unable to fetch external stylesheets when taking the screenshot (#187)
- [Bug] Avoid repeatedly calling HIDE_EXPORT_DROPDOWN (#180)
## [0.0.26] - Aug 3 2018
- [Bug] fix mapStyles loaded as an empty object after load map from config (#169)
## [0.0.25] - Jul 10 2018
- [Bug] Create ellipsis when dataset name is a long name (#109)
- [Enhancement] Save custom reducer initialState, add custom-reducer example (#159)
## [0.0.24] - Jul 5 2018
- [Bug] fix image export failing (#155)
- [Enhancement] Add default map styles to mapStyle reducer initial state (#147)
## [0.0.23] - Jun 28 2018
- [Enhancement] Consider all mew layers when calculating the map bounds (#142)
- [Bug] Fix icon layer instructions (#131)
- [Website] add banner to demo app for survey (#117)
## [0.0.22] - Jun 10 2018
- [Bug] new filter shouldn't be enlarged if there is already an enlarged filter (#93)
- [Enhancement] Enable ordinal aggregation in aggregation layer (hex, grid, cluster) (#29)
## [0.0.21][0.0.20] - Jun 4 2018
- [Bug] TimeRangeSlider should not cache props.onChange (#100)
================================================
FILE: FILE-HEADER
================================================
SPDX-License-Identifier: MIT
Copyright contributors to the kepler.gl project
================================================
FILE: LICENSE
================================================
Copyright contributors to the kepler.gl project
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
================================================
FILE: README.md
================================================
<p align="right">
<a href="https://npmjs.org/package/kepler.gl">
<img src="https://img.shields.io/npm/v/kepler.gl.svg?style=flat" alt="version" />
</a>
<a href="https://travis-ci.com/keplergl/kepler.gl">
<img src="https://api.travis-ci.com/keplergl/kepler.gl.svg?branch=master" alt="build" />
</a>
<a href="https://github.com/keplergl/kepler.gl">
<img src="https://img.shields.io/github/stars/keplergl/kepler.gl.svg?style=flat" alt="stars" />
</a>
<a href='https://opensource.org/licenses/MIT'>
<img src='https://img.shields.io/badge/License-MIT-blue.svg' alt='MIT License' />
</a>
<a href='https://app.fossa.com/projects/custom%2B4458%2Fgithub.com%2Fkeplergl%2Fkepler.gl?ref=badge_shield'>
<img src='https://app.fossa.com/api/projects/custom%2B4458%2Fgithub.com%2Fkeplergl%2Fkepler.gl.svg?type=shield' alt='Fossa' />
</a>
<a href="https://app.netlify.com/sites/keplergl/deploys">
<img src="https://api.netlify.com/api/v1/badges/0c9b895c-acd0-43fd-8af7-fe960181b686/deploy-status" alt="Netlify Status"/>
</a>
<a href='https://coveralls.io/github/keplergl/kepler.gl?branch=master'>
<img src='https://coveralls.io/repos/github/keplergl/kepler.gl/badge.svg?branch=master' alt='Coverage Status' />
</a>
</p>
<h1 align="center">
kepler.gl | <a href="https://kepler.gl">Website</a> | <a href="https://kepler.gl/#/demo">Demo App</a> | <a href="https://docs.kepler.gl/">Docs</a>
</h1>
<h3></h3>
[<img width="120" alt="Kepler.gl" src="https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/website/icons/kepler.gl-logo.png">](http://kepler.gl)
[<img width="600" alt="Kepler.gl Demo" src="./screenshots/screenshot.png">](https://kepler.gl/demo)
[Kepler.gl][web] is a data-agnostic, high-performance web-based application for visual exploration of large-scale geolocation data sets. Built on top of [MapLibre GL](https://maplibre.org/) and [deck.gl](https://deck.gl/), kepler.gl can render millions of points representing thousands of trips and perform spatial aggregations on the fly.
Kepler.gl is also a React component that uses [Redux](https://redux.js.org/) to manage its state and data flow. It can be embedded into other React-Redux applications and is highly customizable. For information on how to embed kepler.gl in your app take a look at the [documentation](https://docs.kepler.gl/).
## Links
- [Website][web]
- [Demo][demo-app]
- [Examples][examples]
- [Get Started][get-started]
- [App User Guide][user-guide]
- [Jupyter Widget User Guide][user-guide-jupyter]
- [Documentation][docs]
- [Stack Overflow][stack]
- [Contribution Guidelines][contributing]
- [Api Reference][api-reference]
- [Roadmap][roadmap]
## Env
Use Node 18.18.2 or above, older node versions have not been supported/ tested.
For best results, use [nvm](https://github.com/creationix/nvm) `nvm install`.
## Install kepler.gl modules
Kepler.gl consists of different modules. Each module can be added to the project like this:
```sh
npm install --save @kepler.gl/components
// or
yarn add @kepler.gl/components
```
kepler.gl is built upon [mapbox][mapbox]. You will need a [Mapbox Access Token][mapbox-token] to use it.
If you don't use a module bundler, it's also fine. Kepler.gl npm package includes precompiled production UMD builds in the [umd folder](https://unpkg.com/kepler.gl/umd).
You can add the script tag to your html file as it follows (latest version of Kepler.gl):
```html
<script src="https://unpkg.com/kepler.gl/umd/keplergl.min.js" />
```
or if you would like, you can load a specific version:
```html
<script src="https://unpkg.com/kepler.gl@3.0.0/umd/keplergl.min.js" />
```
## Develop kepler.gl
Take a look at the [development guide][developers] to develop kepler.gl locally.
## Basic Usage
Here are the basic steps to import kepler.gl into your app. You also take a look at the examples folder. Each example in the folder can be installed and run locally.
### 1. Mount reducer
Kepler.gl uses Redux to manage its internal state, along with [react-palm][react-palm] middleware to handle side effects.
You need to add `taskMiddleware` of `react-palm` to your store too. We are actively working on a solution where
`react-palm` will not be required, however it is still a very lightweight side effects management tool that is easier to test than react-thunk.
```js
import {createStore, combineReducers, applyMiddleware, compose} from 'redux';
import keplerGlReducer from '@kepler.gl/reducers';
import {enhanceReduxMiddleware} from '@kepler.gl/middleware';
const initialState = {};
const reducers = combineReducers({
// <-- mount kepler.gl reducer in your app
keplerGl: keplerGlReducer,
// Your other reducers here
app: appReducer
});
// using createStore
export default createStore(
reducer,
initialState,
applyMiddleware(
enhanceReduxMiddleware([
/* Add other middlewares here */
])
)
);
```
Or if use enhancer:
```js
// using enhancers
const initialState = {};
const middlewares = enhanceReduxMiddleware([
// Add other middlewares here
]);
const enhancers = [applyMiddleware(...middlewares)];
export default createStore(reducer, initialState, compose(...enhancers));
```
If you mount kepler.gl reducer in another address instead of `keplerGl`, or the kepler.gl reducer is not
mounted at root of your state, you will need to specify the path to it when you mount the component
with the `getState` prop.
Read more about [Reducers][reducers].
### 2. Mount Component
```js
import KeplerGl from '@kepler.gl/components';
const Map = props => (
<KeplerGl id="foo" width={width} mapboxApiAccessToken={token} height={height} />
);
```
### Props
| Prop Name | Type | Default Value | Description |
| ----------------------------- | ------------- | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id` | String | `map` | The unique identifier for the KeplerGl instance. Required when multiple KeplerGl instances exist. It maps to the state in the reducer (e.g. component with id `foo` can be found in`state.keplerGl.foo`). |
| `mapboxApiAccessToken` | String | `undefined` | API token for Mapbox, used for rendering base maps. Create a free token at [Mapbox](https://www.mapbox.com). |
| `getState` | Function | `state => state.keplerGl` | Function that specifies the path to the root KeplerGl state in the reducer. |
| `width` | Number | `800` | The width of the KeplerGl UI in pixels. |
| `height` | Number | `800` | The height of the KeplerGl UI in pixels. |
| `appName` | String | `Kepler.Gl` | The app name displayed in the side panel header. |
| `version` | String | `v1.0` | The version displayed in the side panel header. |
| `onSaveMap` | Function | `undefined` | A function called when the "Save Map URL" in side panel header is clicked. |
| `onViewStateChange` | Function | `undefined` | Triggered when the map viewport is updated. Receives `viewState` parameter with updated values like longitude, latitude, zoom, etc. |
| `getMapboxRef(mapbox, index)` | Function | `undefined` | Called when `KeplerGl` adds or removes a MapContainer with an inner Mapbox map. `mapbox` is a `MapRef` when added, or `null` when removed. `index` is `0` for the first map and `1` for the second map in a split view. |
| `actions` | Object | `{}` | Custom action creators to override the default KeplerGl action creators. Only use custom action when you want to modify action payload. |
| `mint` | Boolean | `true` | Determines whether to load a fresh empty state when mounted. When `false`, the state persists across remounts. Useful for modal use cases. |
| `theme` | Object/String | `null` | Set to `"dark"`, `"light"`, or `"base"`, or pass a theme object to customize KeplerGl’s style. |
| `mapboxApiUrl` | String | `https://api.mapbox.com` | The Mapbox API URL if you are using a custom Mapbox tile server. |
| `mapStylesReplaceDefault` | Boolean | `false` | Set to `true` to replace default map styles with custom ones. (see `mapStyles` prop) |
| `mapStyles` | Array | `[]` | An array of [custom map styles](#example-custom-map-style) for the map style selection panel. Styles replace the default ones if `mapStylesReplaceDefault` is `true`. |
| `initialUiState` | Object | `undefined` | The initial UI state applied to the `uiState` reducer. |
| `localeMessages` | Object | `undefined` | Used to modify or add new translations. Read more about [Localization][localization]. |
#### Example Custom Map Style
You can supply additional map styles to be displayed in [map style selection panel](https://github.com/keplergl/kepler.gl/blob/master/docs/user-guides/f-map-styles/1-base-map-styles.md). By default, additional map styles will be added to default map styles. If you pass `mapStylesReplaceDefault: true`, they will replace the default ones. kepler.gl will attempt to group layers of your style based on its `id` naming convention and use it to allow toggle visibility of [base map layers](https://github.com/keplergl/kepler.gl/blob/master/docs/user-guides/f-map-styles/2-map-layers.md). Supply your own `layerGroups` to override default for more accurate layer grouping.
Each `mapStyles` should has the following properties:
- `id` (String, required) unique string that should **not** be one of these reserved `dark` `light` `muted`. `muted_night`
- `label` (String, required) name to be displayed in map style selection panel
- `url` (String, required) mapbox style url or a url pointing to the map style json object written in [Mapbox GL Style Spec](https://docs.mapbox.com/mapbox-gl-js/style-spec/).
- `icon` (String, optional) image icon of the style, it can be a url, or an [image data url](https://flaviocopes.com/data-urls/#how-does-a-data-url-look)
- `layerGroups` (Array, optional)
```js
const mapStyles = [
{
id: 'my_dark_map',
label: 'Dark Streets 9',
url: 'mapbox://styles/mapbox/dark-v9',
icon: `${apiHost}/styles/v1/mapbox/dark-v9/static/-122.3391,37.7922,9.19,0,0/400x300?access_token=${accessToken}&logo=false&attribution=false`,
layerGroups: [
{
slug: 'label',
filter: ({id}) => id.match(/(?=(label|place-|poi-))/),
defaultVisibility: true
},
{
slug: '3d building',
filter: () => false,
defaultVisibility: false
}
]
}
];
```
### 3. Dispatch custom actions to `keplerGl` reducer.
One advantage of using the reducer over React component state to handle keplerGl state is the flexibility
to customize its behavior. If you only have one `KeplerGl` instance in your app or never intend to dispatch actions to KeplerGl from outside the component itself,
you don’t need to worry about forwarding dispatch and can move on to the next section. But life is full of customizations, and we want to make yours as enjoyable as possible.
There are multiple ways to dispatch actions to a specific `KeplerGl` instance.
- In the root reducer, with reducer updaters.
Each action is mapped to a reducer updater in kepler.gl. You can import the reducer updater corresponding to a specific action, and call it with the previous state and action payload to get the updated state.
e.g. `updateVisDataUpdater` is the updater for `ActionTypes.UPDATE_VIS_DATA` (take a look at each reducer `reducers/vis-state.js` for action to updater mapping).
Here is an example how you can listen to an app action `QUERY_SUCCESS` and call `updateVisDataUpdater` to load data into Kepler.Gl.
```js
import {keplerGlReducer, visStateUpdaters} from '@kepler.gl/reducers';
// Root Reducer
const reducers = combineReducers({
keplerGl: keplerGlReducer,
app: appReducer
});
const composedReducer = (state, action) => {
switch (action.type) {
case 'QUERY_SUCCESS':
return {
...state,
keplerGl: {
...state.keplerGl,
// 'map' is the id of the keplerGl instance
map: {
...state.keplerGl.map,
visState: visStateUpdaters.updateVisDataUpdater(state.keplerGl.map.visState, {
datasets: action.payload
})
}
}
};
}
return reducers(state, action);
};
export default composedReducer;
```
Read more about [using updaters to modify kepler.gl state][using-updaters]
- Using redux `connect`
You can add a dispatch function to your component that dispatches actions to a specific `keplerGl` component,
using connect.
```js
// component
import KeplerGl from '@kepler.gl/components';
// action and forward dispatcher
import {toggleFullScreen, forwardTo} from '@kepler.gl/actions';
import {connect} from 'react-redux';
const MapContainer = props => (
<div>
<button onClick={() => props.keplerGlDispatch(toggleFullScreen())}/>
<KeplerGl
id="foo"
/>
</div>
)
const mapStateToProps = state => state
const mapDispatchToProps = (dispatch, props) => ({
dispatch,
keplerGlDispatch: forwardTo(‘foo’, dispatch)
});
export default connect(
mapStateToProps,
mapDispatchToProps
)(MapContainer);
```
- Wrap action payload
You can also simply wrap an action into a forward action with the `wrapTo` helper
```js
// component
import KeplerGl from '@kepler.gl/components';
// action and forward dispatcher
import {toggleFullScreen, wrapTo} from '@kepler.gl/actions';
// create a function to wrapper action payload to 'foo'
const wrapToMap = wrapTo('foo');
const MapContainer = ({dispatch}) => (
<div>
<button onClick={() => dispatch(wrapToMap(toggleFullScreen())} />
<KeplerGl
id="foo"
/>
</div>
);
```
Read more about [forward dispatching actions][forward-actions]
### 4. Customize style.
Kepler.gl implements css styling using [Styled-Components](https://www.styled-components.com/). By using said framework Kepler.gl offers the ability to customize its style/theme using the following approaches:
- Passing a Theme prop
- Styled-Components ThemeProvider
The available properties to customize are listed here [theme](https://github.com/keplergl/kepler.gl/blob/master/src/styles/base.js).
[Custom theme example](https://github.com/keplergl/kepler.gl/tree/master/examples/custom-theme).
#### Passing a Theme prop.
You can customize Kepler.gl theme by passing a **theme** props to Kepler.gl react component as it follows:
```javascript
const white = '#ffffff';
const customTheme = {
sidePanelBg: white,
titleTextColor: '#000000',
sidePanelHeaderBg: '#f7f7F7',
subtextColorActive: '#2473bd'
};
return (
<KeplerGl
mapboxApiAccessToken={MAPBOX_TOKEN}
id="map"
width={800}
height={800}
theme={customTheme}
/>
);
```
As you can see the customTheme object defines certain properties which will override Kepler.gl default style rules.
#### Styled-Components Theme Provider.
In order to customize Kepler.gl theme using [ThemeProvider](https://www.styled-components.com/docs/api#themeprovider) you can simply wrap Kepler.gl using ThemeProvider as it follows:
```javascript
import {ThemeProvider} from 'styled-components';
const white = '#ffffff';
const customTheme = {
sidePanelBg: white,
titleTextColor: '#000000',
sidePanelHeaderBg: '#f7f7F7',
subtextColorActive: '#2473bd'
};
return (
<ThemeProvider theme={customTheme}>
<KeplerGl mapboxApiAccessToken={MAPBOX_TOKEN} id="map" width={800} height={800} />
</ThemeProvider>
);
```
### 5. Render Custom UI components.
Everyone wants the flexibility to render custom kepler.gl components. Kepler.gl has a dependency injection system that allow you to inject
components to KeplerGl replacing existing ones. All you need to do is to create a component factory for the one you want to replace, import the original component factory
and call `injectComponents` at the root component of your app where `KeplerGl` is mounted.
Take a look at `examples/demo-app/src/app.js` and see how it renders a custom side panel header in kepler.gl
```javascript
import {injectComponents, PanelHeaderFactory} from '@kepler.gl/components';
// define custom header
const CustomHeader = () => <div>My kepler.gl app</div>;
const myCustomHeaderFactory = () => CustomHeader;
// Inject custom header into Kepler.gl, replacing default
const KeplerGl = injectComponents([[PanelHeaderFactory, myCustomHeaderFactory]]);
// render KeplerGl, it will render your custom header instead of the default
const MapContainer = () => (
<div>
<KeplerGl id="foo" />
</div>
);
```
Using `withState` helper to add reducer state and actions to customized component as additional props.
```js
import {withState, injectComponents, PanelHeaderFactory} from '@kepler.gl/components';
import {visStateLens} from '@kepler.gl/reducers';
// custom action wrap to mounted instance
const addTodo = text =>
wrapTo('map', {
type: 'ADD_TODO',
text
});
// define custom header
const CustomHeader = ({visState, addTodo}) => (
<div onClick={() => addTodo('hello')}>{`${
Object.keys(visState.datasets).length
} dataset loaded`}</div>
);
// now CustomHeader will receive `visState` and `addTodo` as additional props.
const myCustomHeaderFactory = () =>
withState(
// keplerGl state lenses
[visStateLens],
// customMapStateToProps
headerStateToProps,
// actions
{addTodo}
)(CustomHeader);
```
Read more about [replacing UI component][replace-ui-component]
### 6. How to add data to map
To interact with a kepler.gl instance and add new data to it, you can dispatch the **`addDataToMap`** action from anywhere inside your app. It adds a dataset or multiple datasets to a kepler.gl instance and updates the full configuration (mapState, mapStyle, visState).
#### Parameters
- `data` **[Object][40]** **\*required**
- `datasets` **([Array][41]<[Object][40]> | [Object][40])** **\*required** datasets can be a dataset or an array of datasets
Each dataset object needs to have `info` and `data` property.
- `datasets.info` **[Object][40]** \-info of a dataset
- `datasets.info.id` **[string][42]** id of this dataset. If config is defined, `id` should matches the `dataId` in config.
- `datasets.info.label` **[string][42]** A display name of this dataset
- `datasets.data` **[Object][40]** **\*required** The data object, in a tabular format with 2 properties `fields` and `rows`
- `datasets.data.fields` **[Array][41]<[Object][40]>** **\*required** Array of fields,
- `datasets.data.fields.name` **[string][42]** **\*required** Name of the field,
- `datasets.data.rows` **[Array][41]<[Array][41]>** **\*required** Array of rows, in a tabular format with `fields` and `rows`
- `options` **[Object][40]**
- `options.centerMap` **[boolean][43]** `default: true` if `centerMap` is set to `true` kepler.gl will place the map view within the data points boundaries
- `options.readOnly` **[boolean][43]** `default: false` if `readOnly` is set to `true`
the left setting panel will be hidden
- `options.keepExistingConfig` **[boolean][43]** `default: false` whether to keep exiting map config, including layers, filters and splitMaps.
- `config` **[Object][40]** this object will contain the full kepler.gl instance configuration {mapState, mapStyle, visState}
Kepler.gl provides an easy API `KeplerGlSchema.getConfigToSave` to generate a json blob of the current kepler instance configuration.
#### Examples
```javascript
// app.js
import {addDataToMap} from '@kepler.gl/actions';
const sampleTripData = {
fields: [
{name: 'tpep_pickup_datetime', format: 'YYYY-M-D H:m:s', type: 'timestamp'},
{name: 'pickup_longitude', format: '', type: 'real'},
{name: 'pickup_latitude', format: '', type: 'real'}
],
rows: [
['2015-01-15 19:05:39 +00:00', -73.99389648, 40.75011063],
['2015-01-15 19:05:39 +00:00', -73.97642517, 40.73981094],
['2015-01-15 19:05:40 +00:00', -73.96870422, 40.75424576]
]
};
const sampleConfig = {
visState: {
filters: [
{
id: 'me',
dataId: 'test_trip_data',
name: 'tpep_pickup_datetime',
type: 'timeRange',
view: 'enlarged'
}
]
}
};
this.props.dispatch(
addDataToMap({
datasets: {
info: {
label: 'Sample Taxi Trips in New York City',
id: 'test_trip_data'
},
data: sampleTripData
},
option: {
centerMap: true,
readOnly: false
},
config: sampleConfig
})
);
```
Read more about [addDataToMap](./docs/api-reference/actions/actions.md#adddatatomap) and [Saving and loading maps with schema manager][saving-loading-w-schema].
[contributing]: contributing/README.md
[demo-app]: http://kepler.gl/#/demo
[github]: https://github.com/keplergl/kepler.gl
[github-pr]: https://help.github.com/articles/creating-a-pull-request/
[mapbox]: https://www.mapbox.com
[mapbox-token]: https://www.mapbox.com/help/define-access-token/
[developers]: contributing/DEVELOPERS.md
[examples]: https://github.com/keplergl/kepler.gl/tree/master/examples
[react-palm]: https://github.com/btford/react-palm
[roadmap]: https://github.com/keplergl/kepler.gl/wiki/Kepler.gl-2019-Roadmap
[stack]: https://stackoverflow.com/questions/tagged/kepler.gl
[web]: http://www.kepler.gl/
[docs]: https://docs.kepler.gl/
[user-guide]: docs/user-guides/README.md
[user-guide-jupyter]: docs/keplergl-jupyter/README.md
[api-reference]: docs/api-reference/README.md
[get-started]: ./docs/api-reference/get-started.md
[reducers]: docs/api-reference/reducers/README.md
[components]: docs/api-reference/components/README.md
[custom-theme]: docs/api-reference/custom-theme/README.md
[reducers]: docs/api-reference/reducers/README.md
[actions-updaters]: docs/api-reference/actions/README.md
[processors]: docs/api-reference/processors/README.md
[schemas]: docs/api-reference/schemas/README.md
[using-updaters]: ./docs/api-reference/advanced-usages/using-updaters.md
[custom-map-styles]: ./docs/api-reference/advanced-usages/custom-map-styles.md
[forward-actions]: ./docs/api-reference/advanced-usages/forward-actions.md
[replace-ui-component]: ./docs/api-reference/advanced-usages/replace-ui-component.md
[saving-loading-w-schema]: ./docs/api-reference/advanced-usages/saving-loading-w-schema.md
[localization]: ./docs/api-reference/localization/README.md
[40]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
[41]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array
[42]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
[43]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean
[44]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
[45]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function
================================================
FILE: SUMMARY.md
================================================
# Table of contents
* [Welcome](README.md)
* [What's new?](docs/release-notes.md)
* [Docs](docs/README.md)
* [User guides](docs/user-guides/README.md)
* [Get Started](docs/user-guides/j-get-started.md)
* [Kepler.gl workflow](docs/user-guides/b-kepler-gl-workflow/README.md)
* [Add data to layers](docs/user-guides/b-kepler-gl-workflow/b-add-data-layers/README.md)
* [Adding Data Layers](docs/user-guides/b-kepler-gl-workflow/b-add-data-layers/a-adding-data-layers.md)
* [Create a Layer](docs/user-guides/b-kepler-gl-workflow/b-add-data-layers/b-create-a-layer.md)
* [Blend and Rearrange Layers](docs/user-guides/b-kepler-gl-workflow/b-add-data-layers/d-blend-and-rearrange-layers.md)
* [Hide, Edit and Delete Layers](docs/user-guides/b-kepler-gl-workflow/b-add-data-layers/c-hide-edit-and-delete-layers.md)
* [Add Data to the Map](docs/user-guides/b-kepler-gl-workflow/a-add-data-to-the-map.md)
* [Layers](docs/user-guides/c-types-of-layers/README.md)
* [Point](docs/user-guides/c-types-of-layers/a-point.md)
* [S2 Layer](docs/user-guides/c-types-of-layers/l-s2.md)
* [Icon](docs/user-guides/c-types-of-layers/g-icon.md)
* [Line](docs/user-guides/c-types-of-layers/c-line.md)
* [Cluster](docs/user-guides/c-types-of-layers/f-cluster.md)
* [Polygon](docs/user-guides/c-types-of-layers/e-polygon.md)
* [Hexbin](docs/user-guides/c-types-of-layers/h-hexbin.md)
* [Grid](docs/user-guides/c-types-of-layers/d-grid.md)
* [H3](docs/user-guides/c-types-of-layers/j-h3.md)
* [Heatmap](docs/user-guides/c-types-of-layers/i-heatmap.md)
* [Arc](docs/user-guides/c-types-of-layers/b-arc.md)
* [Trip layer](docs/user-guides/c-types-of-layers/k-trip.md)
* [Vector Tile Layer](docs/user-guides/c-types-of-layers/m-vector-tile-layer.md)
* [Raster Tile layer](docs/user-guides/c-types-of-layers/n-raster-tile-layer.md)
* [WMS layer](docs/user-guides/c-types-of-layers/o-wms-layer.md)
* [Layer Attributes](docs/user-guides/d-layer-attributes.md)
* [Color Palettes](docs/user-guides/l-color-attributes.md)
* [Filters](docs/user-guides/e-filters.md)
* [Map Styles](docs/user-guides/f-map-styles.md)
* [Interactions](docs/user-guides/g-interactions.md)
* [Map Settings](docs/user-guides/m-map-settings.md)
* [Time Playback](docs/user-guides/h-playback.md)
* [Save and Export](docs/user-guides/k-save-and-export.md)
* [FAQ](docs/user-guides/i-faq.md)
* [API Reference](docs/api-reference/README.md)
* [ecosystem](docs/api-reference/ecosystem.md)
* [Get Started](docs/api-reference/get-started.md)
* [Advanced usages](docs/api-reference/advanced-usages/README.md)
* [Saving and Loading Maps with Schema Manager](docs/api-reference/advanced-usages/saving-loading-w-schema.md)
* [Replace UI Component with Component Dependency Injection](docs/api-reference/advanced-usages/replace-ui-component.md)
* [Forward Dispatch Actions](docs/api-reference/advanced-usages/forward-actions.md)
* [Reducer Plugin](docs/api-reference/advanced-usages/reducer-plugin.md)
* [Using Updaters](docs/api-reference/advanced-usages/using-updaters.md)
* [Custom reducer initial state](docs/api-reference/advanced-usages/custom-initial-state.md)
* [custom-mapbox-host](docs/api-reference/advanced-usages/custom-mapbox-host.md)
* [Components](docs/api-reference/components/README.md)
* [Reducers](docs/api-reference/reducers/README.md)
* [reducers](docs/api-reference/reducers/reducers.md)
* [map-style](docs/api-reference/reducers/map-style.md)
* [map-state](docs/api-reference/reducers/map-state.md)
* [combine](docs/api-reference/reducers/combine.md)
* [overview](docs/api-reference/reducers/README.md)
* [ui-state](docs/api-reference/reducers/ui-state.md)
* [vis-state](docs/api-reference/reducers/vis-state.md)
* [Processors](docs/api-reference/processors/README.md)
* [All processors](docs/api-reference/processors/processors.md)
* [Schemas](docs/api-reference/schemas/README.md)
* [Actions](docs/api-reference/actions/README.md)
* [All actions](docs/api-reference/actions/actions.md)
* [Cloud providers](docs/api-reference/cloud-providers/README.md)
* [Provider](docs/api-reference/cloud-providers/cloud-provider.md)
* [Custom theme](docs/api-reference/custom-theme/README.md)
* [Localization](docs/api-reference/localization/README.md)
* [Jupyter Notebook](docs/keplergl-jupyter/README.md)
* [Examples](examples/README.md)
* [Node/Express](examples/node-app/README.md)
* [Demo App](examples/demo-app/README.md)
* [Open modal](examples/replace-component/README.md)
* [Open modal](examples/open-modal/README.md)
* [UMD client](examples/umd-client/README.md)
* [Customize kepler.gl Theme](examples/custom-theme/README.md)
* [Customize kepler.gl Reducer](examples/custom-reducer/README.md)
* [Contributing](contributing/README.md)
* [Developing Kepler.gl](contributing/DEVELOPERS.md)
* [Contributor Covenant Code of Conduct](contributing/CODE_OF_CONDUCT.md)
* [Change Log](CHANGELOG.md)
* [Upgrade Guide](UPGRADE-GUIDE.md)
================================================
FILE: TODO.md
================================================
# TODO
### Bugs
- Time playback slider sticking out after resize
- Heatmap frozen
### Refactor Tasks
- Refactor Layer configurator component so it works better with the layer API [shan]
### Feature
- Re-implement file upload to use event streaming (no react-palm) [shan]
- Input map style from mapbox style url [shan]
- Map style API to add custom map style [shan]
- Field type editor [shan]
- Export map [javid, shan]
### Remaining UI Update
- Free form color picker [shan]
- Vis config by channel UI (add value switch) [shan]
### Design Request
- More map styles [erik]
================================================
FILE: UPGRADE-GUIDE.md
================================================
# Upgrade Guide
## Table of Content
- [v2.3 to v2.4](#upgrade-from-v23-to-v24)
- [v2.2 to v2.3](#upgrade-from-v22-to-v23)
- [v2.1 to v2.2](#upgrade-from-v21-to-v22)
- [v2.0 to v2.1](#upgrade-from-v20-to-v21)
- [v1.1.12 to v2.0](#upgrade-from-v1112-to-v20)
- [v1.1.11 to v1.1.12](#upgrade-from-v1111-to-v1112)
## Upgrade from v2.4 to v3.0
- TBD
## Upgrade from v2.3 to v2.4
### Breaking Changes
- Supports React 17
- Dependency Upgrades, major ones: `d3-xxx@^2`, `redux@4.0.5`, `type-analyzer@0.3.0`, `react-palm@~3.3.7`
### New Features
- Support incremental timeline animation
- Allow changing dataset in layer config
- Enable polygon filter for h3 layer
- Show last added filter at the top
### Bug Fixes
- Avoid duplicated h3 layer detection
- Fixed bug when reversing color palette not update
## Upgrade from v2.2 to v2.3
- Upgrade dependencies to `deck.gl@8.2.0`, `loaders.gl@2.2.5` and `luma.gl@8.2.0`. This should only affects projects with the above libraries in its dependencies.
## Upgrade from v2.1 to v2.2
### New Features
- **Interaction** - Added Geocoder in the interactin panel
### Improvements
- **Localization** - Added Spanish, Catalan, and Portuguese translations
### Bug Fixes
- **Layer** - Aggregation layer fix out-of-domain coloring for valid strings
- **Export** - Fixed download file for microsoft edge
### API Update
- **Components** - Exported map drawing editor factories
## Upgrade from v2.0 to v2.1
### Breaking Changes
- Upgrade Node v10 for dev development, node requirement is now at `>=10.15.0`
### New Features
- **Provider** - Add cloud provider API
- **Layer** - Added S2 Layer
- **Basemap** - Added satellite to base map styles options
- **Theme** - Added base UI theme to theme option as `base`
### Improvements
- **UI** - Improved data table and layer panel header
- **Filter** - Better handle filter steps for small domains
### Bug Fixes
- **Layer** - Remove incorrect outlier for better map center detection
- **Layer** - Fix point layer stroke width
- **Basemap** - Fix bug custom map style not saved correctly
- **Export** - Fix bug exported html blank
---
## Upgrade from v1.1.12 to v2.0
### Breaking Changes
- Upgrade deck.gl to `8.0.15`, this only affects projects with deck.gl in its dependencies. Because only one version of deck.gl can be loaded.
### New Features
- **GPU Filter** - Improved time and numeric filter performance by moving calculation to GPU
- **Geo Fitler** - Added drawing polygon function, allow filter layer based on polygon
### Improvements
- **Layer** - Improved GeoJson and H3 layer geometry rendering
- **UI** - Support custom side panel tabs. [example](https://github.com/keplergl/kepler.gl/tree/master/examples/replace-component)
### Bug Fixes
---
## Upgrade from v1.1.11 to v1.1.12
### Breaking Changes
#### Dependency Upgrade
- **react** and **react-dom**: minimum required version is now `^16.3`
- **react-redux** is upgraded to `^7.1.3`. If you have older version of `react-redux` in your app. You will have error loading kepler.gl, likely due to multiple version of `react-redux` installed.
- **react-palm**: required version is now `^3.1.2`.
- **react-route**: if you are using `react-router`, we suggest using `^3.2.5` to avoid `React 16.8` lifecycle deprecation warning in the console.
### Bug Fixes
- **Cluster Layer**: Fix incorrect cluster point count. Fix cluster layer missing in exported image.
### Moved from `kepler.gl/utils` to `@kepler.gl/table`
- `maybeToDate`
- `getNewDatasetColor`
- `createNewDataEntry`
- `setFilterGpuMode`
- `assignGpuChannels`
- `assignGpuChannel`
- `resetFilterGpuMode`
- `getGpuFilterProps`
- `getDatasetFieldIndexForFilter`
### Moved from `kepler.gl/utils` to `@kepler.gl/reducers`
- `findMapBounds`
- `exportData`
- `TOOLTIP_MINUS_SIGN`
- `getDefaultInteraction`
- `BRUSH_CONFIG`
- `findFieldsToShow`
- `getTooltipDisplayDeltaValue`
- `getTooltipDisplayValue`
- `LayersToRender`
- `AggregationLayerHoverData`
- `LayerHoverProp`
- `findDefaultLayer`
- `calculateLayerData`
- `getLayerHoverProp`
- `renderDeckGlLayer`
- `isLayerRenderable`
- `isLayerVisible`
- `prepareLayersForDeck`
- `prepareLayersToRender`
- `getCustomDeckLayers`
- `ComputeDeckLayersProps`
- `computeDeckLayers`
### Moved from `kepler.gl/processors` to `@kepler.gl/utils`
- `ACCEPTED_ANALYZER_TYPES`
- `validateInputData`
- `getSampleForTypeAnalyze`
- `getFieldsFromData`
- `renameDuplicateFields`
- `analyzerTypeToFieldType`
### Moved from `kepler.gl/templates` to `@kepler.gl/utils`
- `exportMapToHTML`
### Moved from `kepler.gl/layers` to `@kepler.gl/utils`
- `getCentroid`
- `idToPolygonGeo`
- `h3IsValid`
- `getHexFields`
================================================
FILE: babel-register.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
const forceTranspile = [
// ESM libraries that require transpilation
/@deck.gl\/layers/,
/@loaders.gl\/polyfills/,
// For some reason babel crashes even before trying to transpile this library
// Instead we force transpile @deck.gl/layers which includes it, and alias to a transpiled version in babel.config.js
/@mapbox\/tiny-sdf/
];
require('@babel/register')({
// This tells babel where to look for `babel.config.js` file
root: __dirname,
ignore: [
filepath => {
return forceTranspile.some(patt => patt.test(filepath))
? false
: Boolean(filepath.match(/node_modules/));
}
],
only: [__dirname],
extensions: ['.ts', '.js', '.tsx', '.json']
});
require('@babel/polyfill');
var path = require('path');
var glob = require('glob');
// Requiring mapbox-gl here prevents polyfill errors during tests.
require('mapbox-gl');
// eslint-disable-next-line func-names
process.argv.slice(2).forEach(function (arg) {
// eslint-disable-next-line func-names
glob(arg, function (er, files) {
if (er) throw er;
// eslint-disable-next-line func-names
files.forEach(function (file) {
require(path.resolve(process.cwd(), file));
});
});
});
================================================
FILE: babel.config.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
const {resolve} = require('path');
const KeplerPackage = require('./package');
const {RESOLVE_ALIASES} = require('./webpack/shared-webpack-configuration');
const srcDir = resolve(__dirname, 'src');
const nodeModules = resolve(__dirname, 'node_modules');
const PRESETS = ['@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript'];
const getPlugins = isTest => {
const PLUGINS = [
['@babel/plugin-transform-typescript', {isTSX: true, allowDeclareFields: true}],
'@babel/plugin-transform-modules-commonjs',
'@babel/plugin-transform-class-properties',
'@babel/plugin-transform-optional-chaining',
'@babel/plugin-transform-logical-assignment-operators',
'@babel/plugin-transform-nullish-coalescing-operator',
'@babel/plugin-transform-export-namespace-from',
[
'@babel/transform-runtime',
{
regenerator: true
}
],
[
'module-resolver',
{
extensions: ['.js', '.ts', '.tsx', '.json'],
root: ['./src'],
alias: {
test: './test',
// We explicitly transpile this ESM library in scripts/fix-dependencies.js and consume the transpiled version here
// This may not be needed once switch to Jest is complete as it is handled by transformIgnorePatterns
'@mapbox/tiny-sdf': `${nodeModules}/@mapbox/tiny-sdf/index.cjs`,
// fix ERR_REQUIRE_ESM in yarn cover
'maplibregl-mapbox-request-transformer': `${nodeModules}/maplibregl-mapbox-request-transformer/src/index.cjs`,
// compile from @kepler.gl src
...RESOLVE_ALIASES,
// loaders.gl cjs bundle of polyfills is not transpiled properly, use esm instead
'@loaders.gl/polyfills': `${nodeModules}/@loaders.gl/polyfills/src`
}
}
],
[
'search-and-replace',
{
rules: [
{
search: '__PACKAGE_VERSION__',
replace: KeplerPackage.version
}
]
}
]
];
return PLUGINS;
};
const ENV = {
test: {
plugins: ['istanbul']
},
debug: {
sourceMaps: 'inline',
retainLines: true
}
};
module.exports = function babel(api) {
const isTest = api.env('test'); // Check if running in test mode
api.cache(true);
return {
presets: PRESETS,
plugins: getPlugins(isTest),
env: ENV
};
};
================================================
FILE: bindings/kepler.gl-jupyter/.gitignore
================================================
*.egg-info/
*.py[cod]
*/__pycache__/
.ipynb_checkpoints/
dist/
# labextension build
keplergl-jupyter/
build/
*.py[cod]
node_modules/
env/
ENV/
ENV3/
# OS X
.DS_Store
.vs_code/
# Compiled javascript
keplergl/static/*
setup.orig.py
setup.orig2.py
notebooks/*.html
notebooks/*.sh
notebooks/*.js
notebooks/ignore_*
*/*.tgz
package/
*.old*
*test*
js/temp.*
================================================
FILE: bindings/kepler.gl-jupyter/Dockerfile
================================================
# NOTE: PLEASE run `yarn build` before running this dockerfile
FROM ubuntu:latest
# Install python3
RUN apt-get update && apt-get install -y python3 python3-pip python3-venv
# Install gdal
RUN apt-get install -y gdal-bin
# Fix: No such file or directory: 'gdal-config'
RUN apt-get install -y libgdal-dev
# Make the current directory the working directory
WORKDIR /kepler.gl
# The current directory is <Root>/bindings/kepler.gl-jupyter
# Copy the root directory contents into the working directory
COPY . .
# Create a virtual environment .venv
RUN python3 -m venv .venv
# Activate the virtual environment
RUN . .venv/bin/activate
# Install jupyter_packaging using pip
RUN .venv/bin/pip install jupyter_packaging
# Install keplergl-jupyter in the virtual environment from the current directory
RUN .venv/bin/pip install .
# Run jupyter notebook with token exposed in logs
CMD [".venv/bin/jupyter", "notebook", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root", "--NotebookApp.log_level='INFO'"]
EXPOSE 8888
================================================
FILE: bindings/kepler.gl-jupyter/MANIFEST.in
================================================
recursive-include keplergl/static *.*
recursive-include keplergl-jupyter/labextension *.*
include keplergl-jupyter.json
================================================
FILE: bindings/kepler.gl-jupyter/README.md
================================================
# kepler.gl for Jupyter
This is the [kepler.gl](http://kepler.gl) jupyter widget, an advanced geospatial visualization tool, to render large-scale interactive maps in Jupyter Notebook.
![Kepler.gl for Jupyter][jupyter_widget]
Table of contacts
- [Installation](#installation)
- [Quick Start](#quick-start)
- [Demo Notebooks](#demo-notebooks)
- [Usage](#usage)
- [Local Development Setup](#local-development-setup)
- [FAQ & Troubleshoot](#faq--troubleshoot)
## Installation
[](https://anaconda.org/conda-forge/keplergl) [](https://badge.fury.io/py/keplergl)
### 1. For Jupyter Notebook
#### Using conda:
```shell
conda install -c conda-forge keplergl
```
##### Prerequisites
- Python >= 3.7
#### Using pip:
```shell
pip install keplergl
```
##### Prerequisites
- For kelplergl <= 0.3.0
- Python >= 2
- ipywidgets >= 7.0.0
If you're on Mac, used `pip install`, and you're running Notebook 5.3 and above, you don't need to run the following:
```shell
jupyter nbextension install --py --sys-prefix keplergl # can be skipped for notebook 5.3 and above
jupyter nbextension enable --py --sys-prefix keplergl # can be skipped for notebook 5.3 and above
```
NOTE: For No Module named 'keplergl' error, please make sure your virtual environment is activated and has been added to the Jupyter kernel.
Use the following command to check the kernel list:
```shell
jupyter kernelspec list
```
Use the following command to add the virtual environment to the Jupyter kernel:
```shell
python -m ipykernel install --user --name=myenv
```
The `--name` parameter is your preferred name to identify the virtual environment
### 2. For Google Colab:
`keplergl` (>0.3.0) works with Google Colab. You can install it using pip.
```python
# Install keplergl (>0.3.0)
!pip install keplergl
```
### 3. For JupyterLab
#### JupyterLab 3
NOTE: `keplergl` <=0.3.0 doesn't work with JupyterLab 3. You need to make sure the python package `keplergl` > 0.3.0 is installed.
Installation using pip:
```shell
pip install keplergl
```
Installation using conda:
```shell
conda install keplergl
```
There is no need to use `jupyter labextension install` for `keplergl` > 0.3.0 with JupyterLab3.
#### JupyterLab 1
For JupyterLab1, you need to install `keplergl-jupyter` labextension from NPM registry. There is no need to install `keplergl` python package.
First, install `jupyterlab-manager` for JupyterLab1:
```shell
jupyter labextension install @jupyter-widgets/jupyterlab-manager@1.1
```
Then, install `keplergl-jupyter` labextension from NPM registry:
```shell
jupyter labextension install keplergl-jupyter
```
##### Prerequisites:
- Node >= 12
- Python 3
#### JupyterLab 2
For JupyterLab2, you need to install `keplergl-jupyter` labextension from NPM registry. There is no need to install `keplergl` python package.
First, install `jupyterlab-manager` for JupyterLab2:
```shell
jupyter labextension install @jupyter-widgets/jupyterlab-manager@2
```
To install `keplergl-jupyter` from NPM registry, JupyterLab2 has following requirements of dependencies:
```
JupyterLab Extension Package
>=16.9.0 <16.10.0 >=17.0.0 <18.0.0 react
>=16.9.0 <16.10.0 >=17.0.0 <18.0.0 react-dom
```
However, `keplergl-jupyter`<=0.3.0 depends on `react` >= 17.0.2. Therefore, the latest `keplergl-jupyter` can’t be installed with JupyterLab2: if you use `jupyter labextension install keplergl-jupyter`, the version 0.2.2 as a fallback will be installed. Unfortunately, version 0.2.2 does NOT work with JupyterLab2.
A workaround is to modify the file `lib/python3.x/site-packages/jupyterlab/staging/package.json` and remove “react” and “react-dom” from “singletonPackages” object. Then, install keplergl-jupyter using this command:
```
jupyter labextension install keplergl-jupyter
```
##### Prerequisites:
- Node >= 12
- Python 3
## Quick Start
### For Jupyter Notebook and JupyterLab:
NOTE: please make sure the python kernel is correctly specified in the notebook.
```python
# Load kepler.gl with an empty map
from keplergl import KeplerGl
map_1 = KeplerGl(height=400)
map_1
# Load kepler.gl with map data and config
# Since keplergl 0.3.4, you can pass `use_arrow=True` to load and render data faster using GeoArrow, e.g. `KeplerGl(data={'data_1': df}, config=config, use_arrow=True)`
map_2 = KeplerGl(height=400, data={'data_1': df}, config=config)
map_2
# Add data to map
# Since keplergl 0.3.4, you can pass `use_arrow=True` to load and render data faster using GeoArrow, e.g. `map_1.add_data(df, 'data_1', use_arrow=True)`
map_1.add_data(df, 'data_1')
# Apply config
map_1.config(config)
# print data and config
map_1.data
map_1.config
# save map to html
map_1.save_to_html(file_name='keplergl_map.html')
```
### For Google Colab:
Keplergl (>0.3.0) works with Google Colab. You can install it using pip.
```python
# Install keplergl (>0.3.0)
!pip install keplergl
# Load Kepler.gl with an empty map
from keplergl import KeplerGl
map_1 = KeplerGl()
# Display map
map_1.show()
```
The function `show()` is newly introduced for displaying map in Google Colab. The function is defined as:
```python
def show(self, data=None, config=None, read_only=False, center_map=False)
```
with input parameters:
- data: a data dictionary {"name": data}, if not provided, will use current map data
- config: map config dictionary, if not provided, will use current map config
- read_only: if read_only is True, hide side panel to disable map customization
- center_map: if center_map is True, the bound of the map will be updated according to the current map data
Please note that the map is not interactive due to the limitation of Google Colab. For example, when applying config to the map in Colab, the map won't be updated and one needs to call `show()` again to render a new map in a new cell.
## Demo Notebooks
- [Load kepler.gl](https://github.com/keplergl/kepler.gl/blob/master/bindings/kepler.gl-jupyter/notebooks/Load%20kepler.gl.ipynb): Load kepler.gl widget, add data and config
- [Geometry as String](https://github.com/keplergl/kepler.gl/blob/master/bindings/kepler.gl-jupyter/notebooks/Geometry%20as%20String.ipynb): Embed Polygon geometries as `GeoJson` and `WKT` inside a `CSV`
- [GeoJSON](https://github.com/keplergl/kepler.gl/blob/master/bindings/kepler.gl-jupyter/notebooks/GeoJSON.ipynb): Load GeoJSON to kepler.gl
- [DataFrame](https://github.com/keplergl/kepler.gl/blob/master/bindings/kepler.gl-jupyter/notebooks/DataFrame.ipynb): Load DataFrame to kepler.gl
- [GeoDataFrame](https://github.com/keplergl/kepler.gl/blob/master/bindings/kepler.gl-jupyter/notebooks/GeoDataFrame.ipynb): Load GeoDataFrame to kepler.gl
https://docs.kepler.gl/docs/keplergl-jupyter#1-load-keplergl-map
## Usage
- [1. Load kepler.gl](https://docs.kepler.gl/docs/keplergl-jupyter#1-load-keplergl-map)
- [`keplergl.KeplerGl()`](https://docs.kepler.gl/docs/keplergl-jupyter#keplergl)
- [2. Add Data](https://docs.kepler.gl/docs/keplergl-jupyter#2-add-data)
- [`.add_data()`](https://docs.kepler.gl/docs/keplergl-jupyter#add_data)
- [`.data`](https://docs.kepler.gl/docs/keplergl-jupyter#data)
- [3. Data Format](https://docs.kepler.gl/docs/keplergl-jupyter#3-data-format)
- [`CSV`](https://docs.kepler.gl/docs/keplergl-jupyter#csv)
- [`GeoJSON`](https://docs.kepler.gl/docs/keplergl-jupyter#geojson)
- [`DataFrame`](https://docs.kepler.gl/docs/keplergl-jupyter#dataframe)
- [`GeoDataFrame`](https://docs.kepler.gl/docs/keplergl-jupyter#geodataframe)
- [`WKT`](https://docs.kepler.gl/docs/keplergl-jupyter#wkt)
- [4. Customize the map](https://docs.kepler.gl/docs/keplergl-jupyter#4-customize-the-map)
- [5. Save and load config](https://docs.kepler.gl/docs/keplergl-jupyter#5-save-and-load-config)
- [`.config`](https://docs.kepler.gl/docs/keplergl-jupyter#config)
- [6. Match config with data](https://docs.kepler.gl/docs/keplergl-jupyter#6-match-config-with-data)
- [7. Save Map](https://docs.kepler.gl/docs/keplergl-jupyter#7-save-map)
- [`.save_to_html()`](https://docs.kepler.gl/docs/keplergl-jupyter#save_to_html)
## Local Development Setup
### Environment Setup
You will need to install node, yarn and Jupyter Notebook.
#### 1. Node and Yarn
Install [node](https://nodejs.org/en/download/package-manager/#macos) `> 12`, and [yarn](https://yarnpkg.com/en/docs/install#mac-stable). Use [nvm](https://github.com/creationix/nvm) for better node version management e.g. `nvm install 12`.
#### 2. Install Jupyter
- Using conda
```shell
conda install jupyter
conda install notebook 6.0.1
```
- Using pip
```shell
pip install jupyter
pip install notebook==6.0.1
```
#### 3. Install GeoPandas
- Using conda
```shell
conda install geopandas
```
- Using pip
```shell
pip install geopandas
```
### Download and run keplergl in your local Jupyter Notebook
#### Clone Repo
```shell
git clone https://github.com/keplergl/kepler.gl.git
```
### Setup JS
#### 1. Install Js module
```sh
cd bindings/kepler.gl-jupyter
cd js
yarn
```
#### 2. Load mapbox token
Add [Mapbox access token](https://docs.mapbox.com/help/how-mapbox-works/access-tokens/) to Node env.
```sh
export MapboxAccessTokenJupyter=<your_mapbox_token>
```
#### 3. Build js module, start a local server to watch for changes
```shell
npm start
```
You need to run step 2 and 3 to restart the js program. And step 1-3 if any js dependency has changed (Usually after pulling new changes from master).
### Setup jupyter
#### 1. Install python module and enable extension from local files
This command must be run **AFTER** the `js` setup, and folder `static/` was created. It only needs to be run once.
```sh
# dev install from folder containing setup.py
pip install -e .
# only needed in dev mode, not in normal mode.
jupyter nbextension install --py --symlink --sys-prefix keplergl
# only needed in dev mode, not in normal mode.
jupyter nbextension enable --py --sys-prefix keplergl
```
NOTE: The above command `jupyter nbextension install -py --symlink --sys-prefix keplergl` is trying to create a symbolic link of the folder `bindings/kepler.gl-jupyter/keplergl/static` under the jupyter's folder `nbextensions`. Please check if there is already a folder "nbextensions/kepler-jupyter" existed, and you might need to remove it first.
To find the location of `nbextensions` folder, you can use the following command:
```shell
$ where jupyter
/Users/test/opt/anaconda3/envs/test37/bin/jupyter
# the nbextensions should be at: /Users/test/opt/anaconda3/envs/test37/share/jupyter/nbextensions
```
#### 2. Start jupyter notebook
```shell
cd notebooks
jupyter notebook
```
#### Have fun!
You can now start editing the .js and .py files to see changes reflected in your local notebook. After changing files in the js folder, the local start script will recompile the js files and put them in to `keplergl/static` folder. You need to reload the jupyter notebook page to reload the files.
#### 3. Development for JupyterLab
To test the development work in previous 2 steps for JupyterLab. You can build the `keplergl labextension` under the `js` directory:
```shell
jupyter labextension build .
```
The output of the jupyter labextension is defined in the file `js/package.json`:
```javascript
...
"jupyterlab": {
"extension": "babel/labplugin",
"outputDir": "../keplergl-jupyter/labextension",
"sharedPackages": {
"@jupyter-widgets/base": {
"bundled": false,
"singleton": true
}
}
}
```
Then, you can either install this labextension to test it:
```shell
jupyter labextension install .
```
or, you can manually create a symbolic link for the folder `bindings/kepler.gl-jupyter/kepler-jupyter/labextension` under the jupyter's folder `labextensions`, e.g. `/Users/test/opt/anaconda3/envs/test37/share/jupyter/labextensions`. You will need to reload the jupyter lab page.
[jupyter_widget]: https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/documentation/jupyter_widget.png
[empty_map]: https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/documentation/jupyter_empty_map.png
[geodataframe_map]: https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/documentation/jupyter_geodataframe.png
[map_interaction]: https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/documentation/jupyter_custom_map.gif
[load_map_w_data]: https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/documentation/jupyter_load_map_w_data.gif
[map_add_data]: https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/documentation/jupyter_add_data.png
[connect_data_config]: https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/documentation/jupyter_connect_data_w_config.png
[save_widget_state]: https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/documentation/jupyter_save_state.png
[wkt]: https://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html#gis-wkt-format
[geojson]: https://tools.ietf.org/html/rfc7946
[feature_collection]: https://tools.ietf.org/html/rfc7946#section-3.3
[features]: https://tools.ietf.org/html/rfc7946#section-3.2
[data_frame]: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html
[geo_data_frame]: https://geopandas.readthedocs.io/en/latest/data_structures.html#geodataframe
[match-config-w-data]: #match-config-with-data
[data_format]: #3-data-format
================================================
FILE: bindings/kepler.gl-jupyter/RELEASE.md
================================================
# Kepler.gl Jupyter Releases
## Release a new version
When release a new version, the `keplergl-jupyter` js module will be published on NPM and the `keplergl` python module will be published on PyPI.
NOTE: __Version number of the js module **`kelergl-jupyter`** and the python module **`keplergl`** should match__
### Step1:
Update `version_info` in keplergl/_version.py in bindings/kepler.gl-jupyter folder.
Update `"version": "0.x.x"` to match the version info in js/package.json in bindings/kepler.gl-jupyter folder.
Update `EXTENSION_SPEC_VERSION` to match the js module version.
```
git add keplergl/_version.py
git add js/package.json
git commit -am "keplergl==<version>"
```
### Step2:
Create a tag: `<version>-jupyter` e.g. v0.3.4-jupyter
```
git tag -a <version>-jupyter -m "<version>-jupyter"
git push origin <version>-jupyter
```
The new tag will trigger the Github Action `build-publish-pypi.yml`: __"Build KeplerGL Python and NPM packages"__. The packages will be built and tested, then published to NPM and PyPI using the secret tokens.
### Step3:
For conda-forge release, please use the repo: https://github.com/conda-forge/keplergl-feedstock
The new version should be automatically picked and built from PyPi by conda-forge. If you want to submit a manual build:
Edit `meta.yaml` under directory `recipes/`:
* Update the version number
```python
{% set version = "0.3.0" %}
```
* Update the sha256 value of the latest tarball in PyPi that is published in Step2.
```python
source:
url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz
sha256: cb21047b2104413af1c00ef1ac75794a19e0b578e51c69c86713911d97370167
```
* Create a pull request and wait for checking from conda-forge team.
================================================
FILE: bindings/kepler.gl-jupyter/js/.gitignore
================================================
node_modules/
dist/
temp.*
babel/
yarn-error.log
package-lock.json
================================================
FILE: bindings/kepler.gl-jupyter/js/README.md
================================================
# keplergl-jupyter
This is a simple jupyter widget for kepler.gl, an advanced geospatial visualization tool, to render large-scale interactive maps.
## Package Install
---
**Prerequisites**
- [node](http://nodejs.org/) >=8.15.0
- [yarn](https://yarnpkg.com/en/docs/install#mac-stable) >=1.6.0
**More links**
- [Jupyter Widget](https://ipywidgets.readthedocs.io/en/stable/examples/Widget%20Custom.html)
- [Widget Cookiecutter](https://github.com/jupyter-widgets/widget-cookiecutter)
## Local Dev
---
### Local Dev Installation for Classic Notebook
To develop this package against the classic notebook, run:
- `pip install -e .` (installs python package for development, runs `npm install` and `npm run build`)
- `jupyter nbextension install --py --symlink --sys-prefix keplergl`\
(symlinks `static/` directory into `<jupyter path>/nbextensions/keplergl/`). Now the notebook has access to the frontend code.
- `jupyter nbextension enable --py --sys-prefix keplergl`\
(copies `<npm_package_name>.json` into `<environment path>/etc/jupyter/nbconfig/notebook.d/` directory). Now the notebook will load your frontend code on page load.
Now make some changes to your source code. Then:
- After making Python code changes, restarting the notebook kernel will be enough to reflect changes
- After making JavaScript code changes:
- `cd js`
- `npm run build`
- Refresh browser to reflect changes
### Local Dev Installation for JupyterLab
To develop this package against JupyterLab, run:
- `pip install -e .` (installs python package for development, runs `npm install` and `npm run build`)
- `jupyter labextension install @jupyter-widgets/jupyterlab-manager`: this install lab widgets manager.
- `jupyter labextension install js`: this installs the current labextension into JupyterLab and enables it.
- `jupyter lab --watch` starts JupyterLab, but in `--watch` mode: it will rebuild itself incrementally if it detects changes.
Now make some changes to your source code. Then:
- After making Python code changes, restarting the notebook kernel will be enough to reflect changes
- After making JavaScript code changes:
- `cd js`
- `npm run build:lab`
- Refresh browser to reflect changes
- By default, the application will load from the JupyterLab staging directory (default is <sys-prefix>/share/jupyter/lab/staging. Check the correct version of `@jupyter-widgets/jupyterlab-manager` and `@jupyter-widgets/base` is install in `yarn.lock`
#### JupyterLab widget Dependencies
Install correct version of jupyterlab-manager based on your Jupyter Lab version. Make sure `@jupyter-widgets/base` version in the widget does not conflict with requirements in `jupyterlab-manager`.
- [@jupyter-widgets/jupyterlab-manager](https://github.com/jupyter-widgets/ipywidgets/tree/master/packages/jupyterlab-manager)
- [@jupyter-widgets/base](https://github.com/jupyter-widgets/ipywidgets/tree/master/packages/base)
- [@jupyter-widgets/base-manager](https://github.com/jupyter-widgets/ipywidgets/tree/master/packages/base-manager)
================================================
FILE: bindings/kepler.gl-jupyter/js/babel.config.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
const KeplerPackage = require('./package');
module.exports = function babel(api) {
api.cache(true);
const presets = ['@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript'];
const plugins = [
'@babel/plugin-transform-modules-commonjs',
'@babel/plugin-transform-class-properties',
'@babel/plugin-transform-optional-chaining',
'@babel/plugin-transform-logical-assignment-operators',
'@babel/plugin-transform-nullish-coalescing-operator',
'@babel/plugin-transform-export-namespace-from',
'transform-inline-environment-variables',
[
'search-and-replace',
{
rules: [
{
search: '__PACKAGE_VERSION__',
replace: KeplerPackage.version
}
]
}
]
];
return {
presets,
plugins
};
};
================================================
FILE: bindings/kepler.gl-jupyter/js/lib/embed.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
// Entry point for the unpkg bundle containing custom model definitions.
//
// It differs from the notebook bundle in that it does not need to define a
// dynamic baseURL for the static assets and may load some css that would
// already be loaded by the notebook otherwise.
// Export widget models and views, and the npm package version number.
module.exports = require('./keplergl-plugin');
module.exports.version = require('../package.json').version;
================================================
FILE: bindings/kepler.gl-jupyter/js/lib/extension.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
// This file contains the javascript that is run when the notebook is loaded.
// It contains some requirejs configuration and the `load_ipython_extension`
// which is required for any notebook extension.
//
// Some static assets may be required by the custom widget javascript. The base
// url for the notebook is not known at build time and is therefore computed
// dynamically.
/* eslint-disable no-undef */
__webpack_public_path__ = `${document.querySelector('body').getAttribute('data-base-url') }nbextensions/keplergl-jupyter`;
/* eslint-enable no-undef */
// Configure requirejs
if (window.require) {
window.require.config({
map: {
"*" : {
"keplergl-jupyter": "nbextensions/keplergl-jupyter/index"
}
}
});
}
// Export the required load_ipython_extension
module.exports = {
load_ipython_extension() {}
};
================================================
FILE: bindings/kepler.gl-jupyter/js/lib/index.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
// Export widget models and views, and the npm package version number.
module.exports = require('./keplergl-plugin');
module.exports.version = require('../package.json').version;
================================================
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl/components/app.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
import React, {useEffect, useState, useRef} from 'react';
import styled from 'styled-components';
const ReactHelmet = require('react-helmet');
const Helmet = ReactHelmet ? ReactHelmet.Helmet : null;
import {
SidebarFactory,
AddDataButtonFactory,
PanelHeaderFactory,
CustomPanelsFactory,
injectComponents
} from '@kepler.gl/components';
import CustomPanelHeaderFactory from './panel-header';
import CustomSidebarFactory from './side-bar';
import CustomCustomPanelsFactory from './config-panel';
export const KEPLER_GL_JUPYTER_VERSION = '__PACKAGE_VERSION__';
const CustomAddDataButtonFactory = () => {
const CustomAddDataButton = () => <div />;
return CustomAddDataButton;
};
const KeplerGl = injectComponents([
[AddDataButtonFactory, CustomAddDataButtonFactory],
[SidebarFactory, CustomSidebarFactory],
[PanelHeaderFactory, CustomPanelHeaderFactory],
[CustomPanelsFactory, CustomCustomPanelsFactory]
]);
const MAPBOX_TOKEN = process.env.MapboxAccessTokenJupyter; // eslint-disable-line
const StyledContainer = styled.div`
width: 100%;
height: 100%;
.kepler-gl .ReactModal__Overlay.ReactModal__Overlay--after-open {
position: absolute !important;
}
.kepler-gl .side-panel__content > div {
display: flex;
height: 100%;
flex-direction: column;
}
`;
function App() {
const rootElm = useRef(null);
const [windowDimension, setDimension] = useState({});
const handleResize = () => {
if (!rootElm.current) {
return;
}
const width = rootElm.current.offsetWidth;
const height = rootElm.current.offsetHeight;
const dimensionToSet = {
...(width && width !== windowDimension.width ? {width} : {}),
...(height && height !== windowDimension.height ? {height} : {})
};
setDimension(dimensionToSet);
};
// in Jupyter Lab, parent component has transition when window resize.
// need to delay call to get the final parent width,
const resizeDelay = () => window.setTimeout(handleResize, 500);
useEffect(() => {
window.addEventListener('resize', resizeDelay);
return () => window.removeEventListener('resize', resizeDelay);
}, []);
return (
<StyledContainer ref={rootElm} className="keplergl-widget-container">
{Helmet ? (
<Helmet>
<meta charSet="utf-8" />
<link
rel="stylesheet"
href="http://d1a3f4spazzrp4.cloudfront.net/kepler.gl/uber-fonts/4.0.0/superfine.css"
/>
<link
rel="stylesheet"
href="http://api.tiles.mapbox.com/mapbox-gl-js/v1.1.1/mapbox-gl.css"
/>
<link
rel="stylesheet"
href="https://unpkg.com/maplibre-gl@^3/dist/maplibre-gl.css"
/>
<style type="text/css">
{`font-family: ff-clan-web-pro, 'Helvetica Neue', Helvetica, sans-serif;
font-weight: 400;
font-size: 0.875em;
line-height: 1.71429;
*,
*:before,
*:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
body {
margin: 0; padding: 0;
}
.jupyter-widgets.keplergl-jupyter-widgets {
overflow: hidden;
}
.p-Widget.p-Panel.jp-OutputArea-output.jupyter-widgets {
overflow: hidden
}
`}
</style>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-64694404-19" />
<script>{`window.dataLayer=window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag('js', new Date());gtag('config', 'UA-64694404-19', {page_path: '/keplergl-jupyter-widget'});`}</script>
</Helmet>
) : null}
<KeplerGl
mapboxApiAccessToken={MAPBOX_TOKEN}
width={windowDimension.width || 800}
height={windowDimension.height || 400}
appName="Kepler.gl Jupyter"
version={KEPLER_GL_JUPYTER_VERSION}
getMapboxRef={handleResize}
/>
</StyledContainer>
);
}
export default App;
================================================
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl/components/config-panel.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
import React, {useState} from 'react';
import {Button, Icons, TextArea, withState} from '@kepler.gl/components';
import {KeplerGlSchema} from '@kepler.gl/schemas';
import {visStateLens, mapStateLens, mapStyleLens} from '@kepler.gl/reducers';
import {CopyToClipboard} from 'react-copy-to-clipboard';
import styled from 'styled-components';
const Params = {
true: 'True',
false: 'False',
null: 'None'
};
export const StyleCopyConfig = styled.div.attrs({
className: 'copy-config'
})`
width: 100%;
display: flex;
flex-direction: column;
height: 100%;
.copy-button {
position: absolute;
margin-top: -45px;
right: 28px;
}
textarea {
overflow-y: scroll;
white-space: pre-wrap;
width: 100%;
height: 100%;
resize: none;
}
`;
// convert config from string to pything dictionary
function configStringify(config) {
// replace true => True; false => False; null => None
const configStr = JSON.stringify(config, null, 2);
return configStr.replace(/: ([a-z]+)/g, function(_, key) {
return ': ' + Params[key] || ': ' + key;
});
}
export const CopyConfig = ({config}) => {
const [copied, setCopy] = useState(false);
const value = configStringify(config);
return (
<StyleCopyConfig>
<CopyToClipboard text={value} onCopy={() => setCopy(true)} className="copy-button">
<Button width="100px">
<Icons.Clipboard height="16px" />
{copied ? 'Copied!' : 'Copy'}
</Button>
</CopyToClipboard>
<TextArea value={value} readOnly selected />
</StyleCopyConfig>
);
};
function CustomSidePanelsFactory() {
const CustomPanels = ({activeSidePanel, visState, mapState, mapStyle}) => {
const config = KeplerGlSchema.getConfigToSave({visState, mapState, mapStyle});
if (activeSidePanel === 'config') {
return <CopyConfig config={config} />;
}
return null;
};
CustomPanels.defaultProps = {
panels: [
{
id: 'config',
label: 'Config',
iconComponent: Icons.CodeAlt
}
]
};
const ConnectedCustomPanels = withState(
[visStateLens, mapStateLens, mapStyleLens],
state => state
)(CustomPanels);
ConnectedCustomPanels.defaultProps = {
panels: [
{
id: 'config',
label: 'modal.exportMap.json.configTitle',
iconComponent: Icons.CodeAlt
}
]
};
return ConnectedCustomPanels;
}
export default CustomSidePanelsFactory;
================================================
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl/components/panel-header.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
import {PanelHeaderFactory, Icons, withState} from '@kepler.gl/components';
import {toggleModal} from '@kepler.gl/actions';
import React from 'react';
import {IntlProvider} from 'react-intl';
const KEPLER_DOC = 'https://docs.kepler.gl/docs/keplergl-jupyter';
export function CustomPanelHeaderFactory() {
const PanelHeader = PanelHeaderFactory();
const actionItems = props => [
{
id: 'docs',
iconComponent: Icons.Docs,
href: KEPLER_DOC,
blank: true,
tooltip: 'tooltip.documentation',
onClick: () => {}
}
];
const JupyterPanelHeader = props => (
<IntlProvider locale="en" messages={{'tooltip.documentation': 'Documentation'}}>
<PanelHeader {...props} actionItems={actionItems(props)} />
</IntlProvider>
);
return withState([], state => state, {
toggleModal
})(JupyterPanelHeader);
}
export default CustomPanelHeaderFactory;
================================================
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl/components/root.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
import React from 'react';
import ReactDOM from 'react-dom';
import {Provider} from 'react-redux';
import App from './app';
function renderRoot({id, store, ele}) {
const Root = () => (
<Provider store={store}>
<App />
</Provider>
);
ReactDOM.render(<Root />, ele);
}
export default renderRoot;
================================================
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl/components/side-bar.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
import React from 'react';
import {SidebarFactory, CollapseButtonFactory} from '@kepler.gl/components';
import styled from 'styled-components';
const StyledSideBarContainer = styled.div`
.side-panel--container {
transform:scale(0.85);
transform-origin: top left;
height: 117.64%;
padding-top: 0;
padding-right: 0;
padding-bottom: 0;
padding-left: 0;
.side-bar {
height: 100%;
}
.side-bar__close {
right: -30px;
top: 14px;
}
}
`;
// Custom sidebar will render kepler.gl default side bar
// adding a wrapper component to edit its style
function CustomSidebarFactory() {
const CloseButton = CollapseButtonFactory();
const Sidebar = SidebarFactory(CloseButton);
const CustomSidebar = (props) => (
<StyledSideBarContainer>
<Sidebar {...props}/>
</StyledSideBarContainer>
);
return CustomSidebar;
}
export default CustomSidebarFactory;
================================================
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl/kepler.gl.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
import {addDataToMap, ActionTypes} from '@kepler.gl/actions';
import {KeplerGlSchema} from '@kepler.gl/schemas';
import document from 'global/document';
import renderRoot from './components/root';
import createAppStore from './store';
import {loadJupyterData} from './utils';
import log from '../log';
const getData = that => that.model.get('data');
const getConfig = that => that.model.get('config');
const getHeight = that => that.model.get('height');
const DOM_EL_ID = 'keplergl';
let counter = 0;
const NONE_UPDATE_ACTIONS = [
ActionTypes.REGISTER_ENTRY,
ActionTypes.DELETE_ENTRY,
ActionTypes.RENAME_ENTRY,
ActionTypes.LOAD_MAP_STYLES,
ActionTypes.LAYER_HOVER
];
function getConfigInStore({hash = true, store} = {}) {
if (store) {
const currentState = store.getState().keplerGl.map;
const currentValue = KeplerGlSchema.getConfigToSave(currentState);
return hash ? JSON.stringify(currentValue) : currentValue;
}
return {};
}
function getDatasetsInStore(store) {
if (store) {
return store.getState().keplerGl.map.visState.datasets;
}
}
class KeplerGlJupyter {
constructor() {
this.id = `${DOM_EL_ID}-${counter}`;
counter++;
this.mapUpdateCounter = 0;
}
create(that) {
log('kepler.gl create');
let previousValue;
function handleStoreChange(action, nextStore) {
log(action);
if (!action || NONE_UPDATE_ACTIONS.includes(action.type)) {
return;
}
const saveState = getConfigInStore({hash: false, store: nextStore});
const hash = JSON.stringify(saveState);
// should not update model after first UPDATE_MAP action
// when component first mounted
if (previousValue !== hash && this.mapUpdateCounter > 2) {
// keplerGl State has changed
log('store state has changed, update model');
log(previousValue);
log(hash);
previousValue = hash;
that.model.set({config: saveState});
// that.model.save_changes();
that.touch();
}
if (action.type === ActionTypes.UPDATE_MAP) {
this.mapUpdateCounter++;
}
}
this.store = createAppStore(handleStoreChange.bind(this));
const height = getHeight(that);
that.el.classList.add('jupyter-widgets');
that.el.classList.add('keplergl-jupyter-widgets');
const divElmt = document.createElement('div');
divElmt.setAttribute('id', this.id);
divElmt.classList.add('kepler-gl');
divElmt.setAttribute('style', ` width: 100%; height: ${height}px;`);
that.el.appendChild(divElmt);
renderRoot({id: this.id, store: this.store, ele: divElmt});
const data = getData(that);
const config = getConfig(that);
log('<<<<<<<< render finished! >>>>>>>>>');
// After rendering the component,
// we add the data that's already in the model
const hasData = data && Object.keys(data).length;
const hasConfig = config && config.version;
if (hasData) {
log('data already in model');
addDataConfigToKeplerGl({data, config, store: this.store});
} else if (hasConfig) {
log('config already in model');
this.onConfigChange(that);
}
}
onDataChange(that) {
log('kepler.gl onDataChange');
const data = getData(that);
addDataConfigToKeplerGl({data, store: this.store});
}
onConfigChange(that) {
log('kepler.gl onConfigChange');
const config = getConfig(that);
const currentValue = getConfigInStore({hash: true, store: this.store});
if (currentValue === JSON.stringify(config)) {
// calling model.set('config') inside the js component will trigger another onConfigChange
log('onConfigChange: config is the same as saved in store');
return;
}
this.store.dispatch(
addDataToMap({
// reuse datasets in state
// a hack to apply config to existing data
datasets: Object.values(getDatasetsInStore(this.store)).map(d => ({
info: {
id: d.id,
label: d.label,
color: d.color
},
data: {
fields: d.fields,
...(d.dataContainer instanceof ArrowDataContainer
? {cols: d.dataContainer._cols}
: {rows: d.allData})
}
})),
config,
options: {centerMap: false}
})
);
}
}
export function addDataConfigToKeplerGl({data: inputData, config, options, store}) {
const data = inputData ? dataToDatasets(inputData) : [];
log(data);
const results = loadJupyterData(data);
const succeeded = results.filter(r => r && r.data);
log('addDataConfigToKeplerGl');
log(succeeded);
log(config);
const hasMapState = Boolean(config && config.config && config.config.mapState);
store.dispatch(
addDataToMap({
datasets: succeeded,
config,
options: options || {centerMap: !hasMapState}
})
);
}
export function dataToDatasets(data) {
return Object.keys(data).map(key => ({
id: key,
data: data[key]
}));
}
export default KeplerGlJupyter;
================================================
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl/main.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
// NOTE: this is only used for exporting html template
import createAppStore from './store';
import renderRoot from './components/root';
import document from 'global/document';
import Window from 'global/window';
import {addDataConfigToKeplerGl} from './kepler.gl';
const map = (function initKeplerGl() {
const id = 'keplergl-0';
const store = createAppStore();
const divElmt = document.createElement('div');
divElmt.setAttribute('style', 'width: 100vw; height: 100vh; position: absolute');
document.body.appendChild(divElmt);
return {
render: () => {
renderRoot({id, store, ele: divElmt});
},
store
};
})();
map.render();
(function loadDataConfig(keplerGlMap) {
const {data, config, options} = Window.__keplerglDataConfig || {};
addDataConfigToKeplerGl({data, config, options, store: keplerGlMap.store});
})(map);
================================================
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl/store.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
import {applyMiddleware, compose, createStore} from 'redux';
import {combineReducers} from 'redux';
import {keplerGlReducer, enhanceReduxMiddleware} from '@kepler.gl/reducers';
const customizedKeplerGlReducer = keplerGlReducer.initialState({
uiState: {
currentModal: null,
activeSidePanel: null
}
});
const reducers = combineReducers({
// mount keplerGl reducer
keplerGl: customizedKeplerGlReducer
});
const createAppStore = onChangeHandler => {
const updatesMiddleware = store => next => action => {
// exclude some actions
// Call the next dispatch method in the middleware chain.
/* eslint-disable callback-return */
const returnValue = next(action);
/* eslint-enable callback-return */
// state after dispatch
if (typeof onChangeHandler === 'function') {
onChangeHandler(action, store);
}
// This will likely be the action itself, unless
// a middleware further in chain changed it.
return returnValue;
};
const middlewares = enhanceReduxMiddleware([updatesMiddleware]);
const enhancers = [applyMiddleware(...middlewares)];
const store = createStore(reducers, {}, compose(...enhancers));
return store;
};
export default createAppStore;
================================================
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl/utils.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
import {tableFromIPC} from 'apache-arrow';
import {processCsvData, processGeojson, processArrowBatches} from '@kepler.gl/processors';
import log from '../log';
import console from 'global/console';
function handleJuptyerDataFormat(dataEntry) {
// This makes passing data between Jupyter the iframe easier
// detect data type here
log('handleJuptyerDataFormat');
const {data, id} = dataEntry;
let parsed = data;
let type = 'csv';
if (typeof data === 'object') {
if (data.columns && data.data && data.index) {
// Data is parsed as a Dataframe
log('data is a dataframe');
type = 'df';
// parsed = {fields: data.columns, data: data.data};
} else {
// assume is geojson
type = 'json';
}
} else if (typeof data === 'string') {
// check if js string is json string
try {
parsed = JSON.parse(data);
type = 'json';
} catch (e) {
// assume it is base64 string represents arrow table
try {
console.log('parse base64string arrow tabl');
// convert arrowTable from base64 string to ArrayBuffer
const arrowTableBuffer = Buffer.from(data, 'base64').buffer;
// create arrow table from ArrayBuffer
parsed = tableFromIPC([new Uint8Array(arrowTableBuffer)]);
type = 'arrow';
} catch (e) {
// now we can assume it is csv
}
}
}
return {data: parsed, type, id};
}
function processReceivedData({data, info}) {
// assume there is only 1 file
log('processReceivedData');
let processed;
try {
processed =
info.queryType === 'csv'
? processCsvData(data)
: info.queryType === 'json'
? processGeojson(data)
: info.queryType === 'df'
? processDataFrame(data)
: info.queryType === 'arrow'
? processArrowBatches(data.batches)
: null;
} catch (e) {
console.log(
`Kepler.gl fails to parse data, detected data
format is ${info.queryType}`,
e
);
}
return {data: processed, info};
}
function processDataFrame(data) {
const fields = data.columns.map(name => ({name}));
const rows = data.data;
// kepler.gl will detect field types
return {fields, rows};
}
export function loadJupyterData(rawData) {
const dataToLoad = rawData.map(handleJuptyerDataFormat).map(rd => ({
data: rd.data,
info: {
id: rd.id,
label: rd.id,
queryType: rd.type,
queryOption: 'jupyter'
}
}));
return dataToLoad.map(processReceivedData);
}
================================================
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl-plugin.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
import * as widgets from '@jupyter-widgets/base';
import KeplerGlJupyter from './keplergl/kepler.gl';
import log from './log';
// Custom Model. Custom widgets models must at least provide default values
// for model attributes, including
//
// - `_view_name`
// - `_view_module`
// - `_view_module_version`
//
// - `_model_name`
// - `_model_module`
// - `_model_module_version`
//
// when different from the base class.
// When serializing the entire widget state for embedding, only values that
// differ from the defaults will be specified.
// Note: in JavaScript, class.extend does not inherently inherit static functions.
export class KeplerGlModal extends widgets.DOMWidgetModel {
defaults() {
return {
...super.defaults(),
_model_name: 'KeplerGlModal',
_model_module: 'keplergl-jupyter',
_view_name: 'KeplerGlView',
_view_module: 'keplergl-jupyter',
data: {},
config: {}
};
}
}
export class KeplerGlView extends widgets.DOMWidgetView {
render() {
log('KeplerGlModal start render');
this.keplergl = new KeplerGlJupyter();
this.keplergl.create(this);
// event listener
this.model.on('change:data', this.data_changed, this);
this.model.on('change:config', this.config_changed, this);
window.dom = this.el;
}
data_changed() {
log('KeplerGlModal start data_changed');
this.keplergl.onDataChange(this);
}
config_changed() {
log('KeplerGlModal start config_change');
this.keplergl.onConfigChange(this);
}
}
================================================
FILE: bindings/kepler.gl-jupyter/js/lib/labplugin.js
================================================
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
var keplerglJupyter = require('./index');
var base = require('@jupyter-widgets/base');
module.exports = {
id: 'keplergl-jupyter',
requires: [base.IJupyterWidgetRegistry],
activate(app, widget
gitextract_dlltgrd3/
├── .dockerignore
├── .editorconfig
├── .eslintrc.js
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report--jupyter-widget.md
│ │ ├── bug_report.md
│ │ ├── feature-request--jupyter-widget.md
│ │ └── feature_request.md
│ ├── SECURITY.md
│ └── workflows/
│ ├── build-publish-pypi.yml
│ ├── npmpublish.yml
│ └── test.yml
├── .gitignore
├── .nvmrc
├── .prettierrc.js
├── .stylelintrc
├── .yarnrc.yml
├── CHANGELOG.md
├── FILE-HEADER
├── LICENSE
├── README.md
├── SUMMARY.md
├── TODO.md
├── UPGRADE-GUIDE.md
├── babel-register.js
├── babel.config.js
├── bindings/
│ ├── kepler.gl-jupyter/
│ │ ├── .gitignore
│ │ ├── Dockerfile
│ │ ├── MANIFEST.in
│ │ ├── README.md
│ │ ├── RELEASE.md
│ │ ├── js/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── babel.config.js
│ │ │ ├── lib/
│ │ │ │ ├── embed.js
│ │ │ │ ├── extension.js
│ │ │ │ ├── index.js
│ │ │ │ ├── keplergl/
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config-panel.js
│ │ │ │ │ │ ├── panel-header.js
│ │ │ │ │ │ ├── root.js
│ │ │ │ │ │ └── side-bar.js
│ │ │ │ │ ├── kepler.gl.js
│ │ │ │ │ ├── main.js
│ │ │ │ │ ├── store.js
│ │ │ │ │ └── utils.js
│ │ │ │ ├── keplergl-plugin.js
│ │ │ │ ├── labplugin.js
│ │ │ │ └── log.js
│ │ │ ├── package.json
│ │ │ ├── template/
│ │ │ │ └── keplergl-html.ejs
│ │ │ └── webpack/
│ │ │ ├── build-html.js
│ │ │ ├── build.js
│ │ │ ├── config.js
│ │ │ └── dev.js
│ │ ├── keplergl/
│ │ │ ├── __init__.py
│ │ │ ├── _version.py
│ │ │ └── keplergl.py
│ │ ├── keplergl-jupyter.json
│ │ ├── notebooks/
│ │ │ ├── DataFrame.ipynb
│ │ │ ├── GeoDataFrame.ipynb
│ │ │ ├── GeoJSON.ipynb
│ │ │ ├── Load kepler.gl.ipynb
│ │ │ ├── geojson-data.json
│ │ │ ├── hex-data.csv
│ │ │ ├── hex_config.py
│ │ │ └── sf_zip_geo.json
│ │ ├── pyproject.toml
│ │ ├── requirements.txt
│ │ ├── setup.cfg
│ │ └── setup.py
│ └── python/
│ ├── DEVELOPMENT.md
│ ├── README.md
│ ├── esbuild.config.mjs
│ ├── keplergl/
│ │ ├── __init__.py
│ │ ├── _version.py
│ │ ├── serializers.py
│ │ └── widget.py
│ ├── notebooks/
│ │ ├── DataFrame.ipynb
│ │ ├── GeoDataFrame.ipynb
│ │ ├── GeoJSON.ipynb
│ │ ├── Load kepler.gl.ipynb
│ │ ├── geojson-data.json
│ │ ├── hex-data.csv
│ │ ├── hex_config.py
│ │ └── sf_zip_geo.json
│ ├── package.json
│ ├── pyproject.toml
│ ├── src/
│ │ ├── components/
│ │ │ └── App.tsx
│ │ ├── index.ts
│ │ ├── process-shim.js
│ │ ├── store.ts
│ │ ├── styles.css
│ │ ├── types.ts
│ │ ├── utils/
│ │ │ ├── data.ts
│ │ │ └── serialization.ts
│ │ └── widget.ts
│ ├── tests/
│ │ ├── conftest.py
│ │ ├── test_serializers.py
│ │ └── test_widget.py
│ └── tsconfig.json
├── contributing/
│ ├── CODE_OF_CONDUCT.md
│ ├── DEVELOPERS.md
│ └── README.md
├── docs/
│ ├── README.md
│ ├── RFC/
│ │ └── table-class.md
│ ├── api-reference/
│ │ ├── README.md
│ │ ├── actions/
│ │ │ ├── README.md
│ │ │ └── actions.md
│ │ ├── advanced-usages/
│ │ │ ├── custom-initial-state.md
│ │ │ ├── custom-map-styles.md
│ │ │ ├── custom-mapbox-host.md
│ │ │ ├── forward-actions.md
│ │ │ ├── reducer-plugin.md
│ │ │ ├── replace-ui-component.md
│ │ │ ├── saving-loading-w-schema.md
│ │ │ └── using-updaters.md
│ │ ├── cloud-providers/
│ │ │ ├── README.md
│ │ │ └── cloud-provider.md
│ │ ├── components/
│ │ │ └── README.md
│ │ ├── custom-theme/
│ │ │ └── README.md
│ │ ├── ecosystem.md
│ │ ├── get-started.md
│ │ ├── localization/
│ │ │ └── README.md
│ │ ├── processors/
│ │ │ ├── README.md
│ │ │ └── processors.md
│ │ ├── reducers/
│ │ │ ├── README.md
│ │ │ ├── combine.md
│ │ │ ├── map-state.md
│ │ │ ├── map-style.md
│ │ │ ├── reducers.md
│ │ │ ├── ui-state.md
│ │ │ └── vis-state.md
│ │ └── schemas/
│ │ └── README.md
│ ├── keplergl-jupyter/
│ │ └── README.md
│ ├── release-notes.md
│ ├── spatial-analysis-tutorial/
│ │ ├── README.md
│ │ ├── basic-mapping.md
│ │ ├── get-started.md
│ │ ├── rate-mapping.md
│ │ ├── spatial-data-gis.md
│ │ └── spatial-data-wrangling.md
│ ├── table-of-contents.json
│ └── user-guides/
│ ├── README.md
│ ├── ai-assistant.md
│ ├── b-kepler-gl-workflow/
│ │ ├── README.md
│ │ ├── a-add-data-to-the-map.md
│ │ └── b-add-data-layers/
│ │ ├── a-adding-data-layers.md
│ │ ├── b-create-a-layer.md
│ │ ├── c-hide-edit-and-delete-layers.md
│ │ └── d-blend-and-rearrange-layers.md
│ ├── c-types-of-layers/
│ │ ├── README.md
│ │ ├── a-point.md
│ │ ├── b-arc.md
│ │ ├── c-line.md
│ │ ├── d-grid.md
│ │ ├── e-polygon.md
│ │ ├── f-cluster.md
│ │ ├── g-icon.md
│ │ ├── h-hexbin.md
│ │ ├── i-heatmap.md
│ │ ├── j-h3.md
│ │ ├── k-trip.md
│ │ ├── l-s2.md
│ │ ├── m-vector-tile-layer.md
│ │ ├── n-raster-tile-layer.md
│ │ ├── o-wms-layer.md
│ │ └── vector.md
│ ├── d-layer-attributes.md
│ ├── e-filters.md
│ ├── f-map-styles.md
│ ├── g-interactions.md
│ ├── h-playback.md
│ ├── i-FAQ.md
│ ├── j-get-started.md
│ ├── k-save-and-export.md
│ ├── l-color-attributes.md
│ ├── m-map-settings.md
│ └── sql-data-explorer.md
├── esbuild/
│ └── umd-esbuild.config.mjs
├── examples/
│ ├── README.md
│ ├── custom-map-style/
│ │ ├── .babelrc
│ │ ├── README.md
│ │ ├── esbuild.config.mjs
│ │ ├── index.html
│ │ ├── package.json
│ │ └── src/
│ │ ├── app.tsx
│ │ ├── main.tsx
│ │ └── store.ts
│ ├── custom-reducer/
│ │ ├── .babelrc
│ │ ├── README.md
│ │ ├── esbuild.config.mjs
│ │ ├── index.html
│ │ ├── package.json
│ │ └── src/
│ │ ├── app-reducer.js
│ │ ├── app.js
│ │ ├── configurations/
│ │ │ └── config.js
│ │ ├── data/
│ │ │ └── sample-data.js
│ │ ├── main.js
│ │ └── store.js
│ ├── custom-theme/
│ │ ├── .babelrc
│ │ ├── README.md
│ │ ├── esbuild.config.mjs
│ │ ├── index.html
│ │ ├── package.json
│ │ └── src/
│ │ ├── actions.js
│ │ ├── app.js
│ │ ├── main.js
│ │ ├── reducers/
│ │ │ └── index.js
│ │ └── store.js
│ ├── demo-app/
│ │ ├── .yarnrc.yml
│ │ ├── README.md
│ │ ├── esbuild.config.mjs
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── actions.js
│ │ │ ├── app.tsx
│ │ │ ├── cloud-providers/
│ │ │ │ ├── carto/
│ │ │ │ │ ├── carto-icon.js
│ │ │ │ │ └── carto-provider.js
│ │ │ │ ├── dropbox/
│ │ │ │ │ ├── dropbox-error-modal.js
│ │ │ │ │ ├── dropbox-icon.js
│ │ │ │ │ └── dropbox-provider.js
│ │ │ │ ├── foursquare/
│ │ │ │ │ ├── foursquare-icon.js
│ │ │ │ │ └── foursquare-provider.js
│ │ │ │ └── index.js
│ │ │ ├── components/
│ │ │ │ ├── announcement.js
│ │ │ │ ├── banner.js
│ │ │ │ ├── load-data-modal/
│ │ │ │ │ ├── load-remote-map.js
│ │ │ │ │ ├── sample-data-viewer.js
│ │ │ │ │ └── sample-maps-tab.js
│ │ │ │ └── map-control/
│ │ │ │ ├── map-control.js
│ │ │ │ └── sql-panel-control.tsx
│ │ │ ├── constants/
│ │ │ │ ├── default-settings.js
│ │ │ │ └── localization.js
│ │ │ ├── data/
│ │ │ │ ├── sample-animate-trip-data.js
│ │ │ │ ├── sample-geojson-config.js
│ │ │ │ ├── sample-geojson-points.js
│ │ │ │ ├── sample-gps-data.js
│ │ │ │ ├── sample-hex-id-csv.js
│ │ │ │ ├── sample-icon-csv.js
│ │ │ │ ├── sample-row-data.js
│ │ │ │ ├── sample-s2-data.js
│ │ │ │ ├── sample-small-geojson.js
│ │ │ │ └── sample-trip-data.js
│ │ │ ├── factories/
│ │ │ │ ├── load-data-modal.js
│ │ │ │ ├── map-control.js
│ │ │ │ └── panel-header.js
│ │ │ ├── main.js
│ │ │ ├── reducers/
│ │ │ │ └── index.js
│ │ │ ├── store.js
│ │ │ └── utils/
│ │ │ ├── routes.js
│ │ │ └── strings.js
│ │ └── yarn.lock
│ ├── get-started/
│ │ ├── .yarnrc.yml
│ │ ├── esbuild.config.mjs
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── app.tsx
│ │ │ └── index.html
│ │ └── tsconfig.json
│ ├── get-started-vite/
│ │ ├── README.md
│ │ ├── eslint.config.js
│ │ ├── index.html
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── main.tsx
│ │ ├── tsconfig.json
│ │ ├── tsconfig.node.json
│ │ └── vite.config.ts
│ ├── node-app/
│ │ ├── .babelrc
│ │ ├── README.md
│ │ ├── esbuild.config.mjs
│ │ ├── index.html
│ │ ├── package.json
│ │ ├── server.js
│ │ └── src/
│ │ ├── app-reducer.js
│ │ ├── app.js
│ │ ├── main.js
│ │ └── store.js
│ ├── open-modal/
│ │ ├── .babelrc
│ │ ├── README.md
│ │ ├── esbuild.config.mjs
│ │ ├── index.html
│ │ ├── package.json
│ │ └── src/
│ │ ├── app-reducer.js
│ │ ├── app.js
│ │ ├── components/
│ │ │ ├── fresh-map.js
│ │ │ └── saved-map.js
│ │ ├── configurations/
│ │ │ └── config.js
│ │ ├── data/
│ │ │ └── sample-data.js
│ │ ├── main.js
│ │ └── store.js
│ ├── replace-component/
│ │ ├── .babelrc
│ │ ├── README.md
│ │ ├── esbuild.config.mjs
│ │ ├── index.html
│ │ ├── package.json
│ │ └── src/
│ │ ├── actions.js
│ │ ├── app-reducer.js
│ │ ├── app.js
│ │ ├── components/
│ │ │ ├── custom-map-popover.js
│ │ │ ├── custom-panel.js
│ │ │ ├── panel-header.js
│ │ │ ├── panel-toggle.js
│ │ │ └── side-bar.js
│ │ ├── data/
│ │ │ └── sample-data.js
│ │ ├── main.js
│ │ └── store.js
│ └── umd-client/
│ ├── README.md
│ └── index.html
├── jest.config.js
├── jest.setup.js
├── jsconfig.json
├── package.json
├── scripts/
│ ├── action-table-maker.js
│ ├── ast-helper.js
│ ├── documentation.js
│ ├── edit-version.js
│ ├── fix-dependencies.sh
│ ├── install-and-start.js
│ ├── license-header/
│ │ ├── README.md
│ │ ├── bin.mjs
│ │ └── license-fixer.mjs
│ ├── log.js
│ └── ts-smoosh/
│ ├── README.md
│ ├── bin.js
│ ├── smoosh.js
│ ├── test.js
│ └── tests/
│ ├── 01-functions/
│ │ ├── a.d.ts
│ │ ├── a.js
│ │ └── a.tsx
│ ├── 02-imports/
│ │ ├── b.d.ts
│ │ ├── c.js
│ │ └── c.tsx
│ └── 03-const/
│ ├── e.d.ts
│ ├── e.js
│ └── e.tsx
├── src/
│ ├── actions/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── action-types.ts
│ │ │ ├── action-wrapper.ts
│ │ │ ├── actions.ts
│ │ │ ├── identity-actions.ts
│ │ │ ├── index.ts
│ │ │ ├── map-state-actions.ts
│ │ │ ├── map-style-actions.ts
│ │ │ ├── provider-actions.ts
│ │ │ ├── ui-state-actions.ts
│ │ │ └── vis-state-actions.ts
│ │ └── tsconfig.production.json
│ ├── ai-assistant/
│ │ ├── README.md
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── actions.ts
│ │ │ ├── components/
│ │ │ │ ├── ai-assistant-component.tsx
│ │ │ │ ├── ai-assistant-config.tsx
│ │ │ │ └── ai-assistant-manager.tsx
│ │ │ ├── config/
│ │ │ │ └── models.ts
│ │ │ ├── constants.ts
│ │ │ ├── icons/
│ │ │ │ ├── ai-star.tsx
│ │ │ │ └── api-key.tsx
│ │ │ ├── index.ts
│ │ │ ├── localization.ts
│ │ │ ├── map/
│ │ │ │ └── ai-assistant-control.tsx
│ │ │ ├── plugin.ts
│ │ │ ├── reducers/
│ │ │ │ └── index.ts
│ │ │ └── tools/
│ │ │ ├── echarts-tools.tsx
│ │ │ ├── geo-tools.tsx
│ │ │ ├── kepler-tools/
│ │ │ │ ├── basemap-tool.tsx
│ │ │ │ ├── boundary-tool.tsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── layer-creation-tool.tsx
│ │ │ │ ├── layer-style-tool.tsx
│ │ │ │ ├── loaddata-tool.tsx
│ │ │ │ ├── save-data-tool.tsx
│ │ │ │ └── table-tool.tsx
│ │ │ ├── lisa-tool.tsx
│ │ │ ├── query-tool.tsx
│ │ │ ├── tools.tsx
│ │ │ └── utils.ts
│ │ └── tsconfig.production.json
│ ├── cloud-providers/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── base.tsx
│ │ │ ├── index.ts
│ │ │ ├── provider.ts
│ │ │ └── upload.tsx
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── common-utils/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── data-type.ts
│ │ │ ├── data.ts
│ │ │ ├── h3-utils.ts
│ │ │ ├── index.ts
│ │ │ ├── promise.ts
│ │ │ ├── string.ts
│ │ │ └── url.ts
│ │ └── tsconfig.production.json
│ ├── components/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── bottom-widget.tsx
│ │ │ ├── common/
│ │ │ │ ├── action-panel.tsx
│ │ │ │ ├── animation-control/
│ │ │ │ │ ├── animation-control.tsx
│ │ │ │ │ ├── animation-controller.ts
│ │ │ │ │ ├── animation-speed-slider.tsx
│ │ │ │ │ ├── animation-window-control.tsx
│ │ │ │ │ ├── floating-time-display.tsx
│ │ │ │ │ ├── play-control.tsx
│ │ │ │ │ ├── playback-controls.tsx
│ │ │ │ │ ├── reset-control.tsx
│ │ │ │ │ ├── speed-control.tsx
│ │ │ │ │ └── window-action-control.tsx
│ │ │ │ ├── checkbox.tsx
│ │ │ │ ├── color-legend.tsx
│ │ │ │ ├── column-stats-chart.tsx
│ │ │ │ ├── data-table/
│ │ │ │ │ ├── button.tsx
│ │ │ │ │ ├── canvas.tsx
│ │ │ │ │ ├── cell-size.ts
│ │ │ │ │ ├── display-format.tsx
│ │ │ │ │ ├── grid.tsx
│ │ │ │ │ ├── header-cell.tsx
│ │ │ │ │ ├── index.tsx
│ │ │ │ │ └── option-dropdown.tsx
│ │ │ │ ├── dataset-label.tsx
│ │ │ │ ├── dnd-layer-items.ts
│ │ │ │ ├── error-boundary.tsx
│ │ │ │ ├── field-selector.tsx
│ │ │ │ ├── field-token.tsx
│ │ │ │ ├── file-uploader/
│ │ │ │ │ ├── file-drop.tsx
│ │ │ │ │ ├── file-upload-progress.tsx
│ │ │ │ │ ├── file-upload.tsx
│ │ │ │ │ └── upload-button.tsx
│ │ │ │ ├── flex-container.ts
│ │ │ │ ├── histogram-plot.tsx
│ │ │ │ ├── icon-button.tsx
│ │ │ │ ├── icons/
│ │ │ │ │ ├── add.tsx
│ │ │ │ │ ├── anchor_window.tsx
│ │ │ │ │ ├── arrow-down-alt.tsx
│ │ │ │ │ ├── arrow-down-full.tsx
│ │ │ │ │ ├── arrow-down-small.tsx
│ │ │ │ │ ├── arrow-down-solid.tsx
│ │ │ │ │ ├── arrow-down.tsx
│ │ │ │ │ ├── arrow-left.tsx
│ │ │ │ │ ├── arrow-right.tsx
│ │ │ │ │ ├── arrow-up-alt.tsx
│ │ │ │ │ ├── arrow-up-solid.tsx
│ │ │ │ │ ├── arrow-up.tsx
│ │ │ │ │ ├── base-map.tsx
│ │ │ │ │ ├── base.tsx
│ │ │ │ │ ├── bug.tsx
│ │ │ │ │ ├── calendar.tsx
│ │ │ │ │ ├── cancel.tsx
│ │ │ │ │ ├── checkmark.tsx
│ │ │ │ │ ├── clipboard.tsx
│ │ │ │ │ ├── clock.tsx
│ │ │ │ │ ├── close.tsx
│ │ │ │ │ ├── cloud.tsx
│ │ │ │ │ ├── code-alt.tsx
│ │ │ │ │ ├── copy.tsx
│ │ │ │ │ ├── crosshairs.tsx
│ │ │ │ │ ├── cube-3d.tsx
│ │ │ │ │ ├── cursor-click.tsx
│ │ │ │ │ ├── cursor-point.tsx
│ │ │ │ │ ├── data-table.tsx
│ │ │ │ │ ├── db.tsx
│ │ │ │ │ ├── delete.tsx
│ │ │ │ │ ├── docs.tsx
│ │ │ │ │ ├── docs2.tsx
│ │ │ │ │ ├── drag-n-drop.tsx
│ │ │ │ │ ├── draggable-dots.tsx
│ │ │ │ │ ├── draw-polygon.tsx
│ │ │ │ │ ├── edit.tsx
│ │ │ │ │ ├── effects/
│ │ │ │ │ │ ├── brightness-contrast.tsx
│ │ │ │ │ │ ├── color-halftone.tsx
│ │ │ │ │ │ ├── dot-screen.tsx
│ │ │ │ │ │ ├── edge-work.tsx
│ │ │ │ │ │ ├── hexagonal-pixelate.tsx
│ │ │ │ │ │ ├── hue-saturation.tsx
│ │ │ │ │ │ ├── ink.tsx
│ │ │ │ │ │ ├── light-and-shadow.tsx
│ │ │ │ │ │ ├── magic-wand.tsx
│ │ │ │ │ │ ├── magnify.tsx
│ │ │ │ │ │ ├── noise.tsx
│ │ │ │ │ │ ├── sepia.tsx
│ │ │ │ │ │ ├── tilt-shift.tsx
│ │ │ │ │ │ ├── triangle-blur.tsx
│ │ │ │ │ │ ├── vibrance.tsx
│ │ │ │ │ │ ├── vignette.tsx
│ │ │ │ │ │ └── zoom-blur.tsx
│ │ │ │ │ ├── email.tsx
│ │ │ │ │ ├── expand.tsx
│ │ │ │ │ ├── eye-seen.tsx
│ │ │ │ │ ├── eye-unseen.tsx
│ │ │ │ │ ├── file-type.tsx
│ │ │ │ │ ├── file.tsx
│ │ │ │ │ ├── files.tsx
│ │ │ │ │ ├── filter-funnel.tsx
│ │ │ │ │ ├── free-window.tsx
│ │ │ │ │ ├── gear.tsx
│ │ │ │ │ ├── globe.tsx
│ │ │ │ │ ├── hash.tsx
│ │ │ │ │ ├── help.tsx
│ │ │ │ │ ├── histogram.tsx
│ │ │ │ │ ├── horizontal-resize-handle.tsx
│ │ │ │ │ ├── index.tsx
│ │ │ │ │ ├── info.tsx
│ │ │ │ │ ├── layers.tsx
│ │ │ │ │ ├── left-arrow.tsx
│ │ │ │ │ ├── legend.tsx
│ │ │ │ │ ├── line-chart.tsx
│ │ │ │ │ ├── location-marker.tsx
│ │ │ │ │ ├── login.tsx
│ │ │ │ │ ├── logout.tsx
│ │ │ │ │ ├── map-icon.tsx
│ │ │ │ │ ├── map-pin.tsx
│ │ │ │ │ ├── messages.tsx
│ │ │ │ │ ├── minus.tsx
│ │ │ │ │ ├── moon.tsx
│ │ │ │ │ ├── order-by-dataset.tsx
│ │ │ │ │ ├── order-by-list.tsx
│ │ │ │ │ ├── pause.tsx
│ │ │ │ │ ├── picture.tsx
│ │ │ │ │ ├── pin.tsx
│ │ │ │ │ ├── play.tsx
│ │ │ │ │ ├── pointer-click.tsx
│ │ │ │ │ ├── polygon.tsx
│ │ │ │ │ ├── rectangle.tsx
│ │ │ │ │ ├── reduce.tsx
│ │ │ │ │ ├── reset.tsx
│ │ │ │ │ ├── save.tsx
│ │ │ │ │ ├── save2.tsx
│ │ │ │ │ ├── search.tsx
│ │ │ │ │ ├── settings.tsx
│ │ │ │ │ ├── share.tsx
│ │ │ │ │ ├── speed.tsx
│ │ │ │ │ ├── split.tsx
│ │ │ │ │ ├── square-select.tsx
│ │ │ │ │ ├── sun.tsx
│ │ │ │ │ ├── sunrise.tsx
│ │ │ │ │ ├── sunset.tsx
│ │ │ │ │ ├── timeline-marker.tsx
│ │ │ │ │ ├── trash.tsx
│ │ │ │ │ ├── vert-dots.tsx
│ │ │ │ │ ├── vert-three-dots.tsx
│ │ │ │ │ ├── warning-sign.tsx
│ │ │ │ │ ├── warning.tsx
│ │ │ │ │ ├── zoom-in.tsx
│ │ │ │ │ └── zoom-out.tsx
│ │ │ │ ├── image-preview.tsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── info-helper.tsx
│ │ │ │ ├── item-selector/
│ │ │ │ │ ├── accessor.ts
│ │ │ │ │ ├── chickleted-input.tsx
│ │ │ │ │ ├── dropdown-list.tsx
│ │ │ │ │ ├── dropdown-select.tsx
│ │ │ │ │ ├── item-selector.tsx
│ │ │ │ │ └── typeahead.tsx
│ │ │ │ ├── line-chart.tsx
│ │ │ │ ├── link-renderer.tsx
│ │ │ │ ├── loading-spinner.tsx
│ │ │ │ ├── logo.tsx
│ │ │ │ ├── map-layer-selector.tsx
│ │ │ │ ├── modal.tsx
│ │ │ │ ├── portaled.tsx
│ │ │ │ ├── progress-bar.tsx
│ │ │ │ ├── radius-legend.tsx
│ │ │ │ ├── range-brush.tsx
│ │ │ │ ├── range-plot.tsx
│ │ │ │ ├── range-slider-timeline-panel.tsx
│ │ │ │ ├── range-slider-timeline.tsx
│ │ │ │ ├── range-slider.tsx
│ │ │ │ ├── slider/
│ │ │ │ │ ├── mouse-event.ts
│ │ │ │ │ ├── slider-bar-handle.tsx
│ │ │ │ │ ├── slider-handle.tsx
│ │ │ │ │ └── slider.tsx
│ │ │ │ ├── styled-components.tsx
│ │ │ │ ├── switch.tsx
│ │ │ │ ├── sync-timeline-control.tsx
│ │ │ │ ├── time-range-slider-time-title.tsx
│ │ │ │ ├── time-range-slider.tsx
│ │ │ │ ├── time-slider-marker.tsx
│ │ │ │ ├── timeline-slider.tsx
│ │ │ │ ├── tippy-tooltip.tsx
│ │ │ │ ├── toolbar-item.tsx
│ │ │ │ ├── toolbar.tsx
│ │ │ │ └── vertical-toolbar.tsx
│ │ │ ├── connect/
│ │ │ │ ├── keplergl-connect.ts
│ │ │ │ └── with-local-selector.tsx
│ │ │ ├── container.tsx
│ │ │ ├── context.tsx
│ │ │ ├── dnd-context.tsx
│ │ │ ├── editor/
│ │ │ │ ├── editor.tsx
│ │ │ │ └── feature-action-panel.tsx
│ │ │ ├── effects/
│ │ │ │ ├── compact-color-picker.tsx
│ │ │ │ ├── effect-configurator.tsx
│ │ │ │ ├── effect-list.tsx
│ │ │ │ ├── effect-manager.tsx
│ │ │ │ ├── effect-panel-header.tsx
│ │ │ │ ├── effect-panel.tsx
│ │ │ │ ├── effect-time-configurator.tsx
│ │ │ │ ├── effect-time-selector.tsx
│ │ │ │ ├── effect-time-slider.tsx
│ │ │ │ ├── effect-type-dropdown-list.tsx
│ │ │ │ ├── effect-type-list-item.tsx
│ │ │ │ ├── effect-type-selector.tsx
│ │ │ │ ├── side-panel-title.tsx
│ │ │ │ └── timezone-selector.tsx
│ │ │ ├── filter-animation-controller.tsx
│ │ │ ├── filters/
│ │ │ │ ├── components.ts
│ │ │ │ ├── filter-panels/
│ │ │ │ │ ├── filter-panel-with-field-select.tsx
│ │ │ │ │ ├── filter-synced-dataset-panel.tsx
│ │ │ │ │ ├── multi-select-filter-panel.tsx
│ │ │ │ │ ├── new-filter-panel.tsx
│ │ │ │ │ ├── polygon-filter-panel.tsx
│ │ │ │ │ ├── range-filter-panel.tsx
│ │ │ │ │ ├── single-select-filter-panel.tsx
│ │ │ │ │ ├── time-range-filter-panel.tsx
│ │ │ │ │ ├── time-synced-field-selector.tsx
│ │ │ │ │ └── types.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── multi-select-filter.tsx
│ │ │ │ ├── polygon-filter.tsx
│ │ │ │ ├── range-filter.tsx
│ │ │ │ ├── single-select-filter.tsx
│ │ │ │ ├── time-range-filter.tsx
│ │ │ │ ├── time-widget-top.tsx
│ │ │ │ ├── time-widget.tsx
│ │ │ │ └── types.ts
│ │ │ ├── geocoder/
│ │ │ │ └── geocoder.tsx
│ │ │ ├── geocoder-panel.tsx
│ │ │ ├── hooks/
│ │ │ │ ├── use-cloud-list-provider.tsx
│ │ │ │ ├── use-dnd-effects.tsx
│ │ │ │ ├── use-dnd-layers.tsx
│ │ │ │ ├── use-feature-flags.tsx
│ │ │ │ ├── use-fetch-raster-tile-metadata.ts
│ │ │ │ ├── use-fetch-vector-tile-metadata.ts
│ │ │ │ ├── use-legend-position.ts
│ │ │ │ └── use-on-click-outside.tsx
│ │ │ ├── index.ts
│ │ │ ├── injector.tsx
│ │ │ ├── kepler-gl.tsx
│ │ │ ├── layer-animation-controller.tsx
│ │ │ ├── loading-indicator.tsx
│ │ │ ├── map/
│ │ │ │ ├── coordinate-info.tsx
│ │ │ │ ├── effects/
│ │ │ │ │ └── effect-control.tsx
│ │ │ │ ├── layer-hover-info.tsx
│ │ │ │ ├── layer-selector-panel.tsx
│ │ │ │ ├── lazy-tippy.tsx
│ │ │ │ ├── locale-panel.tsx
│ │ │ │ ├── map-control-panel.tsx
│ │ │ │ ├── map-control-toolbar.tsx
│ │ │ │ ├── map-control-tooltip.tsx
│ │ │ │ ├── map-control.tsx
│ │ │ │ ├── map-draw-panel.tsx
│ │ │ │ ├── map-legend-panel.tsx
│ │ │ │ ├── map-legend.tsx
│ │ │ │ ├── map-popover-content.tsx
│ │ │ │ ├── map-popover.tsx
│ │ │ │ ├── split-map-button.tsx
│ │ │ │ └── toggle-3d-button.tsx
│ │ │ ├── map-container.tsx
│ │ │ ├── map-view-state-context.tsx
│ │ │ ├── maps-layout.tsx
│ │ │ ├── modal-container.tsx
│ │ │ ├── modals/
│ │ │ │ ├── add-map-style-modal.tsx
│ │ │ │ ├── cloud-components/
│ │ │ │ │ ├── cloud-header.tsx
│ │ │ │ │ ├── cloud-item.spec.tsx
│ │ │ │ │ ├── cloud-item.tsx
│ │ │ │ │ ├── cloud-maps.spec.tsx
│ │ │ │ │ ├── cloud-maps.tsx
│ │ │ │ │ ├── provider-loading.tsx
│ │ │ │ │ └── provider-select.tsx
│ │ │ │ ├── cloud-tile.tsx
│ │ │ │ ├── data-table-modal.tsx
│ │ │ │ ├── delete-data-modal.tsx
│ │ │ │ ├── error-display.tsx
│ │ │ │ ├── export-data-modal.tsx
│ │ │ │ ├── export-image-modal.tsx
│ │ │ │ ├── export-map-modal/
│ │ │ │ │ ├── components.tsx
│ │ │ │ │ ├── export-html-map.tsx
│ │ │ │ │ ├── export-json-map.tsx
│ │ │ │ │ └── export-map-modal.tsx
│ │ │ │ ├── image-modal-container.tsx
│ │ │ │ ├── load-data-modal.tsx
│ │ │ │ ├── load-storage-map.spec.tsx
│ │ │ │ ├── load-storage-map.tsx
│ │ │ │ ├── loading-dialog.tsx
│ │ │ │ ├── modal-dialog.tsx
│ │ │ │ ├── modal-tabs.tsx
│ │ │ │ ├── overwrite-map-modal.tsx
│ │ │ │ ├── save-map-modal.spec.tsx
│ │ │ │ ├── save-map-modal.tsx
│ │ │ │ ├── share-map-modal.spec.tsx
│ │ │ │ ├── share-map-modal.tsx
│ │ │ │ ├── status-panel.tsx
│ │ │ │ ├── storage-map-viewer.tsx
│ │ │ │ └── tilesets-modals/
│ │ │ │ ├── common.tsx
│ │ │ │ ├── load-data-footer.tsx
│ │ │ │ ├── load-tileset.tsx
│ │ │ │ ├── tileset-icon.tsx
│ │ │ │ ├── tileset-raster-form.tsx
│ │ │ │ ├── tileset-vector-form.tsx
│ │ │ │ └── tileset-wms-form.tsx
│ │ │ ├── notification-panel/
│ │ │ │ └── notification-item.tsx
│ │ │ ├── notification-panel.tsx
│ │ │ ├── plot-container.tsx
│ │ │ ├── side-panel/
│ │ │ │ ├── add-by-dataset-button.tsx
│ │ │ │ ├── cloud-storage-dropdown.tsx
│ │ │ │ ├── common/
│ │ │ │ │ ├── dataset-info.tsx
│ │ │ │ │ ├── dataset-tag.tsx
│ │ │ │ │ ├── dataset-title.tsx
│ │ │ │ │ ├── source-data-catalog.tsx
│ │ │ │ │ ├── source-data-selector-content.tsx
│ │ │ │ │ ├── source-data-selector.tsx
│ │ │ │ │ ├── source-selector.tsx
│ │ │ │ │ └── types.ts
│ │ │ │ ├── custom-panel.tsx
│ │ │ │ ├── filter-manager.tsx
│ │ │ │ ├── filter-panel/
│ │ │ │ │ ├── add-filter-button.tsx
│ │ │ │ │ ├── filter-panel-header.tsx
│ │ │ │ │ └── filter-panel.tsx
│ │ │ │ ├── interaction-manager.tsx
│ │ │ │ ├── interaction-panel/
│ │ │ │ │ ├── brush-config.tsx
│ │ │ │ │ ├── interaction-panel.tsx
│ │ │ │ │ ├── tooltip-config/
│ │ │ │ │ │ └── tooltip-chicklet.tsx
│ │ │ │ │ └── tooltip-config.tsx
│ │ │ │ ├── layer-manager.tsx
│ │ │ │ ├── layer-panel/
│ │ │ │ │ ├── add-layer-button.tsx
│ │ │ │ │ ├── aggr-scale-selector.tsx
│ │ │ │ │ ├── channel-by-value-selector.tsx
│ │ │ │ │ ├── color-breaks-panel.tsx
│ │ │ │ │ ├── color-palette-preset.tsx
│ │ │ │ │ ├── color-palette.tsx
│ │ │ │ │ ├── color-range-selector.tsx
│ │ │ │ │ ├── color-scale-selector.tsx
│ │ │ │ │ ├── color-selector.tsx
│ │ │ │ │ ├── column-selector.tsx
│ │ │ │ │ ├── custom-palette.tsx
│ │ │ │ │ ├── custom-picker.tsx
│ │ │ │ │ ├── dataset-layer-group.tsx
│ │ │ │ │ ├── dataset-layer-section.tsx
│ │ │ │ │ ├── dataset-section.tsx
│ │ │ │ │ ├── dimension-scale-selector.tsx
│ │ │ │ │ ├── how-to-button.tsx
│ │ │ │ │ ├── layer-color-selector.tsx
│ │ │ │ │ ├── layer-column-config.tsx
│ │ │ │ │ ├── layer-column-mode-config.tsx
│ │ │ │ │ ├── layer-config-group.tsx
│ │ │ │ │ ├── layer-configurator.tsx
│ │ │ │ │ ├── layer-error-message.tsx
│ │ │ │ │ ├── layer-list.tsx
│ │ │ │ │ ├── layer-panel-header.tsx
│ │ │ │ │ ├── layer-panel.tsx
│ │ │ │ │ ├── layer-type-dropdown-list.tsx
│ │ │ │ │ ├── layer-type-list-item.tsx
│ │ │ │ │ ├── layer-type-selector.tsx
│ │ │ │ │ ├── radius-by-zoom-input.tsx
│ │ │ │ │ ├── raster-tile-colormap-list-item.tsx
│ │ │ │ │ ├── raster-tile-layer-configurator.tsx
│ │ │ │ │ ├── single-color-palette.tsx
│ │ │ │ │ ├── text-label-panel.tsx
│ │ │ │ │ ├── vector-tile-layer-configurator.tsx
│ │ │ │ │ ├── vis-config-by-field-selector.tsx
│ │ │ │ │ ├── vis-config-slider.tsx
│ │ │ │ │ └── vis-config-switch.tsx
│ │ │ │ ├── map-manager.tsx
│ │ │ │ ├── map-style-panel/
│ │ │ │ │ ├── map-layer-group-color-picker.tsx
│ │ │ │ │ ├── map-layer-group-item.tsx
│ │ │ │ │ ├── map-layer-selector.tsx
│ │ │ │ │ └── map-style-selector.tsx
│ │ │ │ ├── panel-header-action.tsx
│ │ │ │ ├── panel-header.tsx
│ │ │ │ ├── panel-tab.tsx
│ │ │ │ ├── panel-title.tsx
│ │ │ │ ├── panel-toggle.tsx
│ │ │ │ ├── panel-view-list-toggle.tsx
│ │ │ │ └── side-bar.tsx
│ │ │ ├── side-panel.tsx
│ │ │ └── types.ts
│ │ └── tsconfig.production.json
│ ├── constants/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── color-palettes.ts
│ │ │ ├── colors-by-theme.ts
│ │ │ ├── dataset.ts
│ │ │ ├── default-settings.ts
│ │ │ ├── index.ts
│ │ │ ├── keyevent.ts
│ │ │ ├── layers.ts
│ │ │ ├── plot.ts
│ │ │ ├── time.ts
│ │ │ ├── tooltip.ts
│ │ │ ├── user-feedbacks.ts
│ │ │ └── user-guides.ts
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── deckgl-arrow-layers/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── constants.ts
│ │ │ ├── index.ts
│ │ │ ├── layers/
│ │ │ │ ├── geo-arrow-arc-layer.ts
│ │ │ │ ├── geo-arrow-scatterplot-layer.ts
│ │ │ │ └── geo-arrow-text-layer.ts
│ │ │ ├── types.ts
│ │ │ └── utils/
│ │ │ ├── picking.ts
│ │ │ ├── utils.ts
│ │ │ └── validate.ts
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── deckgl-layers/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── 3d-building-layer/
│ │ │ │ ├── 3d-building-layer.ts
│ │ │ │ ├── 3d-building-utils.ts
│ │ │ │ └── types.ts
│ │ │ ├── cluster-layer/
│ │ │ │ └── cluster-layer.ts
│ │ │ ├── column-layer/
│ │ │ │ └── enhanced-column-layer.ts
│ │ │ ├── deckgl-extensions/
│ │ │ │ ├── filter-arrow-layer.ts
│ │ │ │ └── filter-shader-module.ts
│ │ │ ├── grid-layer/
│ │ │ │ └── enhanced-cpu-grid-layer.ts
│ │ │ ├── hexagon-layer/
│ │ │ │ └── enhanced-hexagon-layer.ts
│ │ │ ├── index.ts
│ │ │ ├── layer-utils/
│ │ │ │ ├── cluster-utils.ts
│ │ │ │ ├── cpu-aggregator.ts
│ │ │ │ └── shader-utils.ts
│ │ │ ├── line-layer/
│ │ │ │ └── line-layer.ts
│ │ │ ├── raster/
│ │ │ │ ├── images.ts
│ │ │ │ ├── raster-layer/
│ │ │ │ │ ├── raster-layer-webgl1.fs.ts
│ │ │ │ │ ├── raster-layer-webgl1.vs.ts
│ │ │ │ │ ├── raster-layer-webgl2.fs.ts
│ │ │ │ │ ├── raster-layer-webgl2.vs.ts
│ │ │ │ │ └── raster-layer.ts
│ │ │ │ ├── raster-mesh-layer/
│ │ │ │ │ ├── matrix.ts
│ │ │ │ │ ├── raster-mesh-layer-webgl1.fs.ts
│ │ │ │ │ ├── raster-mesh-layer-webgl1.vs.ts
│ │ │ │ │ ├── raster-mesh-layer-webgl2.fs.ts
│ │ │ │ │ ├── raster-mesh-layer-webgl2.vs.ts
│ │ │ │ │ └── raster-mesh-layer.ts
│ │ │ │ ├── types.ts
│ │ │ │ ├── util.ts
│ │ │ │ └── webgl/
│ │ │ │ ├── color/
│ │ │ │ │ ├── colormap.ts
│ │ │ │ │ ├── filter.ts
│ │ │ │ │ ├── gamma-contrast.ts
│ │ │ │ │ ├── linear-rescale.ts
│ │ │ │ │ ├── saturation.ts
│ │ │ │ │ └── sigmoidal-contrast.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── pansharpen/
│ │ │ │ │ └── pansharpen-brovey.ts
│ │ │ │ ├── spectral-indices/
│ │ │ │ │ ├── evi.ts
│ │ │ │ │ ├── msavi.ts
│ │ │ │ │ ├── normalized-difference.ts
│ │ │ │ │ └── savi.ts
│ │ │ │ ├── texture/
│ │ │ │ │ ├── combine-bands.ts
│ │ │ │ │ ├── mask.ts
│ │ │ │ │ ├── reorder-bands.ts
│ │ │ │ │ └── rgba-image.ts
│ │ │ │ └── types.ts
│ │ │ ├── svg-icon-layer/
│ │ │ │ ├── scatterplot-icon-layer.ts
│ │ │ │ └── svg-icon-layer.ts
│ │ │ ├── typedefs/
│ │ │ │ └── deckgl.d.ts
│ │ │ └── wms/
│ │ │ └── wms-layer.ts
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── duckdb/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── adapters/
│ │ │ │ └── duckdb-wasm-adapter.ts
│ │ │ ├── components/
│ │ │ │ ├── index.tsx
│ │ │ │ ├── monaco-editor.tsx
│ │ │ │ ├── preview-data-panel.tsx
│ │ │ │ ├── schema-panel.tsx
│ │ │ │ ├── sql-panel.tsx
│ │ │ │ └── tree.tsx
│ │ │ ├── index.ts
│ │ │ ├── plugin.ts
│ │ │ ├── processors/
│ │ │ │ └── data-processor.ts
│ │ │ ├── table/
│ │ │ │ ├── duckdb-table-utils.ts
│ │ │ │ ├── duckdb-table.ts
│ │ │ │ └── index.ts
│ │ │ └── utils/
│ │ │ └── perf.ts
│ │ └── tsconfig.production.json
│ ├── effects/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── custom-deck-lighting-effect.ts
│ │ │ ├── effect.ts
│ │ │ ├── index.ts
│ │ │ ├── lighting-effect.ts
│ │ │ ├── post-processing-effect.ts
│ │ │ └── utils.ts
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── index.d.ts
│ ├── index.js
│ ├── layers/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── aggregation-layer.ts
│ │ │ ├── arc-layer/
│ │ │ │ ├── arc-layer-icon.tsx
│ │ │ │ └── arc-layer.ts
│ │ │ ├── base-layer.ts
│ │ │ ├── base.tsx
│ │ │ ├── cluster-layer/
│ │ │ │ ├── cluster-layer-icon.tsx
│ │ │ │ └── cluster-layer.ts
│ │ │ ├── default-layer-icon.tsx
│ │ │ ├── editor-layer/
│ │ │ │ ├── constants.ts
│ │ │ │ ├── editor-layer-utils.ts
│ │ │ │ ├── editor-layer.ts
│ │ │ │ ├── feature-styles.ts
│ │ │ │ └── modify-mode-extended.ts
│ │ │ ├── example-table.tsx
│ │ │ ├── geojson-layer/
│ │ │ │ ├── geojson-info-modal.tsx
│ │ │ │ ├── geojson-layer-icon.tsx
│ │ │ │ ├── geojson-layer.ts
│ │ │ │ └── geojson-utils.ts
│ │ │ ├── grid-layer/
│ │ │ │ ├── grid-layer-icon.tsx
│ │ │ │ ├── grid-layer.ts
│ │ │ │ └── grid-utils.ts
│ │ │ ├── h3-hexagon-layer/
│ │ │ │ ├── h3-hexagon-layer-icon.tsx
│ │ │ │ ├── h3-hexagon-layer.ts
│ │ │ │ └── index.ts
│ │ │ ├── heatmap-layer/
│ │ │ │ ├── heatmap-layer-icon.tsx
│ │ │ │ └── heatmap-layer.ts
│ │ │ ├── hexagon-layer/
│ │ │ │ ├── hexagon-layer-icon.tsx
│ │ │ │ ├── hexagon-layer.ts
│ │ │ │ └── hexagon-utils.ts
│ │ │ ├── icon-layer/
│ │ │ │ ├── icon-info-modal.tsx
│ │ │ │ ├── icon-layer-icon.tsx
│ │ │ │ └── icon-layer.ts
│ │ │ ├── index.ts
│ │ │ ├── layer-text-label.ts
│ │ │ ├── layer-update.ts
│ │ │ ├── layer-utils.ts
│ │ │ ├── line-layer/
│ │ │ │ ├── line-layer-icon.tsx
│ │ │ │ └── line-layer.ts
│ │ │ ├── mapbox-utils.ts
│ │ │ ├── mapboxgl-layer.ts
│ │ │ ├── point-layer/
│ │ │ │ ├── point-layer-icon.tsx
│ │ │ │ └── point-layer.ts
│ │ │ ├── raster-tile/
│ │ │ │ ├── config.ts
│ │ │ │ ├── gpu-utils.ts
│ │ │ │ ├── image.ts
│ │ │ │ ├── raster-tile-icon.tsx
│ │ │ │ ├── raster-tile-layer-schema.ts
│ │ │ │ ├── raster-tile-layer.ts
│ │ │ │ ├── raster-tile-utils.ts
│ │ │ │ ├── request-throttle.ts
│ │ │ │ ├── types.ts
│ │ │ │ └── url.ts
│ │ │ ├── s2-geometry-layer/
│ │ │ │ ├── s2-geometry-layer.ts
│ │ │ │ ├── s2-layer-icon.tsx
│ │ │ │ └── s2-utils.ts
│ │ │ ├── scenegraph-layer/
│ │ │ │ ├── scenegraph-info-modal.tsx
│ │ │ │ ├── scenegraph-layer-icon.tsx
│ │ │ │ └── scenegraph-layer.ts
│ │ │ ├── table.tsx
│ │ │ ├── trip-layer/
│ │ │ │ ├── trip-info-modal.tsx
│ │ │ │ ├── trip-layer-icon.tsx
│ │ │ │ ├── trip-layer.ts
│ │ │ │ └── trip-utils.ts
│ │ │ ├── typedefs/
│ │ │ │ └── deckgl.d.ts
│ │ │ ├── vector-tile/
│ │ │ │ ├── abstract-tile-layer.ts
│ │ │ │ ├── common-tile/
│ │ │ │ │ ├── iterable-tile-set.ts
│ │ │ │ │ ├── tile-dataset.ts
│ │ │ │ │ └── tile-utils.ts
│ │ │ │ ├── loading-counter.ts
│ │ │ │ ├── mvt-layer.ts
│ │ │ │ ├── vector-tile-icon.tsx
│ │ │ │ └── vector-tile-layer.ts
│ │ │ └── wms-layer/
│ │ │ ├── wms-layer-icon.tsx
│ │ │ └── wms-layer.ts
│ │ └── tsconfig.production.json
│ ├── localization/
│ │ ├── TRANSLATION_GUIDE.md
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── formatted-message.tsx
│ │ │ ├── index.ts
│ │ │ ├── locales.ts
│ │ │ ├── messages.ts
│ │ │ └── translations/
│ │ │ ├── ca.ts
│ │ │ ├── cn.ts
│ │ │ ├── en.ts
│ │ │ ├── es.ts
│ │ │ ├── fi.ts
│ │ │ ├── ja.ts
│ │ │ ├── pt.ts
│ │ │ └── ru.ts
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── processors/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── data-processor.ts
│ │ │ ├── file-handler.ts
│ │ │ ├── index.ts
│ │ │ ├── typedefs/
│ │ │ │ └── deckgl.d.ts
│ │ │ └── types.ts
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── reducers/
│ │ ├── UPGRADE-data-container.md
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── combined-updaters.ts
│ │ │ ├── composer-helpers.ts
│ │ │ ├── composers.ts
│ │ │ ├── core.ts
│ │ │ ├── data-utils.ts
│ │ │ ├── export-utils.ts
│ │ │ ├── index.ts
│ │ │ ├── interaction-utils.ts
│ │ │ ├── layer-utils.ts
│ │ │ ├── map-state-updaters.ts
│ │ │ ├── map-state.ts
│ │ │ ├── map-style-updaters.ts
│ │ │ ├── map-style.ts
│ │ │ ├── merger-handler.ts
│ │ │ ├── middleware.ts
│ │ │ ├── provider-state-updaters.ts
│ │ │ ├── provider-state.ts
│ │ │ ├── root.ts
│ │ │ ├── ui-state-updaters.ts
│ │ │ ├── ui-state.ts
│ │ │ ├── vis-state-merger.ts
│ │ │ ├── vis-state-selectors.ts
│ │ │ ├── vis-state-updaters.ts
│ │ │ └── vis-state.ts
│ │ └── tsconfig.production.json
│ ├── schemas/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── dataset-schema.ts
│ │ │ ├── index.ts
│ │ │ ├── map-state-schema.ts
│ │ │ ├── map-style-schema.ts
│ │ │ ├── schema-manager.ts
│ │ │ ├── schema-utils.ts
│ │ │ ├── schema.ts
│ │ │ ├── ui-state-schema.ts
│ │ │ ├── versions.ts
│ │ │ └── vis-state-schema.ts
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── styles/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── base.ts
│ │ │ ├── index.ts
│ │ │ └── media-breakpoints.ts
│ │ ├── tsconfig.production.json
│ │ └── webpack/
│ │ └── umd.js
│ ├── table/
│ │ ├── UPGRADE-data-container.md
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── dataset-utils.ts
│ │ │ ├── gpu-filter-utils.ts
│ │ │ ├── index.ts
│ │ │ ├── kepler-table.ts
│ │ │ └── tileset/
│ │ │ ├── raster-tile-utils.ts
│ │ │ ├── tileset-utils.ts
│ │ │ ├── vector-tile-utils.spec.ts
│ │ │ └── vector-tile-utils.ts
│ │ └── tsconfig.production.json
│ ├── tasks/
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── index.ts
│ │ └── tsconfig.production.json
│ ├── types/
│ │ ├── actions.d.ts
│ │ ├── components.d.ts
│ │ ├── datasets.d.ts
│ │ ├── effects.d.ts
│ │ ├── index.d.ts
│ │ ├── layers.d.ts
│ │ ├── package.json
│ │ ├── reducers.d.ts
│ │ ├── schemas.d.ts
│ │ ├── stac.d.ts
│ │ └── types.d.ts
│ └── utils/
│ ├── babel.config.js
│ ├── map-utils.spec.js
│ ├── package.json
│ ├── src/
│ │ ├── aggregation.ts
│ │ ├── application-config-types.ts
│ │ ├── application-config.ts
│ │ ├── arrow-data-container.ts
│ │ ├── browser-utils.ts
│ │ ├── color-utils.ts
│ │ ├── data-container-interface.ts
│ │ ├── data-container-utils.ts
│ │ ├── data-row.ts
│ │ ├── data-scale-utils.ts
│ │ ├── data-utils.ts
│ │ ├── dataset-utils.ts
│ │ ├── dom-to-image.ts
│ │ ├── dom-utils.ts
│ │ ├── effect-utils.ts
│ │ ├── export-map-html.ts
│ │ ├── export-utils.ts
│ │ ├── filter-utils.ts
│ │ ├── format.ts
│ │ ├── gl-utils.ts
│ │ ├── index.ts
│ │ ├── indexed-data-container.ts
│ │ ├── locale-utils.ts
│ │ ├── map-info-utils.ts
│ │ ├── map-style-utils/
│ │ │ ├── mapbox-gl-style-editor.ts
│ │ │ └── mapbox-utils.ts
│ │ ├── map-utils.ts
│ │ ├── mapbox-utils.ts
│ │ ├── noop.ts
│ │ ├── notifications-utils.ts
│ │ ├── observe-dimensions.ts
│ │ ├── plot.ts
│ │ ├── position-utils.ts
│ │ ├── projection-utils.ts
│ │ ├── quick-insertion-sort.ts
│ │ ├── row-data-container.ts
│ │ ├── searcher-utils.ts
│ │ ├── split-map-utils.ts
│ │ ├── strings.ts
│ │ ├── time.ts
│ │ ├── types.ts
│ │ └── utils.ts
│ └── tsconfig.production.json
├── test/
│ ├── browser/
│ │ ├── components/
│ │ │ ├── bottom-widget-test.js
│ │ │ ├── common/
│ │ │ │ ├── animation-control-test.js
│ │ │ │ ├── color-legend-test.js
│ │ │ │ ├── column-stats-chart-test.js
│ │ │ │ ├── file-uploader-test.js
│ │ │ │ ├── index.js
│ │ │ │ ├── item-selector-test.js
│ │ │ │ ├── range-plot-test.js
│ │ │ │ └── range-slider-test.js
│ │ │ ├── container-test.js
│ │ │ ├── editor/
│ │ │ │ ├── feature-action-panel-test.js
│ │ │ │ └── index.js
│ │ │ ├── effects/
│ │ │ │ ├── effect-configurator-test.js
│ │ │ │ ├── effect-manager-test.js
│ │ │ │ ├── effect-time-configurator-test.js
│ │ │ │ └── index.js
│ │ │ ├── filters/
│ │ │ │ ├── index.js
│ │ │ │ └── time-widget-test.js
│ │ │ ├── geocoder-panel-test.js
│ │ │ ├── helpers.js
│ │ │ ├── hooks/
│ │ │ │ ├── use-dnd-effects.spec.js
│ │ │ │ ├── use-dnd-layers.spec.js
│ │ │ │ └── use-legend-position.spec.js
│ │ │ ├── index.js
│ │ │ ├── injector-test.js
│ │ │ ├── kepler-gl-test.js
│ │ │ ├── map/
│ │ │ │ ├── index.js
│ │ │ │ ├── map-control-test.js
│ │ │ │ ├── map-legend-test.js
│ │ │ │ └── map-popover-test.js
│ │ │ ├── map-container-test.js
│ │ │ ├── modals/
│ │ │ │ ├── data-table-modal-test.js
│ │ │ │ ├── export-image-modal-test.js
│ │ │ │ ├── index.js
│ │ │ │ └── load-data-modal-test.js
│ │ │ ├── notifications/
│ │ │ │ ├── index.js
│ │ │ │ ├── notification-item.spec.js
│ │ │ │ └── notification-panel-test.js
│ │ │ ├── plot-container-test.js
│ │ │ ├── side-panel/
│ │ │ │ ├── channel-by-value-selctor-test.js
│ │ │ │ ├── color-selector-test.js
│ │ │ │ ├── filter-manager-test.js
│ │ │ │ ├── index.js
│ │ │ │ ├── layer-configurator-test.js
│ │ │ │ ├── layer-list.spec.js
│ │ │ │ ├── layer-manager-test.js
│ │ │ │ ├── layer-panel-header-test.js
│ │ │ │ ├── save-export-dropdown-test.js
│ │ │ │ └── side-panel-test.js
│ │ │ └── tooltip-config-test.js
│ │ ├── file-handler-test.js
│ │ ├── index.js
│ │ ├── layer-tests/
│ │ │ ├── arc-layer-specs.js
│ │ │ ├── base-layer-specs.js
│ │ │ ├── cluster-layer-specs.js
│ │ │ ├── geojson-layer-specs.js
│ │ │ ├── grid-layer-specs.js
│ │ │ ├── h3-hexagon-layer-specs.js
│ │ │ ├── heatmap-layer-specs.js
│ │ │ ├── hexagon-layer-specs.js
│ │ │ ├── icon-layer-specs.js
│ │ │ ├── index.js
│ │ │ ├── line-layer-specs.js
│ │ │ ├── point-layer-specs.js
│ │ │ ├── raster-tile-layer-specs.js
│ │ │ ├── s2-geometry-layer-specs.js
│ │ │ ├── scenegraph-layer-specs.js
│ │ │ ├── trip-layer-specs.js
│ │ │ └── wms-layer-specs.js
│ │ └── reducers/
│ │ └── index.js
│ ├── browser-debug.js
│ ├── browser-drive.js
│ ├── browser-headless/
│ │ ├── component/
│ │ │ └── map-container-test.js
│ │ └── index.js
│ ├── browser-headless.js
│ ├── fixtures/
│ │ ├── config_v0_arc_cluster_point.js
│ │ ├── config_v0_geojson_point.js
│ │ ├── config_v0_geojson_poly_fill_ele.js
│ │ ├── config_v0_geojson_polygon.js
│ │ ├── geojson-style.js
│ │ ├── geojson.js
│ │ ├── points-with-polygon-filter-map.js
│ │ ├── polygon-filter-map.js
│ │ ├── polygon.js
│ │ ├── row-object.js
│ │ ├── s2-geometry.js
│ │ ├── state-saved-v0.js
│ │ ├── state-saved-v1-1.js
│ │ ├── state-saved-v1-2.js
│ │ ├── state-saved-v1-3.js
│ │ ├── state-saved-v1-4.js
│ │ ├── state-saved-v1-5.js
│ │ ├── state-saved-v1-6.js
│ │ ├── state-saved-v1-7.js
│ │ ├── synced-filter-with-trip-layer.js
│ │ ├── test-arc-data.js
│ │ ├── test-csv-data.js
│ │ ├── test-csv-object.js
│ │ ├── test-hex-id-data.js
│ │ ├── test-layer-data.js
│ │ ├── test-trip-csv-data.js
│ │ ├── test-trip-data.js
│ │ ├── tile-metadata.ts
│ │ └── trip-geojson.js
│ ├── helpers/
│ │ ├── comparison-utils.js
│ │ ├── component-jest-utils.js
│ │ ├── component-utils.js
│ │ ├── layer-utils.js
│ │ ├── mock-map-styles.js
│ │ ├── mock-provider.js
│ │ ├── mock-state-utils.js
│ │ ├── mock-state.js
│ │ ├── raw-states.js
│ │ ├── table-utils.js
│ │ └── utils.js
│ ├── js-dom.js
│ ├── node/
│ │ ├── index.js
│ │ ├── processors/
│ │ │ ├── file-handler-fixtures.js
│ │ │ ├── file-handler-test.js
│ │ │ └── index.js
│ │ ├── reducers/
│ │ │ ├── composer-state-test.js
│ │ │ ├── index.js
│ │ │ ├── map-state-test.js
│ │ │ ├── map-style-test.js
│ │ │ ├── provider-state-test.js
│ │ │ ├── root-test.js
│ │ │ ├── ui-state-test.js
│ │ │ ├── vis-state-merger-combine-configs-test.spec.js
│ │ │ ├── vis-state-merger-test.js
│ │ │ └── vis-state-test.js
│ │ ├── schemas/
│ │ │ ├── dataset-schema-test.js
│ │ │ ├── index.js
│ │ │ ├── map-state-schema-test.js
│ │ │ ├── map-style-schema-test.js
│ │ │ ├── schema-conversion-test.js
│ │ │ └── vis-state-schema-test.js
│ │ └── utils/
│ │ ├── aggregation-test.js
│ │ ├── color-util-test.js
│ │ ├── composer-helpers-test.js
│ │ ├── data-container-test.js
│ │ ├── data-processor-test.js
│ │ ├── data-scale-utils-test.js
│ │ ├── data-utils-test.js
│ │ ├── dataset-utils-test.js
│ │ ├── dom-to-image.js
│ │ ├── duckdb-utils-test.js
│ │ ├── editor-utils-test.js
│ │ ├── effect-utils-test.js
│ │ ├── export-utils-test.js
│ │ ├── filter-utils-test.js
│ │ ├── gpu-filter-utils-test.js
│ │ ├── index.js
│ │ ├── interaction-utils-test.js
│ │ ├── kepler-gl-utils-test.js
│ │ ├── kepler-table-test.js
│ │ ├── kepler-table-utils-test.js
│ │ ├── layer-utils-test.js
│ │ ├── map-info-utils-test.js
│ │ ├── mapbox-gl-style-editor-test.js
│ │ ├── mapbox-utils-test.js
│ │ ├── notifications-utils-test.js
│ │ ├── plot-test.js
│ │ ├── s2-utils-test.js
│ │ ├── timeline-test.js
│ │ └── util-test.js
│ ├── node.js
│ ├── setup-browser-env.js
│ └── webpack.config.js
├── tsconfig.json
├── tsconfig.production.json
├── webpack/
│ ├── build_types.js
│ ├── bundle.js
│ ├── shared-webpack-configuration.js
│ └── umd.js
├── website/
│ ├── .babelrc
│ ├── .yarnrc.yml
│ ├── README.md
│ ├── esbuild.config.mjs
│ ├── package.json
│ ├── src/
│ │ ├── README.md
│ │ ├── components/
│ │ │ ├── app.js
│ │ │ ├── common/
│ │ │ │ ├── card.js
│ │ │ │ ├── carousel.js
│ │ │ │ ├── section.js
│ │ │ │ ├── slideshow.js
│ │ │ │ ├── staggered-scroll-animation.js
│ │ │ │ ├── styled-components.js
│ │ │ │ ├── styles.js
│ │ │ │ └── swipeable.js
│ │ │ ├── desktop.js
│ │ │ ├── ecosystems.js
│ │ │ ├── examples.js
│ │ │ ├── features.js
│ │ │ ├── footer.js
│ │ │ ├── foursquare-logo.js
│ │ │ ├── header.js
│ │ │ ├── hero.js
│ │ │ ├── home.js
│ │ │ ├── mapbox-logo.js
│ │ │ ├── netlify-logo.js
│ │ │ ├── policy.js
│ │ │ ├── showcase.js
│ │ │ ├── studio.js
│ │ │ ├── tutorials.js
│ │ │ └── walkthrough.js
│ │ ├── constants.js
│ │ ├── content.js
│ │ ├── main.js
│ │ ├── reducers/
│ │ │ ├── analytics.js
│ │ │ ├── app.js
│ │ │ └── index.js
│ │ ├── routes.js
│ │ ├── static/
│ │ │ ├── _redirects
│ │ │ └── index.html
│ │ ├── styles.js
│ │ └── utils.js
│ └── webpack.config.js
└── website-gatsby/
├── .eslintignore
├── .gitignore
├── gatsby-browser.js
├── gatsby-config.js
├── gatsby-node.js
├── gatsby-ssr.js
├── package.json
├── src/
│ ├── components/
│ │ ├── app.js
│ │ ├── common/
│ │ │ ├── card.js
│ │ │ ├── carousel.js
│ │ │ ├── section.js
│ │ │ ├── slideshow.js
│ │ │ ├── staggered-scroll-animation.js
│ │ │ ├── styled-components.js
│ │ │ ├── styles.js
│ │ │ └── swipeable.js
│ │ ├── examples.js
│ │ ├── features.js
│ │ ├── footer.js
│ │ ├── header.js
│ │ ├── hero.js
│ │ ├── home.js
│ │ ├── info-panel.jsx
│ │ ├── mapbox-logo.js
│ │ ├── policy.js
│ │ ├── showcase.js
│ │ ├── tutorials.js
│ │ └── walkthrough.js
│ ├── constants.js
│ ├── content.js
│ ├── state/
│ │ ├── analytics.js
│ │ ├── app.js
│ │ ├── index.js
│ │ ├── redux-wrapper.js
│ │ └── test.js
│ ├── styles.js
│ └── utils.js
├── static/
│ └── CNAME
└── templates/
├── index.jsx
└── style.css
Showing preview only (440K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5048 symbols across 824 files)
FILE: babel.config.js
constant PRESETS (line 11) | const PRESETS = ['@babel/preset-env', '@babel/preset-react', '@babel/pre...
constant ENV (line 62) | const ENV = {
FILE: bindings/kepler.gl-jupyter/js/lib/extension.js
method load_ipython_extension (line 29) | load_ipython_extension() {}
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl-plugin.js
class KeplerGlModal (line 24) | class KeplerGlModal extends widgets.DOMWidgetModel {
method defaults (line 25) | defaults() {
class KeplerGlView (line 38) | class KeplerGlView extends widgets.DOMWidgetView {
method render (line 39) | render() {
method data_changed (line 52) | data_changed() {
method config_changed (line 58) | config_changed() {
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl/components/app.js
constant KEPLER_GL_JUPYTER_VERSION (line 20) | const KEPLER_GL_JUPYTER_VERSION = '__PACKAGE_VERSION__';
constant MAPBOX_TOKEN (line 34) | const MAPBOX_TOKEN = process.env.MapboxAccessTokenJupyter;
function App (line 50) | function App() {
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl/components/config-panel.js
function configStringify (line 40) | function configStringify(config) {
function CustomSidePanelsFactory (line 64) | function CustomSidePanelsFactory() {
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl/components/panel-header.js
constant KEPLER_DOC (line 9) | const KEPLER_DOC = 'https://docs.kepler.gl/docs/keplergl-jupyter';
function CustomPanelHeaderFactory (line 11) | function CustomPanelHeaderFactory() {
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl/components/root.js
function renderRoot (line 9) | function renderRoot({id, store, ele}) {
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl/components/side-bar.js
function CustomSidebarFactory (line 30) | function CustomSidebarFactory() {
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl/kepler.gl.js
constant DOM_EL_ID (line 17) | const DOM_EL_ID = 'keplergl';
constant NONE_UPDATE_ACTIONS (line 20) | const NONE_UPDATE_ACTIONS = [
function getConfigInStore (line 28) | function getConfigInStore({hash = true, store} = {}) {
function getDatasetsInStore (line 37) | function getDatasetsInStore(store) {
class KeplerGlJupyter (line 43) | class KeplerGlJupyter {
method constructor (line 44) | constructor() {
method create (line 50) | create(that) {
method onDataChange (line 115) | onDataChange(that) {
method onConfigChange (line 122) | onConfigChange(that) {
function addDataConfigToKeplerGl (line 157) | function addDataConfigToKeplerGl({data: inputData, config, options, stor...
function dataToDatasets (line 176) | function dataToDatasets(data) {
FILE: bindings/kepler.gl-jupyter/js/lib/keplergl/utils.js
function handleJuptyerDataFormat (line 9) | function handleJuptyerDataFormat(dataEntry) {
function processReceivedData (line 49) | function processReceivedData({data, info}) {
function processDataFrame (line 76) | function processDataFrame(data) {
function loadJupyterData (line 84) | function loadJupyterData(rawData) {
FILE: bindings/kepler.gl-jupyter/js/lib/labplugin.js
method activate (line 10) | activate(app, widgets) {
FILE: bindings/kepler.gl-jupyter/js/lib/log.js
function log (line 6) | function log(...args) {
FILE: bindings/kepler.gl-jupyter/js/webpack/build-html.js
function clearCarats (line 14) | function clearCarats(version) {
constant VERSIONS (line 18) | const VERSIONS = {
FILE: bindings/kepler.gl-jupyter/keplergl/__init__.py
function _jupyter_nbextension_paths (line 8) | def _jupyter_nbextension_paths():
FILE: bindings/kepler.gl-jupyter/keplergl/keplergl.py
function _arrow_table_to_base64 (line 28) | def _arrow_table_to_base64(arrow_table):
function _df_to_dict (line 42) | def _df_to_dict(df):
function _df_to_arrow (line 64) | def _df_to_arrow(df: pd.DataFrame):
function _gdf_to_dict (line 78) | def _gdf_to_dict(gdf):
function _gdf_to_arrow (line 104) | def _gdf_to_arrow(gdf):
function _normalize_data (line 123) | def _normalize_data(data, use_arrow=False):
function data_to_json (line 132) | def data_to_json(data, manager):
function data_from_json (line 153) | def data_from_json(js, manager):
class TraitError (line 164) | class TraitError(Exception):
class DataException (line 168) | class DataException(TraitError):
class KeplerGl (line 173) | class KeplerGl(widgets.DOMWidget):
method __init__ (line 188) | def __init__(self, **kwargs):
method _validate_data (line 201) | def _validate_data(self, proposal):
method add_data (line 217) | def add_data(self, data, name="unnamed", use_arrow=False):
method show (line 233) | def show(self, data=None, config=None, read_only=False, center_map=Fal...
method _repr_html_ (line 271) | def _repr_html_(self, data=None, config=None, read_only=False, center_...
method save_to_html (line 311) | def save_to_html(self, data=None, config=None, file_name='keplergl_map...
FILE: bindings/python/esbuild.config.mjs
function build (line 48) | async function build() {
FILE: bindings/python/keplergl/serializers.py
function _debug (line 15) | def _debug(msg):
function _try_parse_geojson (line 20) | def _try_parse_geojson(data: str) -> Optional[dict]:
function data_to_json (line 37) | def data_to_json(data: dict, widget) -> dict:
function data_from_json (line 49) | def data_from_json(data: dict, widget) -> dict:
function serialize_dataset (line 54) | def serialize_dataset(data: Any, name: str) -> dict:
function serialize_dataframe (line 74) | def serialize_dataframe(df: pd.DataFrame, name: str) -> dict:
function serialize_geodataframe (line 95) | def serialize_geodataframe(gdf: gpd.GeoDataFrame, name: str) -> dict:
FILE: bindings/python/keplergl/widget.py
class KeplerGl (line 16) | class KeplerGl(anywidget.AnyWidget):
method __init__ (line 26) | def __init__(self, data=None, config=None, height=400, show_docs=False...
method add_data (line 45) | def add_data(self, data, name="data"):
method _add_data_dict (line 51) | def _add_data_dict(self, data_dict):
method save_to_html (line 58) | def save_to_html(
FILE: bindings/python/src/components/App.tsx
type AppProps (line 12) | interface AppProps {
function App (line 16) | function App({model}: AppProps) {
FILE: bindings/python/src/index.ts
method initialize (line 9) | initialize({model}: {model: WidgetModel}) {
method render (line 13) | render({model, el}: {model: WidgetModel; el: HTMLElement}) {
FILE: bindings/python/src/store.ts
constant KEPLER_ID (line 7) | const KEPLER_ID = 'jupyter_kepler';
function createStore (line 20) | function createStore() {
FILE: bindings/python/src/types.ts
type KeplerGlWidgetModel (line 6) | interface KeplerGlWidgetModel {
type DatasetPayload (line 12) | interface DatasetPayload {
type KeplerGlConfig (line 18) | interface KeplerGlConfig {
type WidgetModel (line 27) | type WidgetModel = AnyModel<KeplerGlWidgetModel>;
FILE: bindings/python/src/utils/data.ts
constant DEBUG (line 10) | const DEBUG = true;
function debug (line 11) | function debug(...args: unknown[]) {
constant GEOARROW_METADATA_KEY (line 18) | const GEOARROW_METADATA_KEY = 'ARROW:extension:name';
function processDataset (line 20) | async function processDataset(payload: DatasetPayload): Promise<Processo...
function processGeoArrowData (line 63) | function processGeoArrowData(base64Data: string): ProcessorResult | null {
function arrowGeometryToGeoJSON (line 144) | function arrowGeometryToGeoJSON(geom: any): string {
function extractCoordinates (line 201) | function extractCoordinates(value: any): any {
function arrowTypeToKeplerType (line 247) | function arrowTypeToKeplerType(arrowType: any): string {
function arrowTypeToAnalyzerType (line 272) | function arrowTypeToAnalyzerType(arrowType: any): string {
function processJsonData (line 291) | function processJsonData(data: unknown): ProcessorResult | null {
FILE: bindings/python/src/utils/serialization.ts
function decodeBase64ToBytes (line 4) | function decodeBase64ToBytes(base64: string): Uint8Array {
function encodeToBase64 (line 13) | function encodeToBase64(bytes: Uint8Array): string {
FILE: bindings/python/src/widget.ts
constant DEBUG (line 14) | const DEBUG = false;
function debug (line 15) | function debug(...args: unknown[]) {
class KeplerGlWidget (line 21) | class KeplerGlWidget {
method constructor (line 27) | constructor(model: WidgetModel, el: HTMLElement) {
method mount (line 34) | mount() {
method unmount (line 50) | unmount() {
method onDataChange (line 56) | onDataChange() {
method onConfigChange (line 61) | onConfigChange() {
method onHeightChange (line 66) | onHeightChange() {
method loadData (line 70) | private async loadData() {
method waitForInstance (line 111) | private waitForInstance(): Promise<void> {
method loadConfig (line 142) | private loadConfig() {
method syncConfigToPython (line 150) | private syncConfigToPython() {
FILE: bindings/python/tests/conftest.py
function sample_df (line 13) | def sample_df():
function sample_gdf (line 22) | def sample_gdf():
FILE: bindings/python/tests/test_serializers.py
class TestDataFrameSerialization (line 14) | class TestDataFrameSerialization:
method test_serialize_dataframe (line 17) | def test_serialize_dataframe(self, sample_df):
method test_serialize_dataframe_with_cities (line 23) | def test_serialize_dataframe_with_cities(self):
method test_serialize_dataframe_with_hex_data (line 39) | def test_serialize_dataframe_with_hex_data(self):
method test_serialize_dataframe_with_nan_filled (line 56) | def test_serialize_dataframe_with_nan_filled(self):
class TestGeoDataFrameSerialization (line 68) | class TestGeoDataFrameSerialization:
method test_serialize_geodataframe (line 71) | def test_serialize_geodataframe(self, sample_gdf):
method test_serialize_geodataframe_with_timestamp (line 77) | def test_serialize_geodataframe_with_timestamp(self):
method test_serialize_geodataframe_points_from_xy (line 99) | def test_serialize_geodataframe_points_from_xy(self):
method test_serialize_geodataframe_with_polygons (line 116) | def test_serialize_geodataframe_with_polygons(self):
method test_serialize_geodataframe_with_crs (line 132) | def test_serialize_geodataframe_with_crs(self):
class TestGeoJSONSerialization (line 144) | class TestGeoJSONSerialization:
method test_serialize_geojson_dict (line 147) | def test_serialize_geojson_dict(self):
method test_serialize_geojson_feature_collection (line 154) | def test_serialize_geojson_feature_collection(self):
method test_serialize_geojson_string (line 177) | def test_serialize_geojson_string(self):
method test_serialize_geojson_polygon (line 194) | def test_serialize_geojson_polygon(self):
class TestCSVSerialization (line 211) | class TestCSVSerialization:
method test_serialize_csv (line 214) | def test_serialize_csv(self):
method test_serialize_csv_multirow (line 220) | def test_serialize_csv_multirow(self):
class TestEdgeCases (line 229) | class TestEdgeCases:
method test_serialize_unsupported_type (line 232) | def test_serialize_unsupported_type(self):
method test_serialize_empty_dataframe (line 237) | def test_serialize_empty_dataframe(self):
method test_serialize_single_row_dataframe (line 245) | def test_serialize_single_row_dataframe(self):
method test_serialize_dataframe_with_various_dtypes (line 252) | def test_serialize_dataframe_with_various_dtypes(self):
FILE: bindings/python/tests/test_widget.py
function test_widget_creation (line 10) | def test_widget_creation():
function test_widget_with_height (line 17) | def test_widget_with_height():
function test_widget_with_dataframe (line 22) | def test_widget_with_dataframe(sample_df):
function test_widget_with_geodataframe (line 27) | def test_widget_with_geodataframe(sample_gdf):
function test_add_data (line 32) | def test_add_data(sample_df):
function test_widget_with_config (line 38) | def test_widget_with_config():
FILE: esbuild/umd-esbuild.config.mjs
constant LIB_DIR (line 13) | const LIB_DIR = './';
constant NODE_MODULES_DIR (line 14) | const NODE_MODULES_DIR = join(LIB_DIR, 'node_modules');
constant SRC_DIR (line 15) | const SRC_DIR = join(LIB_DIR, 'src');
FILE: examples/custom-map-style/esbuild.config.mjs
constant NODE_ENV (line 18) | const NODE_ENV = JSON.stringify(process.env.NODE_ENV || 'production');
constant ROOT_NODE_MODULES (line 21) | const ROOT_NODE_MODULES = join('..', '..', 'node_modules');
function openURL (line 70) | function openURL(url) {
FILE: examples/custom-reducer/esbuild.config.mjs
constant NODE_ENV (line 18) | const NODE_ENV = JSON.stringify(process.env.NODE_ENV || 'production');
constant ROOT_NODE_MODULES (line 21) | const ROOT_NODE_MODULES = join('..', '..', 'node_modules');
function openURL (line 68) | function openURL(url) {
FILE: examples/custom-reducer/src/app-reducer.js
constant INIT (line 7) | const INIT = 'INIT';
FILE: examples/custom-reducer/src/app.js
constant MAPBOX_TOKEN (line 14) | const MAPBOX_TOKEN = process.env.MapboxAccessToken;
class App (line 19) | class App extends Component {
method componentDidMount (line 20) | componentDidMount() {
method render (line 36) | render() {
FILE: examples/custom-theme/esbuild.config.mjs
constant NODE_ENV (line 18) | const NODE_ENV = JSON.stringify(process.env.NODE_ENV || 'production');
constant ROOT_NODE_MODULES (line 21) | const ROOT_NODE_MODULES = join('..', '..', 'node_modules');
function openURL (line 68) | function openURL(url) {
FILE: examples/custom-theme/src/actions.js
constant INIT (line 5) | const INIT = 'INIT';
function initApp (line 8) | function initApp() {
FILE: examples/custom-theme/src/app.js
constant MAPBOX_TOKEN (line 10) | const MAPBOX_TOKEN = process.env.MapboxAccessToken;
function App (line 46) | function App() {
FILE: examples/demo-app/esbuild.config.mjs
constant BASE_NODE_MODULES_DIR (line 16) | const BASE_NODE_MODULES_DIR = './node_modules';
constant LIB_DIR (line 18) | const LIB_DIR = '../../';
constant NODE_MODULES_DIR (line 19) | const NODE_MODULES_DIR = join(LIB_DIR, 'node_modules');
constant SRC_DIR (line 20) | const SRC_DIR = join(LIB_DIR, 'src');
constant EXTERNAL_DECK_SRC (line 23) | const EXTERNAL_DECK_SRC = join(LIB_DIR, 'deck.gl');
constant EXTERNAL_LOADERS_SRC (line 26) | const EXTERNAL_LOADERS_SRC = join(LIB_DIR, 'loaders.gl');
constant EXTERNAL_HUBBLE_SRC (line 29) | const EXTERNAL_HUBBLE_SRC = join(LIB_DIR, '../../hubble.gl');
constant NODE_ENV (line 81) | const NODE_ENV = JSON.stringify(process.env.NODE_ENV || 'production');
function addAliases (line 123) | function addAliases(externals, args) {
function openURL (line 214) | function openURL(url) {
method setup (line 283) | setup(build) {
FILE: examples/demo-app/src/actions.js
constant INIT (line 22) | const INIT = 'INIT';
constant LOAD_REMOTE_RESOURCE_SUCCESS (line 23) | const LOAD_REMOTE_RESOURCE_SUCCESS = 'LOAD_REMOTE_RESOURCE_SUCCESS';
constant LOAD_REMOTE_DATASET_PROCESSED_SUCCESS (line 24) | const LOAD_REMOTE_DATASET_PROCESSED_SUCCESS = 'LOAD_REMOTE_DATASET_PROCE...
constant LOAD_REMOTE_RESOURCE_ERROR (line 25) | const LOAD_REMOTE_RESOURCE_ERROR = 'LOAD_REMOTE_RESOURCE_ERROR';
constant LOAD_MAP_SAMPLE_FILE (line 26) | const LOAD_MAP_SAMPLE_FILE = 'LOAD_MAP_SAMPLE_FILE';
constant SET_SAMPLE_LOADING_STATUS (line 27) | const SET_SAMPLE_LOADING_STATUS = 'SET_SAMPLE_LOADING_STATUS';
constant PUSHING_FILE (line 30) | const PUSHING_FILE = 'PUSHING_FILE';
constant CLOUD_LOGIN_SUCCESS (line 31) | const CLOUD_LOGIN_SUCCESS = 'CLOUD_LOGIN_SUCCESS';
function initApp (line 34) | function initApp() {
function loadRemoteResourceSuccess (line 40) | function loadRemoteResourceSuccess(response, config, options, remoteData...
function loadRemoteDatasetProcessedSuccessAction (line 50) | function loadRemoteDatasetProcessedSuccessAction(result) {
function loadRemoteResourceError (line 57) | function loadRemoteResourceError(error, url) {
function loadMapSampleFile (line 65) | function loadMapSampleFile(samples) {
function setLoadingMapStatus (line 72) | function setLoadingMapStatus(isMapLoading) {
function onExportFileSuccess (line 86) | function onExportFileSuccess({provider, options}) {
function onLoadCloudMapSuccess (line 98) | function onLoadCloudMapSuccess({provider, loadParams}) {
function loadRemoteMap (line 117) | function loadRemoteMap(options) {
function loadRemoteRawData (line 144) | function loadRemoteRawData(url) {
function loadSample (line 178) | function loadSample(options, pushRoute = true) {
function loadRemoteSampleMap (line 200) | function loadRemoteSampleMap(options) {
function loadRemoteConfig (line 240) | function loadRemoteConfig(url) {
function loadRemoteData (line 261) | function loadRemoteData(url) {
function loadSampleConfigurations (line 293) | function loadSampleConfigurations(sampleMapId = null) {
FILE: examples/demo-app/src/app.tsx
function shouldForwardProp (line 79) | function shouldForwardProp(propName, target) {
constant CONTAINER_STYLE (line 121) | const CONTAINER_STYLE = {
FILE: examples/demo-app/src/cloud-providers/carto/carto-icon.js
class CartoIcon (line 8) | class CartoIcon extends Component {
method render (line 21) | render() {
FILE: examples/demo-app/src/cloud-providers/carto/carto-provider.js
constant NAME (line 11) | const NAME = 'carto';
constant DISPLAY_NAME (line 12) | const DISPLAY_NAME = 'CARTO';
constant NAMESPACE (line 13) | const NAMESPACE = 'keplergl';
constant DOMAIN (line 14) | const DOMAIN = 'carto.com';
constant PRIVATE_STORAGE_ENABLED (line 15) | const PRIVATE_STORAGE_ENABLED = true;
constant SHARING_ENABLED (line 16) | const SHARING_ENABLED = true;
class CartoProvider (line 18) | class CartoProvider extends Provider {
method constructor (line 19) | constructor(clientId) {
method login (line 46) | login(onCloudLoginSuccess) {
method logout (line 56) | logout(onCloudLogoutSuccess) {
method isEnabled (line 66) | isEnabled() {
method hasPrivateStorage (line 70) | hasPrivateStorage() {
method hasSharingUrl (line 74) | hasSharingUrl() {
method uploadMap (line 78) | async uploadMap({mapData = {}, options = {}}) {
method getAccessToken (line 150) | async getAccessToken() {
method getUserName (line 161) | getUserName() {
method getAccessTokenFromLocation (line 176) | getAccessTokenFromLocation() {
method getUser (line 180) | async getUser() {
method downloadMap (line 188) | async downloadMap(queryParams) {
method listMaps (line 247) | async listMaps() {
method getShareUrl (line 282) | getShareUrl(fullUrl = false) {
method getMapUrl (line 286) | getMapUrl(fullUrl = true, mapParams = null) {
method getManagementUrl (line 301) | getManagementUrl() {
method getCurrentVisualization (line 305) | getCurrentVisualization() {
method _getMapPermalinkFromParams (line 313) | _getMapPermalinkFromParams({mapId, owner, privateMap}, fullURL = true) {
method _convertDataset (line 320) | _convertDataset({data: dataset}) {
method _manageErrors (line 339) | _manageErrors(error, throwException = true) {
method _composeURL (line 381) | _composeURL({mapId, owner, privateMap}) {
method _blobToBase64 (line 385) | _blobToBase64(blob) {
FILE: examples/demo-app/src/cloud-providers/dropbox/dropbox-error-modal.js
constant WIDTH (line 7) | const WIDTH = 400;
constant HEIGHT (line 8) | const HEIGHT = 800;
class Frame (line 11) | class Frame extends Component {
method componentDidMount (line 12) | componentDidMount() {
method componentDidUpdate (line 15) | componentDidUpdate() {
method componentWillUnmount (line 19) | componentWillUnmount() {
method render (line 44) | render() {
FILE: examples/demo-app/src/cloud-providers/dropbox/dropbox-icon.js
class DropboxIcon (line 8) | class DropboxIcon extends Component {
method render (line 21) | render() {
FILE: examples/demo-app/src/cloud-providers/dropbox/dropbox-provider.js
constant NAME (line 11) | const NAME = 'dropbox';
constant DISPLAY_NAME (line 12) | const DISPLAY_NAME = 'Dropbox';
constant DOMAIN (line 13) | const DOMAIN = 'www.dropbox.com';
constant KEPLER_DROPBOX_FOLDER_LINK (line 14) | const KEPLER_DROPBOX_FOLDER_LINK = `//${DOMAIN}/home/Apps`;
constant CORS_FREE_DOMAIN (line 15) | const CORS_FREE_DOMAIN = 'dl.dropboxusercontent.com';
constant PRIVATE_STORAGE_ENABLED (line 16) | const PRIVATE_STORAGE_ENABLED = true;
constant SHARING_ENABLED (line 17) | const SHARING_ENABLED = true;
constant MAX_THUMBNAIL_BATCH (line 18) | const MAX_THUMBNAIL_BATCH = 25;
constant IMAGE_URL_PREFIX (line 19) | const IMAGE_URL_PREFIX = 'data:image/gif;base64,';
function parseQueryString (line 21) | function parseQueryString(query) {
function isConfigFile (line 31) | function isConfigFile(err) {
class DropboxProvider (line 36) | class DropboxProvider extends Provider {
method constructor (line 37) | constructor(clientId, appName) {
method login (line 58) | async login() {
method listMaps (line 108) | async listMaps() {
method uploadMap (line 146) | async uploadMap({mapData, options = {}}) {
method downloadMap (line 192) | async downloadMap(loadParams) {
method getUserName (line 205) | getUserName() {
method logout (line 214) | async logout() {
method isEnabled (line 223) | isEnabled() {
method hasPrivateStorage (line 227) | hasPrivateStorage() {
method hasSharingUrl (line 231) | hasSharingUrl() {
method getShareUrl (line 239) | getShareUrl(fullUrl = true) {
method getMapUrl (line 248) | getMapUrl(loadParams) {
method getManagementUrl (line 253) | getManagementUrl() {
method getAccessToken (line 261) | getAccessToken() {
method getAccessTokenFromLocation (line 278) | getAccessTokenFromLocation(location) {
method _initializeDropbox (line 288) | _initializeDropbox() {
method getUser (line 293) | async getUser() {
method _handleDropboxError (line 298) | _handleDropboxError(error) {
method _readFile (line 307) | _readFile(fileBlob) {
method _getMapPermalink (line 324) | _getMapPermalink(mapLink, fullUrl = true) {
method _getMapPermalinkFromParams (line 332) | _getMapPermalinkFromParams({path}, fullURL = true) {
method _shareFile (line 343) | _shareFile(metadata) {
method _authLink (line 374) | _authLink(path = 'auth') {
method _overrideUrl (line 389) | _overrideUrl(url) {
method _getUserFromAccount (line 393) | _getUserFromAccount(response) {
method _getThumbnailRequests (line 402) | _getThumbnailRequests(pngs) {
method _parseEntries (line 429) | _parseEntries(response) {
FILE: examples/demo-app/src/cloud-providers/foursquare/foursquare-icon.js
class FoursquareIcon (line 11) | class FoursquareIcon extends Component {
method render (line 26) | render() {
FILE: examples/demo-app/src/cloud-providers/foursquare/foursquare-provider.js
constant NAME (line 8) | const NAME = 'foursquare';
constant DISPLAY_NAME (line 9) | const DISPLAY_NAME = 'Foursquare';
constant STORAGE_MESSAGE (line 10) | const STORAGE_MESSAGE = 'modal.loadStorageMap.foursquareStorageMessage';
constant APP_NAME (line 12) | const APP_NAME = 'Kepler.gl';
constant FOURSQUARE_PRIVATE_STORAGE_ENABLED (line 14) | const FOURSQUARE_PRIVATE_STORAGE_ENABLED = true;
constant FOURSQUARE_SHARING_ENABLED (line 15) | const FOURSQUARE_SHARING_ENABLED = false;
constant FOURSQUARE_AUTH_AUDIENCE (line 16) | const FOURSQUARE_AUTH_AUDIENCE = 'https://foursquare.com/api/';
constant FOURSQUARE_AUTH_SCOPE (line 17) | const FOURSQUARE_AUTH_SCOPE = 'openid profile email';
constant FOURSQUARE_KEPLER_GL_IMPORT_SOURCE (line 20) | const FOURSQUARE_KEPLER_GL_IMPORT_SOURCE = 'kepler.gl-raw';
function convertFSQModelToMapItem (line 27) | function convertFSQModelToMapItem(model, baseApi) {
function extractMapFromFSQResponse (line 57) | function extractMapFromFSQResponse(response) {
class FoursquareProvider (line 64) | class FoursquareProvider extends Provider {
method constructor (line 65) | constructor({clientId, authDomain, apiURL, userMapsURL}) {
method hasPrivateStorage (line 88) | hasPrivateStorage() {
method hasSharingUrl (line 92) | hasSharingUrl() {
method getUser (line 96) | async getUser() {
method login (line 100) | async login() {
method logout (line 104) | async logout() {
method uploadMap (line 111) | async uploadMap({mapData, options = {}}) {
method listMaps (line 171) | async listMaps() {
method downloadMap (line 185) | async downloadMap(loadParams) {
method getMapUrl (line 215) | getMapUrl(loadParams) {
method getManagementUrl (line 220) | getManagementUrl() {
method getAccessToken (line 224) | async getAccessToken() {
method getHeaders (line 228) | async getHeaders() {
FILE: examples/demo-app/src/cloud-providers/index.js
constant DROPBOX_CLIENT_NAME (line 19) | const DROPBOX_CLIENT_NAME = 'Kepler.gl Demo App';
constant DEFAULT_CLOUD_PROVIDER (line 21) | const DEFAULT_CLOUD_PROVIDER = 'dropbox';
constant CLOUD_PROVIDERS (line 23) | const CLOUD_PROVIDERS = [
function getCloudProvider (line 34) | function getCloudProvider(providerName) {
FILE: examples/demo-app/src/components/load-data-modal/load-remote-map.js
constant CORS_LINK_MESSAGE (line 79) | const CORS_LINK_MESSAGE = {corsLink: CORS_LINK};
class LoadRemoteMap (line 81) | class LoadRemoteMap extends Component {
method render (line 107) | render() {
FILE: examples/demo-app/src/components/map-control/map-control.js
function getURL (line 95) | function getURL(url) {
function SampleMapPanel (line 103) | function SampleMapPanel(props) {
function BannerMapPanel (line 159) | function BannerMapPanel() {
FILE: examples/demo-app/src/components/map-control/sql-panel-control.tsx
type SQLControlIcons (line 9) | interface SQLControlIcons {
type SqlPanelControlProps (line 13) | type SqlPanelControlProps = {
function SqlPanelControlFactory (line 21) | function SqlPanelControlFactory(
FILE: examples/demo-app/src/constants/default-settings.js
constant ASSETS_URL (line 8) | const ASSETS_URL = 'https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/';
constant DATA_URL (line 9) | const DATA_URL = 'https://raw.githubusercontent.com/keplergl/kepler.gl-d...
constant MAP_URI (line 10) | const MAP_URI = 'demo/map?mapUrl=';
constant MAP_CONFIG_URL (line 14) | const MAP_CONFIG_URL = `${DATA_URL}samples.json?nocache=${new Date().get...
constant KEPLER_GL_WEBSITE (line 21) | const KEPLER_GL_WEBSITE = 'http://kepler.gl/';
constant QUERY_TYPES (line 23) | const QUERY_TYPES = keyMirror({
constant QUERY_OPTIONS (line 28) | const QUERY_OPTIONS = keyMirror({
constant LOADING_METHODS (line 33) | const LOADING_METHODS = keyMirror({
constant LOADING_SAMPLE_LIST_ERROR_MESSAGE (line 38) | const LOADING_SAMPLE_LIST_ERROR_MESSAGE = 'Not able to load sample galle...
constant LOADING_SAMPLE_ERROR_MESSAGE (line 39) | const LOADING_SAMPLE_ERROR_MESSAGE = 'Not able to load sample';
constant CORS_LINK (line 40) | const CORS_LINK = 'https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS';
constant DEFAULT_FEATURE_FLAGS (line 42) | const DEFAULT_FEATURE_FLAGS = {
constant CLOUD_PROVIDERS_CONFIGURATION (line 46) | const CLOUD_PROVIDERS_CONFIGURATION = {
FILE: examples/demo-app/src/factories/load-data-modal.js
function replaceLoadDataModal (line 51) | function replaceLoadDataModal() {
FILE: examples/demo-app/src/factories/map-control.js
function CustomMapControlFactory (line 65) | function CustomMapControlFactory(
function replaceMapControl (line 99) | function replaceMapControl() {
FILE: examples/demo-app/src/factories/panel-header.js
function CustomPanelHeaderFactory (line 7) | function CustomPanelHeaderFactory(...deps) {
function replacePanelHeader (line 42) | function replacePanelHeader() {
FILE: examples/demo-app/src/reducers/index.js
function loadRemoteResourceSuccessTask (line 128) | async function loadRemoteResourceSuccessTask({
constant LOAD_REMOTE_RESOURCE_SUCCESS_TASK (line 149) | const LOAD_REMOTE_RESOURCE_SUCCESS_TASK = Task.fromPromise(
FILE: examples/demo-app/src/utils/routes.js
function onAuthEnterCallback (line 9) | function onAuthEnterCallback(nextState, replace, callback) {
function buildAppRoutes (line 23) | function buildAppRoutes(Component) {
FILE: examples/demo-app/src/utils/strings.js
function generateHashId (line 9) | function generateHashId(count) {
FILE: examples/get-started/esbuild.config.mjs
function openURL (line 46) | function openURL(url) {
FILE: examples/node-app/esbuild.config.mjs
constant NODE_ENV (line 18) | const NODE_ENV = JSON.stringify(process.env.NODE_ENV || 'production');
constant ROOT_NODE_MODULES (line 21) | const ROOT_NODE_MODULES = join('..', '..', 'node_modules');
function openURL (line 68) | function openURL(url) {
FILE: examples/node-app/server.js
constant ADDRESS (line 7) | const ADDRESS = '0.0.0.0';
constant PORT (line 8) | const PORT = process.env.PORT || 3000;
FILE: examples/node-app/src/app-reducer.js
constant INIT (line 7) | const INIT = 'INIT';
FILE: examples/node-app/src/app.js
constant MAPBOX_TOKEN (line 10) | const MAPBOX_TOKEN = process.env.MapboxAccessToken;
FILE: examples/open-modal/esbuild.config.mjs
constant NODE_ENV (line 18) | const NODE_ENV = JSON.stringify(process.env.NODE_ENV || 'production');
constant ROOT_NODE_MODULES (line 21) | const ROOT_NODE_MODULES = join('..', '..', 'node_modules');
function openURL (line 68) | function openURL(url) {
FILE: examples/open-modal/src/app-reducer.js
constant INIT (line 7) | const INIT = 'INIT';
constant SHOW_MODAL (line 8) | const SHOW_MODAL = 'SHOW_MODAL';
FILE: examples/open-modal/src/app.js
constant MAPBOX_TOKEN (line 15) | const MAPBOX_TOKEN = process.env.MapboxAccessToken;
class App (line 17) | class App extends Component {
method componentDidUpdate (line 18) | componentDidUpdate(prevProps) {
method render (line 46) | render() {
FILE: examples/open-modal/src/components/fresh-map.js
class FreshMap (line 12) | class FreshMap extends Component {
method componentDidMount (line 13) | componentDidMount() {
method render (line 28) | render() {
FILE: examples/open-modal/src/components/saved-map.js
class SavedMap (line 8) | class SavedMap extends Component {
method render (line 9) | render() {
FILE: examples/replace-component/esbuild.config.mjs
constant LIB_DIR (line 16) | const LIB_DIR = '../../';
constant NODE_MODULES_DIR (line 17) | const NODE_MODULES_DIR = join(LIB_DIR, 'node_modules');
constant SRC_DIR (line 18) | const SRC_DIR = join(LIB_DIR, 'src');
constant EXTERNAL_DECK_SRC (line 21) | const EXTERNAL_DECK_SRC = join(LIB_DIR, 'deck.gl');
constant EXTERNAL_LOADERS_SRC (line 24) | const EXTERNAL_LOADERS_SRC = join(LIB_DIR, 'loaders.gl');
constant EXTERNAL_HUBBLE_SRC (line 27) | const EXTERNAL_HUBBLE_SRC = join(LIB_DIR, '../../hubble.gl');
constant NODE_ENV (line 30) | const NODE_ENV = JSON.stringify(process.env.NODE_ENV || 'production');
constant RESOLVE_LOCAL_ALIASES (line 33) | const RESOLVE_LOCAL_ALIASES = {
function addAliases (line 93) | function addAliases(externals, args) {
function openURL (line 154) | function openURL(url) {
FILE: examples/replace-component/src/app-reducer.js
constant INIT (line 8) | const INIT = 'INIT';
constant SET_MAP_CONFIG (line 9) | const SET_MAP_CONFIG = 'SET_MAP_CONFIG';
FILE: examples/replace-component/src/app.js
constant MAPBOX_TOKEN (line 13) | const MAPBOX_TOKEN = process.env.MapboxAccessToken;
class App (line 53) | class App extends Component {
method componentDidMount (line 54) | componentDidMount() {
method render (line 58) | render() {
FILE: examples/replace-component/src/components/custom-panel.js
function CustomSidePanelsFactory (line 7) | function CustomSidePanelsFactory() {
FILE: examples/replace-component/src/components/panel-header.js
function CustomPanelHeaderFactory (line 8) | function CustomPanelHeaderFactory() {
FILE: examples/replace-component/src/components/side-bar.js
function CustomSidebarFactory (line 52) | function CustomSidebarFactory(CloseButton) {
FILE: scripts/action-table-maker.js
constant SRC_DIR (line 10) | const SRC_DIR = './src';
function buildActionTable (line 23) | function buildActionTable() {
function createActionNode (line 43) | function createActionNode(actionType) {
function addActionHandler (line 53) | function addActionHandler(path, actionMap, filePath) {
function addActionCreator (line 81) | function addActionCreator(path, actionMap, filePath) {
function addActionDeclaration (line 96) | function addActionDeclaration(path, actionMap, filePath) {
function traverseTree (line 110) | function traverseTree(filePath, actionMap = {}) {
FILE: scripts/ast-helper.js
function walkSync (line 7) | function walkSync(dir, fileList = []) {
FILE: scripts/documentation.js
constant INPUT_CONFIG (line 14) | const INPUT_CONFIG = {
constant OUT_CONFIG (line 22) | const OUT_CONFIG = {
constant PATHS (line 26) | const PATHS = {
constant TREE (line 33) | const TREE = {
function _overrideHeading (line 77) | function _overrideHeading(nodes) {
function _appendActionTypesAndUpdatersToActions (line 100) | function _appendActionTypesAndUpdatersToActions(node, actionMap) {
function _appendActionToUpdaters (line 138) | function _appendActionToUpdaters(node, actionMap) {
function _appendListToDescription (line 161) | function _appendListToDescription(node, mdContent) {
function _isParagraph (line 176) | function _isParagraph(node) {
function _isLink (line 180) | function _isLink(node) {
function _isLinkReference (line 184) | function _isLinkReference(node) {
function _isExampleOrParam (line 187) | function _isExampleOrParam(node) {
function _isExampleOrParameterLink (line 191) | function _isExampleOrParameterLink(node) {
function _cleanUpTOCChildren (line 202) | function _cleanUpTOCChildren(node) {
function buildChildDoc (line 228) | function buildChildDoc(inputPath, outputPath, actionMap, config) {
function buildMdDocs (line 267) | function buildMdDocs(nodePath, node, actionMap, allTasks) {
function buildDocs (line 301) | function buildDocs() {
FILE: scripts/edit-version.js
function readWritePackage (line 12) | function readWritePackage(file, version) {
function editExamplePackageJson (line 26) | function editExamplePackageJson(version) {
function editUMDPackage (line 44) | function editUMDPackage(version) {
FILE: scripts/license-header/bin.mjs
function readTree (line 98) | function readTree(options, callback) {
function processFiles (line 112) | function processFiles(err, files) {
FILE: scripts/license-header/license-fixer.mjs
function LicenseFixer (line 9) | function LicenseFixer(options) {
function createLicenseExpression (line 24) | function createLicenseExpression(license) {
function relaxLicenseTerm (line 33) | function relaxLicenseTerm(term) {
function regexpEscape (line 44) | function regexpEscape(string) {
function createSlashLicense (line 53) | function createSlashLicense(license) {
function createHashLicense (line 57) | function createHashLicense(license) {
function slashPrefix (line 61) | function slashPrefix(line) {
function hashPrefix (line 65) | function hashPrefix(line) {
FILE: scripts/log.js
function log (line 34) | function log(color) {
FILE: scripts/ts-smoosh/smoosh.js
function smoosh (line 11) | function smoosh(base) {
function returnSmooshed (line 19) | function returnSmooshed(base) {
function parseDts (line 47) | function parseDts(dtsFile) {
function enrichJs (line 89) | function enrichJs(jsFile, dts) {
function getIdentifierName (line 178) | function getIdentifierName(node) {
FILE: scripts/ts-smoosh/tests/01-functions/a.js
function foo (line 8) | function foo(
function typeParams (line 16) | function typeParams(a, b) {
FILE: scripts/ts-smoosh/tests/01-functions/a.tsx
function foo (line 8) | function foo(bar: string, baz: number): {
function typeParams (line 14) | function typeParams<A, B>(a: A, b: B): B {
FILE: scripts/ts-smoosh/tests/02-imports/b.d.ts
type MyFn (line 4) | type MyFn = (a: number, b: number) => number
FILE: scripts/ts-smoosh/tests/02-imports/c.js
function c (line 8) | function c(a, b) {
FILE: scripts/ts-smoosh/tests/02-imports/c.tsx
function c (line 8) | function c(a: number, b: number): number {
FILE: src/actions/babel.config.js
constant PRESETS (line 6) | const PRESETS = ['@babel/preset-env', '@babel/preset-react', '@babel/pre...
constant PLUGINS (line 7) | const PLUGINS = [
constant ENV (line 33) | const ENV = {
FILE: src/actions/src/action-types.ts
constant ACTION_PREFIX (line 4) | const ACTION_PREFIX = '@@kepler.gl/';
FILE: src/actions/src/action-wrapper.ts
constant FORWARD (line 4) | const FORWARD = '@redux-forward/FORWARD';
constant ADDRESS_PREFIX (line 5) | const ADDRESS_PREFIX = '@@KG_';
type IKeplerGlAction (line 11) | interface IKeplerGlAction {
FILE: src/actions/src/actions.ts
type Handler (line 16) | type Handler = (...args: any) => any;
type ActionHandler (line 18) | type ActionHandler<A extends Handler> = (...args: Parameters<A>) => void;
type ActionHandlers (line 20) | type ActionHandlers<T extends {[k: string]: Handler}> = {
type ReceiveMapConfigPayload (line 122) | type ReceiveMapConfigPayload = {
type KeplerGlInitPayload (line 171) | type KeplerGlInitPayload = {
type ReplaceDataToMapOptions (line 193) | type ReplaceDataToMapOptions = {
type ReplaceDataInMapPayload (line 198) | type ReplaceDataInMapPayload = {
FILE: src/actions/src/identity-actions.ts
type RegisterEntryUpdaterAction (line 8) | type RegisterEntryUpdaterAction = {
type RenameEntryUpdaterAction (line 19) | type RenameEntryUpdaterAction = {
FILE: src/actions/src/map-state-actions.ts
type TogglePerspectiveUpdaterAction (line 8) | type TogglePerspectiveUpdaterAction = void;
type FitBoundsUpdaterAction (line 23) | type FitBoundsUpdaterAction = {payload: Bounds};
type UpdateMapUpdaterAction (line 40) | type UpdateMapUpdaterAction = {payload: {viewport: Viewport; mapIndex?: ...
type ToggleSplitMapUpdaterAction (line 73) | type ToggleSplitMapUpdaterAction = {
type ToggleSplitMapViewportUpdaterAction (line 92) | type ToggleSplitMapViewportUpdaterAction = {
FILE: src/actions/src/map-style-actions.ts
type RemoveCustomMapStyleUpdaterAction (line 28) | type RemoveCustomMapStyleUpdaterAction = {
type InputMapStyleUpdaterAction (line 66) | type InputMapStyleUpdaterAction = {
type MapConfigChangeUpdaterAction (line 102) | type MapConfigChangeUpdaterAction = {
type OnLoadMapStyleSuccessCallback (line 122) | type OnLoadMapStyleSuccessCallback = (payload: {styleType: string}) => any;
type RequestMapStylesUpdaterAction (line 125) | type RequestMapStylesUpdaterAction = {
type LoadMapStylesUpdaterAction (line 157) | type LoadMapStylesUpdaterAction = {
type LoadMapStyleErrUpdaterAction (line 181) | type LoadMapStyleErrUpdaterAction = {
type MapStyleChangeUpdaterAction (line 207) | type MapStyleChangeUpdaterAction = {
type LoadCustomMapStyleUpdaterAction (line 232) | type LoadCustomMapStyleUpdaterAction = {
type Set3dBuildingColorUpdaterAction (line 257) | type Set3dBuildingColorUpdaterAction = {
type SetBackgroundColorUpdaterAction (line 276) | type SetBackgroundColorUpdaterAction = {
FILE: src/actions/src/provider-actions.ts
type ExportFileSuccessPayload (line 46) | type ExportFileSuccessPayload = {
type ExportFileErrorPayload (line 62) | type ExportFileErrorPayload = {
type PostSaveLoadSuccessPayload (line 75) | type PostSaveLoadSuccessPayload = string;
type LoadCloudMapPayload (line 88) | type LoadCloudMapPayload = {
type LoadCloudMapSuccessCallback (line 100) | type LoadCloudMapSuccessCallback = (p: {response: any; loadParams: any; ...
type LoadCloudMapSuccessPayload (line 101) | type LoadCloudMapSuccessPayload = {
type LoadCloudMapSuccess2Payload (line 116) | type LoadCloudMapSuccess2Payload = LoadCloudMapSuccessPayload & {
type LoadCloudMapErrorPayload (line 127) | type LoadCloudMapErrorPayload = {
FILE: src/actions/src/ui-state-actions.ts
type ToggleSidePanelUpdaterAction (line 9) | type ToggleSidePanelUpdaterAction = {
type ToggleModalUpdaterAction (line 24) | type ToggleModalUpdaterAction = {
type ShowExportDropdownUpdaterAction (line 49) | type ShowExportDropdownUpdaterAction = {
type ToggleSidePanelCloseButtonUpdaterAction (line 76) | type ToggleSidePanelCloseButtonUpdaterAction = {
type ToggleMapControlUpdaterAction (line 96) | type ToggleMapControlUpdaterAction = {
type setMapControlVisibilityUpdaterAction (line 126) | type setMapControlVisibilityUpdaterAction = {
type setMapControlSettingsUpdaterAction (line 158) | type setMapControlSettingsUpdaterAction = {
type OpenDeleteModalUpdaterAction (line 182) | type OpenDeleteModalUpdaterAction = {
type AddNotificationUpdaterAction (line 200) | type AddNotificationUpdaterAction = {
type RemoveNotificationUpdaterAction (line 221) | type RemoveNotificationUpdaterAction = {
type SetExportImageSettingUpdaterAction (line 239) | type SetExportImageSettingUpdaterAction = {
type SetExportImageDataUriUpdaterAction (line 272) | type SetExportImageDataUriUpdaterAction = {
type SetExportImageErrorUpdaterAction (line 292) | type SetExportImageErrorUpdaterAction = {
type SetExportSelectedDatasetUpdaterAction (line 318) | type SetExportSelectedDatasetUpdaterAction = {
type SetExportDataTypeUpdaterAction (line 338) | type SetExportDataTypeUpdaterAction = {
type SetExportFilteredUpdaterAction (line 356) | type SetExportFilteredUpdaterAction = {
type SetUserMapboxAccessTokenUpdaterAction (line 383) | type SetUserMapboxAccessTokenUpdaterAction = {
type SetExportMapFormatUpdaterAction (line 403) | type SetExportMapFormatUpdaterAction = {
type SetExportHTMLMapModeUpdaterAction (line 421) | type SetExportHTMLMapModeUpdaterAction = {
type SetLocaleUpdaterAction (line 438) | type SetLocaleUpdaterAction = {
type TogglePanelListViewAction (line 459) | type TogglePanelListViewAction = {
FILE: src/actions/src/vis-state-actions.ts
type ApplyLayerConfigUpdaterAction (line 34) | type ApplyLayerConfigUpdaterAction = {
function applyLayerConfig (line 49) | function applyLayerConfig(
type LayerConfigChangeUpdaterAction (line 62) | type LayerConfigChangeUpdaterAction = {
function layerConfigChange (line 73) | function layerConfigChange(
type LayerToggleVisibilityUpdaterAction (line 84) | type LayerToggleVisibilityUpdaterAction = {
function layerToggleVisibility (line 98) | function layerToggleVisibility(
type LayerTextLabelChangeUpdaterAction (line 111) | type LayerTextLabelChangeUpdaterAction = {
function layerTextLabelChange (line 127) | function layerTextLabelChange(
type LayerSetIsValidUpdaterAction (line 142) | type LayerSetIsValidUpdaterAction = {
function layerSetIsValid (line 155) | function layerSetIsValid(
type LayerTypeChangeUpdaterAction (line 166) | type LayerTypeChangeUpdaterAction = {
function layerTypeChange (line 177) | function layerTypeChange(
type LayerVisualChannelConfigChangeUpdaterAction (line 187) | type LayerVisualChannelConfigChangeUpdaterAction = {
function layerVisualChannelConfigChange (line 202) | function layerVisualChannelConfigChange(
type LayerVisConfigChangeUpdaterAction (line 219) | type LayerVisConfigChangeUpdaterAction = {
function layerVisConfigChange (line 231) | function layerVisConfigChange(
type LayerColorUIChangeUpdaterAction (line 241) | type LayerColorUIChangeUpdaterAction = {
function layerColorUIChange (line 256) | function layerColorUIChange(
type UpdateLayerBlendingUpdaterAction (line 269) | type UpdateLayerBlendingUpdaterAction = {
function updateLayerBlending (line 279) | function updateLayerBlending(
type UpdateOverlayBlendingUpdaterAction (line 288) | type UpdateOverlayBlendingUpdaterAction = {
function updateOverlayBlending (line 299) | function updateOverlayBlending(
type InteractionConfigChangeUpdaterAction (line 308) | type InteractionConfigChangeUpdaterAction = {
function interactionConfigChange (line 318) | function interactionConfigChange(
type ApplyFilterConfigUpdaterAction (line 330) | type ApplyFilterConfigUpdaterAction = {
function applyFilterConfig (line 342) | function applyFilterConfig(
type SetFilterUpdaterAction (line 353) | type SetFilterUpdaterAction = {
function setFilter (line 371) | function setFilter(
type SetFilterAnimationTimeUpdaterAction (line 386) | type SetFilterAnimationTimeUpdaterAction = {
function setFilterAnimationTime (line 402) | function setFilterAnimationTime(
type SetFilterAnimationWindowUpdaterAction (line 420) | type SetFilterAnimationWindowUpdaterAction = {
function setFilterAnimationWindow (line 429) | function setFilterAnimationWindow({
type AddFilterUpdaterAction (line 443) | type AddFilterUpdaterAction = {
function addFilter (line 455) | function addFilter(
type CreateOrUpdateFilterUpdaterAction (line 466) | type CreateOrUpdateFilterUpdaterAction = {
function createOrUpdateFilter (line 480) | function createOrUpdateFilter(
type AddLayerUpdaterAction (line 495) | type AddLayerUpdaterAction = {
function addLayer (line 507) | function addLayer(
type ReorderLayerUpdaterAction (line 518) | type ReorderLayerUpdaterAction = {
function reorderLayer (line 533) | function reorderLayer(
type RemoveFilterUpdaterAction (line 542) | type RemoveFilterUpdaterAction = {
function removeFilter (line 552) | function removeFilter(
type RemoveLayerUpdaterAction (line 561) | type RemoveLayerUpdaterAction = {
function removeLayer (line 571) | function removeLayer(
type DuplicateLayerUpdaterAction (line 580) | type DuplicateLayerUpdaterAction = {
function duplicateLayer (line 590) | function duplicateLayer(
type AddEffectUpdaterAction (line 599) | type AddEffectUpdaterAction = {
function addEffect (line 610) | function addEffect(
type ReorderEffectUpdaterAction (line 619) | type ReorderEffectUpdaterAction = {
function reorderEffect (line 630) | function reorderEffect(
type RemoveEffectUpdaterAction (line 639) | type RemoveEffectUpdaterAction = {
function removeEffect (line 650) | function removeEffect(
type UpdateEffectUpdaterAction (line 659) | type UpdateEffectUpdaterAction = {
function updateEffect (line 671) | function updateEffect(
type RemoveDatasetUpdaterAction (line 682) | type RemoveDatasetUpdaterAction = {
function removeDataset (line 692) | function removeDataset(
type ShowDatasetTableUpdaterAction (line 701) | type ShowDatasetTableUpdaterAction = {
function showDatasetTable (line 711) | function showDatasetTable(
type UpdateDatasetColorUpdater (line 720) | type UpdateDatasetColorUpdater = {
function updateTableColor (line 732) | function updateTableColor(
type SortTableColumnUpdaterAction (line 743) | type SortTableColumnUpdaterAction = {
function sortTableColumn (line 757) | function sortTableColumn(
type PinTableColumnUpdaterAction (line 770) | type PinTableColumnUpdaterAction = {
function pinTableColumn (line 781) | function pinTableColumn(
type CopyTableColumnUpdaterAction (line 792) | type CopyTableColumnUpdaterAction = {
function copyTableColumn (line 803) | function copyTableColumn(
type SetColumnDisplayFormatUpdaterAction (line 814) | type SetColumnDisplayFormatUpdaterAction = {
function setColumnDisplayFormat (line 828) | function setColumnDisplayFormat(
type AddDataToMapUpdaterOptions (line 842) | type AddDataToMapUpdaterOptions = {
type UpdateVisDataUpdaterAction (line 848) | type UpdateVisDataUpdaterAction = {
function updateVisData (line 874) | function updateVisData(
type RenameDatasetUpdaterAction (line 887) | type RenameDatasetUpdaterAction = {
function renameDataset (line 899) | function renameDataset(
type UpdateDatasetPropsUpdaterAction (line 910) | type UpdateDatasetPropsUpdaterAction = {
function updateDatasetProps (line 924) | function updateDatasetProps(
type ToggleFilterAnimationUpdaterAction (line 939) | type ToggleFilterAnimationUpdaterAction = {
function toggleFilterAnimation (line 949) | function toggleFilterAnimation(
type UpdateFilterAnimationSpeedUpdaterAction (line 958) | type UpdateFilterAnimationSpeedUpdaterAction = {
function updateFilterAnimationSpeed (line 970) | function updateFilterAnimationSpeed(
type SetAnimationConfigUpdaterAction (line 984) | type SetAnimationConfigUpdaterAction = {
function setAnimationConfig (line 992) | function setAnimationConfig(
type SetLayerAnimationTimeUpdaterAction (line 1001) | type SetLayerAnimationTimeUpdaterAction = {
function setLayerAnimationTime (line 1011) | function setLayerAnimationTime(
type UpdateLayerAnimationSpeedUpdaterAction (line 1020) | type UpdateLayerAnimationSpeedUpdaterAction = {
function updateLayerAnimationSpeed (line 1030) | function updateLayerAnimationSpeed(
type ToggleLayerAnimationUpdaterAction (line 1041) | type ToggleLayerAnimationUpdaterAction = void;
function toggleLayerAnimation (line 1048) | function toggleLayerAnimation(): Merge<
type ToggleLayerAnimationControlUpdaterAction (line 1057) | type ToggleLayerAnimationControlUpdaterAction = void;
function toggleLayerAnimationControl (line 1064) | function toggleLayerAnimationControl(): Merge<
type SetFilterViewUpdaterAction (line 1073) | type SetFilterViewUpdaterAction = {
function setFilterView (line 1085) | function setFilterView(
type ToggleFilterFeatureUpdaterAction (line 1096) | type ToggleFilterFeatureUpdaterAction = {
function toggleFilterFeature (line 1105) | function toggleFilterFeature(
type OnLayerHoverUpdaterAction (line 1114) | type OnLayerHoverUpdaterAction = {
function onLayerHover (line 1126) | function onLayerHover(
type OnLayerClickUpdaterAction (line 1137) | type OnLayerClickUpdaterAction = {
function onLayerClick (line 1147) | function onLayerClick(
type OnMapClickUpdaterAction (line 1156) | type OnMapClickUpdaterAction = void;
function onMapClick (line 1163) | function onMapClick(): Merge<OnMapClickUpdaterAction, {type: typeof Acti...
type OnMouseMoveUpdaterAction (line 1169) | type OnMouseMoveUpdaterAction = {
function onMouseMove (line 1182) | function onMouseMove(
type ToggleLayerForMapUpdaterAction (line 1191) | type ToggleLayerForMapUpdaterAction = {
function toggleLayerForMap (line 1203) | function toggleLayerForMap(
type FilterPlotNewProp (line 1214) | type FilterPlotNewProp = {
type SetFilterPlotUpdaterAction (line 1218) | type SetFilterPlotUpdaterAction = {
function setFilterPlot (line 1232) | function setFilterPlot(
type SetMapInfoUpdaterAction (line 1245) | type SetMapInfoUpdaterAction = {
function setMapInfo (line 1255) | function setMapInfo(
type LoadFilesUpdaterAction (line 1264) | type LoadFilesUpdaterAction = {
function loadFiles (line 1275) | function loadFiles(
function loadNextFile (line 1292) | function loadNextFile(): {type: typeof ActionTypes.LOAD_NEXT_FILE} {
type loadFilesSuccessUpdaterAction (line 1298) | type loadFilesSuccessUpdaterAction = {
function loadFilesSuccess (line 1307) | function loadFilesSuccess(
type LoadFileStepSuccessAction (line 1316) | type LoadFileStepSuccessAction = {
function loadFileStepSuccess (line 1326) | function loadFileStepSuccess({
type LoadFilesErrUpdaterAction (line 1340) | type LoadFilesErrUpdaterAction = {
function loadFilesErr (line 1352) | function loadFilesErr(
type SetFeaturesUpdaterAction (line 1363) | type SetFeaturesUpdaterAction = {
function setFeatures (line 1372) | function setFeatures(
type SetPolygonFilterLayerUpdaterAction (line 1381) | type SetPolygonFilterLayerUpdaterAction = {
function setPolygonFilterLayer (line 1393) | function setPolygonFilterLayer(
type SetSelectedFeatureUpdaterAction (line 1404) | type SetSelectedFeatureUpdaterAction = {
function setSelectedFeature (line 1417) | function setSelectedFeature(
type DeleteFeatureUpdaterAction (line 1428) | type DeleteFeatureUpdaterAction = {
function deleteFeature (line 1437) | function deleteFeature(
type SetEditorModeUpdaterAction (line 1446) | type SetEditorModeUpdaterAction = {
function setEditorMode (line 1460) | function setEditorMode(
type ApplyCPUFilterUpdaterAction (line 1469) | type ApplyCPUFilterUpdaterAction = {
function applyCPUFilter (line 1479) | function applyCPUFilter(
type ToggleEditorVisibilityUpdaterAction (line 1488) | type ToggleEditorVisibilityUpdaterAction = void;
function toggleEditorVisibility (line 1494) | function toggleEditorVisibility(): Merge<
type FileContent (line 1503) | type FileContent = {
type NextFileBatchUpdaterAction (line 1508) | type NextFileBatchUpdaterAction = {
function nextFileBatch (line 1524) | function nextFileBatch(
type ProcessFileContentUpdaterAction (line 1533) | type ProcessFileContentUpdaterAction = {
function processFileContent (line 1545) | function processFileContent(
type SetLayerAnimationTimeConfigAction (line 1554) | type SetLayerAnimationTimeConfigAction = {
function setLayerAnimationTimeConfig (line 1566) | function setLayerAnimationTimeConfig(
type SetFilterAnimationTimeConfigAction (line 1578) | type SetFilterAnimationTimeConfigAction = {
function setFilterAnimationTimeConfig (line 1592) | function setFilterAnimationTimeConfig(
type LayerFilteredItemsChangeAction (line 1606) | type LayerFilteredItemsChangeAction = {
function layerFilteredItemsChange (line 1621) | function layerFilteredItemsChange(
type WMSFeatureInfoAction (line 1632) | type WMSFeatureInfoAction = {
function wmsFeatureInfo (line 1646) | function wmsFeatureInfo(
type SyncTimeFilterWithLayerTimelineAction (line 1659) | type SyncTimeFilterWithLayerTimelineAction = {
function syncTimeFilterWithLayerTimeline (line 1671) | function syncTimeFilterWithLayerTimeline(
type setTimeFilterSyncTimelineModeAction (line 1685) | type setTimeFilterSyncTimelineModeAction = {
function setTimeFilterSyncTimelineMode (line 1697) | function setTimeFilterSyncTimelineMode({
type CreateNewDatasetSuccessPayload (line 1711) | type CreateNewDatasetSuccessPayload = {
type SetLoadingIndicatorPayload (line 1727) | type SetLoadingIndicatorPayload = {
FILE: src/ai-assistant/babel.config.js
constant PRESETS (line 6) | const PRESETS = ['@babel/preset-env', '@babel/preset-react', '@babel/pre...
constant PLUGINS (line 7) | const PLUGINS = [
constant ENV (line 33) | const ENV = {
FILE: src/ai-assistant/src/actions.ts
constant ACTION_PREFIX (line 7) | const ACTION_PREFIX = '@@openassistant/';
constant UPDATE_AI_ASSISTANT_CONFIG (line 9) | const UPDATE_AI_ASSISTANT_CONFIG = `${ACTION_PREFIX}UPDATE_AI_ASSISTANT_...
constant UPDATE_AI_ASSISTANT_MESSAGES (line 10) | const UPDATE_AI_ASSISTANT_MESSAGES = `${ACTION_PREFIX}UPDATE_AI_ASSISTAN...
constant SET_START_SCREEN_CAPTURE (line 11) | const SET_START_SCREEN_CAPTURE = `${ACTION_PREFIX}SET_START_SCREEN_CAPTU...
constant SET_SCREEN_CAPTURED (line 12) | const SET_SCREEN_CAPTURED = `${ACTION_PREFIX}SET_SCREEN_CAPTURED`;
constant SET_MAP_BOUNDARY (line 13) | const SET_MAP_BOUNDARY = `${ACTION_PREFIX}SET_MAP_BOUNDARY`;
function updateAiAssistantConfig (line 15) | function updateAiAssistantConfig(config: AiAssistantConfig) {
function updateAiAssistantMessages (line 22) | function updateAiAssistantMessages(messages: MessageModel[]) {
function setStartScreenCapture (line 29) | function setStartScreenCapture(flag: boolean) {
function setScreenCaptured (line 36) | function setScreenCaptured(screenshot: string) {
function setMapBoundary (line 43) | function setMapBoundary(nw: [number, number], se: [number, number]) {
FILE: src/ai-assistant/src/components/ai-assistant-component.tsx
function AiAssistantComponent (line 34) | function AiAssistantComponent() {
FILE: src/ai-assistant/src/components/ai-assistant-config.tsx
function AiAssistantConfig (line 131) | function AiAssistantConfig() {
FILE: src/ai-assistant/src/components/ai-assistant-manager.tsx
type State (line 63) | type State = {
function AiAssistantPanel (line 76) | function AiAssistantPanel() {
FILE: src/ai-assistant/src/config/models.ts
constant PROVIDER_DEFAULT_BASE_URLS (line 4) | const PROVIDER_DEFAULT_BASE_URLS = {
constant PROVIDER_MODELS (line 13) | const PROVIDER_MODELS = {
FILE: src/ai-assistant/src/constants.ts
constant WELCOME_MESSAGE (line 4) | const WELCOME_MESSAGE = `Hi, I am Kepler.gl AI Assistant!`;
constant INSTRUCTIONS (line 6) | const INSTRUCTIONS = `You are a Kepler.gl AI Assistant. You are a helpfu...
constant PROMPT_IDEAS (line 92) | const PROMPT_IDEAS = `Return ONLY a JSON array of 5 ideas based on the t...
constant ASSISTANT_NAME (line 108) | const ASSISTANT_NAME = 'kepler-gl-ai-assistant';
constant ASSISTANT_DESCRIPTION (line 110) | const ASSISTANT_DESCRIPTION = 'A Kepler.gl AI Assistant';
constant ASSISTANT_VERSION (line 112) | const ASSISTANT_VERSION = '0.0.2';
FILE: src/ai-assistant/src/icons/ai-star.tsx
class AiStar (line 7) | class AiStar extends Component {
method render (line 14) | render() {
FILE: src/ai-assistant/src/icons/api-key.tsx
class ApiKey (line 7) | class ApiKey extends Component<Partial<Icons.BaseProps>> {
method render (line 14) | render() {
FILE: src/ai-assistant/src/map/ai-assistant-control.tsx
type AiAssistantControlIcons (line 9) | type AiAssistantControlIcons = {
type AiAssistantControlProps (line 25) | type AiAssistantControlProps = {
function AiAssistantControlFactory (line 38) | function AiAssistantControlFactory(
FILE: src/ai-assistant/src/plugin.ts
method init (line 6) | async init() {
FILE: src/ai-assistant/src/reducers/index.ts
type AiAssistantConfig (line 15) | type AiAssistantConfig = {
type AiAssistantState (line 37) | type AiAssistantState = {
function updateAiAssistantConfigHandler (line 72) | function updateAiAssistantConfigHandler(
function updateAiAssistantMessagesHandler (line 82) | function updateAiAssistantMessagesHandler(state: AiAssistantState, actio...
function setStartScreenCaptureHandler (line 89) | function setStartScreenCaptureHandler(state: AiAssistantState, action: A...
function setScreenCapturedHandler (line 96) | function setScreenCapturedHandler(state: AiAssistantState, action: Actio...
function setMapBoundaryHandler (line 103) | function setMapBoundaryHandler(
FILE: src/ai-assistant/src/tools/echarts-tools.tsx
function getEchartsTools (line 31) | function getEchartsTools(datasets: Datasets, layers: Layer[], dispatch: ...
FILE: src/ai-assistant/src/tools/geo-tools.tsx
function getGeoTools (line 72) | function getGeoTools(
function CustomDataTableComponent (line 294) | function CustomDataTableComponent(props: DataTableComponentProps) {
FILE: src/ai-assistant/src/tools/kepler-tools/basemap-tool.tsx
type BasemapTool (line 30) | type BasemapTool = typeof basemap;
type ExecuteBasemapResult (line 32) | type ExecuteBasemapResult = {
function executeBasemap (line 44) | async function executeBasemap({styleType}): Promise<ExecuteBasemapResult> {
function BasemapToolComponent (line 74) | function BasemapToolComponent({styleType}) {
FILE: src/ai-assistant/src/tools/kepler-tools/boundary-tool.tsx
type MapBoundaryContext (line 7) | type MapBoundaryContext = {
function isMapBoundaryContext (line 14) | function isMapBoundaryContext(context: unknown): context is MapBoundaryC...
FILE: src/ai-assistant/src/tools/kepler-tools/index.ts
function getKeplerTools (line 14) | function getKeplerTools(visState: VisState, aiAssistant: AiAssistantStat...
FILE: src/ai-assistant/src/tools/kepler-tools/layer-creation-tool.tsx
type AddLayerTool (line 110) | type AddLayerTool = typeof addLayer;
type AddLayerArgs (line 112) | type AddLayerArgs = {
function isAddLayerArgs (line 123) | function isAddLayerArgs(args: any): args is AddLayerArgs {
type AddLayerFunctionContext (line 127) | type AddLayerFunctionContext = {
function isAddLayerFunctionContext (line 131) | function isAddLayerFunctionContext(context: any): context is AddLayerFun...
type ExecuteAddLayerResult (line 135) | type ExecuteAddLayerResult = {
function executeAddLayer (line 149) | async function executeAddLayer(args, options): Promise<ExecuteAddLayerRe...
function guessDefaultLayer (line 290) | function guessDefaultLayer(dataset: KeplerTable, layerType: string) {
function AddLayerToolComponent (line 308) | function AddLayerToolComponent({layer, datasetId}) {
FILE: src/ai-assistant/src/tools/kepler-tools/layer-style-tool.tsx
function UpdateLayerColorToolComponent (line 14) | function UpdateLayerColorToolComponent({layer, newConfig, channel, newVi...
type UpdateLayerColorArgs (line 52) | type UpdateLayerColorArgs = {
function isUpdateLayerColorArgs (line 58) | function isUpdateLayerColorArgs(args: any): args is UpdateLayerColorArgs {
type UpdateLayerColorFunctionContext (line 69) | type UpdateLayerColorFunctionContext = {
function isUpdateLayerColorFunctionContext (line 73) | function isUpdateLayerColorFunctionContext(
type ExecuteUpdateLayerColorResult (line 79) | type ExecuteUpdateLayerColorResult = {
function executeUpdateLayerColor (line 95) | async function executeUpdateLayerColor(args, options): Promise<ExecuteUp...
FILE: src/ai-assistant/src/tools/kepler-tools/loaddata-tool.tsx
type LoadDataTool (line 38) | type LoadDataTool = typeof loadData;
type ExecuteLoadDataResult (line 40) | type ExecuteLoadDataResult = {
type LoadDataToolContext (line 53) | type LoadDataToolContext = {
function isLoadDataContext (line 60) | function isLoadDataContext(context: any): context is LoadDataToolContext {
function executeLoadData (line 64) | async function executeLoadData({url}, options): Promise<ExecuteLoadDataR...
function LoadDataToolComponent (line 144) | function LoadDataToolComponent({parsedData}) {
FILE: src/ai-assistant/src/tools/kepler-tools/save-data-tool.tsx
function SaveDataToMapToolComponent (line 119) | function SaveDataToMapToolComponent({parsedData}: {parsedData: ProtoData...
FILE: src/ai-assistant/src/tools/kepler-tools/table-tool.tsx
function TableToolComponent (line 18) | function TableToolComponent({
FILE: src/ai-assistant/src/tools/lisa-tool.tsx
function LisaToolComponent (line 15) | function LisaToolComponent(props: LisaAdditionalData) {
FILE: src/ai-assistant/src/tools/query-tool.tsx
function getQueryTool (line 20) | function getQueryTool(datasets: Datasets, layers: Layer[]) {
FILE: src/ai-assistant/src/tools/tools.tsx
function setupLLMTools (line 13) | function setupLLMTools({
FILE: src/ai-assistant/src/tools/utils.ts
function interpolateColor (line 19) | function interpolateColor(originalColors: string[], numberOfColors: numb...
function getValuesFromDataset (line 40) | function getValuesFromDataset(
function isVectorTileLayer (line 71) | function isVectorTileLayer(layer: Layer): layer is VectorTileLayer {
function getValuesFromVectorTileLayer (line 75) | function getValuesFromVectorTileLayer(datasetId: string, layers: Layer[]...
function highlightRows (line 100) | function highlightRows(
function getDatasetContext (line 130) | function getDatasetContext(datasets?: Datasets, layers?: Layer[]) {
function getGeometriesFromDataset (line 169) | function getGeometriesFromDataset(
function saveAsDataset (line 224) | function saveAsDataset(
function determineFieldType (line 315) | function determineFieldType(value: unknown): keyof typeof ALL_FIELD_TYPES {
function highlightRowsByColumnValues (line 323) | function highlightRowsByColumnValues(
function getFeaturesFromVectorTile (line 349) | function getFeaturesFromVectorTile(leftDataset: KeplerTable, layers: Lay...
function appendColumnsToDataset (line 365) | async function appendColumnsToDataset(
FILE: src/cloud-providers/babel.config.js
constant PRESETS (line 6) | const PRESETS = ['@babel/preset-env', '@babel/preset-react', '@babel/pre...
constant PLUGINS (line 7) | const PLUGINS = [
constant ENV (line 33) | const ENV = {
FILE: src/cloud-providers/src/base.tsx
type BaseProps (line 15) | type BaseProps = {
class Base (line 32) | class Base extends Component<BaseProps> {
method render (line 46) | render() {
FILE: src/cloud-providers/src/provider.ts
type MapItemLoadParams (line 8) | type MapItemLoadParams = {
type MapListItem (line 13) | type MapListItem = {
type CloudUser (line 23) | type CloudUser = {
type Thumbnail (line 29) | type Thumbnail = {
type ProviderProps (line 34) | type ProviderProps = {
type IconProps (line 42) | interface IconProps {
constant NAME (line 47) | const NAME = 'cloud-provider';
constant DISPLAY_NAME (line 48) | const DISPLAY_NAME = 'Cloud Provider';
constant THUMBNAIL (line 49) | const THUMBNAIL = {width: 300, height: 200};
constant ICON (line 50) | const ICON = Upload;
constant KEPLER_FORMAT (line 51) | const KEPLER_FORMAT = 'keplergl';
constant FILE_CONFLICT_MSG (line 52) | const FILE_CONFLICT_MSG = 'file_conflict';
class Provider (line 73) | class Provider {
method constructor (line 81) | constructor(props: ProviderProps) {
method hasPrivateStorage (line 94) | hasPrivateStorage(): boolean {
method hasSharingUrl (line 103) | hasSharingUrl(): boolean {
method getShareUrl (line 114) | getShareUrl(fullUrl = false): string {
method getMapUrl (line 124) | getMapUrl(loadParams: MapItemLoadParams): string {
method getAccessToken (line 133) | async getAccessToken(): Promise<string | null> {
method getUserName (line 143) | getUserName(): string {
method getUser (line 150) | async getUser(): Promise<CloudUser | null> {
method getFileConflictError (line 157) | getFileConflictError() {
method login (line 166) | async login() {
method logout (line 175) | async logout(): Promise<void> {
method uploadMap (line 192) | async uploadMap({
method listMaps (line 223) | async listMaps(): Promise<MapListItem[]> {
method downloadMap (line 253) | async downloadMap(loadParams): Promise<{map: SavedMap; format: string}> {
method getManagementUrl (line 261) | getManagementUrl(): string {
FILE: src/cloud-providers/src/upload.tsx
class Upload (line 7) | class Upload extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/cloud-providers/webpack/umd.js
constant SRC_DIR (line 10) | const SRC_DIR = resolve(__dirname, '../src');
constant OUTPUT_DIR (line 11) | const OUTPUT_DIR = resolve(__dirname, '../umd');
FILE: src/common-utils/babel.config.js
constant PRESETS (line 6) | const PRESETS = ['@babel/preset-env', '@babel/preset-react', '@babel/pre...
constant PLUGINS (line 7) | const PLUGINS = [
constant ENV (line 33) | const ENV = {
FILE: src/common-utils/src/data-type.ts
constant H3_ANALYZER_TYPE (line 12) | const H3_ANALYZER_TYPE = 'H3';
constant ACCEPTED_ANALYZER_TYPES (line 14) | const ACCEPTED_ANALYZER_TYPES = [
constant IGNORE_DATA_TYPES (line 32) | const IGNORE_DATA_TYPES = Object.keys(AnalyzerDATA_TYPES).filter(
function getSampleForTypeAnalyze (line 39) | function getSampleForTypeAnalyze({
function getSampleForTypeAnalyzeArrow (line 90) | function getSampleForTypeAnalyzeArrow(
function analyzerTypeToFieldType (line 138) | function analyzerTypeToFieldType(aType: string): string {
function getFieldsFromData (line 231) | function getFieldsFromData(data: RowData, fieldOrder: string[]): Field[] {
function renameDuplicateFields (line 294) | function renameDuplicateFields(fieldOrder: string[]): {
FILE: src/common-utils/src/data.ts
function notNullorUndefined (line 8) | function notNullorUndefined<T extends NonNullable<any>>(d: T | null | un...
function isHexWkb (line 19) | function isHexWkb(str: string | null): boolean {
function toArray (line 41) | function toArray<T>(item: T | T[]): T[] {
function arrayMove (line 56) | function arrayMove<T>(array: T[], from: number, to: number): T[] {
function containValidTime (line 68) | function containValidTime(timestamps: string[]): Field | null {
FILE: src/common-utils/src/h3-utils.ts
type Centroid (line 9) | type Centroid = [number, number];
function getVertices (line 12) | function getVertices({id}: {id: H3Index}) {
function getCentroid (line 18) | function getCentroid({id}: {id: H3Index}): Centroid {
function idToPolygonGeo (line 23) | function idToPolygonGeo(object?: {id: H3Index}, properties?: any) {
FILE: src/common-utils/src/string.ts
function generateHashId (line 9) | function generateHashId(count = 6): string {
FILE: src/common-utils/src/url.ts
function parseUri (line 8) | function parseUri(str: string): {[key: string]: any} {
function validateUrl (line 60) | function validateUrl(str) {
FILE: src/components/babel.config.js
constant PRESETS (line 6) | const PRESETS = ['@babel/preset-env', '@babel/preset-react', '@babel/pre...
constant PLUGINS (line 7) | const PLUGINS = [
constant ENV (line 33) | const ENV = {
FILE: src/components/src/bottom-widget.tsx
type BottomWidgetContainerProps (line 21) | type BottomWidgetContainerProps = BaseComponentProps & {
type BottomWidgetProps (line 47) | type BottomWidgetProps = {
type ThemeProp (line 51) | type ThemeProp = {
type BottomWidgetThemedProps (line 54) | type BottomWidgetThemedProps = BottomWidgetProps & ThemeProp;
function BottomWidgetFactory (line 64) | function BottomWidgetFactory(
FILE: src/components/src/common/action-panel.tsx
type ActionPanelProps (line 12) | type ActionPanelProps = PropsWithChildren<{
type ActionPanelItemProps (line 18) | type ActionPanelItemProps = PropsWithChildren<{
type StyledActionPanelProps (line 189) | type StyledActionPanelProps = BaseComponentProps & {
FILE: src/components/src/common/animation-control/animation-control.tsx
constant SLIDER_MARGIN_PALM (line 15) | const SLIDER_MARGIN_PALM = 6;
constant TIMELINE_PLAYBACK_STYLE (line 68) | const TIMELINE_PLAYBACK_STYLE = {flex: 1};
type AnimationControlProps (line 70) | type AnimationControlProps = {
function AnimationControlFactory (line 93) | function AnimationControlFactory(
FILE: src/components/src/common/animation-control/animation-controller.ts
type AnimationControllerProps (line 11) | interface AnimationControllerProps<T extends number | number[]> {
class AnimationControllerType (line 32) | class AnimationControllerType<T extends number | number[]> extends Compo...
function AnimationControllerFactory (line 36) | function AnimationControllerFactory(): typeof AnimationControllerType {
FILE: src/components/src/common/animation-control/animation-speed-slider.tsx
type AnimationSpeedSliderProps (line 33) | interface AnimationSpeedSliderProps {
function AnimationSpeedSliderFactory (line 39) | function AnimationSpeedSliderFactory(
FILE: src/components/src/common/animation-control/animation-window-control.tsx
type AnimationItem (line 10) | interface AnimationItem {
type AnimationWindowControlProps (line 15) | interface AnimationWindowControlProps {
function AnimationWindowControlFactory (line 25) | function AnimationWindowControlFactory(): React.FC<AnimationWindowContro...
FILE: src/components/src/common/animation-control/floating-time-display.tsx
type TimeDisplayRowProps (line 93) | interface TimeDisplayRowProps {
type FloatingTimeDisplayProps (line 105) | interface FloatingTimeDisplayProps {
function FloatingTimeDisplayFactory (line 112) | function FloatingTimeDisplayFactory() {
FILE: src/components/src/common/animation-control/play-control.tsx
function PlayControlFactory (line 10) | function PlayControlFactory() {
FILE: src/components/src/common/animation-control/playback-controls.tsx
constant DEFAULT_BUTTON_HEIGHT (line 18) | const DEFAULT_BUTTON_HEIGHT = '20px';
type StyledAnimationControlsProps (line 20) | type StyledAnimationControlsProps = BaseComponentProps & {
constant DEFAULT_ICONS (line 37) | const DEFAULT_ICONS = {
function nop (line 49) | function nop() {
constant DEFAULT_ANIMATE_ITEMS (line 53) | const DEFAULT_ANIMATE_ITEMS = {
type PlaybackControlsProps (line 65) | interface PlaybackControlsProps {
function PlaybackControlsFactory (line 94) | function PlaybackControlsFactory(
FILE: src/components/src/common/animation-control/reset-control.tsx
function ResetControlFactory (line 9) | function ResetControlFactory() {
FILE: src/components/src/common/animation-control/speed-control.tsx
constant PRECISE_SPEED_ROUND (line 23) | const PRECISE_SPEED_ROUND = 1;
function SpeedControlFactory (line 25) | function SpeedControlFactory(AnimationSpeedSlider) {
FILE: src/components/src/common/animation-control/window-action-control.tsx
constant DELAY_SHOW (line 10) | const DELAY_SHOW = 500;
function WindowActionControlFactory (line 11) | function WindowActionControlFactory() {
FILE: src/components/src/common/checkbox.tsx
function noop (line 10) | function noop() {
type StyledSwitchInputProps (line 14) | interface StyledSwitchInputProps {
type StyledCheckboxProps (line 35) | interface StyledCheckboxProps {
type CheckboxProps (line 54) | interface CheckboxProps {
class Checkbox (line 73) | class Checkbox extends Component<CheckboxProps> {
method render (line 97) | render() {
FILE: src/components/src/common/color-legend.tsx
constant ROW_H (line 21) | const ROW_H = 15;
constant GAP (line 22) | const GAP = 2;
constant RECT_W (line 23) | const RECT_W = 20;
function ResetColorLabelFactory (line 52) | function ResetColorLabelFactory() {
type LegendRowEditorProps (line 83) | type LegendRowEditorProps = {
function LegendRowEditorFactory (line 90) | function LegendRowEditorFactory() {
function LegendColorDisplayFactory (line 120) | function LegendColorDisplayFactory() {
type LegendRowProps (line 143) | type LegendRowProps = {
function LegendRowFactory (line 154) | function LegendRowFactory(
type OverrideByCustomLegendOptions (line 214) | type OverrideByCustomLegendOptions = {
function overrideByCustomLegend (line 230) | function overrideByCustomLegend({colorLegends, currentLegends}: Override...
function useLayerColorLegends (line 242) | function useLayerColorLegends(
type ColorLegendProps (line 291) | type ColorLegendProps = {
type Legend (line 306) | type Legend = {
function ColorLegendFactory (line 313) | function ColorLegendFactory(LegendRow: ReturnType<typeof LegendRowFactor...
FILE: src/components/src/common/column-stats-chart.tsx
constant HISTOGRAM_WIDTH (line 23) | const HISTOGRAM_WIDTH = 210;
constant HISTOGRAM_HEIGHT (line 24) | const HISTOGRAM_HEIGHT = 80;
constant HISTOGRAM_MARGIN (line 25) | const HISTOGRAM_MARGIN = {top: 10, bottom: 8, left: 10, right: 20};
constant COLOR_CHART_TICK_WRAPPER_HEIGHT (line 26) | const COLOR_CHART_TICK_WRAPPER_HEIGHT = 10;
constant COLOR_CHART_TICK_HEIGHT (line 27) | const COLOR_CHART_TICK_HEIGHT = 8;
constant COLOR_CHART_TICK_WIDTH (line 28) | const COLOR_CHART_TICK_WIDTH = 4;
constant COLOR_CHART_TICK_BORDER_COLOR (line 29) | const COLOR_CHART_TICK_BORDER_COLOR = '#999999';
type ColorChartTickProps (line 104) | type ColorChartTickProps = {
type ColumnStatsChartWLoadingProps (line 204) | type ColumnStatsChartWLoadingProps = {
type ColumnStatsChartProps (line 215) | type ColumnStatsChartProps = {
function ColumnStatsChartFactory (line 223) | function ColumnStatsChartFactory(
FILE: src/components/src/common/data-table/button.tsx
type ButtonProps (line 24) | type ButtonProps = {
FILE: src/components/src/common/data-table/cell-size.ts
constant MIN_GHOST_CELL_SIZE (line 7) | const MIN_GHOST_CELL_SIZE = 200;
constant MIN_CELL_SIZE (line 8) | const MIN_CELL_SIZE = 45;
constant EDGE_COLUMN_PADDING (line 10) | const EDGE_COLUMN_PADDING = 10;
constant MAX_EMPTY_COLUMN_SPACE (line 14) | const MAX_EMPTY_COLUMN_SPACE = 60;
type RenderSizeParam (line 16) | type RenderSizeParam = {
type CellSizeCache (line 30) | type CellSizeCache = {
function renderedSize (line 41) | function renderedSize({
function clamp (line 106) | function clamp(min, max, value) {
function getColumnOrder (line 110) | function getColumnOrder(pinnedColumns: string[] = [], unpinnedColumns: s...
function getMinCellSize (line 115) | function getMinCellSize(cellSizeCache: CellSizeCache) {
function getSizeSum (line 130) | function getSizeSum(sizeCache, key) {
function expandCellSize (line 145) | function expandCellSize(
function addPaddingToFirstColumn (line 189) | function addPaddingToFirstColumn(
function adjustCellsToContainer (line 214) | function adjustCellsToContainer(
FILE: src/components/src/common/data-table/display-format.tsx
type DataTableConfigProps (line 38) | type DataTableConfigProps = {
function DataTableConfigFactory (line 97) | function DataTableConfigFactory() {
FILE: src/components/src/common/data-table/grid.tsx
class GridHack (line 8) | class GridHack extends PureComponent<GridProps> {
method componentDidUpdate (line 11) | componentDidUpdate(preProps) {
method componentWillUnmount (line 27) | componentWillUnmount() {
method render (line 60) | render() {
FILE: src/components/src/common/data-table/header-cell.tsx
type CellInfo (line 74) | type CellInfo = {
type HeaderCellProps (line 84) | type HeaderCellProps = {
FILE: src/components/src/common/data-table/index.tsx
type ContainerProps (line 46) | type ContainerProps = {
type SortColumn (line 183) | type SortColumn = {
type GetRowCellProps (line 196) | interface GetRowCellProps {
type StatsControlProps (line 223) | type StatsControlProps = {
type TableSectionProps (line 274) | interface TableSectionProps {
type DataTableProps (line 378) | interface DataTableProps {
type DataTableState (line 400) | interface DataTableState {
constant DUMMY_STYLE (line 407) | const DUMMY_STYLE = {};
function DataTableFactory (line 410) | function DataTableFactory(
FILE: src/components/src/common/data-table/option-dropdown.tsx
type FormatterDropdownProps (line 68) | type FormatterDropdownProps = {
type OptionDropdownProps (line 115) | interface OptionDropdownProps {
FILE: src/components/src/common/dataset-label.tsx
type DatasetLabelType (line 18) | interface DatasetLabelType {
FILE: src/components/src/common/dnd-layer-items.ts
constant DND_MODIFIERS (line 7) | const DND_MODIFIERS: Modifiers = [restrictToVerticalAxis];
constant DND_EMPTY_MODIFIERS (line 8) | const DND_EMPTY_MODIFIERS: Modifiers = [];
constant SORTABLE_SIDE_PANEL_TYPE (line 9) | const SORTABLE_SIDE_PANEL_TYPE = 'root';
constant DROPPABLE_MAP_CONTAINER_TYPE (line 10) | const DROPPABLE_MAP_CONTAINER_TYPE = 'map';
constant SORTABLE_LAYER_TYPE (line 11) | const SORTABLE_LAYER_TYPE = 'layer';
constant SORTABLE_EFFECT_PANEL_TYPE (line 13) | const SORTABLE_EFFECT_PANEL_TYPE = 'root';
constant SORTABLE_EFFECT_TYPE (line 14) | const SORTABLE_EFFECT_TYPE = 'effect';
FILE: src/components/src/common/error-boundary.tsx
type ErrorBoundaryProps (line 7) | interface ErrorBoundaryProps {
class ErrorBoundary (line 10) | class ErrorBoundary extends React.Component<ErrorBoundaryProps> {
method getDerivedStateFromError (line 11) | static getDerivedStateFromError(error) {
method componentDidCatch (line 16) | componentDidCatch(error: Error, errorInfo: ErrorInfo) {
method render (line 21) | render() {
FILE: src/components/src/common/field-selector.tsx
type FieldListItemFactoryProps (line 35) | type FieldListItemFactoryProps = {
function FieldListItemFactoryFactory (line 42) | function FieldListItemFactoryFactory(FieldToken) {
type MinimalField (line 64) | type MinimalField = {name: string; displayName: string; format: string; ...
type FieldType (line 65) | type FieldType = string | TooltipField | Field;
type FieldValue (line 66) | type FieldValue = string | {name: string} | string[] | {name: string}[];
type FieldSelectorProps (line 68) | type FieldSelectorProps<Option extends MinimalField> = {
function noop (line 98) | function noop() {
function FieldSelectorFactory (line 101) | function FieldSelectorFactory(
FILE: src/components/src/common/field-token.tsx
type FieldTokenProps (line 8) | type FieldTokenProps = {
function FieldTokenFactory (line 25) | function FieldTokenFactory(
function getFieldTypes (line 37) | function getFieldTypes() {
function getFieldColors (line 41) | function getFieldColors() {
FILE: src/components/src/common/file-uploader/file-drop.tsx
type FileDropProps (line 33) | type FileDropProps = {
FILE: src/components/src/common/file-uploader/file-upload-progress.tsx
type UploadProgressProps (line 52) | interface UploadProgressProps {
type FileUploadProgressProps (line 90) | type FileUploadProgressProps = {
FILE: src/components/src/common/file-uploader/file-upload.tsx
type StyledFileDropProps (line 40) | interface StyledFileDropProps {
type FileUploadProps (line 133) | type FileUploadProps = {
function FileUploadFactory (line 146) | function FileUploadFactory() {
FILE: src/components/src/common/file-uploader/upload-button.tsx
type UploadButtonProps (line 20) | interface UploadButtonProps {
FILE: src/components/src/common/histogram-plot.tsx
constant HISTOGRAM_MASK_MODE (line 13) | const HISTOGRAM_MASK_MODE = {
constant HISTOGRAM_MASK_BGCOLOR (line 18) | const HISTOGRAM_MASK_BGCOLOR = '#FFFFFF';
constant HISTOGRAM_MASK_FGCOLOR (line 19) | const HISTOGRAM_MASK_FGCOLOR = '#000000';
type BarType (line 40) | type BarType = {
type HistogramMaskModeType (line 79) | type HistogramMaskModeType = {
type HistogramPlotProps (line 85) | interface HistogramPlotProps {
function HistogramPlotFactory (line 100) | function HistogramPlotFactory() {
FILE: src/components/src/common/icon-button.tsx
type IconButtonProps (line 8) | interface IconButtonProps extends ButtonProps {
FILE: src/components/src/common/icons/add.tsx
class Add (line 7) | class Add extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/arrow-down-alt.tsx
class ArrowDownAlt (line 7) | class ArrowDownAlt extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/arrow-down-full.tsx
class ArrowDown (line 8) | class ArrowDown extends Component {
method render (line 22) | render() {
FILE: src/components/src/common/icons/arrow-down-small.tsx
class ArrowDownSmall (line 8) | class ArrowDownSmall extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/arrow-down-solid.tsx
class ArrowDownSolid (line 7) | class ArrowDownSolid extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/arrow-down.tsx
class ArrowDown (line 7) | class ArrowDown extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/arrow-left.tsx
class ArrowLeft (line 7) | class ArrowLeft extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/arrow-right.tsx
class ArrowRight (line 7) | class ArrowRight extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/arrow-up-alt.tsx
class ArrowUpAlt (line 7) | class ArrowUpAlt extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/arrow-up-solid.tsx
class ArrowUpSolid (line 7) | class ArrowUpSolid extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/arrow-up.tsx
class ArrowUp (line 7) | class ArrowUp extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/base-map.tsx
class BaseMap (line 7) | class BaseMap extends Component<Partial<BaseProps>> {
method render (line 15) | render() {
FILE: src/components/src/common/icons/base.tsx
type BaseProps (line 15) | type BaseProps = {
class Base (line 32) | class Base extends Component<BaseProps> {
method render (line 46) | render() {
FILE: src/components/src/common/icons/bug.tsx
class Bug (line 7) | class Bug extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/calendar.tsx
class Calendar (line 7) | class Calendar extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/cancel.tsx
class Cancel (line 7) | class Cancel extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/checkmark.tsx
class Checkmark (line 7) | class Checkmark extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/clipboard.tsx
class Clipboard (line 7) | class Clipboard extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/clock.tsx
class Clock (line 7) | class Clock extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/close.tsx
class Close (line 7) | class Close extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/cloud.tsx
class Layers (line 7) | class Layers extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/code-alt.tsx
class CodeAlt (line 7) | class CodeAlt extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/copy.tsx
class Copy (line 7) | class Copy extends Component<Partial<BaseProps>> {
method render (line 18) | render() {
FILE: src/components/src/common/icons/crosshairs.tsx
class Crosshairs (line 7) | class Crosshairs extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/cube-3d.tsx
class Cube3D (line 7) | class Cube3D extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/cursor-click.tsx
class CursorClick (line 7) | class CursorClick extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/cursor-point.tsx
class CursorPoint (line 8) | class CursorPoint extends Component<Partial<BaseProps>> {
method render (line 19) | render() {
FILE: src/components/src/common/icons/data-table.tsx
class DataTable (line 7) | class DataTable extends Component<Partial<BaseProps>> {
method render (line 15) | render() {
FILE: src/components/src/common/icons/db.tsx
class Db (line 7) | class Db extends Component<Partial<BaseProps>> {
method render (line 15) | render() {
FILE: src/components/src/common/icons/delete.tsx
class Delete (line 7) | class Delete extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/docs.tsx
class Docs (line 7) | class Docs extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/docs2.tsx
class Docs2 (line 7) | class Docs2 extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/drag-n-drop.tsx
class DragNDrop (line 7) | class DragNDrop extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/draggable-dots.tsx
class DraggableDots (line 8) | class DraggableDots extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/draw-polygon.tsx
class DrawPolygon (line 7) | class DrawPolygon extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/edit.tsx
class Edit (line 8) | class Edit extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/effects/brightness-contrast.tsx
class BrightnessContrast (line 8) | class BrightnessContrast extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/effects/color-halftone.tsx
class ColorHalftone (line 8) | class ColorHalftone extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/effects/dot-screen.tsx
class DotScreen (line 8) | class DotScreen extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/effects/edge-work.tsx
class EdgeWork (line 8) | class EdgeWork extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/effects/hexagonal-pixelate.tsx
class HexagonalPixelate (line 8) | class HexagonalPixelate extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/effects/hue-saturation.tsx
class HueSaturation (line 8) | class HueSaturation extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/effects/ink.tsx
class Ink (line 8) | class Ink extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/effects/light-and-shadow.tsx
class LightAndShadow (line 8) | class LightAndShadow extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/effects/magic-wand.tsx
class MagicWand (line 8) | class MagicWand extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/effects/magnify.tsx
class Magnify (line 8) | class Magnify extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/effects/noise.tsx
class Noise (line 8) | class Noise extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/effects/sepia.tsx
class Sepia (line 8) | class Sepia extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/effects/tilt-shift.tsx
class TiltShift (line 8) | class TiltShift extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/effects/triangle-blur.tsx
class TriangleBlur (line 8) | class TriangleBlur extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/effects/vibrance.tsx
class Vibrance (line 8) | class Vibrance extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/effects/vignette.tsx
class Vignette (line 8) | class Vignette extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/effects/zoom-blur.tsx
class ZoomBlur (line 8) | class ZoomBlur extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/email.tsx
class Email (line 7) | class Email extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/expand.tsx
class Expand (line 7) | class Expand extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/eye-seen.tsx
class EyeSeen (line 7) | class EyeSeen extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/eye-unseen.tsx
class EyeUnseen (line 7) | class EyeUnseen extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/file-type.tsx
type FileNameTagProps (line 9) | interface FileNameTagProps {
type FileTypeIconWrapperProps (line 28) | interface FileTypeIconWrapperProps {
type FileTypeIconProps (line 39) | interface FileTypeIconProps {
FILE: src/components/src/common/icons/file.tsx
class File (line 7) | class File extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/files.tsx
class Files (line 7) | class Files extends React.Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/filter-funnel.tsx
class FilterFunnel (line 7) | class FilterFunnel extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/gear.tsx
class Gear (line 7) | class Gear extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/globe.tsx
class Globe (line 8) | class Globe extends Component<Partial<BaseProps>> {
method render (line 20) | render() {
FILE: src/components/src/common/icons/hash.tsx
class Hash (line 7) | class Hash extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/help.tsx
class Help (line 8) | class Help extends Component {
method render (line 19) | render() {
FILE: src/components/src/common/icons/histogram.tsx
class Histogram (line 7) | class Histogram extends React.Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/horizontal-resize-handle.tsx
class HorizontalResizeHandle (line 8) | class HorizontalResizeHandle extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/info.tsx
class Info (line 7) | class Info extends Component<Partial<BaseProps> & {stroke?: string}> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/layers.tsx
class Layers (line 7) | class Layers extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/left-arrow.tsx
class LeftArrow (line 7) | class LeftArrow extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/legend.tsx
class Legend (line 7) | class Legend extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/line-chart.tsx
class LineChart (line 7) | class LineChart extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/location-marker.tsx
class LocationMarker (line 8) | class LocationMarker extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/login.tsx
class Login (line 7) | class Login extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/logout.tsx
class Logout (line 7) | class Logout extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/map-icon.tsx
class MapIcon (line 7) | class MapIcon extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/map-pin.tsx
class MapPin (line 7) | class MapPin extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/messages.tsx
class Messages (line 7) | class Messages extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/minus.tsx
class Minus (line 7) | class Minus extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/moon.tsx
class Moon (line 8) | class Moon extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/pause.tsx
class Pause (line 7) | class Pause extends Component<Partial<BaseProps>> {
method render (line 15) | render() {
FILE: src/components/src/common/icons/picture.tsx
class Picture (line 7) | class Picture extends React.Component<Partial<BaseProps>> {
method render (line 15) | render() {
FILE: src/components/src/common/icons/pin.tsx
class Pin (line 7) | class Pin extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/play.tsx
class Play (line 7) | class Play extends Component<Partial<BaseProps>> {
method render (line 15) | render() {
FILE: src/components/src/common/icons/pointer-click.tsx
class PointerClick (line 7) | class PointerClick extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/polygon.tsx
class DrawPolygon (line 7) | class DrawPolygon extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/rectangle.tsx
class Rectangle (line 7) | class Rectangle extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/reduce.tsx
class Reduce (line 7) | class Reduce extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/reset.tsx
class Reset (line 7) | class Reset extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/save.tsx
class Save (line 7) | class Save extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/save2.tsx
class Save2 (line 7) | class Save2 extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/search.tsx
class Search (line 7) | class Search extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/settings.tsx
class Settings (line 7) | class Settings extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/share.tsx
class Share (line 7) | class Share extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/speed.tsx
class Speed (line 7) | class Speed extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/split.tsx
class Split (line 7) | class Split extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/square-select.tsx
class SquareSelect (line 7) | class SquareSelect extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/sun.tsx
class Sun (line 8) | class Sun extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/sunrise.tsx
class Sunrise (line 8) | class Sunrise extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/sunset.tsx
class Sunset (line 8) | class Sunset extends Component {
method render (line 20) | render() {
FILE: src/components/src/common/icons/timeline-marker.tsx
class TimelineMarker (line 8) | class TimelineMarker extends Component {
method render (line 24) | render() {
FILE: src/components/src/common/icons/trash.tsx
class Trash (line 7) | class Trash extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/vert-dots.tsx
class VertDots (line 7) | class VertDots extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/vert-three-dots.tsx
class VertThreeDots (line 7) | class VertThreeDots extends Component<Partial<BaseProps>> {
method render (line 13) | render() {
FILE: src/components/src/common/icons/warning-sign.tsx
class WarningSign (line 8) | class WarningSign extends Component<Partial<BaseProps>> {
method render (line 20) | render() {
FILE: src/components/src/common/icons/warning.tsx
class Warning (line 7) | class Warning extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/zoom-in.tsx
class ZoomIn (line 7) | class ZoomIn extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/icons/zoom-out.tsx
class ZoomOut (line 7) | class ZoomOut extends Component<Partial<BaseProps>> {
method render (line 14) | render() {
FILE: src/components/src/common/image-preview.tsx
type ImagePreviewProps (line 74) | interface ImagePreviewProps {
FILE: src/components/src/common/info-helper.tsx
type StyledInfoHelperProps (line 12) | interface StyledInfoHelperProps {
type InfoHelperProps (line 31) | interface InfoHelperProps {
function InfoHelperFactory (line 39) | function InfoHelperFactory() {
FILE: src/components/src/common/item-selector/chickleted-input.tsx
type ChickletButtonProps (line 18) | type ChickletButtonProps = BaseComponentProps & {
constant DND_MODIFIERS (line 46) | const DND_MODIFIERS = [restrictToParentElement];
type ChickletProps (line 58) | interface ChickletProps {
type ChickletedInputContainerProps (line 72) | type ChickletedInputContainerProps = BaseComponentProps & {
type Item (line 144) | type Item = string | number | boolean | object | undefined;
type ChickletedInputProps (line 146) | type ChickletedInputProps = ChickletedInputContainerProps & {
FILE: src/components/src/common/item-selector/dropdown-list.tsx
constant LEFT_BUTTON (line 10) | const LEFT_BUTTON = 0;
type ListItemProps (line 21) | type ListItemProps<Option> = {
type DropdownListWrapperProps (line 38) | type DropdownListWrapperProps = BaseComponentProps & {
type Option (line 58) | type Option = string | number | boolean | object | any;
type DropdownListProps (line 60) | interface DropdownListProps {
type DropdownListState (line 79) | interface DropdownListState {
class DropdownList (line 83) | class DropdownList extends Component<DropdownListProps, DropdownListStat...
method constructor (line 104) | constructor(props) {
method componentDidMount (line 114) | componentDidMount() {
method getSnapshotBeforeUpdate (line 130) | getSnapshotBeforeUpdate(prevProps: DropdownListProps) {
method componentDidUpdate (line 140) | componentDidUpdate() {
method componentWillUnmount (line 144) | componentWillUnmount() {
method _getOptions (line 161) | _getOptions(page) {
method _onClick (line 186) | _onClick(result, event) {
method render (line 194) | render() {
FILE: src/components/src/common/item-selector/dropdown-select.tsx
type ListItemProps (line 14) | type ListItemProps<Option> = {
type DropdownSelectProps (line 21) | type DropdownSelectProps<Option> = {
function DropdownSelect (line 100) | function DropdownSelect<Option>({
FILE: src/components/src/common/item-selector/item-selector.tsx
type DropdownWrapperProps (line 21) | type DropdownWrapperProps = {
type ItemSelectorProps (line 36) | type ItemSelectorProps<Option> = {
class ItemSelectorUnmemoized (line 70) | class ItemSelectorUnmemoized extends Component<ItemSelectorProps<any>> {
method componentDidMount (line 90) | componentDidMount() {
method componentWillUnmount (line 100) | componentWillUnmount() {
method _renderDropdown (line 190) | _renderDropdown(intl: IntlShape) {
method render (line 231) | render() {
FILE: src/components/src/common/item-selector/typeahead.tsx
constant DEFAULT_CLASS (line 17) | const DEFAULT_CLASS = 'typeahead';
type TypeaheadWrapperProps (line 25) | type TypeaheadWrapperProps = BaseComponentProps & {
type TypeaheadInputProps (line 50) | type TypeaheadInputProps = BaseComponentProps & {
function generateSearchFunction (line 79) | function generateSearchFunction(props: TypeaheadProps) {
function searchOptionsOnInput (line 101) | function searchOptionsOnInput(inputValue, props) {
function getOptionsForValue (line 106) | function getOptionsForValue(value, props, state) {
function shouldSkipSearch (line 121) | function shouldSkipSearch(input, state, showOptionsWhenEmpty) {
type Option (line 130) | type Option = string | number | boolean | object | undefined;
type TypeaheadProps (line 131) | interface TypeaheadProps {
type TypeaheadState (line 171) | interface TypeaheadState {
function noop (line 188) | function noop() {
class Typeahead (line 191) | class Typeahead extends Component<TypeaheadProps, TypeaheadState> {
method getDerivedStateFromProps (line 228) | static getDerivedStateFromProps(props, state) {
method constructor (line 242) | constructor(props) {
method componentDidMount (line 264) | componentDidMount() {
method _renderIncrementalSearchResults (line 296) | _renderIncrementalSearchResults() {
method getSelection (line 319) | getSelection() {
method _renderHiddenInput (line 485) | _renderHiddenInput() {
method _hasHint (line 493) | _hasHint() {
method _hasFixedOptions (line 497) | _hasFixedOptions() {
method render (line 501) | render() {
FILE: src/components/src/common/line-chart.tsx
type HintContentProps (line 52) | interface HintContentProps {
type HoverDP (line 65) | interface HoverDP {
type LineChartProps (line 75) | interface LineChartProps {
constant MARGIN (line 91) | const MARGIN = {top: 0, bottom: 0, left: 0, right: 0};
function LineChartFactory (line 92) | function LineChartFactory() {
FILE: src/components/src/common/link-renderer.tsx
type LinkRendererProps (line 6) | interface LinkRendererProps {
FILE: src/components/src/common/loading-spinner.tsx
type LoadingWrapperProps (line 30) | type LoadingWrapperProps = BaseComponentProps & {
type LoadingSpinnerProps (line 43) | type LoadingSpinnerProps = {
FILE: src/components/src/common/logo.tsx
type KeplerGlLogoProps (line 45) | interface KeplerGlLogoProps {
FILE: src/components/src/common/map-layer-selector.tsx
type Layer (line 16) | interface Layer {
type MapLayerSelectorProps (line 22) | interface MapLayerSelectorProps {
FILE: src/components/src/common/modal.tsx
type CssStyleType (line 13) | type CssStyleType = ReturnType<typeof css>;
type ModalContentWrapperProps (line 15) | interface ModalContentWrapperProps {
type ModalTitleProps (line 53) | type ModalTitleProps = PropsWithChildren<{
type ModalButtonProps (line 116) | type ModalButtonProps = {
type ModalFooterProps (line 124) | type ModalFooterProps = {
type ModalDialogOwnProps (line 171) | interface ModalDialogOwnProps {
type ModalDialogProps (line 189) | type ModalDialogProps = ModalDialogOwnProps &
class ModalDialog (line 192) | class ModalDialog extends Component<ModalDialogProps> {
method render (line 207) | render() {
FILE: src/components/src/common/portaled.tsx
type GetChildPosProps (line 36) | interface GetChildPosProps {
function subscribe (line 88) | function subscribe(fn) {
constant WINDOW_PAD (line 113) | const WINDOW_PAD = 40;
type PortaledProps (line 119) | type PortaledProps = PropsWithChildren<{
type PortaledState (line 137) | interface PortaledState {
class Portaled (line 153) | class Portaled extends Component<PortaledProps, PortaledState> {
method getDerivedStateFromError (line 157) | static getDerivedStateFromError(): {hasError: boolean} {
method componentDidMount (line 175) | componentDidMount() {
method componentDidUpdate (line 182) | componentDidUpdate(prevProps: PortaledProps) {
method componentDidCatch (line 199) | componentDidCatch() {
method componentWillUnmount (line 205) | componentWillUnmount() {
method render (line 236) | render(): JSX.Element {
FILE: src/components/src/common/progress-bar.tsx
type StyledBarProps (line 9) | interface StyledBarProps {
type StyledTrackProps (line 21) | interface StyledTrackProps {
type ProgressBarProps (line 31) | type ProgressBarProps = {
FILE: src/components/src/common/radius-legend.tsx
type Props (line 53) | type Props = {
FILE: src/components/src/common/range-brush.tsx
type StyledGProps (line 10) | interface StyledGProps {
function moveRight (line 26) | function moveRight(startSel, selection) {
type OnBrush (line 47) | type OnBrush = (val0: number, val1: number) => void;
type RangeBrushProps (line 49) | interface RangeBrushProps {
function RangeBrushFactory (line 65) | function RangeBrushFactory(): React.ComponentType<RangeBrushProps> {
FILE: src/components/src/common/range-plot.tsx
type RangePlotProps (line 22) | interface RangePlotProps {
type WithPlotLoadingProps (line 49) | type WithPlotLoadingProps = RangePlotProps &
constant LOADING_SPINNER_CONTAINER_STYLE (line 61) | const LOADING_SPINNER_CONTAINER_STYLE = {
function RangePlotFactory (line 68) | function RangePlotFactory(
FILE: src/components/src/common/range-slider-timeline-panel.tsx
function RangeSliderSubAnimationPanelFactory (line 7) | function RangeSliderSubAnimationPanelFactory(RangeSliderTimeline) {
FILE: src/components/src/common/range-slider-timeline.tsx
constant BACKGROUND_LINE_STYLE (line 9) | const BACKGROUND_LINE_STYLE: CSSProperties = {
constant TIMELINE_MARKER_STYLE (line 17) | const TIMELINE_MARKER_STYLE: CSSProperties = {
constant TIMELINE_INDICATOR_STYLE (line 35) | const TIMELINE_INDICATOR_STYLE: CSSProperties = {
function RangeSliderTimelineFactory (line 42) | function RangeSliderTimelineFactory() {
FILE: src/components/src/common/range-slider.tsx
type SliderInputProps (line 23) | interface SliderInputProps {
type SliderWrapperProps (line 37) | interface SliderWrapperProps {
type RangeSliderProps (line 54) | interface RangeSliderProps {
constant RANGE_SLIDER_TIMELINE_PANEL_STYLE (line 89) | const RANGE_SLIDER_TIMELINE_PANEL_STYLE = {marginLeft: '-32px'};
function RangeSliderFactory (line 93) | function RangeSliderFactory(
FILE: src/components/src/common/slider/mouse-event.ts
function nope (line 14) | function nope() {
type MouseEventHandlerProps (line 18) | type MouseEventHandlerProps = {
class MouseEventHandler (line 26) | class MouseEventHandler {
method constructor (line 33) | constructor({
method getMousePos (line 57) | private getMousePos(e: MouseEvent) {
method getTouchPosition (line 61) | private getTouchPosition(e: TouchEvent) {
method getDistanceToTrack (line 71) | private getDistanceToTrack(pos: number) {
FILE: src/components/src/common/slider/slider-bar-handle.tsx
type StyledSliderProps (line 11) | type StyledSliderProps = BaseComponentProps & {
function nope (line 27) | function nope() {
type SliderBarHandleProps (line 31) | type SliderBarHandleProps = {
class SliderBarHandle (line 41) | class SliderBarHandle extends Component {
method constructor (line 50) | constructor(public props: SliderBarHandleProps) {
method render (line 67) | render() {
FILE: src/components/src/common/slider/slider-handle.tsx
type StyledSliderHandleProps (line 11) | type StyledSliderHandleProps = StyledSliderTooltipProps & {
type StyledSliderTooltipProps (line 59) | type StyledSliderTooltipProps = BaseComponentProps & {
type SliderTooltipProps (line 109) | type SliderTooltipProps = {
type SliderHandleProps (line 129) | type SliderHandleProps = {
class SliderHandle (line 140) | class SliderHandle extends Component {
method constructor (line 154) | constructor(public props: SliderHandleProps) {
method render (line 172) | render() {
FILE: src/components/src/common/slider/slider.tsx
function noop (line 12) | function noop() {
type StyledRangeSliderProps (line 16) | interface StyledRangeSliderProps {
type StyleRangeSliderType (line 27) | type StyleRangeSliderType = typeof StyledRangeSlider & HTMLDivElement;
type SliderWrapperProps (line 29) | interface SliderWrapperProps {
type SliderProps (line 38) | type SliderProps = {
class Slider (line 60) | class Slider extends Component<SliderProps> {
method constructor (line 86) | constructor(public props: SliderProps) {
method getBaseDistance (line 95) | private getBaseDistance() {
method getDeltaVal (line 102) | private getDeltaVal(x: number) {
method getDeltaX (line 107) | private getDeltaX(v: number) {
method getValue (line 113) | private getValue(baseV: number, offset: number) {
method normalizeValue (line 120) | private normalizeValue(val: number) {
method render (line 163) | render() {
FILE: src/components/src/common/styled-components.tsx
function shouldForwardProp (line 16) | function shouldForwardProp(propName, target) {
type SidePanelSectionProps (line 142) | interface SidePanelSectionProps {
type TooltipAttrsProps (line 164) | type TooltipAttrsProps = {interactive?: boolean} & TooltipProps & BaseCo...
type ButtonProps (line 205) | type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {
type InputProps (line 318) | interface InputProps {
type StyledPanelHeaderProps (line 342) | interface StyledPanelHeaderProps {
type StyledPanelDropdownProps (line 365) | interface StyledPanelDropdownProps {
type DatasetSquareProps (line 398) | interface DatasetSquareProps {
type SelectionButtonProps (line 410) | interface SelectionButtonProps {
type StyledModalInputFootnoteProps (line 519) | interface StyledModalInputFootnoteProps {
type StyledAttributionProps (line 557) | type StyledAttributionProps = {
type StyledExportSectionProps (line 620) | interface StyledExportSectionProps {
type MapControlButtonProps (line 736) | interface MapControlButtonProps {
FILE: src/components/src/common/switch.tsx
type SwitchProps (line 7) | interface SwitchProps {
FILE: src/components/src/common/sync-timeline-control.tsx
type SyncTimelineAnimationItem (line 10) | type SyncTimelineAnimationItem = {
type SyncTimelineControlProps (line 16) | type SyncTimelineControlProps = {
constant SYNC_TIMELINE_ANIMATION_ITEMS (line 23) | const SYNC_TIMELINE_ANIMATION_ITEMS: Record<
function SyncTimelineControlFactory (line 43) | function SyncTimelineControlFactory() {
FILE: src/components/src/common/time-range-slider-time-title.tsx
type TimeValueWrapperProps (line 10) | type TimeValueWrapperProps = BaseComponentProps & {
type TimeTitleProps (line 51) | interface TimeTitleProps {
function TimeRangeSliderTimeTitleFactory (line 58) | function TimeRangeSliderTimeTitleFactory() {
FILE: src/components/src/common/time-range-slider.tsx
type TimeRangeSliderProps (line 19) | type TimeRangeSliderProps = {
type StyledSliderContainerProps (line 48) | type StyledSliderContainerProps = BaseComponentProps & {
constant ANIMATION_CONTROL_STYLE (line 71) | const ANIMATION_CONTROL_STYLE = {flex: 1};
function getTimeBinsForInterval (line 81) | function getTimeBinsForInterval(timeBins: TimeBins | undefined, interval...
function TimeRangeSliderFactory (line 89) | function TimeRangeSliderFactory(
FILE: src/components/src/common/time-slider-marker.tsx
constant MIN_TICK_WIDTH_LARGE (line 12) | const MIN_TICK_WIDTH_LARGE = 80;
constant MIN_TICK_WIDTH_SMALL (line 13) | const MIN_TICK_WIDTH_SMALL = 50;
constant HEIGHT (line 14) | const HEIGHT = 30;
constant TICK_FORMATS (line 59) | const TICK_FORMATS = {
function getTickFormat (line 72) | function getTickFormat(timezone: string) {
function getXAxis (line 96) | function getXAxis(
function updateAxis (line 120) | function updateAxis(xAxisRef, xAxis) {
type TimeSliderMarkerProps (line 128) | interface TimeSliderMarkerProps {
function TimeSliderMarkerFactory (line 136) | function TimeSliderMarkerFactory() {
FILE: src/components/src/common/timeline-slider.tsx
function noop (line 15) | function noop() {
constant SLIDER_MARGIN_PALM (line 19) | const SLIDER_MARGIN_PALM = 6;
type AnimationControlSliderProps (line 21) | type AnimationControlSliderProps = BaseComponentProps;
constant PROGRESS_BAR_HEIGHT (line 53) | const PROGRESS_BAR_HEIGHT = 8;
type TimelineSliderProps (line 55) | interface TimelineSliderProps {
function TimelineSliderFactory (line 65) | function TimelineSliderFactory() {
FILE: src/components/src/common/tippy-tooltip.tsx
function onMount (line 96) | function onMount() {
function onHide (line 104) | function onHide(instance) {
FILE: src/components/src/common/toolbar-item.tsx
type StyledDivProps (line 10) | interface StyledDivProps {
type ToolbarItemProps (line 48) | type ToolbarItemProps = {
FILE: src/components/src/common/toolbar.tsx
type ToolbarProps (line 7) | type ToolbarProps = {
FILE: src/components/src/connect/with-local-selector.tsx
class WithConnectSelector (line 23) | class WithConnectSelector extends Component<P & {selector: (...args: any...
method render (line 40) | render() {
FILE: src/components/src/container.tsx
constant ERROR_MSG (line 14) | const ERROR_MSG = {
type ContainerProps (line 25) | type ContainerProps = {
type PropsFromRedux (line 36) | type PropsFromRedux = ConnectedProps<typeof connector> & ContainerProps;
function ContainerFactory (line 40) | function ContainerFactory(
function injectComponents (line 174) | function injectComponents(recipes = []) {
FILE: src/components/src/context.tsx
type FeatureFlags (line 17) | type FeatureFlags = {[key: string]: string | boolean};
type FeatureFlagsContextProviderProps (line 19) | type FeatureFlagsContextProviderProps = {
type CloudProviderContextType (line 24) | type CloudProviderContextType = {
FILE: src/components/src/dnd-context.tsx
type DndContextProps (line 22) | type DndContextProps = PropsWithChildren<{
type DndContextComponent (line 26) | type DndContextComponent = React.FC<DndContextProps>;
function DndContextFactory (line 39) | function DndContextFactory(
FILE: src/components/src/editor/editor.tsx
constant DECKGL_RENDER_LAYER (line 26) | const DECKGL_RENDER_LAYER = 'default-deckgl-overlay-wrapper';
type EditorProps (line 36) | interface EditorProps {
type PortalEditorProps (line 50) | type PortalEditorProps = FeatureActionPanelProps & {
function EditorFactory (line 55) | function EditorFactory(
FILE: src/components/src/editor/feature-action-panel.tsx
constant LAYOVER_OFFSET (line 20) | const LAYOVER_OFFSET = 4;
type FeatureActionPanelProps (line 36) | interface FeatureActionPanelProps {
function PureFeatureActionPanelFactory (line 55) | function PureFeatureActionPanelFactory(): React.FC<FeatureActionPanelPro...
function FeatureActionPanelFactory (line 166) | function FeatureActionPanelFactory(): ComponentType<FeatureActionPanelPr...
FILE: src/components/src/effects/compact-color-picker.tsx
type SingleColorPickerProps (line 13) | type SingleColorPickerProps = {
constant DEFAULT_OFFSET (line 67) | const DEFAULT_OFFSET = {
FILE: src/components/src/effects/effect-configurator.tsx
type EffectConfiguratorProps (line 17) | type EffectConfiguratorProps = {
type StyledWrapperProps (line 62) | type StyledWrapperProps = {
constant COMMON_SLIDER_PROPS (line 142) | const COMMON_SLIDER_PROPS = {
type EffectParameterDescriptionFlattened (line 149) | type EffectParameterDescriptionFlattened = {
function EffectConfiguratorFactory (line 159) | function EffectConfiguratorFactory(
FILE: src/components/src/effects/effect-list.tsx
type EffectListProps (line 24) | type EffectListProps = {
type SortableStyledItemProps (line 41) | type SortableStyledItemProps = {transition?: string; transform?: string};
function EffectListFactory (line 71) | function EffectListFactory(
FILE: src/components/src/effects/effect-manager.tsx
type EffectManagerState (line 25) | type EffectManagerState = {
type EffectManagerProps (line 37) | type EffectManagerProps = EffectManagerWithIntlProp & EffectManagerState;
type EffectManagerWithIntlProp (line 39) | type EffectManagerWithIntlProp = {intl: IntlShape};
type StyledEffectPanelContentProps (line 72) | type StyledEffectPanelContentProps = {
function EffectManagerFactory (line 85) | function EffectManagerFactory(
FILE: src/components/src/effects/effect-panel-header.tsx
type ActionItem (line 42) | type ActionItem = {
type EffectPanelHeaderProps (line 52) | type EffectPanelHeaderProps = {
type StyledPanelHeaderHiddenActionsProps (line 147) | type StyledPanelHeaderHiddenActionsProps = {isConfigActive: boolean};
function EffectPanelHeaderActionSectionFactory (line 183) | function EffectPanelHeaderActionSectionFactory(
function EffectPanelHeaderFactory (line 294) | function EffectPanelHeaderFactory(
FILE: src/components/src/effects/effect-panel.tsx
type EffectPanelProps (line 16) | type EffectPanelProps = {
type PanelWrapperProps (line 29) | type PanelWrapperProps = {
function EffectPanelFactory (line 46) | function EffectPanelFactory(
FILE: src/components/src/effects/effect-time-configurator.tsx
constant DAY_MILISECONDS (line 29) | const DAY_MILISECONDS = 1000 * 60 * 60 * 24;
type EffectTimeConfiguratorProps (line 31) | type EffectTimeConfiguratorProps = {
type StyledWrapperProps (line 42) | type StyledWrapperProps = {disabled?: boolean; marginBottom?: number};
type SliderWrapperProps (line 51) | type SliderWrapperProps = {disabled?: boolean};
type WithIconWrapperProps (line 120) | type WithIconWrapperProps = {width?: string};
type TextBlockProps (line 136) | type TextBlockProps = {
function EffectTimeConfiguratorFactory (line 176) | function EffectTimeConfiguratorFactory(
FILE: src/components/src/effects/effect-time-selector.tsx
constant HEADER_ITEM_ID (line 13) | const HEADER_ITEM_ID = 'HEADER_ITEM_ID';
type EffectTimeSelectorProps (line 15) | type EffectTimeSelectorProps = {
function EffectTimeSelectorFactory (line 139) | function EffectTimeSelectorFactory() {
FILE: src/components/src/effects/effect-time-slider.tsx
type EffectTimeSliderConfig (line 10) | type EffectTimeSliderConfig = {
type UIBlock (line 19) | type UIBlock = {
type EffectTimeSliderProps (line 30) | type EffectTimeSliderProps = {
type BackgroundBlockProps (line 75) | type BackgroundBlockProps = {width: string};
type StyledIconProps (line 84) | type StyledIconProps = {left: number};
type StyledBottomIconProps (line 93) | type StyledBottomIconProps = {left: number};
constant MODES (line 143) | const MODES = {
function getUIBlocks (line 153) | function getUIBlocks(config: EffectTimeSliderConfig): UIBlock[] {
function EffectTimeSliderFactory (line 248) | function EffectTimeSliderFactory(
FILE: src/components/src/effects/effect-type-dropdown-list.tsx
type EffectTypeDropdownListItem (line 10) | type EffectTypeDropdownListItem = {
type EffectTypeDropdownListProps (line 16) | type EffectTypeDropdownListProps = {
function EffectTypeDropdownListFactory (line 51) | function EffectTypeDropdownListFactory() {
FILE: src/components/src/effects/effect-type-list-item.tsx
constant DUMMY_ITEM_ID (line 13) | const DUMMY_ITEM_ID = 'dummy';
type EffectTypeListItemProps (line 15) | type EffectTypeListItemProps = {
function EffectTypeListItemFactory (line 83) | function EffectTypeListItemFactory() {
FILE: src/components/src/effects/effect-type-selector.tsx
type EffectTypeSelectorProps (line 11) | type EffectTypeSelectorProps = {
function EffectTypeSelectorFactory (line 64) | function EffectTypeSelectorFactory(EffectTypeListItem, EffectTypeDropdow...
FILE: src/components/src/effects/side-panel-title.tsx
type PanelTitleProps (line 7) | type PanelTitleProps = PropsWithChildren<{
type StyledSidePanelTitleProps (line 12) | type StyledSidePanelTitleProps = {className: string};
FILE: src/components/src/effects/timezone-selector.tsx
type TimezoneSelectorProps (line 14) | type TimezoneSelectorProps = {
function TimezoneSelectorFactory (line 38) | function TimezoneSelectorFactory() {
FILE: src/components/src/filter-animation-controller.tsx
type FilterAnimationControllerProps (line 11) | interface FilterAnimationControllerProps {
function FilterAnimationControllerFactory (line 26) | function FilterAnimationControllerFactory(
FILE: src/components/src/filters/filter-panels/filter-panel-with-field-select.tsx
function FieldPanelWithFieldSelectFactory (line 21) | function FieldPanelWithFieldSelectFactory(
FILE: src/components/src/filters/filter-panels/filter-synced-dataset-panel.tsx
function getDatasetsWithTimeField (line 47) | function getDatasetsWithTimeField(datasets) {
function getTimeFields (line 58) | function getTimeFields(dataset) {
function DatasetItemFactory (line 62) | function DatasetItemFactory(SourceSelector, FilterPanelHeader) {
function LayerTimelineFactory (line 130) | function LayerTimelineFactory(LayerTypeListItem) {
function SyncedDatasetButtonFactory (line 156) | function SyncedDatasetButtonFactory() {
function SyncLayerTimelineButtonFactory (line 180) | function SyncLayerTimelineButtonFactory() {
function FilterSyncedDatasetPanelFactory (line 204) | function FilterSyncedDatasetPanelFactory(
FILE: src/components/src/filters/filter-panels/multi-select-filter-panel.tsx
function MultiSelectFilterPanelFactory (line 12) | function MultiSelectFilterPanelFactory(
FILE: src/components/src/filters/filter-panels/new-filter-panel.tsx
function getSupportedFilterFields (line 19) | function getSupportedFilterFields(
function NewFilterPanelFactory (line 28) | function NewFilterPanelFactory(
FILE: src/components/src/filters/filter-panels/polygon-filter-panel.tsx
function PolygonFilterPanelFactory (line 23) | function PolygonFilterPanelFactory(
FILE: src/components/src/filters/filter-panels/range-filter-panel.tsx
function RangeFilterPanelFactory (line 12) | function RangeFilterPanelFactory(
FILE: src/components/src/filters/filter-panels/single-select-filter-panel.tsx
function SingleSelectFilterPanelFactory (line 12) | function SingleSelectFilterPanelFactory(
FILE: src/components/src/filters/filter-panels/time-range-filter-panel.tsx
constant SYNC_FILTER_ID_LENGTH (line 18) | const SYNC_FILTER_ID_LENGTH = 2;
function TimeRangeFilterPanelFactory (line 29) | function TimeRangeFilterPanelFactory(
FILE: src/components/src/filters/filter-panels/time-synced-field-selector.tsx
function TimeSyncedFieldSelectorFactory (line 23) | function TimeSyncedFieldSelectorFactory(FieldToken) {
FILE: src/components/src/filters/filter-panels/types.ts
type PanelAction (line 10) | interface PanelAction {
type FilterPanelProps (line 18) | interface FilterPanelProps<F = Filter> {
type PolygonFilterPanelProps (line 31) | interface PolygonFilterPanelProps extends FilterPanelProps<PolygonFilter> {
type TimeRangeFilterPanelProps (line 35) | interface TimeRangeFilterPanelProps extends FilterPanelProps<TimeRangeFi...
type FilterPanelWithFieldSelectProps (line 40) | interface FilterPanelWithFieldSelectProps extends FilterPanelProps {
type FilterPanelComponent (line 44) | type FilterPanelComponent<F> = FunctionComponent<FilterPanelProps<F>>;
type PolygonFilterPanelComponent (line 45) | type PolygonFilterPanelComponent = FunctionComponent<PolygonFilterPanelP...
type TimeRangeFilterPanelComponent (line 46) | type TimeRangeFilterPanelComponent = FunctionComponent<TimeRangeFilterPa...
type FilterPanelWithFieldSelectComponent (line 47) | type FilterPanelWithFieldSelectComponent = FunctionComponent<
FILE: src/components/src/filters/multi-select-filter.tsx
function MultiSelectFilterFactory (line 10) | function MultiSelectFilterFactory() {
FILE: src/components/src/filters/polygon-filter.tsx
function PolygonFilterFactory (line 15) | function PolygonFilterFactory() {
FILE: src/components/src/filters/range-filter.tsx
function RangeFilterFactory (line 11) | function RangeFilterFactory(RangeSlider: ReturnType<typeof RangeSliderFa...
FILE: src/components/src/filters/single-select-filter.tsx
function SingleSelectFilterFactory (line 10) | function SingleSelectFilterFactory() {
FILE: src/components/src/filters/time-range-filter.tsx
function timeRangeSliderFieldsSelector (line 14) | function timeRangeSliderFieldsSelector(
function TimeRangeFilterFactory (line 47) | function TimeRangeFilterFactory(TimeRangeSlider: ReturnType<typeof TimeR...
FILE: src/components/src/filters/time-widget-top.tsx
constant TOP_SECTION_HEIGHT (line 12) | const TOP_SECTION_HEIGHT = '36px';
function TimeWidgetTopFactory (line 86) | function TimeWidgetTopFactory(FieldSelector: ReturnType<typeof FieldSele...
FILE: src/components/src/filters/time-widget.tsx
function TimeWidgetFactory (line 20) | function TimeWidgetFactory(
FILE: src/components/src/filters/types.ts
type PolygonFilterProps (line 27) | type PolygonFilterProps = {
type TopSectionWrapperProps (line 33) | type TopSectionWrapperProps = BaseComponentProps & {
type RangeFilterProps (line 37) | type RangeFilterProps = {
type TimeRangeFilterProps (line 43) | type TimeRangeFilterProps = {
type SingleSelectFilterProps (line 56) | type SingleSelectFilterProps = {
type MultiSelectFilterProps (line 61) | type MultiSelectFilterProps = {
type TimeWidgetTopProps (line 68) | type TimeWidgetTopProps = {
type TimeWidgetProps (line 79) | type TimeWidgetProps = {
FILE: src/components/src/geocoder-panel.tsx
constant ICON_LAYER (line 25) | const ICON_LAYER = {
function generateConfig (line 46) | function generateConfig(layerOrder) {
type StyledGeocoderPanelProps (line 55) | type StyledGeocoderPanelProps = BaseComponentProps & {
function generateGeocoderDataset (line 80) | function generateGeocoderDataset(lat: number, lon: number, text?: string...
function isValid (line 103) | function isValid(key) {
function getUpdateVisDataPayload (line 107) | function getUpdateVisDataPayload(
type GeocoderPanelProps (line 124) | interface GeocoderPanelProps {
function GeocoderPanelFactory (line 141) | function GeocoderPanelFactory(): React.FC<GeocoderPanelProps> {
FILE: src/components/src/geocoder/geocoder.tsx
type StyledContainerProps (line 16) | type StyledContainerProps = {
constant COORDINATE_REGEX_STRING (line 21) | const COORDINATE_REGEX_STRING =
constant COORDINATE_REGEX (line 24) | const COORDINATE_REGEX = RegExp(COORDINATE_REGEX_STRING);
constant PLACEHOLDER (line 26) | const PLACEHOLDER = 'Enter an address or coordinates, ex 37.79,-122.40';
type Result (line 108) | interface Result {
type Results (line 115) | type Results = ReadonlyArray<Result>;
type GeocoderProps (line 117) | type GeocoderProps = {
type IntlProps (line 131) | type IntlProps = {
FILE: src/components/src/hooks/use-cloud-list-provider.tsx
type CloudListProviderProps (line 8) | type CloudListProviderProps = PropsWithChildren<{
FILE: src/components/src/hooks/use-dnd-effects.tsx
type DndEffectsHook (line 13) | type DndEffectsHook = {
FILE: src/components/src/hooks/use-dnd-layers.tsx
type DndEffectsHook (line 16) | type DndEffectsHook = {
FILE: src/components/src/hooks/use-feature-flags.tsx
type FeatureFlags (line 7) | type FeatureFlags = {
FILE: src/components/src/hooks/use-fetch-raster-tile-metadata.ts
type RasterMetadataResponse (line 13) | type RasterMetadataResponse = VectorTileMetadata | StacTypes.CompleteSTA...
type FetchJsonProps (line 15) | type FetchJsonProps = {
type UseFetchJsonReturn (line 25) | type UseFetchJsonReturn = {
function useFetchJson (line 31) | function useFetchJson({
FILE: src/components/src/hooks/use-fetch-vector-tile-metadata.ts
type FetchVectorTileMetadataProps (line 12) | type FetchVectorTileMetadataProps = {
type FetchVectorTileMetadataReturn (line 31) | type FetchVectorTileMetadataReturn = {
function useFetchVectorTileMetadata (line 38) | function useFetchVectorTileMetadata({
FILE: src/components/src/hooks/use-legend-position.ts
type Params (line 8) | type Params = {
type ReturnType (line 18) | type ReturnType = {
constant MARGIN (line 27) | const MARGIN = {
constant DEFAULT_POSITION (line 33) | const DEFAULT_POSITION: MapLegendControlSettings['position'] = {
constant MIN_CONTENT_HEIGHT (line 39) | const MIN_CONTENT_HEIGHT = 100;
constant MAP_CONTROL_HEADER_FULL_HEIGHT (line 40) | const MAP_CONTROL_HEADER_FULL_HEIGHT = 34;
type UseCalcLegendPositionProps (line 42) | type UseCalcLegendPositionProps = {
function useCalcLegendPosition (line 48) | function useCalcLegendPosition({
function useLegendPosition (line 88) | function useLegendPosition({
FILE: src/components/src/hooks/use-on-click-outside.tsx
function useOnClickOutside (line 6) | function useOnClickOutside<T extends HTMLElement>(
FILE: src/components/src/injector.tsx
type FactoryElement (line 15) | type FactoryElement = (...args) => React.ComponentType;
type Factory (line 16) | type Factory = FactoryElement & {
type InjectorType (line 20) | type InjectorType = {
constant ERROR_MSG (line 27) | const ERROR_MSG = {
function injector (line 39) | function injector(map = new Map()): InjectorType {
function flattenDeps (line 72) | function flattenDeps(allDeps: Factory[], factory: any): Factory[] {
function provideRecipesToInjector (line 79) | function provideRecipesToInjector(recipes: [Factory, Factory][], appInje...
function typeCheckRecipe (line 113) | function typeCheckRecipe(recipe) {
type WithState (line 134) | interface WithState<RootState> {
function withState (line 144) | function withState(lenses: any[] = [], mapStateToProps = identity, actio...
FILE: src/components/src/kepler-gl.tsx
type KeplerGlActions (line 34) | type KeplerGlActions = {
type BottomWidgetOuterProps (line 121) | type BottomWidgetOuterProps = {
type MapStateProps (line 143) | type MapStateProps = {
function getVisibleDatasets (line 199) | function getVisibleDatasets(datasets) {
constant DEFAULT_KEPLER_GL_PROPS (line 365) | const DEFAULT_KEPLER_GL_PROPS = {
type KeplerGLBasicProps (line 380) | type KeplerGLBasicProps = {
type KeplerGLProps (line 418) | type KeplerGLProps = KeplerGlState & KeplerGlActions & KeplerGLBasicProps;
type KeplerGLCompState (line 419) | type KeplerGLCompState = {
function KeplerGlFactory (line 436) | function KeplerGlFactory(
function mapStateToProps (line 685) | function mapStateToProps(state: KeplerGlState, props: KeplerGLProps) {
function makeGetActionCreators (line 702) | function makeGetActionCreators() {
function makeMapDispatchToProps (line 723) | function makeMapDispatchToProps() {
function mergeActions (line 740) | function mergeActions(actions, userActions) {
FILE: src/components/src/layer-animation-controller.tsx
type LayerAnimationControllerProps (line 11) | interface LayerAnimationControllerProps {
function LayerAnimationControllerFactory (line 26) | function LayerAnimationControllerFactory(
FILE: src/components/src/loading-indicator.tsx
type StyledContainerProps (line 9) | type StyledContainerProps = {
type LoadingIndicatorProps (line 50) | type LoadingIndicatorProps = {
constant LEFT_POSITION_ADJUSTMENT (line 57) | const LEFT_POSITION_ADJUSTMENT = 3;
FILE: src/components/src/map-container.tsx
constant DEBOUNCE_VIEWPORT_PROPAGATE (line 100) | const DEBOUNCE_VIEWPORT_PROPAGATE = 10;
constant DEBOUNCE_MOUSE_MOVE_PROPAGATE (line 101) | const DEBOUNCE_MOUSE_MOVE_PROPAGATE = 10;
constant DEBOUNCE_LOADING_STATE_PROPAGATE (line 104) | const DEBOUNCE_LOADING_STATE_PROPAGATE = 100;
constant MAP_STYLE (line 106) | const MAP_STYLE: {[key: string]: React.CSSProperties} = {
constant LOCALE_CODES_ARRAY (line 122) | const LOCALE_CODES_ARRAY = Object.keys(LOCALE_CODES);
type StyledMapContainerProps (line 124) | interface StyledMapContainerProps {
constant MAPBOXGL_STYLE_UPDATE (line 140) | const MAPBOXGL_STYLE_UPDATE = 'style.load';
constant MAPBOXGL_RENDER (line 141) | const MAPBOXGL_RENDER = 'render';
type MapLibLogoProps (line 146) | type MapLibLogoProps = {
type StyledDroppableProps (line 164) | interface StyledDroppableProps {
type StyledDatasetAttributionsContainerProps (line 190) | interface StyledDatasetAttributionsContainerProps {
type AttributionProps (line 235) | type AttributionProps = {
type MapboxStyle (line 307) | type MapboxStyle = string | object | undefined;
type PropSelector (line 308) | type PropSelector<R> = Selector<MapContainerProps, R>;
type MapContainerProps (line 310) | interface MapContainerProps {
function MapContainerFactory (line 367) | function MapContainerFactory(
FILE: src/components/src/map-view-state-context.tsx
type MapViewStateContextType (line 12) | type MapViewStateContextType = {
FILE: src/components/src/map/coordinate-info.tsx
constant DECIMAL (line 11) | const DECIMAL = 6;
constant DECIMAL_Z (line 12) | const DECIMAL_Z = 1;
type CoordinateInfoProps (line 14) | interface CoordinateInfoProps {
FILE: src/components/src/map/effects/effect-control.tsx
type EffectControlIcons (line 12) | interface EffectControlIcons {
type EffectControlProps (line 16) | type EffectControlProps = {
function EffectControlFactory (line 24) | function EffectControlFactory(
FILE: src/components/src/map/layer-hover-info.tsx
type RowProps (line 63) | interface RowProps {
constant TOOLTIP_VALUE_MAX_LENGTH (line 70) | const TOOLTIP_VALUE_MAX_LENGTH = 256;
type EntryInfoProps (line 113) | type EntryInfoProps = Merge<LayerHoverProp, {fieldsToShow: TooltipField[...
type EntryInfoRowProps (line 123) | type EntryInfoRowProps = {
FILE: src/components/src/map/layer-selector-panel.tsx
type LayerSelectorPanelProps (line 17) | type LayerSelectorPanelProps = {
function LayerSelectorPanelFactory (line 27) | function LayerSelectorPanelFactory(
FILE: src/components/src/map/locale-panel.tsx
type LocalePanelProps (line 15) | type LocalePanelProps = {
function LocalePanelFactory (line 23) | function LocalePanelFactory(
FILE: src/components/src/map/map-control-panel.tsx
type StyledMapControlPanelContentProps (line 23) | type StyledMapControlPanelContentProps = {
type MapControlPanelHeaderProps (line 37) | type MapControlPanelHeaderProps = {
type StyledDisableableTextProps (line 78) | interface StyledDisableableTextProps {
type MapControlPanelProps (line 103) | type MapControlPanelProps = {
function MapControlPanelFactory (line 119) | function MapControlPanelFactory() {
FILE: src/components/src/map/map-control-toolbar.tsx
function MapControlToolbar (line 8) | function MapControlToolbar() {
FILE: src/components/src/map/map-control-tooltip.tsx
type MapControlTooltipProps (line 8) | type MapControlTooltipProps = {
function MapControlTooltipFactory (line 14) | function MapControlTooltipFactory() {
FILE: src/components/src/map/map-control.tsx
type StyledMapControlProps (line 20) | interface StyledMapControlProps {
type MapControlProps (line 42) | type MapControlProps = {
function MapControlFactory (line 94) | function MapControlFactory(
FILE: src/components/src/map/map-draw-panel.tsx
type MapDrawPanelProps (line 18) | type MapDrawPanelProps = {
function MapDrawPanelFactory (line 27) | function MapDrawPanelFactory(
FILE: src/components/src/map/map-legend-panel.tsx
constant DRAG_RESIZE_ID (line 37) | const DRAG_RESIZE_ID = 'map-legend-resize';
constant DRAG_MOVE_ID (line 38) | const DRAG_MOVE_ID = 'map-legend-move';
type MapLegendPanelFactoryDeps (line 140) | type MapLegendPanelFactoryDeps = [
type DraggableLegendContentProps (line 146) | type DraggableLegendContentProps = {
type DraggableLegendProps (line 184) | type DraggableLegendProps = PropsWithChildren<{
type ImageExportLegendProps (line 262) | type ImageExportLegendProps = {
type MapLegendPanelIcons (line 308) | interface MapLegendPanelIcons {
type MapLegendPanelProps (line 312) | type MapLegendPanelProps = {
type MapLegendPanelComponents (line 333) | type MapLegendPanelComponents = {
type MapLegendPanelComponentType (line 339) | type MapLegendPanelComponentType = React.FC<MapLegendPanelProps>;
function MapLegendPanelFactory (line 447) | function MapLegendPanelFactory(
FILE: src/components/src/map/map-legend.tsx
type StyledMapControlLegendProps (line 19) | interface StyledMapControlLegendProps {
type LayerSizeLegendProps (line 86) | type LayerSizeLegendProps = {
type SingleColorLegendProps (line 102) | type SingleColorLegendProps = {
function SingleColorLegendFactory (line 109) | function SingleColorLegendFactory(LegendRow: ReturnType<typeof LegendRow...
type LayerColorLegendProps (line 123) | type LayerColorLegendProps = {
function LayerColorLegendFactory (line 140) | function LayerColorLegendFactory(
function getLayerRadiusScaleMetersToPixelsMultiplier (line 235) | function getLayerRadiusScaleMetersToPixelsMultiplier(layer, mapState) {
type MapLegendIcons (line 243) | type MapLegendIcons = {
type LayerRadiusLegendProps (line 248) | type LayerRadiusLegendProps = {
type LayerLegendHeaderProps (line 297) | type LayerLegendHeaderProps = {
function LayerLegendHeaderFactory (line 308) | function LayerLegendHeaderFactory() {
type LayerLegendContentProps (line 322) | type LayerLegendContentProps = {
function LayerLegendContentFactory (line 334) | function LayerLegendContentFactory(
type MapLegendProps (line 414) | type MapLegendProps = {
function MapLegendFactory (line 429) | function MapLegendFactory(
FILE: src/components/src/map/map-popover-content.tsx
type MapPopoverContentProps (line 12) | type MapPopoverContentProps = {
type IntlProps (line 18) | type IntlProps = {
function MapPopoverContentFactory (line 22) | function MapPopoverContentFactory(
FILE: src/components/src/map/map-popover.tsx
constant SELECTABLE_LAYERS (line 25) | const SELECTABLE_LAYERS: string[] = [LAYER_TYPES.hexagonId, LAYER_TYPES....
constant MAX_WIDTH (line 26) | const MAX_WIDTH = 500;
constant MAX_HEIGHT (line 27) | const MAX_HEIGHT = 600;
function getSelectedFeature (line 140) | function getSelectedFeature(layerHoverProp: LayerHoverProp | null): Feat...
type MapPopoverProps (line 173) | type MapPopoverProps = {
type IntlProps (line 191) | type IntlProps = {
function MapPopoverFactory (line 195) | function MapPopoverFactory(
FILE: src/components/src/map/split-map-button.tsx
type SplitMapButtonIcons (line 13) | interface SplitMapButtonIcons {
type SplitMapButtonProps (line 18) | type SplitMapButtonProps = {
function SplitMapButtonFactory (line 27) | function SplitMapButtonFactory(MapControlTooltip) {
FILE: src/components/src/map/toggle-3d-button.tsx
type Toggle3dButtonIcons (line 13) | interface Toggle3dButtonIcons {
type Toggle3dButtonProps (line 17) | type Toggle3dButtonProps = {
function Toggle3dButtonFactory (line 24) | function Toggle3dButtonFactory(MapControlTooltip) {
FILE: src/components/src/maps-layout.tsx
type MapsLayoutProps (line 20) | interface MapsLayoutProps {
function MapsLayoutFactory (line 26) | function MapsLayoutFactory(): React.ComponentType<MapsLayoutProps> {
FILE: src/components/src/modal-container.tsx
type ModalContainerProps (line 91) | type ModalContainerProps = {
function ModalContainerFactory (line 129) | function ModalContainerFactory(
FILE: src/components/src/modals/add-map-style-modal.tsx
type AddMapStyleModalProps (line 97) | interface AddMapStyleModalProps {
function AddMapStyleModalFactory (line 113) | function AddMapStyleModalFactory() {
FILE: src/components/src/modals/cloud-components/cloud-header.tsx
constant LINK_STYLE (line 33) | const LINK_STYLE = {textDecoration: 'underline'};
type CloudHeaderProps (line 47) | type CloudHeaderProps = {
function CloudHeaderFactory (line 54) | function CloudHeaderFactory(InfoHelper: ReturnType<typeof InfoHelperFact...
FILE: src/components/src/modals/cloud-components/provider-select.tsx
type ProviderSelectProps (line 17) | type ProviderSelectProps = {
FILE: src/components/src/modals/cloud-tile.tsx
type StyledTileWrapperProps (line 12) | type StyledTileWrapperProps = BaseComponentProps & {
type OnClickProps (line 65) | interface OnClickProps {
type CloudTileProps (line 106) | interface CloudTileProps {
FILE: src/components/src/modals/data-table-modal.tsx
constant MIN_STATS_CELL_SIZE (line 19) | const MIN_STATS_CELL_SIZE = 122;
constant DEFAULT_SORT_COLUMN (line 20) | const DEFAULT_SORT_COLUMN = {};
type DatasetModalTabProps (line 48) | type DatasetModalTabProps = BaseComponentProps & {
type DatasetTabsUnmemoizedProps (line 81) | interface DatasetTabsUnmemoizedProps {
type DataTableModalProps (line 123) | interface DataTableModalProps {
function DataTableModalFactory (line 143) | function DataTableModalFactory(
FILE: src/components/src/modals/delete-data-modal.tsx
type DeleteDatasetModalProps (line 15) | interface DeleteDatasetModalProps {
FILE: src/components/src/modals/error-display.tsx
type ErrorDisplayProps (line 9) | interface ErrorDisplayProps {
FILE: src/components/src/modals/export-data-modal.tsx
type ExportDataModalProps (line 51) | interface ExportDataModalProps {
class ExportDataModal (line 70) | class ExportDataModal extends Component<ExportDataModalProps> {
method componentDidMount (line 71) | componentDidMount() {
method render (line 81) | render() {
FILE: src/components/src/modals/export-image-modal.tsx
constant SCREEN_RESOLUTION_OPTIONS (line 93) | const SCREEN_RESOLUTION_OPTIONS = [OneXResolutionOption, TwoXResolutionO...
constant FOUR_BY_THREE_RESOLUTION_OPTIONS (line 95) | const FOUR_BY_THREE_RESOLUTION_OPTIONS = [
constant SIXTEEN_BY_NINE_RESOLUTION_OPTIONS (line 102) | const SIXTEEN_BY_NINE_RESOLUTION_OPTIONS = [
type ExportImageModalProps (line 109) | interface ExportImageModalProps {
FILE: src/components/src/modals/export-map-modal/export-html-map.tsx
type StyledInputProps (line 27) | interface StyledInputProps {
type ExportHtmlMapProps (line 56) | type ExportHtmlMapProps = {
type IntlProps (line 65) | type IntlProps = {
function ExportHtmlMapFactory (line 69) | function ExportHtmlMapFactory(): React.ComponentType<ExportHtmlMapProps> {
FILE: src/components/src/modals/export-map-modal/export-json-map.tsx
type ExportJsonPropTypes (line 47) | type ExportJsonPropTypes = {
FILE: src/components/src/modals/export-map-modal/export-map-modal.tsx
type ExportMapModalFactoryProps (line 15) | interface ExportMapModalFactoryProps {
function ExportMapModalFactory (line 30) | function ExportMapModalFactory(
FILE: src/components/src/modals/image-modal-container.tsx
type ImageModalContainerProps (line 11) | type ImageModalContainerProps = {
FILE: src/components/src/modals/load-data-modal.tsx
type LoadingMethod (line 32) | interface LoadingMethod {
type LoadDataModalProps (line 39) | type LoadDataModalProps = {
function LoadDataModalFactory (line 69) | function LoadDataModalFactory(
FILE: src/components/src/modals/load-storage-map.spec.tsx
constant DEFAULT_MAPS (line 18) | const DEFAULT_MAPS = [
constant DEFAULT_PROVIDER (line 37) | const DEFAULT_PROVIDER = {
constant DEFAULT_PROPS (line 44) | const DEFAULT_PROPS = {
FILE: src/components/src/modals/load-storage-map.tsx
function LoadStorageMapFactory (line 14) | function LoadStorageMapFactory(CloudHeader: ReturnType<typeof CloudHeade...
FILE: src/components/src/modals/loading-dialog.tsx
type LoadingDialogProps (line 39) | interface LoadingDialogProps {
FILE: src/components/src/modals/modal-tabs.tsx
type ModalTabItemProps (line 62) | interface ModalTabItemProps {
type ModalTabProps (line 68) | interface ModalTabProps {
function ModalTabsFactory (line 95) | function ModalTabsFactory() {
FILE: src/components/src/modals/overwrite-map-modal.tsx
type OverwriteMapModalProps (line 34) | type OverwriteMapModalProps = {
constant CONFIRM_BUTTON (line 46) | const CONFIRM_BUTTON = {
FILE: src/components/src/modals/save-map-modal.spec.tsx
constant DEFAULT_PROS (line 24) | const DEFAULT_PROS = {
constant UNDEFINED_MAP_TITLE_PROPS (line 39) | const UNDEFINED_MAP_TITLE_PROPS = {
constant DEFAULT_PROVIDER (line 47) | const DEFAULT_PROVIDER = {
FILE: src/components/src/modals/save-map-modal.tsx
constant TEXT_AREA_LIGHT_STYLE (line 66) | const TEXT_AREA_LIGHT_STYLE = {resize: 'none'};
type CharacterLimits (line 68) | type CharacterLimits = {
type SaveMapModalProps (line 73) | type SaveMapModalProps = {
type MapInfoPanelProps (line 88) | type MapInfoPanelProps = Pick<SaveMapModalProps, 'mapInfo' | 'characterL...
constant STYLED_EXPORT_SECTION_STYLE (line 160) | const STYLED_EXPORT_SECTION_STYLE = {margin: '2px 0'};
constant PROVIDER_MANAGER_URL_STYLE (line 161) | const PROVIDER_MANAGER_URL_STYLE = {textDecoration: 'underline'};
function SaveMapModalFactory (line 163) | function SaveMapModalFactory() {
FILE: src/components/src/modals/share-map-modal.spec.tsx
constant DEFAULT_PROPS (line 26) | const DEFAULT_PROPS = {
FILE: src/components/src/modals/share-map-modal.tsx
type SharingUrlProps (line 48) | interface SharingUrlProps {
constant UNDERLINE_TEXT_DECORATION_STYLE (line 82) | const UNDERLINE_TEXT_DECORATION_STYLE = {textDecoration: 'underline'};
type ShareMapUrlModalFactoryProps (line 102) | interface ShareMapUrlModalFactoryProps {
function ShareMapUrlModalFactory (line 111) | function ShareMapUrlModalFactory() {
FILE: src/components/src/modals/status-panel.tsx
type UploadAnimationProps (line 51) | interface UploadAnimationProps {
type StatusPanelProps (line 65) | interface StatusPanelProps {
FILE: src/components/src/modals/storage-map-viewer.tsx
type Asset (line 111) | interface Asset {
type AssetItemProps (line 120) | interface AssetItemProps {
type StorageAssetsViewerProps (line 143) | interface StorageAssetsViewerProps {
class StorageAssetsViewer (line 150) | class StorageAssetsViewer extends React.Component<StorageAssetsViewerPro...
method render (line 151) | render() {
FILE: src/components/src/modals/tilesets-modals/common.tsx
type DatasetCreationAttributes (line 9) | type DatasetCreationAttributes = {
type MetaResponse (line 15) | type MetaResponse = {
FILE: src/components/src/modals/tilesets-modals/load-data-footer.tsx
type LoadDataFooterProps (line 45) | type LoadDataFooterProps = {
type ThemeProps (line 54) | type ThemeProps = {
FILE: src/components/src/modals/tilesets-modals/load-tileset.tsx
constant WIDTH_ICON (line 21) | const WIDTH_ICON = '70px';
type MetaInnerContainerProps (line 47) | interface MetaInnerContainerProps {
type LoadTilesetTabProps (line 79) | type LoadTilesetTabProps = {
constant TILE_TYPES (line 86) | const TILE_TYPES = [
function isReady (line 107) | function isReady(response) {
function LoadTilesetTabFactory (line 111) | function LoadTilesetTabFactory() {
FILE: src/components/src/modals/tilesets-modals/tileset-icon.tsx
type TileIconProps (line 14) | type TileIconProps = {
type TilesetIconProps (line 29) | type TilesetIconProps = {
FILE: src/components/src/modals/tilesets-modals/tileset-raster-form.tsx
type RasterTilesetMeta (line 38) | type RasterTilesetMeta = {
function getDatasetAttributesFromRasterTile (line 44) | function getDatasetAttributesFromRasterTile({
type RasterTileFormProps (line 67) | type RasterTileFormProps = {
constant RASTER_TILE_DOCUMENTATION_URL (line 90) | const RASTER_TILE_DOCUMENTATION_URL =
FILE: src/components/src/modals/tilesets-modals/tileset-vector-form.tsx
type VectorTilesetFormData (line 37) | type VectorTilesetFormData = {
type VectorTileDatasetCreationAttributes (line 43) | type VectorTileDatasetCreationAttributes = Merge<
function getDatasetAttributesFromVectorTile (line 50) | function getDatasetAttributesFromVectorTile({
type TilesetVectorFormProps (line 67) | type TilesetVectorFormProps = {
FILE: src/components/src/modals/tilesets-modals/tileset-wms-form.tsx
type WMSTileFormProps (line 39) | type WMSTileFormProps = {
type WMSData (line 43) | type WMSData = {
FILE: src/components/src/notification-panel.tsx
type NotificationPanelProps (line 29) | interface NotificationPanelProps {
function NotificationPanelFactory (line 34) | function NotificationPanelFactory(
FILE: src/components/src/notification-panel/notification-item.tsx
type NotificationItemContentBlockProps (line 12) | interface NotificationItemContentBlockProps {
type NotificationItemContentProps (line 25) | interface NotificationItemContentProps {
type NotificationCounterProps (line 51) | interface NotificationCounterProps {
type NotificationMessageProps (line 73) | interface NotificationMessageProps {
type NotificationItemProps (line 108) | interface NotificationItemProps {
function NotificationItemFactory (line 120) | function NotificationItemFactory() {
FILE: src/components/src/plot-container.tsx
constant CLASS_FILTER (line 32) | const CLASS_FILTER = [
constant OUT_OF_SCREEN_POSITION (line 40) | const OUT_OF_SCREEN_POSITION = -9999;
function calculateLegendZoom (line 48) | function calculateLegendZoom(height: number): number {
type StyledPlotContainerProps (line 68) | interface StyledPlotContainerProps {
type StyledMapContainerProps (line 93) | interface StyledMapContainerProps {
type PlotContainerProps (line 104) | interface PlotContainerProps {
function PlotContainerFactory (line 130) | function PlotContainerFactory(
FILE: src/components/src/side-panel.tsx
function SidePanelFactory (line 60) | function SidePanelFactory(
FILE: src/components/src/side-panel/add-by-dataset-button.tsx
constant TYPEAHEAD_CLASS (line 70) | const TYPEAHEAD_CLASS = 'typeahead';
constant TYPEAHEAD_INPUT_CLASS (line 71) | const TYPEAHEAD_INPUT_CLASS = 'typeahead__input';
type AddByDatasetButtonProps (line 73) | type AddByDatasetButtonProps = {
FILE: src/components/src/side-panel/common/dataset-info.tsx
type MiniDataset (line 14) | type MiniDataset = {
type DatasetInfoProps (line 19) | type DatasetInfoProps = {
function DatasetInfoFactory (line 29) | function DatasetInfoFactory() {
FILE: src/components/src/side-panel/common/dataset-tag.tsx
function nop (line 12) | function nop() {
type MiniDataset (line 49) | type MiniDataset = {
type DatasetTagProps (line 55) | type DatasetTagProps = {
function DatasetTagFactory (line 63) | function DatasetTagFactory(): React.FC<DatasetTagProps> {
FILE: src/components/src/side-panel/common/dataset-title.tsx
type MiniDataset (line 51) | type MiniDataset = {
type DatasetTitleProps (line 58) | type DatasetTitleProps = {
function DatasetTitleFactory (line 107) | function DatasetTitleFactory(
FILE: src/components/src/side-panel/common/source-data-catalog.tsx
type MiniDataset (line 19) | type MiniDataset = {
type MiniDatasets (line 27) | type MiniDatasets = {
type SourceDataCatalogProps (line 31) | type SourceDataCatalogProps = {
function SourceDataCatalogFactory (line 42) | function SourceDataCatalogFactory(
FILE: src/components/src/side-panel/common/source-data-selector-content.tsx
function SourceDataSelectorContentFactory (line 12) | function SourceDataSelectorContentFactory(DatasetTag) {
FILE: src/components/src/side-panel/common/source-data-selector.tsx
function SourceDataSelectorFactory (line 14) | function SourceDataSelectorFactory(
FILE: src/components/src/side-panel/common/source-selector.tsx
function SourceSelectorFactory (line 16) | function SourceSelectorFactory(SourceDataSelectorContent, FieldSelector) {
FILE: src/components/src/side-panel/common/types.ts
type PanelMeta (line 9) | type PanelMeta = {
type UpdateTableColorTypes (line 16) | type UpdateTableColorTypes = {
type ShowDataTableProps (line 21) | type ShowDataTableProps = {
type RemoveDatasetProps (line 26) | type RemoveDatasetProps = {
type StyledDatasetTitleProps (line 31) | type StyledDatasetTitleProps = {
type DatasetItemProps (line 35) | type DatasetItemProps = {
type SelectableDataset (line 39) | type SelectableDataset = {
type SourceDataSelectorProps (line 45) | type SourceDataSelectorProps = {
FILE: src/components/src/side-panel/custom-panel.tsx
type CustomPanelsStaticProps (line 8) | type CustomPanelsStaticProps<P> = {
type CustomPanelsProps (line 12) | type CustomPanelsProps = {
function CustomPanelsFactory (line 18) | function CustomPanelsFactory<P>() {
FILE: src/components/src/side-panel/filter-manager.tsx
type VisStateActionHandlers (line 22) | type VisStateActionHandlers = ActionHandlers<typeof VisStateActions>;
type UiStateActionHandlers (line 23) | type UiStateActionHandlers = ActionHandlers<typeof UIStateActions>;
type FilterManagerProps (line 25) | type FilterManagerProps = {
type FilterListProps (line 40) | type FilterListProps = {
function FilterManagerFactory (line 61) | function FilterManagerFactory(
FILE: src/components/src/side-panel/filter-panel/add-filter-button.tsx
type AddFilterButtonProps (line 8) | type AddFilterButtonProps = {
function AddFilterButtonFactory (line 13) | function AddFilterButtonFactory() {
FILE: src/components/src/side-panel/filter-panel/filter-panel-header.tsx
type StyledFilterHeaderProps (line 14) | interface StyledFilterHeaderProps extends StyledPanelHeaderProps {
type FilterPanelHeaderProps (line 40) | type FilterPanelHeaderProps = {
function FilterPanelHeaderFactory (line 61) | function FilterPanelHeaderFactory(
FILE: src/components/src/side-panel/filter-panel/filter-panel.tsx
type FilterPanelPropsImpl (line 25) | interface FilterPanelPropsImpl extends Omit<FilterPanelProps, 'allAvaila...
function FilterPanelFactory (line 43) | function FilterPanelFactory(
FILE: src/components/src/side-panel/interaction-manager.tsx
type InteractionManagerProps (line 16) | type InteractionManagerProps = {
function InteractionManagerFactory (line 25) | function InteractionManagerFactory(
FILE: src/components/src/side-panel/interaction-panel/brush-config.tsx
type BrushConfigProps (line 13) | type BrushConfigProps = {
function BrushConfigFactory (line 20) | function BrushConfigFactory(RangeSlider: ReturnType<typeof RangeSliderFa...
FILE: src/components/src/side-panel/interaction-panel/interaction-panel.tsx
type InteractionPanelProps (line 26) | interface InteractionPanelProps {
constant INTERACTION_CONFIG_ICONS (line 43) | const INTERACTION_CONFIG_ICONS: {[key: string]: React.ElementType} = {
function InteractionPanelFactory (line 50) | function InteractionPanelFactory(
FILE: src/components/src/side-panel/interaction-panel/tooltip-config.tsx
type TooltipConfigProps (line 54) | type TooltipConfigProps = {
type DatasetTooltipConfigProps (line 74) | type DatasetTooltipConfigProps = {
function TooltipConfigFactory (line 94) | function TooltipConfigFactory(
FILE: src/components/src/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.tsx
type TooltipChickletProps (line 20) | interface TooltipChickletProps {
type TooltipConfig (line 34) | type TooltipConfig = {
type IconDivProps (line 63) | type IconDivProps = BaseComponentProps & {
type SortableStyledItemProps (line 78) | type SortableStyledItemProps = BaseComponentProps & {
function getFormatTooltip (line 122) | function getFormatTooltip(formatLabels: TimeLabelFormat[], format: strin...
function TooltipChickletFactory (line 134) | function TooltipChickletFactory(
FILE: src/components/src/side-panel/layer-manager.tsx
type LayerBlendingSelectorProps (line 29) | type LayerBlendingSelectorProps = {
type OverlayBlendingSelectorProps (line 35) | type OverlayBlendingSelectorProps = {
type LayerManagerProps (line 41) | type LayerManagerProps = {
function LayerManagerFactory (line 149) | function LayerManagerFactory(
FILE: src/components/src/side-panel/layer-panel/add-layer-button.tsx
type AddLayerButtonProps (line 8) | type AddLayerButtonProps = {
function AddLayerButtonFactory (line 13) | function AddLayerButtonFactory() {
FILE: src/components/src/side-panel/layer-panel/aggr-scale-selector.tsx
function AggrScaleSelectorFactory (line 8) | function AggrScaleSelectorFactory(DimensionScaleSelector) {
FILE: src/components/src/side-panel/layer-panel/channel-by-value-selector.tsx
type ChannelByValueSelectorProps (line 14) | type ChannelByValueSelectorProps = {
function ChannelByValueSelectorFactory (line 35) | function ChannelByValueSelectorFactory(
FILE: src/components/src/side-panel/layer-panel/color-breaks-panel.tsx
type EditButtonProps (line 42) | type EditButtonProps = {onClickEdit: () => void};
type ColorBreaksDisplayProps (line 51) | type ColorBreaksDisplayProps = {
type CategoricalColorDisplayProps (line 81) | type CategoricalColorDisplayProps = {
type ColorBreaksPanelProps (line 110) | type ColorBreaksPanelProps = {
function ColorBreaksPanelFactory (line 129) | function ColorBreaksPanelFactory(
FILE: src/components/src/side-panel/layer-panel/color-palette-preset.tsx
constant PALETTE_HEIGHT (line 11) | const PALETTE_HEIGHT = '8px';
constant ROWS (line 12) | const ROWS = 22;
type StyledColorBlockProps (line 32) | type StyledColorBlockProps = {
type PresetColorPaletteProps (line 43) | type PresetColorPaletteProps = {
FILE: src/components/src/side-panel/layer-panel/color-palette.tsx
type ColorPaletteProps (line 10) | type ColorPaletteProps = BaseComponentProps & {
type PaletteContainerProps (line 30) | type PaletteContainerProps = BaseComponentProps & {
FILE: src/components/src/side-panel/layer-panel/color-range-selector.tsx
type ColorRangeSelectorProps (line 25) | type ColorRangeSelectorProps = {
type PaletteConfigProps (line 33) | type PaletteConfigProps = {
constant ALL_TYPES (line 47) | const ALL_TYPES = Object.values(PALETTE_TYPES).concat(['all']);
constant MAX_STEPS (line 48) | const MAX_STEPS = 20;
constant ALL_STEPS (line 49) | const ALL_STEPS = range(2, MAX_STEPS + 1, 1);
constant CONFIG_SETTINGS (line 81) | const CONFIG_SETTINGS = {
function ColorRangeSelectorFactory (line 113) | function ColorRangeSelectorFactory(
type ColorPaletteItemProps (line 293) | type ColorPaletteItemProps = {
FILE: src/components/src/side-panel/layer-panel/color-scale-selector.tsx
type TippyInstance (line 30) | type TippyInstance = any;
constant HISTOGRAM_BINS (line 32) | const HISTOGRAM_BINS = 30;
type ScaleOption (line 34) | type ScaleOption = {
type OnSelectFunc (line 38) | type OnSelectFunc = (v: string, visConfg?: Record<string, any>) => void;
type ContextProps (line 40) | type ContextProps = ColorBreaksPanelProps;
type ColorScaleSelectorProps (line 42) | type ColorScaleSelectorProps = {
constant POPPER_OPTIONS (line 64) | const POPPER_OPTIONS = {
function hideTippy (line 107) | function hideTippy(tippyInstance) {
function ColorScaleSelectorFactory (line 114) | function ColorScaleSelectorFactory(
FILE: src/components/src/side-panel/layer-panel/color-selector.tsx
type ColorSelectorInputProps (line 19) | type ColorSelectorInputProps = {
type ColorSet (line 25) | type ColorSet = {
type ColorSelectorProps (line 32) | type ColorSelectorProps = {
constant OPACITY_SLIDER_PROPS (line 45) | const OPACITY_SLIDER_PROPS = {
function ColorSelectorFactory (line 101) | function ColorSelectorFactory(
FILE: src/components/src/side-panel/layer-panel/column-selector.tsx
type ColumnSelectorProps (line 13) | type ColumnSelectorProps<FieldOption extends MinimalField> = {
function ColumnSelectorFactory (line 55) | function ColumnSelectorFactory(FieldSelector: ReturnType<typeof FieldSel...
FILE: src/components/src/side-panel/layer-panel/custom-palette.tsx
type ActionIcons (line 54) | type ActionIcons = {
type EditColorMapFunc (line 60) | type EditColorMapFunc = (v: number, i: number) => void;
type SetColorUIFunc (line 61) | type SetColorUIFunc = (newConfig: NestedPartial<ColorUI>) => void;
type EditableColorRangeProps (line 66) | type EditableColorRangeProps = {
type CustomPaletteProps (line 74) | type CustomPaletteProps = {
type CustomPaletteInputProps (line 84) | type CustomPaletteInputProps = {
type SortableItemProps (line 227) | type SortableItemProps = {
type WrappedSortableContainerProps (line 253) | type WrappedSortableContainerProps = {
type DragHandleProps (line 284) | type DragHandleProps = PropsWithChildren<{className?: string}>;
type ColorPaletteInputProps (line 291) | type ColorPaletteInputProps = {
type StyledCategoricalValuePickerProps (line 511) | type StyledCategoricalValuePickerProps = {noBorder: boolean};
type DropdownValuesWrapperProps (line 523) | type DropdownValuesWrapperProps = {width: number};
type SelectedValuesWrapperProps (line 532) | type SelectedValuesWrapperProps = {width: number; height: number};
constant NUMBER_VALUES_IN_TOOLTIP (line 572) | const NUMBER_VALUES_IN_TOOLTIP = 10;
class ModifiedDropdownList (line 581) | class ModifiedDropdownList extends DropdownList {
method constructor (line 582) | constructor(props) {
method render (line 586) | render() {
type CategoricalSelectorProps (line 610) | type CategoricalSelectorProps = {
type CategoricalCustomPaletteInputProps (line 745) | type CategoricalCustomPaletteInputProps = {
function CustomPaletteFactory (line 836) | function CustomPaletteFactory(): React.FC<CustomPaletteProps> {
FILE: src/components/src/side-panel/layer-panel/custom-picker.tsx
type StyledPickerProps (line 16) | type StyledPickerProps = {
constant PRESET_COLORS (line 59) | const PRESET_COLORS = [];
type CustomPickerProps (line 61) | type CustomPickerProps = {
FILE: src/components/src/side-panel/layer-panel/dataset-layer-group.tsx
type DatasetLayerGroupProps (line 11) | type DatasetLayerGroupProps = {
function DatasetLayerGroupFactory (line 27) | function DatasetLayerGroupFactory(
FILE: src/components/src/side-panel/layer-panel/dataset-layer-section.tsx
type DatasetLayerSectionProps (line 14) | type DatasetLayerSectionProps = {
function DatasetLayerSectionFactory (line 37) | function DatasetLayerSectionFactory(
FILE: src/components/src/side-panel/layer-panel/dataset-section.tsx
type AddDataButtonProps (line 14) | type AddDataButtonProps = {
type DatasetSectionProps (line 19) | type DatasetSectionProps = {
function AddDataButtonFactory (line 45) | function AddDataButtonFactory() {
function DatasetSectionFactory (line 64) | function DatasetSectionFactory(
FILE: src/components/src/side-panel/layer-panel/dimension-scale-selector.tsx
type DimensionScaleSelectorProps (line 20) | type DimensionScaleSelectorProps = {
function DimensionScaleSelectorFactory (line 35) | function DimensionScaleSelectorFactory(
FILE: src/components/src/side-panel/layer-panel/how-to-button.tsx
type HowToButtonProps (line 16) | type HowToButtonProps = {
FILE: src/components/src/side-panel/layer-panel/layer-color-selector.tsx
type LayerColorSelectorProps (line 13) | type LayerColorSelectorProps = {
type ArcLayerColorSelectorProps (line 21) | type ArcLayerColorSelectorProps = {
type LayerColorRangeSelectorProps (line 29) | type LayerColorRangeSelectorProps = {
function LayerColorSelectorFactory (line 37) | function LayerColorSelectorFactory(ColorSelector) {
function LayerColorRangeSelectorFactory (line 69) | function LayerColorRangeSelectorFactory(ColorSelector) {
function ArcLayerColorSelectorFactory (line 101) | function ArcLayerColorSelectorFactory(ColorSelector) {
FILE: src/components/src/side-panel/layer-panel/layer-column-config.tsx
type LayerColumnConfigProps (line 20) | type LayerColumnConfigProps<FieldOption extends MinimalField> = {
function getValidFieldPairsSuggestionsForColumn (line 37) | function getValidFieldPairsSuggestionsForColumn(
function LayerColumnConfigFactory (line 56) | function LayerColumnConfigFactory(ColumnSelector: ReturnType<typeof Colu...
FILE: src/components/src/side-panel/layer-panel/layer-column-mode-config.tsx
type FieldOption (line 80) | interface FieldOption extends MinimalField {
type SupportedColumnModeConfig (line 83) | type SupportedColumnModeConfig = {
type ColumnModeConfigProps (line 88) | type ColumnModeConfigProps = {
function ColumnModeConfigFactory (line 103) | function ColumnModeConfigFactory(
type LayerColumnModeConfigProps (line 204) | type LayerColumnModeConfigProps = {
function LayerColumnModeConfigFactory (line 218) | function LayerColumnModeConfigFactory(
FILE: src/components/src/side-panel/layer-panel/layer-config-group.tsx
type LayerConfigGroupLabelProps (line 15) | type LayerConfigGroupLabelProps = {
type LayerConfigGroupProps (line 21) | type LayerConfigGroupProps = {
type StyledConfigGroupHeaderProps (line 79) | interface StyledConfigGroupHeaderProps {
function LayerConfigGroupLabelFactory (line 116) | function LayerConfigGroupLabelFactory(InfoHelper: ReturnType<typeof Info...
function nop (line 151) | function nop() {
function LayerConfigGroupFactory (line 154) | function LayerConfigGroupFactory(
FILE: src/components/src/side-panel/layer-panel/layer-configurator.tsx
type LayerConfiguratorProps (line 40) | type LayerConfiguratorProps = {
type AggregationSelectorProps (line 63) | type AggregationSelectorProps = {
function LayerConfiguratorFactory (line 137) | function LayerConfiguratorFactory(
FILE: src/components/src/side-panel/layer-panel/layer-error-message.tsx
type LayerErrorMessageProps (line 21) | type LayerErrorMessageProps = {
FILE: src/components/src/side-panel/layer-panel/layer-list.tsx
type LayerListProps (line 20) | type LayerListProps = {
type LayerListFactoryDeps (line 32) | type LayerListFactoryDeps = [typeof LayerPanelFactory];
type SortableStyledItemProps (line 43) | interface SortableStyledItemProps {
constant INITIAL_LAYERS_TO_SHOW (line 73) | const INITIAL_LAYERS_TO_SHOW: Layer[] = [];
function LayerListFactory (line 77) | function LayerListFactory(LayerPanel: ReturnType<typeof LayerPanelFactor...
FILE: src/components/src/side-panel/layer-panel/layer-panel-header.tsx
type LayerLabelEditorProps (line 33) | type LayerLabelEditorProps = {
type LayerTitleSectionProps (line 41) | type LayerTitleSectionProps = {
type LayerPanelHeaderProps (line 50) | type LayerPanelHeaderProps = {
type HeaderActionSectionProps (line 82) | type HeaderActionSectionProps = {
type LayerPanelHeaderActionSectionProps (line 86) | type LayerPanelHeaderActionSectionProps = LayerPanelHeaderProps & Header...
type StyledPanelHeaderHiddenActionsProps (line 148) | type StyledPanelHeaderHiddenActionsProps = {
function LayerTitleSectionFactory (line 218) | function LayerTitleSectionFactory() {
function LayerPanelHeaderActionSectionFactory (line 264) | function LayerPanelHeaderActionSectionFactory(
function LayerPanelHeaderFactory (line 394) | function LayerPanelHeaderFactory(
FILE: src/components/src/side-panel/layer-panel/layer-panel.tsx
type LayerPanelProps (line 21) | type LayerPanelProps = {
function LayerPanelFactory (line 65) | function LayerPanelFactory(
FILE: src/components/src/side-panel/layer-panel/layer-type-dropdown-list.tsx
type LayerTypeOption (line 9) | type LayerTypeOption = {
type LayerTypeDropdownListProps (line 16) | type LayerTypeDropdownListProps = {
function LayerTypeDropdownListFactory (line 68) | function LayerTypeDropdownListFactory() {
FILE: src/components/src/side-panel/layer-panel/layer-type-list-item.tsx
type LayerTypeListItemProps (line 13) | type LayerTypeListItemProps = {
type WithThemeProps (line 22) | type WithThemeProps = LayerTypeListItemProps & {theme: Record<string, st...
type LayerTypeListItemType (line 24) | type LayerTypeListItemType = React.FC<LayerTypeListItemProps>;
type StyledListItemProps (line 26) | type StyledListItemProps = {
function LayerTypeListItemFactory (line 71) | function LayerTypeListItemFactory() {
FILE: src/components/src/side-panel/layer-panel/layer-type-selector.tsx
type Option (line 13) | type Option = {
type LayerTypeSelectorProps (line 20) | type LayerTypeSelectorProps = {
function LayerTypeSelectorFactory (line 48) | function LayerTypeSelectorFactory(
FILE: src/components/src/side-panel/layer-panel/radius-by-zoom-input.tsx
type StyledInputRowProps (line 21) | type StyledInputRowProps = {
type StyledTrashProps (line 39) | type StyledTrashProps = {
function stringToNumber (line 101) | function stringToNumber(val) {
type InputRowProps (line 105) | type InputRowProps = {
function insertStop (line 157) | function insertStop(stops: ZoomStops): ZoomStops {
type VisConfigByZoomInputContainerProps (line 181) | type VisConfigByZoomInputContainerProps = {
type Props (line 201) | type Props = {
FILE: src/components/src/side-panel/layer-panel/raster-tile-layer-configurator.tsx
type EOBand (line 49) | type EOBand = StacTypes.Band;
constant STAC_SEARCH_UI_ENABLED (line 51) | const STAC_SEARCH_UI_ENABLED = true;
function findVisConfigItemById (line 113) | function findVisConfigItemById(layer, prop) {
function findItemById (line 117) | function findItemById(layer, options, prop) {
function getBandSelectorOptions (line 128) | function getBandSelectorOptions(stac: CompleteSTACObject): {id?: string;...
function getCategoricalColormapListItem (line 138) | function getCategoricalColormapListItem(categoricalColorMap) {
function isDataSourceColorRangeAvailable (line 154) | function isDataSourceColorRangeAvailable(
function updateColorParamsOnPresetChange (line 185) | function updateColorParamsOnPresetChange(
type RasterTileLayerConfiguratorProps (line 206) | type RasterTileLayerConfiguratorProps = {
function RasterTileLayerConfiguratorFactory (line 219) | function RasterTileLayerConfiguratorFactory(
FILE: src/components/src/side-panel/layer-panel/single-color-palette.tsx
constant MODE (line 16) | const MODE = {
type SingleColorPaletteProps (line 21) | type SingleColorPaletteProps = {
FILE: src/components/src/side-panel/layer-panel/text-label-panel.tsx
type TextLabelPanelProps (line 37) | type TextLabelPanelProps = {
function TextLabelPanelFactory (line 51) | function TextLabelPanelFactory(
FILE: src/components/src/side-panel/layer-panel/vector-tile-layer-configurator.tsx
type GetProps (line 24) | type GetProps<T extends (...args: any[]) => React.FC<any>> = Parameters<...
type Props (line 26) | type Props = {
function VectorTileLayerConfiguratorFactory (line 45) | function VectorTileLayerConfiguratorFactory(
FILE: src/components/src/side-panel/layer-panel/vis-config-by-field-selector.tsx
type VisConfigByFieldSelectorProps (line 14) | type VisConfigByFieldSelectorProps = {
function VisConfigByFieldSelectorFactory (line 29) | function VisConfigByFieldSelectorFactory(
FILE: src/components/src/side-panel/layer-panel/vis-config-slider.tsx
type LazyInputProps (line 15) | type LazyInputProps = {
type CustomInputProps (line 21) | type CustomInputProps = {
type VisConfigSliderProps (line 27) | type VisConfigSliderProps = {
function VisConfigSliderFactory (line 154) | function VisConfigSliderFactory(RangeSlider: ReturnType<typeof RangeSlid...
FILE: src/components/src/side-panel/layer-panel/vis-config-switch.tsx
type VisConfigSwitchProps (line 13) | type VisConfigSwitchProps = {
function VisConfigSwitchFactory (line 32) | function VisConfigSwitchFactory(InfoHelper: ReturnType<typeof InfoHelper...
FILE: src/components/src/side-panel/map-manager.tsx
type MapManagerProps (line 18) | type MapManagerProps = {
function MapManagerFactory (line 33) | function MapManagerFactory(
FILE: src/components/src/side-panel/map-style-panel/map-layer-group-color-picker.tsx
type LayerGroupColorPickerProps (line 28) | type LayerGroupColorPickerProps = {
function LayerGroupColorPickerFactory (line 38) | function LayerGroupColorPickerFactory() {
FILE: src/components/src/side-panel/map-style-panel/map-layer-group-item.tsx
type LayerGroupItemActionIcons (line 35) | type LayerGroupItemActionIcons = {
type LayerGroupItemProps (line 41) | type LayerGroupItemProps = {
function LayerGroupItemFactory (line 57) | function LayerGroupItemFactory(LayerGroupColorPicker) {
FILE: src/components/src/side-panel/map-style-panel/map-layer-selector.tsx
function noop (line 26) | function noop() {
type LayerGroupSelectorProps (line 34) | type LayerGroupSelectorProps = {
function LayerGroupSelectorFactory (line 48) | function LayerGroupSelectorFactory(
FILE: src/components/src/side-panel/map-style-panel/map-style-selector.tsx
type StyledMapDropdownProps (line 26) | type StyledMapDropdownProps = StyledPanelHeaderProps & {hasCallout: bool...
type MapStyleSelectorProps (line 76) | type MapStyleSelectorProps = {
function MapStyleSelectorFactory (line 95) | function MapStyleSelectorFactory(PanelHeaderAction: ReturnType<typeof Pa...
FILE: src/components/src/side-panel/panel-header-action.tsx
type PanelHeaderActionIcon (line 13) | type PanelHeaderActionIcon = ComponentType<Partial<BaseProps>>;
type PanelHeaderActionProps (line 15) | interface PanelHeaderActionProps {
type HeaderActionWrapperProps (line 29) | type HeaderActionWrapperProps = {
type HeaderActionWrapperCssProps (line 36) | type HeaderActionWrapperCssProps = {$testId?: string} & HeaderActionWrap...
function PanelHeaderActionFactory (line 64) | function PanelHeaderActionFactory(): React.FC<PanelHeaderActionProps> {
FILE: src/components/src/side-panel/panel-header.tsx
type StyledPanelActionProps (line 18) | type StyledPanelActionProps = {
type ActionItem (line 22) | type ActionItem = {
type PanelActionProps (line 34) | type PanelActionProps = {
type PanelHeaderDropdownProps (line 39) | type PanelHeaderDropdownProps = {
type LogoComponentProps (line 46) | type LogoComponentProps = {
type DropdownCallbacks (line 52) | type DropdownCallbacks = {
type Item (line 64) | type Item = {
type DropdownComponentProps (line 71) | type DropdownComponentProps = {
type PanelHeaderProps (line 77) | type PanelHeaderProps = {
function PanelHeaderFactory (line 306) | function PanelHeaderFactory(
FILE: src/components/src/side-panel/panel-tab.tsx
type StyledPanelTabProps (line 10) | type StyledPanelTabProps = {
type PanelItem (line 14) | type PanelItem = {
type PanelTabProps (line 20) | type PanelTabProps = {
function PanelTabFactory (line 47) | function PanelTabFactory() {
FILE: src/components/src/side-panel/panel-title.tsx
type PanelTitleProps (line 28) | type PanelTitleProps = PropsWithChildren<{
FILE: src/components/src/side-panel/panel-toggle.tsx
type PanelToggleProps (line 9) | type PanelToggleProps = {
function PanelToggleFactory (line 27) | function PanelToggleFactory(PanelTab: ReturnType<typeof PanelTabFactory>) {
FILE: src/components/src/side-panel/panel-view-list-toggle.tsx
type ToggleOptionProps (line 13) | type ToggleOptionProps = {
type PanelViewListToggleProps (line 19) | type PanelViewListToggleProps = {
function ToggleOptionFactory (line 47) | function ToggleOptionFactory() {
constant TOGGLE_OPTIONS (line 67) | const TOGGLE_OPTIONS = [
function PanelViewListToggleFactory (line 82) | function PanelViewListToggleFactory(ToggleOption: ReturnType<typeof Togg...
FILE: src/components/src/side-panel/side-bar.tsx
type CollapseButtonProps (line 8) | type CollapseButtonProps = {
type SideBarProps (line 13) | type SideBarProps = {
function SidebarFactory (line 90) | function SidebarFactory(CollapseButton: ReturnType<typeof CollapseButton...
FILE: src/components/src/types.ts
type BaseComponentProps (line 17) | type BaseComponentProps = PropsWithChildren<HTMLAttributes<unknown>>;
type SidePanelItem (line 19) | type SidePanelItem = {
type SidePanelProps (line 26) | type SidePanelProps = {
FILE: src/constants/babel.config.js
constant PRESETS (line 6) | const PRESETS = ['@babel/preset-env', '@babel/preset-react', '@babel/pre...
constant PLUGINS (line 7) | const PLUGINS = [
constant ENV (line 33) | const ENV = {
FILE: src/constants/src/color-palettes.ts
type GetColors (line 11) | type GetColors = (steps: number) => HexColor[];
type GetLinear (line 13) | type GetLinear = () => (n: number) => string;
type CategoricalPalette (line 15) | type CategoricalPalette = {
type SequentialPalette (line 26) | type SequentialPalette = {
type ColorPalette (line 36) | type ColorPalette = CategoricalPalette | SequentialPalette;
constant CATEGORIES (line 38) | const CATEGORIES = {
constant PALETTE_TYPES (line 45) | const PALETTE_TYPES: {
constant COLORBREWER_SCHEME (line 57) | const COLORBREWER_SCHEME = {
constant COLOR_BLIND_SAFE_MAP (line 94) | const COLOR_BLIND_SAFE_MAP = {
constant D3_COLOR_CHROMATIC_SCHEME (line 147) | const D3_COLOR_CHROMATIC_SCHEME = {
function buildCategoricalPalette (line 381) | function buildCategoricalPalette({
function _colorToUppercase (line 423) | function _colorToUppercase(c) {
function buildSequentialPalette (line 430) | function buildSequentialPalette({name, type, category}) {
function buildCustomPalette (line 452) | function buildCustomPalette({
function buildPaletteBySchemeGroups (line 540) | function buildPaletteBySchemeGroups(
constant COLORBREWER_PALETTES (line 561) | const COLORBREWER_PALETTES = buildPaletteBySchemeGroups(COLORBREWER_SCHE...
constant D3_COLOR_PALETTES (line 562) | const D3_COLOR_PALETTES = buildPaletteBySchemeGroups(D3_COLOR_CHROMATIC_...
constant BRANDED_PALETTES (line 563) | const BRANDED_PALETTES: ColorPalette[] = [
constant KEPLER_COLOR_PALETTES (line 591) | const KEPLER_COLOR_PALETTES: ColorPalette[] = [
function colorPaletteToColorRange (line 600) | function colorPaletteToColorRange(
FILE: src/constants/src/colors-by-theme.ts
constant COLORS (line 7) | const COLORS: {
FILE: src/constants/src/dataset.ts
type DatasetType (line 4) | enum DatasetType {
type RemoteTileFormat (line 11) | enum RemoteTileFormat {
type PMTilesType (line 17) | enum PMTilesType {
constant REMOTE_TILE (line 22) | const REMOTE_TILE = 'remote';
type VectorTileDatasetMetadata (line 24) | type VectorTileDatasetMetadata = {
type RasterTileLocalMetadata (line 37) | type RasterTileLocalMetadata = {
type RasterTileRemoteMetadata (line 51) | type RasterTileRemoteMetadata = {
type RasterTileType (line 55) | enum RasterTileType {
type RasterTileMetadataSourceType (line 60) | type RasterTileMetadataSourceType = {
type RasterTileDatasetMetadata (line 67) | type RasterTileDatasetMetadata = (RasterTileLocalMetadata | RasterTileRe...
type WMSDatasetMetadata (line 70) | type WMSDatasetMetadata = {
FILE: src/constants/src/default-settings.ts
constant ACTION_PREFIX (line 26) | const ACTION_PREFIX = '@@kepler.gl/';
constant KEPLER_UNFOLDED_BUCKET (line 27) | const KEPLER_UNFOLDED_BUCKET = 'https://studio-public-data.foursquare.co...
constant BASEMAP_ICON_PREFIX (line 28) | const BASEMAP_ICON_PREFIX = `geodude`;
constant DEFAULT_MAPBOX_API_URL (line 29) | const DEFAULT_MAPBOX_API_URL = 'https://api.mapbox.com';
constant TRANSITION_DURATION (line 30) | const TRANSITION_DURATION = 0;
constant DATA_TABLE_ID (line 39) | const DATA_TABLE_ID = 'dataTable';
constant DELETE_DATA_ID (line 46) | const DELETE_DATA_ID = 'deleteData';
constant ADD_DATA_ID (line 53) | const ADD_DATA_ID = 'addData';
constant EXPORT_IMAGE_ID (line 60) | const EXPORT_IMAGE_ID = 'exportImage';
constant EXPORT_DATA_ID (line 67) | const EXPORT_DATA_ID = 'exportData';
constant ADD_MAP_STYLE_ID (line 74) | const ADD_MAP_STYLE_ID = 'addMapStyle';
constant EXPORT_MAP_ID (line 81) | const EXPORT_MAP_ID = 'exportMap';
constant SAVE_MAP_ID (line 88) | const SAVE_MAP_ID = 'saveMap';
constant OVERWRITE_MAP_ID (line 95) | const OVERWRITE_MAP_ID = 'overwriteMap';
constant SHARE_MAP_ID (line 102) | const SHARE_MAP_ID = 'shareMap';
constant KEPLER_GL_NAME (line 104) | const KEPLER_GL_NAME = 'kepler.gl';
constant KEPLER_GL_VERSION (line 110) | const KEPLER_GL_VERSION = '__PACKAGE_VERSION__';
constant KEPLER_GL_WEBSITE (line 111) | const KEPLER_GL_WEBSITE = 'http://kepler.gl/';
constant DIMENSIONS (line 113) | const DIMENSIONS = {
constant THEME (line 142) | const THEME = keyMirror({
constant SIDEBAR_PANELS (line 148) | const SIDEBAR_PANELS = [
constant PANEL_VIEW_TOGGLES (line 171) | const PANEL_VIEW_TOGGLES = keyMirror({
constant PANELS (line 177) | const PANELS = SIDEBAR_PANELS;
constant DEFAULT_BLDG_COLOR (line 181) | const DEFAULT_BLDG_COLOR = '#D1CEC7';
constant DEFAULT_BACKGROUND_COLOR (line 183) | const DEFAULT_BACKGROUND_COLOR = '#000000';
constant BASE_MAP_BACKGROUND_LAYER_IDS (line 186) | const BASE_MAP_BACKGROUND_LAYER_IDS = ['background', 'bg', 'land', 'wate...
constant BACKGROUND_LAYER_GROUP_SLUG (line 188) | const BACKGROUND_LAYER_GROUP_SLUG = 'Background';
constant THREE_D_BUILDING_LAYER_GROUP_SLUG (line 190) | const THREE_D_BUILDING_LAYER_GROUP_SLUG = '3d building';
type DEFAULT_LAYER_GROUP (line 192) | type DEFAULT_LAYER_GROUP = {
constant BACKGROUND_LAYER_GROUP (line 201) | const BACKGROUND_LAYER_GROUP: DEFAULT_LAYER_GROUP = {
constant DEFAULT_LAYER_GROUPS (line 210) | const DEFAULT_LAYER_GROUPS: DEFAULT_LAYER_GROUP[] = [
constant BASE_MAP_COLOR_MODES (line 269) | const BASE_MAP_COLOR_MODES = keyMirror({
constant NO_MAP_ID (line 275) | const NO_MAP_ID = 'no_map';
constant EMPTY_MAPBOX_STYLE (line 279) | const EMPTY_MAPBOX_STYLE = {
constant MAP_LIB_OPTIONS (line 285) | const MAP_LIB_OPTIONS = {
type BaseMapLibraryType (line 290) | type BaseMapLibraryType = 'mapbox' | 'maplibre';
constant NO_BASEMAP_ICON (line 292) | const NO_BASEMAP_ICON = `${BASEMAP_ICON_PREFIX}/NO_BASEMAP.png`;
constant DEFAULT_BASE_MAP_STYLE (line 294) | const DEFAULT_BASE_MAP_STYLE = 'dark-matter';
type DefaultBaseMapStyle (line 296) | type DefaultBaseMapStyle = Merge<
constant DEFAULT_NO_BASEMAP_STYLE (line 303) | const DEFAULT_NO_BASEMAP_STYLE: DefaultBaseMapStyle = {
constant DEFAULT_MAPBOX_STYLES (line 313) | const DEFAULT_MAPBOX_STYLES: DefaultBaseMapStyle[] = [
constant DEFAULT_MAPBOX_SATELITE_STYLES (line 352) | const DEFAULT_MAPBOX_SATELITE_STYLES: DefaultBaseMapStyle[] = [
constant DEFAULT_MAPLIBRE_STYLES (line 363) | const DEFAULT_MAPLIBRE_STYLES: DefaultBaseMapStyle[] = [
constant DEFAULT_MAP_STYLES (line 393) | const DEFAULT_MAP_STYLES = [
constant GEOJSON_FIELDS (line 400) | const GEOJSON_FIELDS = {
constant ICON_FIELDS (line 404) | const ICON_FIELDS = {
constant TRIP_POINT_FIELDS (line 408) | const TRIP_POINT_FIELDS: [string, string][] = [
constant ALTITUDE_FIELDS (line 415) | const ALTITUDE_FIELDS = ['alt', 'altitude'];
constant TRIP_ARC_FIELDS (line 416) | const TRIP_ARC_FIELDS = {
constant FILTER_TYPES (line 423) | const FILTER_TYPES = keyMirror({
constant FILTER_VIEW_TYPES (line 432) | const FILTER_VIEW_TYPES = keyMirror({
constant DEFAULT_FILTER_VIEW_TYPE (line 438) | const DEFAULT_FILTER_VIEW_TYPE = FILTER_VIEW_TYPES.side;
type SCALE_TYPES_DEF (line 440) | type SCALE_TYPES_DEF = {
constant SCALE_TYPES (line 453) | const SCALE_TYPES: SCALE_TYPES_DEF = keyMirror({
constant SCALE_TYPE_NAMES (line 466) | const SCALE_TYPE_NAMES: {[key in keyof SCALE_TYPES_DEF]: string} = {
type SCALE_FUNC_TYPE (line 479) | type SCALE_FUNC_TYPE = {
constant SCALE_FUNC (line 483) | const SCALE_FUNC = {
constant ALL_FIELD_TYPES (line 496) | const ALL_FIELD_TYPES = keyMirror({
constant SORT_ORDER (line 512) | const SORT_ORDER = keyMirror({
constant TABLE_OPTION (line 518) | const TABLE_OPTION = keyMirror({
type TableOption (line 528) | type TableOption = {
constant TABLE_OPTION_LIST (line 534) | const TABLE_OPTION_LIST: TableOption[] = [
constant YELLOW (line 574) | const YELLOW = '248, 194, 28';
constant PINK (line 575) | const PINK = '242, 152, 163';
constant PURPLE (line 576) | const PURPLE = '160, 106, 206';
constant BLUE (line 577) | const BLUE = '140, 210, 205';
constant BLUE2 (line 578) | const BLUE2 = '106, 160, 206';
constant BLUE3 (line 579) | const BLUE3 = '0, 172, 237';
constant GREEN (line 580) | const GREEN = '106, 160, 56';
constant GREEN2 (line 581) | const GREEN2 = '74, 165, 150';
constant RED (line 582) | const RED = '237, 88, 106';
constant ORANGE (line 583) | const ORANGE = '231, 110, 58';
constant FIELD_TYPE_DISPLAY (line 585) | const FIELD_TYPE_DISPLAY = {
constant FIELD_COLORS (line 637) | const FIELD_COLORS = {
constant HIGHLIGH_COLOR_3D (line 640) | const HIGHLIGH_COLOR_3D: RGBAColor = [255, 255, 255, 60];
constant CHANNEL_SCALES (line 641) | const CHANNEL_SCALES = keyMirror({
constant AGGREGATION_TYPES (line 649) | const AGGREGATION_TYPES: {
constant AGGREGATION_TYPE_OPTIONS (line 679) | const AGGREGATION_TYPE_OPTIONS: {id: string; label: string}[] = Object.e...
constant DEFAULT_AGGREGATION_COLOR_SCALES (line 699) | const DEFAULT_AGGREGATION_COLOR_SCALES = [
constant DEFAULT_AGGREGATION (line 762) | const DEFAULT_AGGREGATION = {
constant FIELD_OPTS (line 774) | const FIELD_OPTS = {
constant CHANNEL_SCALE_SUPPORTED_FIELDS (line 910) | const CHANNEL_SCALE_SUPPORTED_FIELDS = Object.keys(CHANNEL_SCALES).reduce(
constant DEFAULT_LAYER_COLOR (line 920) | const DEFAULT_LAYER_COLOR = {
constant DEFAULT_LAYER_COLOR_PALETTE (line 927) | const DEFAULT_LAYER_COLOR_PALETTE = 'Global Warming';
constant DEFAULT_LAYER_COLOR_PALETTE_STEPS (line 928) | const DEFAULT_LAYER_COLOR_PALETTE_STEPS = 6;
constant DEFAULT_TOOLTIP_FIELDS (line 931) | const DEFAULT_TOOLTIP_FIELDS: any[] = [];
constant NO_VALUE_COLOR (line 933) | const NO_VALUE_COLOR: RGBAColor = [0, 0, 0, 0];
constant DEFAULT_PICKING_RADIUS (line 935) | const DEFAULT_PICKING_RADIUS = 3;
constant OVERLAY_BLENDINGS (line 937) | const OVERLAY_BLENDINGS = {
constant LAYER_BLENDINGS (line 952) | const LAYER_BLENDINGS = {
constant MAX_DEFAULT_TOOLTIPS (line 972) | const MAX_DEFAULT_TOOLTIPS = 5;
constant RESOLUTIONS (line 974) | const RESOLUTIONS = keyMirror({
constant EXPORT_IMG_RATIOS (line 979) | const EXPORT_IMG_RATIOS = keyMirror({
type ImageRatioOption (line 986) | type ImageRatioOption = {
constant EXPORT_IMG_RATIO_OPTIONS (line 1021) | const EXPORT_IMG_RATIO_OPTIONS: ReadonlyArray<ImageRatioOption> = [
type ExportResolutionOption (line 1028) | type ExportResolutionOption =
type ImageResolutionOption (line 1039) | type ImageResolutionOption = {
constant EXPORT_IMG_RESOLUTION_OPTIONS (line 1126) | const EXPORT_IMG_RESOLUTION_OPTIONS: ReadonlyArray<ImageResolutionOption...
constant EXPORT_DATA_TYPE (line 1139) | const EXPORT_DATA_TYPE = keyMirror({
constant EXPORT_DATA_TYPE_OPTIONS (line 1147) | const EXPORT_DATA_TYPE_OPTIONS = [
constant EXPORT_MAP_FORMATS (line 1176) | const EXPORT_MAP_FORMATS = keyMirror({
constant EXPORT_HTML_MAP_MODES (line 1181) | const EXPORT_HTML_MAP_MODES = keyMirror({
constant EXPORT_MAP_FORMAT_OPTIONS (line 1187) | const EXPORT_MAP_FORMAT_OPTIONS = Object.entries(EXPORT_MAP_FORMATS).map(
function getHTMLMapModeTileUrl (line 1195) | function getHTMLMapModeTileUrl(mode: string): string {
constant EXPORT_HTML_MAP_MODE_OPTIONS (line 1199) | const EXPORT_HTML_MAP_MODE_OPTIONS = Object.entries(EXPORT_HTML_MAP_MODE...
constant DEFAULT_UUID_COUNT (line 1208) | const DEFAULT_UUID_COUNT = 6;
constant DEFAULT_NOTIFICATION_MESSAGE (line 1210) | const DEFAULT_NOTIFICATION_MESSAGE = 'MESSAGE_NOT_PROVIDED';
constant DEFAULT_NOTIFICATION_TYPES (line 1212) | const DEFAULT_NOTIFICATION_TYPES = keyMirror({
constant DEFAULT_NOTIFICATION_TOPICS (line 1219) | const DEFAULT_NOTIFICATION_TOPICS = keyMirror({
constant THROTTLE_NOTIFICATION_TIME (line 1225) | const THROTTLE_NOTIFICATION_TIME = 330;
constant BASE_SPEED (line 1228) | const BASE_SPEED = 600;
constant FPS (line 1229) | const FPS = 60;
constant ANIMATION_WINDOW (line 1253) | const ANIMATION_WINDOW = keyMirror({
constant DEFAULT_TIME_FORMAT (line 1259) | const DEFAULT_TIME_FORMAT = 'MM/DD/YY HH:mm:ssa';
constant SPEED_CONTROL_RANGE (line 1260) | const SPEED_CONTROL_RANGE: [number, number] = [0, 10];
constant SPEED_CONTROL_STEP (line 1261) | const SPEED_CONTROL_STEP = 0.001;
constant GEOCODER_DATASET_NAME (line 1264) | const GEOCODER_DATASET_NAME = 'geocoder_dataset';
constant GEOCODER_LAYER_ID (line 1265) | const GEOCODER_LAYER_ID = 'geocoder_layer';
constant GEOCODER_GEO_OFFSET (line 1266) | const GEOCODER_GEO_OFFSET = 0.05;
constant GEOCODER_ICON_COLOR (line 1267) | const GEOCODER_ICON_COLOR: [number, number, number] = [255, 0, 0];
constant GEOCODER_ICON_SIZE (line 1268) | const GEOCODER_ICON_SIZE = 80;
constant EDITOR_LAYER_ID (line 1271) | const EDITOR_LAYER_ID = 'kepler_editor_layer';
constant EDITOR_LAYER_PICKING_RADIUS (line 1272) | const EDITOR_LAYER_PICKING_RADIUS = 6;
constant EDITOR_MODES (line 1273) | const EDITOR_MODES = {
constant PLOT_TYPES (line 1279) | const PLOT_TYPES = keyMirror({
constant INIT_FILTER_ITEMS_IN_DROPDOWN (line 1285) | const INIT_FILTER_ITEMS_IN_DROPDOWN = 100;
constant MAX_GPU_FILTERS (line 1291) | const MAX_GPU_FILTERS = 4;
constant MAP_THUMBNAIL_DIMENSION (line 1292) | const MAP_THUMBNAIL_DIMENSION = {
constant MAP_INFO_CHARACTER (line 1297) | const MAP_INFO_CHARACTER = {
constant LOADING_METHODS (line 1303) | const LOADING_METHODS = keyMirror({
constant DEFAULT_FEATURE_FLAGS (line 1309) | const DEFAULT_FEATURE_FLAGS = {};
constant DATASET_FORMATS (line 1311) | const DATASET_FORMATS = keyMirror({
constant MAP_CONTROLS (line 1320) | const MAP_CONTROLS = keyMirror({
constant PROJECTED_PIXEL_SIZE_MULTIPLIER (line 1336) | const PROJECTED_PIXEL_SIZE_MULTIPLIER = 2 / 3;
constant TEXT_OUTLINE_MULTIPLIER (line 1341) | const TEXT_OUTLINE_MULTIPLIER = 5;
constant DEFAULT_TIMEZONE (line 1364) | const DEFAULT_TIMEZONE = 'UTC';
constant DEFAULT_POST_PROCESSING_EFFECT_TYPE (line 1365) | const DEFAULT_POST_PROCESSING_EFFECT_TYPE = 'ink';
constant DEFAULT_LIGHT_COLOR (line 1367) | const DEFAULT_LIGHT_COLOR: [number, number, number] = [255, 255, 255];
constant DEFAULT_LIGHT_INTENSITY (line 1368) | const DEFAULT_LIGHT_INTENSITY = 1;
constant DEFAULT_SHADOW_INTENSITY (line 1369) | const DEFAULT_SHADOW_INTENSITY = 0.5;
constant DEFAULT_SHADOW_COLOR (line 1370) | const DEFAULT_SHADOW_COLOR: [number, number, number] = [0, 0, 0];
constant LIGHT_AND_SHADOW_EFFECT_TIME_MODES (line 1372) | const LIGHT_AND_SHADOW_EFFECT_TIME_MODES = {
type LightAndShadowEffectTimeMode (line 1377) | type LightAndShadowEffectTimeMode = 'pick' | 'current' | 'animation';
constant DEFAULT_LIGHT_AND_SHADOW_PROPS (line 1378) | const DEFAULT_LIGHT_AND_SHADOW_PROPS: {
constant LIGHT_AND_SHADOW_EFFECT (line 1398) | const LIGHT_AND_SHADOW_EFFECT: EffectDescription = {
constant POSTPROCESSING_EFFECTS (line 1412) | const POSTPROCESSING_EFFECTS: {[key: string]: EffectDescription} = {
constant EFFECT_DESCRIPTIONS (line 1608) | const EFFECT_DESCRIPTIONS: EffectDescription[] = [
type EffectType (line 1613) | type EffectType =
constant SYNC_TIMELINE_MODES (line 1631) | const SYNC_TIMELINE_MODES: Record<string, SyncTimelineMode> = {
constant GEOARROW_METADATA_KEY (line 1636) | const GEOARROW_METADATA_KEY = 'ARROW:extension:name';
type GEOARROW_EXTENSIONS (line 1641) | enum GEOARROW_EXTENSIONS {
constant LOADERS_CDN_VERSION (line 1651) | const LOADERS_CDN_VERSION = '4.3.2';
constant LOADERS_CDN_URL (line 1652) | const LOADERS_CDN_URL = 'https://unpkg.com/@loaders.gl';
FILE: src/constants/src/layers.ts
type AggregationTypes (line 21) | type AggregationTypes = keyof typeof AGGREGATION_TYPES;
constant PROPERTY_GROUPS (line 23) | const PROPERTY_GROUPS = keyMirror({
constant DEFAULT_LAYER_OPACITY (line 36) | const DEFAULT_LAYER_OPACITY = 0.8;
constant DEFAULT_HIGHLIGHT_COLOR (line 37) | const DEFAULT_HIGHLIGHT_COLOR: RGBAColor = [252, 242, 26, 255];
constant DEFAULT_LAYER_LABEL (line 38) | const DEFAULT_LAYER_LABEL = 'new layer';
constant DEFAULT_TEXT_LABEL (line 40) | const DEFAULT_TEXT_LABEL: LayerTextLabel = {
constant DEFAULT_COLOR_PALETTE (line 53) | const DEFAULT_COLOR_PALETTE = KEPLER_COLOR_PALETTES.find(
constant DEFAULT_COLOR_RANGE (line 57) | const DEFAULT_COLOR_RANGE = colorPaletteToColorRange(DEFAULT_COLOR_PALET...
constant DEFAULT_CUSTOM_PALETTE (line 62) | const DEFAULT_CUSTOM_PALETTE: ColorRange = {
constant UNKNOWN_COLOR_KEY (line 69) | const UNKNOWN_COLOR_KEY = '__unknownColor__';
constant DEFAULT_COLOR_UI (line 71) | const DEFAULT_COLOR_UI: ColorUI = {
constant LAYER_VIS_CONFIGS (line 91) | const LAYER_VIS_CONFIGS: LayerVisConfigSettings = {
constant LAYER_TEXT_CONFIGS (line 510) | const LAYER_TEXT_CONFIGS: LayerTextConfig = {
constant LAYER_TYPES (line 542) | const LAYER_TYPES = keyMirror({
constant EDITOR_AVAILABLE_LAYERS (line 561) | const EDITOR_AVAILABLE_LAYERS: string[] = [
FILE: src/constants/src/plot.ts
constant PLOT_TYPES (line 6) | const PLOT_TYPES = keyMirror({
FILE: src/constants/src/time.ts
type IntervalOption (line 20) | interface IntervalOption {
type TimeAggregation (line 25) | interface TimeAggregation {
type TimeIntervals (line 30) | interface TimeIntervals {
type Durations (line 41) | interface Durations {
type TimeInterval (line 52) | type TimeInterval = string;
type TickInterval (line 54) | interface TickInterval {
type TickIntervals (line 60) | interface TickIntervals {
type Interval (line 64) | interface Interval {
type AnimationType (line 85) | interface AnimationType {
type AnimationWindow (line 90) | type AnimationWindow = any;
constant DURATIONS (line 102) | const DURATIONS: Durations = {
constant TIME_INTERVALS (line 114) | const TIME_INTERVALS: TimeIntervals = {
constant INTERVAL (line 125) | const INTERVAL: Interval = keyMirror({
constant WOW (line 147) | const WOW: {
constant INTERVAL_OPTIONS (line 154) | const INTERVAL_OPTIONS: IntervalOption[] = Object.keys(INTERVAL).map(id ...
constant TICK_INTERVALS (line 160) | const TICK_INTERVALS: TickIntervals = {
constant PLOT_TYPE_OPTIONS (line 182) | const PLOT_TYPE_OPTIONS = {
constant BINS_LARGE (line 195) | const BINS_LARGE = 100;
constant BINS (line 196) | const BINS = 30;
constant TIME_AGGREGATION (line 198) | const TIME_AGGREGATION: TimeAggregation[] = [
constant ANIMATION_TYPE (line 225) | const ANIMATION_TYPE: AnimationType = keyMirror({
FILE: src/constants/src/tooltip.ts
constant TOOLTIP_FORMAT_TYPES (line 6) | const TOOLTIP_FORMAT_TYPES = {
constant TOOLTIP_KEY (line 15) | const TOOLTIP_KEY = 'format';
type TooltipFormat (line 17) | type TooltipFormat = {
constant TOOLTIP_FORMATS (line 24) | const TOOLTIP_FORMATS = {
constant COMPARE_TYPES (line 223) | const COMPARE_TYPES = {
FILE: src/constants/src/user-feedbacks.ts
constant MISSING_MAPBOX_TOKEN (line 4) | const MISSING_MAPBOX_TOKEN =
constant IMAGE_EXPORT_ERRORS (line 8) | const IMAGE_EXPORT_ERRORS = {
FILE: src/constants/src/user-guides.ts
constant USER_GUIDE_DOC (line 4) | const USER_GUIDE_DOC = 'https://docs.kepler.gl/docs/user-guides';
constant ACTIONS_DOC (line 5) | const ACTIONS_DOC = 'https://docs.kepler.gl/docs/api-reference/actions/a...
constant API_REFERENCE_DOC (line 6) | const API_REFERENCE_DOC = 'https://docs.kepler.gl/docs/api-reference';
constant EXPORT_HTML_MAP_DOC (line 8) | const EXPORT_HTML_MAP_DOC = `${USER_GUIDE_DOC}/k-save-and-export`;
constant ADD_DATA_TO_MAP_DOC (line 9) | const ADD_DATA_TO_MAP_DOC = `${ACTIONS_DOC}#adddatatomap`;
constant MAPBOX_ACCESS_TOKEN (line 10) | const MAPBOX_ACCESS_TOKEN = 'https://docs.mapbox.com/help/how-mapbox-wor...
constant EXPORT_HTML_MAP_MODES_DOC (line 12) | const EXPORT_HTML_MAP_MODES_DOC = `${USER_GUIDE_DOC}/k-save-and-export#e...
constant GUIDES_FILE_FORMAT_DOC (line 13) | const GUIDES_FILE_FORMAT_DOC = `${USER_GUIDE_DOC}/b-kepler-gl-workflow/a...
constant BUG_REPORT_LINK (line 14) | const BUG_REPORT_LINK =
FILE: src/constants/webpack/umd.js
constant SRC_DIR (line 10) | const SRC_DIR = resolve(__dirname, '../src');
constant OUTPUT_DIR (line 11) | const OUTPUT_DIR = resolve(__d
Copy disabled (too large)
Download .json
Condensed preview — 1370 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (10,139K chars).
[
{
"path": ".dockerignore",
"chars": 55,
"preview": "dist/\n.venv/\n.conda/\nnode_modules/\n__pycache__/\nbuild/\n"
},
{
"path": ".editorconfig",
"chars": 188,
"preview": "# EditorConfig: http://editorconfig.org\n\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset "
},
{
"path": ".eslintrc.js",
"chars": 2655,
"preview": "module.exports = {\n env: {\n es6: true,\n browser: true,\n node: true,\n 'jest/globals': true\n },\n globals: {"
},
{
"path": ".github/ISSUE_TEMPLATE/bug-report--jupyter-widget.md",
"chars": 714,
"preview": "---\nname: 'Bug report: Jupyter widget'\nabout: Report Bug for keplergl Jupyter widget\ntitle: \"[Bug][Jupyter Widget]\"\nlabe"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 840,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: \"[Bug]\"\nlabels: bug\nassignees: ''\n\n---\n\n**Describe"
},
{
"path": ".github/ISSUE_TEMPLATE/feature-request--jupyter-widget.md",
"chars": 638,
"preview": "---\nname: 'Feature request: Jupyter widget'\nabout: Suggest an idea for kepler.gl Jupyter Widget\ntitle: ''\nlabels: jupyte"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 600,
"preview": "---\nname: Feature request\nabout: Suggest an idea for kepler.gl\ntitle: ''\nlabels: ''\nassignees: heshan0131\n\n---\n\n**Is you"
},
{
"path": ".github/SECURITY.md",
"chars": 1077,
"preview": "# Security Policy\n\n## Supported Versions\n\nSecurity updates are applied only to the latest release.\n\n## Reporting a Vulne"
},
{
"path": ".github/workflows/build-publish-pypi.yml",
"chars": 3035,
"preview": "name: Build and Publish KeplerGL Python Package\n\non:\n push:\n workflow_dispatch:\n inputs:\n prerelease:\n "
},
{
"path": ".github/workflows/npmpublish.yml",
"chars": 565,
"preview": "name: Node.js Package\n\non:\n release:\n types: [created]\n\njobs:\n publish-npm:\n runs-on: ubuntu-latest\n\n env:\n "
},
{
"path": ".github/workflows/test.yml",
"chars": 1085,
"preview": "# This workflow will do a clean install of node dependencies, build the source code and run tests across different versi"
},
{
"path": ".gitignore",
"chars": 544,
"preview": "node_modules/\n*/**/node_modules/\ncoverage/\n*-coverage/\n.nyc_output/\ndist/\nbuild/\numd/\n*/**/dist/\n\n__pycache__/\n.pytest_c"
},
{
"path": ".nvmrc",
"chars": 8,
"preview": "18.18.2\n"
},
{
"path": ".prettierrc.js",
"chars": 233,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nmodule.exports = {\n bracketSpacing:"
},
{
"path": ".stylelintrc",
"chars": 271,
"preview": "\n{\n \"processors\": [\n \"stylelint-processor-styled-components\"\n ],\n \"extends\": [\n \"stylelint-config-recommended\","
},
{
"path": ".yarnrc.yml",
"chars": 171,
"preview": "# https://yarnpkg.com/configuration/yarnrc\nnodeLinker: node-modules\n# Define the registry to use when fetching packages."
},
{
"path": "CHANGELOG.md",
"chars": 96009,
"preview": "# Change Log\n\nAll notable changes to kepler.gl will be documented in this file.\n\n<!--\nEach version should:\n List its re"
},
{
"path": "FILE-HEADER",
"chars": 76,
"preview": "SPDX-License-Identifier: MIT\nCopyright contributors to the kepler.gl project"
},
{
"path": "LICENSE",
"chars": 1072,
"preview": "Copyright contributors to the kepler.gl project\n\nPermission is hereby granted, free of charge, to any person obtaining a"
},
{
"path": "README.md",
"chars": 25838,
"preview": "<p align=\"right\">\n <a href=\"https://npmjs.org/package/kepler.gl\">\n <img src=\"https://img.shields.io/npm/v/kepler.gl."
},
{
"path": "SUMMARY.md",
"chars": 5227,
"preview": "# Table of contents\n\n* [Welcome](README.md)\n* [What's new?](docs/release-notes.md)\n* [Docs](docs/README.md)\n * [User gu"
},
{
"path": "TODO.md",
"chars": 577,
"preview": "# TODO\n\n### Bugs\n- Time playback slider sticking out after resize\n- Heatmap frozen\n\n### Refactor Tasks\n- Refactor Layer "
},
{
"path": "UPGRADE-GUIDE.md",
"chars": 4675,
"preview": "# Upgrade Guide\n\n## Table of Content\n\n- [v2.3 to v2.4](#upgrade-from-v23-to-v24)\n\n- [v2.2 to v2.3](#upgrade-from-v22-to-"
},
{
"path": "babel-register.js",
"chars": 1291,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nconst forceTranspile = [\n // ESM li"
},
{
"path": "babel.config.js",
"chars": 2434,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nconst {resolve} = require('path');\nc"
},
{
"path": "bindings/kepler.gl-jupyter/.gitignore",
"chars": 359,
"preview": "*.egg-info/\n*.py[cod]\n*/__pycache__/\n.ipynb_checkpoints/\n\ndist/\n# labextension build\nkeplergl-jupyter/\nbuild/\n*.py[cod]\n"
},
{
"path": "bindings/kepler.gl-jupyter/Dockerfile",
"chars": 1029,
"preview": "# NOTE: PLEASE run `yarn build` before running this dockerfile\nFROM ubuntu:latest\n\n# Install python3\nRUN apt-get update "
},
{
"path": "bindings/kepler.gl-jupyter/MANIFEST.in",
"chars": 120,
"preview": "recursive-include keplergl/static *.*\nrecursive-include keplergl-jupyter/labextension *.*\ninclude keplergl-jupyter.json\n"
},
{
"path": "bindings/kepler.gl-jupyter/README.md",
"chars": 13376,
"preview": "# kepler.gl for Jupyter\n\nThis is the [kepler.gl](http://kepler.gl) jupyter widget, an advanced geospatial visualization "
},
{
"path": "bindings/kepler.gl-jupyter/RELEASE.md",
"chars": 1760,
"preview": "# Kepler.gl Jupyter Releases\n\n## Release a new version\n\nWhen release a new version, the `keplergl-jupyter` js module wil"
},
{
"path": "bindings/kepler.gl-jupyter/js/.gitignore",
"chars": 68,
"preview": "node_modules/\ndist/\ntemp.*\nbabel/\n\nyarn-error.log\npackage-lock.json\n"
},
{
"path": "bindings/kepler.gl-jupyter/js/README.md",
"chars": 3042,
"preview": "# keplergl-jupyter\n\nThis is a simple jupyter widget for kepler.gl, an advanced geospatial visualization tool, to render "
},
{
"path": "bindings/kepler.gl-jupyter/js/babel.config.js",
"chars": 906,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nconst KeplerPackage = require('./pac"
},
{
"path": "bindings/kepler.gl-jupyter/js/lib/embed.js",
"chars": 538,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\n// Entry point for the unpkg bundle "
},
{
"path": "bindings/kepler.gl-jupyter/js/lib/extension.js",
"chars": 966,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\n// This file contains the javascript"
},
{
"path": "bindings/kepler.gl-jupyter/js/lib/index.js",
"chars": 263,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\n// Export widget models and views, a"
},
{
"path": "bindings/kepler.gl-jupyter/js/lib/keplergl/components/app.js",
"chars": 4295,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport React, {useEffect, useState, "
},
{
"path": "bindings/kepler.gl-jupyter/js/lib/keplergl/components/config-panel.js",
"chars": 2532,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport React, {useState} from 'react"
},
{
"path": "bindings/kepler.gl-jupyter/js/lib/keplergl/components/panel-header.js",
"chars": 987,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport {PanelHeaderFactory, Icons, w"
},
{
"path": "bindings/kepler.gl-jupyter/js/lib/keplergl/components/root.js",
"chars": 401,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport React from 'react';\nimport Re"
},
{
"path": "bindings/kepler.gl-jupyter/js/lib/keplergl/components/side-bar.js",
"chars": 1008,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport React from 'react';\nimport {S"
},
{
"path": "bindings/kepler.gl-jupyter/js/lib/keplergl/kepler.gl.js",
"chars": 5123,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport {addDataToMap, ActionTypes} f"
},
{
"path": "bindings/kepler.gl-jupyter/js/lib/keplergl/main.js",
"chars": 940,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\n// NOTE: this is only used for expor"
},
{
"path": "bindings/kepler.gl-jupyter/js/lib/keplergl/store.js",
"chars": 1312,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport {applyMiddleware, compose, cr"
},
{
"path": "bindings/kepler.gl-jupyter/js/lib/keplergl/utils.js",
"chars": 2604,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport {tableFromIPC} from 'apache-a"
},
{
"path": "bindings/kepler.gl-jupyter/js/lib/keplergl-plugin.js",
"chars": 1618,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport * as widgets from '@jupyter-w"
},
{
"path": "bindings/kepler.gl-jupyter/js/lib/labplugin.js",
"chars": 470,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nvar keplerglJupyter = require('./ind"
},
{
"path": "bindings/kepler.gl-jupyter/js/lib/log.js",
"chars": 248,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport console from 'global/console'"
},
{
"path": "bindings/kepler.gl-jupyter/js/package.json",
"chars": 4142,
"preview": "{\n \"name\": \"keplergl-jupyter\",\n \"version\": \"0.3.7\",\n \"description\": \"This is a simple jupyter widget for kepler.gl, a"
},
{
"path": "bindings/kepler.gl-jupyter/js/template/keplergl-html.ejs",
"chars": 4311,
"preview": "<% var item, key %>\n\n<% htmlWebpackPlugin.options.appMountIds = htmlWebpackPlugin.options.appMountIds || [] %>\n<% htmlWe"
},
{
"path": "bindings/kepler.gl-jupyter/js/webpack/build-html.js",
"chars": 3446,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nconst path = require('path');\nconst "
},
{
"path": "bindings/kepler.gl-jupyter/js/webpack/build.js",
"chars": 336,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nconst config = require('./config');\n"
},
{
"path": "bindings/kepler.gl-jupyter/js/webpack/config.js",
"chars": 3353,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nconst path = require('path');\nconst "
},
{
"path": "bindings/kepler.gl-jupyter/js/webpack/dev.js",
"chars": 385,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nconst config = require('./config');\n"
},
{
"path": "bindings/kepler.gl-jupyter/keplergl/__init__.py",
"chars": 351,
"preview": "# SPDX-License-Identifier: MIT\n# Copyright contributors to the kepler.gl project\n\nfrom ._version import version_info, __"
},
{
"path": "bindings/kepler.gl-jupyter/keplergl/_version.py",
"chars": 827,
"preview": "# SPDX-License-Identifier: MIT\n# Copyright contributors to the kepler.gl project\n\nversion_info = (0, 3, 7, 'final', 0)\n\n"
},
{
"path": "bindings/kepler.gl-jupyter/keplergl/keplergl.py",
"chars": 11773,
"preview": "# SPDX-License-Identifier: MIT\n# Copyright contributors to the kepler.gl project\n\n# Ignore warnings from IPython.core.fo"
},
{
"path": "bindings/kepler.gl-jupyter/keplergl-jupyter.json",
"chars": 70,
"preview": "{\n \"load_extensions\": {\n \"keplergl-jupyter/extension\": true\n }\n}\n"
},
{
"path": "bindings/kepler.gl-jupyter/notebooks/DataFrame.ipynb",
"chars": 2274,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 12,\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n"
},
{
"path": "bindings/kepler.gl-jupyter/notebooks/GeoDataFrame.ipynb",
"chars": 2279,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n \"metadata\": {},\n \"outputs\": [],\n \"source\": "
},
{
"path": "bindings/kepler.gl-jupyter/notebooks/GeoJSON.ipynb",
"chars": 1189,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n \"metadata\": {},\n \"outputs\": [],\n \"source\": "
},
{
"path": "bindings/kepler.gl-jupyter/notebooks/Load kepler.gl.ipynb",
"chars": 2086,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n \"metadata\": {},\n \"outputs\": [],\n \"source\": "
},
{
"path": "bindings/kepler.gl-jupyter/notebooks/geojson-data.json",
"chars": 12605,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"fill\": tr"
},
{
"path": "bindings/kepler.gl-jupyter/notebooks/hex-data.csv",
"chars": 3886,
"preview": "hex_id,value,is_true,float_value,empty,time\n89283082c2fffff,64,true,64.1,,11/1/17 11:00\n8928308288fffff,73,true,73.1,,11"
},
{
"path": "bindings/kepler.gl-jupyter/notebooks/hex_config.py",
"chars": 1723,
"preview": "# SPDX-License-Identifier: MIT\n# Copyright contributors to the kepler.gl project\n\nconfig = {u'version': u'v1', u'config'"
},
{
"path": "bindings/kepler.gl-jupyter/notebooks/sf_zip_geo.json",
"chars": 747377,
"preview": "{\"type\": \"FeatureCollection\",\"features\": [\n{\"type\": \"Feature\", \"properties\": {\"OBJECTID\":1,\"ZIP_CODE\":94107,\"ID\":94107},"
},
{
"path": "bindings/kepler.gl-jupyter/pyproject.toml",
"chars": 267,
"preview": "[build-system]\nrequires = [\"geopandas~=0.14.3\", \"ipywidgets~=8.1.5\", \"notebook~=6.0.1\", \"jupyter_packaging~=0.12.3\", \"ju"
},
{
"path": "bindings/kepler.gl-jupyter/requirements.txt",
"chars": 215,
"preview": "geopandas==0.14.3\nipywidgets==7.8.1\nipykernel==6.29.4\nShapely==2.0.4\njupyter_packaging==0.12.3\njupyter-contrib-nbextensi"
},
{
"path": "bindings/kepler.gl-jupyter/setup.cfg",
"chars": 26,
"preview": "[bdist_wheel]\nuniversal=1\n"
},
{
"path": "bindings/kepler.gl-jupyter/setup.py",
"chars": 3368,
"preview": "# SPDX-License-Identifier: MIT\n# Copyright contributors to the kepler.gl project\n\nfrom __future__ import print_function\n"
},
{
"path": "bindings/python/DEVELOPMENT.md",
"chars": 2951,
"preview": "# Development Guide\n\nThis guide explains how to set up kepler.gl for Jupyter for local development.\n\n## Prerequisites\n\n-"
},
{
"path": "bindings/python/README.md",
"chars": 914,
"preview": "# kepler.gl for Jupyter\n\n[](https://pypi.org/project/keplergl"
},
{
"path": "bindings/python/esbuild.config.mjs",
"chars": 1581,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport * as esbuild from 'esbuild';\n"
},
{
"path": "bindings/python/keplergl/__init__.py",
"chars": 217,
"preview": "# SPDX-License-Identifier: MIT\n# Copyright contributors to the kepler.gl project\n\n\"\"\"Kepler.gl Jupyter Widget.\"\"\"\n\nfrom "
},
{
"path": "bindings/python/keplergl/_version.py",
"chars": 135,
"preview": "# SPDX-License-Identifier: MIT\n# Copyright contributors to the kepler.gl project\n\n\"\"\"Version information.\"\"\"\n\n__version_"
},
{
"path": "bindings/python/keplergl/serializers.py",
"chars": 4078,
"preview": "# SPDX-License-Identifier: MIT\n# Copyright contributors to the kepler.gl project\n\n\"\"\"Data serialization for Python <-> J"
},
{
"path": "bindings/python/keplergl/widget.py",
"chars": 2250,
"preview": "# SPDX-License-Identifier: MIT\n# Copyright contributors to the kepler.gl project\n\n\"\"\"Kepler.gl Jupyter Widget using anyw"
},
{
"path": "bindings/python/notebooks/DataFrame.ipynb",
"chars": 2300,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n "
},
{
"path": "bindings/python/notebooks/GeoDataFrame.ipynb",
"chars": 5847,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n "
},
{
"path": "bindings/python/notebooks/GeoJSON.ipynb",
"chars": 1922,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 2,\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n "
},
{
"path": "bindings/python/notebooks/Load kepler.gl.ipynb",
"chars": 6296,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"metadata\": {},\n \"outputs\": [\n {\n \"name\":"
},
{
"path": "bindings/python/notebooks/geojson-data.json",
"chars": 12605,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"fill\": tr"
},
{
"path": "bindings/python/notebooks/hex-data.csv",
"chars": 3886,
"preview": "hex_id,value,is_true,float_value,empty,time\n89283082c2fffff,64,true,64.1,,11/1/17 11:00\n8928308288fffff,73,true,73.1,,11"
},
{
"path": "bindings/python/notebooks/hex_config.py",
"chars": 1723,
"preview": "# SPDX-License-Identifier: MIT\n# Copyright contributors to the kepler.gl project\n\nconfig = {u'version': u'v1', u'config'"
},
{
"path": "bindings/python/notebooks/sf_zip_geo.json",
"chars": 747377,
"preview": "{\"type\": \"FeatureCollection\",\"features\": [\n{\"type\": \"Feature\", \"properties\": {\"OBJECTID\":1,\"ZIP_CODE\":94107,\"ID\":94107},"
},
{
"path": "bindings/python/package.json",
"chars": 1065,
"preview": "{\n \"name\": \"keplergl-jupyter\",\n \"version\": \"0.0.0\",\n \"scripts\": {\n \"build\": \"node esbuild.config.mjs\",\n \"dev\": "
},
{
"path": "bindings/python/pyproject.toml",
"chars": 1308,
"preview": "[project]\nname = \"keplergl\"\nversion = \"0.4.0rc1\"\ndescription = \"Kepler.gl Jupyter Widget\"\nreadme = \"README.md\"\nrequires-"
},
{
"path": "bindings/python/src/components/App.tsx",
"chars": 1440,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport React, {useEffect, useState, "
},
{
"path": "bindings/python/src/index.ts",
"chars": 655,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport type {WidgetModel} from './ty"
},
{
"path": "bindings/python/src/process-shim.js",
"chars": 349,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nexport const process = {\n env: {\n "
},
{
"path": "bindings/python/src/store.ts",
"chars": 792,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport {createStore as createReduxSt"
},
{
"path": "bindings/python/src/styles.css",
"chars": 386,
"preview": ".kepler-gl {\n font-family: ff-clan-web-pro, \"Helvetica Neue\", Helvetica, sans-serif;\n width: 100%;\n height: 100%;\n}\n\n"
},
{
"path": "bindings/python/src/types.ts",
"chars": 647,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport type {AnyModel} from '@anywid"
},
{
"path": "bindings/python/src/utils/data.ts",
"chars": 9414,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport {tableFromIPC} from 'apache-a"
},
{
"path": "bindings/python/src/utils/serialization.ts",
"chars": 556,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nexport function decodeBase64ToBytes("
},
{
"path": "bindings/python/src/widget.ts",
"chars": 4389,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport {createRoot, Root} from 'reac"
},
{
"path": "bindings/python/tests/conftest.py",
"chars": 576,
"preview": "# SPDX-License-Identifier: MIT\n# Copyright contributors to the kepler.gl project\n\n\"\"\"Pytest configuration.\"\"\"\n\nimport py"
},
{
"path": "bindings/python/tests/test_serializers.py",
"chars": 10218,
"preview": "# SPDX-License-Identifier: MIT\n# Copyright contributors to the kepler.gl project\n\n\"\"\"Serializer tests.\"\"\"\n\nimport json\ni"
},
{
"path": "bindings/python/tests/test_widget.py",
"chars": 964,
"preview": "# SPDX-License-Identifier: MIT\n# Copyright contributors to the kepler.gl project\n\n\"\"\"Widget tests.\"\"\"\n\nimport pytest\nfro"
},
{
"path": "bindings/python/tsconfig.json",
"chars": 422,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"ESNext\",\n \"moduleResolution\": \"bundler\",\n \"jsx\": \""
},
{
"path": "contributing/CODE_OF_CONDUCT.md",
"chars": 283,
"preview": "# Code of Conduct\n\nkepler.gl is an [OpenJS Foundation](https://openjsf.org/) project. Please be mindful of and adhere to"
},
{
"path": "contributing/DEVELOPERS.md",
"chars": 16057,
"preview": "# Developing Kepler.gl\n\n## Table of contents\n\n- [Development Setup](./#development-setup)\n- [Running Tests](./#running-t"
},
{
"path": "contributing/README.md",
"chars": 6286,
"preview": "# CONTRIBUTING\n\nGreat to have you here. Here are a few ways you can help make kepler.gl even better!\n\n* [Developer Certi"
},
{
"path": "docs/README.md",
"chars": 203,
"preview": "# Docs\n\n## Table of contents\n- [What's new?](./release-notes.md)\n- [API References](./api-reference/README.md)\n- [User G"
},
{
"path": "docs/RFC/table-class.md",
"chars": 2867,
"preview": "Replace kepler.gl dataset with table class\n\n## Current Dataset structure\n\n```js\nexport type KeplerDataset = {\n id: stri"
},
{
"path": "docs/api-reference/README.md",
"chars": 1996,
"preview": "# API Reference\n\n## Table of Contents\n\n- [Overview](./#overview)\n- [Ecosystem](./ecosystem.md)\n - [Component](./eco"
},
{
"path": "docs/api-reference/actions/README.md",
"chars": 26,
"preview": "# Actions\n\n...Coming soon\n"
},
{
"path": "docs/api-reference/actions/actions.md",
"chars": 49580,
"preview": "<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n\n### Table of Contents\n\n-"
},
{
"path": "docs/api-reference/advanced-usages/custom-initial-state.md",
"chars": 1416,
"preview": "# Custom reducer initial state\n\nFor advanced users who wish to modify the initial state of kepler.gl reducer, kepler.gl "
},
{
"path": "docs/api-reference/advanced-usages/custom-map-styles.md",
"chars": 6075,
"preview": "# Using kepler.gl with basemap services other than Mapbox\n\nBy default, kepler.gl uses mapbox-gl.js to render its base ma"
},
{
"path": "docs/api-reference/advanced-usages/custom-mapbox-host.md",
"chars": 1440,
"preview": "### 1. Configuring Mapbox API hostname\nThe KeplerGL component accepts an optional parameter `mapboxApiUrl` to override t"
},
{
"path": "docs/api-reference/advanced-usages/forward-actions.md",
"chars": 2285,
"preview": "# Forward Dispatch Actions\n\nOne of the biggest challenge of using local state is to dispatch actions that only modify a "
},
{
"path": "docs/api-reference/advanced-usages/reducer-plugin.md",
"chars": 1516,
"preview": "# Reducer Plugin\n\nFor advanced users, who want to add additional action handler to kepler.gl reducer, kepler.gl provides"
},
{
"path": "docs/api-reference/advanced-usages/replace-ui-component.md",
"chars": 4946,
"preview": "# Replace UI Component with Component Dependency Injection\n\nTo allow customize a child component, the library author usu"
},
{
"path": "docs/api-reference/advanced-usages/saving-loading-w-schema.md",
"chars": 3322,
"preview": "# Saving and Loading Maps with Schema Manager\n\n![Processor and Schema][processor-schema]\n\nKelper.gl provides a schema ma"
},
{
"path": "docs/api-reference/advanced-usages/using-updaters.md",
"chars": 1698,
"preview": "# Using Updaters\nUpdaters are state transition functions that mapped to actions. One action can map to multiple state up"
},
{
"path": "docs/api-reference/cloud-providers/README.md",
"chars": 2795,
"preview": "# Cloud Providers\n\nThe kepler.gl application does not have a backend, however it offers integration point for optional c"
},
{
"path": "docs/api-reference/cloud-providers/cloud-provider.md",
"chars": 7412,
"preview": "<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n\n### Table of Contents\n\n-"
},
{
"path": "docs/api-reference/components/README.md",
"chars": 29,
"preview": "# Components\n\n...Coming soon\n"
},
{
"path": "docs/api-reference/custom-theme/README.md",
"chars": 1073,
"preview": "# Custom Theme\n\nYou can pass theme name or object used to customize Kepler.gl style. Kepler.gl provide an `'light'` them"
},
{
"path": "docs/api-reference/ecosystem.md",
"chars": 4517,
"preview": "## Ecosystem\n\nThe diagram below represents the data flow. Note that in most cases, you don't have to worry about action "
},
{
"path": "docs/api-reference/get-started.md",
"chars": 4158,
"preview": "## Get Started\n\n### Installation\n\nUse <b>Node v18</b> and above, older node versions have not been tested\n\n```sh\nnpm ins"
},
{
"path": "docs/api-reference/localization/README.md",
"chars": 2931,
"preview": "# Localization\n\nKepler.gl supports localization through [react-intl]. Locale is determined by `uiState.locale` value.\nCu"
},
{
"path": "docs/api-reference/processors/README.md",
"chars": 29,
"preview": "# Processors\n\n...Coming soon\n"
},
{
"path": "docs/api-reference/processors/processors.md",
"chars": 5685,
"preview": "<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n\n### Table of Contents\n\n-"
},
{
"path": "docs/api-reference/reducers/README.md",
"chars": 4577,
"preview": "## Reducers\n\nKepler.gl is a redux-connected component that utilizes redux to manage its state. The basic implementation "
},
{
"path": "docs/api-reference/reducers/combine.md",
"chars": 3408,
"preview": "<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n\n### Table of Contents\n\n-"
},
{
"path": "docs/api-reference/reducers/map-state.md",
"chars": 4504,
"preview": "<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n\n### Table of Contents\n\n-"
},
{
"path": "docs/api-reference/reducers/map-style.md",
"chars": 6589,
"preview": "<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n\n### Table of Contents\n\n-"
},
{
"path": "docs/api-reference/reducers/reducers.md",
"chars": 4674,
"preview": "<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n\n### Table of Contents\n\n-"
},
{
"path": "docs/api-reference/reducers/ui-state.md",
"chars": 13583,
"preview": "<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n\n### Table of Contents\n\n-"
},
{
"path": "docs/api-reference/reducers/vis-state.md",
"chars": 18644,
"preview": "<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n\n### Table of Contents\n\n-"
},
{
"path": "docs/api-reference/schemas/README.md",
"chars": 26,
"preview": "# Schemas\n\n...Coming Soon\n"
},
{
"path": "docs/keplergl-jupyter/README.md",
"chars": 16149,
"preview": "# Jupyter Notebook\n\n## kepler.gl for Jupyter User Guide\n\n### Table of contents\n- [Install](#install)\n- [1. Load kepler.g"
},
{
"path": "docs/release-notes.md",
"chars": 6408,
"preview": "# What's New?\n\nThis page shows features that have landed to kepler.gl in major versions. For a complete list of changes "
},
{
"path": "docs/spatial-analysis-tutorial/README.md",
"chars": 1956,
"preview": "# Tutorial: Spatial Data Analysis using Kepler.gl AI Assistant\n\nThis tutorial will guide you through the process of usin"
},
{
"path": "docs/spatial-analysis-tutorial/basic-mapping.md",
"chars": 27484,
"preview": "# Basic Mapping\n\nOriginal GeoDa lab by Luc Anselin: https://geodacenter.github.io/workbook/3a_mapping/lab3a.html\n\n## Int"
},
{
"path": "docs/spatial-analysis-tutorial/get-started.md",
"chars": 8036,
"preview": "# Get Started\n\nKepler.gl AI Assistant is a plugin for Kepler.gl that allows you to perform spatial data analysis and vis"
},
{
"path": "docs/spatial-analysis-tutorial/rate-mapping.md",
"chars": 17723,
"preview": "# Maps for Rates or Proportions\n\nOriginal GeoDa lab by Luc Anselin: https://geodacenter.github.io/workbook/3b_ratemaps/l"
},
{
"path": "docs/spatial-analysis-tutorial/spatial-data-gis.md",
"chars": 14298,
"preview": "# Spatial Data Wrangling (2) – GIS Operations\n\nOriginal GeoDa lab by Luc Anselin: https://geodacenter.github.io/workbook"
},
{
"path": "docs/spatial-analysis-tutorial/spatial-data-wrangling.md",
"chars": 20502,
"preview": "# Spatial Data Wrangling\n\nOriginal GeoDa lab by Luc Anselin: https://geodacenter.github.io/workbook/01_datawrangling_1/l"
},
{
"path": "docs/table-of-contents.json",
"chars": 4624,
"preview": "{\n \"id\": \"table-of-contents\",\n \"chapters\": [\n {\n \"title\": \"User Guides\",\n \"chapters\": [\n {\n "
},
{
"path": "docs/user-guides/README.md",
"chars": 2911,
"preview": "# User guides\n\nKepler.gl is designed for geospatial data analysis. It allows technical and non-technical audiences to vi"
},
{
"path": "docs/user-guides/ai-assistant.md",
"chars": 9450,
"preview": "# AI Assistant\n\n> Note: This feature is currently undergoing development. Stay tuned for updates!\n\nThe AI assistant in K"
},
{
"path": "docs/user-guides/b-kepler-gl-workflow/README.md",
"chars": 437,
"preview": "# Kepler.gl workflow\n\n## Table of contents\n* [Add data to the map](./a-add-data-to-the-map.md)\n* [Adding data layers](./"
},
{
"path": "docs/user-guides/b-kepler-gl-workflow/a-add-data-to-the-map.md",
"chars": 9666,
"preview": "# Add Data to the Map\n\n## Ways to Add Data\n- Open kepler.gl/demo. You should see the following prompt:\n\n\n\nPoint "
},
{
"path": "docs/user-guides/c-types-of-layers/b-arc.md",
"chars": 554,
"preview": "# Arc\n\n\n\nArc layers d"
},
{
"path": "docs/user-guides/c-types-of-layers/c-line.md",
"chars": 313,
"preview": "# Line\n\n\n\nLine layer"
},
{
"path": "docs/user-guides/c-types-of-layers/d-grid.md",
"chars": 423,
"preview": "# Grid\n\n\n\n\n"
},
{
"path": "docs/user-guides/c-types-of-layers/g-icon.md",
"chars": 596,
"preview": "# Icon\n\n\n\nIcon laye"
},
{
"path": "docs/user-guides/c-types-of-layers/h-hexbin.md",
"chars": 507,
"preview": "# Hexbin\n\n\n\nH3 "
},
{
"path": "docs/user-guides/c-types-of-layers/k-trip.md",
"chars": 2549,
"preview": "# Trip layer\n\nTrip layer can display animated path.\n\n\n\nTo use S2 la"
},
{
"path": "docs/user-guides/c-types-of-layers/m-vector-tile-layer.md",
"chars": 1191,
"preview": "# Vector Tile Layer — How to add\n\nFollow these steps to add a Vector Tile layer (MVT or pmtiles):\n\n1. Open Add Data → Ti"
},
{
"path": "docs/user-guides/c-types-of-layers/n-raster-tile-layer.md",
"chars": 2713,
"preview": "# Raster Tile Layer — How to add (experimental)\n\nUse Raster Tile layer to visualize satellite/aerial imagery from raster"
},
{
"path": "docs/user-guides/c-types-of-layers/o-wms-layer.md",
"chars": 756,
"preview": "# WMS Layer — How to add (experimental)\n\nUse WMS Layer to render imagery from OGC Web Map Service (WMS) endpoints.\n\n1. O"
},
{
"path": "docs/user-guides/c-types-of-layers/vector.md",
"chars": 4093,
"preview": "# Vector Layer\n\nVector layers use the three basic GIS features – lines, points, and polygons – to represent real-world f"
},
{
"path": "docs/user-guides/d-layer-attributes.md",
"chars": 5362,
"preview": "# Layer Attributes\n\n| Layer Attribute | Description "
},
{
"path": "docs/user-guides/e-filters.md",
"chars": 997,
"preview": "# Filters\n\nAdd filters to your map to limit the data that is displayed. Filters must be based on the columns in your dat"
},
{
"path": "docs/user-guides/f-map-styles.md",
"chars": 3029,
"preview": "# Map Styles\n\n<!-- TOC -->\n\n - [Base Map Styles](#base-map-styles)\n - [Toggle Map Layers](#toggle-map-layers)\n - "
},
{
"path": "docs/user-guides/g-interactions.md",
"chars": 2341,
"preview": "# Interactions\n\n<!-- TOC -->\n - [Tooltips](#tooltips)\n - [Brushing](#brushing)\n - [Display Coordinates](#display-coor"
},
{
"path": "docs/user-guides/h-playback.md",
"chars": 1130,
"preview": "# Playback\n\nFollow these steps to create a playback video of an event:\n1. Add a filter based on a time-related field, li"
},
{
"path": "docs/user-guides/i-FAQ.md",
"chars": 1430,
"preview": "# FAQ\n\n## Can I export my map to a video file?\nKepler.gl does not have built-in functionality for exporting video. It on"
},
{
"path": "docs/user-guides/j-get-started.md",
"chars": 2637,
"preview": "# Get Started\n\nKepler.gl is a tool designed for geospatial data analysis. This guide will help you get started creating "
},
{
"path": "docs/user-guides/k-save-and-export.md",
"chars": 4496,
"preview": "# Save and Export\n\n\n - [View Maps in 3D](#view-maps-in-3d)\n - [Display Legend]("
},
{
"path": "docs/user-guides/sql-data-explorer.md",
"chars": 1270,
"preview": "# SQL/DuckDB Data Explorer\n\n**This feature is currently undergoing development. Stay tuned for updates!**\n\nThe new SQL d"
},
{
"path": "esbuild/umd-esbuild.config.mjs",
"chars": 1426,
"preview": "// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport esbuild from 'esbuild';\nimpor"
},
{
"path": "examples/README.md",
"chars": 1422,
"preview": "# Examples\n\nA list of examples to demonstrate adding `kepler.gl` to your app. Each of the examples is a complete project"
},
{
"path": "examples/custom-map-style/.babelrc",
"chars": 442,
"preview": "{\n \"presets\": [\n \"@babel/preset-env\",\n \"@babel/preset-react\",\n \"@babel/preset-typescript\"\n ],\n \"plugins\": [\n"
},
{
"path": "examples/custom-map-style/README.md",
"chars": 450,
"preview": "# Custom Map Style\n\n
About this extraction
This page contains the full source code of the keplergl/kepler.gl GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1370 files (9.3 MB), approximately 2.5M tokens, and a symbol index with 5048 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.