From c6908b568c666c9d6b6ce0e910e676f88c3b36b6 Mon Sep 17 00:00:00 2001
From: unclFedor <103448502+unclFedor@users.noreply.github.com>
Date: Mon, 6 Nov 2023 10:14:58 +0100
Subject: [PATCH 01/40] feat: replace StaticMap By Maplibre (#308)
* feat: replace StaticMap By Maplibre
* fixed inspection's comments
* fixed lint issues
* fixed unit test issues
* fixed unit test errors
* fixed unit test per pull 310
* removed duplicated code in test
---
package.json | 12 +-
.../attributes-stats/attribute-stats.spec.tsx | 6 +-
.../comparison-side/comparison-side.spec.tsx | 31 +-
.../debug-panel/debug-panel.spec.tsx | 5 +
.../deck-gl-wrapper/deck-gl-wrapper.spec.tsx | 48 +-
.../deck-gl-wrapper/deck-gl-wrapper.tsx | 25 +-
.../layers-panel/layers-panel.spec.tsx | 7 +-
.../layers-panel/map-options-panel.spec.tsx | 5 +
.../map-control-panel.spec.tsx | 6 +
src/pages/dashboard/dashboard.tsx | 28 +-
.../slices/attribute-stats-map-slice.spec.ts | 8 +-
src/redux/slices/base-maps-slice.spec.ts | 6 +
src/redux/slices/base-maps-slice.ts | 2 +-
.../slices/colors-by-attribute-slice.spec.ts | 6 +
src/redux/slices/debug-option-slice.spec.ts | 6 +
src/redux/slices/drag-mode-slice.spec.ts | 6 +
.../slices/flattened-sublayers-slice.spec.ts | 5 +
.../slices/uv-debug-texture-slice.spec.ts | 5 +
yarn.lock | 1325 +++++++++--------
19 files changed, 858 insertions(+), 684 deletions(-)
diff --git a/package.json b/package.json
index 9b5b4db7..dc6adcf3 100644
--- a/package.json
+++ b/package.json
@@ -20,6 +20,12 @@
"author": "",
"license": "ISC",
"dependencies": {
+ "@deck.gl/core": "^8.9.32",
+ "@deck.gl/extensions": "^8.9.32",
+ "@deck.gl/geo-layers": "^8.9.32",
+ "@deck.gl/layers": "^8.9.32",
+ "@deck.gl/mesh-layers": "^8.9.32",
+ "@deck.gl/react": "^8.9.32",
"@fortawesome/fontawesome-svg-core": "^1.2.36",
"@fortawesome/free-solid-svg-icons": "^5.15.4",
"@fortawesome/react-fontawesome": "^0.1.17",
@@ -29,18 +35,18 @@
"@loaders.gl/i3s": "^4.0.0-beta.2",
"@loaders.gl/loader-utils": "^4.0.0-beta.2",
"@loaders.gl/tiles": "^4.0.0-beta.2",
- "@luma.gl/core": "^8.5.14",
"@math.gl/proj4": "^3.6.3",
"@probe.gl/stats": "^4.0.4",
"@reduxjs/toolkit": "^1.9.5",
- "deck.gl": "^8.8.3",
+ "apache-arrow": "^13.0.0",
"html2canvas": "^1.4.1",
+ "maplibre-gl": "^3.5.2",
"normalize.css": "^8.0.1",
"prop-types": "^15.8.1",
"react": "^17.0.2",
"react-color": "^2.19.3",
"react-dom": "^17.0.2",
- "react-map-gl": "^5.0.0",
+ "react-map-gl": "^7.1.6",
"react-redux": "^8.1.1",
"react-responsive": "^9.0.0-beta.8",
"react-router-dom": "^6.2.1",
diff --git a/src/components/attributes-panel/attributes-stats/attribute-stats.spec.tsx b/src/components/attributes-panel/attributes-stats/attribute-stats.spec.tsx
index 1d8507eb..887dc97d 100644
--- a/src/components/attributes-panel/attributes-stats/attribute-stats.spec.tsx
+++ b/src/components/attributes-panel/attributes-stats/attribute-stats.spec.tsx
@@ -9,7 +9,11 @@ import { setupStore } from "../../../redux/store";
import { setColorsByAttrubute } from "../../../redux/slices/colors-by-attribute-slice";
jest.mock("@loaders.gl/core");
-
+jest.mock("@loaders.gl/i3s", () => {
+ return jest.fn().mockImplementation(() => {
+ return null;
+ });
+});
jest.mock("../histogram", () => ({
HistogramChart: jest.fn().mockImplementation(() =>
HistogramChart
),
}));
diff --git a/src/components/comparison/comparison-side/comparison-side.spec.tsx b/src/components/comparison/comparison-side/comparison-side.spec.tsx
index 6a23f8b6..198cb217 100644
--- a/src/components/comparison/comparison-side/comparison-side.spec.tsx
+++ b/src/components/comparison/comparison-side/comparison-side.spec.tsx
@@ -18,7 +18,36 @@ import { MemoryUsagePanel } from "../../memory-usage-panel/memory-usage-panel";
import { setupStore } from "../../../redux/store";
import { setDragMode } from "../../../redux/slices/drag-mode-slice";
-jest.mock("@loaders.gl/core");
+jest.mock("react-map-gl/maplibre", () => {
+ return jest.fn().mockImplementation(() => {
+ return null;
+ });
+});
+jest.mock("@loaders.gl/core", () => {
+ return {
+ load: jest.fn(),
+ };
+});
+jest.mock("@loaders.gl/i3s", () => {
+ return jest.fn().mockImplementation(() => {
+ return null;
+ });
+});
+jest.mock("@loaders.gl/3d-tiles", () => {
+ return jest.fn().mockImplementation(() => {
+ return null;
+ });
+});
+jest.mock("@deck.gl/layers", () => {
+ return jest.fn().mockImplementation(() => {
+ return null;
+ });
+});
+jest.mock("@deck.gl/geo-layers", () => {
+ return jest.fn().mockImplementation(() => {
+ return null;
+ });
+});
jest.mock("../../deck-gl-wrapper/deck-gl-wrapper");
jest.mock("../../main-tools-panel/main-tools-panel");
jest.mock("../../layers-panel/layers-panel");
diff --git a/src/components/debug-panel/debug-panel.spec.tsx b/src/components/debug-panel/debug-panel.spec.tsx
index 18b75124..6d449b15 100644
--- a/src/components/debug-panel/debug-panel.spec.tsx
+++ b/src/components/debug-panel/debug-panel.spec.tsx
@@ -16,6 +16,11 @@ import {
selectBoundingVolumeType,
} from "../../redux/slices/debug-options-slice";
+jest.mock("@loaders.gl/i3s", () => {
+ return jest.fn().mockImplementation(() => {
+ return null;
+ });
+});
jest.mock("../../utils/hooks/layout");
jest.mock("../close-button/close-button", () => ({
CloseButton: ({ onClick }) => {
diff --git a/src/components/deck-gl-wrapper/deck-gl-wrapper.spec.tsx b/src/components/deck-gl-wrapper/deck-gl-wrapper.spec.tsx
index c7fbf164..934b2994 100644
--- a/src/components/deck-gl-wrapper/deck-gl-wrapper.spec.tsx
+++ b/src/components/deck-gl-wrapper/deck-gl-wrapper.spec.tsx
@@ -11,6 +11,19 @@ import {
// Mocks
jest.mock("@loaders.gl/core");
+jest.mock("@loaders.gl/i3s", () => {
+ return {
+ COORDINATE_SYSTEM: {
+ METER_OFFSETS: 2,
+ LNGLAT_OFFSETS: 3,
+ },
+ };
+});
+jest.mock("@loaders.gl/3d-tiles", () => {
+ return jest.fn().mockImplementation(() => {
+ return null;
+ });
+});
jest.mock("@loaders.gl/images");
jest.mock("@loaders.gl/tiles");
jest.mock("@deck.gl/react", () => {
@@ -18,10 +31,25 @@ jest.mock("@deck.gl/react", () => {
return null;
});
});
+jest.mock("react-map-gl/maplibre", () => {
+ return {
+ Map: jest.fn().mockImplementation(() => ),
+ };
+});
jest.mock("@deck.gl/core");
-jest.mock("@deck.gl/layers");
-jest.mock("@deck.gl/geo-layers");
-jest.mock("react-map-gl");
+jest.mock("@deck.gl/layers", () => {
+ return {
+ LineLayer: jest.fn(),
+ ScatterplotLayer: jest.fn(),
+ };
+});
+
+jest.mock("@deck.gl/geo-layers", () => {
+ return {
+ Tile3DLayer: jest.fn(),
+ TerrainLayer: jest.fn(),
+ };
+});
jest.mock("../../utils/debug/build-minimap-data");
jest.mock("../../utils/debug/texture-selector-utils");
jest.mock("../../utils/debug/frustum-utils");
@@ -61,7 +89,7 @@ import { setupStore } from "../../redux/store";
import { setColorsByAttrubute } from "../../redux/slices/colors-by-attribute-slice";
import { setDragMode } from "../../redux/slices/drag-mode-slice";
import { setDebugOptions } from "../../redux/slices/debug-options-slice";
-import { addBaseMap } from "../../redux/slices/base-maps-slice"
+import { addBaseMap } from "../../redux/slices/base-maps-slice";
const simpleCallbackMock = jest.fn().mockImplementation(() => {
/* Do Nothing */
@@ -336,7 +364,11 @@ describe("Deck.gl I3S map component", () => {
it("Should render pickable with auto highlighting", () => {
const store = setupStore();
- callRender(renderWithProvider, { pickable: true, autoHighlight: true }, store);
+ callRender(
+ renderWithProvider,
+ { pickable: true, autoHighlight: true },
+ store
+ );
const { pickable, autoHighlight } = Tile3DLayer.mock.lastCall[0];
expect(pickable).toBe(true);
expect(autoHighlight).toBe(true);
@@ -509,8 +541,7 @@ describe("Deck.gl I3S map component", () => {
describe("Render TerrainLayer", () => {
const store = setupStore();
- store.dispatch(
- addBaseMap({ id: "Terrain", mapUrl: "", name: "Terrain" }));
+ store.dispatch(addBaseMap({ id: "Terrain", mapUrl: "", name: "Terrain" }));
it("Should render terrain", () => {
callRender(renderWithProvider, undefined, store);
expect(TerrainLayer).toHaveBeenCalled();
@@ -519,7 +550,8 @@ describe("Deck.gl I3S map component", () => {
it("Should call onTerrainTileLoad", () => {
const store = setupStore();
store.dispatch(
- addBaseMap({ id: "Terrain", mapUrl: "", name: "Terrain" }));
+ addBaseMap({ id: "Terrain", mapUrl: "", name: "Terrain" })
+ );
const { rerender } = callRender(renderWithProvider, undefined, store);
const { onTileLoad } = TerrainLayer.mock.lastCall[0];
const terrainTile = {
diff --git a/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx b/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx
index a938b42d..dffbbf78 100644
--- a/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx
+++ b/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx
@@ -1,3 +1,4 @@
+import { Map as MaplibreMap } from "react-map-gl/maplibre";
import DeckGL from "@deck.gl/react";
import { LineLayer, ScatterplotLayer } from "@deck.gl/layers";
import { TerrainLayer, Tile3DLayer } from "@deck.gl/geo-layers";
@@ -14,7 +15,6 @@ import {
View,
} from "@deck.gl/core";
import { useEffect, useMemo, useState, useRef } from "react";
-import { StaticMap } from "react-map-gl";
import { CONTRAST_MAP_STYLES } from "../../constants/map-styles";
import {
NormalsDebugData,
@@ -58,7 +58,10 @@ import {
selectBoundingVolumeColorMode,
selectBoundingVolumeType,
} from "../../redux/slices/debug-options-slice";
-import { selectBaseMaps, selectSelectedBaseMapId } from "../../redux/slices/base-maps-slice";
+import {
+ selectBaseMaps,
+ selectSelectedBaseMapId,
+} from "../../redux/slices/base-maps-slice";
const TRANSITION_DURAITON = 4000;
const INITIAL_VIEW_STATE = {
@@ -212,8 +215,8 @@ export const DeckGlWrapper = ({
const baseMaps = useAppSelector(selectBaseMaps);
const selectedBaseMapId = useAppSelector(selectSelectedBaseMapId);
const selectedBaseMap = baseMaps.find((map) => map.id === selectedBaseMapId);
- const showTerrain=selectedBaseMap?.id === "Terrain";
- const mapStyle=selectedBaseMap?.mapUrl;
+ const showTerrain = selectedBaseMap?.id === "Terrain";
+ const mapStyle = selectedBaseMap?.mapUrl;
const VIEWS = useMemo(
() => [
new MapView({
@@ -761,21 +764,11 @@ export const DeckGlWrapper = ({
currentViewport = viewport;
}}
{!showTerrain && (
-
+
)}
{mapStyle && (
-
+
)}
diff --git a/src/components/layers-panel/layers-panel.spec.tsx b/src/components/layers-panel/layers-panel.spec.tsx
index 67d496ce..7d25e52a 100644
--- a/src/components/layers-panel/layers-panel.spec.tsx
+++ b/src/components/layers-panel/layers-panel.spec.tsx
@@ -12,14 +12,11 @@ import { LayerSettingsPanel } from "./layer-settings-panel";
import { load } from "@loaders.gl/core";
import { PageId } from "../../types";
import { setupStore } from "../../redux/store";
-import {
- selectSelectedBaseMapId,
-} from "../../redux/slices/base-maps-slice";
+import { selectSelectedBaseMapId } from "../../redux/slices/base-maps-slice";
jest.mock("@loaders.gl/core", () => ({
load: jest.fn(),
}));
-
jest.mock("@loaders.gl/i3s", () => ({
ArcGisWebSceneLoader: jest.fn(),
}));
@@ -277,7 +274,7 @@ describe("Layers Panel", () => {
});
const state = store.getState();
- const baseMapId = selectSelectedBaseMapId(state);
+ const baseMapId = selectSelectedBaseMapId(state);
expect(baseMapId).toEqual("https://test-base-map.url");
});
diff --git a/src/components/layers-panel/map-options-panel.spec.tsx b/src/components/layers-panel/map-options-panel.spec.tsx
index 6ee488ac..8f3130a1 100644
--- a/src/components/layers-panel/map-options-panel.spec.tsx
+++ b/src/components/layers-panel/map-options-panel.spec.tsx
@@ -14,6 +14,11 @@ import {
selectSelectedBaseMapId,
} from "../../redux/slices/base-maps-slice";
+jest.mock("@loaders.gl/i3s", () => {
+ return jest.fn().mockImplementation(() => {
+ return null;
+ });
+});
jest.mock("./base-map-list-item/base-map-list-item");
jest.mock("../plus-button/plus-button");
jest.mock("./delete-confirmation");
diff --git a/src/components/map-control-panel/map-control-panel.spec.tsx b/src/components/map-control-panel/map-control-panel.spec.tsx
index 879182b6..724001a8 100644
--- a/src/components/map-control-panel/map-control-panel.spec.tsx
+++ b/src/components/map-control-panel/map-control-panel.spec.tsx
@@ -5,6 +5,12 @@ import { MapControllPanel } from "./map-control-panel";
import { setupStore } from "../../redux/store";
import { setDragMode } from "../../redux/slices/drag-mode-slice";
+jest.mock("@loaders.gl/i3s", () => {
+ return jest.fn().mockImplementation(() => {
+ return null;
+ });
+});
+
describe("MapControllPanel", () => {
let componentElement;
let buttons;
diff --git a/src/pages/dashboard/dashboard.tsx b/src/pages/dashboard/dashboard.tsx
index f14c10de..5aff61b1 100644
--- a/src/pages/dashboard/dashboard.tsx
+++ b/src/pages/dashboard/dashboard.tsx
@@ -1,5 +1,5 @@
+import { Map as MaplibreMap } from "react-map-gl/maplibre";
import { useState, useCallback } from "react";
-import { StaticMap } from "react-map-gl";
import DeckGL from "@deck.gl/react";
import { Tile3DLayer } from "@deck.gl/geo-layers";
import { I3SLoader } from "@loaders.gl/i3s";
@@ -149,7 +149,7 @@ const Title = styled.div`
desktop: "73px",
tablet: "73px",
mobile: "45px",
- })};
+ })};
`;
const GreenText = styled.span`
@@ -179,7 +179,7 @@ const IphoneImage = styled.img`
left: 1670px;
z-index: 4;
width: 198px;
-
+
@media (max-width: 1670px) {
left: calc(100% - 184px);
}
@@ -310,7 +310,7 @@ export const Dashboard = () => {
return (
-
+
Explore and Debug I3S Data with one
Simple and Easy-to-Use Tool
@@ -322,7 +322,7 @@ export const Dashboard = () => {
layers={[tile3DLayer]}
initialViewState={viewState}
>
-
+
@@ -333,17 +333,13 @@ export const Dashboard = () => {
src={AppShowcase}
/>
)}
- {layout === Layout.Desktop &&
- (
- <>
-
-
- >
- )}
-
+ {layout === Layout.Desktop && (
+ <>
+
+
+ >
+ )}
+
diff --git a/src/redux/slices/attribute-stats-map-slice.spec.ts b/src/redux/slices/attribute-stats-map-slice.spec.ts
index f2f83d02..6f55d6d7 100644
--- a/src/redux/slices/attribute-stats-map-slice.spec.ts
+++ b/src/redux/slices/attribute-stats-map-slice.spec.ts
@@ -4,9 +4,13 @@ import {
getAttributeStatsInfo,
selectStatisitcsMap,
} from "./attribute-stats-map-slice";
-import { StatsInfo } from "@loaders.gl/i3s";
jest.mock("@loaders.gl/core");
+jest.mock("@loaders.gl/i3s", () => {
+ return jest.fn().mockImplementation(() => {
+ return null;
+ });
+});
describe("slice: attribute-stats-map", () => {
it("Selector should return the initial state", () => {
@@ -54,7 +58,7 @@ describe("slice: attribute-stats-map", () => {
});
});
-const stats: StatsInfo = {
+const stats = {
avg: 27.159085097827166,
max: 1408.377901,
min: 0,
diff --git a/src/redux/slices/base-maps-slice.spec.ts b/src/redux/slices/base-maps-slice.spec.ts
index 9d622eb2..f102075b 100644
--- a/src/redux/slices/base-maps-slice.spec.ts
+++ b/src/redux/slices/base-maps-slice.spec.ts
@@ -9,6 +9,12 @@ import reducer, {
deleteBaseMaps,
} from "./base-maps-slice";
+jest.mock("@loaders.gl/i3s", () => {
+ return jest.fn().mockImplementation(() => {
+ return null;
+ });
+});
+
describe("slice: base-maps", () => {
it("Reducer should return the initial state", () => {
expect(reducer(undefined, { type: undefined })).toEqual({
diff --git a/src/redux/slices/base-maps-slice.ts b/src/redux/slices/base-maps-slice.ts
index e1a10a84..356b5df3 100644
--- a/src/redux/slices/base-maps-slice.ts
+++ b/src/redux/slices/base-maps-slice.ts
@@ -4,7 +4,7 @@ import { BASE_MAPS } from "../../constants/map-styles";
import { RootState } from "../store";
// Define a type for the slice state
-interface BaseMapsState {
+export interface BaseMapsState {
baseMap: BaseMap[];
selectedBaseMap: string;
}
diff --git a/src/redux/slices/colors-by-attribute-slice.spec.ts b/src/redux/slices/colors-by-attribute-slice.spec.ts
index 62eae9c1..7969f4de 100644
--- a/src/redux/slices/colors-by-attribute-slice.spec.ts
+++ b/src/redux/slices/colors-by-attribute-slice.spec.ts
@@ -5,6 +5,12 @@ import reducer, {
setColorsByAttrubute,
} from "./colors-by-attribute-slice";
+jest.mock("@loaders.gl/i3s", () => {
+ return jest.fn().mockImplementation(() => {
+ return null;
+ });
+});
+
describe("slice: colors-by-attribute", () => {
it("Reducer should return the initial state", () => {
expect(reducer(undefined, { type: undefined })).toEqual({ value: null });
diff --git a/src/redux/slices/debug-option-slice.spec.ts b/src/redux/slices/debug-option-slice.spec.ts
index 277d5925..210e95fd 100644
--- a/src/redux/slices/debug-option-slice.spec.ts
+++ b/src/redux/slices/debug-option-slice.spec.ts
@@ -21,6 +21,12 @@ import reducer, {
setDebugOptions,
} from "./debug-options-slice";
+jest.mock("@loaders.gl/i3s", () => {
+ return jest.fn().mockImplementation(() => {
+ return null;
+ });
+});
+
describe("slice: debug-options", () => {
it("Reducer should return the initial state", () => {
expect(reducer(undefined, { type: undefined })).toEqual({
diff --git a/src/redux/slices/drag-mode-slice.spec.ts b/src/redux/slices/drag-mode-slice.spec.ts
index d6b1c67e..9308df16 100644
--- a/src/redux/slices/drag-mode-slice.spec.ts
+++ b/src/redux/slices/drag-mode-slice.spec.ts
@@ -6,6 +6,12 @@ import reducer, {
setDragMode,
} from "./drag-mode-slice";
+jest.mock("@loaders.gl/i3s", () => {
+ return jest.fn().mockImplementation(() => {
+ return null;
+ });
+});
+
describe("slice: drag-mode", () => {
it("Reducer should return the initial state", () => {
expect(reducer(undefined, { type: undefined })).toEqual({
diff --git a/src/redux/slices/flattened-sublayers-slice.spec.ts b/src/redux/slices/flattened-sublayers-slice.spec.ts
index ba9b89fc..1141f6e0 100644
--- a/src/redux/slices/flattened-sublayers-slice.spec.ts
+++ b/src/redux/slices/flattened-sublayers-slice.spec.ts
@@ -25,6 +25,11 @@ import {
} from "./test-data/fluttened-sublayers-slice-test-data";
jest.mock("@loaders.gl/core");
+jest.mock("@loaders.gl/i3s", () => {
+ return jest.fn().mockImplementation(() => {
+ return null;
+ });
+});
const previousState: flattenedSublayersState = {
single: {
diff --git a/src/redux/slices/uv-debug-texture-slice.spec.ts b/src/redux/slices/uv-debug-texture-slice.spec.ts
index c9684700..8d10424f 100644
--- a/src/redux/slices/uv-debug-texture-slice.spec.ts
+++ b/src/redux/slices/uv-debug-texture-slice.spec.ts
@@ -7,6 +7,11 @@ import {
import { ImageLoader } from "@loaders.gl/images";
jest.mock("@loaders.gl/core");
+jest.mock("@loaders.gl/i3s", () => {
+ return jest.fn().mockImplementation(() => {
+ return null;
+ });
+});
const imageStubObject = { width: 1024, height: 1024, data: new ArrayBuffer(0) };
diff --git a/yarn.lock b/yarn.lock
index 835a3442..0ff69e26 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,14 @@
# yarn lockfile v1
+"@75lb/deep-merge@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@75lb/deep-merge/-/deep-merge-1.1.1.tgz#3b06155b90d34f5f8cc2107d796f1853ba02fd6d"
+ integrity sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==
+ dependencies:
+ lodash.assignwith "^4.2.0"
+ typical "^7.1.1"
+
"@ampproject/remapping@^2.0.0":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.0.2.tgz#f3d9760bf30588c51408dbe7c05ff2bb13069307"
@@ -1658,131 +1666,90 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
-"@deck.gl/aggregation-layers@8.8.3":
- version "8.8.3"
- resolved "https://registry.yarnpkg.com/@deck.gl/aggregation-layers/-/aggregation-layers-8.8.3.tgz#589ca5eed9da588615318cdce36ce30f9d117ce5"
- integrity sha512-Ioaw01bsueNWX1hA2ripTDt2OYIPe5EbPxcwRCqCs0W1u9brkj/2BFS2Xy5XVNYy1L6Zgt5RK5/m9HafoV8vXA==
- dependencies:
- "@luma.gl/constants" "^8.5.14"
- "@luma.gl/shadertools" "^8.5.14"
- "@math.gl/web-mercator" "^3.6.0"
- d3-hexbin "^0.2.1"
-
-"@deck.gl/carto@8.8.3":
- version "8.8.3"
- resolved "https://registry.yarnpkg.com/@deck.gl/carto/-/carto-8.8.3.tgz#78b78670e7dd8bfa7d34fe860360b81551aba27d"
- integrity sha512-3+rwwig7OLbWf3X0xYsmu5bAtj/mBb/OPH9eO5RTrxSUyLtYDoIjVjNrOXSyiwKlHMuDGs9a7Ax5g4Ppf7ECEw==
- dependencies:
- "@loaders.gl/gis" "^3.2.0"
- "@loaders.gl/loader-utils" "^3.2.0"
- "@loaders.gl/mvt" "^3.2.0"
- "@loaders.gl/tiles" "^3.2.0"
- "@luma.gl/constants" "^8.5.14"
- "@math.gl/web-mercator" "^3.6.0"
- cartocolor "^4.0.2"
- d3-array "^2.8.0"
- d3-color "^2.0.0"
- d3-format "^2.0.0"
- d3-scale "^3.2.3"
- h3-js "^3.7.0"
- moment-timezone "^0.5.33"
- pbf "^3.2.1"
-
-"@deck.gl/core@8.8.3":
- version "8.8.3"
- resolved "https://registry.yarnpkg.com/@deck.gl/core/-/core-8.8.3.tgz#9e9b5db5bc172dee3fcd7c8bbca2b3af87bdbf41"
- integrity sha512-n9GnCfVMYY/zwnEfpj9lKycPL0yItlmmVvU9fkWN90ztoyH3INK49LP8amPo0F3s8LaqKeYpt7ddCSbC8D7NOw==
- dependencies:
- "@loaders.gl/core" "^3.2.0"
- "@loaders.gl/images" "^3.2.0"
- "@luma.gl/constants" "^8.5.14"
- "@luma.gl/core" "^8.5.14"
- "@math.gl/core" "^3.6.0"
- "@math.gl/sun" "^3.6.0"
- "@math.gl/web-mercator" "^3.6.0"
+"@deck.gl/core@^8.9.32":
+ version "8.9.32"
+ resolved "https://registry.yarnpkg.com/@deck.gl/core/-/core-8.9.32.tgz#45285a662068b08ebf04bf4509597c97adb923b4"
+ integrity sha512-LQA2wPYxuWqZyxrlFZMsLOr3tBHdOFXMMVz4wBNATCyObbc9THly8FgW2N48tHT6OY2fM2N5wmbw9uRLsCg1kw==
+ dependencies:
+ "@babel/runtime" "^7.0.0"
+ "@loaders.gl/core" "^3.4.13"
+ "@loaders.gl/images" "^3.4.13"
+ "@luma.gl/constants" "^8.5.21"
+ "@luma.gl/core" "^8.5.21"
+ "@luma.gl/webgl" "^8.5.21"
+ "@math.gl/core" "^3.6.2"
+ "@math.gl/sun" "^3.6.2"
+ "@math.gl/web-mercator" "^3.6.2"
"@probe.gl/env" "^3.5.0"
"@probe.gl/log" "^3.5.0"
"@probe.gl/stats" "^3.5.0"
gl-matrix "^3.0.0"
- math.gl "^3.6.0"
+ math.gl "^3.6.2"
mjolnir.js "^2.7.0"
-"@deck.gl/extensions@8.8.3":
- version "8.8.3"
- resolved "https://registry.yarnpkg.com/@deck.gl/extensions/-/extensions-8.8.3.tgz#6566fcf14369062e292f122d4c3893bb7c92e979"
- integrity sha512-cBN9HbzNfHjfqbnfSVZl2qJu53/2NrUsqHqtqISL+mj3lvHWNJomTa/NzPNKcvfRpumDnGjfSx1gFKph8a4XXA==
- dependencies:
- "@luma.gl/shadertools" "^8.5.14"
-
-"@deck.gl/geo-layers@8.8.3":
- version "8.8.3"
- resolved "https://registry.yarnpkg.com/@deck.gl/geo-layers/-/geo-layers-8.8.3.tgz#ae80a4bca46e5fc01ede379eb00c936ad141cf4b"
- integrity sha512-bnxjGVoHLoNPogyMcXl9HVVKVrAZPemVQk8aAIpXkIK48bG4Tlh3PMfDWizxzE4dmRpGezBOkqiF5yXwZClrew==
- dependencies:
- "@loaders.gl/3d-tiles" "^3.2.0"
- "@loaders.gl/gis" "^3.2.0"
- "@loaders.gl/loader-utils" "^3.2.0"
- "@loaders.gl/mvt" "^3.2.0"
- "@loaders.gl/schema" "^3.2.0"
- "@loaders.gl/terrain" "^3.2.0"
- "@loaders.gl/tiles" "^3.2.0"
- "@luma.gl/constants" "^8.5.14"
- "@luma.gl/experimental" "^8.5.14"
- "@math.gl/core" "^3.6.0"
- "@math.gl/culling" "^3.6.0"
- "@math.gl/web-mercator" "^3.6.0"
+"@deck.gl/extensions@^8.9.32":
+ version "8.9.32"
+ resolved "https://registry.yarnpkg.com/@deck.gl/extensions/-/extensions-8.9.32.tgz#34d64cb4b7374e1ae1960be2c559c8aa7d7814d4"
+ integrity sha512-v2ALtHRnIj8F4MA6jwDq+rqZIl/1gU2d+kA9+MgLMiO2GW4o+IcR8IuCfL/wXe2e10Wjhmc7LlhpVc13ljOWlw==
+ dependencies:
+ "@babel/runtime" "^7.0.0"
+ "@luma.gl/shadertools" "^8.5.21"
+
+"@deck.gl/geo-layers@^8.9.32":
+ version "8.9.32"
+ resolved "https://registry.yarnpkg.com/@deck.gl/geo-layers/-/geo-layers-8.9.32.tgz#175863836c30d5b264ba9441dc2b19360553cc7d"
+ integrity sha512-yJe96Z47qhdvnkN0u2DkDIAS2SGBS9XxWWT06lQpRIJnJl8PXStcHK0rvcZgdfMBW8INtcAfF8LnkEhqzbWnAQ==
+ dependencies:
+ "@babel/runtime" "^7.0.0"
+ "@loaders.gl/3d-tiles" "^3.4.13"
+ "@loaders.gl/gis" "^3.4.13"
+ "@loaders.gl/loader-utils" "^3.4.13"
+ "@loaders.gl/mvt" "^3.4.13"
+ "@loaders.gl/schema" "^3.4.13"
+ "@loaders.gl/terrain" "^3.4.13"
+ "@loaders.gl/tiles" "^3.4.13"
+ "@loaders.gl/wms" "^3.4.13"
+ "@luma.gl/constants" "^8.5.21"
+ "@luma.gl/experimental" "^8.5.21"
+ "@math.gl/core" "^3.6.2"
+ "@math.gl/culling" "^3.6.2"
+ "@math.gl/web-mercator" "^3.6.2"
"@types/geojson" "^7946.0.8"
h3-js "^3.7.0"
long "^3.2.0"
-"@deck.gl/google-maps@8.8.3":
- version "8.8.3"
- resolved "https://registry.yarnpkg.com/@deck.gl/google-maps/-/google-maps-8.8.3.tgz#a93473bb091ee9eee1dd0ecb50b828ad4933fc37"
- integrity sha512-e85ntVJf9yDShvOdrwnZYTn43LV6mxWCxNSN0oCEPMw0NjMcX6oNGXdORgj6NxC0KXK1a7awVNxggxXJ3+AgXA==
-
-"@deck.gl/json@8.8.3":
- version "8.8.3"
- resolved "https://registry.yarnpkg.com/@deck.gl/json/-/json-8.8.3.tgz#b3ae54e5ec1a0bf5917e03c73e4d8406582c39c0"
- integrity sha512-DbovlgaCnv053AevDrRNVSSt3VP8Vj0DXNHK8ejRfYDlFp8pOltkTUAxA7wBl5yrKeIBFjoHbPDEZ8MAbNxing==
- dependencies:
- d3-dsv "^1.0.8"
- expression-eval "^2.0.0"
-
-"@deck.gl/layers@8.8.3":
- version "8.8.3"
- resolved "https://registry.yarnpkg.com/@deck.gl/layers/-/layers-8.8.3.tgz#2484d48451241279480a711060b648cad73dae63"
- integrity sha512-YWwTzuHmyD1lQ59H70xhx1gXJBLbXo2Bdq9TwEAxwS0IO9K18yhgRv6bFaarGB8pS8zv5g0WiY5kcNyqaA6Cvw==
- dependencies:
- "@loaders.gl/images" "^3.2.0"
- "@loaders.gl/schema" "^3.2.0"
- "@luma.gl/constants" "^8.5.14"
- "@mapbox/tiny-sdf" "^1.1.0"
- "@math.gl/core" "^3.6.0"
- "@math.gl/polygon" "^3.6.0"
- "@math.gl/web-mercator" "^3.6.0"
- earcut "^2.0.6"
-
-"@deck.gl/mapbox@8.8.3":
- version "8.8.3"
- resolved "https://registry.yarnpkg.com/@deck.gl/mapbox/-/mapbox-8.8.3.tgz#a3aa9382d0f0119b0f367a278e09ada2f4379705"
- integrity sha512-P68AhgYmgMENiWRvi039S4aj41ppDrwwfwZgp4MdiTQA8X3OxLPhWNX3Z8QvY4BkQRGCPXSigeRBxFSkKC4ZbQ==
+"@deck.gl/layers@^8.9.32":
+ version "8.9.32"
+ resolved "https://registry.yarnpkg.com/@deck.gl/layers/-/layers-8.9.32.tgz#0c0b1909e7aba52ab156766c57f93c6d3d6af771"
+ integrity sha512-UuUBbRvBnL42pG70YY12YLspl6t/OacP4f/E3Ty0lliXe0m/5jJFW+moubsz3goBV0adMI+CQf57cdlqlfQ4AQ==
dependencies:
- "@types/mapbox-gl" "^2.6.3"
-
-"@deck.gl/mesh-layers@8.8.3":
- version "8.8.3"
- resolved "https://registry.yarnpkg.com/@deck.gl/mesh-layers/-/mesh-layers-8.8.3.tgz#a5924f959ff1b1327ea449c49d56322e8111d876"
- integrity sha512-7TCZD9uECUmgHTDmWaHZRRS7B66f91AZ5Fn9h1PFlTn49wIxnd7uSX2ARCfDgZj1FA+9QRY2GKM16vQOhEyxjg==
+ "@babel/runtime" "^7.0.0"
+ "@loaders.gl/images" "^3.4.13"
+ "@loaders.gl/schema" "^3.4.13"
+ "@luma.gl/constants" "^8.5.21"
+ "@mapbox/tiny-sdf" "^2.0.5"
+ "@math.gl/core" "^3.6.2"
+ "@math.gl/polygon" "^3.6.2"
+ "@math.gl/web-mercator" "^3.6.2"
+ earcut "^2.2.4"
+
+"@deck.gl/mesh-layers@^8.9.32":
+ version "8.9.32"
+ resolved "https://registry.yarnpkg.com/@deck.gl/mesh-layers/-/mesh-layers-8.9.32.tgz#51fa85c469b61116c3cb64c6d39c999d6bba5e25"
+ integrity sha512-6bsy54PrBHjZriEe3Rf1iBVAI8Afy3L1qAXqKemxYaH56rc5EYlrmD0E/zKcACikIRFmE7bgQz/i6hlSt7dBHg==
dependencies:
- "@loaders.gl/gltf" "^3.2.0"
- "@luma.gl/constants" "^8.5.14"
- "@luma.gl/experimental" "^8.5.14"
- "@luma.gl/shadertools" "^8.5.14"
+ "@babel/runtime" "^7.0.0"
+ "@loaders.gl/gltf" "^3.4.13"
+ "@luma.gl/constants" "^8.5.21"
+ "@luma.gl/experimental" "^8.5.21"
+ "@luma.gl/shadertools" "^8.5.21"
-"@deck.gl/react@8.8.3":
- version "8.8.3"
- resolved "https://registry.yarnpkg.com/@deck.gl/react/-/react-8.8.3.tgz#e0e5ea77d6dd95bde2a0ef4490ff5aa3df809a0f"
- integrity sha512-mFANO0HNze7iHFAtHA8njDELOWHsEC0D7dkijZugk86qPitJPCuY0aac9tLp5P0B9S3faMWgvYW+KbEA29YqlA==
+"@deck.gl/react@^8.9.32":
+ version "8.9.32"
+ resolved "https://registry.yarnpkg.com/@deck.gl/react/-/react-8.9.32.tgz#9111801def2ad28c90292fbbbdea3de65288891a"
+ integrity sha512-FGBry/W8lCokSarKXhK7iWwdAG1cjJwEwlAv6nI/rmG28e7uElyVvOsMzzoIEFrQTovN4Xzs4RZrxliFk8CaWg==
+ dependencies:
+ "@babel/runtime" "^7.0.0"
"@discoveryjs/json-ext@^0.5.0":
version "0.5.6"
@@ -2159,18 +2126,19 @@
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
-"@loaders.gl/3d-tiles@^3.2.0":
- version "3.2.12"
- resolved "https://registry.yarnpkg.com/@loaders.gl/3d-tiles/-/3d-tiles-3.2.12.tgz#a9e55526d15231f5365ff1b6960855147640ccb1"
- integrity sha512-fhJAW4KiMZ14isp/TaZe7GVptAtB7eT0MqM1nDoqWR7SlsxOrtW4S/hC+g58isf1FQ10DutpL8zs0ORVhSaweQ==
+"@loaders.gl/3d-tiles@^3.4.13":
+ version "3.4.14"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/3d-tiles/-/3d-tiles-3.4.14.tgz#c04781acf377e13c16b41eeaa14e46dfc96c90ca"
+ integrity sha512-cxStTSLIJgRZnkTBYTcp9FPVBQWQlJMzW1LRlaKWiwAHkOKBElszzApIIEvRvZGSrs8k8TUi6BJ1Y41iiANF7w==
dependencies:
- "@loaders.gl/draco" "3.2.12"
- "@loaders.gl/gltf" "3.2.12"
- "@loaders.gl/loader-utils" "3.2.12"
- "@loaders.gl/math" "3.2.12"
- "@loaders.gl/tiles" "3.2.12"
+ "@loaders.gl/draco" "3.4.14"
+ "@loaders.gl/gltf" "3.4.14"
+ "@loaders.gl/loader-utils" "3.4.14"
+ "@loaders.gl/math" "3.4.14"
+ "@loaders.gl/tiles" "3.4.14"
"@math.gl/core" "^3.5.1"
"@math.gl/geospatial" "^3.5.1"
+ long "^5.2.1"
"@loaders.gl/3d-tiles@^4.0.0-beta.2":
version "4.0.0-beta.2"
@@ -2207,16 +2175,15 @@
lz4js "^0.2.0"
zstd-codec "^0.1"
-"@loaders.gl/core@^3.2.0":
- version "3.2.12"
- resolved "https://registry.yarnpkg.com/@loaders.gl/core/-/core-3.2.12.tgz#55a58b71d1aa64aa404d0369d190392fd2d4faca"
- integrity sha512-kRQZGZ2+bvd++spjfp00aq2e3RrawAlaCwFxVyyQT6kYyQIzexr/obKd3X+yxYcrr4kUsav2iGqhLVObINlStQ==
+"@loaders.gl/core@^3.4.13":
+ version "3.4.14"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/core/-/core-3.4.14.tgz#79e5c54112f5bfe398da1718dc4fb661ffa213fd"
+ integrity sha512-5PFcjv7xC8AYL17juDMrvo8n0Fcwg9s8F4BaM2YCNUsb9RCI2SmLuIFJMcx1GgHO5vL0WiTIKO+JT4n1FuNR6w==
dependencies:
"@babel/runtime" "^7.3.1"
- "@loaders.gl/loader-utils" "3.2.12"
- "@loaders.gl/worker-utils" "3.2.12"
- "@probe.gl/log" "^3.5.0"
- probe.gl "^3.4.0"
+ "@loaders.gl/loader-utils" "3.4.14"
+ "@loaders.gl/worker-utils" "3.4.14"
+ "@probe.gl/log" "^4.0.1"
"@loaders.gl/core@^4.0.0-beta.2":
version "4.0.0-beta.2"
@@ -2228,16 +2195,16 @@
"@loaders.gl/worker-utils" "4.0.0-beta.2"
"@probe.gl/log" "^4.0.2"
-"@loaders.gl/draco@3.2.12":
- version "3.2.12"
- resolved "https://registry.yarnpkg.com/@loaders.gl/draco/-/draco-3.2.12.tgz#e561431a2c6b4971abcf39e7704aa1f36a1f5f30"
- integrity sha512-QoDlnL3ouwW3OSMRbyE4DyY41oxqadtaQ7wU3K6us4CF0XgvOToZZTG6QnCfF8FauFZ8JMebn6NT1LtobTNVYQ==
+"@loaders.gl/draco@3.4.14":
+ version "3.4.14"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/draco/-/draco-3.4.14.tgz#8555d9179db334faaded00d2902c318478a93b07"
+ integrity sha512-HwNFFt+dKZqFtzI0uVGvRkudFEZXxybJ+ZRsNkBbzAWoMM5L1TpuLs6DPsqPQUIT9HXNHzov18cZI0gK5bTJpg==
dependencies:
"@babel/runtime" "^7.3.1"
- "@loaders.gl/loader-utils" "3.2.12"
- "@loaders.gl/schema" "3.2.12"
- "@loaders.gl/worker-utils" "3.2.12"
- draco3d "1.4.1"
+ "@loaders.gl/loader-utils" "3.4.14"
+ "@loaders.gl/schema" "3.4.14"
+ "@loaders.gl/worker-utils" "3.4.14"
+ draco3d "1.5.5"
"@loaders.gl/draco@4.0.0-beta.2":
version "4.0.0-beta.2"
@@ -2250,26 +2217,27 @@
"@loaders.gl/worker-utils" "4.0.0-beta.2"
draco3d "1.5.5"
-"@loaders.gl/gis@3.2.12", "@loaders.gl/gis@^3.2.0":
- version "3.2.12"
- resolved "https://registry.yarnpkg.com/@loaders.gl/gis/-/gis-3.2.12.tgz#d47ae587a7e5bef796fc74ccbe0c699e5a54d0a2"
- integrity sha512-mm7YtDY2bnf+gWTKHRYK2T0itWilidyvsmZ6AcP5IiIwWoSaKBvBGq+mpzVWTKhgPvul7dP8+u2u7iuromxTGQ==
+"@loaders.gl/gis@3.4.14", "@loaders.gl/gis@^3.4.13":
+ version "3.4.14"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/gis/-/gis-3.4.14.tgz#a9b3eed45e2a4465a754e3404061222c51b1334a"
+ integrity sha512-5cmhIwioPpSkfNzFRM3PbFDecjpYIhtEOFbryu3rE37npKHLTD2tF4ocQxUPB+QVED6GLwWBdzJIs64UWGrqjw==
dependencies:
- "@loaders.gl/loader-utils" "3.2.12"
- "@loaders.gl/schema" "3.2.12"
+ "@loaders.gl/loader-utils" "3.4.14"
+ "@loaders.gl/schema" "3.4.14"
"@mapbox/vector-tile" "^1.3.1"
"@math.gl/polygon" "^3.5.1"
pbf "^3.2.1"
-"@loaders.gl/gltf@3.2.12", "@loaders.gl/gltf@^3.2.0":
- version "3.2.12"
- resolved "https://registry.yarnpkg.com/@loaders.gl/gltf/-/gltf-3.2.12.tgz#3b602986b2e215ffc48c2b110e4be381be0326f5"
- integrity sha512-vdLdWruh4nqmDm/9T0HWX30fJ+UVtB35uQk9dhN/couvrXXtdpkvtb7aFdX0nlCLcrbRlcCYbuCfKctt1CF2mg==
+"@loaders.gl/gltf@3.4.14", "@loaders.gl/gltf@^3.4.13":
+ version "3.4.14"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/gltf/-/gltf-3.4.14.tgz#8677d6793cf0827dee52711e55fbdc445e9f9bb8"
+ integrity sha512-jv+B5S/taiwzXAOu5D9nk1jjU9+JCCr/6/nGguCE2Ya3IX7CI1Nlnp20eKKhW8ZCEokZavMNT0bNbiJ5ahEFjA==
dependencies:
- "@loaders.gl/draco" "3.2.12"
- "@loaders.gl/images" "3.2.12"
- "@loaders.gl/loader-utils" "3.2.12"
- "@loaders.gl/textures" "3.2.12"
+ "@loaders.gl/draco" "3.4.14"
+ "@loaders.gl/images" "3.4.14"
+ "@loaders.gl/loader-utils" "3.4.14"
+ "@loaders.gl/textures" "3.4.14"
+ "@math.gl/core" "^3.5.1"
"@loaders.gl/gltf@4.0.0-beta.2":
version "4.0.0-beta.2"
@@ -2300,12 +2268,12 @@
"@math.gl/geospatial" "^3.5.1"
md5 "^2.3.0"
-"@loaders.gl/images@3.2.12", "@loaders.gl/images@^3.2.0":
- version "3.2.12"
- resolved "https://registry.yarnpkg.com/@loaders.gl/images/-/images-3.2.12.tgz#9ab2bab72892f72ecb4450f1343f6d12fcc56ffd"
- integrity sha512-acPKRg9EwgrPyItF97x8LM9p4b8GR03JY+wFJwzBlVdOZXx1dmz1t4rVynRDwgAUgybGKLoPfJtwTIKARnICYQ==
+"@loaders.gl/images@3.4.14", "@loaders.gl/images@^3.4.13":
+ version "3.4.14"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/images/-/images-3.4.14.tgz#d7a4950f11b48d028cf3719cf6498945f4a05c14"
+ integrity sha512-tL447hTWhOKBOB87SE4hvlC8OkbRT0mEaW1a/wIS9f4HnYDa/ycRLMV+nvdvYMZur4isNPam44oiRqi7GcILkg==
dependencies:
- "@loaders.gl/loader-utils" "3.2.12"
+ "@loaders.gl/loader-utils" "3.4.14"
"@loaders.gl/images@4.0.0-beta.2":
version "4.0.0-beta.2"
@@ -2314,14 +2282,14 @@
dependencies:
"@loaders.gl/loader-utils" "4.0.0-beta.2"
-"@loaders.gl/loader-utils@3.2.12", "@loaders.gl/loader-utils@^3.2.0":
- version "3.2.12"
- resolved "https://registry.yarnpkg.com/@loaders.gl/loader-utils/-/loader-utils-3.2.12.tgz#dfa9093d52a806128ff758e06f4b90cfc46d46db"
- integrity sha512-OXu7vqBvYj2HD0Tcle8RwRAktJ5BsBTZc6ADPNia7FOGI9sA2ZDECPa0g8gBtKpbhzluLZzPj5N4OPdL6hNiQg==
+"@loaders.gl/loader-utils@3.4.14", "@loaders.gl/loader-utils@^3.4.13":
+ version "3.4.14"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/loader-utils/-/loader-utils-3.4.14.tgz#d94decc279fd2304b8762c87d8d9626058d91f21"
+ integrity sha512-HCTY2/F83RLbZWcTvWLVJ1vke3dl6Bye20HU1AqkA37J2vzHwOZ8kj6eee8eeSkIkf7VIFwjyhVJxe0flQE/Bw==
dependencies:
"@babel/runtime" "^7.3.1"
- "@loaders.gl/worker-utils" "3.2.12"
- "@probe.gl/stats" "^3.5.0"
+ "@loaders.gl/worker-utils" "3.4.14"
+ "@probe.gl/stats" "^4.0.1"
"@loaders.gl/loader-utils@4.0.0-beta.2", "@loaders.gl/loader-utils@^4.0.0-beta.2":
version "4.0.0-beta.2"
@@ -2332,13 +2300,13 @@
"@loaders.gl/worker-utils" "4.0.0-beta.2"
"@probe.gl/stats" "^4.0.2"
-"@loaders.gl/math@3.2.12":
- version "3.2.12"
- resolved "https://registry.yarnpkg.com/@loaders.gl/math/-/math-3.2.12.tgz#148853e5708ed9c59b2f7c093bc3e1309579a92e"
- integrity sha512-+34kJ6v//33xJq7mFd5ndNe0BU5bgy4afQ5ciy4VVhQns/Keml9hl/i8eOY2lFt/SUs1T2CSe1+X5065L0CWCA==
+"@loaders.gl/math@3.4.14":
+ version "3.4.14"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/math/-/math-3.4.14.tgz#c27993f0dbe5a88f3ffa07e5240ce27ea5e92392"
+ integrity sha512-OBEVX6Q5pMipbCAiZyX2+q1zRd0nw8M2dclpny05on8700OaKMwfs47wEUnbfCU3iyHad3sgsAxN3EIh+kuo9Q==
dependencies:
- "@loaders.gl/images" "3.2.12"
- "@loaders.gl/loader-utils" "3.2.12"
+ "@loaders.gl/images" "3.4.14"
+ "@loaders.gl/loader-utils" "3.4.14"
"@math.gl/core" "^3.5.1"
"@loaders.gl/math@4.0.0-beta.2":
@@ -2350,24 +2318,23 @@
"@loaders.gl/loader-utils" "4.0.0-beta.2"
"@math.gl/core" "^3.5.1"
-"@loaders.gl/mvt@^3.2.0":
- version "3.2.12"
- resolved "https://registry.yarnpkg.com/@loaders.gl/mvt/-/mvt-3.2.12.tgz#ff399c252738597a608687d801eb47a1f4be5f5a"
- integrity sha512-gr81UErVuZ2JMGwnrz/Bg4SGe3i6T3VQ9Z8bjGU50pwpFMgn+fKmQe5CyoC+XvYQ8nDML76QCgo5sLX+9ePhHA==
+"@loaders.gl/mvt@^3.4.13":
+ version "3.4.14"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/mvt/-/mvt-3.4.14.tgz#fee16db321301e94b329c6be9db9420db0be17c8"
+ integrity sha512-tozGmWvsJacjaLavjX4S/5yNDV9S4wJb7+vPG/nXWX2gTtgZ1mxcFQAtAJjokqpy37d1ZhLt+TXh0HrLoTmRgw==
dependencies:
- "@loaders.gl/gis" "3.2.12"
- "@loaders.gl/loader-utils" "3.2.12"
- "@loaders.gl/schema" "3.2.12"
+ "@loaders.gl/gis" "3.4.14"
+ "@loaders.gl/loader-utils" "3.4.14"
+ "@loaders.gl/schema" "3.4.14"
"@math.gl/polygon" "^3.5.1"
pbf "^3.2.1"
-"@loaders.gl/schema@3.2.12", "@loaders.gl/schema@^3.2.0":
- version "3.2.12"
- resolved "https://registry.yarnpkg.com/@loaders.gl/schema/-/schema-3.2.12.tgz#312911131d7fc90e05b771e95696dfddacb7c738"
- integrity sha512-IP/fniG3PsMvhU+kkryULAoszgNEUSmfCvKZujDtU65xgIHScNQP87+wgqfZFScftEX0iBSahr7QYdQCEsv83w==
+"@loaders.gl/schema@3.4.14", "@loaders.gl/schema@^3.4.13":
+ version "3.4.14"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/schema/-/schema-3.4.14.tgz#6f145065a2abaf402aa419cfa25ec7f1fdeed487"
+ integrity sha512-r6BEDfUvbvzgUnh/MtkR5RzrkIwo1x1jtPFRTSJVsIZO7arXXlu3blffuv5ppEkKpNZ1Xzd9WtHp/JIkuctsmw==
dependencies:
"@types/geojson" "^7946.0.7"
- apache-arrow "^4.0.0"
"@loaders.gl/schema@4.0.0-beta.2":
version "4.0.0-beta.2"
@@ -2376,25 +2343,26 @@
dependencies:
"@types/geojson" "^7946.0.7"
-"@loaders.gl/terrain@^3.2.0":
- version "3.2.12"
- resolved "https://registry.yarnpkg.com/@loaders.gl/terrain/-/terrain-3.2.12.tgz#742916b7091b1a076420ae9e5186899d211b7b8c"
- integrity sha512-Vluf7PrVl/0eId4Qqbjrla97XnNuVpmrE4sZHyY3gjdpxn/liMwYmIzts8ZWkB7pXrH5CmN+fUBOyPbNh9vuLw==
+"@loaders.gl/terrain@^3.4.13":
+ version "3.4.14"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/terrain/-/terrain-3.4.14.tgz#8cd469b356b94c0d31ffc987c9166ccd33fe1d86"
+ integrity sha512-vhchEVkPaWXnqd2ofujG2AEnBsk4hEw6LWSaFY7E3VMzNhI9l2EHvyU3+Hs03jYbXM4oLlQPGqd/T7x+5IMtig==
dependencies:
"@babel/runtime" "^7.3.1"
- "@loaders.gl/loader-utils" "3.2.12"
- "@loaders.gl/schema" "3.2.12"
+ "@loaders.gl/images" "3.4.14"
+ "@loaders.gl/loader-utils" "3.4.14"
+ "@loaders.gl/schema" "3.4.14"
"@mapbox/martini" "^0.2.0"
-"@loaders.gl/textures@3.2.12":
- version "3.2.12"
- resolved "https://registry.yarnpkg.com/@loaders.gl/textures/-/textures-3.2.12.tgz#75cda15b13761ba48f56e5751e2f7eb219105b83"
- integrity sha512-xludkKPnzdQAHC19J0depqEvUH8x61cjsMId9Q1Et/emwI5TyEiDK78vl7tsIzuOh/IvrPHykRxfXp4uayW+Nw==
+"@loaders.gl/textures@3.4.14":
+ version "3.4.14"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/textures/-/textures-3.4.14.tgz#a229ff70592b7a90af96fdd361cda48b9c95bec9"
+ integrity sha512-iKDHL2ZlOUud4/e3g0p0SyvkukznopYy6La3O6I9vDfKp8peuKMRRcTfFfd/zH0OqQC0hIhCXNz46vRLu7h6ng==
dependencies:
- "@loaders.gl/images" "3.2.12"
- "@loaders.gl/loader-utils" "3.2.12"
- "@loaders.gl/schema" "3.2.12"
- "@loaders.gl/worker-utils" "3.2.12"
+ "@loaders.gl/images" "3.4.14"
+ "@loaders.gl/loader-utils" "3.4.14"
+ "@loaders.gl/schema" "3.4.14"
+ "@loaders.gl/worker-utils" "3.4.14"
ktx-parse "^0.0.4"
texture-compressor "^1.0.2"
@@ -2410,7 +2378,7 @@
ktx-parse "^0.0.4"
texture-compressor "^1.0.2"
-"@loaders.gl/tiles@3.2.12", "@loaders.gl/tiles@4.0.0-beta.2", "@loaders.gl/tiles@^3.2.0", "@loaders.gl/tiles@^4.0.0-beta.2":
+"@loaders.gl/tiles@3.4.14", "@loaders.gl/tiles@4.0.0-beta.2", "@loaders.gl/tiles@^3.4.13", "@loaders.gl/tiles@^4.0.0-beta.2":
version "4.0.0-beta.2"
resolved "https://registry.yarnpkg.com/@loaders.gl/tiles/-/tiles-4.0.0-beta.2.tgz#fbad0b87b75dd7bdb26ae586cfbd194ea0675c91"
integrity sha512-EdwwYDqfzSA/aKpDxRv2hbHduMSTWauRmKC4j2E9oDGkl1lsIxgytR0ifjmqxHoZ4T3m91i/fcymI0CbS8k+aA==
@@ -2423,10 +2391,24 @@
"@math.gl/web-mercator" "^3.5.1"
"@probe.gl/stats" "^4.0.2"
-"@loaders.gl/worker-utils@3.2.12":
- version "3.2.12"
- resolved "https://registry.yarnpkg.com/@loaders.gl/worker-utils/-/worker-utils-3.2.12.tgz#c47a6ddc2eae2845f7e9be14cf33f672da164fb0"
- integrity sha512-MRgk8ln4Ur2RAnalD6OWstSuIAlf0l/26KTHtJiVD+HtmLJDoxSoQOHsnrEsdE18m+8NpAQgTD+rDzZtEpsnlw==
+"@loaders.gl/wms@^3.4.13":
+ version "3.4.14"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/wms/-/wms-3.4.14.tgz#1bfde56078409fb41a749c1ef9e22a870fa59e3e"
+ integrity sha512-D1pObPSUj885zGPyHIb7GtcwpHQNk0T8nK/4EHb0SHLe0y1b4qwqSOswdS9geXT9Q61hyhl/L0zqyTgwjiMStg==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ "@loaders.gl/images" "3.4.14"
+ "@loaders.gl/loader-utils" "3.4.14"
+ "@loaders.gl/schema" "3.4.14"
+ "@loaders.gl/xml" "3.4.14"
+ "@turf/rewind" "^5.1.5"
+ deep-strict-equal "^0.2.0"
+ lerc "^4.0.1"
+
+"@loaders.gl/worker-utils@3.4.14":
+ version "3.4.14"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/worker-utils/-/worker-utils-3.4.14.tgz#5391a416a3d60e03b9edcedb285af44312d40d2e"
+ integrity sha512-PUSwxoAYbskisXd0KfYEQ902b0igBA2UAWdP6PzPvY+tJmobfh74dTNwrrBQ1rGXQxxmGx6zc6/ksX6mlIzIrg==
dependencies:
"@babel/runtime" "^7.3.1"
@@ -2437,6 +2419,16 @@
dependencies:
"@babel/runtime" "^7.3.1"
+"@loaders.gl/xml@3.4.14":
+ version "3.4.14"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/xml/-/xml-3.4.14.tgz#8bfdbed0440cabdc891f152c80b05128cb019d24"
+ integrity sha512-SNMGOHz4p8Cw+M6kxXhFEjXdNddJPOZY1rzNmRq7NYdGQlQYYeJdqV5HWzHx9BkoQYyrDXkrweGN0mY9QxCfeA==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ "@loaders.gl/loader-utils" "3.4.14"
+ "@loaders.gl/schema" "3.4.14"
+ fast-xml-parser "^4.2.5"
+
"@loaders.gl/zip@4.0.0-beta.2":
version "4.0.0-beta.2"
resolved "https://registry.yarnpkg.com/@loaders.gl/zip/-/zip-4.0.0-beta.2.tgz#0c641d49e1068e13d2f37bc90529cc791ed123dd"
@@ -2447,100 +2439,95 @@
jszip "^3.1.5"
md5 "^2.3.0"
-"@luma.gl/constants@8.5.18", "@luma.gl/constants@^8.5.14", "@luma.gl/constants@^8.5.4":
+"@luma.gl/constants@8.5.21", "@luma.gl/constants@^8.5.21":
+ version "8.5.21"
+ resolved "https://registry.yarnpkg.com/@luma.gl/constants/-/constants-8.5.21.tgz#81825e9bd9bdf4a9449bcface8b504389f65f634"
+ integrity sha512-aJxayGxTT+IRd1vfpcgD/cKSCiVJjBNiuiChS96VulrmCvkzUOLvYXr42y5qKB4RyR7vOIda5uQprNzoHrhQAA==
+
+"@luma.gl/constants@^8.5.4":
version "8.5.18"
resolved "https://registry.yarnpkg.com/@luma.gl/constants/-/constants-8.5.18.tgz#f18886dfb1407225cd18cb792e490219f91eb3d2"
integrity sha512-lQLGAlroQaeJkAUwrb1fRiHlMBP9/ukyjnZ1QlYgXYyeC7/9XhLx4rqBlOzQ2sxcTHHwi73nHD0P2XmVuAccBg==
-"@luma.gl/core@^8.5.14":
- version "8.5.18"
- resolved "https://registry.yarnpkg.com/@luma.gl/core/-/core-8.5.18.tgz#622a71746df23ed262e52dca613de07146e68513"
- integrity sha512-XvxE2WE9jFEweJftczQ4QPd8FD23H8mWJoQej7llnyta0Xqb18Cx2VOzuyQ4uN7Uab42YkwXTu25uAq0SdAehA==
+"@luma.gl/core@^8.5.21":
+ version "8.5.21"
+ resolved "https://registry.yarnpkg.com/@luma.gl/core/-/core-8.5.21.tgz#dc630f1ea18900287ac8da60724d0d8f783b31b1"
+ integrity sha512-11jQJQEMoR/IN2oIsd4zFxiQJk6FE+xgVIMUcsCTBuzafTtQZ8Po9df8mt+MVewpDyBlTVs6g8nxHRH4np1ukA==
dependencies:
"@babel/runtime" "^7.0.0"
- "@luma.gl/constants" "8.5.18"
- "@luma.gl/engine" "8.5.18"
- "@luma.gl/gltools" "8.5.18"
- "@luma.gl/shadertools" "8.5.18"
- "@luma.gl/webgl" "8.5.18"
+ "@luma.gl/constants" "8.5.21"
+ "@luma.gl/engine" "8.5.21"
+ "@luma.gl/gltools" "8.5.21"
+ "@luma.gl/shadertools" "8.5.21"
+ "@luma.gl/webgl" "8.5.21"
-"@luma.gl/engine@8.5.18":
- version "8.5.18"
- resolved "https://registry.yarnpkg.com/@luma.gl/engine/-/engine-8.5.18.tgz#78fda10cbd4a576ea04160888e0b4b5003471b18"
- integrity sha512-hLdtEPk3yt8ikL3g9qVc5FuMPMdhnj1ykPgmG6Mh4lRlCProgGSlwqWuAkzPYwYqIBqKlPNMv8DavRfsKAKc3g==
+"@luma.gl/engine@8.5.21":
+ version "8.5.21"
+ resolved "https://registry.yarnpkg.com/@luma.gl/engine/-/engine-8.5.21.tgz#bc8e55371fb95e33fec195c08abf35598c55da42"
+ integrity sha512-IG3WQSKXFNUEs8QG7ZjHtGiOtsakUu+BAxtJ6997A6/F06yynZ44tPe5NU70jG9Yfu3kV0LykPZg7hO3vXZDiA==
dependencies:
"@babel/runtime" "^7.0.0"
- "@luma.gl/constants" "8.5.18"
- "@luma.gl/gltools" "8.5.18"
- "@luma.gl/shadertools" "8.5.18"
- "@luma.gl/webgl" "8.5.18"
+ "@luma.gl/constants" "8.5.21"
+ "@luma.gl/gltools" "8.5.21"
+ "@luma.gl/shadertools" "8.5.21"
+ "@luma.gl/webgl" "8.5.21"
"@math.gl/core" "^3.5.0"
"@probe.gl/env" "^3.5.0"
"@probe.gl/stats" "^3.5.0"
"@types/offscreencanvas" "^2019.7.0"
-"@luma.gl/experimental@^8.5.14":
- version "8.5.18"
- resolved "https://registry.yarnpkg.com/@luma.gl/experimental/-/experimental-8.5.18.tgz#6162bac53e3b96f9f2662ee5f17683d36f1ff60a"
- integrity sha512-Bw8mwO3NVYGwzYr1Edl4LVbT7JORIpymdXpmmoqP9SpWAh5HJmNSS8wt1FDaQGVCgSA/5QpmmZb1NjIKX4B40g==
+"@luma.gl/experimental@^8.5.21":
+ version "8.5.21"
+ resolved "https://registry.yarnpkg.com/@luma.gl/experimental/-/experimental-8.5.21.tgz#1ab5ad084202ae3c05e16b7e4b430c791f86a50d"
+ integrity sha512-uFKPChGofyihOKxtqJy78QCQCDFnuMTK4QHrUX/qiTnvFSO8BgtTUevKvWGN9lBvq+uDD0lSieeF9yBzhQfAzw==
dependencies:
- "@luma.gl/constants" "8.5.18"
+ "@luma.gl/constants" "8.5.21"
"@math.gl/core" "^3.5.0"
earcut "^2.0.6"
-"@luma.gl/gltools@8.5.18":
- version "8.5.18"
- resolved "https://registry.yarnpkg.com/@luma.gl/gltools/-/gltools-8.5.18.tgz#df8501c01ad6c3b114a5e5d2e6526546df009d40"
- integrity sha512-AnZ8fxsJz/wRdUJazsFvTXbh8ypYX9rATPJj8YlDv08DGGFTQiq8MurzbEjXaEYshAu5w9rXd22nQXkQziUhmQ==
+"@luma.gl/gltools@8.5.21":
+ version "8.5.21"
+ resolved "https://registry.yarnpkg.com/@luma.gl/gltools/-/gltools-8.5.21.tgz#1077305a30712f20cd904c2e4cbe5b9263b7d138"
+ integrity sha512-6qZ0LaT2Mxa4AJT5F44TFoaziokYiHUwO45vnM/NYUOIu9xevcmS6VtToawytMEACGL6PDeDyVqP3Y80SDzq5g==
dependencies:
"@babel/runtime" "^7.0.0"
- "@luma.gl/constants" "8.5.18"
+ "@luma.gl/constants" "8.5.21"
"@probe.gl/env" "^3.5.0"
"@probe.gl/log" "^3.5.0"
"@types/offscreencanvas" "^2019.7.0"
-"@luma.gl/shadertools@8.5.18", "@luma.gl/shadertools@^8.5.14":
- version "8.5.18"
- resolved "https://registry.yarnpkg.com/@luma.gl/shadertools/-/shadertools-8.5.18.tgz#2007c7173b95c552910fdf722876e25d8f2385a3"
- integrity sha512-orkdnlVLB8AO4yf9jXXZqEG/UuwVg/v3Gmo4/F2vdrwkUMN+wUZFUdhssDGEGWvuauZWK9Mbz8XrxC0gmLbWzw==
+"@luma.gl/shadertools@8.5.21", "@luma.gl/shadertools@^8.5.21":
+ version "8.5.21"
+ resolved "https://registry.yarnpkg.com/@luma.gl/shadertools/-/shadertools-8.5.21.tgz#9a8e087e39e34f055f9fdda9fac527c04f637b4e"
+ integrity sha512-WQah7yFDJ8cNCLPYpIm3r0wSlXLvjoA279fcknmATvvkW3/i8PcCJ/nYEBJO3hHEwwMQxD16+YZu/uwGiifLMg==
dependencies:
"@babel/runtime" "^7.0.0"
"@math.gl/core" "^3.5.0"
-"@luma.gl/webgl@8.5.18":
- version "8.5.18"
- resolved "https://registry.yarnpkg.com/@luma.gl/webgl/-/webgl-8.5.18.tgz#fe6c06fcc77e6559ff2532e47e589918ec939b3c"
- integrity sha512-8pRMq4olLzEv7ToDtCagGDklkIu1iFFBEXT4Rh11ohrfUiDAPfGz5hJrr3m0XtsVfS1CQ5QPWN2tQclmXOL+cQ==
+"@luma.gl/webgl@8.5.21", "@luma.gl/webgl@^8.5.21":
+ version "8.5.21"
+ resolved "https://registry.yarnpkg.com/@luma.gl/webgl/-/webgl-8.5.21.tgz#fe67bf19a41231840ca677ae702969c7a9a5d7a0"
+ integrity sha512-ZVLO4W5UuaOlzZIwmFWhnmZ1gYoU97a+heMqxLrSSmCUAsSu3ZETUex9gOmzdM1WWxcdWaa3M68rvKCNEgwz0Q==
dependencies:
"@babel/runtime" "^7.0.0"
- "@luma.gl/constants" "8.5.18"
- "@luma.gl/gltools" "8.5.18"
+ "@luma.gl/constants" "8.5.21"
+ "@luma.gl/gltools" "8.5.21"
"@probe.gl/env" "^3.5.0"
"@probe.gl/stats" "^3.5.0"
-"@mapbox/geojson-rewind@^0.5.0":
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/@mapbox/geojson-rewind/-/geojson-rewind-0.5.1.tgz#adbe16dc683eb40e90934c51a5e28c7bbf44f4e1"
- integrity sha512-eL7fMmfTBKjrb+VFHXCGv9Ot0zc3C0U+CwXo1IrP+EPwDczLoXv34Tgq3y+2mPSFNVUXgU42ILWJTC7145KPTA==
+"@mapbox/geojson-rewind@^0.5.2":
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz#591a5d71a9cd1da1a0bf3420b3bea31b0fc7946a"
+ integrity sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==
dependencies:
get-stream "^6.0.1"
- minimist "^1.2.5"
-
-"@mapbox/geojson-types@^1.0.2":
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz#9aecf642cb00eab1080a57c4f949a65b4a5846d6"
- integrity sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==
+ minimist "^1.2.6"
-"@mapbox/jsonlint-lines-primitives@^2.0.2":
+"@mapbox/jsonlint-lines-primitives@^2.0.2", "@mapbox/jsonlint-lines-primitives@~2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234"
integrity sha1-zlblOfg1UrWNENZy6k1vya3HsjQ=
-"@mapbox/mapbox-gl-supported@^1.5.0":
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz#f60b6a55a5d8e5ee908347d2ce4250b15103dc8e"
- integrity sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==
-
"@mapbox/martini@^0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@mapbox/martini/-/martini-0.2.0.tgz#1af70211fbe994abf26e37f1388ca69c02cd43b4"
@@ -2551,15 +2538,15 @@
resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2"
integrity sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI=
-"@mapbox/tiny-sdf@^1.1.0", "@mapbox/tiny-sdf@^1.1.1":
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz#424c620a96442b20402552be70a7f62a8407cc59"
- integrity sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==
+"@mapbox/tiny-sdf@^2.0.5", "@mapbox/tiny-sdf@^2.0.6":
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz#9a1d33e5018093e88f6a4df2343e886056287282"
+ integrity sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==
-"@mapbox/unitbezier@^0.0.0":
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz#15651bd553a67b8581fb398810c98ad86a34524e"
- integrity sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4=
+"@mapbox/unitbezier@^0.0.1":
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz#d32deb66c7177e9e9dfc3bbd697083e2e657ff01"
+ integrity sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==
"@mapbox/vector-tile@^1.3.1":
version "1.3.1"
@@ -2573,6 +2560,18 @@
resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe"
integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==
+"@maplibre/maplibre-gl-style-spec@^19.2.1", "@maplibre/maplibre-gl-style-spec@^19.3.3":
+ version "19.3.3"
+ resolved "https://registry.yarnpkg.com/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-19.3.3.tgz#a106248bd2e25e77c963a362aeaf630e00f924e9"
+ integrity sha512-cOZZOVhDSulgK0meTsTkmNXb1ahVvmTmWmfx9gRBwc6hq98wS9JP35ESIoNq3xqEan+UN+gn8187Z6E4NKhLsw==
+ dependencies:
+ "@mapbox/jsonlint-lines-primitives" "~2.0.2"
+ "@mapbox/unitbezier" "^0.0.1"
+ json-stringify-pretty-compact "^3.0.0"
+ minimist "^1.2.8"
+ rw "^1.3.3"
+ sort-object "^3.0.3"
+
"@math.gl/core@3.5.7", "@math.gl/core@^3.5.0", "@math.gl/core@^3.5.1":
version "3.5.7"
resolved "https://registry.yarnpkg.com/@math.gl/core/-/core-3.5.7.tgz#41145f214c36f20a6bf32e4c25551e97c6828e99"
@@ -2581,16 +2580,7 @@
"@babel/runtime" "^7.12.0"
gl-matrix "~3.3.0"
-"@math.gl/core@3.6.1", "@math.gl/core@^3.6.0":
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/@math.gl/core/-/core-3.6.1.tgz#1472ba744b91db1ef8fc59e79aef446a70fef22d"
- integrity sha512-arWJyTIdg9EG2xPze0T569wcWsmMHswh5a194zAO86JmDxhPKe/JUU41s0D9OTipq3obuLz/OVayZJEpDB4qcw==
- dependencies:
- "@babel/runtime" "^7.12.0"
- "@math.gl/types" "3.6.1"
- gl-matrix "^3.4.0"
-
-"@math.gl/core@3.6.3":
+"@math.gl/core@3.6.3", "@math.gl/core@^3.6.2":
version "3.6.3"
resolved "https://registry.yarnpkg.com/@math.gl/core/-/core-3.6.3.tgz#a6bf796ed421093099749d609de8d99a3ac20a53"
integrity sha512-jBABmDkj5uuuE0dTDmwwss7Cup5ZwQ6Qb7h1pgvtkEutTrhkcv8SuItQNXmF45494yIHeoGue08NlyeY6wxq2A==
@@ -2608,13 +2598,13 @@
"@math.gl/core" "3.5.7"
gl-matrix "~3.3.0"
-"@math.gl/culling@^3.6.0":
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/@math.gl/culling/-/culling-3.6.1.tgz#e50b082b9d8532a8920641a11a0d338812dbc1e1"
- integrity sha512-Goqf5QvDUQd6o3Hwf9GRV8KjcpEZedODxPFZf1I1asB5f62ksPL2ArlyrNmHLoeGVL+KBumuoiIe4j8CYeafsQ==
+"@math.gl/culling@^3.6.2":
+ version "3.6.3"
+ resolved "https://registry.yarnpkg.com/@math.gl/culling/-/culling-3.6.3.tgz#91cdfa496748e8873a2e6261415a27a27b6af5f2"
+ integrity sha512-3UERXHbaPlM6pnTk2MI7LeQ5CoelDZzDzghTTcv+HdQCZsT/EOEuEdYimETHtSxiyiOmsX2Un65UBLYT/rbKZg==
dependencies:
"@babel/runtime" "^7.12.0"
- "@math.gl/core" "3.6.1"
+ "@math.gl/core" "3.6.3"
gl-matrix "^3.4.0"
"@math.gl/geospatial@^3.5.1":
@@ -2626,19 +2616,12 @@
"@math.gl/core" "3.5.7"
gl-matrix "~3.3.0"
-"@math.gl/polygon@^3.5.1":
- version "3.5.7"
- resolved "https://registry.yarnpkg.com/@math.gl/polygon/-/polygon-3.5.7.tgz#6ddab215552919a2f784e8ea746fe582475c1e33"
- integrity sha512-fTi9Vfs7+LQ5Cn5ABSp0i+rfRec2fFuPhUE+Xpvg3dELQP+YMSw7FeR5SvUBgt3UY86qLmrkmxz3WwffcJA/eg==
- dependencies:
- "@math.gl/core" "3.5.7"
-
-"@math.gl/polygon@^3.6.0":
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/@math.gl/polygon/-/polygon-3.6.1.tgz#d09c3231856c237e271e4d3ac5f6394b500a57b6"
- integrity sha512-DS8Xxo+cadPl1YBWURFWIYGC+baiwezz4zzqAZtEn5li2dnVDbt73uiECdTBdmjXhJUiMxz1VzkF7r7Hcz10TA==
+"@math.gl/polygon@^3.5.1", "@math.gl/polygon@^3.6.2":
+ version "3.6.3"
+ resolved "https://registry.yarnpkg.com/@math.gl/polygon/-/polygon-3.6.3.tgz#0c19c0b059cedde1cd760cc3796e9180f75bcbde"
+ integrity sha512-FivQ1ZnYcAss1wVifOkHP/ZnlfQy1IL/769uzNtiHxwUbW0kZG3yyOZ9I7fwyzR5Hvqt3ErJKHjSYZr0uVlz5g==
dependencies:
- "@math.gl/core" "3.6.1"
+ "@math.gl/core" "3.6.3"
"@math.gl/proj4@^3.6.3":
version "3.6.3"
@@ -2650,24 +2633,19 @@
"@types/proj4" "^2.5.0"
proj4 "2.6.2"
-"@math.gl/sun@^3.6.0":
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/@math.gl/sun/-/sun-3.6.1.tgz#d49a8cfc02e5414af87c3b69686869a954169462"
- integrity sha512-IWeiUPIsr4ZmZxKUA5uE/PA3i/lZByzWHCGxFBXRJjVxCrHJsWZOxnVtwbPOT7nypSb01O3j6AXVq9RhUMMfzw==
+"@math.gl/sun@^3.6.2":
+ version "3.6.3"
+ resolved "https://registry.yarnpkg.com/@math.gl/sun/-/sun-3.6.3.tgz#30c15612313b56349c568f21f39c0e0f0e77b2df"
+ integrity sha512-mrx6CGYYeTNSQttvcw0KVUy+35YDmnjMqpO/o0t06Vcghrt0HNruB/ScRgUSbJrgkbOg1Vcqm23HBd++clzQzw==
dependencies:
"@babel/runtime" "^7.12.0"
-"@math.gl/types@3.6.1":
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/@math.gl/types/-/types-3.6.1.tgz#d4f8f0ca31473866ab71dee10cfa919a9ac827c2"
- integrity sha512-G2KegmrstjUsLLtm+zj6lfxEB42s6JVDmIY3kU08HOyWHJTgvbZ2Z1MsB6z8TeKfX1QH8M/2WlemRwUS+3cj8w==
-
"@math.gl/types@3.6.3":
version "3.6.3"
resolved "https://registry.yarnpkg.com/@math.gl/types/-/types-3.6.3.tgz#9fa9866feabcbb76de107d78ff3a89c0243ac374"
integrity sha512-3uWLVXHY3jQxsXCr/UCNPSc2BG0hNUljhmOBt9l+lNFDp7zHgm0cK2Tw4kj2XfkJy4TgwZTBGwRDQgWEbLbdTA==
-"@math.gl/web-mercator@^3.5.1", "@math.gl/web-mercator@^3.5.5":
+"@math.gl/web-mercator@^3.5.1":
version "3.5.7"
resolved "https://registry.yarnpkg.com/@math.gl/web-mercator/-/web-mercator-3.5.7.tgz#180a1057ea622bd857c6931f67268c2e98f174c6"
integrity sha512-i0w6AcV2b5+yeUQOA/KdnnzTYMUZvEKzHbbxI+ZyCuFs3p9S/IUt/EWVw4KGGOjVbf3UrGFlWSM70Th+0KyrsA==
@@ -2675,10 +2653,10 @@
"@babel/runtime" "^7.12.0"
gl-matrix "~3.3.0"
-"@math.gl/web-mercator@^3.6.0":
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/@math.gl/web-mercator/-/web-mercator-3.6.1.tgz#f6a62bb92167a7b0ae9017d5a2ba5eb866cd3850"
- integrity sha512-nB/sJYAZpjWOpdQ9IMWXcAITM57huILBdEWzfumqgZ0ay49I4Y0yaFgkjgd/52gfwpY8TDoaR8eRxIQ7c1tx7Q==
+"@math.gl/web-mercator@^3.6.2":
+ version "3.6.3"
+ resolved "https://registry.yarnpkg.com/@math.gl/web-mercator/-/web-mercator-3.6.3.tgz#ef91168e030eecffc788618d686e8a6c1d7a0bf8"
+ integrity sha512-UVrkSOs02YLehKaehrxhAejYMurehIHPfFQvPFZmdJHglHOU4V2cCUApTVEwOksvCp161ypEqVp+9H6mGhTTcw==
dependencies:
"@babel/runtime" "^7.12.0"
gl-matrix "^3.4.0"
@@ -2718,7 +2696,7 @@
dependencies:
"@babel/runtime" "^7.0.0"
-"@probe.gl/log@3.5.0", "@probe.gl/log@^3.5.0":
+"@probe.gl/log@^3.5.0":
version "3.5.0"
resolved "https://registry.yarnpkg.com/@probe.gl/log/-/log-3.5.0.tgz#6589822ab771eadf77787ffc6ecf73e59d181c64"
integrity sha512-nW/qz2X1xY08WU/TsmJP6/6IPNcaY5fS/vLjpC4ahJuE2Mezga4hGM/R2X5JWE/nkPc+BsC5GnAnD13rwAxS7g==
@@ -2726,7 +2704,7 @@
"@babel/runtime" "^7.0.0"
"@probe.gl/env" "3.5.0"
-"@probe.gl/log@^4.0.2", "@probe.gl/log@^4.0.4":
+"@probe.gl/log@^4.0.1", "@probe.gl/log@^4.0.2", "@probe.gl/log@^4.0.4":
version "4.0.4"
resolved "https://registry.yarnpkg.com/@probe.gl/log/-/log-4.0.4.tgz#e42d1d0e22981c4010521c350cad2305bce02976"
integrity sha512-WpmXl6njlBMwrm8HBh/b4kSp/xnY1VVmeT4PWUKF+RkVbFuKQbsU11dA1IxoMd7gSY+5DGIwxGfAv1H5OMzA4A==
@@ -2734,14 +2712,14 @@
"@babel/runtime" "^7.0.0"
"@probe.gl/env" "4.0.4"
-"@probe.gl/stats@3.5.0", "@probe.gl/stats@^3.5.0":
+"@probe.gl/stats@^3.5.0":
version "3.5.0"
resolved "https://registry.yarnpkg.com/@probe.gl/stats/-/stats-3.5.0.tgz#774495772f06e898aae28c1d315c9edac07f3425"
integrity sha512-IH2M+F3c8HR1DTroBARePUFG7wIewumtKA0UFqx51Z7S4hKrD60wFbpMmg0AcF4FvHAXMBoC+kYi1UKW9XbAOw==
dependencies:
"@babel/runtime" "^7.0.0"
-"@probe.gl/stats@^4.0.2", "@probe.gl/stats@^4.0.4":
+"@probe.gl/stats@^4.0.1", "@probe.gl/stats@^4.0.2", "@probe.gl/stats@^4.0.4":
version "4.0.4"
resolved "https://registry.yarnpkg.com/@probe.gl/stats/-/stats-4.0.4.tgz#b33a47bf192951d0789dfd2044b295c3709386bd"
integrity sha512-SDuSY/D4yDL6LQDa69l/GCcnZLRiGYdyvYkxWb0CgnzTPdPrcdrzGkzkvpC3zsA4fEFw2smlDje370QGHwlisg==
@@ -2970,6 +2948,51 @@
resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==
+"@turf/boolean-clockwise@^5.1.5":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@turf/boolean-clockwise/-/boolean-clockwise-5.1.5.tgz#3302b7dac62c5e291a0789e29af7283387fa9deb"
+ integrity sha512-FqbmEEOJ4rU4/2t7FKx0HUWmjFEVqR+NJrFP7ymGSjja2SQ7Q91nnBihGuT+yuHHl6ElMjQ3ttsB/eTmyCycxA==
+ dependencies:
+ "@turf/helpers" "^5.1.5"
+ "@turf/invariant" "^5.1.5"
+
+"@turf/clone@^5.1.5":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@turf/clone/-/clone-5.1.5.tgz#253e8d35477181976e33adfab50a0f02a7f0e367"
+ integrity sha512-//pITsQ8xUdcQ9pVb4JqXiSqG4dos5Q9N4sYFoWghX21tfOV2dhc5TGqYOhnHrQS7RiKQL1vQ48kIK34gQ5oRg==
+ dependencies:
+ "@turf/helpers" "^5.1.5"
+
+"@turf/helpers@^5.1.5":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-5.1.5.tgz#153405227ab933d004a5bb9641a9ed999fcbe0cf"
+ integrity sha512-/lF+JR+qNDHZ8bF9d+Cp58nxtZWJ3sqFe6n3u3Vpj+/0cqkjk4nXKYBSY0azm+GIYB5mWKxUXvuP/m0ZnKj1bw==
+
+"@turf/invariant@^5.1.5":
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@turf/invariant/-/invariant-5.2.0.tgz#f0150ff7290b38577b73d088b7932c1ee0aa90a7"
+ integrity sha512-28RCBGvCYsajVkw2EydpzLdcYyhSA77LovuOvgCJplJWaNVyJYH6BOR3HR9w50MEkPqb/Vc/jdo6I6ermlRtQA==
+ dependencies:
+ "@turf/helpers" "^5.1.5"
+
+"@turf/meta@^5.1.5":
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-5.2.0.tgz#3b1ad485ee0c3b0b1775132a32c384d53e4ba53d"
+ integrity sha512-ZjQ3Ii62X9FjnK4hhdsbT+64AYRpaI8XMBMcyftEOGSmPMUVnkbvuv3C9geuElAXfQU7Zk1oWGOcrGOD9zr78Q==
+ dependencies:
+ "@turf/helpers" "^5.1.5"
+
+"@turf/rewind@^5.1.5":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@turf/rewind/-/rewind-5.1.5.tgz#9ea3db4a68b73c1fd1dd11f57631b143cfefa1c9"
+ integrity sha512-Gdem7JXNu+G4hMllQHXRFRihJl3+pNl7qY+l4qhQFxq+hiU1cQoVFnyoleIqWKIrdK/i2YubaSwc3SCM7N5mMw==
+ dependencies:
+ "@turf/boolean-clockwise" "^5.1.5"
+ "@turf/clone" "^5.1.5"
+ "@turf/helpers" "^5.1.5"
+ "@turf/invariant" "^5.1.5"
+ "@turf/meta" "^5.1.5"
+
"@types/aria-query@^4.2.0":
version "4.2.2"
resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc"
@@ -3030,6 +3053,16 @@
dependencies:
"@types/node" "*"
+"@types/command-line-args@5.2.0":
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@types/command-line-args/-/command-line-args-5.2.0.tgz#adbb77980a1cc376bb208e3f4142e907410430f6"
+ integrity sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==
+
+"@types/command-line-usage@5.0.2":
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/@types/command-line-usage/-/command-line-usage-5.0.2.tgz#ba5e3f6ae5a2009d466679cc431b50635bf1a064"
+ integrity sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==
+
"@types/connect-history-api-fallback@^1.3.5":
version "1.3.5"
resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae"
@@ -3097,16 +3130,16 @@
"@types/qs" "*"
"@types/serve-static" "*"
-"@types/flatbuffers@^1.10.0":
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/@types/flatbuffers/-/flatbuffers-1.10.0.tgz#aa74e30ffdc86445f2f060e1808fc9d56b5603ba"
- integrity sha512-7btbphLrKvo5yl/5CC2OCxUSMx1wV1wvGT1qDXkSt7yi00/YW7E8k6qzXqJHsp+WU0eoG7r6MTQQXI9lIvd0qA==
-
-"@types/geojson@*", "@types/geojson@^7946.0.7", "@types/geojson@^7946.0.8":
+"@types/geojson@*", "@types/geojson@^7946.0.7":
version "7946.0.8"
resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca"
integrity sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==
+"@types/geojson@^7946.0.12", "@types/geojson@^7946.0.8":
+ version "7946.0.12"
+ resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.12.tgz#0307536218d32e6b970bccd1d148b9c4e5b6f10d"
+ integrity sha512-uK2z1ZHJyC0nQRbuovXFt4mzXDwf27vQeUWNhfKGwRcWW429GOhP8HxUHlM6TLH4bzmlv/HlEjpvJh3JfmGsAA==
+
"@types/graceful-fs@^4.1.2":
version "4.1.5"
resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
@@ -3115,9 +3148,9 @@
"@types/node" "*"
"@types/hammerjs@^2.0.41":
- version "2.0.41"
- resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.41.tgz#f6ecf57d1b12d2befcce00e928a6a097c22980aa"
- integrity sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==
+ version "2.0.43"
+ resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.43.tgz#8660dd1e0e5fd979395e2f999e670cdb9484d1e9"
+ integrity sha512-wqxfwHk83RS7+6OpytGdo5wqkqtvx+bGaIs1Rwm5NrtQHUfL4OgWs/5p0OipmjmT+fexePh37Ek+mqIpdNjQKA==
"@types/hoist-non-react-statics@*", "@types/hoist-non-react-statics@^3.3.1":
version "3.3.1"
@@ -3179,19 +3212,26 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
-"@types/mapbox-gl@^2.0.3":
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/@types/mapbox-gl/-/mapbox-gl-2.6.0.tgz#f9e8e963d5a11eba9d914d95ef8a00d015ca8732"
- integrity sha512-lHdITzC0IVn9+Pq6WFkkK0N6rUKIqxsdrNeixiQdvROFn2Aeu3TDvhpuag1IdengL5WGGRuEhK6m6HB916ReLw==
+"@types/mapbox-gl@>=1.0.0":
+ version "2.7.17"
+ resolved "https://registry.yarnpkg.com/@types/mapbox-gl/-/mapbox-gl-2.7.17.tgz#cba3559ccd041b32d492d14d06c1f1fedba0a2cb"
+ integrity sha512-5lDO2W6glPCqiRuqKh0a7MPOwnVt1/KWcYnxsL3z5rmjuOcFdHEa+KzUwCzqsAlbAegIIhgQiREZzJ9o1ze1gQ==
dependencies:
"@types/geojson" "*"
-"@types/mapbox-gl@^2.6.3":
- version "2.7.1"
- resolved "https://registry.yarnpkg.com/@types/mapbox-gl/-/mapbox-gl-2.7.1.tgz#d848793a3a350bdec48043b9fcf68c1b87733348"
- integrity sha512-qr2cWQIJ12TMQg6cYc/FELgwXgcuLlDxcFyQH2EMdr3R8Mg5PFQUNZP5M4ZUanRVwJdQ10pMEVRTAjW9HqLdzg==
+"@types/mapbox__point-geometry@*", "@types/mapbox__point-geometry@^0.1.3":
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.3.tgz#3050f58fcdcc9da96998655268d477ea266dbe76"
+ integrity sha512-2W46IOXlu7vC8m3+M5rDqSnuY22GFxxx3xhkoyqyPWrD+eP2iAwNst0A1+umLYjCTJMJTSpiofphn9h9k+Kw+w==
+
+"@types/mapbox__vector-tile@^1.3.3":
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.3.tgz#f8bf33d91f9951c6090dbd454d4e33626f5107cc"
+ integrity sha512-d263B3KCQtXKVZMHpMJrEW5EeLBsQ8jvAS9nhpUKC5hHIlQaACG9PWkW8qxEeNuceo9120AwPjeS91uNa4ltqA==
dependencies:
"@types/geojson" "*"
+ "@types/mapbox__point-geometry" "*"
+ "@types/pbf" "*"
"@types/mime@^1":
version "1.3.2"
@@ -3203,16 +3243,21 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.18.tgz#3b4fed5cfb58010e3a2be4b6e74615e4847f1074"
integrity sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==
-"@types/node@^14.14.37":
- version "14.18.12"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.12.tgz#0d4557fd3b94497d793efd4e7d92df2f83b4ef24"
- integrity sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==
+"@types/node@20.3.0":
+ version "20.3.0"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.0.tgz#719498898d5defab83c3560f45d8498f58d11938"
+ integrity sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ==
"@types/offscreencanvas@^2019.7.0":
version "2019.7.0"
resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz#e4a932069db47bb3eabeb0b305502d01586fa90d"
integrity sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==
+"@types/pad-left@2.1.1":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@types/pad-left/-/pad-left-2.1.1.tgz#17d906fc75804e1cc722da73623f1d978f16a137"
+ integrity sha512-Xd22WCRBydkGSApl5Bw0PhAOHKSVjNL3E3AwzKaps96IMraPqy5BvZIsBVK6JLwdybUzjHnuWVwpDd0JjTfHXA==
+
"@types/pako@^1.0.1":
version "1.0.4"
resolved "https://registry.yarnpkg.com/@types/pako/-/pako-1.0.4.tgz#b4262aef92680a9331fcdb8420c69cf3dd98d3f3"
@@ -3223,6 +3268,11 @@
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+"@types/pbf@*", "@types/pbf@^3.0.4":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/pbf/-/pbf-3.0.4.tgz#32f8cd8bb2fb53e5870a5d751210d1dcdce23f85"
+ integrity sha512-SOFlLGZkLbEXJRwcWCqeP/Koyaf/uAqLXHUsdo/nMfjLsNd8kqauwHe9GBOljSmpcHp/LC6kOjo3SidGjNirVA==
+
"@types/prettier@^2.1.5":
version "2.4.4"
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.4.tgz#5d9b63132df54d8909fce1c3f8ca260fdd693e17"
@@ -3340,6 +3390,13 @@
"@types/react" "*"
csstype "^3.0.2"
+"@types/supercluster@^7.1.2":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@types/supercluster/-/supercluster-7.1.2.tgz#2391a1b22ef108e37d51d4c8bdea7dc04ebf4bcf"
+ integrity sha512-qMhofL945Z4njQUuntadexAgPtpiBC014WvVqU70Prj42LC77Xgmz04us7hSMmwjs7KbgAwGBmje+FSOvDbP0Q==
+ dependencies:
+ "@types/geojson" "*"
+
"@types/testing-library__jest-dom@^5.9.1":
version "5.14.3"
resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.3.tgz#ee6c7ffe9f8595882ee7bda8af33ae7b8789ef17"
@@ -3347,11 +3404,6 @@
dependencies:
"@types/jest" "*"
-"@types/text-encoding-utf-8@^1.0.1":
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/@types/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#896e94ce99b653e886a9b925e9dc12c92af7b1ae"
- integrity sha512-AQ6zewa0ucLJvtUi5HsErbOFKAcQfRLt9zFLlUOvcXBy2G36a+ZDpCHSGdzJVUD8aNURtIjh9aSjCStNMRCcRQ==
-
"@types/use-sync-external-store@^0.0.3":
version "0.0.3"
resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43"
@@ -3772,21 +3824,21 @@ anymatch@^3.0.3, anymatch@~3.1.2:
normalize-path "^3.0.0"
picomatch "^2.0.4"
-apache-arrow@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/apache-arrow/-/apache-arrow-4.0.1.tgz#62e58caa46a6a41966478a19c492380c9efb1d66"
- integrity sha512-DyF7GXCbSjsw4P5C8b+qW7OnJKa6w9mJI0mhV0+EfZbVZCmhfiF6ffqcnrI/kzBrRqn9hH/Ft9n5+m4DTbBJpg==
- dependencies:
- "@types/flatbuffers" "^1.10.0"
- "@types/node" "^14.14.37"
- "@types/text-encoding-utf-8" "^1.0.1"
- command-line-args "5.1.1"
- command-line-usage "6.1.1"
- flatbuffers "1.12.0"
+apache-arrow@^13.0.0:
+ version "13.0.0"
+ resolved "https://registry.yarnpkg.com/apache-arrow/-/apache-arrow-13.0.0.tgz#8c8c69ca8ec53b804b4e10fe6b57483bda46dfbd"
+ integrity sha512-3gvCX0GDawWz6KFNC28p65U+zGh/LZ6ZNKWNu74N6CQlKzxeoWHpi4CgEQsgRSEMuyrIIXi1Ea2syja7dwcHvw==
+ dependencies:
+ "@types/command-line-args" "5.2.0"
+ "@types/command-line-usage" "5.0.2"
+ "@types/node" "20.3.0"
+ "@types/pad-left" "2.1.1"
+ command-line-args "5.2.1"
+ command-line-usage "7.0.1"
+ flatbuffers "23.5.26"
json-bignum "^0.0.3"
pad-left "^2.1.0"
- text-encoding-utf-8 "^1.0.2"
- tslib "^2.2.0"
+ tslib "^2.5.3"
arch@^2.1.1:
version "2.2.0"
@@ -3820,15 +3872,15 @@ arr-union@^3.1.0:
resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
-array-back@^3.0.1:
+array-back@^3.0.1, array-back@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0"
integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==
-array-back@^4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e"
- integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==
+array-back@^6.2.2:
+ version "6.2.2"
+ resolved "https://registry.yarnpkg.com/array-back/-/array-back-6.2.2.tgz#f567d99e9af88a6d3d2f9dfcc21db6f9ba9fd157"
+ integrity sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==
array-flatten@1.1.1:
version "1.1.1"
@@ -3845,6 +3897,11 @@ array-union@^2.1.0:
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==
+
async@^2.6.2:
version "2.6.3"
resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
@@ -4145,6 +4202,11 @@ bser@2.1.1:
dependencies:
node-int64 "^0.4.0"
+buf-compare@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/buf-compare/-/buf-compare-1.0.1.tgz#fef28da8b8113a0a0db4430b0b6467b69730b34a"
+ integrity sha512-Bvx4xH00qweepGc43xFvMs5BKASXTbHaHm6+kDYIK9p/4iFwjATQkmPKHQSgJZzKbAymhztRbXUf1Nqhzl73/Q==
+
buffer-crc32@~0.2.3:
version "0.2.13"
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
@@ -4178,6 +4240,21 @@ bytes@3.1.1:
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.1.tgz#3f018291cb4cbad9accb6e6970bca9c8889e879a"
integrity sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==
+bytewise-core@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/bytewise-core/-/bytewise-core-1.2.3.tgz#3fb410c7e91558eb1ab22a82834577aa6bd61d42"
+ integrity sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA==
+ dependencies:
+ typewise-core "^1.2"
+
+bytewise@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/bytewise/-/bytewise-1.1.0.tgz#1d13cbff717ae7158094aa881b35d081b387253e"
+ integrity sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ==
+ dependencies:
+ bytewise-core "^1.2.2"
+ typewise "^1.0.3"
+
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
@@ -4219,12 +4296,12 @@ caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001349:
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz"
integrity sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==
-cartocolor@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/cartocolor/-/cartocolor-4.0.2.tgz#ef1aa12860f6eeedc8d2420e2b9d7337937c4993"
- integrity sha512-+Gh9mb6lFxsDOLQlBLPxAHCnWXlg2W8q3AcVwqRcy95TdBbcOU89Wrb6h2Hd/6Ww1Kc1pzXmUdpnWD+xeCG0dg==
+chalk-template@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/chalk-template/-/chalk-template-0.4.0.tgz#692c034d0ed62436b9062c1707fadcd0f753204b"
+ integrity sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==
dependencies:
- colorbrewer "1.0.0"
+ chalk "^4.1.2"
chalk@2.4.1:
version "2.4.1"
@@ -4235,7 +4312,7 @@ chalk@2.4.1:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-chalk@^2.0.0, chalk@^2.4.2:
+chalk@^2.0.0:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -4399,11 +4476,6 @@ color-name@~1.1.4:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-colorbrewer@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/colorbrewer/-/colorbrewer-1.0.0.tgz#4f97333b969ba7612382be4bc3394b341fb4c8a2"
- integrity sha1-T5czO5abp2Ejgr5LwzlLNB+0yKI=
-
colorette@^2.0.10, colorette@^2.0.14:
version "2.0.16"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da"
@@ -4416,27 +4488,27 @@ combined-stream@^1.0.8:
dependencies:
delayed-stream "~1.0.0"
-command-line-args@5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.1.1.tgz#88e793e5bb3ceb30754a86863f0401ac92fd369a"
- integrity sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg==
+command-line-args@5.2.1, command-line-args@^5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e"
+ integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==
dependencies:
- array-back "^3.0.1"
+ array-back "^3.1.0"
find-replace "^3.0.0"
lodash.camelcase "^4.3.0"
typical "^4.0.0"
-command-line-usage@6.1.1:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.1.tgz#c908e28686108917758a49f45efb4f02f76bc03f"
- integrity sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==
+command-line-usage@7.0.1, command-line-usage@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-7.0.1.tgz#e540afef4a4f3bc501b124ffde33956309100655"
+ integrity sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==
dependencies:
- array-back "^4.0.1"
- chalk "^2.4.2"
- table-layout "^1.0.1"
- typical "^5.2.0"
+ array-back "^6.2.2"
+ chalk-template "^0.4.0"
+ table-layout "^3.0.0"
+ typical "^7.1.1"
-commander@2, commander@^2.20.0:
+commander@^2.20.0:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
@@ -4538,6 +4610,14 @@ cookie@0.4.1:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1"
integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==
+core-assert@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/core-assert/-/core-assert-0.2.1.tgz#f85e2cf9bfed28f773cc8b3fa5c5b69bdc02fe3f"
+ integrity sha512-IG97qShIP+nrJCXMCgkNZgH7jZQ4n8RpPyPeXX++T6avR/KhLhgLiHKoEn5Rc1KjfycSfA9DMa6m+4C4eguHhw==
+ dependencies:
+ buf-compare "^1.0.0"
+ is-error "^2.2.0"
+
core-js-compat@^3.20.2, core-js-compat@^3.21.0:
version "3.21.0"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.0.tgz#bcc86aa5a589cee358e7a7fa0a4979d5a76c3885"
@@ -4690,11 +4770,6 @@ css@^3.0.0:
source-map "^0.6.1"
source-map-resolve "^0.6.0"
-csscolorparser@~1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b"
- integrity sha1-s085HupNqPPpgjHizNjfnAQfFxs=
-
cssesc@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
@@ -4737,13 +4812,6 @@ cwd@^0.10.0:
find-pkg "^0.1.2"
fs-exists-sync "^0.1.0"
-d3-array@2, d3-array@^2.3.0, d3-array@^2.8.0:
- version "2.12.1"
- resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.12.1.tgz#e20b41aafcdffdf5d50928004ececf815a465e81"
- integrity sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==
- dependencies:
- internmap "^1.0.0"
-
"d3-array@2 - 3", "d3-array@2.10.0 - 3":
version "3.2.0"
resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.0.tgz#15bf96cd9b7333e02eb8de8053d78962eafcff14"
@@ -4751,47 +4819,16 @@ d3-array@2, d3-array@^2.3.0, d3-array@^2.8.0:
dependencies:
internmap "1 - 2"
-"d3-color@1 - 2", d3-color@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-2.0.0.tgz#8d625cab42ed9b8f601a1760a389f7ea9189d62e"
- integrity sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==
-
"d3-color@1 - 3":
version "3.1.0"
resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2"
integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==
-d3-dsv@^1.0.8:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.2.0.tgz#9d5f75c3a5f8abd611f74d3f5847b0d4338b885c"
- integrity sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==
- dependencies:
- commander "2"
- iconv-lite "0.4"
- rw "1"
-
-"d3-format@1 - 2", d3-format@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-2.0.0.tgz#a10bcc0f986c372b729ba447382413aabf5b0767"
- integrity sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==
-
"d3-format@1 - 3":
version "3.1.0"
resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641"
integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==
-d3-hexbin@^0.2.1:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/d3-hexbin/-/d3-hexbin-0.2.2.tgz#9c5837dacfd471ab05337a9e91ef10bfc4f98831"
- integrity sha1-nFg32s/UcasFM3qeke8Qv8T5iDE=
-
-"d3-interpolate@1.2.0 - 2":
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-2.0.1.tgz#98be499cfb8a3b94d4ff616900501a64abc91163"
- integrity sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==
- dependencies:
- d3-color "1 - 2"
-
"d3-interpolate@1.2.0 - 3", d3-interpolate@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d"
@@ -4804,17 +4841,6 @@ d3-hexbin@^0.2.1:
resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.0.1.tgz#f09dec0aaffd770b7995f1a399152bf93052321e"
integrity sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==
-d3-scale@^3.2.3:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-3.3.0.tgz#28c600b29f47e5b9cd2df9749c206727966203f3"
- integrity sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==
- dependencies:
- d3-array "^2.3.0"
- d3-format "1 - 2"
- d3-interpolate "1.2.0 - 2"
- d3-time "^2.1.1"
- d3-time-format "2 - 3"
-
d3-scale@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396"
@@ -4833,13 +4859,6 @@ d3-shape@^3.1.0:
dependencies:
d3-path "1 - 3"
-"d3-time-format@2 - 3":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-3.0.0.tgz#df8056c83659e01f20ac5da5fdeae7c08d5f1bb6"
- integrity sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==
- dependencies:
- d3-time "1 - 2"
-
"d3-time-format@2 - 4":
version "4.1.0"
resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a"
@@ -4847,13 +4866,6 @@ d3-shape@^3.1.0:
dependencies:
d3-time "1 - 3"
-"d3-time@1 - 2", d3-time@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-2.1.1.tgz#e9d8a8a88691f4548e68ca085e5ff956724a6682"
- integrity sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==
- dependencies:
- d3-array "2"
-
"d3-time@1 - 3", "d3-time@2.1.1 - 3":
version "3.0.0"
resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.0.0.tgz#65972cb98ae2d4954ef5c932e8704061335d4975"
@@ -4901,23 +4913,6 @@ decimal.js@^10.2.1:
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783"
integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==
-deck.gl@^8.8.3:
- version "8.8.3"
- resolved "https://registry.yarnpkg.com/deck.gl/-/deck.gl-8.8.3.tgz#392f3f2312e60f3852fbbbed4dec1f22297c97b3"
- integrity sha512-uVfa+DkHCZ+7BbkHyRVPLsuiDqMI8+C9XLOK7RRDtHhT9JfGArQ81SuFdBMEZC3Q1PHErhZ+pHbd9QqWkozaVg==
- dependencies:
- "@deck.gl/aggregation-layers" "8.8.3"
- "@deck.gl/carto" "8.8.3"
- "@deck.gl/core" "8.8.3"
- "@deck.gl/extensions" "8.8.3"
- "@deck.gl/geo-layers" "8.8.3"
- "@deck.gl/google-maps" "8.8.3"
- "@deck.gl/json" "8.8.3"
- "@deck.gl/layers" "8.8.3"
- "@deck.gl/mapbox" "8.8.3"
- "@deck.gl/mesh-layers" "8.8.3"
- "@deck.gl/react" "8.8.3"
-
decode-uri-component@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
@@ -4940,7 +4935,7 @@ deep-equal@^1.0.1:
object-keys "^1.1.1"
regexp.prototype.flags "^1.2.0"
-deep-extend@^0.6.0, deep-extend@~0.6.0:
+deep-extend@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
@@ -4950,6 +4945,13 @@ deep-is@^0.1.3, deep-is@~0.1.3:
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+deep-strict-equal@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/deep-strict-equal/-/deep-strict-equal-0.2.0.tgz#4a078147a8ab57f6a0d4f5547243cd22f44eb4e4"
+ integrity sha512-3daSWyvZ/zwJvuMGlzG1O+Ow0YSadGfb3jsh9xoCutv2tWyB9dA4YvR9L9/fSdDZa2dByYQe+TqapSGUrjnkoA==
+ dependencies:
+ core-assert "^0.2.0"
+
deepmerge@^4.2.2:
version "4.2.2"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
@@ -5121,20 +5123,15 @@ dot-case@^3.0.4:
no-case "^3.0.4"
tslib "^2.0.3"
-draco3d@1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/draco3d/-/draco3d-1.4.1.tgz#2abdcf7b59caaac50f7e189aec454176c57146b2"
- integrity sha512-9Rxonc70xiovBC+Bq1h57SNZIHzWTibU1VfIGp5z3Xx8dPtv4yT5uGhiH7P5uvJRR2jkrvHafRxR7bTANkvfpg==
-
draco3d@1.5.5:
version "1.5.5"
resolved "https://registry.yarnpkg.com/draco3d/-/draco3d-1.5.5.tgz#6bf4bbdd65950e6153e991cb0dcb8a10323f610e"
integrity sha512-JVuNV0EJzD3LBYhGyIXJLeBID/EVtmFO1ZNhAYflTgiMiAJlbhXQmRRda/azjc8MRVMHh0gqGhiqHUo5dIXM8Q==
-earcut@^2.0.6, earcut@^2.2.2:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.3.tgz#d44ced2ff5a18859568e327dd9c7d46b16f55cf4"
- integrity sha512-iRDI1QeCQIhMCZk48DRDMVgQSSBDmbzzNhnxIo+pwx3swkfjMh6vh0nWLq1NdvGHLKH6wIrAM3vQWeTj6qeoug==
+earcut@^2.0.6, earcut@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a"
+ integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==
ee-first@1.1.1:
version "1.1.1"
@@ -5473,12 +5470,20 @@ express@^4.17.1:
utils-merge "1.0.1"
vary "~1.1.2"
-expression-eval@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/expression-eval/-/expression-eval-2.1.0.tgz#422915caa46140a7c5b5f248650dea8bf8236e62"
- integrity sha512-FUJO/Akvl/JOWkvlqZaqbkhsEWlCJWDeZG4tzX96UH68D9FeRgYgtb55C2qtqbORC0Q6x5419EDjWu4IT9kQfg==
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==
dependencies:
- jsep "^0.3.0"
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
extract-zip@2.0.1:
version "2.0.1"
@@ -5529,6 +5534,13 @@ fast-url-parser@1.1.3:
dependencies:
punycode "^1.3.2"
+fast-xml-parser@^4.2.5:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz#761e641260706d6e13251c4ef8e3f5694d4b0d79"
+ integrity sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==
+ dependencies:
+ strnum "^1.0.5"
+
fastest-levenshtein@^1.0.12:
version "1.0.12"
resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2"
@@ -5663,10 +5675,10 @@ flat-cache@^3.0.4:
flatted "^3.1.0"
rimraf "^3.0.2"
-flatbuffers@1.12.0:
- version "1.12.0"
- resolved "https://registry.yarnpkg.com/flatbuffers/-/flatbuffers-1.12.0.tgz#72e87d1726cb1b216e839ef02658aa87dcef68aa"
- integrity sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==
+flatbuffers@23.5.26:
+ version "23.5.26"
+ resolved "https://registry.yarnpkg.com/flatbuffers/-/flatbuffers-23.5.26.tgz#01358e272a61239f0faf3bfbe4e014f3ace9d746"
+ integrity sha512-vE+SI9vrJDwi1oETtTIFldC/o9GsVKRM+s6EL0nQgxXlYV1Vc4Tk30hj4xGICftInKQKj1F3up2n8UbIVobISQ==
flatted@^3.1.0:
version "3.2.5"
@@ -5802,7 +5814,12 @@ get-stream@^6.0.0, get-stream@^6.0.1:
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
-gl-matrix@^3.0.0, gl-matrix@^3.2.1, gl-matrix@^3.4.0:
+get-value@^2.0.2, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==
+
+gl-matrix@^3.0.0, gl-matrix@^3.4.0, gl-matrix@^3.4.3:
version "3.4.3"
resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.4.3.tgz#fc1191e8320009fd4d20e9339595c6041ddc22c9"
integrity sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==
@@ -5861,6 +5878,15 @@ global-prefix@^0.1.4:
is-windows "^0.2.0"
which "^1.2.12"
+global-prefix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+ integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+ dependencies:
+ ini "^1.3.5"
+ kind-of "^6.0.2"
+ which "^1.3.1"
+
globals@^11.1.0:
version "11.12.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
@@ -5890,11 +5916,6 @@ graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9:
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96"
integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
-grid-index@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/grid-index/-/grid-index-1.1.0.tgz#97f8221edec1026c8377b86446a7c71e79522ea7"
- integrity sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==
-
h3-js@^3.7.0:
version "3.7.2"
resolved "https://registry.yarnpkg.com/h3-js/-/h3-js-3.7.2.tgz#61d4feb7bb42868ca9cdb2d5cf9d9dda94f9e5a3"
@@ -6112,7 +6133,7 @@ hyphenate-style-name@^1.0.0:
resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d"
integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==
-iconv-lite@0.4, iconv-lite@0.4.24:
+iconv-lite@0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -6198,7 +6219,7 @@ inherits@2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-ini@^1.3.4, ini@~1.3.0:
+ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
@@ -6208,11 +6229,6 @@ ini@^1.3.4, ini@~1.3.0:
resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009"
integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==
-internmap@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/internmap/-/internmap-1.0.1.tgz#0017cc8a3b99605f0302f2b198d272e015e5df95"
- integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==
-
interpret@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
@@ -6277,11 +6293,23 @@ is-docker@^2.0.0, is-docker@^2.1.1:
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
-is-extendable@^0.1.1:
+is-error@^2.2.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/is-error/-/is-error-2.2.2.tgz#c10ade187b3c93510c5470a5567833ee25649843"
+ integrity sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
@@ -6324,7 +6352,7 @@ is-plain-obj@^3.0.0:
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7"
integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==
-is-plain-object@^2.0.1, is-plain-object@^2.0.4:
+is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
@@ -6938,11 +6966,6 @@ jsdom@^16.6.0:
ws "^7.4.6"
xml-name-validator "^3.0.0"
-jsep@^0.3.0:
- version "0.3.5"
- resolved "https://registry.yarnpkg.com/jsep/-/jsep-0.3.5.tgz#3fd79ebd92f6f434e4857d5272aaeef7d948264d"
- integrity sha512-AoRLBDc6JNnKjNcmonituEABS5bcfqDhQAWWXNTFrqu6nVXBpBAGfcoTGZMFlIrh9FjmE1CQyX9CTNwZrXMMDA==
-
jsesc@^2.5.1:
version "2.5.2"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
@@ -6956,7 +6979,7 @@ jsesc@~0.5.0:
json-bignum@^0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/json-bignum/-/json-bignum-0.0.3.tgz#41163b50436c773d82424dbc20ed70db7604b8d7"
- integrity sha1-QRY7UENsdz2CQk28IO1w23YEuNc=
+ integrity sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==
json-parse-better-errors@^1.0.2:
version "1.0.2"
@@ -6983,6 +7006,11 @@ json-stable-stringify-without-jsonify@^1.0.1:
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+json-stringify-pretty-compact@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz#f71ef9d82ef16483a407869556588e91b681d9ab"
+ integrity sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA==
+
json5@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
@@ -7022,10 +7050,10 @@ just-curry-it@^5.2.1:
resolved "https://registry.yarnpkg.com/just-curry-it/-/just-curry-it-5.2.1.tgz#93f17967b933e5dd6769ec86eea0eda8f32fce43"
integrity sha512-M8qhhO9WVNc3yZgf3qfiNxMIsQlHqFHJ3vMI8N/rkp852h1utOB/N3ebS8jeXGAwYSbkdd0K6zP9eZneUtjHwA==
-kdbush@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-3.0.0.tgz#f8484794d47004cc2d85ed3a79353dbe0abc2bf0"
- integrity sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==
+kdbush@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-4.0.2.tgz#2f7b7246328b4657dd122b6c7f025fbc2c868e39"
+ integrity sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==
kind-of@^2.0.1:
version "2.0.1"
@@ -7066,6 +7094,11 @@ lazy-cache@^1.0.3:
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
+lerc@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/lerc/-/lerc-4.0.2.tgz#db1232d791ef6bf769c4a55ada9dd46f58458622"
+ integrity sha512-9V1IUp1LJmzFYBm3ABYTawtZY0PzCVqXWuT2ZimVU4NOyGOo4C0P8+XmurVWmT5c8y4ZioJzwQI3k+t/3s8j+Q==
+
leven@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
@@ -7134,10 +7167,15 @@ lodash-es@^4.17.15:
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
+lodash.assignwith@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz#127a97f02adc41751a954d24b0de17e100e038eb"
+ integrity sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==
+
lodash.camelcase@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
- integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
+ integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==
lodash.debounce@^4.0.8:
version "4.0.8"
@@ -7157,7 +7195,7 @@ lodash@^4.0.1, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.1
long@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b"
- integrity sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=
+ integrity sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg==
long@^5.2.1:
version "5.2.3"
@@ -7214,34 +7252,36 @@ makeerror@1.0.12:
dependencies:
tmpl "1.0.5"
-mapbox-gl@^1.0.0:
- version "1.13.2"
- resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-1.13.2.tgz#76639c44f141f8dff71b7d8f1504f2aed11f7517"
- integrity sha512-CPjtWygL+f7naL+sGHoC2JQR0DG7u+9ik6WdkjjVmz2uy0kBC2l+aKfdi3ZzUR7VKSQJ6Mc/CeCN+6iVNah+ww==
+maplibre-gl@^3.5.2:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/maplibre-gl/-/maplibre-gl-3.5.2.tgz#84a352f1845c6ccf6fe5d86aaa0d0e8b0f18923c"
+ integrity sha512-deqYA/RiEyXMGroZMDbOWNQTLnFsxREC+mDkQnuyCUNdBWm1KHafsXJYZP7rlLa5RLQNq05IAUAizY9aHTpIUw==
dependencies:
- "@mapbox/geojson-rewind" "^0.5.0"
- "@mapbox/geojson-types" "^1.0.2"
+ "@mapbox/geojson-rewind" "^0.5.2"
"@mapbox/jsonlint-lines-primitives" "^2.0.2"
- "@mapbox/mapbox-gl-supported" "^1.5.0"
"@mapbox/point-geometry" "^0.1.0"
- "@mapbox/tiny-sdf" "^1.1.1"
- "@mapbox/unitbezier" "^0.0.0"
+ "@mapbox/tiny-sdf" "^2.0.6"
+ "@mapbox/unitbezier" "^0.0.1"
"@mapbox/vector-tile" "^1.3.1"
"@mapbox/whoots-js" "^3.1.0"
- csscolorparser "~1.0.3"
- earcut "^2.2.2"
+ "@maplibre/maplibre-gl-style-spec" "^19.3.3"
+ "@types/geojson" "^7946.0.12"
+ "@types/mapbox__point-geometry" "^0.1.3"
+ "@types/mapbox__vector-tile" "^1.3.3"
+ "@types/pbf" "^3.0.4"
+ "@types/supercluster" "^7.1.2"
+ earcut "^2.2.4"
geojson-vt "^3.2.1"
- gl-matrix "^3.2.1"
- grid-index "^1.1.0"
- minimist "^1.2.5"
+ gl-matrix "^3.4.3"
+ global-prefix "^3.0.0"
+ kdbush "^4.0.2"
murmurhash-js "^1.0.0"
pbf "^3.2.1"
- potpack "^1.0.1"
+ potpack "^2.0.0"
quickselect "^2.0.0"
- rw "^1.3.3"
- supercluster "^7.1.0"
+ supercluster "^8.0.1"
tinyqueue "^2.0.3"
- vt-pbf "^3.1.1"
+ vt-pbf "^3.1.3"
matchmediaquery@^0.3.0:
version "0.3.1"
@@ -7255,12 +7295,12 @@ material-colors@^1.2.1:
resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46"
integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==
-math.gl@^3.6.0:
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/math.gl/-/math.gl-3.6.1.tgz#14eb614b70ee152ef93a9b84115fccde5aea9359"
- integrity sha512-dIAc4VPZ0zsJBJpP8W+Eha2/HQMZSOfEZXuNF4fFVE/8FshTyj0NkzNPtegteRmZGf/sROpzH2d5G3m+PRFrbw==
+math.gl@^3.6.2:
+ version "3.6.3"
+ resolved "https://registry.yarnpkg.com/math.gl/-/math.gl-3.6.3.tgz#f87e0d24cb33c1a215185ae3a4e16839f1ce6db2"
+ integrity sha512-Yq9CyECvSDox9+5ETi2+x1bGTY5WvGUGL3rJfC4KPoCZAM51MGfrCm6rIn4yOJUVfMPs2a5RwMD+yGS/n1g3gg==
dependencies:
- "@math.gl/core" "3.6.1"
+ "@math.gl/core" "3.6.3"
md5@^2.3.0:
version "2.3.0"
@@ -7393,6 +7433,11 @@ minimist@^1.2.0, minimist@^1.2.5:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+minimist@^1.2.6, minimist@^1.2.8:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
+ integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
mixin-object@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e"
@@ -7401,18 +7446,10 @@ mixin-object@^2.0.1:
for-in "^0.1.3"
is-extendable "^0.1.1"
-mjolnir.js@^2.5.0:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/mjolnir.js/-/mjolnir.js-2.6.0.tgz#0a199f71434b5f183248e1a9bb06a3b4e5533ecb"
- integrity sha512-rGA7+BJKvXI0ypxQD/+rQE/sW26kmc8UIZWhmQrjhwCf/zvhbcBlsu2vPB6w0Kv/rVnVFEONTSQqC0vFEpQvIA==
- dependencies:
- "@babel/runtime" "^7.0.0"
- hammerjs "^2.0.8"
-
mjolnir.js@^2.7.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/mjolnir.js/-/mjolnir.js-2.7.0.tgz#8aeec755644d8e9de4f247a5fd0718e39795fe6e"
- integrity sha512-XlK5OZ7d09eAIdYr+5VKOArYtkWB/f306s34yVij4pBk5wnaKxSrD7fVfP8/BL27nKVylNweqP1pxqh8h+hWKw==
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/mjolnir.js/-/mjolnir.js-2.7.1.tgz#4e12590fe168b377c9c669b9c31aa5a62f8b8460"
+ integrity sha512-72BeUWgTv2cj5aZQKpwL8caNUFhXZ9bDm1hxpNj70XJQ62IBnTZmtv/WPxJvtaVNhzNo+D2U8O6ryNI0zImYcw==
dependencies:
"@types/hammerjs" "^2.0.41"
hammerjs "^2.0.8"
@@ -7429,18 +7466,6 @@ mkdirp@^0.5.5:
dependencies:
minimist "^1.2.5"
-moment-timezone@^0.5.33:
- version "0.5.34"
- resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.34.tgz#a75938f7476b88f155d3504a9343f7519d9a405c"
- integrity sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==
- dependencies:
- moment ">= 2.9.0"
-
-"moment@>= 2.9.0":
- version "2.29.1"
- resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3"
- integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
-
moo@^0.5.1:
version "0.5.2"
resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c"
@@ -7714,7 +7739,7 @@ p-try@^2.0.0:
pad-left@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/pad-left/-/pad-left-2.1.0.tgz#16e6a3b2d44a8e138cb0838cc7cb403a4fc9e994"
- integrity sha1-FuajstRKjhOMsIOMx8tAOk/J6ZQ=
+ integrity sha512-HJxs9K9AztdIQIAIa/OIazRAUW/L6B9hbQDxO4X07roW3eo9XqZc2ur9bn1StH9CnbbI9EgvejHQX7CBpCF1QA==
dependencies:
repeat-string "^1.5.4"
@@ -7915,10 +7940,10 @@ postcss@^8.4.7:
picocolors "^1.0.0"
source-map-js "^1.0.2"
-potpack@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.2.tgz#23b99e64eb74f5741ffe7656b5b5c4ddce8dfc14"
- integrity sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==
+potpack@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/potpack/-/potpack-2.0.0.tgz#61f4dd2dc4b3d5e996e3698c0ec9426d0e169104"
+ integrity sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==
prelude-ls@^1.2.1:
version "1.2.1"
@@ -7947,16 +7972,6 @@ pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.5.1:
ansi-styles "^5.0.0"
react-is "^17.0.1"
-probe.gl@^3.4.0:
- version "3.5.0"
- resolved "https://registry.yarnpkg.com/probe.gl/-/probe.gl-3.5.0.tgz#084c0ef3a233e1c055cd8a88efb67abb11eba483"
- integrity sha512-KWj8u0PNytr/rVwcQFcN7O8SK7n/ITOsUZ91l4fSX95oHhKvVCI7eadrzFUzFRlXkFfBWpMWZXFHITsHHHUctw==
- dependencies:
- "@babel/runtime" "^7.0.0"
- "@probe.gl/env" "3.5.0"
- "@probe.gl/log" "3.5.0"
- "@probe.gl/stats" "3.5.0"
-
process-nextick-args@~2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
@@ -7983,7 +7998,7 @@ prompts@^2.0.1, prompts@^2.4.2:
kleur "^3.0.3"
sisteransi "^1.0.5"
-prop-types@^15.5.10, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
+prop-types@^15.5.10, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.8.1:
version "15.8.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@@ -8157,19 +8172,13 @@ react-lifecycles-compat@^3.0.4:
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
-react-map-gl@^5.0.0:
- version "5.3.19"
- resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-5.3.19.tgz#8c012eb7328c64dc2a4bb65eeceacd4a66734f72"
- integrity sha512-Ia8OlbFJIjC9x7XMaUCNtm179NKiD/bjQOt1R/SbBcaz35pSFPUyI0SwOnIUQ98/mR4xopL6phgIfs0B3yZhtQ==
+react-map-gl@^7.1.6:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-7.1.6.tgz#4ea239cd49493cfc9ed15aa52436b024c757c0a9"
+ integrity sha512-9XbrvpFF67Fyi+e6vRLJFnGpo3UF6ZHifIa8cS/wUYSsnv9sVyzGsN++FJy57zkz3Jh3kmf0xKZemR8K0FZLVw==
dependencies:
- "@babel/runtime" "^7.0.0"
- "@types/geojson" "^7946.0.7"
- "@types/mapbox-gl" "^2.0.3"
- mapbox-gl "^1.0.0"
- mjolnir.js "^2.5.0"
- prop-types "^15.7.2"
- resize-observer-polyfill "^1.5.1"
- viewport-mercator-project "^7.0.4"
+ "@maplibre/maplibre-gl-style-spec" "^19.2.1"
+ "@types/mapbox-gl" ">=1.0.0"
react-redux@^8.1.1:
version "8.1.1"
@@ -8342,11 +8351,6 @@ reduce-css-calc@^2.1.8:
css-unit-converter "^1.1.1"
postcss-value-parser "^3.3.0"
-reduce-flatten@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27"
- integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==
-
redux-thunk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.2.tgz#b9d05d11994b99f7a91ea223e8b04cf0afa5ef3b"
@@ -8476,7 +8480,7 @@ renderkid@^3.0.0:
repeat-string@^1.5.4:
version "1.6.1"
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
- integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+ integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==
require-directory@^2.1.1:
version "2.1.1"
@@ -8498,11 +8502,6 @@ reselect@^4.1.8:
resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524"
integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==
-resize-observer-polyfill@^1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
- integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
-
resolve-cwd@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
@@ -8573,7 +8572,7 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
-rw@1, rw@^1.3.3:
+rw@^1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=
@@ -8755,6 +8754,16 @@ serve@^13.0.2:
serve-handler "6.1.3"
update-check "1.5.2"
+set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
setimmediate@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
@@ -8850,6 +8859,28 @@ sockjs@^0.3.21:
uuid "^8.3.2"
websocket-driver "^0.7.4"
+sort-asc@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/sort-asc/-/sort-asc-0.2.0.tgz#00a49e947bc25d510bfde2cbb8dffda9f50eb2fc"
+ integrity sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA==
+
+sort-desc@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/sort-desc/-/sort-desc-0.2.0.tgz#280c1bdafc6577887cedbad1ed2e41c037976646"
+ integrity sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w==
+
+sort-object@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/sort-object/-/sort-object-3.0.3.tgz#945727165f244af9dc596ad4c7605a8dee80c269"
+ integrity sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ==
+ dependencies:
+ bytewise "^1.1.0"
+ get-value "^2.0.2"
+ is-extendable "^0.1.1"
+ sort-asc "^0.2.0"
+ sort-desc "^0.2.0"
+ union-value "^1.0.1"
+
source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
@@ -8923,6 +8954,13 @@ spdy@^4.0.2:
select-hose "^2.0.0"
spdy-transport "^3.0.0"
+split-string@^3.0.1:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
@@ -8945,6 +8983,11 @@ stack-utils@^2.0.3:
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+stream-read-all@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/stream-read-all/-/stream-read-all-3.0.1.tgz#60762ae45e61d93ba0978cda7f3913790052ad96"
+ integrity sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==
+
string-length@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"
@@ -9022,6 +9065,11 @@ strip-json-comments@~2.0.1:
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+strnum@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db"
+ integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==
+
style-loader@^3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575"
@@ -9043,12 +9091,12 @@ styled-components@^5.3.3:
shallowequal "^1.1.0"
supports-color "^5.5.0"
-supercluster@^7.1.0:
- version "7.1.4"
- resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-7.1.4.tgz#6762aabfd985d3390b49f13b815567d5116a828a"
- integrity sha512-GhKkRM1jMR6WUwGPw05fs66pOFWhf59lXq+Q3J3SxPvhNcmgOtLRV6aVQPMRsmXdpaeFJGivt+t7QXUPL3ff4g==
+supercluster@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-8.0.1.tgz#9946ba123538e9e9ab15de472531f604e7372df5"
+ integrity sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==
dependencies:
- kdbush "^3.0.0"
+ kdbush "^4.0.2"
supports-color@^5.3.0, supports-color@^5.5.0:
version "5.5.0"
@@ -9107,15 +9155,18 @@ symbol-tree@^3.2.4:
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
-table-layout@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04"
- integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==
+table-layout@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-3.0.2.tgz#69c2be44388a5139b48c59cf21e73b488021769a"
+ integrity sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==
dependencies:
- array-back "^4.0.1"
- deep-extend "~0.6.0"
- typical "^5.2.0"
- wordwrapjs "^4.0.0"
+ "@75lb/deep-merge" "^1.1.1"
+ array-back "^6.2.2"
+ command-line-args "^5.2.1"
+ command-line-usage "^7.0.0"
+ stream-read-all "^3.0.1"
+ typical "^7.1.1"
+ wordwrapjs "^5.1.0"
tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0:
version "2.2.1"
@@ -9180,11 +9231,6 @@ test-exclude@^6.0.0:
glob "^7.1.4"
minimatch "^3.0.4"
-text-encoding-utf-8@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13"
- integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==
-
text-segmentation@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943"
@@ -9293,11 +9339,16 @@ tslib@^1.8.1:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0:
+tslib@^2.0.3, tslib@^2.1.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
+tslib@^2.5.3:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
+ integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
+
tsutils@^3.21.0:
version "3.21.0"
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
@@ -9354,15 +9405,27 @@ typescript@^4.5.5:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3"
integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==
+typewise-core@^1.2, typewise-core@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195"
+ integrity sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg==
+
+typewise@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/typewise/-/typewise-1.0.3.tgz#1067936540af97937cc5dcf9922486e9fa284651"
+ integrity sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ==
+ dependencies:
+ typewise-core "^1.2.0"
+
typical@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4"
integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==
-typical@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066"
- integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==
+typical@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/typical/-/typical-7.1.1.tgz#ba177ab7ab103b78534463ffa4c0c9754523ac1f"
+ integrity sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==
unbzip2-stream@1.4.3:
version "1.4.3"
@@ -9395,6 +9458,16 @@ unicode-property-aliases-ecmascript@^2.0.0:
resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8"
integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==
+union-value@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
universalify@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@@ -9476,14 +9549,7 @@ vary@~1.1.2:
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
-viewport-mercator-project@^7.0.4:
- version "7.0.4"
- resolved "https://registry.yarnpkg.com/viewport-mercator-project/-/viewport-mercator-project-7.0.4.tgz#67feec04135484bf424dd4890d630e82116b31e6"
- integrity sha512-0jzpL6pIMocCKWg1C3mqi/N4UPgZC3FzwghEm1H+XsUo8hNZAyJc3QR7YqC816ibOR8aWT5pCsV+gCu8/BMJgg==
- dependencies:
- "@math.gl/web-mercator" "^3.5.5"
-
-vt-pbf@^3.1.1:
+vt-pbf@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/vt-pbf/-/vt-pbf-3.1.3.tgz#68fd150756465e2edae1cc5c048e063916dcfaac"
integrity sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==
@@ -9705,7 +9771,7 @@ whatwg-url@^8.0.0, whatwg-url@^8.5.0:
tr46 "^2.1.0"
webidl-conversions "^6.1.0"
-which@^1.2.12, which@^1.2.9:
+which@^1.2.12, which@^1.2.9, which@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
@@ -9741,13 +9807,10 @@ word-wrap@^1.2.3, word-wrap@~1.2.3:
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
-wordwrapjs@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f"
- integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==
- dependencies:
- reduce-flatten "^2.0.0"
- typical "^5.2.0"
+wordwrapjs@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-5.1.0.tgz#4c4d20446dcc670b14fa115ef4f8fd9947af2b3a"
+ integrity sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==
wrap-ansi@^7.0.0:
version "7.0.0"
From baf4f8dc1584130541ce0d1cc7fa00805a883ddc Mon Sep 17 00:00:00 2001
From: unclFedor <103448502+unclFedor@users.noreply.github.com>
Date: Thu, 9 Nov 2023 13:54:14 +0100
Subject: [PATCH 02/40] feat: add arcgis map to viewer app (#311)
* added arcgis map to viewer app
* fixed unit test
* fixed unit test
---
package.json | 3 +
.../arcgis-wrapper/arcgis-wrapper.spec.tsx | 20 ++
.../arcgis-wrapper/arcgis-wrapper.tsx | 42 ++++
.../layers-panel/map-options-panel.spec.tsx | 1 +
src/constants/map-styles.ts | 5 +
src/pages/viewer-app/viewer-app.tsx | 56 ++---
src/redux/slices/base-maps-slice.spec.ts | 54 +----
src/utils/testing-utils/e2e-layers-panel.tsx | 4 +-
yarn.lock | 204 +++++++++++++++++-
9 files changed, 313 insertions(+), 76 deletions(-)
create mode 100644 src/components/arcgis-wrapper/arcgis-wrapper.spec.tsx
create mode 100644 src/components/arcgis-wrapper/arcgis-wrapper.tsx
diff --git a/package.json b/package.json
index dc6adcf3..6176355e 100644
--- a/package.json
+++ b/package.json
@@ -20,12 +20,15 @@
"author": "",
"license": "ISC",
"dependencies": {
+ "@arcgis/core": "^4.28.7",
+ "@deck.gl/arcgis": "^8.9.32",
"@deck.gl/core": "^8.9.32",
"@deck.gl/extensions": "^8.9.32",
"@deck.gl/geo-layers": "^8.9.32",
"@deck.gl/layers": "^8.9.32",
"@deck.gl/mesh-layers": "^8.9.32",
"@deck.gl/react": "^8.9.32",
+ "@esri/react-arcgis": "^5.2.0",
"@fortawesome/fontawesome-svg-core": "^1.2.36",
"@fortawesome/free-solid-svg-icons": "^5.15.4",
"@fortawesome/react-fontawesome": "^0.1.17",
diff --git a/src/components/arcgis-wrapper/arcgis-wrapper.spec.tsx b/src/components/arcgis-wrapper/arcgis-wrapper.spec.tsx
new file mode 100644
index 00000000..8ebb244f
--- /dev/null
+++ b/src/components/arcgis-wrapper/arcgis-wrapper.spec.tsx
@@ -0,0 +1,20 @@
+import { renderWithTheme } from "../../utils/testing-utils/render-with-theme";
+import { Map } from "@esri/react-arcgis";
+
+jest.mock("@esri/react-arcgis", () => {
+ return {
+ Map: jest.fn().mockImplementation(() => ),
+ };
+});
+
+const callRender = (renderFunc) => {
+ return renderFunc();
+};
+
+describe("ArcGis Wrapper", () => {
+ it("Should be able to call ArcGis map", async () => {
+ callRender(renderWithTheme);
+
+ expect(Map).toBeCalledTimes(1);
+ });
+});
diff --git a/src/components/arcgis-wrapper/arcgis-wrapper.tsx b/src/components/arcgis-wrapper/arcgis-wrapper.tsx
new file mode 100644
index 00000000..db7a9317
--- /dev/null
+++ b/src/components/arcgis-wrapper/arcgis-wrapper.tsx
@@ -0,0 +1,42 @@
+import { Map as ArcGisMap } from "@esri/react-arcgis";
+import { loadArcGISModules } from "@deck.gl/arcgis";
+import { useEffect, useState } from "react";
+
+function DeckGLLayer(props) {
+ const [layer, setLayer] = useState(null);
+
+ useEffect(() => {
+ let deckLayer;
+ loadArcGISModules().then(({ DeckLayer }) => {
+ deckLayer = new DeckLayer({});
+ setLayer(deckLayer);
+ props.map.add(deckLayer);
+ });
+ return () => deckLayer && props.map.remove(deckLayer);
+ }, []);
+
+ if (layer) {
+ // @ts-expect-error @deck.gl/arcgis has no types
+ layer.deck.set(props);
+ }
+
+ return null;
+}
+
+export function ArcgisWrapper() {
+ const layers = [];
+
+ return (
+
+
+
+ );
+}
+
+export default ArcgisWrapper;
diff --git a/src/components/layers-panel/map-options-panel.spec.tsx b/src/components/layers-panel/map-options-panel.spec.tsx
index 8f3130a1..afd1cbfc 100644
--- a/src/components/layers-panel/map-options-panel.spec.tsx
+++ b/src/components/layers-panel/map-options-panel.spec.tsx
@@ -180,6 +180,7 @@ describe("Map Options Panel", () => {
name: "Light",
},
{ id: "Terrain", mapUrl: "", name: "Terrain" },
+ { id: "ArcGis", name: "ArcGis", mapUrl: "" },
{ id: "first", mapUrl: "https://first-url.com", name: "first name" },
]);
diff --git a/src/constants/map-styles.ts b/src/constants/map-styles.ts
index 0bbcaf67..fbc40d07 100644
--- a/src/constants/map-styles.ts
+++ b/src/constants/map-styles.ts
@@ -14,6 +14,11 @@ export const BASE_MAPS: BaseMap[] = [
"https://basemaps.cartocdn.com/gl/positron-nolabels-gl-style/style.json",
},
{ id: "Terrain", name: "Terrain", mapUrl: "" },
+ {
+ id: "ArcGis",
+ name: "ArcGis",
+ mapUrl: "",
+ },
];
export const CONTRAST_MAP_STYLES = {
diff --git a/src/pages/viewer-app/viewer-app.tsx b/src/pages/viewer-app/viewer-app.tsx
index 0a95046f..cfdd2ae7 100644
--- a/src/pages/viewer-app/viewer-app.tsx
+++ b/src/pages/viewer-app/viewer-app.tsx
@@ -66,9 +66,9 @@ import {
import { useAppDispatch, useAppSelector } from "../../redux/hooks";
import { setDragMode } from "../../redux/slices/drag-mode-slice";
import { setColorsByAttrubute } from "../../redux/slices/colors-by-attribute-slice";
-import {
- setInitialBaseMaps,
-} from "../../redux/slices/base-maps-slice";
+import { setInitialBaseMaps } from "../../redux/slices/base-maps-slice";
+import { selectSelectedBaseMapId } from "../../redux/slices/base-maps-slice";
+import { ArcgisWrapper } from "../../components/arcgis-wrapper/arcgis-wrapper";
const INITIAL_VIEW_STATE = {
main: {
@@ -100,6 +100,7 @@ export const ViewerApp = () => {
const [isAttributesLoading, setAttributesLoading] = useState(false);
const flattenedSublayers = useAppSelector(selectLayers);
const bslSublayers = useAppSelector(selectSublayers);
+ const selectedBaseMapId = useAppSelector(selectSelectedBaseMapId);
const [tilesetsStats, setTilesetsStats] = useState(initStats());
const [memoryStats, setMemoryStats] = useState(null);
const [updateStatsNumber, setUpdateStatsNumber] = useState(0);
@@ -538,29 +539,32 @@ export const ViewerApp = () => {
return (
{selectedFeatureAttributes && renderAttributesPanel()}
-
+ {selectedBaseMapId !== "ArcGis" && (
+
+ )}
+ {selectedBaseMapId === "ArcGis" && }
{layout !== Layout.Mobile && (
diff --git a/src/redux/slices/base-maps-slice.spec.ts b/src/redux/slices/base-maps-slice.spec.ts
index f102075b..ceded39c 100644
--- a/src/redux/slices/base-maps-slice.spec.ts
+++ b/src/redux/slices/base-maps-slice.spec.ts
@@ -8,6 +8,7 @@ import reducer, {
setSelectedBaseMaps,
deleteBaseMaps,
} from "./base-maps-slice";
+import { BASE_MAPS } from "../../constants/map-styles";
jest.mock("@loaders.gl/i3s", () => {
return jest.fn().mockImplementation(() => {
@@ -18,21 +19,7 @@ jest.mock("@loaders.gl/i3s", () => {
describe("slice: base-maps", () => {
it("Reducer should return the initial state", () => {
expect(reducer(undefined, { type: undefined })).toEqual({
- baseMap: [
- {
- id: "Dark",
- mapUrl:
- "https://basemaps.cartocdn.com/gl/dark-matter-nolabels-gl-style/style.json",
- name: "Dark",
- },
- {
- id: "Light",
- mapUrl:
- "https://basemaps.cartocdn.com/gl/positron-nolabels-gl-style/style.json",
- name: "Light",
- },
- { id: "Terrain", mapUrl: "", name: "Terrain" },
- ],
+ baseMap: BASE_MAPS,
selectedBaseMap: "Dark",
});
});
@@ -168,21 +155,7 @@ describe("slice: base-maps", () => {
};
expect(reducer(previousState, setInitialBaseMaps())).toEqual({
- baseMap: [
- {
- id: "Dark",
- mapUrl:
- "https://basemaps.cartocdn.com/gl/dark-matter-nolabels-gl-style/style.json",
- name: "Dark",
- },
- {
- id: "Light",
- mapUrl:
- "https://basemaps.cartocdn.com/gl/positron-nolabels-gl-style/style.json",
- name: "Light",
- },
- { id: "Terrain", mapUrl: "", name: "Terrain" },
- ],
+ baseMap: BASE_MAPS,
selectedBaseMap: "Dark",
});
});
@@ -191,21 +164,7 @@ describe("slice: base-maps", () => {
const store = setupStore();
const state = store.getState();
expect(selectSelectedBaseMapId(state)).toEqual("Dark");
- expect(selectBaseMaps(state)).toEqual([
- {
- id: "Dark",
- mapUrl:
- "https://basemaps.cartocdn.com/gl/dark-matter-nolabels-gl-style/style.json",
- name: "Dark",
- },
- {
- id: "Light",
- mapUrl:
- "https://basemaps.cartocdn.com/gl/positron-nolabels-gl-style/style.json",
- name: "Light",
- },
- { id: "Terrain", mapUrl: "", name: "Terrain" },
- ]);
+ expect(selectBaseMaps(state)).toEqual(BASE_MAPS);
});
it("Selectors should return updated value", () => {
@@ -229,6 +188,11 @@ describe("slice: base-maps", () => {
name: "Light",
},
{ id: "Terrain", mapUrl: "", name: "Terrain" },
+ {
+ id: "ArcGis",
+ name: "ArcGis",
+ mapUrl: "",
+ },
{
id: "first",
mapUrl: "https://first-url.com",
diff --git a/src/utils/testing-utils/e2e-layers-panel.tsx b/src/utils/testing-utils/e2e-layers-panel.tsx
index 3bece459..1c96de31 100644
--- a/src/utils/testing-utils/e2e-layers-panel.tsx
+++ b/src/utils/testing-utils/e2e-layers-panel.tsx
@@ -65,8 +65,8 @@ export const checkLayersPanel = async (
`${panelId} > :nth-child(4) > :first-child > :nth-child(2) > div`,
(nodes) => nodes.map((node) => node.innerText)
);
- expect(baseMapsNames.length).toBe(3);
- expect(baseMapsNames).toEqual(["Dark", "Light", "Terrain"]);
+ expect(baseMapsNames.length).toBe(4);
+ expect(baseMapsNames).toEqual(["Dark", "Light", "Terrain", "ArcGis"]);
// Dark is selected
const darkMapBackground = await page.$eval(
diff --git a/yarn.lock b/yarn.lock
index 0ff69e26..6579ca76 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -26,6 +26,20 @@
"@jridgewell/gen-mapping" "^0.1.0"
"@jridgewell/trace-mapping" "^0.3.9"
+"@arcgis/core@^4.28.7":
+ version "4.28.7"
+ resolved "https://registry.yarnpkg.com/@arcgis/core/-/core-4.28.7.tgz#706510632e76d529a86da6be816b48bd8fce7f60"
+ integrity sha512-uZtD7xI3qYWPkxJWoj6FwTfFxJJMKpj1s5vRn7vBpGv/eLl78OdCXMvb1Ce3302+5ShwC08WppQmERvISSkpUA==
+ dependencies:
+ "@esri/arcgis-html-sanitizer" "~3.0.1"
+ "@esri/calcite-colors" "~6.1.0"
+ "@esri/calcite-components" "^1.9.2"
+ "@popperjs/core" "~2.11.8"
+ "@zip.js/zip.js" "~2.7.29"
+ focus-trap "~7.5.3"
+ luxon "~3.4.3"
+ sortablejs "~1.15.0"
+
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789"
@@ -1666,6 +1680,14 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+"@deck.gl/arcgis@^8.9.32":
+ version "8.9.32"
+ resolved "https://registry.yarnpkg.com/@deck.gl/arcgis/-/arcgis-8.9.32.tgz#d681a0020e6785a46125d3e66733f5316a7e9a1c"
+ integrity sha512-OivrBVMqVPkDl7Unm6MXCceOm7eqB1z/YLj0HgEXy5S61k9ek/0uUbCe2zT1eqJ2sWvzIkG+E6TVThHfo1OIVQ==
+ dependencies:
+ "@babel/runtime" "^7.0.0"
+ esri-loader "^3.3.0"
+
"@deck.gl/core@^8.9.32":
version "8.9.32"
resolved "https://registry.yarnpkg.com/@deck.gl/core/-/core-8.9.32.tgz#45285a662068b08ebf04bf4509597c97adb923b4"
@@ -1793,6 +1815,60 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
+"@esri/arcgis-html-sanitizer@~3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@esri/arcgis-html-sanitizer/-/arcgis-html-sanitizer-3.0.1.tgz#a4feaf3744bdd532012593fdb929b376a22c39cd"
+ integrity sha512-cwZJwsYCJZwtBQU2AmaiIVFg5nZcVwInPYja1/OgC9iKYO+ytZRoc5h+0S9/ygbFNoS8Nd0RX9A85stLX/BgiA==
+ dependencies:
+ xss "1.0.13"
+
+"@esri/calcite-colors@~6.1.0":
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/@esri/calcite-colors/-/calcite-colors-6.1.0.tgz#2d75e859a88772d8de91ccae40cbe29b8a4d27b8"
+ integrity sha512-wHQYWFtDa6c328EraXEVZvgOiaQyYr0yuaaZ0G3cB4C3lSkWefW34L/e5TLAhtuG3zJ/wR6pl5X1YYNfBc0/4Q==
+
+"@esri/calcite-components@^1.9.2":
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/@esri/calcite-components/-/calcite-components-1.10.0.tgz#2183e2ea53914c65acc9e6c9fe5f313d88479e2c"
+ integrity sha512-nKTwU7hseSAXTqEQelVfo+qDa5jCGvabky4atRsJxROkHbSQkhdFFfwOrrffHOr9CtZBxtvZhfh/Tb6Nky15hw==
+ dependencies:
+ "@floating-ui/dom" "1.5.3"
+ "@stencil/core" "2.22.3"
+ "@types/color" "3.0.4"
+ color "4.2.3"
+ composed-offset-position "0.0.4"
+ dayjs "1.11.10"
+ focus-trap "7.5.4"
+ form-request-submit-polyfill "2.0.0"
+ lodash-es "4.17.21"
+ sortablejs "1.15.0"
+ timezone-groups "0.8.0"
+
+"@esri/react-arcgis@^5.2.0":
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@esri/react-arcgis/-/react-arcgis-5.2.0.tgz#fcdb2ff3ddbb85b66bd5f082e0335c5c95ad120c"
+ integrity sha512-85sSih2lI4ISB9ISu77fxIPUg32UaZjM+SrwaJkxwGzdKnmyhdBqOHMm3kTqjLGPCmuDk9xtEDJWqdxxskkLzQ==
+
+"@floating-ui/core@^1.4.2":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.5.0.tgz#5c05c60d5ae2d05101c3021c1a2a350ddc027f8c"
+ integrity sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==
+ dependencies:
+ "@floating-ui/utils" "^0.1.3"
+
+"@floating-ui/dom@1.5.3":
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.3.tgz#54e50efcb432c06c23cd33de2b575102005436fa"
+ integrity sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==
+ dependencies:
+ "@floating-ui/core" "^1.4.2"
+ "@floating-ui/utils" "^0.1.3"
+
+"@floating-ui/utils@^0.1.3":
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.6.tgz#22958c042e10b67463997bd6ea7115fe28cbcaf9"
+ integrity sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==
+
"@fortawesome/fontawesome-common-types@^0.2.36":
version "0.2.36"
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz#b44e52db3b6b20523e0c57ef8c42d315532cb903"
@@ -2682,6 +2758,11 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
+"@popperjs/core@~2.11.8":
+ version "2.11.8"
+ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f"
+ integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==
+
"@probe.gl/env@3.5.0", "@probe.gl/env@^3.5.0":
version "3.5.0"
resolved "https://registry.yarnpkg.com/@probe.gl/env/-/env-3.5.0.tgz#c6d8fbf414fda3eba7b3813cc274e76245216fe0"
@@ -2767,6 +2848,11 @@
dependencies:
"@sinonjs/commons" "^1.7.0"
+"@stencil/core@2.22.3":
+ version "2.22.3"
+ resolved "https://registry.yarnpkg.com/@stencil/core/-/core-2.22.3.tgz#83987e20bba855c450f6d6780e3a20192603f13f"
+ integrity sha512-kmVA0M/HojwsfkeHsifvHVIYe4l5tin7J5+DLgtl8h6WWfiMClND5K3ifCXXI2ETDNKiEk21p6jql3Fx9o2rng==
+
"@svgr/babel-plugin-add-jsx-attribute@^6.0.0":
version "6.0.0"
resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz#bd6d1ff32a31b82b601e73672a789cc41e84fe18"
@@ -3053,6 +3139,25 @@
dependencies:
"@types/node" "*"
+"@types/color-convert@*":
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@types/color-convert/-/color-convert-2.0.2.tgz#a5fa5da9b866732f8bf86b01964869011e2a2356"
+ integrity sha512-KGRIgCxwcgazts4MXRCikPbIMzBpjfdgEZSy8TRHU/gtg+f9sOfHdtK8unPfxIoBtyd2aTTwINVLSNENlC8U8A==
+ dependencies:
+ "@types/color-name" "*"
+
+"@types/color-name@*":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.2.tgz#bdeeb6fdcb78969033767951ab0cb26c7514a658"
+ integrity sha512-JWO/ZyxTKk0bLuOhAavGjnwLR73rUE7qzACnU7gMeyA/gdrSHm2xJwqNPipw2MtaZUaqQ2UG/q7pP6AQiZ8mqw==
+
+"@types/color@3.0.4":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/color/-/color-3.0.4.tgz#53ceca0946660c7779442948878172c6ace13777"
+ integrity sha512-OpisS4bqJJwbkkQRrMvURf3DOxBoAg9mysHYI7WgrWpSYHqHGKYBULHdz4ih77SILcLDo/zyHGFyfIl9yb8NZQ==
+ dependencies:
+ "@types/color-convert" "*"
+
"@types/command-line-args@5.2.0":
version "5.2.0"
resolved "https://registry.yarnpkg.com/@types/command-line-args/-/command-line-args-5.2.0.tgz#adbb77980a1cc376bb208e3f4142e907410430f6"
@@ -3668,6 +3773,11 @@
resolved "https://registry.yarnpkg.com/@zeit/schemas/-/schemas-2.6.0.tgz#004e8e553b4cd53d538bd38eac7bcbf58a867fe3"
integrity sha512-uUrgZ8AxS+Lio0fZKAipJjAh415JyrOZowliZAzmnJSsf7piVL5w+G0+gFJ0KSu3QRhvui/7zuvpLz03YjXAhg==
+"@zip.js/zip.js@~2.7.29":
+ version "2.7.30"
+ resolved "https://registry.yarnpkg.com/@zip.js/zip.js/-/zip.js-2.7.30.tgz#88db2d23d682a73c1fc649d1df7012e508591e9c"
+ integrity sha512-nhMvQCj+TF1ATBqYzFds7v+yxPBhdDYHh8J341KtC1D2UrVBUIYcYK4Jy1/GiTsxOXEiKOXSUxvPG/XR+7jMqw==
+
abab@^2.0.3, abab@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
@@ -4471,11 +4581,27 @@ color-name@1.1.3:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-color-name@~1.1.4:
+color-name@^1.0.0, color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+color-string@^1.9.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4"
+ integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==
+ dependencies:
+ color-name "^1.0.0"
+ simple-swizzle "^0.2.2"
+
+color@4.2.3:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a"
+ integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==
+ dependencies:
+ color-convert "^2.0.1"
+ color-string "^1.9.0"
+
colorette@^2.0.10, colorette@^2.0.14:
version "2.0.16"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da"
@@ -4508,7 +4634,7 @@ command-line-usage@7.0.1, command-line-usage@^7.0.0:
table-layout "^3.0.0"
typical "^7.1.1"
-commander@^2.20.0:
+commander@^2.20.0, commander@^2.20.3:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
@@ -4533,6 +4659,11 @@ commondir@^1.0.1:
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+composed-offset-position@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/composed-offset-position/-/composed-offset-position-0.0.4.tgz#ca8854abf15e3c235ecf4df125a27fe88af76ea4"
+ integrity sha512-vMlvu1RuNegVE0YsCDSV/X4X10j56mq7PCIyOKK74FxkXzGLwhOUmdkJLSdOBOMwWycobGUMgft2lp+YgTe8hw==
+
compressible@~2.0.14, compressible@~2.0.16:
version "2.0.18"
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
@@ -4775,6 +4906,11 @@ cssesc@^3.0.0:
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+cssfilter@0.0.10:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae"
+ integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==
+
csso@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529"
@@ -4882,6 +5018,11 @@ data-urls@^2.0.0:
whatwg-mimetype "^2.3.0"
whatwg-url "^8.0.0"
+dayjs@1.11.10:
+ version "1.11.10"
+ resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0"
+ integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==
+
debug@2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -5349,6 +5490,11 @@ esrecurse@^4.3.0:
dependencies:
estraverse "^5.2.0"
+esri-loader@^3.3.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/esri-loader/-/esri-loader-3.7.0.tgz#be2432664f53d4878b34ab903499248bbca3e087"
+ integrity sha512-cB1Sw9EQjtW4mtT7eFBjn/6VaaIWNTjmTd2asnnEyuZk1xVSFRMCfLZSBSjZM7ZarDcVu5WIjOP0t0MYVu4hVQ==
+
estraverse@^4.1.1:
version "4.3.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
@@ -5685,6 +5831,13 @@ flatted@^3.1.0:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3"
integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==
+focus-trap@7.5.4, focus-trap@~7.5.3:
+ version "7.5.4"
+ resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.5.4.tgz#6c4e342fe1dae6add9c2aa332a6e7a0bbd495ba2"
+ integrity sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==
+ dependencies:
+ tabbable "^6.2.0"
+
follow-redirects@^1.0.0:
version "1.14.7"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685"
@@ -5721,6 +5874,11 @@ form-data@^3.0.0:
combined-stream "^1.0.8"
mime-types "^2.1.12"
+form-request-submit-polyfill@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/form-request-submit-polyfill/-/form-request-submit-polyfill-2.0.0.tgz#2557c9c2385989954461e327e81619993b5bce96"
+ integrity sha512-p0+M92y2gFnP0AuuL8VJ0GYVzAT0bYp3GsSkmPFhvUopdnfDLP/9xplQTBBc4w8qOjKRzdK7GaFcdL9IhlXdTQ==
+
forwarded@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
@@ -6262,6 +6420,11 @@ is-arrayish@^0.2.1:
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+is-arrayish@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+ integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
+
is-binary-path@~2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
@@ -7162,7 +7325,7 @@ locate-path@^5.0.0:
dependencies:
p-locate "^4.1.0"
-lodash-es@^4.17.15:
+lodash-es@4.17.21, lodash-es@^4.17.15:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
@@ -7223,6 +7386,11 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
+luxon@~3.4.3:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.4.3.tgz#8ddf0358a9492267ffec6a13675fbaab5551315d"
+ integrity sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==
+
lz-string@^1.4.4:
version "1.4.4"
resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26"
@@ -8835,6 +9003,13 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.6:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+simple-swizzle@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+ integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==
+ dependencies:
+ is-arrayish "^0.3.1"
+
sisteransi@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
@@ -8881,6 +9056,11 @@ sort-object@^3.0.3:
sort-desc "^0.2.0"
union-value "^1.0.1"
+sortablejs@1.15.0, sortablejs@~1.15.0:
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.15.0.tgz#53230b8aa3502bb77a29e2005808ffdb4a5f7e2a"
+ integrity sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w==
+
source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
@@ -9155,6 +9335,11 @@ symbol-tree@^3.2.4:
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+tabbable@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
+ integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
+
table-layout@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-3.0.2.tgz#69c2be44388a5139b48c59cf21e73b488021769a"
@@ -9266,6 +9451,11 @@ thunky@^1.0.2:
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
+timezone-groups@0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/timezone-groups/-/timezone-groups-0.8.0.tgz#b7bd35322939bed7cfbf0624cc3eeefd0910800d"
+ integrity sha512-t7E/9sPfCU0m0ZbS7Cqw52D6CB/UyeaiIBmyJCokI1SyOyOgA/ESiQ/fbreeFaUG9QSenGlZSSk/7rEbkipbOA==
+
tinycolor2@^1.4.1:
version "1.4.2"
resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803"
@@ -9861,6 +10051,14 @@ xmlchars@^2.2.0:
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+xss@1.0.13:
+ version "1.0.13"
+ resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.13.tgz#6e48f616128b39f366dfadc57411e1eb5b341c6c"
+ integrity sha512-clu7dxTm1e8Mo5fz3n/oW3UCXBfV89xZ72jM8yzo1vR/pIS0w3sgB3XV2H8Vm6zfGnHL0FzvLJPJEBhd86/z4Q==
+ dependencies:
+ commander "^2.20.3"
+ cssfilter "0.0.10"
+
y18n@^5.0.5:
version "5.0.8"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
From e75fb3c97b74545039d8b301a7eb0582d938a9d6 Mon Sep 17 00:00:00 2001
From: unclFedor <103448502+unclFedor@users.noreply.github.com>
Date: Thu, 16 Nov 2023 12:26:58 +0100
Subject: [PATCH 03/40] added layer to arcgis map (#312)
---
.../arcgis-wrapper/arcgis-wrapper.tsx | 124 +++++++++++++-----
src/index.html | 4 +
2 files changed, 92 insertions(+), 36 deletions(-)
diff --git a/src/components/arcgis-wrapper/arcgis-wrapper.tsx b/src/components/arcgis-wrapper/arcgis-wrapper.tsx
index db7a9317..6ae2ce8d 100644
--- a/src/components/arcgis-wrapper/arcgis-wrapper.tsx
+++ b/src/components/arcgis-wrapper/arcgis-wrapper.tsx
@@ -1,42 +1,94 @@
-import { Map as ArcGisMap } from "@esri/react-arcgis";
import { loadArcGISModules } from "@deck.gl/arcgis";
-import { useEffect, useState } from "react";
+import { useEffect, useState, useRef } from "react";
+import styled from "styled-components";
+import { INITIAL_EXAMPLE } from "../../constants/i3s-examples";
-function DeckGLLayer(props) {
- const [layer, setLayer] = useState(null);
+export const StyledMapContainer = styled.div`
+ overflow: hidden;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+`;
+
+const INITIAL_VIEW_STATE = {
+ longitude: -122.44,
+ latitude: 37.78,
+ bearing: 0,
+};
+
+export const ArcgisWrapper = () => {
+ const mapContainer = useRef(null);
+ const [sceneView, setSceneView] = useState(null);
+ const { longitude, latitude, bearing } = {
+ longitude: INITIAL_VIEW_STATE.longitude,
+ latitude: INITIAL_VIEW_STATE.latitude,
+ bearing: INITIAL_VIEW_STATE.bearing,
+ };
+ const isLoadingRef = useRef(false);
+
+ useEffect(() => {
+ if (!sceneView) {
+ return;
+ }
+ // @ts-expect-error no ArcGIS types
+ sceneView.goTo([longitude, latitude], { animate: false });
+ }, [longitude, latitude, sceneView]);
useEffect(() => {
- let deckLayer;
- loadArcGISModules().then(({ DeckLayer }) => {
- deckLayer = new DeckLayer({});
- setLayer(deckLayer);
- props.map.add(deckLayer);
- });
- return () => deckLayer && props.map.remove(deckLayer);
- }, []);
-
- if (layer) {
- // @ts-expect-error @deck.gl/arcgis has no types
- layer.deck.set(props);
- }
-
- return null;
-}
-
-export function ArcgisWrapper() {
- const layers = [];
-
- return (
-
-
-
- );
-}
+ if (mapContainer.current == null) {
+ return;
+ }
+ if (sceneView || isLoadingRef.current) {
+ return;
+ }
+ isLoadingRef.current = true;
+ let deckRenderer: unknown;
+ loadArcGISModules([
+ "esri/Map",
+ "esri/views/SceneView",
+ "esri/views/3d/externalRenderers",
+ "esri/layers/SceneLayer",
+ ]).then(
+ ({
+ DeckRenderer,
+ modules: [ArcGISMap, SceneView, externalRenderers, SceneLayer],
+ }) => {
+ const map = new ArcGISMap({
+ basemap: "dark-gray-vector",
+ });
+
+ const sceneView = new SceneView({
+ container: mapContainer.current,
+ map: map,
+ environment: {
+ atmosphereEnabled: false,
+ starsEnabled: false,
+ },
+ qualityProfile: "high",
+ camera: {
+ position: { x: longitude, y: latitude, z: 100 },
+ heading: 10,
+ tilt: 71,
+ },
+ ui: { components: ["attribution"] },
+ viewingMode: "local",
+ });
+ setSceneView(sceneView);
+ const sceneLayer = new SceneLayer({
+ url: INITIAL_EXAMPLE.url,
+ popupEnabled: false,
+ });
+ map.add(sceneLayer);
+
+ deckRenderer = new DeckRenderer(sceneView, sceneLayer);
+ externalRenderers.add(sceneView, deckRenderer);
+ }
+ );
+ }, [sceneView, mapContainer, bearing, latitude, longitude]);
+
+ return ;
+};
export default ArcgisWrapper;
diff --git a/src/index.html b/src/index.html
index 4d665028..c0011577 100644
--- a/src/index.html
+++ b/src/index.html
@@ -3,6 +3,10 @@
+
I3S Explorer
From fea25eef9d4cda5156f60efdef1d03bfeed5ab74 Mon Sep 17 00:00:00 2001
From: unclFedor <103448502+unclFedor@users.noreply.github.com>
Date: Thu, 23 Nov 2023 14:22:24 +0100
Subject: [PATCH 04/40] fix: controls on arcgis map (#315)
* fixed controls on arcgis map
* fixed test issue
* fixed layer changing
* fixed inspection's comments
* restored renderBoundingVolumeLayer
* fixed redux hook issue
---
.../arcgis-wrapper/arcgis-wrapper.tsx | 793 ++++++++++++++++--
.../deck-gl-wrapper/deck-gl-wrapper.tsx | 6 +-
.../map-control-panel/map-control-panel.tsx | 30 +-
.../use-arcgis-hook/use-arcgis-hook.spec.ts | 13 +
src/hooks/use-arcgis-hook/use-arcgis-hook.ts | 106 +++
src/pages/viewer-app/viewer-app.tsx | 53 +-
6 files changed, 895 insertions(+), 106 deletions(-)
create mode 100644 src/hooks/use-arcgis-hook/use-arcgis-hook.spec.ts
create mode 100644 src/hooks/use-arcgis-hook/use-arcgis-hook.ts
diff --git a/src/components/arcgis-wrapper/arcgis-wrapper.tsx b/src/components/arcgis-wrapper/arcgis-wrapper.tsx
index 6ae2ce8d..c817a85b 100644
--- a/src/components/arcgis-wrapper/arcgis-wrapper.tsx
+++ b/src/components/arcgis-wrapper/arcgis-wrapper.tsx
@@ -1,7 +1,64 @@
-import { loadArcGISModules } from "@deck.gl/arcgis";
-import { useEffect, useState, useRef } from "react";
+import { useArcgis } from "../../hooks/use-arcgis-hook/use-arcgis-hook";
+import { LineLayer, ScatterplotLayer } from "@deck.gl/layers";
+import { TerrainLayer, Tile3DLayer } from "@deck.gl/geo-layers";
+import { Tile3D, Tileset3D } from "@loaders.gl/tiles";
+import { I3SLoader, SceneLayer3D } from "@loaders.gl/i3s";
+import { CesiumIonLoader, Tiles3DLoader } from "@loaders.gl/3d-tiles";
+import {
+ FlyToInterpolator,
+ COORDINATE_SYSTEM,
+ MapView,
+ WebMercatorViewport,
+ PickingInfo,
+} from "@deck.gl/core";
+import { useEffect, useMemo, useState, useRef } from "react";
+import {
+ NormalsDebugData,
+ ViewStateSet,
+ LoadOptions,
+ TilesetType,
+ MinimapPosition,
+} from "../../types";
+import { BoundingVolumeLayer } from "../../layers";
+import ColorMap from "../../utils/debug/colors-map";
+import {
+ selectDebugTextureForTile,
+ selectDebugTextureForTileset,
+ selectOriginalTextureForTile,
+ selectOriginalTextureForTileset,
+} from "../../utils/debug/texture-selector-utils";
+import { getElevationByCentralTile } from "../../utils/terrain-elevation";
+import { getFrustumBounds } from "../../utils/debug/frustum-utils";
+import { buildMinimapData } from "../../utils/debug/build-minimap-data";
+import {
+ getNormalSourcePosition,
+ getNormalTargetPosition,
+} from "../../utils/debug/normals-utils";
+import { getLonLatWithElevationOffset } from "../../utils/elevation-utils";
+
+import { useAppDispatch, useAppSelector } from "../../redux/hooks";
+import { selectColorsByAttribute } from "../../redux/slices/colors-by-attribute-slice";
+import { selectDragMode } from "../../redux/slices/drag-mode-slice";
+import {
+ fetchUVDebugTexture,
+ selectUVDebugTexture,
+} from "../../redux/slices/uv-debug-texture-slice";
+import {
+ selectMiniMap,
+ selectMiniMapViewPort,
+ selectBoundingVolume,
+ selectLoadTiles,
+ selectShowUVDebugTexture,
+ selectWireframe,
+ selectTileColorMode,
+ selectBoundingVolumeColorMode,
+ selectBoundingVolumeType,
+} from "../../redux/slices/debug-options-slice";
+import {
+ selectBaseMaps,
+ selectSelectedBaseMapId,
+} from "../../redux/slices/base-maps-slice";
import styled from "styled-components";
-import { INITIAL_EXAMPLE } from "../../constants/i3s-examples";
export const StyledMapContainer = styled.div`
overflow: hidden;
@@ -12,82 +69,690 @@ export const StyledMapContainer = styled.div`
top: 0;
`;
+const TRANSITION_DURAITON = 4000;
const INITIAL_VIEW_STATE = {
- longitude: -122.44,
- latitude: 37.78,
+ longitude: -120,
+ latitude: 34,
+ pitch: 45,
+ maxPitch: 90,
bearing: 0,
+ minZoom: 2,
+ maxZoom: 30,
+ zoom: 14.5,
+ transitionDuration: 0,
+ transitionInterpolator: null,
};
-export const ArcgisWrapper = () => {
- const mapContainer = useRef(null);
- const [sceneView, setSceneView] = useState(null);
- const { longitude, latitude, bearing } = {
- longitude: INITIAL_VIEW_STATE.longitude,
- latitude: INITIAL_VIEW_STATE.latitude,
- bearing: INITIAL_VIEW_STATE.bearing,
- };
- const isLoadingRef = useRef(false);
+// https://github.com/tilezen/joerd/blob/master/docs/use-service.md#additional-amazon-s3-endpoints
+const MAPZEN_TERRAIN_IMAGES = `https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png`;
+const ARCGIS_STREET_MAP_SURFACE_IMAGES =
+ "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}";
+const MAPZEN_ELEVATION_DECODE_PARAMETERS = {
+ rScaler: 256,
+ gScaler: 1,
+ bScaler: 1 / 256,
+ offset: -32768,
+};
+const TERRAIN_LAYER_MAX_ZOOM = 15;
+
+const DEFAULT_BG_OPACITY = 100;
+
+const NORMALS_COLOR = [255, 0, 0];
+
+const colorMap = new ColorMap();
+
+type ArcGisMapProps = {
+ /** DeckGL component id */
+ id?: string;
+ /**
+ * View state controlled by parent component
+ * if is not set `viewState` state variable will be used
+ */
+ parentViewState?: ViewStateSet;
+ /** User selected tiles colors */
+ coloredTilesMap?: { [key: string]: string };
+ /** Allows layers picking to handle mouse events */
+ pickable?: boolean;
+ /** Layers loading data */
+ layers3d: {
+ id?: number;
+ url?: string;
+ token?: string | null;
+ type: TilesetType;
+ }[];
+ /** Last selected layer id. Prop to reset some settings when new layer selected */
+ lastLayerSelectedId: string;
+ /** Load debug texture image */
+ loadDebugTextureImage?: boolean;
+ /** If `true` picking will select I3S features
+ * If `false` picking will select the whole tile
+ */
+ featurePicking?: boolean;
+ /** Data for normals visualization */
+ normalsDebugData?: NormalsDebugData | null;
+ /** Percentage of triangles to show normals for */
+ normalsTrianglesPercentage?: number;
+ /** Normals lenght in meters */
+ normalsLength?: number;
+ /** http:///SceneServer json */
+ metadata?: { layers: SceneLayer3D[] } | null;
+ /** Basepath of the tileset of the selected tile */
+ selectedTilesetBasePath?: string | null;
+ /** Tile, selected by picking event */
+ selectedTile?: Tile3D | null;
+ /** Index of picked object */
+ selectedIndex?: number;
+ /** Deckgl flag to highlight picked objects automaticaly */
+ autoHighlight?: boolean;
+ /** List of initialized tilesets */
+ loadedTilesets?: Tileset3D[];
+ /** I3S option to choose type of geometry */
+ useDracoGeometry?: boolean;
+ /** I3S option to choose type of textures */
+ useCompressedTextures?: boolean;
+ /** enables or disables viewport interactivity */
+ disableController?: boolean;
+ /** allows update a layer */
+ loadNumber?: number;
+ /** prevent transition to a layer */
+ preventTransitions?: boolean;
+ /** calculate position of minimap */
+ minimapPosition?: MinimapPosition;
+ onViewStateChange?: (viewStates: ViewStateSet) => void;
+ onWebGLInitialized?: (gl: any) => void;
+ /** DeckGL after render callback */
+ onAfterRender?: () => void;
+ /** DeckGL callback. On layer hover behavior */
+ getTooltip?: (info: { object: Tile3D; index: number; layer: any }) => void;
+ /** DeckGL callback. On layer click behavior */
+ onClick?: (info: PickingInfo) => void;
+ /** Tile3DLayer callback. Triggers after a tileset was initialized */
+ onTilesetLoad: (tileset: Tileset3D) => void;
+ /** Tile3DLayer callback. Triggers after tile content was loaded */
+ onTileLoad?: (tile: Tile3D) => void;
+ /** Tile3DLayer callback. Triggers after tile contenst was unloaded */
+ onTileUnload?: (tile: Tile3D) => void;
+};
+export const ArcgisWrapper = ({
+ // eslint-disable-next-line
+ id,
+ parentViewState,
+ coloredTilesMap,
+ pickable = false,
+ layers3d,
+ lastLayerSelectedId,
+ loadDebugTextureImage = false,
+ featurePicking = true,
+ normalsDebugData,
+ normalsTrianglesPercentage = 100,
+ normalsLength = 1,
+ metadata,
+ selectedTilesetBasePath,
+ selectedTile,
+ selectedIndex,
+ autoHighlight = false,
+ loadedTilesets = [],
+ useDracoGeometry = true,
+ useCompressedTextures = true,
+ disableController = false,
+ loadNumber = 0,
+ preventTransitions = false,
+ minimapPosition,
+ onViewStateChange,
+ // eslint-disable-next-line
+ onWebGLInitialized,
+ // eslint-disable-next-line
+ onAfterRender,
+ // eslint-disable-next-line
+ getTooltip,
+ onClick,
+ onTilesetLoad,
+ onTileLoad,
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
+ onTileUnload = () => {},
+}: ArcGisMapProps) => {
+ const dragMode = useAppSelector(selectDragMode);
+ const showMinimap = useAppSelector(selectMiniMap);
+ const loadTiles = useAppSelector(selectLoadTiles);
+ const showDebugTexture = useAppSelector(selectShowUVDebugTexture);
+ const createIndependentMinimapViewport = useAppSelector(
+ selectMiniMapViewPort
+ );
+ const tileColorMode = useAppSelector(selectTileColorMode);
+ const boundingVolumeColorMode = useAppSelector(selectBoundingVolumeColorMode);
+ const wireframe = useAppSelector(selectWireframe);
+ const baseMaps = useAppSelector(selectBaseMaps);
+ const selectedBaseMapId = useAppSelector(selectSelectedBaseMapId);
+ const selectedBaseMap = baseMaps.find((map) => map.id === selectedBaseMapId);
+ const showTerrain = selectedBaseMap?.id === "Terrain";
+ const boundingVolume = useAppSelector(selectBoundingVolume);
+ const boundingVolumeType = useAppSelector(selectBoundingVolumeType);
+
+ const VIEWS = useMemo(
+ () => [
+ new MapView({
+ id: "main",
+ controller: disableController ? false : { inertia: true },
+ farZMultiplier: 2.02,
+ }),
+ new MapView({
+ id: "minimap",
+
+ // Position on top of main map
+ x: minimapPosition?.x,
+ y: minimapPosition?.y,
+ width: "20%",
+ height: "20%",
+
+ // Minimap is overlaid on top of an existing view, so need to clear the background
+ clear: true,
+ controller: disableController
+ ? false
+ : {
+ maxZoom: 9,
+ minZoom: 9,
+ dragRotate: false,
+ keyboard: false,
+ },
+ }),
+ ],
+ [disableController, dragMode]
+ );
+ const [viewState, setViewState] = useState({
+ main: INITIAL_VIEW_STATE,
+ minimap: {
+ latitude: INITIAL_VIEW_STATE.latitude,
+ longitude: INITIAL_VIEW_STATE.longitude,
+ zoom: 9,
+ pitch: 0,
+ bearing: 0,
+ },
+ });
+ const [terrainTiles, setTerrainTiles] = useState({});
+ const uvDebugTexture = useAppSelector(selectUVDebugTexture);
+ const uvDebugTextureRef = useRef(null);
+ uvDebugTextureRef.current = uvDebugTexture;
+ const [needTransitionToTileset, setNeedTransitionToTileset] = useState(false);
+
+ const showDebugTextureRef = useRef(false);
+ showDebugTextureRef.current = showDebugTexture;
+
+ const currentViewport: WebMercatorViewport = null;
+
+ const colorsByAttribute = useAppSelector(selectColorsByAttribute);
+ const dispatch = useAppDispatch();
+
+ /** Load debug texture if necessary */
useEffect(() => {
- if (!sceneView) {
- return;
+ if (loadDebugTextureImage && !uvDebugTexture) {
+ dispatch(fetchUVDebugTexture());
}
- // @ts-expect-error no ArcGIS types
- sceneView.goTo([longitude, latitude], { animate: false });
- }, [longitude, latitude, sceneView]);
+ }, [loadDebugTextureImage]);
+ /**
+ * Hook to call multiple changing function based on selected tileset.
+ */
useEffect(() => {
- if (mapContainer.current == null) {
- return;
+ setNeedTransitionToTileset(true);
+ colorMap._resetColorsMap();
+ }, [lastLayerSelectedId]);
+
+ /** Independent minimap viewport toggle */
+ useEffect(() => {
+ const viewportTraversersMap = {
+ main: "main",
+ minimap: createIndependentMinimapViewport ? "minimap" : "main",
+ };
+ loadedTilesets.forEach((tileset) => {
+ tileset.setProps({
+ viewportTraversersMap,
+ loadTiles,
+ });
+ tileset.selectTiles();
+ });
+ }, [createIndependentMinimapViewport]);
+
+ /** Load tiles toggle */
+ useEffect(() => {
+ loadedTilesets.forEach((tileset) => {
+ tileset.setProps({
+ loadTiles,
+ });
+ tileset.selectTiles();
+ });
+ }, [loadTiles]);
+
+ useEffect(() => {
+ loadedTilesets.forEach((tileset) => {
+ if (showDebugTexture) {
+ selectDebugTextureForTileset(tileset, uvDebugTexture);
+ } else {
+ selectOriginalTextureForTileset();
+ }
+ });
+ }, [showDebugTexture]);
+
+ const getViewState = () =>
+ parentViewState || (showMinimap && viewState) || { main: viewState.main };
+
+ // eslint-disable-next-line
+ const getViews = () => (showMinimap ? VIEWS : [VIEWS[0]]);
+
+ const onViewStateChangeHandler = ({
+ interactionState,
+ viewState,
+ viewId,
+ }) => {
+ const {
+ longitude,
+ latitude,
+ position: [, , oldElevation],
+ } = viewState;
+ const viewportCenterTerrainElevation =
+ getElevationByCentralTile(longitude, latitude, terrainTiles) || 0;
+ let cameraTerrainElevation: number | null = null;
+
+ if (currentViewport) {
+ const cameraPosition = currentViewport.unprojectPosition(
+ currentViewport.cameraPosition
+ );
+ cameraTerrainElevation =
+ getElevationByCentralTile(
+ cameraPosition[0],
+ cameraPosition[1],
+ terrainTiles
+ ) || 0;
}
- if (sceneView || isLoadingRef.current) {
- return;
+ let elevation =
+ cameraTerrainElevation === null ||
+ viewportCenterTerrainElevation > cameraTerrainElevation
+ ? viewportCenterTerrainElevation
+ : cameraTerrainElevation;
+ if (!interactionState.isZooming) {
+ if (oldElevation - elevation > 5) {
+ elevation = oldElevation - 5;
+ } else if (elevation - oldElevation > 5) {
+ elevation = oldElevation + 5;
+ }
}
- isLoadingRef.current = true;
- let deckRenderer: unknown;
- loadArcGISModules([
- "esri/Map",
- "esri/views/SceneView",
- "esri/views/3d/externalRenderers",
- "esri/layers/SceneLayer",
- ]).then(
- ({
- DeckRenderer,
- modules: [ArcGISMap, SceneView, externalRenderers, SceneLayer],
- }) => {
- const map = new ArcGISMap({
- basemap: "dark-gray-vector",
- });
-
- const sceneView = new SceneView({
- container: mapContainer.current,
- map: map,
- environment: {
- atmosphereEnabled: false,
- starsEnabled: false,
+
+ if (parentViewState && onViewStateChange) {
+ let newViewState;
+ if (viewId === "minimap") {
+ newViewState = {
+ main: {
+ ...parentViewState.main,
+ longitude: viewState.longitude,
+ latitude: viewState.latitude,
+ position: [0, 0, elevation],
},
- qualityProfile: "high",
- camera: {
- position: { x: longitude, y: latitude, z: 100 },
- heading: 10,
- tilt: 71,
+ minimap: viewState,
+ };
+ } else {
+ newViewState = {
+ main: {
+ ...viewState,
+ position: [0, 0, elevation],
},
- ui: { components: ["attribution"] },
- viewingMode: "local",
- });
- setSceneView(sceneView);
- const sceneLayer = new SceneLayer({
- url: INITIAL_EXAMPLE.url,
- popupEnabled: false,
- });
- map.add(sceneLayer);
-
- deckRenderer = new DeckRenderer(sceneView, sceneLayer);
- externalRenderers.add(sceneView, deckRenderer);
+ minimap: {
+ ...parentViewState.minimap,
+ longitude: viewState.longitude,
+ latitude: viewState.latitude,
+ },
+ };
+ }
+ onViewStateChange(newViewState);
+ } else {
+ setViewState((prevValues) => {
+ let newViewState;
+ if (viewId === "minimap") {
+ newViewState = {
+ main: {
+ ...prevValues.main,
+ longitude: viewState.longitude,
+ latitude: viewState.latitude,
+ position: [0, 0, elevation],
+ },
+ minimap: viewState,
+ };
+ } else {
+ newViewState = {
+ main: {
+ ...viewState,
+ position: [0, 0, elevation],
+ },
+ minimap: {
+ ...prevValues.minimap,
+ longitude: viewState.longitude,
+ latitude: viewState.latitude,
+ },
+ };
+ }
+ return newViewState;
+ });
+ }
+ };
+
+ const onTilesetLoadHandler = (tileset: Tileset3D) => {
+ if (needTransitionToTileset && !preventTransitions) {
+ const { zoom, cartographicCenter } = tileset;
+ const [longitude, latitude] = cartographicCenter || [];
+ const viewport = new VIEWS[0].ViewportType(viewState.main);
+ const {
+ main: { pitch, bearing },
+ } = viewState;
+
+ const { zmin = 0 } = metadata?.layers?.[0]?.fullExtent || {};
+ const [pLongitude, pLatitude] = getLonLatWithElevationOffset(
+ zmin,
+ pitch,
+ bearing,
+ longitude,
+ latitude,
+ viewport
+ );
+
+ const newViewState = {
+ main: {
+ ...viewState.main,
+ zoom: zoom + 2,
+ longitude: pLongitude,
+ latitude: pLatitude,
+ transitionDuration: TRANSITION_DURAITON,
+ transitionInterpolator: new FlyToInterpolator(),
+ },
+ minimap: {
+ ...viewState.minimap,
+ longitude: pLongitude,
+ latitude: pLatitude,
+ },
+ };
+ setNeedTransitionToTileset(false);
+ if (parentViewState && onViewStateChange) {
+ onViewStateChange(newViewState);
+ } else {
+ setViewState(newViewState);
+ }
+ }
+
+ // eslint-disable-next-line
+ const viewportTraversersMap = {
+ main: "main",
+ minimap: createIndependentMinimapViewport ? "minimap" : "main",
+ };
+ tileset.setProps({
+ //todo: viewportTraversersMap,
+ loadTiles,
+ });
+ onTilesetLoad(tileset);
+ };
+
+ const onTileLoadHandler = (tile) => {
+ if (!featurePicking) {
+ // delete featureIds from data to have instance picking instead of feature picking
+ delete tile.content.featureIds;
+ }
+ if (showDebugTextureRef.current) {
+ selectDebugTextureForTile(tile, uvDebugTextureRef.current);
+ } else {
+ selectOriginalTextureForTile(tile);
+ }
+ if (onTileLoad) {
+ onTileLoad(tile);
+ }
+ };
+
+ const onTerrainTileLoad = (tile) => {
+ const {
+ bbox: { east, north, south, west },
+ } = tile;
+
+ setTerrainTiles((prevValue) => ({
+ ...prevValue,
+ [`${east};${north};${south};${west}`]: tile,
+ }));
+ };
+
+ const getAllTilesFromTilesets = (tilesets) => {
+ const allTiles = tilesets.map((tileset) => tileset.tiles);
+ return allTiles.flat();
+ };
+
+ const getBoundingVolumeColor = (tile) => {
+ const color = colorMap.getBoundingVolumeColor(tile, {
+ coloredBy: boundingVolumeColorMode,
+ });
+
+ return [...color, DEFAULT_BG_OPACITY];
+ };
+
+ const getMeshColor = (tile) => {
+ const result = colorMap.getTileColor(tile, {
+ coloredBy: tileColorMode,
+ selectedTileId: selectedTile?.id,
+ coloredTilesMap,
+ });
+
+ return result;
+ };
+
+ const renderBoundingVolumeLayer = () => {
+ if (!boundingVolume) {
+ return null;
+ }
+ const tiles = getAllTilesFromTilesets(loadedTilesets);
+ // @ts-expect-error - Expected 0 arguments, but got 1.
+ return new BoundingVolumeLayer({
+ id: "bounding-volume-layer",
+ visible: boundingVolume,
+ tiles,
+ getBoundingVolumeColor,
+ boundingVolumeType,
+ });
+ };
+
+ const renderFrustum = () => {
+ if (!showMinimap) {
+ return false;
+ }
+ const viewport = new WebMercatorViewport(viewState.main);
+ const frustumBounds = getFrustumBounds(viewport);
+ return new LineLayer({
+ id: "frustum",
+ data: frustumBounds,
+ getSourcePosition: (d) => d.source,
+ getTargetPosition: (d) => d.target,
+ getColor: (d) => d.color,
+ getWidth: 2,
+ });
+ };
+
+ const renderMainOnMinimap = () => {
+ if (!createIndependentMinimapViewport) {
+ return null;
+ }
+ let data = [];
+
+ if (loadedTilesets.length) {
+ const tiles = getAllTilesFromTilesets(loadedTilesets);
+ data = buildMinimapData(tiles);
+ }
+
+ return new ScatterplotLayer({
+ id: "main-on-minimap",
+ data,
+ pickable: false,
+ opacity: 0.8,
+ stroked: true,
+ filled: true,
+ radiusScale: 1,
+ radiusMinPixels: 1,
+ radiusMaxPixels: 100,
+ lineWidthMinPixels: 1,
+ getPosition: (d) => d.coordinates,
+ getRadius: (d) => d.radius,
+ getFillColor: () => [255, 140, 0, 100],
+ getLineColor: () => [0, 0, 0, 120],
+ });
+ };
+
+ const renderNormals = () => {
+ if (!normalsDebugData) {
+ return;
+ }
+ return new LineLayer({
+ id: "normals-debug",
+ data: normalsDebugData,
+ getSourcePosition: (_, { index, data }) =>
+ getNormalSourcePosition(index, data, normalsTrianglesPercentage),
+ getTargetPosition: (_, { index, data }) =>
+ getNormalTargetPosition(
+ index,
+ data,
+ normalsTrianglesPercentage,
+ normalsLength
+ ),
+ getColor: () => NORMALS_COLOR,
+ modelMatrix: normalsDebugData?.cartographicModelMatrix,
+ coordinateOrigin: normalsDebugData?.cartographicOrigin,
+ coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,
+ getWidth: 1,
+ });
+ };
+
+ const renderI3SLayer = (layer) => {
+ const loadOptions: LoadOptions = {
+ i3s: {
+ coordinateSystem: COORDINATE_SYSTEM.LNGLAT_OFFSETS,
+ useDracoGeometry,
+ useCompressedTextures,
+ colorsByAttribute: colorsByAttribute,
+ },
+ };
+ if (layer.token) {
+ loadOptions.i3s.token = layer.token;
+ }
+ return new Tile3DLayer({
+ id: `tile-layer-${layer.id}-draco-${useDracoGeometry}-compressed-textures-${useCompressedTextures}--colors-by-attribute-${colorsByAttribute?.attributeName}--colors-by-attribute-mode-${colorsByAttribute?.mode}--${loadNumber}`,
+ data: layer.url,
+ loader: I3SLoader,
+ onClick: onClick,
+ onTilesetLoad: onTilesetLoadHandler,
+ onTileLoad: onTileLoadHandler,
+ onTileUnload,
+ loadOptions,
+ pickable,
+ autoHighlight,
+ _subLayerProps: {
+ mesh: {
+ wireframe,
+ },
+ },
+ _getMeshColor: getMeshColor,
+ highlightedObjectIndex: autoHighlight
+ ? undefined
+ : layer.url === selectedTilesetBasePath
+ ? selectedIndex
+ : -1,
+ });
+ };
+
+ const render3DTilesLayer = (layer) => {
+ const loadOptions =
+ layer.type === TilesetType.CesiumIon
+ ? { "cesium-ion": { accessToken: layer.token } }
+ : {};
+ const loader =
+ layer.type === TilesetType.CesiumIon ? CesiumIonLoader : Tiles3DLoader;
+ return new Tile3DLayer({
+ id: `tile-layer-${layer.id}--${loadNumber}`,
+ data: layer.url,
+ loader,
+ loadOptions,
+ onTilesetLoad: onTilesetLoadHandler,
+ onTileLoad: onTileLoadHandler,
+ onTileUnload,
+ });
+ };
+
+ const renderLayers = () => {
+ const tile3dLayers = layers3d.map((layer) => {
+ switch (layer.type) {
+ case TilesetType.CesiumIon:
+ case TilesetType.Tiles3D:
+ return render3DTilesLayer(layer);
+ case TilesetType.I3S:
+ default:
+ return renderI3SLayer(layer);
}
- );
- }, [sceneView, mapContainer, bearing, latitude, longitude]);
+ });
+ if (showTerrain) {
+ const terrainLayer = new TerrainLayer({
+ id: "terrain",
+ maxZoom: TERRAIN_LAYER_MAX_ZOOM,
+ elevationDecoder: MAPZEN_ELEVATION_DECODE_PARAMETERS,
+ elevationData: MAPZEN_TERRAIN_IMAGES,
+ texture: ARCGIS_STREET_MAP_SURFACE_IMAGES,
+ onTileLoad: (tile) => onTerrainTileLoad(tile),
+ color: [255, 255, 255],
+ });
+ tile3dLayers.push(terrainLayer);
+ }
+
+ return [
+ ...tile3dLayers,
+ renderFrustum(),
+ renderBoundingVolumeLayer(),
+ renderNormals(),
+ renderMainOnMinimap(),
+ ];
+ };
+
+ // eslint-disable-next-line
+ const layerFilter = ({ layer, viewport }) => {
+ const { id: viewportId } = viewport;
+ const {
+ id: layerId,
+ props: { viewportIds = null },
+ } = layer;
+ if (
+ viewportId !== "minimap" &&
+ (layerId === "frustum" || layerId === "main-on-minimap")
+ ) {
+ // only display frustum in the minimap
+ return false;
+ }
+ if (
+ showMinimap &&
+ viewportId === "minimap" &&
+ layerId.indexOf("obb-debug-") !== -1
+ ) {
+ return false;
+ }
+ if (viewportIds && !viewportIds.includes(viewportId)) {
+ return false;
+ }
+ if (viewportId === "minimap" && layerId === "normals-debug") {
+ return false;
+ }
+ if (viewportId === "minimap" && layerId.indexOf("terrain") !== -1) {
+ return false;
+ }
+ return true;
+ };
+ // Trying to keep code alligned to deck-gl-wrapper above this line
+ // All Arcgis specific code is allocated below this line
+ const mapContainer = useRef(null);
+ const map = useArcgis(mapContainer, getViewState(), onViewStateChangeHandler);
+ if (map) {
+ const layers = renderLayers();
+ // @ts-expect-error @deck.gl/arcgis has no types
+ map.deck.set({ layers });
+ // @ts-expect-error @deck.gl/arcgis has no types
+ map.deck.layerFilter = layerFilter;
+ }
return ;
};
diff --git a/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx b/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx
index dffbbf78..583392d0 100644
--- a/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx
+++ b/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx
@@ -217,6 +217,9 @@ export const DeckGlWrapper = ({
const selectedBaseMap = baseMaps.find((map) => map.id === selectedBaseMapId);
const showTerrain = selectedBaseMap?.id === "Terrain";
const mapStyle = selectedBaseMap?.mapUrl;
+ const boundingVolume = useAppSelector(selectBoundingVolume);
+ const boundingVolumeType = useAppSelector(selectBoundingVolumeType);
+
const VIEWS = useMemo(
() => [
new MapView({
@@ -526,9 +529,6 @@ export const DeckGlWrapper = ({
};
const renderBoundingVolumeLayer = () => {
- const boundingVolume = useAppSelector(selectBoundingVolume);
- const boundingVolumeType = useAppSelector(selectBoundingVolumeType);
-
if (!boundingVolume) {
return null;
}
diff --git a/src/components/map-control-panel/map-control-panel.tsx b/src/components/map-control-panel/map-control-panel.tsx
index 96c4a86c..cd0a3f25 100644
--- a/src/components/map-control-panel/map-control-panel.tsx
+++ b/src/components/map-control-panel/map-control-panel.tsx
@@ -83,6 +83,7 @@ type MapControlPanelProps = {
onZoomIn: () => void;
onZoomOut: () => void;
onCompassClick: () => void;
+ isDragModeVisible?: boolean;
};
type CompassProps = {
@@ -106,6 +107,7 @@ export const MapControllPanel = ({
onZoomIn,
onZoomOut,
onCompassClick,
+ isDragModeVisible = true,
}: MapControlPanelProps) => {
const [expandState, expand] = useExpand(ExpandState.expanded);
const dragMode = useAppSelector(selectDragMode);
@@ -144,18 +146,22 @@ export const MapControllPanel = ({
-
-
+ {isDragModeVisible === true && (
+ <>
+
+
+ >
+ )}
>
)}
);
};
diff --git a/src/pages/viewer-app/viewer-app.tsx b/src/pages/viewer-app/viewer-app.tsx
index c2525e0c..67f33de5 100644
--- a/src/pages/viewer-app/viewer-app.tsx
+++ b/src/pages/viewer-app/viewer-app.tsx
@@ -41,6 +41,7 @@ import {
MapArea,
RightSidePanelWrapper,
OnlyToolsPanelWrapper,
+ CenteredContainer,
} from "../../components/common";
import { MainToolsPanel } from "../../components/main-tools-panel/main-tools-panel";
import { LayersPanel } from "../../components/layers-panel/layers-panel";
@@ -78,6 +79,7 @@ import { setInitialBaseMaps } from "../../redux/slices/base-maps-slice";
import { getBSLStatisticsSummary } from "../../redux/slices/i3s-stats-slice";
import { RootState } from "../../redux/store";
import { useSelector } from "react-redux";
+import { WarningPanel } from "../../components/layers-panel/warning/warning-panel";
const INITIAL_VIEW_STATE = {
main: {
@@ -134,6 +136,9 @@ export const ViewerApp = () => {
const filtersByAttribute = useSelector((state: RootState) =>
selectFiltersByAttribute(state)
);
+ const [wrongBookmarkPageId, setWrongBookmarkPageId] = useState(
+ null
+ );
const selectedLayerIds = useMemo(
() => activeLayers.map((layer) => layer.id),
@@ -518,9 +523,7 @@ export const ViewerApp = () => {
setBookmarks(bookmarks);
onSelectBookmarkHandler(bookmarks[0].id, bookmarks);
} else {
- console.warn(
- `Can't add bookmars with ${bookmarksPageId} pageId to the viewer app`
- );
+ setWrongBookmarkPageId(bookmarksPageId);
}
};
@@ -692,6 +695,14 @@ export const ViewerApp = () => {
onZoomOut={onZoomOut}
onCompassClick={onCompassClick}
/>
+ {wrongBookmarkPageId && (
+
+ setWrongBookmarkPageId(null)}
+ />
+
+ )}
);
};
From 9050b259d59a23d0087b1ef3496c57753d9968d5 Mon Sep 17 00:00:00 2001
From: mspivak-actionengine
<118991512+mspivak-actionengine@users.noreply.github.com>
Date: Wed, 31 Jan 2024 18:30:14 +0300
Subject: [PATCH 22/40] fix(layers): show unsupported layer types in the scene
(#347)
---
package.json | 10 +--
src/app.tsx | 2 +
src/components/layers-panel/layers-panel.tsx | 80 +++++++++++++++-----
3 files changed, 67 insertions(+), 25 deletions(-)
diff --git a/package.json b/package.json
index 92225483..cee86e65 100644
--- a/package.json
+++ b/package.json
@@ -27,10 +27,10 @@
"@fortawesome/free-solid-svg-icons": "^5.15.4",
"@fortawesome/react-fontawesome": "^0.1.17",
"@hyperjump/json-schema": "^0.23.2",
- "@loaders.gl/3d-tiles": "^4.0.0-beta.8",
- "@loaders.gl/core": "^4.0.0-beta.8",
- "@loaders.gl/i3s": "^4.0.0-beta.8",
- "@loaders.gl/tiles": "^4.0.0-beta.8",
+ "@loaders.gl/3d-tiles": "^4.1.0-alpha.11",
+ "@loaders.gl/core": "^4.1.0-alpha.11",
+ "@loaders.gl/i3s": "^4.1.0-alpha.11",
+ "@loaders.gl/tiles": "^4.1.0-alpha.11",
"@luma.gl/core": "^8.5.14",
"@math.gl/core": "^3.6.0",
"@math.gl/proj4": "^3.6.3",
@@ -91,7 +91,7 @@
"webpack-dev-server": "^4.7.4"
},
"resolutions": {
- "@loaders.gl/tiles": "^4.0.0-beta.8"
+ "@loaders.gl/tiles": "^4.1.0-alpha.11"
},
"volta": {
"node": "18.18.2",
diff --git a/src/app.tsx b/src/app.tsx
index 871b625b..047df5c1 100644
--- a/src/app.tsx
+++ b/src/app.tsx
@@ -88,6 +88,7 @@ const THEMES: AppThemes = {
switchDisabledBackgroundHovered: dim_canvas_primary,
switchCheckedBackground: color_brand_tertiary,
switchCheckedBackgroundHovered: dim_brand_tertinary,
+ bullet: color_canvas_secondary,
},
name: Theme.Dark,
},
@@ -130,6 +131,7 @@ const THEMES: AppThemes = {
switchDisabledBackgroundHovered: color_canvas_secondary_inverted,
switchCheckedBackground: color_brand_tertiary,
switchCheckedBackgroundHovered: dim_brand_tertinary,
+ bullet: hilite_canvas_primary,
},
name: Theme.Light,
},
diff --git a/src/components/layers-panel/layers-panel.tsx b/src/components/layers-panel/layers-panel.tsx
index 7093cf56..a98f069a 100644
--- a/src/components/layers-panel/layers-panel.tsx
+++ b/src/components/layers-panel/layers-panel.tsx
@@ -28,11 +28,10 @@ import {
PanelHorizontalLine,
Panels,
} from "../common";
-import { color_brand_senary } from "../../constants/colors";
import { LayerSettingsPanel } from "./layer-settings-panel";
import { WarningPanel } from "./warning/warning-panel";
import { useClickOutside } from "../../utils/hooks/use-click-outside-hook";
-import { ArcGISWebSceneLoader } from "@loaders.gl/i3s";
+import { ArcGISWebSceneLoader, LayerError } from "@loaders.gl/i3s";
import { ActiveSublayer } from "../../utils/active-sublayer";
import { useAppLayout } from "../../utils/hooks/layout";
import { getTilesetType, convertUrlToRestFormat } from "../../utils/url-utils";
@@ -42,8 +41,8 @@ import { addBaseMap } from "../../redux/slices/base-maps-slice";
const EXISTING_AREA_ERROR = "You are trying to add an existing area to the map";
-const NOT_SUPPORTED_LAYERS_ERROR =
- "There are no supported layers in the scene. Supported layers:";
+const LAYERS_ERROR_UNSUPPORTED = "There are unsupported layers in the scene:";
+const LAYERS_ERROR_SUPPORTED = "Supported layer types:";
const NOT_SUPPORTED_CRS_ERROR =
"There is no supported CRS system. Only WGS84 is supported.";
@@ -116,27 +115,38 @@ const CloseButtonWrapper = styled.div`
display: flex;
`;
-const SupportedLayersList = styled.ul`
- margin-top: 28px;
+const LayersList = styled.ul`
+ margin-top: 16px;
padding-left: 25px;
margin-bottom: 0;
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
`;
-const SupportedLayerItem = styled.li`
+const LayerItem = styled.li`
+ padding-left: 6px;
font-style: normal;
- font-weight: 400;
+ font-weight: 500;
font-size: 16px;
line-height: 19px;
color: ${({ theme }) => theme.colors.fontColor};
- margin-bottom: 13px;
&::marker {
- color: ${color_brand_senary};
+ color: ${({ theme }) => theme.colors.bullet};
}
+`;
- &:last-child {
- margin-bottom: 0px;
- }
+const TitleWrapper = styled.div`
+ margin-top: 28px;
+ margin-left: 32px;
+ display: flex;
+ align-items: center;
+ font-style: normal;
+ font-weight: 700;
+ font-size: 16px;
+ line-height: 19px;
+ color: ${({ theme }) => theme.colors.fontColor};
`;
type LayersPanelProps = {
@@ -195,6 +205,7 @@ export const LayersPanel = ({
useState(false);
const [warningNode, setWarningNode] = useState(null);
const [showAddingSlidesWarning, setShowAddingSlidesWarning] = useState(false);
+ const [unsupportedLayers, setUnsupportedLayers] = useState([]);
useClickOutside([warningNode], () => setShowExistedError(false));
@@ -246,6 +257,18 @@ export const LayersPanel = ({
return layersList;
};
+ const saveLayerTypes = (layers) => {
+ const layerTypes: string[] = [];
+ if (layers) {
+ for (const layer of layers) {
+ if (!layerTypes.find((item) => item === layer.layerType)) {
+ layerTypes.push(layer.layerType);
+ }
+ }
+ }
+ setUnsupportedLayers(layerTypes);
+ };
+
// TODO Add loader to show webscene loading
const handleInsertScene = async (scene: {
name: string;
@@ -269,6 +292,12 @@ export const LayersPanel = ({
scene.url,
ArcGISWebSceneLoader
)) as ArcGISWebSceneData;
+
+ if (webScene.unsupportedLayers?.length) {
+ saveLayerTypes(webScene.unsupportedLayers);
+ setShowNoSupportedLayersInSceneError(true);
+ }
+
const webSceneLayerExamples = prepareLayerExamples(webScene.layers);
const newLayer: LayerExample = {
@@ -298,12 +327,13 @@ export const LayersPanel = ({
setShowAddingSlidesWarning(true);
}
- // TODO Check unsupported layers inside webScene to show warning about some layers are not included to the webscene.
onLayerInsert(newLayer, bookmarks);
} catch (error) {
if (error instanceof Error) {
switch (error.message) {
case "NO_AVAILABLE_SUPPORTED_LAYERS_ERROR": {
+ const layers = (error as LayerError).details;
+ saveLayerTypes(layers);
setShowSceneInsertPanel(false);
setShowNoSupportedLayersInSceneError(true);
break;
@@ -400,14 +430,24 @@ export const LayersPanel = ({
{showNoSupportedLayersInSceneError && (
setWarningNode(element)}>
setShowNoSupportedLayersInSceneError(false)}
>
-
- IntegratedMesh
- 3DObjects
- Building
-
+ <>
+
+ {unsupportedLayers.map((layer) => {
+ return {layer};
+ })}
+
+
+ {LAYERS_ERROR_SUPPORTED}
+
+
+ IntegratedMesh
+ 3DObjects
+ Building
+
+ >
)}
From af6f33ffd517ba999f9a24f31e2b03f203174621 Mon Sep 17 00:00:00 2001
From: Viktor Belomestnov
Date: Tue, 6 Feb 2024 10:26:51 +0100
Subject: [PATCH 23/40] chore: update yarn.lock (#348)
---
yarn.lock | 312 ++++++++++++++++++++++++++++++++++++------------------
1 file changed, 209 insertions(+), 103 deletions(-)
diff --git a/yarn.lock b/yarn.lock
index 8e567479..9365150f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1826,6 +1826,50 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
+"@esri/arcgis-rest-auth@^3.7.0":
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/@esri/arcgis-rest-auth/-/arcgis-rest-auth-3.7.0.tgz#28c0ea1e5c97771e60a41a91e1916e909b5088eb"
+ integrity sha512-/FovDS6hR+3TPfXOpTOMbAu7vNAOLmIjK/lxt0w0nQd+8Nnx3u91BoGMr9pRBGzAJBJm9/i2yGljbFaNXegusQ==
+ dependencies:
+ "@esri/arcgis-rest-types" "^3.7.0"
+ tslib "^1.13.0"
+
+"@esri/arcgis-rest-fetch@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@esri/arcgis-rest-fetch/-/arcgis-rest-fetch-4.0.0.tgz#aa5bf2bedccc168ea52433eb9c56b452b450500d"
+ integrity sha512-ybsMO2L4cxx0IaIx0jv6/VbXidZmQIiGD3bvPF1/n1Y1ljHIhCvX+ti54cQSfg/HW2+VAVVnt8EPD/omVhNAyg==
+ dependencies:
+ node-fetch "^3.0.0"
+
+"@esri/arcgis-rest-form-data@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@esri/arcgis-rest-form-data/-/arcgis-rest-form-data-4.0.0.tgz#bea44236863348b6433440083f4dd9d4c42497f6"
+ integrity sha512-cAS9HONIJgseCDdgRCIHBR4CE/OQXZIRP3FoNx/w+XyjVqK6yQiwCeXpYLfHeEZ6GEQqrA9XUBxifWG9UaJyXA==
+ dependencies:
+ formdata-node "^4.1.0"
+
+"@esri/arcgis-rest-portal@^4.4.0":
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/@esri/arcgis-rest-portal/-/arcgis-rest-portal-4.4.0.tgz#d1b27a2e2fce48ecc5fdc4828e298f42a11e9142"
+ integrity sha512-eNQ+Ddj1rYu8ttDdP/JkOUpwsfClq0KjT39C4L+Z2fQKFOl8xlIqexYRdM9tG7xNnXj4JLu3sr/JcVlMk6hFbQ==
+ dependencies:
+ tslib "^2.3.0"
+
+"@esri/arcgis-rest-request@^4.2.0":
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@esri/arcgis-rest-request/-/arcgis-rest-request-4.2.0.tgz#8080e271851302e555ae7b549139a2d3d49a3ee7"
+ integrity sha512-2XLy0Ivar3BIr4ehe/5hYottIqiHnC8LDqhMPglufoLcsX9LFOr81X74aPXX0Ad3xVMaSy2HLLVNoNOkhwFGqQ==
+ dependencies:
+ "@esri/arcgis-rest-fetch" "^4.0.0"
+ "@esri/arcgis-rest-form-data" "^4.0.0"
+ mitt "^3.0.0"
+ tslib "^2.3.1"
+
+"@esri/arcgis-rest-types@^3.7.0":
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/@esri/arcgis-rest-types/-/arcgis-rest-types-3.7.0.tgz#3fa61b95b63e4129b73a499411b368aa7940490b"
+ integrity sha512-KEgORx0HKHOrV4oMYOwmZ76N89WTNkbKb1z3UYJrOEaKVGRU3jisgQcuTXFqjJJe4ZApGQhxCzNgcaU067qdpA==
+
"@fortawesome/fontawesome-common-types@^0.2.36":
version "0.2.36"
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz#b44e52db3b6b20523e0c57ef8c42d315532cb903"
@@ -2172,30 +2216,30 @@
"@math.gl/core" "^3.5.1"
"@math.gl/geospatial" "^3.5.1"
-"@loaders.gl/3d-tiles@^4.0.0-beta.8":
- version "4.0.0-beta.8"
- resolved "https://registry.yarnpkg.com/@loaders.gl/3d-tiles/-/3d-tiles-4.0.0-beta.8.tgz#51be3cff322cd87d2a3eacd072d3e8faec63e2eb"
- integrity sha512-JEIfqFK/AHEq451X1zgx554wBoEkxBtqYrbnlXY0bcjmw1n906u6phcNFsjNgxiFbyakDwB/s1kxYD5a9Ps3Kw==
- dependencies:
- "@loaders.gl/draco" "4.0.0-beta.8"
- "@loaders.gl/gltf" "4.0.0-beta.8"
- "@loaders.gl/loader-utils" "4.0.0-beta.8"
- "@loaders.gl/math" "4.0.0-beta.8"
- "@loaders.gl/tiles" "4.0.0-beta.8"
- "@loaders.gl/zip" "4.0.0-beta.8"
+"@loaders.gl/3d-tiles@^4.1.0-alpha.11":
+ version "4.1.0-alpha.11"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/3d-tiles/-/3d-tiles-4.1.0-alpha.11.tgz#edf0632cb1b8989b41fcf9e8572088d1330866fb"
+ integrity sha512-8cp+Lh2assMEdh3eIBDwFfr9aNiKpKfemlbeqU5Am29MbKhszOH2+yVy6shMK0/OmQgQ6GvznbMvVU3zriA27g==
+ dependencies:
+ "@loaders.gl/draco" "4.1.0-alpha.11"
+ "@loaders.gl/gltf" "4.1.0-alpha.11"
+ "@loaders.gl/loader-utils" "4.1.0-alpha.11"
+ "@loaders.gl/math" "4.1.0-alpha.11"
+ "@loaders.gl/tiles" "4.1.0-alpha.11"
+ "@loaders.gl/zip" "4.1.0-alpha.11"
"@math.gl/core" "^4.0.0"
"@math.gl/geospatial" "^4.0.0"
"@probe.gl/log" "^4.0.4"
long "^5.2.1"
-"@loaders.gl/compression@4.0.0-beta.8":
- version "4.0.0-beta.8"
- resolved "https://registry.yarnpkg.com/@loaders.gl/compression/-/compression-4.0.0-beta.8.tgz#03258e0e2fe21c0f8012934d44ca7bb10321fa04"
- integrity sha512-ieaSv7/d+tAS753DkpitJ/CaffYcAPIz2DPOs04f6n5taaw5H6hK9GP2L6vT6GVnkGvGXgmdYDjTbIg54UuuGg==
+"@loaders.gl/compression@4.1.0-alpha.11":
+ version "4.1.0-alpha.11"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/compression/-/compression-4.1.0-alpha.11.tgz#72b504b17aa3bc1569519c5c3cf889c12503ceb3"
+ integrity sha512-IZmUVXFfluGg6NXvIlkuduHLnUD8WvbZZGzsNmRAjlFqTHWlhcLTy9l9CrqlMLWULA3oryWyFSy+2z7IVI3Y0Q==
dependencies:
"@babel/runtime" "^7.3.1"
- "@loaders.gl/loader-utils" "4.0.0-beta.8"
- "@loaders.gl/worker-utils" "4.0.0-beta.8"
+ "@loaders.gl/loader-utils" "4.1.0-alpha.11"
+ "@loaders.gl/worker-utils" "4.1.0-alpha.11"
"@types/brotli" "^1.3.0"
"@types/pako" "^1.0.1"
fflate "0.7.4"
@@ -2218,24 +2262,24 @@
"@probe.gl/log" "^3.5.0"
probe.gl "^3.4.0"
-"@loaders.gl/core@^4.0.0-beta.8":
- version "4.0.0-beta.8"
- resolved "https://registry.yarnpkg.com/@loaders.gl/core/-/core-4.0.0-beta.8.tgz#a595927010b993d8eaec86264e68a1c35c2a8c7f"
- integrity sha512-s+iKjcvhHq/jsQJi6qDDZtTzANTergV5KY4XsN4W1j5xy+ZbqF1drMIEPzfTAhaL/elifALpm1lX7is9l0rVoA==
+"@loaders.gl/core@^4.1.0-alpha.11":
+ version "4.1.0-alpha.11"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/core/-/core-4.1.0-alpha.11.tgz#6c20ff8cb1092ef8edaade26fca2450dfac33c99"
+ integrity sha512-H2CocuchkAz2eQs8jqUiYlTv6P11o+gveIjZjpgVh/NpwXBORL+cwO1+B3WJ5+WKQdePHgFzL1GPbvM4J04Q6A==
dependencies:
"@babel/runtime" "^7.3.1"
- "@loaders.gl/loader-utils" "4.0.0-beta.8"
- "@loaders.gl/worker-utils" "4.0.0-beta.8"
+ "@loaders.gl/loader-utils" "4.1.0-alpha.11"
+ "@loaders.gl/worker-utils" "4.1.0-alpha.11"
"@probe.gl/log" "^4.0.2"
-"@loaders.gl/crypto@4.0.0-beta.8":
- version "4.0.0-beta.8"
- resolved "https://registry.yarnpkg.com/@loaders.gl/crypto/-/crypto-4.0.0-beta.8.tgz#be66af5f832b50ab81cd88c2840ce2316260f6b2"
- integrity sha512-2ZnRx8GOsIVLwroP3aC0F7qL2ii0Is1A7o0GaugYJDlBNQlcXDQOCL88JuYTou9o0qzjVVQVkNzbq5jpnI7bpw==
+"@loaders.gl/crypto@4.1.0-alpha.11":
+ version "4.1.0-alpha.11"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/crypto/-/crypto-4.1.0-alpha.11.tgz#4a5bf79a09b7dfa97ad5a4ae9784c3df1da153da"
+ integrity sha512-FpUbaeCKei6AfkLZO2nmyQLO6nQO3udk9iZ/icxyNffp2X8sBDEVDu+0Xcm88sfiQ5Ainj41FTotFLxCBZRZ4w==
dependencies:
"@babel/runtime" "^7.3.1"
- "@loaders.gl/loader-utils" "4.0.0-beta.8"
- "@loaders.gl/worker-utils" "4.0.0-beta.8"
+ "@loaders.gl/loader-utils" "4.1.0-alpha.11"
+ "@loaders.gl/worker-utils" "4.1.0-alpha.11"
"@types/crypto-js" "^4.0.2"
"@loaders.gl/draco@3.2.12":
@@ -2249,15 +2293,15 @@
"@loaders.gl/worker-utils" "3.2.12"
draco3d "1.4.1"
-"@loaders.gl/draco@4.0.0-beta.8":
- version "4.0.0-beta.8"
- resolved "https://registry.yarnpkg.com/@loaders.gl/draco/-/draco-4.0.0-beta.8.tgz#a632f87d640251fa919a1a8c0e40ee341efbeb77"
- integrity sha512-XLzK9cETOtKPAsjkJvSTTPt3Ej22kCtEy42AN+96TlhhsMSXK1KRPIRaDl9JD6uOV+4g2oXrcINaiURmxmlG8g==
+"@loaders.gl/draco@4.1.0-alpha.11":
+ version "4.1.0-alpha.11"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/draco/-/draco-4.1.0-alpha.11.tgz#7785934565a9757ccfb81a7ec6f74e80a1340b9d"
+ integrity sha512-eoAm8NB0nv9pFus7CJ3miUEJkhwI//PKbU+wAduKjKeNJUSSNxDYY8AJPVKHOw1X2NVlfLhQ8hlfbrj0zZljog==
dependencies:
"@babel/runtime" "^7.3.1"
- "@loaders.gl/loader-utils" "4.0.0-beta.8"
- "@loaders.gl/schema" "4.0.0-beta.8"
- "@loaders.gl/worker-utils" "4.0.0-beta.8"
+ "@loaders.gl/loader-utils" "4.1.0-alpha.11"
+ "@loaders.gl/schema" "4.1.0-alpha.11"
+ "@loaders.gl/worker-utils" "4.1.0-alpha.11"
draco3d "1.5.5"
"@loaders.gl/gis@3.2.12", "@loaders.gl/gis@^3.2.0":
@@ -2281,30 +2325,30 @@
"@loaders.gl/loader-utils" "3.2.12"
"@loaders.gl/textures" "3.2.12"
-"@loaders.gl/gltf@4.0.0-beta.8":
- version "4.0.0-beta.8"
- resolved "https://registry.yarnpkg.com/@loaders.gl/gltf/-/gltf-4.0.0-beta.8.tgz#9fe2dd76ce28d183f1b0b80b15b12a92c868211c"
- integrity sha512-iMRNVcxBQYxGqGDORYXd1i/dpC//8NHpvAS7ayHaA069TBdYQJ8fQHtOTkgNgWx84TdRboCodidH13NLoZNT+Q==
+"@loaders.gl/gltf@4.1.0-alpha.11":
+ version "4.1.0-alpha.11"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/gltf/-/gltf-4.1.0-alpha.11.tgz#820bae8be5c17da2be908bca334b8e4d4fb4c4e6"
+ integrity sha512-f9Z4xKm63fbQNj7Vi1S6vHE2roO+s3u31ifgWhndMgxFt3SYw+mCno2XdfsQuD7TDR1zxIET7sYTbw1shevbxw==
dependencies:
- "@loaders.gl/draco" "4.0.0-beta.8"
- "@loaders.gl/images" "4.0.0-beta.8"
- "@loaders.gl/loader-utils" "4.0.0-beta.8"
- "@loaders.gl/textures" "4.0.0-beta.8"
+ "@loaders.gl/draco" "4.1.0-alpha.11"
+ "@loaders.gl/images" "4.1.0-alpha.11"
+ "@loaders.gl/loader-utils" "4.1.0-alpha.11"
+ "@loaders.gl/textures" "4.1.0-alpha.11"
"@math.gl/core" "^4.0.0"
-"@loaders.gl/i3s@^4.0.0-beta.8":
- version "4.0.0-beta.8"
- resolved "https://registry.yarnpkg.com/@loaders.gl/i3s/-/i3s-4.0.0-beta.8.tgz#dd130235bac98b7d80e1e9a93e0925903c12e69c"
- integrity sha512-0WqxYj5bcKa2JRcZrvVPtgRRH+vxXF0+UV/ViPJjKANVKCkm1pmRhFzhcVoOvkTeBytFRDvZYkIBvV3uIZG9XA==
- dependencies:
- "@loaders.gl/compression" "4.0.0-beta.8"
- "@loaders.gl/crypto" "4.0.0-beta.8"
- "@loaders.gl/draco" "4.0.0-beta.8"
- "@loaders.gl/images" "4.0.0-beta.8"
- "@loaders.gl/loader-utils" "4.0.0-beta.8"
- "@loaders.gl/schema" "4.0.0-beta.8"
- "@loaders.gl/textures" "4.0.0-beta.8"
- "@loaders.gl/tiles" "4.0.0-beta.8"
+"@loaders.gl/i3s@^4.1.0-alpha.11":
+ version "4.1.0-alpha.11"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/i3s/-/i3s-4.1.0-alpha.11.tgz#d0c98b8d63f6583e4d8a246fa5ae32cbb7aef823"
+ integrity sha512-ydgUfH7MinvNORYYpHTvDK8M+GIKXFP8XU64Xmroetw9ELN8PsmLBPiQB32RXPYay1PfpP8CltKbiTBp5XUxXw==
+ dependencies:
+ "@loaders.gl/compression" "4.1.0-alpha.11"
+ "@loaders.gl/crypto" "4.1.0-alpha.11"
+ "@loaders.gl/draco" "4.1.0-alpha.11"
+ "@loaders.gl/images" "4.1.0-alpha.11"
+ "@loaders.gl/loader-utils" "4.1.0-alpha.11"
+ "@loaders.gl/schema" "4.1.0-alpha.11"
+ "@loaders.gl/textures" "4.1.0-alpha.11"
+ "@loaders.gl/tiles" "4.1.0-alpha.11"
"@math.gl/core" "^4.0.0"
"@math.gl/culling" "^4.0.0"
"@math.gl/geospatial" "^4.0.0"
@@ -2316,12 +2360,12 @@
dependencies:
"@loaders.gl/loader-utils" "3.2.12"
-"@loaders.gl/images@4.0.0-beta.8":
- version "4.0.0-beta.8"
- resolved "https://registry.yarnpkg.com/@loaders.gl/images/-/images-4.0.0-beta.8.tgz#d7353978b7af08b630d12afb5769ef452e212220"
- integrity sha512-6cxAov9sNfrVDvlQ2c1plm5Z8ME5vR320CWCbdVEE1tHP9Zgt/t8/fJ03xXM7ykqQEPQCs8isfrYCBZKQ9/+mA==
+"@loaders.gl/images@4.1.0-alpha.11":
+ version "4.1.0-alpha.11"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/images/-/images-4.1.0-alpha.11.tgz#79c2bcddd05291ebcb943bb9d47aedaeecc34e91"
+ integrity sha512-CLXONwuoFXpeWeXbaRbVgZKkZBErrZ1QWX7KHCWnc/Xa4AeXFjMkwhVWh2vh1KYdsVkrz9KBsfn4YHYmg1SWXA==
dependencies:
- "@loaders.gl/loader-utils" "4.0.0-beta.8"
+ "@loaders.gl/loader-utils" "4.1.0-alpha.11"
"@loaders.gl/loader-utils@3.2.12", "@loaders.gl/loader-utils@^3.2.0":
version "3.2.12"
@@ -2332,13 +2376,13 @@
"@loaders.gl/worker-utils" "3.2.12"
"@probe.gl/stats" "^3.5.0"
-"@loaders.gl/loader-utils@4.0.0-beta.8":
- version "4.0.0-beta.8"
- resolved "https://registry.yarnpkg.com/@loaders.gl/loader-utils/-/loader-utils-4.0.0-beta.8.tgz#137f1924377242524b462f6f4a00f478591001c7"
- integrity sha512-pDU3GVSC/X5F8VExz22PhPBTx58SkMkVUcYIw5UGsv+vIi08MQogRNIMxEzMhb5d6BVt+gHdojjtN45iMRqPmw==
+"@loaders.gl/loader-utils@4.1.0-alpha.11":
+ version "4.1.0-alpha.11"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/loader-utils/-/loader-utils-4.1.0-alpha.11.tgz#fa2475816334a87bfea5e80d9fbfdc4858e92fce"
+ integrity sha512-1sDFottMYHKrHqJWPl+hxPFpDn0yG0ykUM6j2tv7oBJNPRuvP3Zbk7EJsJIMCqDpqbt5zabko554ttH2iDo8Sw==
dependencies:
"@babel/runtime" "^7.3.1"
- "@loaders.gl/worker-utils" "4.0.0-beta.8"
+ "@loaders.gl/worker-utils" "4.1.0-alpha.11"
"@probe.gl/stats" "^4.0.2"
"@loaders.gl/math@3.2.12":
@@ -2350,13 +2394,13 @@
"@loaders.gl/loader-utils" "3.2.12"
"@math.gl/core" "^3.5.1"
-"@loaders.gl/math@4.0.0-beta.8":
- version "4.0.0-beta.8"
- resolved "https://registry.yarnpkg.com/@loaders.gl/math/-/math-4.0.0-beta.8.tgz#a17ff2b597121e5e80ea08637b8dc90e9bb7ad50"
- integrity sha512-T5PB+9jF9SeQyC42oE/jmyoZfnOvyHyCGIHNdcW4Siea+NCZwF0TOtsQIrkrpXZzP8CsUPaIsNUv31UQzzP7IQ==
+"@loaders.gl/math@4.1.0-alpha.11":
+ version "4.1.0-alpha.11"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/math/-/math-4.1.0-alpha.11.tgz#7ef41e661936d1a362d6de5ce8cd3de5859a44ce"
+ integrity sha512-VtR9CPdk5nQmqSMEQENXX4LXIZQA9UgO/yHW06xt9qw+4kWu6yafvU3K1Es6OrK5JWrRpelPIalBP9wvEY+bmw==
dependencies:
- "@loaders.gl/images" "4.0.0-beta.8"
- "@loaders.gl/loader-utils" "4.0.0-beta.8"
+ "@loaders.gl/images" "4.1.0-alpha.11"
+ "@loaders.gl/loader-utils" "4.1.0-alpha.11"
"@math.gl/core" "^4.0.0"
"@loaders.gl/mvt@^3.2.0":
@@ -2378,10 +2422,10 @@
"@types/geojson" "^7946.0.7"
apache-arrow "^4.0.0"
-"@loaders.gl/schema@4.0.0-beta.8":
- version "4.0.0-beta.8"
- resolved "https://registry.yarnpkg.com/@loaders.gl/schema/-/schema-4.0.0-beta.8.tgz#2e3a0588874a61aa782f931f5ff3eaf59daca389"
- integrity sha512-BiiF3p4ZWVneUjcYVZ4gO0PQP8n/NuEDTDXiAgptHhzCfnWVkGoV7ec7Ftc+Nsh4b/QHiKqtnRQn/LTWJ1Smog==
+"@loaders.gl/schema@4.1.0-alpha.11":
+ version "4.1.0-alpha.11"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/schema/-/schema-4.1.0-alpha.11.tgz#cf2705ae11e57c99c5784d5b8161decfe17d774e"
+ integrity sha512-6mRbpmnlBDR9H8fwJU3gsk9XOwOeD290vqoIgioZrrFmSw9vKovtFOpAUf+ISAwWhW0z+yeECjhVbCux8O3nfw==
dependencies:
"@types/geojson" "^7946.0.7"
@@ -2407,25 +2451,25 @@
ktx-parse "^0.0.4"
texture-compressor "^1.0.2"
-"@loaders.gl/textures@4.0.0-beta.8":
- version "4.0.0-beta.8"
- resolved "https://registry.yarnpkg.com/@loaders.gl/textures/-/textures-4.0.0-beta.8.tgz#778c85495336d3ba5df226842d0b8b739126a318"
- integrity sha512-4iBxt6vV2nkp8ng2JaVKyCaOM+ibyRhJT/UrIsV3kQRElKy5d+ndkAUhaz1lp503Vw40zNdgGG5pOjYEq+S7jA==
+"@loaders.gl/textures@4.1.0-alpha.11":
+ version "4.1.0-alpha.11"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/textures/-/textures-4.1.0-alpha.11.tgz#7984f798b684e6392bd9a6ac1b43d232c24e87f9"
+ integrity sha512-bds00ZQGIS84c5Z4o9wuoP8bpRhLrSi4h0kU2GqmdHt7KLnQcl9JvylqZV90uaQmTssofC8bX8LLQFavigaaYQ==
dependencies:
- "@loaders.gl/images" "4.0.0-beta.8"
- "@loaders.gl/loader-utils" "4.0.0-beta.8"
- "@loaders.gl/schema" "4.0.0-beta.8"
- "@loaders.gl/worker-utils" "4.0.0-beta.8"
+ "@loaders.gl/images" "4.1.0-alpha.11"
+ "@loaders.gl/loader-utils" "4.1.0-alpha.11"
+ "@loaders.gl/schema" "4.1.0-alpha.11"
+ "@loaders.gl/worker-utils" "4.1.0-alpha.11"
ktx-parse "^0.0.4"
texture-compressor "^1.0.2"
-"@loaders.gl/tiles@3.2.12", "@loaders.gl/tiles@4.0.0-beta.8", "@loaders.gl/tiles@^3.2.0", "@loaders.gl/tiles@^4.0.0-beta.8":
- version "4.0.0-beta.8"
- resolved "https://registry.yarnpkg.com/@loaders.gl/tiles/-/tiles-4.0.0-beta.8.tgz#e7e5437016fef3236083f0a7c284d2720d2624b4"
- integrity sha512-pisZklKEQ3uE/W8apACkqbckVT9JzjbOcCbIs+5wdwPf10O+7msnP7s4QHBYVhkN+LB5m/RGWKIytUn7KV/jsA==
+"@loaders.gl/tiles@3.2.12", "@loaders.gl/tiles@4.1.0-alpha.11", "@loaders.gl/tiles@^3.2.0", "@loaders.gl/tiles@^4.1.0-alpha.11":
+ version "4.1.0-alpha.11"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/tiles/-/tiles-4.1.0-alpha.11.tgz#cce23207c327fa02d224cadc829b36c40db56de1"
+ integrity sha512-rCS4mnsY0CrNhtCij15zxau/P67BFo/B9xy46ZDRlJ1XPC4HDR5LBP33IAAhD/ClqEYP15eeQRxHyQ6HjsD4DQ==
dependencies:
- "@loaders.gl/loader-utils" "4.0.0-beta.8"
- "@loaders.gl/math" "4.0.0-beta.8"
+ "@loaders.gl/loader-utils" "4.1.0-alpha.11"
+ "@loaders.gl/math" "4.1.0-alpha.11"
"@math.gl/core" "^4.0.0"
"@math.gl/culling" "^4.0.0"
"@math.gl/geospatial" "^4.0.0"
@@ -2439,21 +2483,21 @@
dependencies:
"@babel/runtime" "^7.3.1"
-"@loaders.gl/worker-utils@4.0.0-beta.8":
- version "4.0.0-beta.8"
- resolved "https://registry.yarnpkg.com/@loaders.gl/worker-utils/-/worker-utils-4.0.0-beta.8.tgz#8d5a33b1b8da8215f30bfba8a7f83b5323787caf"
- integrity sha512-0sIIUXVPcOXdv+4Rz99FR7iUnKjQpT50c0tvHiapr4b2USqxjJmGAepF3azhXGdiS4RadglCBZLm2xxxZiv0EA==
+"@loaders.gl/worker-utils@4.1.0-alpha.11":
+ version "4.1.0-alpha.11"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/worker-utils/-/worker-utils-4.1.0-alpha.11.tgz#48916d93afaf0b0d7a521b4dacb73d9b887ed420"
+ integrity sha512-GbW+d6L2Shfv4z7Pn9pR61U9y3CVu570JQjiEdzbFS+sQOLZBH+LC5eX+i1MBwtiUDvqjSp0Pm0Ch9bToyYosw==
dependencies:
"@babel/runtime" "^7.3.1"
-"@loaders.gl/zip@4.0.0-beta.8":
- version "4.0.0-beta.8"
- resolved "https://registry.yarnpkg.com/@loaders.gl/zip/-/zip-4.0.0-beta.8.tgz#c5238bd6bec38c9d29d02d5eb81474e7ed2f7ab9"
- integrity sha512-aiB3Z7LNTJ9im2W55SvyH2++5qH6VRE1PxdNDwmbj82aEy5o7LSHMQAD2oeqYWePMUWVU5FXh6HKkp3/Tn+K2w==
+"@loaders.gl/zip@4.1.0-alpha.11":
+ version "4.1.0-alpha.11"
+ resolved "https://registry.yarnpkg.com/@loaders.gl/zip/-/zip-4.1.0-alpha.11.tgz#cd17ec3c7e1e804eeb075b2af9446707ef740dfc"
+ integrity sha512-OB9nYgm46hZK9zg1dNx/C0tiiW3+axEIPFUFsS/fjLZ1qy88+9Cv3Z7gVWs22+76rmCJLiFvOy7xc462BuhM7Q==
dependencies:
- "@loaders.gl/compression" "4.0.0-beta.8"
- "@loaders.gl/crypto" "4.0.0-beta.8"
- "@loaders.gl/loader-utils" "4.0.0-beta.8"
+ "@loaders.gl/compression" "4.1.0-alpha.11"
+ "@loaders.gl/crypto" "4.1.0-alpha.11"
+ "@loaders.gl/loader-utils" "4.1.0-alpha.11"
jszip "^3.1.5"
md5 "^2.3.0"
@@ -4903,6 +4947,11 @@ d3-shape@^3.1.0:
dependencies:
d3-array "2 - 3"
+data-uri-to-buffer@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e"
+ integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==
+
data-urls@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
@@ -5614,6 +5663,14 @@ fd-slicer@~1.1.0:
dependencies:
pend "~1.2.0"
+fetch-blob@^3.1.2, fetch-blob@^3.1.4:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9"
+ integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==
+ dependencies:
+ node-domexception "^1.0.0"
+ web-streams-polyfill "^3.0.3"
+
fflate@0.7.4:
version "0.7.4"
resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.7.4.tgz#61587e5d958fdabb5a9368a302c25363f4f69f50"
@@ -5756,6 +5813,21 @@ form-data@^3.0.0:
combined-stream "^1.0.8"
mime-types "^2.1.12"
+formdata-node@^4.1.0:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2"
+ integrity sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==
+ dependencies:
+ node-domexception "1.0.0"
+ web-streams-polyfill "4.0.0-beta.3"
+
+formdata-polyfill@^4.0.10:
+ version "4.0.10"
+ resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423"
+ integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==
+ dependencies:
+ fetch-blob "^3.1.2"
+
forwarded@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
@@ -7440,6 +7512,11 @@ minimist@^1.2.0, minimist@^1.2.5:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+mitt@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1"
+ integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==
+
mixin-object@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e"
@@ -7559,6 +7636,11 @@ no-case@^3.0.4:
lower-case "^2.0.2"
tslib "^2.0.3"
+node-domexception@1.0.0, node-domexception@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
+ integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==
+
node-fetch@2.6.7, node-fetch@^2.6.5:
version "2.6.7"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
@@ -7566,6 +7648,15 @@ node-fetch@2.6.7, node-fetch@^2.6.5:
dependencies:
whatwg-url "^5.0.0"
+node-fetch@^3.0.0:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b"
+ integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==
+ dependencies:
+ data-uri-to-buffer "^4.0.0"
+ fetch-blob "^3.1.4"
+ formdata-polyfill "^4.0.10"
+
node-forge@^1.2.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.2.1.tgz#82794919071ef2eb5c509293325cec8afd0fd53c"
@@ -9335,7 +9426,7 @@ ts-loader@^9.2.6:
micromatch "^4.0.0"
semver "^7.3.4"
-tslib@^1.8.1:
+tslib@^1.13.0, tslib@^1.8.1:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
@@ -9345,6 +9436,11 @@ tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
+tslib@^2.3.0, tslib@^2.3.1:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
+ integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
+
tsutils@^3.21.0:
version "3.21.0"
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
@@ -9586,6 +9682,16 @@ wbuf@^1.1.0, wbuf@^1.7.3:
dependencies:
minimalistic-assert "^1.0.0"
+web-streams-polyfill@4.0.0-beta.3:
+ version "4.0.0-beta.3"
+ resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38"
+ integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==
+
+web-streams-polyfill@^3.0.3:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz#32e26522e05128203a7de59519be3c648004343b"
+ integrity sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==
+
webidl-conversions@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
From 3ff95ee39f2b667c66f0f288363fea9c75fb9af8 Mon Sep 17 00:00:00 2001
From: mspivak-actionengine
<118991512+mspivak-actionengine@users.noreply.github.com>
Date: Mon, 19 Feb 2024 14:19:46 +0300
Subject: [PATCH 24/40] fix(debug-texture): crop uv texture (#351)
---
.../deck-gl-wrapper/deck-gl-wrapper.spec.tsx | 16 +-
.../deck-gl-wrapper/deck-gl-wrapper.tsx | 8 +-
.../debug/texture-selector-utils.spec.ts | 156 +++++++++++++-----
src/utils/debug/texture-selector-utils.ts | 90 ++++++++--
4 files changed, 209 insertions(+), 61 deletions(-)
diff --git a/src/components/deck-gl-wrapper/deck-gl-wrapper.spec.tsx b/src/components/deck-gl-wrapper/deck-gl-wrapper.spec.tsx
index 479e0216..a7c095b4 100644
--- a/src/components/deck-gl-wrapper/deck-gl-wrapper.spec.tsx
+++ b/src/components/deck-gl-wrapper/deck-gl-wrapper.spec.tsx
@@ -396,14 +396,14 @@ describe("Deck.gl I3S map component", () => {
});
});
- it("Should call Tile3DLayer tileset callbacks", () => {
+ it("Should call Tile3DLayer tileset callbacks", async () => {
const { rerender } = callRender(renderWithProvider);
expect(CustomTile3DLayer).toHaveBeenCalled();
const { onTileLoad, onTilesetLoad, onTileUnload } = (
CustomTile3DLayer as any
).mock.lastCall[0];
const tile3d = getTile3d();
- act(() => onTileLoad(tile3d));
+ await act(() => onTileLoad(tile3d));
expect(simpleCallbackMock).toHaveBeenCalledTimes(1);
// TODO: couldn't mock MapView.ViewportType. expect toThrow instead
@@ -418,7 +418,7 @@ describe("Deck.gl I3S map component", () => {
callRender(rerender, { onTileLoad: undefined });
const { onTileLoad: onTileLoad2 } = (CustomTile3DLayer as any).mock
.lastCall[0];
- act(() => onTileLoad2(tile3d));
+ await act(() => onTileLoad2(tile3d));
expect(simpleCallbackMock).toHaveBeenCalledTimes(2);
callRender(rerender, { onTileUnload: undefined });
@@ -448,24 +448,24 @@ describe("Deck.gl I3S map component", () => {
});
});
- it("Should remove featureIds", () => {
+ it("Should remove featureIds", async () => {
callRender(renderWithProvider, { featurePicking: false });
expect(CustomTile3DLayer).toHaveBeenCalled();
const { onTileLoad } = (CustomTile3DLayer as any).mock.lastCall[0];
const tile3d = getTile3d();
tile3d.content.featureIds = new Uint32Array([10, 20, 30]);
- act(() => onTileLoad(tile3d));
+ await act(() => onTileLoad(tile3d));
expect(tile3d.content.featureIds).toBeFalsy();
});
- it("Should update debug texture on a tile", () => {
+ it("Should update debug texture on a tile", async () => {
const store = setupStore();
store.dispatch(setDebugOptions({ showUVDebugTexture: false }));
const { rerender } = callRender(renderWithProvider, undefined, store);
expect(CustomTile3DLayer).toHaveBeenCalled();
const { onTileLoad } = (CustomTile3DLayer as any).mock.lastCall[0];
const tile3d = getTile3d();
- act(() => onTileLoad(tile3d));
+ await act(() => onTileLoad(tile3d));
expect(selectOriginalTextureForTile).toHaveBeenCalledWith(tile3d);
expect(selectDebugTextureForTile).not.toHaveBeenCalled();
@@ -473,7 +473,7 @@ describe("Deck.gl I3S map component", () => {
callRender(rerender, undefined, store);
const { onTileLoad: onTileLoadSecond } = (CustomTile3DLayer as any).mock
.lastCall[0];
- act(() => onTileLoadSecond(tile3d));
+ await act(() => onTileLoadSecond(tile3d));
expect(selectDebugTextureForTile).toHaveBeenCalledWith(tile3d, null);
expect(selectOriginalTextureForTile).toHaveBeenCalledTimes(1);
});
diff --git a/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx b/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx
index a6901a2b..5b4932e1 100644
--- a/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx
+++ b/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx
@@ -326,9 +326,9 @@ export const DeckGlWrapper = ({
}, [loadTiles]);
useEffect(() => {
- loadedTilesets.forEach((tileset) => {
+ loadedTilesets.forEach(async (tileset) => {
if (showDebugTexture) {
- selectDebugTextureForTileset(tileset, uvDebugTexture);
+ await selectDebugTextureForTileset(tileset, uvDebugTexture);
} else {
selectOriginalTextureForTileset();
}
@@ -489,13 +489,13 @@ export const DeckGlWrapper = ({
onTilesetLoad(tileset);
};
- const onTileLoadHandler = (tile) => {
+ const onTileLoadHandler = async (tile) => {
if (!featurePicking) {
// delete featureIds from data to have instance picking instead of feature picking
delete tile.content.featureIds;
}
if (showDebugTextureRef.current) {
- selectDebugTextureForTile(tile, uvDebugTextureRef.current);
+ await selectDebugTextureForTile(tile, uvDebugTextureRef.current);
} else {
selectOriginalTextureForTile(tile);
}
diff --git a/src/utils/debug/texture-selector-utils.spec.ts b/src/utils/debug/texture-selector-utils.spec.ts
index 9debdafd..355cc37f 100644
--- a/src/utils/debug/texture-selector-utils.spec.ts
+++ b/src/utils/debug/texture-selector-utils.spec.ts
@@ -4,19 +4,93 @@ import {
selectDebugTextureForTile,
selectOriginalTextureForTile,
} from "./texture-selector-utils";
+import type { Tile3D, Tileset3D } from "@loaders.gl/tiles";
+
+const mockDrawImage = jest.fn();
+
+Object.defineProperty(window, "createImageBitmap", {
+ writable: true,
+ value: jest.fn().mockImplementation(() => ({})),
+});
+
+Object.defineProperty(window, "ImageBitmap", {
+ writable: true,
+ value: jest
+ .fn()
+ .mockImplementation((name, width, height) => ({
+ name: name,
+ width: width,
+ height: height,
+ })),
+});
+
+class MyImageBitmap extends ImageBitmap {
+ name: string;
+ width: number;
+ height: number;
+ constructor(name: string, width: number, height: number) {
+ super();
+ this.name = name;
+ this.width = width;
+ this.height = height;
+ }
+}
+
+const contentTexture: ImageBitmap = new MyImageBitmap("c", 0, 0);
+const uvDebugTexture: ImageBitmap = new MyImageBitmap("uv", 0, 0);
+
+describe("Crop texture", () => {
+ beforeAll(() => {
+ HTMLCanvasElement.prototype.getContext = jest.fn().mockReturnValue({
+ drawImage: mockDrawImage,
+ });
+ });
+
+ test("Should crop texture", async () => {
+ const contentTexture: ImageBitmap = new MyImageBitmap("c", 1, 1);
+ const uvDebugTexture: ImageBitmap = new MyImageBitmap("uv", 2, 2);
+
+ const tile = {
+ userData: {
+ originalTexture: null,
+ },
+ content: {
+ material: {
+ pbrMetallicRoughness: {
+ baseColorTexture: {
+ texture: {
+ source: {
+ image: contentTexture,
+ },
+ },
+ },
+ },
+ texture: uvDebugTexture,
+ },
+ },
+ };
+ await selectDebugTextureForTile(tile as unknown as Tile3D, uvDebugTexture);
+ expect(mockDrawImage).toBeCalledTimes(1);
+ });
+});
describe("Texture Selector Utils - selectDebugTextureForTileset", () => {
- test("Should return undefined if no uvDebugTexture", () => {
+ test("Should return undefined if no uvDebugTexture", async () => {
const tileset = {};
const uvDebugTexture = null;
- const result = selectDebugTextureForTileset(tileset, uvDebugTexture);
+ const result = await selectDebugTextureForTileset(
+ tileset as unknown as Tileset3D,
+ uvDebugTexture
+ );
expect(result).toBeUndefined();
});
- test("Should return undefined if no uvDebugTexture", () => {
+ test("Should return undefined if no uvDebugTexture", async () => {
const tileset = { tiles: [{ userData: {} }] };
- const uvDebugTexture = "Test texture";
- selectDebugTextureForTileset(tileset, uvDebugTexture);
+ await selectDebugTextureForTileset(
+ tileset as unknown as Tileset3D,
+ uvDebugTexture
+ );
});
});
@@ -27,21 +101,26 @@ describe("Texture Selector Utils - selectOriginalTextureForTileset", () => {
});
describe("Texture Selector Utils - selectDebugTextureForTile", () => {
- test("Should return undefined if no uvDebugTexture", () => {
+ test("Should return undefined if no uvDebugTexture", async () => {
const tile = { userData: {} };
const uvDebugTexture = null;
- const result = selectDebugTextureForTile(tile, uvDebugTexture);
+ const result = await selectDebugTextureForTile(
+ tile as unknown as Tile3D,
+ uvDebugTexture
+ );
expect(result).toBeUndefined();
});
- test("Should return undefined if originalTexture exists", () => {
+ test("Should return undefined if originalTexture exists", async () => {
const tile = { userData: { originalTexture: "Test texture" } };
- const uvDebugTexture = "Test texture";
- const result = selectDebugTextureForTile(tile, uvDebugTexture);
+ const result = await selectDebugTextureForTile(
+ tile as unknown as Tile3D,
+ uvDebugTexture
+ );
expect(result).toBeUndefined();
});
- test("Should return undefined if material exists but baseColorTexture is not", () => {
+ test("Should return undefined if material exists but baseColorTexture is not", async () => {
const tile = {
userData: {},
content: {
@@ -52,12 +131,14 @@ describe("Texture Selector Utils - selectDebugTextureForTile", () => {
},
},
};
- const uvDebugTexture = "Test texture";
- const result = selectDebugTextureForTile(tile, uvDebugTexture);
+ const result = await selectDebugTextureForTile(
+ tile as unknown as Tile3D,
+ uvDebugTexture
+ );
expect(result).toBeUndefined();
});
- test("Should add original texture to userData and apply debug texture", () => {
+ test("Should add original texture to userData and apply debug texture", async () => {
const tile = {
userData: {
originalTexture: null,
@@ -68,25 +149,24 @@ describe("Texture Selector Utils - selectDebugTextureForTile", () => {
baseColorTexture: {
texture: {
source: {
- image: "Testing Image",
+ image: contentTexture,
},
},
},
},
- texture: "Test texture",
+ texture: uvDebugTexture,
},
},
};
- const uvDebugTexture = "Test texture";
- selectDebugTextureForTile(tile, uvDebugTexture);
- expect(tile.userData.originalTexture).toStrictEqual("Testing Image");
+ await selectDebugTextureForTile(tile as unknown as Tile3D, uvDebugTexture);
+ expect(tile.userData.originalTexture).toStrictEqual(contentTexture);
expect(
tile.content.material.pbrMetallicRoughness.baseColorTexture.texture.source
.image
- ).toStrictEqual("Test texture");
+ ).toStrictEqual(uvDebugTexture);
});
- test("Should skip adding original texture to userData if already exist and apply debug texture", () => {
+ test("Should skip adding original texture to userData if already exist and apply debug texture", async () => {
const tile = {
userData: {
originalTexture: {
@@ -95,12 +175,12 @@ describe("Texture Selector Utils - selectDebugTextureForTile", () => {
baseColorTexture: {
texture: {
source: {
- image: "Testing Image",
+ image: contentTexture,
},
},
},
},
- texture: "Test texture",
+ texture: uvDebugTexture,
},
},
},
@@ -110,41 +190,39 @@ describe("Texture Selector Utils - selectDebugTextureForTile", () => {
baseColorTexture: {
texture: {
source: {
- image: "Testing Image",
+ image: contentTexture,
},
},
},
},
- texture: "Test texture",
+ texture: uvDebugTexture,
},
},
};
- const uvDebugTexture = "Test texture";
- selectDebugTextureForTile(tile, uvDebugTexture);
+ await selectDebugTextureForTile(tile as unknown as Tile3D, uvDebugTexture);
expect(
tile.userData.originalTexture.material.pbrMetallicRoughness
.baseColorTexture.texture.source.image
- ).toStrictEqual("Testing Image");
+ ).toStrictEqual(contentTexture);
expect(
tile.content.material.pbrMetallicRoughness.baseColorTexture.texture.source
.image
- ).toStrictEqual("Test texture");
+ ).toStrictEqual(uvDebugTexture);
});
- test("Should add original texture to userData and apply debug texture if no material", () => {
+ test("Should add original texture to userData and apply debug texture if no material", async () => {
const tile = {
userData: {
originalTexture: null,
},
content: {
material: null,
- texture: "Test texture",
+ texture: contentTexture,
},
};
- const uvDebugTexture = "uvDebugTexture";
- selectDebugTextureForTile(tile, uvDebugTexture);
- expect(tile.userData.originalTexture).toStrictEqual("Test texture");
- expect(tile.content.texture).toStrictEqual("uvDebugTexture");
+ await selectDebugTextureForTile(tile as unknown as Tile3D, uvDebugTexture);
+ expect(tile.userData.originalTexture).toStrictEqual(contentTexture);
+ expect(tile.content.texture).toStrictEqual(uvDebugTexture);
});
});
@@ -159,7 +237,7 @@ describe("Texture Selector Utils - selectOriginalTextureForTile", () => {
texture: "Test texture",
},
};
- const result = selectOriginalTextureForTile(tile);
+ const result = selectOriginalTextureForTile(tile as unknown as Tile3D);
expect(result).toBeUndefined();
});
@@ -178,7 +256,7 @@ describe("Texture Selector Utils - selectOriginalTextureForTile", () => {
texture: "Test texture",
},
};
- const result = selectOriginalTextureForTile(tile);
+ const result = selectOriginalTextureForTile(tile as unknown as Tile3D);
expect(result).toBeUndefined();
});
@@ -202,7 +280,7 @@ describe("Texture Selector Utils - selectOriginalTextureForTile", () => {
},
},
};
- selectOriginalTextureForTile(tile);
+ selectOriginalTextureForTile(tile as unknown as Tile3D);
expect(
tile.content.material.pbrMetallicRoughness.baseColorTexture.texture.source
.image
@@ -220,7 +298,7 @@ describe("Texture Selector Utils - selectOriginalTextureForTile", () => {
texture: "Test texture",
},
};
- selectOriginalTextureForTile(tile);
+ selectOriginalTextureForTile(tile as unknown as Tile3D);
expect(tile.content.texture).toStrictEqual("Original Texture");
expect(tile.userData.originalTexture).toBeUndefined();
});
diff --git a/src/utils/debug/texture-selector-utils.ts b/src/utils/debug/texture-selector-utils.ts
index 964bbcfb..7494c56b 100644
--- a/src/utils/debug/texture-selector-utils.ts
+++ b/src/utils/debug/texture-selector-utils.ts
@@ -1,18 +1,28 @@
+import type { Tile3D, Tileset3D } from "@loaders.gl/tiles";
+
// TODO Need to separate multiple export functions from file and split logic for better testing
// The tiles list in the tileset mutates continually.
// We need to store tiles when we replace texture
-const tiles = {};
+const tiles: Record = {};
-export function selectDebugTextureForTileset(tileset, uvDebugTexture) {
+/**
+ * Replaces original textures in the tileset with uvDebug texture
+ * @param tileset Tileset where textures should be replaced
+ * @param uvDebugTexture uvDebug texture
+ */
+export async function selectDebugTextureForTileset(
+ tileset: Tileset3D,
+ uvDebugTexture: ImageBitmap | null
+) {
if (!uvDebugTexture) {
return;
}
for (const tile of tileset.tiles) {
- selectDebugTextureForTile(tile, uvDebugTexture);
+ await selectDebugTextureForTile(tile as Tile3D, uvDebugTexture);
}
for (const tileId in tiles) {
- selectDebugTextureForTile(tiles[tileId], uvDebugTexture);
+ await selectDebugTextureForTile(tiles[tileId], uvDebugTexture);
}
}
@@ -22,7 +32,50 @@ export function selectOriginalTextureForTileset() {
}
}
-export function selectDebugTextureForTile(tile, uvDebugTexture) {
+/**
+ * Crops the texture with the specified width and height
+ * @param texture - Texture to crop
+ * @param width - width of the cropped texture
+ * @param height - height of the cropped texture
+ * @returns cropped texture
+ */
+const cropTexture = async (
+ texture: ImageBitmap,
+ width: number,
+ height: number
+) => {
+ if (!width || !height) {
+ return texture;
+ }
+ const bitmap = await createImageBitmap(texture);
+
+ const coeffWidth = texture.width / width;
+ const coeffHeight = texture.height / height;
+ const coeff = coeffWidth < coeffHeight ? coeffWidth : coeffHeight;
+ const sw = width * coeff;
+ const sh = height * coeff;
+
+ const canvas = document.createElement("canvas");
+ canvas.width = sw;
+ canvas.height = sh;
+ const ctx = canvas.getContext("2d");
+ if (!ctx) {
+ return null;
+ }
+
+ ctx.drawImage(bitmap, 0, 0, sw, sh);
+ return canvas;
+};
+
+/**
+ * Replaces original textures in the tile with uvDebug texture
+ * @param tile - Tile where textures should be replaced
+ * @param uvDebugTexture uvDebug texture
+ */
+export async function selectDebugTextureForTile(
+ tile: Tile3D,
+ uvDebugTexture: ImageBitmap | null
+) {
tiles[tile.id] = tile;
if (!uvDebugTexture) {
return;
@@ -31,7 +84,6 @@ export function selectDebugTextureForTile(tile, uvDebugTexture) {
if (material) {
if (
!(
- material &&
material.pbrMetallicRoughness &&
material.pbrMetallicRoughness.baseColorTexture
)
@@ -42,18 +94,37 @@ export function selectDebugTextureForTile(tile, uvDebugTexture) {
tile.userData.originalTexture =
material.pbrMetallicRoughness.baseColorTexture.texture.source.image;
}
+ const width = tile.userData.originalTexture.width;
+ const height = tile.userData.originalTexture.height;
+ const uvDebugTextureCropped = await cropTexture(
+ uvDebugTexture,
+ width,
+ height
+ );
material.pbrMetallicRoughness.baseColorTexture.texture.source.image =
- uvDebugTexture;
+ uvDebugTextureCropped;
tile.content.material = { ...tile.content.material };
} else if (texture) {
if (!tile.userData.originalTexture) {
tile.userData.originalTexture = texture;
}
- tile.content.texture = uvDebugTexture;
+
+ const width = texture.width;
+ const height = texture.height;
+ const uvDebugTextureCropped = await cropTexture(
+ uvDebugTexture,
+ width,
+ height
+ );
+ tile.content.texture = uvDebugTextureCropped;
}
}
-export function selectOriginalTextureForTile(tile) {
+/**
+ * Replaces uvDebug texture in the tile back with original ones
+ * @param tile - Tile where textures should be replaced
+ */
+export function selectOriginalTextureForTile(tile: Tile3D) {
tiles[tile.id] = tile;
const {
content,
@@ -66,7 +137,6 @@ export function selectOriginalTextureForTile(tile) {
if (material) {
if (
!(
- material &&
material.pbrMetallicRoughness &&
material.pbrMetallicRoughness.baseColorTexture
)
From 78e30e7d0579093be7344cc19725905b187ffecb Mon Sep 17 00:00:00 2001
From: mspivak-actionengine
<118991512+mspivak-actionengine@users.noreply.github.com>
Date: Mon, 19 Feb 2024 14:23:50 +0300
Subject: [PATCH 25/40] use new terrain texture source (#353)
---
src/components/deck-gl-wrapper/deck-gl-wrapper.tsx | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx b/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx
index 5b4932e1..7948adcc 100644
--- a/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx
+++ b/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx
@@ -82,8 +82,8 @@ const INITIAL_VIEW_STATE = {
// https://github.com/tilezen/joerd/blob/master/docs/use-service.md#additional-amazon-s3-endpoints
const MAPZEN_TERRAIN_IMAGES = `https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png`;
-const ARCGIS_STREET_MAP_SURFACE_IMAGES =
- "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}";
+const TERRAIN_TEXTURE = "https://tile.openstreetmap.org/{z}/{x}/{y}.png";
+
const MAPZEN_ELEVATION_DECODE_PARAMETERS = {
rScaler: 256,
gScaler: 1,
@@ -707,7 +707,7 @@ export const DeckGlWrapper = ({
maxZoom: TERRAIN_LAYER_MAX_ZOOM,
elevationDecoder: MAPZEN_ELEVATION_DECODE_PARAMETERS,
elevationData: MAPZEN_TERRAIN_IMAGES,
- texture: ARCGIS_STREET_MAP_SURFACE_IMAGES,
+ texture: TERRAIN_TEXTURE,
onTileLoad: (tile) => onTerrainTileLoad(tile),
color: [255, 255, 255],
});
From b163c806a33a767d10ba7e12a58b08b803785591 Mon Sep 17 00:00:00 2001
From: mspivak-actionengine
<118991512+mspivak-actionengine@users.noreply.github.com>
Date: Mon, 19 Feb 2024 15:36:01 +0300
Subject: [PATCH 26/40] fix(tileset-example): fix tileset version (#354)
---
.../layers-panel/list-item-wrapper/list-item-wrapper.spec.tsx | 2 +-
src/constants/i3s-examples.ts | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/components/layers-panel/list-item-wrapper/list-item-wrapper.spec.tsx b/src/components/layers-panel/list-item-wrapper/list-item-wrapper.spec.tsx
index 0a8e2142..02690fff 100644
--- a/src/components/layers-panel/list-item-wrapper/list-item-wrapper.spec.tsx
+++ b/src/components/layers-panel/list-item-wrapper/list-item-wrapper.spec.tsx
@@ -19,7 +19,7 @@ describe("List Item Wrapper", () => {
onClick={onChange}
optionsContent={{"Hello world"}
}
>
- San Francisco v1.6
+ San Francisco v1.8
);
const optionsIcon = document.querySelector("#test-id");
diff --git a/src/constants/i3s-examples.ts b/src/constants/i3s-examples.ts
index 3a4e2ea5..fb630cbc 100644
--- a/src/constants/i3s-examples.ts
+++ b/src/constants/i3s-examples.ts
@@ -15,8 +15,8 @@ export const INITIAL_EXAMPLE: LayerExample = {
export const EXAMPLES: LayerExample[] = [
{
- id: "san-francisco-v1_6",
- name: "San Francisco v1.6",
+ id: "san-francisco-v1_8",
+ name: "San Francisco v1.8",
url: "https://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/SanFrancisco_Bldgs/SceneServer/layers/0",
type: TilesetType.I3S,
mapInfo: 'https://www.arcgis.com/home/item.html?id=d3344ba99c3f4efaa909ccfbcc052ed5'
From 2e313fa16246c72a60e22d462a83e496cf90a589 Mon Sep 17 00:00:00 2001
From: mspivak-actionengine
<118991512+mspivak-actionengine@users.noreply.github.com>
Date: Tue, 20 Feb 2024 12:12:25 +0300
Subject: [PATCH 27/40] feat(tile-inspector): show original texture (#349)
---
src/components/modal-dialog/modal-dialog.tsx | 33 +-
.../texture-section.spec.tsx | 30 ++
.../tile-details-panel/texture-section.tsx | 140 ++++++++
.../tile-details-panel/tile-details-panel.tsx | 4 +-
src/utils/debug/texture-render-utils.spec.ts | 31 ++
src/utils/debug/texture-render-utils.ts | 324 ++++++++++++++++++
6 files changed, 549 insertions(+), 13 deletions(-)
create mode 100644 src/components/tile-details-panel/texture-section.spec.tsx
create mode 100644 src/components/tile-details-panel/texture-section.tsx
create mode 100644 src/utils/debug/texture-render-utils.spec.ts
create mode 100644 src/utils/debug/texture-render-utils.ts
diff --git a/src/components/modal-dialog/modal-dialog.tsx b/src/components/modal-dialog/modal-dialog.tsx
index c25df8d8..cffc26cb 100644
--- a/src/components/modal-dialog/modal-dialog.tsx
+++ b/src/components/modal-dialog/modal-dialog.tsx
@@ -79,7 +79,7 @@ const ButtonsContainer = styled.div`
display: flex;
flex-direction: row;
justify-content: ${(props) => props.justify};
- margin: 32px;
+ margin: 32px 32px 0 32px;
column-gap: 18px;
{
> * {
@@ -88,6 +88,10 @@ const ButtonsContainer = styled.div`
}
`;
+const AfterButtonsPlaceholder = styled.div`
+ margin: 0 32px 32px 32px;
+`;
+
type LogoutPanelProps = {
title: string;
children: JSX.Element | JSX.Element[];
@@ -125,17 +129,22 @@ export const ModalDialog = ({
{title}
{children}
-
- {cancelButtonText && (
-
- {cancelButtonText}
-
- )}
- {okButtonText}
-
+ {(cancelButtonText || okButtonText) && (
+
+ {cancelButtonText && (
+
+ {cancelButtonText}
+
+ )}
+ {okButtonText && (
+ {okButtonText}
+ )}
+
+ )}
+
>
diff --git a/src/components/tile-details-panel/texture-section.spec.tsx b/src/components/tile-details-panel/texture-section.spec.tsx
new file mode 100644
index 00000000..bf869e41
--- /dev/null
+++ b/src/components/tile-details-panel/texture-section.spec.tsx
@@ -0,0 +1,30 @@
+import { renderWithTheme } from "../../utils/testing-utils/render-with-theme";
+import { TextureSection } from "./texture-section";
+import { getTile3d } from "../../test/tile-stub";
+import { screen } from "@testing-library/react";
+import userEvent from "@testing-library/user-event";
+
+let tile3d;
+beforeEach(() => {
+ tile3d = getTile3d();
+});
+
+const callRender = (renderFunc, props = {}) => {
+ return renderFunc();
+};
+
+describe("Texture Section", () => {
+ it("Should render texture section", async () => {
+ const { container } = callRender(renderWithTheme);
+ expect(container.firstChild).toBeInTheDocument();
+
+ const texturePanel = await screen.findByText("Texture:");
+ expect(texturePanel).toBeInTheDocument();
+
+ const texture = texturePanel?.nextSibling as Element;
+ texture && userEvent.click(texture);
+
+ const texturePreview = await screen.findByText("Preview texture");
+ expect(texturePreview).toBeInTheDocument();
+ });
+});
diff --git a/src/components/tile-details-panel/texture-section.tsx b/src/components/tile-details-panel/texture-section.tsx
new file mode 100644
index 00000000..60122200
--- /dev/null
+++ b/src/components/tile-details-panel/texture-section.tsx
@@ -0,0 +1,140 @@
+import styled from "styled-components";
+import { Title, TileInfoSectionWrapper } from "../common";
+import { useEffect, useState } from "react";
+import { Tile3D } from "@loaders.gl/tiles";
+import { ModalDialog } from "../modal-dialog/modal-dialog";
+
+import {
+ drawCompressedTexture,
+ drawBitmapTexture,
+} from "../../utils/debug/texture-render-utils";
+
+type Size = {
+ width: number;
+ height: number;
+};
+
+const TextureContainer = styled.div`
+ display: flex;
+ justify-content: center;
+ align-items: top;
+ border-radius: 4px;
+ margin-right: 16px;
+ cursor: pointer;
+`;
+
+const TextureButton = styled.button<{
+ image: string;
+ width: number;
+ height: number;
+}>`
+ height: ${({ height }) => `${height}px`};
+ width: ${({ width }) => `${width}px`};
+ position: relative;
+ margin: 0;
+ border: 0;
+ background-image: ${({ image }) => `${image}`};
+ background-repeat: no-repeat;
+ cursor: inherit;
+`;
+
+const SIZE = 149;
+const PREVIEW_SIZE = 592;
+
+type TextureSectionProps = {
+ tile: Tile3D;
+};
+
+export const TextureSection = ({ tile }: TextureSectionProps) => {
+ const [texture, setTexture] = useState("");
+ const [previewTexture, setPreviewTexture] = useState("");
+ const [showPreviewTexture, setShowPreviewTexture] = useState(false);
+
+ const [size, setSize] = useState({
+ width: SIZE,
+ height: SIZE,
+ });
+ const [previewSize, setPreviewSize] = useState({
+ width: PREVIEW_SIZE,
+ height: PREVIEW_SIZE,
+ });
+
+ const contentImage =
+ tile.content?.material?.pbrMetallicRoughness?.baseColorTexture?.texture
+ ?.source?.image;
+ const originalTexture = tile.userData?.originalTexture;
+ const image = originalTexture || contentImage;
+
+ useEffect(() => {
+ if (image) {
+ if (image.compressed) {
+ drawCompressedTexture(image, SIZE).then((result) => {
+ const { url, width, height } = result;
+ setSize({ width, height });
+ setTexture(url);
+ });
+ } else {
+ drawBitmapTexture(image, SIZE).then((result) => {
+ const { url, width, height } = result;
+ setSize({ width: width, height: height });
+ setTexture(url);
+ });
+ }
+ }
+ }, [image]);
+
+ const onClickHandler = () => {
+ if (image) {
+ if (image.compressed) {
+ drawCompressedTexture(image, PREVIEW_SIZE).then((result) => {
+ const { url, width, height } = result;
+ setPreviewSize({ width: width, height: height });
+ setPreviewTexture(url);
+ });
+ } else {
+ drawBitmapTexture(image, PREVIEW_SIZE).then((result) => {
+ const { url, width, height } = result;
+ setPreviewSize({ width: width, height: height });
+ setPreviewTexture(url);
+ });
+ }
+ }
+
+ setShowPreviewTexture(true);
+ };
+
+ return (
+ <>
+
+ Texture:
+
+
+
+
+
+ {showPreviewTexture && (
+ {
+ setShowPreviewTexture(false);
+ }}
+ onCancel={() => {
+ setShowPreviewTexture(false);
+ }}
+ >
+
+
+ )}
+ >
+ );
+};
diff --git a/src/components/tile-details-panel/tile-details-panel.tsx b/src/components/tile-details-panel/tile-details-panel.tsx
index f4dc7aa6..24f959af 100644
--- a/src/components/tile-details-panel/tile-details-panel.tsx
+++ b/src/components/tile-details-panel/tile-details-panel.tsx
@@ -24,6 +24,7 @@ import {
formatStringValue,
} from "../../utils/format/format-utils";
import { getBoundingType } from "../../utils/debug/bounding-volume";
+import { TextureSection } from "./texture-section";
enum ActiveTileInfoPanel {
TileDetailsPanel,
@@ -162,7 +163,7 @@ export const TileDetailsPanel = ({
lodMetricType,
lodMetricValue,
screenSpaceError,
- depth
+ depth,
} = tile;
const childrenInfo = getChildrenInfo(tileChildren);
@@ -411,6 +412,7 @@ export const TileDetailsPanel = ({
{children}
+
({})),
+});
+
+Object.defineProperty(window, "ImageBitmap", {
+ writable: true,
+ value: jest.fn().mockImplementation((name) => ({ name: name })),
+});
+
+describe("Texture Selector Utils - selectDebugTextureForTileset", () => {
+ beforeAll(() => {
+ HTMLCanvasElement.prototype.getContext = jest.fn().mockReturnValue({
+ drawImage: mockDrawImage,
+ });
+ HTMLCanvasElement.prototype.toDataURL = jest.fn().mockReturnValue({});
+ });
+
+ test("Should return new width and height of bitmap image", async () => {
+ const { width, height } = await drawBitmapTexture(
+ { width: 64, height: 128 } as ImageData,
+ 512
+ );
+ expect(width).toBe(256);
+ expect(height).toBe(512);
+ });
+});
diff --git a/src/utils/debug/texture-render-utils.ts b/src/utils/debug/texture-render-utils.ts
new file mode 100644
index 00000000..c2ecd86b
--- /dev/null
+++ b/src/utils/debug/texture-render-utils.ts
@@ -0,0 +1,324 @@
+import {
+ getSupportedGPUTextureFormats,
+ GL_EXTENSIONS_CONSTANTS,
+} from "@loaders.gl/textures";
+
+import type { TextureLevel } from "@loaders.gl/schema";
+import { Texture2D, instrumentGLContext, Program } from "@luma.gl/core";
+
+const {
+ COMPRESSED_RGB_S3TC_DXT1_EXT,
+ COMPRESSED_RGBA_S3TC_DXT1_EXT,
+ COMPRESSED_RGBA_S3TC_DXT3_EXT,
+ COMPRESSED_RGBA_S3TC_DXT5_EXT,
+ COMPRESSED_RGB_PVRTC_4BPPV1_IMG,
+ COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,
+ COMPRESSED_RGB_PVRTC_2BPPV1_IMG,
+ COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,
+ COMPRESSED_RGB_ATC_WEBGL,
+ COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,
+ COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL,
+ COMPRESSED_RGB_ETC1_WEBGL,
+ COMPRESSED_RGBA_ASTC_4X4_KHR,
+ COMPRESSED_RGBA_ASTC_5X4_KHR,
+ COMPRESSED_RGBA_ASTC_5X5_KHR,
+ COMPRESSED_RGBA_ASTC_6X5_KHR,
+ COMPRESSED_RGBA_ASTC_6X6_KHR,
+ COMPRESSED_RGBA_ASTC_8X5_KHR,
+ COMPRESSED_RGBA_ASTC_8X6_KHR,
+ COMPRESSED_RGBA_ASTC_8X8_KHR,
+ COMPRESSED_RGBA_ASTC_10X5_KHR,
+ COMPRESSED_RGBA_ASTC_10X6_KHR,
+ COMPRESSED_RGBA_ASTC_10X8_KHR,
+ COMPRESSED_RGBA_ASTC_10X10_KHR,
+ COMPRESSED_RGBA_ASTC_12X10_KHR,
+ COMPRESSED_RGBA_ASTC_12X12_KHR,
+ COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR,
+ COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR,
+ COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR,
+ COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR,
+ COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR,
+ COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR,
+ COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR,
+ COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR,
+ COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR,
+ COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR,
+ COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR,
+ COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR,
+ COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR,
+ COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR,
+ COMPRESSED_R11_EAC,
+ COMPRESSED_RG11_EAC,
+ COMPRESSED_SIGNED_RG11_EAC,
+ COMPRESSED_RGB8_ETC2,
+ COMPRESSED_RGBA8_ETC2_EAC,
+ COMPRESSED_SRGB8_ETC2,
+ COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,
+ COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
+ COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
+ COMPRESSED_RED_RGTC1_EXT,
+ COMPRESSED_SIGNED_RED_RGTC1_EXT,
+ COMPRESSED_RED_GREEN_RGTC2_EXT,
+ COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT,
+ COMPRESSED_SRGB_S3TC_DXT1_EXT,
+ COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,
+ COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,
+ COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,
+} = GL_EXTENSIONS_CONSTANTS;
+
+// eslint-disable-next-line complexity
+const isFormatSupported = (
+ gl: WebGLRenderingContext,
+ format: number | undefined
+) => {
+ if (typeof format !== "number") {
+ throw new Error("Invalid internal format of compressed texture");
+ }
+ const supportedFormats = getSupportedGPUTextureFormats(gl);
+
+ switch (format) {
+ case COMPRESSED_RGB_S3TC_DXT1_EXT:
+ case COMPRESSED_RGBA_S3TC_DXT3_EXT:
+ case COMPRESSED_RGBA_S3TC_DXT5_EXT:
+ case COMPRESSED_RGBA_S3TC_DXT1_EXT:
+ return supportedFormats.has("dxt");
+
+ case COMPRESSED_RGB_PVRTC_4BPPV1_IMG:
+ case COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:
+ case COMPRESSED_RGB_PVRTC_2BPPV1_IMG:
+ case COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:
+ return supportedFormats.has("pvrtc");
+
+ case COMPRESSED_RGB_ATC_WEBGL:
+ case COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL:
+ case COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL:
+ return supportedFormats.has("atc");
+
+ case COMPRESSED_RGB_ETC1_WEBGL:
+ return supportedFormats.has("etc1");
+
+ case COMPRESSED_RGBA_ASTC_4X4_KHR:
+ case COMPRESSED_RGBA_ASTC_5X4_KHR:
+ case COMPRESSED_RGBA_ASTC_5X5_KHR:
+ case COMPRESSED_RGBA_ASTC_6X5_KHR:
+ case COMPRESSED_RGBA_ASTC_6X6_KHR:
+ case COMPRESSED_RGBA_ASTC_8X5_KHR:
+ case COMPRESSED_RGBA_ASTC_8X6_KHR:
+ case COMPRESSED_RGBA_ASTC_8X8_KHR:
+ case COMPRESSED_RGBA_ASTC_10X5_KHR:
+ case COMPRESSED_RGBA_ASTC_10X6_KHR:
+ case COMPRESSED_RGBA_ASTC_10X8_KHR:
+ case COMPRESSED_RGBA_ASTC_10X10_KHR:
+ case COMPRESSED_RGBA_ASTC_12X10_KHR:
+ case COMPRESSED_RGBA_ASTC_12X12_KHR:
+ case COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR:
+ case COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR:
+ case COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR:
+ case COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR:
+ case COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR:
+ case COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR:
+ case COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR:
+ case COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR:
+ case COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR:
+ case COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR:
+ case COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR:
+ case COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR:
+ case COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR:
+ case COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR:
+ return supportedFormats.has("astc");
+
+ case COMPRESSED_R11_EAC:
+ case COMPRESSED_RG11_EAC:
+ case COMPRESSED_SIGNED_RG11_EAC:
+ case COMPRESSED_RGB8_ETC2:
+ case COMPRESSED_RGBA8_ETC2_EAC:
+ case COMPRESSED_SRGB8_ETC2:
+ case COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
+ case COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+ case COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+ return supportedFormats.has("etc2");
+
+ case COMPRESSED_RED_RGTC1_EXT:
+ case COMPRESSED_SIGNED_RED_RGTC1_EXT:
+ case COMPRESSED_RED_GREEN_RGTC2_EXT:
+ case COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT:
+ return supportedFormats.has("rgtc");
+
+ case COMPRESSED_SRGB_S3TC_DXT1_EXT:
+ case COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
+ case COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
+ case COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
+ return supportedFormats.has("dxt-srgb");
+ default:
+ return false;
+ }
+};
+
+/**
+ * Creates Texture2D from the images provided
+ * @param gl - GL context
+ * @param images - compressed images used to create Texture2D
+ * @returns texture handle
+ */
+const createCompressedTexture2D = (
+ gl: WebGLRenderingContext,
+ images: unknown[]
+): WebGLTexture => {
+ const texture = new Texture2D(gl, {
+ data: images,
+ compressed: true,
+ mipmaps: false,
+ parameters: {
+ [gl.TEXTURE_MAG_FILTER]: gl.LINEAR,
+ [gl.TEXTURE_MIN_FILTER]:
+ images.length > 1 ? gl.LINEAR_MIPMAP_NEAREST : gl.LINEAR,
+ [gl.TEXTURE_WRAP_S]: gl.CLAMP_TO_EDGE,
+ [gl.TEXTURE_WRAP_T]: gl.CLAMP_TO_EDGE,
+ },
+ });
+
+ return texture.handle;
+};
+
+/**
+ * Renders the images provided
+ * @param gl - GL context
+ * @param program - GL program
+ * @param images - compressed images to render
+ */
+const renderCompressedTexture = (
+ gl: WebGLRenderingContext,
+ program: WebGLProgram,
+ images: TextureLevel[]
+) => {
+ // We take the first image because it has main properties of compressed image.
+ const { format } = images[0];
+
+ if (!isFormatSupported(gl, format)) {
+ throw new Error(`Texture format ${format} not supported by this GPU`);
+ }
+
+ const texture = createCompressedTexture2D(gl, images);
+
+ gl.bindTexture(gl.TEXTURE_2D, texture);
+ gl.useProgram(program);
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
+};
+
+const createAndFillBufferObject = (gl: WebGLRenderingContext, program: any) => {
+ const data = new Float32Array([-1, -1, -1, 1, 1, -1, 1, 1]);
+ const positionArrayLocation =
+ program.configuration.attributeInfosByName.position.location;
+ const bufferId = gl.createBuffer();
+
+ if (!bufferId) {
+ console.error("Failed to create the buffer object"); // eslint-disable-line
+ }
+
+ gl.bindBuffer(gl.ARRAY_BUFFER, bufferId);
+ gl.enableVertexAttribArray(positionArrayLocation);
+ gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
+ gl.vertexAttribPointer(positionArrayLocation, 2, gl.FLOAT, false, 0, 0);
+};
+
+// TEXTURE SHADERS
+
+const vs = `
+precision highp float;
+
+attribute vec2 position;
+varying vec2 uv;
+
+void main() {
+ gl_Position = vec4(position, 0.0, 1.0);
+ uv = vec2(position.x * .5, -position.y * .5) + vec2(.5, .5);
+}
+`;
+
+const fs = `
+precision highp float;
+
+uniform sampler2D tex;
+varying vec2 uv;
+
+void main() {
+ gl_FragColor = vec4(texture2D(tex, uv).rgb, 1.);
+}
+`;
+
+/**
+ * Draws and rescales the image provided
+ * @param image - image to draw
+ * @param size - size of the image drawn
+ * @returns texture drawn and its size
+ */
+export const drawBitmapTexture = async (
+ image: ImageData | HTMLCanvasElement,
+ size: number
+): Promise<{ url: string; width: number; height: number }> => {
+ const bitmap = await createImageBitmap(image);
+
+ const canvas = document.createElement("canvas");
+ const ctx = canvas.getContext("2d");
+ if (!ctx) {
+ throw new Error("No 2d context");
+ }
+ const imageWidth = image.width;
+ const imageHeight = image.height;
+
+ canvas.width = imageWidth;
+ canvas.height = imageHeight;
+
+ const imageSizeMax = imageWidth > imageHeight ? imageWidth : imageHeight;
+ const coeff = imageSizeMax / size;
+ const areaWidth = imageWidth / coeff;
+ const areaHeight = imageHeight / coeff;
+
+ // Position the image on the canvas (0, 0), and specify width and height of the image (areaWidth, areaHeight)
+ ctx.drawImage(bitmap, 0, 0, areaWidth, areaHeight);
+
+ return {
+ url: canvas.toDataURL("image/png"),
+ width: areaWidth,
+ height: areaHeight,
+ };
+};
+
+/**
+ * Draws and rescales the compressed image provided
+ * @param data - object containing the compressed image
+ * @param size - size of the image drawn
+ * @returns texture drawn and its size
+ */
+export const drawCompressedTexture = async (
+ data: {
+ compressed: boolean;
+ mipmaps: boolean;
+ width: number;
+ height: number;
+ data: TextureLevel[];
+ },
+ size: number
+): Promise<{ url: string; width: number; height: number }> => {
+ const canvas = document.createElement("canvas");
+ const gl = canvas.getContext("webgl");
+ instrumentGLContext(gl);
+ if (!gl) {
+ throw new Error("No webgl context");
+ }
+
+ const program = new Program(gl, { vs, fs });
+ createAndFillBufferObject(gl, program);
+
+ const images = [data.data[0]]; // The first image only
+ const imageWidth = data.width;
+ const imageHeight = data.height;
+
+ canvas.width = imageWidth;
+ canvas.height = imageHeight;
+
+ gl.viewport(0, 0, imageWidth, imageHeight);
+ renderCompressedTexture(gl, program.handle, images);
+
+ return await drawBitmapTexture(canvas, size);
+};
From 21bf82d46158537b788e350269ef5d4573ac3909 Mon Sep 17 00:00:00 2001
From: mspivak-actionengine
<118991512+mspivak-actionengine@users.noreply.github.com>
Date: Tue, 20 Feb 2024 12:24:48 +0300
Subject: [PATCH 28/40] fix(attribution): show terrain texture attribution
(#355)
---
.../deck-gl-wrapper/deck-gl-wrapper.tsx | 32 +++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx b/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx
index 7948adcc..49c58abe 100644
--- a/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx
+++ b/src/components/deck-gl-wrapper/deck-gl-wrapper.tsx
@@ -65,6 +65,25 @@ import {
} from "../../redux/slices/base-maps-slice";
import { colorizeTile } from "../../utils/colorize-tile";
import { filterTile } from "../../utils/tiles-filtering/filter-tile";
+import styled from "styled-components";
+
+const WrapperAttributionContainer = styled.div`
+ position: fixed;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ justify-content: end;
+ align-items: end;
+`;
+
+const AttributionContainer = styled.div`
+ position: absolute;
+ display: flex;
+ flex-direction: column;
+ margin: 8px;
+`;
const TRANSITION_DURAITON = 4000;
const INITIAL_VIEW_STATE = {
@@ -805,6 +824,19 @@ export const DeckGlWrapper = ({
/>
)}
+ {showTerrain && (
+
+
+
+
+
+ )}
);
};
From e4d59eb99869f6b578a744b7b048f8478c4fd9fa Mon Sep 17 00:00:00 2001
From: mspivak-actionengine
<118991512+mspivak-actionengine@users.noreply.github.com>
Date: Thu, 29 Feb 2024 14:32:03 +0300
Subject: [PATCH 29/40] fix(minimap): disable minimap for ArcGIS base map
(#357)
---
src/components/debug-panel/debug-panel.tsx | 7 ++
.../toogle-switch/toggle-switch.tsx | 64 +++++++++++++------
src/constants/colors.ts | 1 +
src/pages/debug-app/debug-app.tsx | 2 +-
4 files changed, 55 insertions(+), 19 deletions(-)
diff --git a/src/components/debug-panel/debug-panel.tsx b/src/components/debug-panel/debug-panel.tsx
index ef6ca86e..9674012e 100644
--- a/src/components/debug-panel/debug-panel.tsx
+++ b/src/components/debug-panel/debug-panel.tsx
@@ -24,6 +24,7 @@ import {
setDebugOptions,
selectDebugOptions,
} from "../../redux/slices/debug-options-slice";
+import { selectSelectedBaseMapId } from "../../redux/slices/base-maps-slice";
const CloseButtonWrapper = styled.div`
position: absolute;
@@ -64,6 +65,11 @@ export const DebugPanel = ({ onClose }: DebugPanelProps) => {
const layout = useAppLayout();
const dispatch = useAppDispatch();
const debugOptions = useAppSelector(selectDebugOptions);
+ const selectedBaseMapId = useAppSelector(selectSelectedBaseMapId);
+ const minimapDisabled = selectedBaseMapId === "ArcGis";
+ if (minimapDisabled && debugOptions.minimap) {
+ dispatch(setDebugOptions({ minimap: false }));
+ }
return (
@@ -84,6 +90,7 @@ export const DebugPanel = ({ onClose }: DebugPanelProps) => {
dispatch(setDebugOptions({ minimap: !debugOptions.minimap }))
}
diff --git a/src/components/toogle-switch/toggle-switch.tsx b/src/components/toogle-switch/toggle-switch.tsx
index 23892695..6cec8ed7 100644
--- a/src/components/toogle-switch/toggle-switch.tsx
+++ b/src/components/toogle-switch/toggle-switch.tsx
@@ -1,5 +1,8 @@
-import styled from "styled-components";
-import { color_canvas_primary_inverted } from "../../constants/colors";
+import styled, { css } from "styled-components";
+import {
+ color_canvas_primary_inverted,
+ dim_canvas_tertiary,
+} from "../../constants/colors";
const Switch = styled.div`
position: relative;
@@ -17,12 +20,17 @@ const Input = styled.input`
const Label = styled.label<{
title?: string;
htmlFor?: string;
+ disabled: boolean;
}>`
font-size: 6px;
width: 28px;
height: 18px;
border-radius: 8px;
- cursor: pointer;
+ ${({ disabled }) =>
+ !disabled &&
+ css`
+ cursor: pointer;
+ `}
${Input} {
opacity: 0;
width: 0;
@@ -30,9 +38,8 @@ const Label = styled.label<{
}
`;
-const Slider = styled.span`
+const Slider = styled.span<{ disabled: boolean }>`
position: absolute;
- cursor: pointer;
top: 1px;
left: 0;
right: 0;
@@ -54,16 +61,25 @@ const Slider = styled.span`
transition: 0.4s;
border-radius: 8px;
}
- &:hover {
- background-color: ${({ theme }) =>
- theme.colors.switchDisabledBackgroundHovered};
- }
+ ${({ disabled }) =>
+ !disabled &&
+ css`
+ &:hover {
+ background-color: ${({ theme }) =>
+ theme.colors.switchDisabledBackgroundHovered};
+ }
+ `}
${Input}:checked + & {
background: ${({ theme }) => theme.colors.switchCheckedBackground};
- &:hover {
- background: ${({ theme }) => theme.colors.switchCheckedBackgroundHovered};
- }
+ ${({ disabled }) =>
+ !disabled &&
+ css`
+ &:hover {
+ background: ${({ theme }) =>
+ theme.colors.switchCheckedBackgroundHovered};
+ }
+ `}
}
${Input}:checked + &::before {
@@ -71,30 +87,42 @@ const Slider = styled.span`
-ms-transform: translateX(11px);
transform: translateX(11px);
}
+
+ ${Input}:disabled + &::before {
+ background-color: ${dim_canvas_tertiary};
+ }
`;
-/**
- * TODO: Add types to component
- */
+type ToggleSwitchProps = {
+ checked: boolean;
+ onChange: () => void;
+ name?: string;
+ id?: string;
+ title?: string;
+ disabled?: boolean;
+};
+
export const ToggleSwitch = ({
checked,
onChange,
name = "",
id = "",
title = "",
-}) => {
+ disabled = false,
+}: ToggleSwitchProps) => {
return (
-
);
diff --git a/src/constants/colors.ts b/src/constants/colors.ts
index 4aa283a4..205dc470 100644
--- a/src/constants/colors.ts
+++ b/src/constants/colors.ts
@@ -29,6 +29,7 @@ export const color_accent_tertiary = "#FDCECE";
export const dim_canvas_primary = "#616678";
export const dim_canvas_secondary = "#CDCFD6";
+export const dim_canvas_tertiary = "#808080";
export const COLORS_BY_ATTRIBUTE: {
min: {
diff --git a/src/pages/debug-app/debug-app.tsx b/src/pages/debug-app/debug-app.tsx
index b64c081f..b32f1cb3 100644
--- a/src/pages/debug-app/debug-app.tsx
+++ b/src/pages/debug-app/debug-app.tsx
@@ -236,7 +236,7 @@ export const DebugApp = () => {
setColoredTilesMap({});
setSelectedTile(null);
dispatch(resetDebugOptions());
- dispatch(setDebugOptions({ minimap: true }));
+ dispatch(setDebugOptions({ minimap: !(selectedBaseMapId === "ArcGis") }));
dispatch(clearBSLStatisitcsSummary());
dispatch(setFiltersByAttrubute({ filter: null }));
}, [activeLayers, buildingExplorerOpened]);
From dbd3241136206e8f3190b723086f734e19560e6f Mon Sep 17 00:00:00 2001
From: Michael Spivak <118991512+mspivak-actionengine@users.noreply.github.com>
Date: Thu, 7 Mar 2024 18:36:29 +0300
Subject: [PATCH 30/40] feat(texture): support selecting textures (#356)
---
public/images/uvTexture1.png | Bin 0 -> 973954 bytes
public/images/uvTexture1.thumb.png | Bin 0 -> 9751 bytes
public/images/uvTexture2.png | Bin 0 -> 192122 bytes
public/images/uvTexture2.thumb.png | Bin 0 -> 7030 bytes
public/images/uvTexture3.png | Bin 0 -> 218560 bytes
public/images/uvTexture3.thumb.png | Bin 0 -> 8234 bytes
public/images/uvTexture4.png | Bin 0 -> 149799 bytes
public/images/uvTexture4.thumb.png | Bin 0 -> 7431 bytes
public/images/uvTexture5.png | Bin 0 -> 425475 bytes
public/images/uvTexture5.thumb.png | Bin 0 -> 10380 bytes
src/app.tsx | 2 +-
.../bookmarks-panel/bookmarks-panel.spec.tsx | 3 +-
.../bookmarks-panel/bookmarks-panel.tsx | 23 ++-
.../unsaved-bookmark-warning.tsx | 2 +-
.../bookmarks-panel/upload-panel.spec.tsx | 86 ----------
src/components/debug-panel/debug-panel.tsx | 86 ++++++++++
.../deck-gl-wrapper/deck-gl-wrapper.spec.tsx | 7 +-
.../deck-gl-wrapper/deck-gl-wrapper.tsx | 26 ++-
.../icon-list-panel/icon-list-panel.tsx | 87 ++++++++++
.../upload-panel-item.spec.tsx | 6 +-
.../upload-panel-item.tsx | 2 +-
.../upload-panel/upload-panel.spec.tsx | 121 ++++++++++++++
.../upload-panel.tsx | 88 +++++-----
src/redux/slices/icon-list-slice.spec.ts | 96 +++++++++++
src/redux/slices/icon-list-slice.ts | 152 ++++++++++++++++++
.../slices/uv-debug-texture-slice.spec.ts | 16 +-
src/redux/slices/uv-debug-texture-slice.ts | 51 +++---
src/redux/store.ts | 4 +-
src/types.ts | 32 ++++
src/utils/bookmarks-utils.spec.ts | 20 +++
src/utils/bookmarks-utils.ts | 36 ++++-
src/utils/debug/texture-render-utils.spec.ts | 2 +-
src/utils/debug/texture-render-utils.ts | 33 ++--
33 files changed, 777 insertions(+), 204 deletions(-)
create mode 100644 public/images/uvTexture1.png
create mode 100644 public/images/uvTexture1.thumb.png
create mode 100644 public/images/uvTexture2.png
create mode 100644 public/images/uvTexture2.thumb.png
create mode 100644 public/images/uvTexture3.png
create mode 100644 public/images/uvTexture3.thumb.png
create mode 100644 public/images/uvTexture4.png
create mode 100644 public/images/uvTexture4.thumb.png
create mode 100644 public/images/uvTexture5.png
create mode 100644 public/images/uvTexture5.thumb.png
delete mode 100644 src/components/bookmarks-panel/upload-panel.spec.tsx
create mode 100644 src/components/icon-list-panel/icon-list-panel.tsx
rename src/components/{bookmarks-panel => upload-panel}/upload-panel-item.spec.tsx (95%)
rename src/components/{bookmarks-panel => upload-panel}/upload-panel-item.tsx (99%)
create mode 100644 src/components/upload-panel/upload-panel.spec.tsx
rename src/components/{bookmarks-panel => upload-panel}/upload-panel.tsx (66%)
create mode 100644 src/redux/slices/icon-list-slice.spec.ts
create mode 100644 src/redux/slices/icon-list-slice.ts
diff --git a/public/images/uvTexture1.png b/public/images/uvTexture1.png
new file mode 100644
index 0000000000000000000000000000000000000000..ffbb2a7369638183d043ff92c8759499921eb8c0
GIT binary patch
literal 973954
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