From e17c1426e65fbad648e53a13a53903d621ae8e48 Mon Sep 17 00:00:00 2001 From: scc <66scc66@gmail.com> Date: Tue, 18 Jul 2023 08:16:37 +0000 Subject: [PATCH] feat: add mapbox+deck.gl basic map --- .github/workflows/codeql.yml | 6 +- .github/workflows/deploy_doc.yml | 5 + .github/workflows/main.yml | 12 +- .github/workflows/playwright.yml | 13 + .gitmodules | 4 + package.json | 52 + packages/common/config.d.ts | 4 + packages/common/package.json | 4 + packages/common/src/index.mts | 5 + .../src/content/docs/zh-cn/dev_log/202307.md | 13 + packages/land_app/package.json | 22 + packages/land_app/src/App.css | 10 +- packages/land_app/src/chain/skchain.ts | 10 + packages/land_app/src/main.tsx | 11 +- .../mainWindow/components/Tabbar/index.scss | 16 + .../mainWindow/components/Tabbar/index.tsx | 88 + .../components/needPremission/index.scss | 16 + .../components/needPremission/index.tsx | 10 + .../land_app/src/pages/mainWindow/elements.ts | 2056 +++++++++++++++++ .../land_app/src/pages/mainWindow/index.tsx | 25 +- packages/land_app/src/pages/mainWindow/map.ts | 183 ++ .../land_app/src/pages/mainWindow/preload.ts | 32 + .../land_app/src/pages/mainWindow/timeline.ts | 50 - .../src/pages/mainWindow/timelineComp.tsx | 39 - packages/land_app/src/state/sk.ts | 5 - .../land_app/src/utils/h3-hexagon-layer.ts | 192 ++ packages/land_app/src/utils/position.ts | 61 + packages/land_app/src/vite-env.d.ts | 2 + packages/land_app/vite.config.ts | 3 + packages/private_configs | 1 + packages/skchain/src/lib/state/index.ts | 4 + pnpm-lock.yaml | 868 ++++++- 32 files changed, 3704 insertions(+), 118 deletions(-) create mode 100644 packages/common/config.d.ts create mode 100644 packages/docs/src/content/docs/zh-cn/dev_log/202307.md create mode 100644 packages/land_app/src/chain/skchain.ts create mode 100644 packages/land_app/src/pages/mainWindow/components/Tabbar/index.scss create mode 100644 packages/land_app/src/pages/mainWindow/components/Tabbar/index.tsx create mode 100644 packages/land_app/src/pages/mainWindow/components/needPremission/index.scss create mode 100644 packages/land_app/src/pages/mainWindow/components/needPremission/index.tsx create mode 100644 packages/land_app/src/pages/mainWindow/elements.ts create mode 100644 packages/land_app/src/pages/mainWindow/map.ts create mode 100644 packages/land_app/src/pages/mainWindow/preload.ts delete mode 100644 packages/land_app/src/pages/mainWindow/timeline.ts delete mode 100644 packages/land_app/src/pages/mainWindow/timelineComp.tsx delete mode 100644 packages/land_app/src/state/sk.ts create mode 100644 packages/land_app/src/utils/h3-hexagon-layer.ts create mode 100644 packages/land_app/src/utils/position.ts create mode 160000 packages/private_configs diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 6b0eba8..dbdd47b 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -39,7 +39,11 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v3 - + - uses: LuisEnMarroquin/setup-ssh-action@v2.0.0 + with: + SSHKEY: ${{ secrets.CC_GA }} # ----- BEGIN RSA PRIVATE KEY----- ... + - run: ssh -T git@github.com || true + - run: git submodule update --init --recursive # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v2 diff --git a/.github/workflows/deploy_doc.yml b/.github/workflows/deploy_doc.yml index b9cd7bc..8e1f8fc 100644 --- a/.github/workflows/deploy_doc.yml +++ b/.github/workflows/deploy_doc.yml @@ -20,6 +20,11 @@ jobs: steps: - name: Checkout your repository using git uses: actions/checkout@v3 + - uses: LuisEnMarroquin/setup-ssh-action@v2.0.0 + with: + SSHKEY: ${{ secrets.CC_GA }} # ----- BEGIN RSA PRIVATE KEY----- ... + - run: ssh -T git@github.com || true + - run: git submodule update --init --recursive - name: Install, build, and upload your site uses: withastro/action@v0 with: diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 101db2e..e13190a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,7 +12,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - + - uses: LuisEnMarroquin/setup-ssh-action@v2.0.0 + with: + SSHKEY: ${{ secrets.CC_GA }} # ----- BEGIN RSA PRIVATE KEY----- ... + - run: ssh -T git@github.com || true + - run: git submodule update --init --recursive - name: Install pnpm uses: pnpm/action-setup@v2.2.4 @@ -32,7 +36,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - + - uses: LuisEnMarroquin/setup-ssh-action@v2.0.0 + with: + SSHKEY: ${{ secrets.CC_GA }} # ----- BEGIN RSA PRIVATE KEY----- ... + - run: ssh -T git@github.com || true + - run: git submodule update --init --recursive - name: Install pnpm uses: pnpm/action-setup@v2.2.4 diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 4a6f65e..e83cf47 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -10,6 +10,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - uses: LuisEnMarroquin/setup-ssh-action@v2.0.0 + with: + SSHKEY: ${{ secrets.CC_GA }} # ----- BEGIN RSA PRIVATE KEY----- ... + - run: ssh -T git@github.com || true + - run: git submodule update --init --recursive - name: Install pnpm uses: pnpm/action-setup@v2.2.4 @@ -41,6 +46,14 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - uses: LuisEnMarroquin/setup-ssh-action@v2.0.0 + with: + SSHKEY: ${{ secrets.CC_GA }} # ----- BEGIN RSA PRIVATE KEY----- ... + - run: ssh -T git@github.com || true + - run: git submodule update --init --recursive + with: + submodules: recursive + ssh-key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDkAa2Y049BCOYn0m2IINqBTjO18HtiOia4QRDkmClCy4/fQLcPsmQ7C7cE3TDGFNbIcm17jl3wQXCd8y1SBi6iWhcHXskI+HCtzN/NASBstljcuhx6gll3xjFhWj2XN2zwmpLzOVsCj7K34N8FRmEaPcrB3D0pKg89qO3SCPETFAwuzLFWsPzXWtDL6O90qbO1AGg2vQrucRvvIiQ2IOg8eMidXszgVi8kanfuh4zVRn+NINpNZMYFabkj6HfbGX9QyRyOS2cznKCG8MXIbIJiK9jTR0Yd0/WaUHRk69fBB0p5zhhVsrMvBAM/RjLKg1ePgJctYPTFPJMc59/MwCB3 cc_ga" - name: Install pnpm uses: pnpm/action-setup@v2.2.4 diff --git a/.gitmodules b/.gitmodules index 97d4ef1..fe0a56d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,7 @@ [submodule "packages/skboa"] path = packages/skvm/skboa url = git@github.com:chain-web/boa.git + +[submodule "configs"] + path = packages/private_configs + url = git@github.com:chain-web/private_configs.git diff --git a/package.json b/package.json index bd0d3a9..a705a32 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,58 @@ "dependencies": { "it-drain": "*" } + }, + "@deck.gl/mapbox": { + "dependencies": { + "@math.gl/web-mercator": "*" + } + }, + "@loaders.gl/3d-tiles": { + "dependencies": { + "@math.gl/culling": "*", + "@babel/runtime": "*" + } + }, + "@deck.gl/layers": { + "dependencies": { + "@luma.gl/core": "*" + } + }, + "@deck.gl+geo/layers": { + "dependencies": { + "@deck.gl/mesh-layers": "*" + } + }, + "@loaders.gl/gltf": { + "dependencies": { + "@babel/runtime": "*" + } + }, + "@loaders.gl/schema": { + "dependencies": { + "@babel/runtime": "*" + } + }, + "@loaders.gl/tiles": { + "dependencies": { + "@babel/runtime": "*" + } + }, + "@loaders.gl/mvt": { + "dependencies": { + "@babel/runtime": "*" + } + }, + "@deck.gl/mesh-layers": { + "dependencies": { + "@luma.gl/webgl": "*", + "@loaders.gl/schema": "*" + } + }, + "@math.gl/polygon": { + "dependencies": { + "@babel/runtime": "*" + } } } }, diff --git a/packages/common/config.d.ts b/packages/common/config.d.ts new file mode 100644 index 0000000..789c020 --- /dev/null +++ b/packages/common/config.d.ts @@ -0,0 +1,4 @@ +type PrivateConfigs = { + mapboxToken: string; + mapboxStyle: string; +}; diff --git a/packages/common/package.json b/packages/common/package.json index 637d51e..f88de26 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -12,6 +12,10 @@ "engines": { "node": ">=16.0.0" }, + "files": [ + "dist", + "src" + ], "type": "module", "keywords": [], "author": "", diff --git a/packages/common/src/index.mts b/packages/common/src/index.mts index 10bd697..40b678b 100644 --- a/packages/common/src/index.mts +++ b/packages/common/src/index.mts @@ -12,3 +12,8 @@ export type { SerdeJsValueTypes, SerdeJsObjectType, } from './serde/serdeJs/interface.mjs'; + +export type PrivateConfigs = { + mapboxToken: string; + mapboxStyle: string; +}; diff --git a/packages/docs/src/content/docs/zh-cn/dev_log/202307.md b/packages/docs/src/content/docs/zh-cn/dev_log/202307.md new file mode 100644 index 0000000..f993f57 --- /dev/null +++ b/packages/docs/src/content/docs/zh-cn/dev_log/202307.md @@ -0,0 +1,13 @@ +--- +title: 'Dev Log 2023-07' +description: '' +--- + +### 7-10~7-14 + +- [x] 创建了 land app 工程,用来做地图游戏开发 +- [x] 用私有的 repo: private_configs 来存储私有的配置文件,比如 mapbox token +- [x] 加入 mapbox + deck.gl + h3-js 的格子地图 + - [x] 调研、学习 deck.gl [怎么结合 mapbox 使用](https://deck.gl/docs/get-started/using-with-map) + - [x] 最开始想用 deck.gl 的 HexagonLayer 来实现大量格子渲染,但是发现这个 layer 不太灵活,最后选择了用 polygon Layer + h3-js 来实现(从 HexagonLayer 精简而来),最终只用来测试,还没实际用起来 + - [x] 用 mapboxOverlay + deck.gl 来实现了地图上添加 deck.gl 的图层,最终选用了这个方案 diff --git a/packages/land_app/package.json b/packages/land_app/package.json index a144bf5..7714dab 100644 --- a/packages/land_app/package.json +++ b/packages/land_app/package.json @@ -14,7 +14,24 @@ "node": ">=16.0.0" }, "dependencies": { + "@deck.gl/core": "^8.9.21", + "@deck.gl/extensions": "^8.9.21", + "@deck.gl/geo-layers": "^8.9.21", + "@deck.gl/layers": "^8.9.21", + "@deck.gl/mapbox": "^8.9.21", + "@deck.gl/mesh-layers": "^8.9.21", "@esbuild-plugins/node-globals-polyfill": "^0.2.3", + "@loaders.gl/core": "^3.4.7", + "@loaders.gl/gltf": "^3.4.7", + "@loaders.gl/images": "^3.4.7", + "@luma.gl/constants": "^8.5.20", + "@luma.gl/core": "^8.5.20", + "@luma.gl/engine": "^8.5.20", + "@luma.gl/gltools": "^8.5.20", + "@luma.gl/shadertools": "^8.5.20", + "@luma.gl/webgl": "^8.5.20", + "@math.gl/core": "^3.6.3", + "@math.gl/web-mercator": "^3.6.3", "@trustack/common": "workspace:^1.0.0", "@trustack/node-modules-polyfill": "^0.2.5", "@trustack/rollup-plugin-node-polyfills": "^0.2.2", @@ -22,8 +39,11 @@ "antd": "^5.6.4", "buffer": "^6.0.3", "esbuild": "^0.17.19", + "gl-matrix": "^3.4.3", + "h3-js": "^4.1.0", "i18next": "^22.5.1", "i18next-browser-languagedetector": "^7.1.0", + "mapbox-gl": "^2.15.0", "mime-types": "^2.1.35", "multiformats": "^11.0.2", "react": "^18.2.0", @@ -31,12 +51,14 @@ "react-i18next": "^12.3.1", "react-router": "^6.14.1", "react-router-dom": "^6.14.1", + "search-insights": "^2.7.0", "skchain": "workspace:^1.0.0", "xstate": "^4.38.0" }, "devDependencies": { "@playwright/test": "^1.35.1", "@rollup/plugin-inject": "^5.0.3", + "@types/mapbox-gl": "^2.7.11", "@types/react": "^18.2.14", "@types/react-dom": "^18.2.6", "@vitejs/plugin-react-swc": "^3.3.2", diff --git a/packages/land_app/src/App.css b/packages/land_app/src/App.css index 2c5e2ef..04945d2 100644 --- a/packages/land_app/src/App.css +++ b/packages/land_app/src/App.css @@ -1,8 +1,10 @@ #root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; + width: 100%; + height: 100%; +} + +.mapboxgl-ctrl-bottom-right { + display: none; } .logo { diff --git a/packages/land_app/src/chain/skchain.ts b/packages/land_app/src/chain/skchain.ts new file mode 100644 index 0000000..cd9e090 --- /dev/null +++ b/packages/land_app/src/chain/skchain.ts @@ -0,0 +1,10 @@ +import { SKChain } from 'skchain'; + +const createChain = () => { + const chain = new SKChain(); + return chain; +}; + +export const chain = createChain(); + +export const chainState = chain.chainState; diff --git a/packages/land_app/src/main.tsx b/packages/land_app/src/main.tsx index 6530da5..3a244cf 100644 --- a/packages/land_app/src/main.tsx +++ b/packages/land_app/src/main.tsx @@ -1,6 +1,9 @@ import React from 'react'; +import { ConfigProvider, theme } from 'antd'; import ReactDOM from 'react-dom/client'; import { BrowserRouter } from 'react-router-dom'; +import 'mapbox-gl/dist/mapbox-gl.css'; +import 'antd/dist/reset.css'; import './polyfill'; import App from './App'; import './index.css'; @@ -14,7 +17,13 @@ import './index.css'; ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( - + + + , ); diff --git a/packages/land_app/src/pages/mainWindow/components/Tabbar/index.scss b/packages/land_app/src/pages/mainWindow/components/Tabbar/index.scss new file mode 100644 index 0000000..151c3c7 --- /dev/null +++ b/packages/land_app/src/pages/mainWindow/components/Tabbar/index.scss @@ -0,0 +1,16 @@ +.tabbar-box { + .ant-tabs-nav { + margin-top: 0px; + padding: 10px 36px; + } + .tabbar-item-box { + height: calc(100vh - 80px); + position: relative; + overflow: hidden; + } +} + +#map-container { + width: 100%; + height: 100%; +} diff --git a/packages/land_app/src/pages/mainWindow/components/Tabbar/index.tsx b/packages/land_app/src/pages/mainWindow/components/Tabbar/index.tsx new file mode 100644 index 0000000..5eaa992 --- /dev/null +++ b/packages/land_app/src/pages/mainWindow/components/Tabbar/index.tsx @@ -0,0 +1,88 @@ +import { Button, Modal, Tabs } from 'antd'; +import { useActor } from '@xstate/react'; +import { useState } from 'react'; +// import GridDrawer from '../GridDrawer'; +import './index.scss'; +// import { Contract as CtrClass } from '../../contract/index'; +// import CtrCode from '../../contract/index.contract'; +// import { DeployContract } from '../../../test/components/contract/DeployContract'; +// import { TestContract } from '../../../test/components/contract/TestContract'; +// import { contractAddressKey } from '../../contract/mapContract'; +import { chainState } from '../../../../chain/skchain'; + +const TabPane = Tabs.TabPane; // TODO use item config +// const DeployContractComp = DeployContract(CtrClass, CtrCode); +// const TestContractComp = TestContract(CtrClass, CtrCode); +export default function Tabbar() { + const [showNodeModal, setshowNodeModal] = useState(true); + return ( +
+ + + {/* */} + {/* */} + {/* */} +
+ {/* */} + {/* { + setshowNodeModal(false); + }} + style={{ top: 0 }} + maskClosable={false} + footer={null} + > + { + localStorage.setItem(contractAddressKey, trans.recipient.did); + }} + /> + + */} + + {/* + + */} + + mine + + +
+ ); +} diff --git a/packages/land_app/src/pages/mainWindow/components/needPremission/index.scss b/packages/land_app/src/pages/mainWindow/components/needPremission/index.scss new file mode 100644 index 0000000..9d3172f --- /dev/null +++ b/packages/land_app/src/pages/mainWindow/components/needPremission/index.scss @@ -0,0 +1,16 @@ +.need-premission { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + width: 100%; + height: 100%; + + h2 { + text-align: center; + margin-top: 200px; + color: aquamarine; + font-size: 18px; + } +} diff --git a/packages/land_app/src/pages/mainWindow/components/needPremission/index.tsx b/packages/land_app/src/pages/mainWindow/components/needPremission/index.tsx new file mode 100644 index 0000000..1018143 --- /dev/null +++ b/packages/land_app/src/pages/mainWindow/components/needPremission/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import './index.scss'; + +export default function NeedPremission() { + return ( +
+

等待定位权限授予中

+
+ ); +} diff --git a/packages/land_app/src/pages/mainWindow/elements.ts b/packages/land_app/src/pages/mainWindow/elements.ts new file mode 100644 index 0000000..dbe7ee2 --- /dev/null +++ b/packages/land_app/src/pages/mainWindow/elements.ts @@ -0,0 +1,2056 @@ +// some data from https://github.com/FlorianFe/Elements/tree/master/periodic-table/shared +// color from http://jmol.sourceforge.net/jscolors/ use Jmol color +export const elementsMeta = { + empty: { + symbol: 'Empty', + name: 'Empty', + group: 'Empty', + 'atomic-number': 0, + 'electron-configuration': [{ s: 0, p: 0, d: 0, f: 0 }], + electronegativity: 0, + 'atomic-weight': 0, + 'melting-point': 0, + 'boiling-point': 0, + color: 'transparent', + }, + h: { + symbol: 'H', + name: 'Hydrogen', + group: 'other-nonmetal', + 'atomic-number': 1, + 'electron-configuration': [{ s: 1, p: 0, d: 0, f: 0 }], + electronegativity: 2.2, + 'atomic-weight': 1.0079, + 'melting-point': 13.99, + 'boiling-point': 20.271, + color: '#FFFFFF', + }, + he: { + symbol: 'He', + name: 'Helium', + group: 'noble-gas', + 'atomic-number': 2, + 'electron-configuration': [{ s: 2, p: 0, d: 0, f: 0 }], + electronegativity: 'no data', + 'atomic-weight': 4.0026, + 'melting-point': 0.95, + 'boiling-point': 4.222, + color: '#D9FFFF', + }, + li: { + symbol: 'Li', + name: 'Lithium', + group: 'alkali-metal', + 'atomic-number': 3, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 1, p: 0, d: 0, f: 0 }, + ], + electronegativity: 0.98, + 'atomic-weight': 6.94, + 'melting-point': 453.65, + 'boiling-point': 1603, + color: '#CC80FF', + }, + be: { + symbol: 'Be', + name: 'Beryllium', + group: 'alkaline-earth-metal', + 'atomic-number': 4, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.57, + 'atomic-weight': 9.0121831, + 'melting-point': 1560, + 'boiling-point': 2742, + color: '#C2FF00', + }, + b: { + symbol: 'B', + name: 'Boron', + group: 'metalloid', + 'atomic-number': 5, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 1, d: 0, f: 0 }, + ], + electronegativity: 2.04, + 'atomic-weight': 10.81, + 'melting-point': 2349, + 'boiling-point': 4200, + color: '#FFB5B5', + }, + c: { + symbol: 'C', + name: 'Carbon', + group: 'other-nonmetal', + 'atomic-number': 6, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 2, d: 0, f: 0 }, + ], + electronegativity: 2.55, + 'atomic-weight': 12.011, + 'melting-point': '-', + 'boiling-point': '-', + color: '#909090', + }, + n: { + symbol: 'N', + name: 'Nitrogen', + group: 'other-nonmetal', + 'atomic-number': 7, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 3, d: 0, f: 0 }, + ], + electronegativity: 3.04, + 'atomic-weight': 14.007, + 'melting-point': 63.15, + 'boiling-point': 77.355, + color: '#3050F8', + }, + o: { + symbol: 'O', + name: 'Oxygen', + group: 'other-nonmetal', + 'atomic-number': 8, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 4, d: 0, f: 0 }, + ], + electronegativity: 3.44, + 'atomic-weight': 15.999, + 'melting-point': 54.36, + 'boiling-point': 90.188, + color: '#FF0D0D', + }, + f: { + symbol: 'F', + name: 'Fluorine', + group: 'halogen', + 'atomic-number': 9, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 5, d: 0, f: 0 }, + ], + electronegativity: 3.98, + 'atomic-weight': 18.998403163, + 'melting-point': 53.48, + 'boiling-point': 85.03, + color: '#90E050', + }, + ne: { + symbol: 'Ne', + name: 'Neon', + group: 'noble-gas', + 'atomic-number': 10, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + ], + electronegativity: 'no data', + 'atomic-weight': 20.1797, + 'melting-point': 24.56, + 'boiling-point': 27.104, + color: '#B3E3F5', + }, + + na: { + symbol: 'Na', + name: 'Sodium', + group: 'alkali-metal', + 'atomic-number': 11, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 1, p: 0, d: 0, f: 0 }, + ], + electronegativity: 0.93, + 'atomic-weight': 22.98976928, + 'melting-point': 370.944, + 'boiling-point': 208.029, + color: '#AB5CF2', + }, + mg: { + symbol: 'Mg', + name: 'Magnesium', + group: 'alkaline-earth-metal', + 'atomic-number': 12, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.31, + 'atomic-weight': 24.305, + 'melting-point': 923, + 'boiling-point': 1363, + color: '#8AFF00', + }, + al: { + symbol: 'Al', + name: 'Aluminium', + group: 'post-transition-metal', + 'atomic-number': 13, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 1, d: 0, f: 0 }, + ], + electronegativity: 1.61, + 'atomic-weight': 26.9815385, + 'melting-point': 933.47, + 'boiling-point': 2743, + color: '#BFA6A6', + }, + si: { + symbol: 'Si', + name: 'Silicon', + group: 'metalloid', + 'atomic-number': 14, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 2, d: 0, f: 0 }, + ], + electronegativity: 1.9, + 'atomic-weight': 28.085, + 'melting-point': 1687, + 'boiling-point': 3538, + color: '#F0C8A0', + }, + p: { + symbol: 'P', + name: 'Phosphorus', + group: 'other-nonmetal', + 'atomic-number': 15, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 3, d: 0, f: 0 }, + ], + electronegativity: 2.19, + 'atomic-weight': 30.973761998, + 'melting-point': '-', + 'boiling-point': '-', + color: '#FF8000', + }, + s: { + symbol: 'S', + name: 'Sulfur', + group: 'other-nonmetal', + 'atomic-number': 16, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 4, d: 0, f: 0 }, + ], + electronegativity: '2.58', + 'atomic-weight': 32.06, + 'melting-point': '388.36', + 'boiling-point': '717.8', + color: '#FFFF30', + }, + cl: { + symbol: 'Cl', + name: 'Chlorine', + group: 'halogen', + 'atomic-number': 17, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 5, d: 0, f: 0 }, + ], + electronegativity: 3.16, + 'atomic-weight': 35.45, + 'melting-point': 171.6, + 'boiling-point': 239.11, + color: '#1FF01F', + }, + ar: { + symbol: 'Ar', + name: 'Argon', + group: 'noble-gas', + 'atomic-number': 18, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + ], + electronegativity: 'no data', + 'atomic-weight': 39.948, + 'melting-point': 83.81, + 'boiling-point': 87.302, + color: '#80D1E3', + }, + + k: { + symbol: 'K', + name: 'Potassium', + group: 'alkali-metal', + 'atomic-number': 19, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 1, p: 0, d: 0, f: 0 }, + ], + electronegativity: 0.82, + 'atomic-weight': 39.0983, + 'melting-point': 336.7, + 'boiling-point': 1032, + color: '#8F40D4', + }, + ca: { + symbol: 'Ca', + name: 'Calcium', + group: 'alkaline-earth-metal', + 'atomic-number': 20, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.0, + 'atomic-weight': 40.078, + 'melting-point': 1115, + 'boiling-point': 1757, + color: '#3DFF00', + }, + sc: { + symbol: 'Sc', + name: 'Scandium', + group: 'transition-metal', + 'atomic-number': 21, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 1, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.36, + 'atomic-weight': 44.955908, + 'melting-point': 1814, + 'boiling-point': 3109, + color: '#', + }, + ti: { + symbol: 'Ti', + name: 'Titanium', + group: 'transition-metal', + 'atomic-number': 22, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 2, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.54, + 'atomic-weight': 47.867, + 'melting-point': 1941, + 'boiling-point': 3560, + color: '#', + }, + v: { + symbol: 'V', + name: 'Vanadium', + group: 'transition-metal', + 'atomic-number': 23, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 3, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.63, + 'atomic-weight': 50.9415, + 'melting-point': 2183, + 'boiling-point': 3680, + color: '#', + }, + cr: { + symbol: 'Cr', + name: 'Chromium', + group: 'transition-metal', + 'atomic-number': 24, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 5, f: 0 }, + { s: 1, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.66, + 'atomic-weight': 51.9961, + 'melting-point': 2180, + 'boiling-point': 2944, + color: '#', + }, + mn: { + symbol: 'Mn', + name: 'Manganese', + group: 'transition-metal', + 'atomic-number': 25, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 5, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.55, + 'atomic-weight': 54.938044, + 'melting-point': 1519, + 'boiling-point': 2334, + color: '#', + }, + fe: { + symbol: 'Fe', + name: 'Iron', + group: 'transition-metal', + 'atomic-number': 26, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 6, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.83, + 'atomic-weight': 55.845, + 'melting-point': 1811, + 'boiling-point': 3134, + color: '#', + }, + co: { + symbol: 'Co', + name: 'Cobalt', + group: 'transition-metal', + 'atomic-number': 27, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 7, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.88, + 'atomic-weight': 58.933194, + 'melting-point': 1768, + 'boiling-point': 3200, + color: '#', + }, + ni: { + symbol: 'Ni', + name: 'Nickel', + group: 'transition-metal', + 'atomic-number': 28, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 8, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.91, + 'atomic-weight': 58.6934, + 'melting-point': 1728, + 'boiling-point': 3003, + color: '#', + }, + cu: { + symbol: 'Cu', + name: 'Copper', + group: 'transition-metal', + 'atomic-number': 29, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 1, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.9, + 'atomic-weight': 63.546, + 'melting-point': 1357.77, + 'boiling-point': 2835, + color: '#', + }, + zn: { + symbol: 'Zn', + name: 'Zinc', + group: 'transition-metal', + 'atomic-number': 30, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.65, + 'atomic-weight': 65.38, + 'melting-point': 692.68, + 'boiling-point': 1180, + color: '#', + }, + ga: { + symbol: 'Ga', + name: 'Gallium', + group: 'post-transition-metal', + 'atomic-number': 31, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 1, d: 0, f: 0 }, + ], + electronegativity: 1.81, + 'atomic-weight': 69.723, + 'melting-point': 302.9146, + 'boiling-point': 2673, + color: '#', + }, + ge: { + symbol: 'Ge', + name: 'Germanium', + group: 'metalloid', + 'atomic-number': 32, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 2, d: 0, f: 0 }, + ], + electronegativity: 2.01, + 'atomic-weight': 72.63, + 'melting-point': 1211.4, + 'boiling-point': 3106, + color: '#', + }, + as: { + symbol: 'As', + name: 'Arsenic', + group: 'metalloid', + 'atomic-number': 33, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 3, d: 0, f: 0 }, + ], + electronegativity: 2.18, + 'atomic-weight': 74.921595, + 'melting-point': '-', + 'boiling-point': '-', + color: '#', + }, + se: { + symbol: 'Se', + name: 'Selenium', + group: 'other-nonmetal', + 'atomic-number': 34, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 4, d: 0, f: 0 }, + ], + electronegativity: 2.55, + 'atomic-weight': 78.971, + 'melting-point': 494, + 'boiling-point': 958, + color: '#', + }, + br: { + symbol: 'Br', + name: 'Bromine', + group: 'halogen', + 'atomic-number': 35, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 5, d: 0, f: 0 }, + ], + electronegativity: 2.96, + 'atomic-weight': 79.904, + 'melting-point': 265.8, + 'boiling-point': 332.0, + color: '#', + }, + kr: { + symbol: 'Kr', + name: 'Krypton', + group: 'noble-gas', + 'atomic-number': 36, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + ], + electronegativity: 3.0, + 'atomic-weight': 83.798, + 'melting-point': 115.78, + 'boiling-point': 119.93, + color: '#', + }, + + rb: { + symbol: 'Rb', + name: 'Rubidium', + group: 'alkali-metal', + 'atomic-number': 37, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 1, p: 0, d: 0, f: 0 }, + ], + electronegativity: 0.82, + 'atomic-weight': 85.4678, + 'melting-point': 312.45, + 'boiling-point': 961, + color: '#', + }, + sr: { + symbol: 'Sr', + name: 'Strontium', + group: 'alkaline-earth-metal', + 'atomic-number': 38, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 0.95, + 'atomic-weight': 87.62, + 'melting-point': 1050, + 'boiling-point': 1650, + color: '#', + }, + y: { + symbol: 'Y', + name: 'Yttrium', + group: 'transition-metal', + 'atomic-number': 39, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 1, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.22, + 'atomic-weight': 88.90584, + 'melting-point': 1799, + 'boiling-point': 3203, + color: '#', + }, + zr: { + symbol: 'Zr', + name: 'Zirconium', + group: 'transition-metal', + 'atomic-number': 40, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 2, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.33, + 'atomic-weight': 91.224, + 'melting-point': 2128, + 'boiling-point': 4650, + color: '#', + }, + nb: { + symbol: 'Nb', + name: 'Niobium', + group: 'transition-metal', + 'atomic-number': 41, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 4, f: 0 }, + { s: 1, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.6, + 'atomic-weight': 92.90637, + 'melting-point': 2750, + 'boiling-point': 5017, + color: '#', + }, + mo: { + symbol: 'Mo', + name: 'Molybdenum', + group: 'transition-metal', + 'atomic-number': 42, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 5, f: 0 }, + { s: 1, p: 0, d: 0, f: 0 }, + ], + electronegativity: 2.16, + 'atomic-weight': 95.95, + 'melting-point': 2896, + 'boiling-point': 4912, + color: '#', + }, + tc: { + symbol: 'Tc', + name: 'Technetium', + group: 'transition-metal', + 'atomic-number': 43, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 5, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.9, + 'atomic-weight': '?', + 'melting-point': 2430, + 'boiling-point': 4538, + color: '#', + }, + ru: { + symbol: 'Ru', + name: 'Ruthenium', + group: 'transition-metal', + 'atomic-number': 44, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 7, f: 0 }, + { s: 1, p: 0, d: 0, f: 0 }, + ], + electronegativity: 2.2, + 'atomic-weight': 101.07, + 'melting-point': 2607, + 'boiling-point': 4423, + color: '#', + }, + + rh: { + symbol: 'Rh', + name: 'Rhodium', + group: 'transition-metal', + 'atomic-number': 45, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 8, f: 0 }, + { s: 1, p: 0, d: 0, f: 0 }, + ], + electronegativity: 2.28, + 'atomic-weight': 102.9055, + 'melting-point': 2237, + 'boiling-point': 3968, + color: '#', + }, + pd: { + symbol: 'Pd', + name: 'Palladium', + group: 'transition-metal', + 'atomic-number': 46, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 0, p: 0, d: 0, f: 0 }, + ], + electronegativity: 2.2, + 'atomic-weight': 106.42, + 'melting-point': 1828.05, + 'boiling-point': 3236, + color: '#', + }, + ag: { + symbol: 'Ag', + name: 'Silver', + group: 'transition-metal', + 'atomic-number': 47, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 1, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.93, + 'atomic-weight': 107.8682, + 'melting-point': 1234.93, + 'boiling-point': 2435, + color: '#', + }, + cd: { + symbol: 'Cd', + name: 'Cadmium', + group: 'transition-metal', + 'atomic-number': 48, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.69, + 'atomic-weight': 112.414, + 'melting-point': 594.22, + 'boiling-point': 1040, + color: '#', + }, + in: { + symbol: 'In', + name: 'Indium', + group: 'post-transition-metal', + 'atomic-number': 49, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 1, d: 0, f: 0 }, + ], + electronegativity: 1.78, + 'atomic-weight': 114.818, + 'melting-point': 429.7485, + 'boiling-point': 2345, + color: '#', + }, + sn: { + symbol: 'Sn', + name: 'Tin', + group: 'post-transition-metal', + 'atomic-number': 50, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 2, d: 0, f: 0 }, + ], + electronegativity: 1.96, + 'atomic-weight': 118.71, + 'melting-point': 505.08, + 'boiling-point': 2875, + color: '#', + }, + sb: { + symbol: 'Sb', + name: 'Antimony', + group: 'metalloid', + 'atomic-number': 51, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 3, d: 0, f: 0 }, + ], + electronegativity: 2.05, + 'atomic-weight': 121.76, + 'melting-point': 903.78, + 'boiling-point': 1908, + color: '#', + }, + te: { + symbol: 'Te', + name: 'Tellurium', + group: 'metalloid', + 'atomic-number': 52, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 4, d: 0, f: 0 }, + ], + electronegativity: 2.1, + 'atomic-weight': 127.6, + 'melting-point': 722.66, + 'boiling-point': 1261, + color: '#', + }, + i: { + symbol: 'I', + name: 'Iodine', + group: 'halogen', + 'atomic-number': 53, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 5, d: 0, f: 0 }, + ], + electronegativity: 2.66, + 'atomic-weight': 126.90447, + 'melting-point': 386.85, + 'boiling-point': 457.4, + color: '#', + }, + xe: { + symbol: 'Xe', + name: 'Xenon', + group: 'noble-gas', + 'atomic-number': 54, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + ], + electronegativity: 2.6, + 'atomic-weight': 131.293, + 'melting-point': 161.4, + 'boiling-point': 165.051, + color: '#', + }, + + cs: { + symbol: 'Cs', + name: 'Caesium', + group: 'alkali-metal', + 'atomic-number': 55, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 1, p: 0, d: 0, f: 0 }, + ], + electronegativity: 0.79, + 'atomic-weight': 132.90545196, + 'melting-point': 301.7, + 'boiling-point': 944, + color: '#', + }, + ba: { + symbol: 'Ba', + name: 'Barium', + group: 'alkaline-earth-metal', + 'atomic-number': 56, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: '?', + 'atomic-weight': 137.327, + 'melting-point': 1000, + 'boiling-point': 2118, + color: '#', + }, + hf: { + symbol: 'Hf', + name: 'Hafnium', + group: 'transition-metal', + 'atomic-number': 72, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 2, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.3, + 'atomic-weight': 178.49, + 'melting-point': 2506, + 'boiling-point': 4876, + color: '#', + }, + ta: { + symbol: 'Ta', + name: 'Tantalium', + group: 'transition-metal', + 'atomic-number': 73, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 3, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.5, + 'atomic-weight': 180.94788, + 'melting-point': 3290, + 'boiling-point': 5731, + color: '#', + }, + w: { + symbol: 'W', + name: 'Tungsten', + group: 'transition-metal', + 'atomic-number': 74, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 4, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 2.36, + 'atomic-weight': 183.84, + 'melting-point': 3695, + 'boiling-point': 6203, + color: '#', + }, + re: { + symbol: 'Re', + name: 'Rhenium', + group: 'transition-metal', + 'atomic-number': 75, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 5, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.9, + 'atomic-weight': 186.207, + 'melting-point': 3459, + 'boiling-point': 5903, + color: '#', + }, + os: { + symbol: 'Os', + name: 'Osmium', + group: 'transition-metal', + 'atomic-number': 76, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 6, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 2.2, + 'atomic-weight': 190.23, + 'melting-point': 3306, + 'boiling-point': 5285, + color: '#', + }, + ir: { + symbol: 'Ir', + name: 'Iridium', + group: 'transition-metal', + 'atomic-number': 77, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 7, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 2.2, + 'atomic-weight': 192.217, + 'melting-point': 2719, + 'boiling-point': 4403, + color: '#', + }, + pt: { + symbol: 'Pt', + name: 'Platinum', + group: 'transition-metal', + 'atomic-number': 78, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 9, f: 0 }, + { s: 1, p: 0, d: 0, f: 0 }, + ], + electronegativity: 2.28, + 'atomic-weight': 195.084, + 'melting-point': 2041.4, + 'boiling-point': 4098, + color: '#', + }, + au: { + symbol: 'Au', + name: 'Gold', + group: 'transition-metal', + 'atomic-number': 79, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 1, p: 0, d: 0, f: 0 }, + ], + electronegativity: 2.54, + 'atomic-weight': 196.966569, + 'melting-point': 1337.33, + 'boiling-point': 3243, + color: '#', + }, + hg: { + symbol: 'Hg', + name: 'Mercury', + group: 'transition-metal', + 'atomic-number': 80, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 2.0, + 'atomic-weight': 200.592, + 'melting-point': 234.321, + 'boiling-point': 629.88, + color: '#', + }, + tl: { + symbol: 'Tl', + name: 'Thallium', + group: 'post-transition-metal', + 'atomic-number': 81, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 1, d: 0, f: 0 }, + ], + electronegativity: 1.62, + 'atomic-weight': 204.38, + 'melting-point': 577, + 'boiling-point': 1746, + color: '#', + }, + pb: { + symbol: 'Pb', + name: 'Lead', + group: 'post-transition-metal', + 'atomic-number': 82, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 2, d: 0, f: 0 }, + ], + electronegativity: 1.87, + 'atomic-weight': 207.2, + 'melting-point': 600.61, + 'boiling-point': 2022, + color: '#', + }, + bi: { + symbol: 'Bi', + name: 'Bismuth', + group: 'post-transition-metal', + 'atomic-number': 83, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 3, d: 0, f: 0 }, + ], + electronegativity: 2.02, + 'atomic-weight': 208.9804, + 'melting-point': 544.7, + 'boiling-point': 1837, + color: '#', + }, + po: { + symbol: 'Po', + name: 'Polonium', + group: 'metalloid', + 'atomic-number': 84, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 4, d: 0, f: 0 }, + ], + electronegativity: 2.0, + 'atomic-weight': 209, + 'melting-point': 527, + 'boiling-point': 1235, + color: '#', + }, + at: { + symbol: 'At', + name: 'Astatine', + group: 'halogen', + 'atomic-number': 85, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 5, d: 0, f: 0 }, + ], + electronegativity: 2.2, + 'atomic-weight': 210, + 'melting-point': 575, + 'boiling-point': 610, + color: '#', + }, + rn: { + symbol: 'Rn', + name: 'Radon', + group: 'noble-gas', + 'atomic-number': 86, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + ], + electronegativity: 2.2, + 'atomic-weight': 222, + 'melting-point': 202, + 'boiling-point': 211.5, + color: '#', + }, + + fr: { + symbol: 'Fr', + name: 'Francium', + group: 'alkali-metal', + 'atomic-number': 87, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 1, p: 0, d: 0, f: 0 }, + ], + electronegativity: '> 0.79', + 'atomic-weight': 223, + 'melting-point': '300 (?)', + 'boiling-point': '950 (?)', + color: '#', + }, + ra: { + symbol: 'Ra', + name: 'Radium', + group: 'alkaline-earth-metal', + 'atomic-number': 88, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 0.9, + 'atomic-weight': 226, + 'melting-point': 973, + 'boiling-point': 2010, + color: '#', + }, + rf: { + symbol: 'Rf', + name: 'Rutherfordium', + group: 'transition-metal', + 'atomic-number': 104, + 'electron-configuration': '2', + electronegativity: '?', + 'atomic-weight': 4.0026, + 'melting-point': '?', + 'boiling-point': '?', + color: '#', + }, + db: { + symbol: 'Db', + name: 'Dubnium', + group: 'transition-metal', + 'atomic-number': 105, + 'electron-configuration': '2', + electronegativity: '?', + 'atomic-weight': 4.0026, + 'melting-point': '?', + 'boiling-point': '?', + color: '#', + }, + sg: { + symbol: 'Sg', + name: 'Seaborgium', + group: 'transition-metal', + 'atomic-number': 106, + 'electron-configuration': '2', + electronegativity: '?', + 'atomic-weight': 4.0026, + 'melting-point': '?', + 'boiling-point': '?', + color: '#', + }, + bh: { + symbol: 'Bh', + name: 'Bohrium', + group: 'transition-metal', + 'atomic-number': 107, + 'electron-configuration': '2', + electronegativity: '?', + 'atomic-weight': 4.0026, + 'melting-point': '?', + 'boiling-point': '?', + color: '#', + }, + hs: { + symbol: 'Hs', + name: 'Hassium', + group: 'transition-metal', + 'atomic-number': 108, + 'electron-configuration': '2', + electronegativity: '?', + 'atomic-weight': 4.0026, + 'melting-point': '?', + 'boiling-point': '?', + color: '#', + }, + mt: { + symbol: 'Mt', + name: 'Meitnerium', + group: 'transition-metal', + 'atomic-number': 109, + 'electron-configuration': '2', + electronegativity: '?', + 'atomic-weight': 4.0026, + 'melting-point': '?', + 'boiling-point': '?', + color: '#', + }, + ds: { + symbol: 'Ds', + name: 'Darmstadtium', + group: 'transition-metal', + 'atomic-number': 110, + 'electron-configuration': '2', + electronegativity: '?', + 'atomic-weight': 4.0026, + 'melting-point': '?', + 'boiling-point': '?', + color: '#', + }, + rg: { + symbol: 'Rg', + name: 'Roentgenium', + group: 'transition-metal', + 'atomic-number': 111, + 'electron-configuration': '2', + electronegativity: '?', + 'atomic-weight': 4.0026, + 'melting-point': '?', + 'boiling-point': '?', + color: '#', + }, + cn: { + symbol: 'Cn', + name: 'Copernium', + group: 'transition-metal', + 'atomic-number': 112, + 'electron-configuration': '2', + electronegativity: '?', + 'atomic-weight': 4.0026, + 'melting-point': '?', + 'boiling-point': '?', + color: '#', + }, + nh: { + symbol: 'Nh', + name: 'Nihonium', + group: 'post-transition-metal', + 'atomic-number': 113, + 'electron-configuration': '2', + electronegativity: '?', + 'atomic-weight': 4.0026, + 'melting-point': '?', + 'boiling-point': '?', + color: '#', + }, + fl: { + symbol: 'Fl', + name: 'Flerovium', + group: 'post-transition-metal', + 'atomic-number': 114, + 'electron-configuration': '2', + electronegativity: '?', + 'atomic-weight': 4.0026, + 'melting-point': '?', + 'boiling-point': '?', + color: '#', + }, + mc: { + symbol: 'Mc', + name: 'Moscovium', + group: 'post-transition-metal', + 'atomic-number': 115, + 'electron-configuration': '2', + electronegativity: '?', + 'atomic-weight': 4.0026, + 'melting-point': '?', + 'boiling-point': '?', + color: '#', + }, + lv: { + symbol: 'Lv', + name: 'Livermorium', + group: 'post-transition-metal', + 'atomic-number': 116, + 'electron-configuration': '2', + electronegativity: '?', + 'atomic-weight': 4.0026, + 'melting-point': '?', + 'boiling-point': '?', + color: '#', + }, + ts: { + symbol: 'Ts', + name: 'Tennessine', + group: 'halogen', + 'atomic-number': 117, + 'electron-configuration': '2', + electronegativity: '?', + 'atomic-weight': 4.0026, + 'melting-point': '?', + 'boiling-point': '?', + color: '#', + }, + og: { + symbol: 'Og', + name: 'Oganesson', + group: 'noble-gas', + 'atomic-number': 118, + 'electron-configuration': '2', + electronegativity: '?', + 'atomic-weight': 4.0026, + 'melting-point': '?', + 'boiling-point': '?', + color: '#', + }, + + la: { + symbol: 'La', + name: 'Lanthanum', + group: 'lanthanide', + 'atomic-number': 57, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 1, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.1, + 'atomic-weight': 138.90547, + 'melting-point': 1193, + 'boiling-point': 3737, + color: '#', + }, + ce: { + symbol: 'Ce', + name: 'Cerium', + group: 'lanthanide', + 'atomic-number': 58, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 1 }, + { s: 2, p: 6, d: 1, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.12, + 'atomic-weight': 140.116, + 'melting-point': 1068, + 'boiling-point': 3716, + color: '#', + }, + pr: { + symbol: 'Pr', + name: 'Praseodymium', + group: 'lanthanide', + 'atomic-number': 59, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 3 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.13, + 'atomic-weight': 140.90766, + 'melting-point': 1208, + 'boiling-point': 3403, + color: '#', + }, + nd: { + symbol: 'Nd', + name: 'Neodymium', + group: 'lanthanide', + 'atomic-number': 60, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 4 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.14, + 'atomic-weight': 144.242, + 'melting-point': 1297, + 'boiling-point': 3347, + color: '#', + }, + pm: { + symbol: 'Pm', + name: 'Promethium', + group: 'lanthanide', + 'atomic-number': 61, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 5 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: '1.13 (?)', + 'atomic-weight': 145, + 'melting-point': 1315, + 'boiling-point': 3273, + color: '#', + }, + sm: { + symbol: 'Sm', + name: 'Samarium', + group: 'lanthanide', + 'atomic-number': 62, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 6 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.17, + 'atomic-weight': 150.36, + 'melting-point': 1345, + 'boiling-point': 2173, + color: '#', + }, + eu: { + symbol: 'Eu', + name: 'Europium', + group: 'lanthanide', + 'atomic-number': 63, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 7 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.2, + 'atomic-weight': 151.964, + 'melting-point': 1099, + 'boiling-point': 1802, + color: '#', + }, + gd: { + symbol: 'Gd', + name: 'Gadolinium', + group: 'lanthanide', + 'atomic-number': 64, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 7 }, + { s: 2, p: 6, d: 1, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.2, + 'atomic-weight': 157.25, + 'melting-point': 1585, + 'boiling-point': 3273, + color: '#', + }, + tb: { + symbol: 'Tb', + name: 'Terbium', + group: 'lanthanide', + 'atomic-number': 65, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 9 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: '1.2 (?)', + 'atomic-weight': 158.92535, + 'melting-point': 1629, + 'boiling-point': 3396, + color: '#', + }, + dy: { + symbol: 'Dy', + name: 'Dysprosium', + group: 'lanthanide', + 'atomic-number': 66, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 10 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.22, + 'atomic-weight': 162.5, + 'melting-point': 1680, + 'boiling-point': 2840, + color: '#', + }, + ho: { + symbol: 'Ho', + name: 'Holmium', + group: 'lanthanide', + 'atomic-number': 67, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 11 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.23, + 'atomic-weight': 164.93033, + 'melting-point': 1734, + 'boiling-point': 2873, + color: '#', + }, + er: { + symbol: 'Er', + name: 'Erbium', + group: 'lanthanide', + 'atomic-number': 68, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 12 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.24, + 'atomic-weight': 167.259, + 'melting-point': 1802, + 'boiling-point': 3141, + color: '#', + }, + tm: { + symbol: 'Tm', + name: 'Thulium', + group: 'lanthanide', + 'atomic-number': 69, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 13 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.25, + 'atomic-weight': 168.93422, + 'melting-point': 1818, + 'boiling-point': 2223, + color: '#', + }, + yb: { + symbol: 'Yb', + name: 'Ytterbium', + group: 'lanthanide', + 'atomic-number': 70, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: '1.1 (?)', + 'atomic-weight': 173.045, + 'melting-point': 1097, + 'boiling-point': 1469, + color: '#', + }, + lu: { + symbol: 'Lu', + name: 'Lutetium', + group: 'lanthanide', + 'atomic-number': 71, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 1, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.27, + 'atomic-weight': 174.9668, + 'melting-point': 1925, + 'boiling-point': 3675, + color: '#', + }, + + ac: { + symbol: 'Ac', + name: 'Actinium', + group: 'actinide', + 'atomic-number': 89, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 1, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.1, + 'atomic-weight': 227, + 'melting-point': 1500, + 'boiling-point': 3500, + color: '#', + }, + th: { + symbol: 'Th', + name: 'Thorium', + group: 'actinide', + 'atomic-number': 90, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 2, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.3, + 'atomic-weight': 232.0377, + 'melting-point': 2023, + 'boiling-point': 5061, + color: '#', + }, + pa: { + symbol: 'Pa', + name: 'Protactinium', + group: 'actinide', + 'atomic-number': 91, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 2 }, + { s: 2, p: 6, d: 1, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.5, + 'atomic-weight': 231.03588, + 'melting-point': 1841, + 'boiling-point': 4300, + color: '#', + }, + u: { + symbol: 'U', + name: 'Uranium', + group: 'actinide', + 'atomic-number': 92, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 3 }, + { s: 2, p: 6, d: 1, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.38, + 'atomic-weight': 238.02891, + 'melting-point': 1405.3, + 'boiling-point': 4404, + color: '#', + }, + np: { + symbol: 'Np', + name: 'Neptunium', + group: 'actinide', + 'atomic-number': 93, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 4 }, + { s: 2, p: 6, d: 1, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.36, + 'atomic-weight': 237, + 'melting-point': 912, + 'boiling-point': 4447, + color: '#', + }, + pu: { + symbol: 'Pu', + name: 'Plutonium', + group: 'actinide', + 'atomic-number': 94, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 6 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.28, + 'atomic-weight': 244, + 'melting-point': 912.5, + 'boiling-point': 3505, + color: '#', + }, + am: { + symbol: 'Am', + name: 'Americum', + group: 'actinide', + 'atomic-number': 95, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 7 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.3, + 'atomic-weight': 243, + 'melting-point': 1449, + 'boiling-point': 2880, + color: '#', + }, + cm: { + symbol: 'Cm', + name: 'Curium', + group: 'actinide', + 'atomic-number': 96, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 7 }, + { s: 2, p: 6, d: 1, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: '1.3', + 'atomic-weight': 247, + 'melting-point': '1613', + 'boiling-point': '3383', + color: '#', + }, + bk: { + symbol: 'Bk', + name: 'Berkelium', + group: 'actinide', + 'atomic-number': 97, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 9 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.3, + 'atomic-weight': 247, + 'melting-point': 1259, + 'boiling-point': 2900, + color: '#', + }, + cf: { + symbol: 'Cf', + name: 'Californium', + group: 'actinide', + 'atomic-number': 98, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 10 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.3, + 'atomic-weight': 251, + 'melting-point': 1173, + 'boiling-point': 1743, + color: '#', + }, + es: { + symbol: 'Es', + name: 'Einsteinium', + group: 'actinide', + 'atomic-number': 99, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 11 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.3, + 'atomic-weight': 252, + 'melting-point': 1133, + 'boiling-point': 1269, + color: '#', + }, + fm: { + symbol: 'Fm', + name: 'Fermium', + group: 'actinide', + 'atomic-number': 100, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 12 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.3, + 'atomic-weight': 257, + 'melting-point': 1800, + 'boiling-point': '-', + color: '#', + }, + md: { + symbol: 'Md', + name: 'Mendelevium', + group: 'actinide', + 'atomic-number': 101, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 13 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.3, + 'atomic-weight': 258, + 'melting-point': 1100, + 'boiling-point': '-', + color: '#', + }, + no: { + symbol: 'No', + name: 'Nobelium', + group: 'actinide', + 'atomic-number': 102, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 0, d: 0, f: 0 }, + ], + electronegativity: 1.3, + 'atomic-weight': 259, + 'melting-point': 1100, + 'boiling-point': '-', + color: '#', + }, + lr: { + symbol: 'Lr', + name: 'Lawrencium', + group: 'actinide', + 'atomic-number': 103, + 'electron-configuration': [ + { s: 2, p: 0, d: 0, f: 0 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 6, d: 10, f: 0 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 10, f: 14 }, + { s: 2, p: 6, d: 0, f: 0 }, + { s: 2, p: 1, d: 0, f: 0 }, + ], + electronegativity: 1.3, + 'atomic-weight': 266, + 'melting-point': 1900, + 'boiling-point': '-', + color: '#', + }, +}; + +export type ElementTypes = keyof typeof elementsMeta; diff --git a/packages/land_app/src/pages/mainWindow/index.tsx b/packages/land_app/src/pages/mainWindow/index.tsx index 2786a32..6d36054 100644 --- a/packages/land_app/src/pages/mainWindow/index.tsx +++ b/packages/land_app/src/pages/mainWindow/index.tsx @@ -1,21 +1,16 @@ -import { Button } from 'antd'; -import { useState } from 'react'; -import { useTranslation } from 'react-i18next'; -import ChangeI18n from '../../config/i18n/i18nSelect'; -import { lanKeys } from './index.i18n'; -import { Timeline } from './timelineComp'; +import { useEffect } from 'react'; +// import ChangeI18n from '../../config/i18n/i18nSelect'; +import Tabbar from './components/Tabbar'; +import { mapAction } from './map'; export function MainWindow() { - const [t] = useTranslation(); - const [passed, setPass] = useState(false); - const [skvmPassed, setSkvmPass] = useState(false); + useEffect(() => { + console.log('MainWindow init'); + mapAction.init(); + }, []); return ( -
- - - +
+
); } diff --git a/packages/land_app/src/pages/mainWindow/map.ts b/packages/land_app/src/pages/mainWindow/map.ts new file mode 100644 index 0000000..fc44ba7 --- /dev/null +++ b/packages/land_app/src/pages/mainWindow/map.ts @@ -0,0 +1,183 @@ +import { cellToBoundary, gridDisk, latLngToCell } from 'h3-js'; +import mapboxgl, { LngLat, Map as MapBox } from 'mapbox-gl'; +import { MapboxOverlay } from '@deck.gl/mapbox/typed'; +import type { LayersList } from '@deck.gl/core/typed'; +import { GeoJsonLayer } from '@deck.gl/layers/typed'; +import { PositionControl } from '../../utils/position'; +import { preLoadMapSource } from './preload'; + +mapboxgl.accessToken = __privateConfigs__.mapboxToken; + +export class MapAction { + map!: MapBox; // init by init function + deckMap!: MapboxOverlay; // init by init function + center!: LngLat; // init by init function + positionControl!: PositionControl; // init by init function + + inited = false; + + cells: string[] = []; // 当前可视区域内的格子 + deckLayers: LayersList = []; + + getinggGridList = false; + getinggGridData = false; + + init = async (): Promise => { + if (this.map) { + return; + } + this.positionControl = new PositionControl((lng, lat) => { + this.center = new LngLat(lng, lat); + }); + await this.positionControl.init(); + const map = new MapBox({ + container: 'map-container', + style: __privateConfigs__.mapboxStyle, + antialias: true, + center: this.center, + zoom: 18, + }); + this.map = map; + await Promise.all([this.mapLoad(), preLoadMapSource(this.map)]); + const deck = new MapboxOverlay({ id: 'deckgl' }); + this.map.addControl(deck); + this.inited = true; + this.center = this.map.getCenter(); + // this.getinggGridList = true; + // await this.getCellsByLngLat(this.center.lng, this.center.lat); + // this.getinggGridList = false; + this.bindClickEvent(); + // this.map.on('dragend', () => { + // if (this.getinggGridList) { + // return; + // } + // this.getCurrentGrids(); + // }); + }; + + private mapLoad = async () => { + return new Promise((reslove) => { + this.map.on('load', () => { + reslove(true); + }); + }); + }; + + private bindClickEvent = async () => { + this.map.on('click', async (e) => { + const lngLat = e.lngLat; + const hex = latLngToCell(lngLat.lat, lngLat.lng, 13); + + const geo = cellToBoundary(hex, true); + const layer = new GeoJsonLayer({ + id: `geojson-layer-${hex}`, + data: { + type: 'FeatureCollection', + features: [ + { + type: 'Feature', + properties: {}, + geometry: { + type: 'Polygon', + coordinates: [geo].map((ele) => { + return [...ele]; + }), + }, + }, + ], + }, + }); + this.deckLayers.push(layer); + this.deckMap.setProps({ layers: this.deckLayers }); + // mapStateService.send(MapEventType.UPDATE_GRID, { + // data: { showGridDetail: true, activeHex: hex }, + // }); + }); + }; + + private getCellsByLngLat = async (lng: number, lat: number) => { + // const bounds = this.map.getBounds(); + // const polygon = [ + // [bounds.getNorthWest().lng, bounds.getNorthWest().lat], + // [bounds.getNorthEast().lng, bounds.getNorthEast().lat], + // [bounds.getSouthEast().lng, bounds.getSouthEast().lat], + // [bounds.getSouthWest().lng, bounds.getSouthWest().lat], + // ]; + // console.log(polygon); + const centerCell = latLngToCell(lat, lng, 13); + const cells = gridDisk(centerCell, 90); + this.cells = cells; + // await this.getGridData(); + // this.addDefaultHexLayer(); // test + }; + + // getGridData = async () => { + // if (this.getinggGridData) { + // setTimeout(() => { + // this.getGridData(); + // }, 500); + // } + // this.getinggGridData = true; + // for (let i = 0; i < this.grids.length; i++) { + // const grid = this.grids[i]; + // const gridData = await getGridData(grid.hexid); + // if (gridData?.owner) { + // let color = ''; + // if (gridData.data.type === GridType.factoryL0) { + // color = elementsMeta[gridData.data.element].color; + // } + // this.addGridLayer(grid, { + // outline: gridTypeColor[gridData.data.type], + // color, + // }); + // } + // // console.log(img, gridData); + // } + // this.getinggGridData = false; + // }; + + // addGridLayer = (grid: HexItem, opt: { outline?: string; color?: string }) => { + // const id = grid.hexid.replace(this.featureIdReg, ''); + // const layerId = `${id}-fills`; + // if (!this.map.getSource(id)) { + // this.map.addSource(id, { + // type: 'geojson', + // data: { + // type: 'FeatureCollection', + // features: [ + // { + // type: 'Feature', + // id: `${id}-grid`, + // properties: { center: grid.center, id: grid.hexid }, + // geometry: { + // type: 'Polygon', + // coordinates: [grid.polygon], + // }, + // }, + // ], + // }, + // }); + // } + + // if (this.map.getLayer(layerId)) { + // this.map.removeLayer(layerId); + // } + // const paint: FillPaint = {}; + // if (opt.color) { + // paint['fill-color'] = opt.color; + // } + // if (opt.outline) { + // paint['fill-outline-color'] = opt.outline; + // } + + // this.map.addLayer({ + // id: layerId, + // type: 'fill', + // source: id, + // layout: {}, + // paint, + // }); + // }; +} + +export const mapAction = new MapAction(); diff --git a/packages/land_app/src/pages/mainWindow/preload.ts b/packages/land_app/src/pages/mainWindow/preload.ts new file mode 100644 index 0000000..60ea360 --- /dev/null +++ b/packages/land_app/src/pages/mainWindow/preload.ts @@ -0,0 +1,32 @@ +import type { Map } from 'mapbox-gl'; +// import { GridType } from './contract/interface'; + +export const gridTypeColor = { + // [GridType.empty]: '#565656', + // [GridType.factoryL0]: '#f1f1f1', +}; + +export const preLoadMapSource = async (map: Map): Promise => { + const imgMap: { [key: string]: { url: string } } = { + blackGrid: { + url: 'https://wudao.aminer.cn/api/cogview/get-image/f9090f5c4679e5f0/1653632448178/6.jpg', + }, + clay: { + url: 'https://wudao.aminer.cn/api/cogview/get-image/f9090f5c4679e5f0/1653632448178/1.jpg', + }, + }; + await Promise.all( + Object.keys(imgMap).map((key) => { + return new Promise((reslove, reject) => { + const item = imgMap[key]; + map.loadImage(item.url, (e, res) => { + if (e) { + console.error('load img', item.url, 'err:', e); + } + map.addImage(key, res as ImageBitmap); + reslove(true); + }); + }); + }), + ); +}; diff --git a/packages/land_app/src/pages/mainWindow/timeline.ts b/packages/land_app/src/pages/mainWindow/timeline.ts deleted file mode 100644 index 824c1e5..0000000 --- a/packages/land_app/src/pages/mainWindow/timeline.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Button } from 'antd'; -import { useState } from 'react'; -// import { Chart } from '@antv/g2'; - -const labelFormatter = (d: number) => d; -// const left = (d) => d.end > -1500 && d.start > -3000; - -// chart.coordinate({ transform: [{ type: 'transpose' }] }); - -// .transform({ type: 'sortX', by: 'y' }) -// .transform({ type: 'sortColor', by: 'y', reducer: 'min' }) -// .axis('y', [ -// { -// tickCount: 5, -// labelFormatter, -// grid: null, -// title: null, -// labelTextAlign: 'start', -// }, -// { -// position: 'top', -// labelFormatter, -// title: null, -// labelTextAlign: 'start', -// }, -// ]) -// .axis('x', false) -// .encode('x', 'civilization') -// .encode('y', ['start', 'end']) -// .encode('color', 'region') -// .scale('color', { palette: 'set2' }); -// .label({ -// text: 'civilization', -// position: (d) => (left(d) ? 'left' : 'right'), -// style: { -// textAlign: (d) => (left(d) ? 'end' : 'start'), -// dx: (d) => (left(d) ? -5 : 5), -// fontSize: 10, -// }, -// }); - -export const renderPl = (data: any[]): void => { - // const chart = new Chart({ - // container: 'container', - // width: 900, - // height: 1000, - // }); - // chart.interval().data = data; - // chart.render(); -}; diff --git a/packages/land_app/src/pages/mainWindow/timelineComp.tsx b/packages/land_app/src/pages/mainWindow/timelineComp.tsx deleted file mode 100644 index ead8cfa..0000000 --- a/packages/land_app/src/pages/mainWindow/timelineComp.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { Button, Input } from 'antd'; -import React, { useState } from 'react'; -import { renderPl } from './timeline'; - -export function Timeline() { - const [pl, setPl] = useState('{}'); - return ( -
-
- { - setPl(e.tatget.value); - }} - /> - -
- - {/*
- - {skvmPassed.toString()} -
*/} -
- ); -} diff --git a/packages/land_app/src/state/sk.ts b/packages/land_app/src/state/sk.ts deleted file mode 100644 index f96423e..0000000 --- a/packages/land_app/src/state/sk.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { SKChain } from 'skchain'; - -export const chain = {} as unknown as SKChain; - -export const chainState = chain.chainState; diff --git a/packages/land_app/src/utils/h3-hexagon-layer.ts b/packages/land_app/src/utils/h3-hexagon-layer.ts new file mode 100644 index 0000000..73dfa29 --- /dev/null +++ b/packages/land_app/src/utils/h3-hexagon-layer.ts @@ -0,0 +1,192 @@ +import type { H3Index } from 'h3-js'; +import { cellToBoundary, cellToLatLng } from 'h3-js'; +import { lerp } from '@math.gl/core'; +import type { + DefaultProps, + Layer, + LayersList, + UpdateParameters, +} from '@deck.gl/core/typed'; +import { CompositeLayer } from '@deck.gl/core/typed'; +import type { PolygonLayerProps } from '@deck.gl/layers/typed'; +import { PolygonLayer } from '@deck.gl/layers/typed'; + +// normalize longitudes w.r.t center (refLng), when not provided first vertex +export function normalizeLongitudes( + vertices: number[][], + refLng?: number, +): void { + refLng = refLng === undefined ? vertices[0][0] : refLng; + for (const pt of vertices) { + const deltaLng = pt[0] - refLng; + if (deltaLng > 180) { + pt[0] -= 360; + } else if (deltaLng < -180) { + pt[0] += 360; + } + } +} + +// scale polygon vertices w.r.t center (hexId) +export function scalePolygon( + hexId: H3Index, + vertices: number[][], + factor: number, +): void { + const [lat, lng] = cellToLatLng(hexId); + const actualCount = vertices.length; + + // normalize with respect to center + normalizeLongitudes(vertices, lng); + + // `cellToBoundary` returns same array object for first and last vertex (closed polygon), + // if so skip scaling the last vertex + const vertexCount = + vertices[0] === vertices[actualCount - 1] ? actualCount - 1 : actualCount; + for (let i = 0; i < vertexCount; i++) { + vertices[i][0] = lerp(lng, vertices[i][0], factor); + vertices[i][1] = lerp(lat, vertices[i][1], factor); + } +} + +function h3ToPolygon(hexId: H3Index, coverage: number = 1): number[][] { + const vertices = cellToBoundary(hexId, true); + + if (coverage !== 1) { + // scale and normalize vertices w.r.t to center + scalePolygon(hexId, vertices, coverage); + } else { + // normalize w.r.t to start vertex + normalizeLongitudes(vertices); + } + + return vertices; +} + +function flattenPolygon(vertices: number[][]): Float64Array { + const positions = new Float64Array(vertices.length * 2); + let i = 0; + for (const pt of vertices) { + positions[i++] = pt[0]; + positions[i++] = pt[1]; + } + return positions; +} + +const defaultProps: DefaultProps = { + ...PolygonLayer.defaultProps, +}; + +/** All properties supported by H3HexagonLayer */ +export type H3HexagonLayerProps = PolygonLayerProps & { + type: any; +}; + +/** + * Render hexagons from the [H3](https://h3geo.org/) geospatial indexing system. + */ +export class H3HexLayer< + DataT = any, + ExtraPropsT extends {} = {}, +> extends CompositeLayer>> { + static defaultProps = defaultProps; + static layerName = 'H3HexagonLayer'; + + initializeState(): void { + this.state = { + edgeLengthKM: 0, + resolution: -1, + }; + } + + shouldUpdateState({ changeFlags }: UpdateParameters): boolean { + return changeFlags.propsOrDataChanged; + } + + updateState({ props, changeFlags }: UpdateParameters): void { + // this.setState(dataProps); + } + + renderLayers(): Layer | null | LayersList { + return this._renderPolygonLayer(); + } + + private _getForwardProps() { + const { + elevationScale, + material, + extruded, + wireframe, + stroked, + filled, + lineWidthUnits, + lineWidthScale, + lineWidthMinPixels, + lineWidthMaxPixels, + getFillColor, + getElevation, + getLineColor, + getLineWidth, + transitions, + updateTriggers, + } = this.props; + + return { + elevationScale, + extruded, + wireframe, + stroked, + filled, + lineWidthUnits, + lineWidthScale, + lineWidthMinPixels, + lineWidthMaxPixels, + material, + getElevation, + getFillColor, + getLineColor, + getLineWidth, + transitions, + updateTriggers: { + getFillColor: updateTriggers.getFillColor, + getElevation: updateTriggers.getElevation, + getLineColor: updateTriggers.getLineColor, + getLineWidth: updateTriggers.getLineWidth, + } as { + getFillColor: any; + getElevation: any; + getLineColor: any; + getLineWidth: any; + getPolygon?: any; + getPosition?: any; + }, + }; + } + + private _renderPolygonLayer(): PolygonLayer { + const { data } = this.props; + + const SubLayerClass = this.getSubLayerClass( + 'hexagon-cell-hifi', + PolygonLayer, + ); + const forwardProps = this._getForwardProps(); + + return new SubLayerClass( + forwardProps, + this.getSubLayerProps({ + id: 'hexagon-cell-hifi', + updateTriggers: forwardProps.updateTriggers, + }), + { + data, + _normalize: false, + _windingOrder: 'CCW', + positionFormat: 'XY', + getPolygon: (hex: string) => { + return flattenPolygon(h3ToPolygon(hex, 0.8)); + }, + }, + ); + } +} diff --git a/packages/land_app/src/utils/position.ts b/packages/land_app/src/utils/position.ts new file mode 100644 index 0000000..3c9eafa --- /dev/null +++ b/packages/land_app/src/utils/position.ts @@ -0,0 +1,61 @@ +type OnPositionChange = (long: number, lat: number) => void; + +export class PositionControl { + constructor(cb: OnPositionChange) { + this.cb = cb; + } + cb: OnPositionChange; + currentPosition!: [number, number]; + watchId!: number; + + listenPostion = (): Promise => { + // 监听位置变化,地图跟随 + return new Promise((resolve, reject) => { + this.watchId = navigator.geolocation.watchPosition( + (res) => { + this.handlePosition(res); + resolve(); + }, + (err) => { + console.log(err); + reject(err); + }, + { enableHighAccuracy: true }, + ); + }); + }; + + initPostion = (): Promise => { + // 初始化获取位置,地图跟随 + return new Promise((resolve, reject) => { + navigator.geolocation.getCurrentPosition( + (res) => { + this.handlePosition(res); + resolve(); + }, + (err) => { + console.log(err); + reject(err); + }, + { enableHighAccuracy: true }, + ); + }); + }; + + handlePosition = (res: GeolocationPosition): void => { + const crd = res.coords; + // console.log(crd); + this.currentPosition = [crd.longitude, crd.latitude]; + this.cb(crd.longitude, crd.latitude); + }; + + clearWatch = (): void => { + navigator.geolocation.clearWatch(this.watchId); + }; + + init = async (): Promise<[number, number]> => { + await this.initPostion(); + // console.log(this.currentPosition); + return this.currentPosition; + }; +} diff --git a/packages/land_app/src/vite-env.d.ts b/packages/land_app/src/vite-env.d.ts index 11f02fe..f5a9d92 100644 --- a/packages/land_app/src/vite-env.d.ts +++ b/packages/land_app/src/vite-env.d.ts @@ -1 +1,3 @@ /// +/// +declare const __privateConfigs__: PrivateConfigs; diff --git a/packages/land_app/vite.config.ts b/packages/land_app/vite.config.ts index b62a63d..2b8f568 100644 --- a/packages/land_app/vite.config.ts +++ b/packages/land_app/vite.config.ts @@ -1,3 +1,5 @@ +/* eslint-disable import/no-nodejs-modules */ +import { readFileSync } from 'fs'; import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react-swc'; // yarn add --dev @esbuild-plugins/node-globals-polyfill @@ -45,6 +47,7 @@ export default defineConfig({ }, define: { global: 'globalThis', + __privateConfigs__: readFileSync('../private_configs/config.json', 'utf-8'), }, build: { target: 'es2020', diff --git a/packages/private_configs b/packages/private_configs new file mode 160000 index 0000000..2869cea --- /dev/null +++ b/packages/private_configs @@ -0,0 +1 @@ +Subproject commit 2869cead15c2a2773b9a4c8991bd031b19c952bc diff --git a/packages/skchain/src/lib/state/index.ts b/packages/skchain/src/lib/state/index.ts index e18f33d..464c30a 100644 --- a/packages/skchain/src/lib/state/index.ts +++ b/packages/skchain/src/lib/state/index.ts @@ -141,6 +141,10 @@ class ChainState { getInitOption() { return this.getSnapshot().context.initOptions; } + + get started() { + return this.getSnapshot().matches('active'); + } } export const chainState = new ChainState(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 57afb7a..c925a39 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,6 +1,6 @@ lockfileVersion: 5.4 -packageExtensionsChecksum: e62b705719bf0c4181bb65250e74dc85 +packageExtensionsChecksum: f3811b5ff652d9b178b60184ab768bcc importers: @@ -135,12 +135,30 @@ importers: packages/land_app: specifiers: + '@deck.gl/core': ^8.9.21 + '@deck.gl/extensions': ^8.9.21 + '@deck.gl/geo-layers': ^8.9.21 + '@deck.gl/layers': ^8.9.21 + '@deck.gl/mapbox': ^8.9.21 + '@deck.gl/mesh-layers': ^8.9.21 '@esbuild-plugins/node-globals-polyfill': ^0.2.3 + '@loaders.gl/core': ^3.4.7 + '@loaders.gl/gltf': ^3.4.7 + '@loaders.gl/images': ^3.4.7 + '@luma.gl/constants': ^8.5.20 + '@luma.gl/core': ^8.5.20 + '@luma.gl/engine': ^8.5.20 + '@luma.gl/gltools': ^8.5.20 + '@luma.gl/shadertools': ^8.5.20 + '@luma.gl/webgl': ^8.5.20 + '@math.gl/core': ^3.6.3 + '@math.gl/web-mercator': ^3.6.3 '@playwright/test': ^1.35.1 '@rollup/plugin-inject': ^5.0.3 '@trustack/common': workspace:^1.0.0 '@trustack/node-modules-polyfill': ^0.2.5 '@trustack/rollup-plugin-node-polyfills': ^0.2.2 + '@types/mapbox-gl': ^2.7.11 '@types/react': ^18.2.14 '@types/react-dom': ^18.2.6 '@vitejs/plugin-react-swc': ^3.3.2 @@ -148,8 +166,11 @@ importers: antd: ^5.6.4 buffer: ^6.0.3 esbuild: ^0.17.19 + gl-matrix: ^3.4.3 + h3-js: ^4.1.0 i18next: ^22.5.1 i18next-browser-languagedetector: ^7.1.0 + mapbox-gl: ^2.15.0 mime-types: ^2.1.35 multiformats: ^11.0.2 react: ^18.2.0 @@ -158,12 +179,30 @@ importers: react-router: ^6.14.1 react-router-dom: ^6.14.1 sass: ^1.63.6 + search-insights: ^2.7.0 skchain: workspace:^1.0.0 typescript: ^5.1.6 vite: ^4.4.2 xstate: ^4.38.0 dependencies: + '@deck.gl/core': 8.9.21 + '@deck.gl/extensions': 8.9.21_loepxxoqm6cwfq274s7pkoqjuu + '@deck.gl/geo-layers': 8.9.21_nzsujjoedg65iibh62lyj67rtm + '@deck.gl/layers': 8.9.21_nuz4uglonky7ssbx3kyjali2l4 + '@deck.gl/mapbox': 8.9.21_@deck.gl+core@8.9.21 + '@deck.gl/mesh-layers': 8.9.21_x75qo55hffj5wup5gixotpelje '@esbuild-plugins/node-globals-polyfill': 0.2.3_esbuild@0.17.19 + '@loaders.gl/core': 3.4.7 + '@loaders.gl/gltf': 3.4.7 + '@loaders.gl/images': 3.4.7 + '@luma.gl/constants': 8.5.20 + '@luma.gl/core': 8.5.20 + '@luma.gl/engine': 8.5.20 + '@luma.gl/gltools': 8.5.20 + '@luma.gl/shadertools': 8.5.20 + '@luma.gl/webgl': 8.5.20 + '@math.gl/core': 3.6.3 + '@math.gl/web-mercator': 3.6.3 '@trustack/common': link:../common '@trustack/node-modules-polyfill': 0.2.5_esbuild@0.17.19 '@trustack/rollup-plugin-node-polyfills': 0.2.2 @@ -171,8 +210,11 @@ importers: antd: 5.6.4_biqbaboplfbrettd7655fr4n2y buffer: 6.0.3 esbuild: 0.17.19 + gl-matrix: 3.4.3 + h3-js: 4.1.0 i18next: 22.5.1 i18next-browser-languagedetector: 7.1.0 + mapbox-gl: 2.15.0 mime-types: 2.1.35 multiformats: 11.0.2 react: 18.2.0 @@ -180,11 +222,13 @@ importers: react-i18next: 12.3.1_spyi3zqm3bqfobczid2f6jym6y react-router: 6.14.1_react@18.2.0 react-router-dom: 6.14.1_biqbaboplfbrettd7655fr4n2y + search-insights: 2.7.0 skchain: link:../skchain xstate: 4.38.0 devDependencies: '@playwright/test': 1.35.1 '@rollup/plugin-inject': 5.0.3 + '@types/mapbox-gl': 2.7.11 '@types/react': 18.2.14 '@types/react-dom': 18.2.6 '@vitejs/plugin-react-swc': 3.3.2_vite@4.4.2 @@ -1172,6 +1216,141 @@ packages: engines: {node: '>=10'} dev: false + /@deck.gl/core/8.9.21: + resolution: {integrity: sha512-kyPOEkl90T5agiNhIPCool03/4MMQXKoNqSurdXtJS7+xU9FVf7/biTrLxVxWCfF8kqRgxX6sJ4m2PKUwRjV0A==} + dependencies: + '@babel/runtime': 7.22.6 + '@loaders.gl/core': 3.4.7 + '@loaders.gl/images': 3.4.7 + '@luma.gl/constants': 8.5.20 + '@luma.gl/core': 8.5.20 + '@luma.gl/webgl': 8.5.20 + '@math.gl/core': 3.6.3 + '@math.gl/sun': 3.6.3 + '@math.gl/web-mercator': 3.6.3 + '@probe.gl/env': 3.6.0 + '@probe.gl/log': 3.6.0 + '@probe.gl/stats': 3.6.0 + gl-matrix: 3.4.3 + math.gl: 3.6.3 + mjolnir.js: 2.7.1 + dev: false + + /@deck.gl/extensions/8.9.21_loepxxoqm6cwfq274s7pkoqjuu: + resolution: {integrity: sha512-GIVeRG8K7uJfiKktfsFlgMv5kwKWPEgFkYsxxr/NY6UnqNRgAn9B+aH6YgJ4Hu22xwjUTOtzrX6BrSnsQI3kOg==} + peerDependencies: + '@deck.gl/core': ^8.0.0 + '@luma.gl/constants': ^8.0.0 + '@luma.gl/core': ^8.0.0 + '@math.gl/core': ^3.6.2 + '@math.gl/web-mercator': ^3.6.2 + gl-matrix: ^3.0.0 + dependencies: + '@babel/runtime': 7.22.6 + '@deck.gl/core': 8.9.21 + '@luma.gl/constants': 8.5.20 + '@luma.gl/core': 8.5.20 + '@luma.gl/shadertools': 8.5.20 + '@math.gl/core': 3.6.3 + '@math.gl/web-mercator': 3.6.3 + gl-matrix: 3.4.3 + dev: false + + /@deck.gl/geo-layers/8.9.21_nzsujjoedg65iibh62lyj67rtm: + resolution: {integrity: sha512-JS01acqO6weF9MUAdT/GVGABMHbkWKB/ZRinJ0HBqOyiZNpJ9k8SpwCiBP8jDwYfQ9Ziz8SGFNU/DmtNI9Vgxg==} + peerDependencies: + '@deck.gl/core': ^8.0.0 + '@deck.gl/extensions': ^8.0.0 + '@deck.gl/layers': ^8.0.0 + '@deck.gl/mesh-layers': ^8.0.0 + '@loaders.gl/core': ^3.4.2 + '@luma.gl/core': ^8.0.0 + dependencies: + '@babel/runtime': 7.22.6 + '@deck.gl/core': 8.9.21 + '@deck.gl/extensions': 8.9.21_loepxxoqm6cwfq274s7pkoqjuu + '@deck.gl/layers': 8.9.21_nuz4uglonky7ssbx3kyjali2l4 + '@deck.gl/mesh-layers': 8.9.21_x75qo55hffj5wup5gixotpelje + '@loaders.gl/3d-tiles': 3.4.6_@loaders.gl+core@3.4.7 + '@loaders.gl/core': 3.4.7 + '@loaders.gl/gis': 3.4.6 + '@loaders.gl/loader-utils': 3.4.6 + '@loaders.gl/mvt': 3.4.6 + '@loaders.gl/schema': 3.4.6 + '@loaders.gl/terrain': 3.4.6 + '@loaders.gl/tiles': 3.4.6_@loaders.gl+core@3.4.7 + '@loaders.gl/wms': 3.4.6 + '@luma.gl/constants': 8.5.20 + '@luma.gl/core': 8.5.20 + '@luma.gl/experimental': 8.5.20_7mnddonr42takpwjuhfa7cwj3i + '@math.gl/core': 3.6.3 + '@math.gl/culling': 3.6.3 + '@math.gl/web-mercator': 3.6.3 + '@types/geojson': 7946.0.10 + h3-js: 3.7.2 + long: 3.2.0 + transitivePeerDependencies: + - '@loaders.gl/gltf' + - '@loaders.gl/images' + - '@luma.gl/engine' + - '@luma.gl/gltools' + - '@luma.gl/shadertools' + - '@luma.gl/webgl' + dev: false + + /@deck.gl/layers/8.9.21_nuz4uglonky7ssbx3kyjali2l4: + resolution: {integrity: sha512-tNxbBhFcc81mBaSK+zNxvhlmZmQNuYmUJMWymWMq5vz5MLTE6hHNjLY5n181ZSYspHDA/7tsjXXZ5c/+MGru2g==} + peerDependencies: + '@deck.gl/core': ^8.0.0 + '@loaders.gl/core': ^3.4.2 + '@luma.gl/core': ^8.0.0 + dependencies: + '@babel/runtime': 7.22.6 + '@deck.gl/core': 8.9.21 + '@loaders.gl/core': 3.4.7 + '@loaders.gl/images': 3.4.7 + '@loaders.gl/schema': 3.4.6 + '@luma.gl/constants': 8.5.20 + '@luma.gl/core': 8.5.20 + '@mapbox/tiny-sdf': 2.0.6 + '@math.gl/core': 3.6.3 + '@math.gl/polygon': 3.6.3 + '@math.gl/web-mercator': 3.6.3 + earcut: 2.2.4 + dev: false + + /@deck.gl/mapbox/8.9.21_@deck.gl+core@8.9.21: + resolution: {integrity: sha512-QhyhS5Te+SDirgw5RF599zcAMM5HmNRJzyOu1plDx17UufYnRUXHq+ystT8KLzQqo8HnHDuNMOK1ZGwr4lblWg==} + peerDependencies: + '@deck.gl/core': ^8.0.0 + dependencies: + '@babel/runtime': 7.22.6 + '@deck.gl/core': 8.9.21 + '@math.gl/web-mercator': 3.6.3 + '@types/mapbox-gl': 2.7.11 + dev: false + + /@deck.gl/mesh-layers/8.9.21_x75qo55hffj5wup5gixotpelje: + resolution: {integrity: sha512-alTRtuZADvz18txumJeE/cTJQ6I1DqYDHGGFHA/FlKA3kYcy91Te4evHSok/+k8xlNyzf26cjgs9EoHAbUDpuQ==} + peerDependencies: + '@deck.gl/core': ^8.0.0 + '@luma.gl/core': ^8.0.0 + dependencies: + '@babel/runtime': 7.22.6 + '@deck.gl/core': 8.9.21 + '@loaders.gl/gltf': 3.4.7 + '@loaders.gl/schema': 3.4.7 + '@luma.gl/constants': 8.5.20 + '@luma.gl/core': 8.5.20 + '@luma.gl/experimental': 8.5.20_7mnddonr42takpwjuhfa7cwj3i + '@luma.gl/shadertools': 8.5.20 + '@luma.gl/webgl': 8.5.20 + transitivePeerDependencies: + - '@loaders.gl/images' + - '@luma.gl/engine' + - '@luma.gl/gltools' + dev: false + /@docsearch/css/3.5.1: resolution: {integrity: sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA==} dev: false @@ -2626,6 +2805,397 @@ packages: - utf-8-validate dev: false + /@loaders.gl/3d-tiles/3.4.6_@loaders.gl+core@3.4.7: + resolution: {integrity: sha512-oM+wOg/HeYl8249Eq3fLT6L2ZU1wFXdXcyUsenaUubxuCKbWk/mwFyqHq3NINcy7K56TUlEXwxpaiRiIhZa9WA==} + peerDependencies: + '@loaders.gl/core': ^3.4.0 + dependencies: + '@babel/runtime': 7.22.6 + '@loaders.gl/core': 3.4.7 + '@loaders.gl/draco': 3.4.6 + '@loaders.gl/gltf': 3.4.6 + '@loaders.gl/loader-utils': 3.4.6 + '@loaders.gl/math': 3.4.6 + '@loaders.gl/tiles': 3.4.6_@loaders.gl+core@3.4.7 + '@math.gl/core': 3.6.3 + '@math.gl/culling': 3.6.3 + '@math.gl/geospatial': 3.6.3 + long: 5.2.3 + dev: false + + /@loaders.gl/core/3.4.7: + resolution: {integrity: sha512-iKyOKtUTYsgmIaXFmkaV1bc4h36TiHoKzc4xrolU4eSw9BQzR3UATEx/356sUI8g90uQe1SosAcKAUgAvFqgGg==} + dependencies: + '@babel/runtime': 7.22.6 + '@loaders.gl/loader-utils': 3.4.7 + '@loaders.gl/worker-utils': 3.4.7 + '@probe.gl/log': 4.0.4 + dev: false + + /@loaders.gl/draco/3.4.6: + resolution: {integrity: sha512-FoxmvM0ojT1B5yntyQ/mzrWN55XyOOqPiie99Bs8yLj9+eNAfQoviMfrED1uS6gYVJEHNBmH9wibNaa1LjMTmw==} + dependencies: + '@babel/runtime': 7.22.6 + '@loaders.gl/loader-utils': 3.4.6 + '@loaders.gl/schema': 3.4.6 + '@loaders.gl/worker-utils': 3.4.6 + draco3d: 1.5.5 + dev: false + + /@loaders.gl/draco/3.4.7: + resolution: {integrity: sha512-FWwOWV/aSlbWM1HsGau1zxXyJT02yODfvBgZIf3Saro40oVws9LrmqLrCw7pnIm0jNfSzfw0pW/ogf0KOAq0mQ==} + dependencies: + '@babel/runtime': 7.22.6 + '@loaders.gl/loader-utils': 3.4.7 + '@loaders.gl/schema': 3.4.7 + '@loaders.gl/worker-utils': 3.4.7 + draco3d: 1.5.5 + dev: false + + /@loaders.gl/gis/3.4.6: + resolution: {integrity: sha512-DKG1oBjz7KYe/VInST3Hsnzo+E3cAv9cOvS6EA34YRMSb1T4xOmdvTpoN6x5/WZU7VBTK376F7TidMNskKOMoA==} + dependencies: + '@loaders.gl/loader-utils': 3.4.6 + '@loaders.gl/schema': 3.4.6 + '@mapbox/vector-tile': 1.3.1 + '@math.gl/polygon': 3.6.3 + pbf: 3.2.1 + dev: false + + /@loaders.gl/gltf/3.4.6: + resolution: {integrity: sha512-BB2Hkz8dTr6IbgccGb6y9QYdXyqbi5L8qIlEldA3P7f36y9EN1JVTBUxyF8hHqPt3YKgJ0RKX9F2YLRrhWT1gw==} + dependencies: + '@babel/runtime': 7.22.6 + '@loaders.gl/draco': 3.4.6 + '@loaders.gl/images': 3.4.6 + '@loaders.gl/loader-utils': 3.4.6 + '@loaders.gl/textures': 3.4.6 + '@math.gl/core': 3.6.3 + dev: false + + /@loaders.gl/gltf/3.4.7: + resolution: {integrity: sha512-ZJoM0JhShN8YtriYQL1F0fYU5NU2oY6ZlFbXkkoJBWgfdKHrb/Hv2Jac1S+omNTGrbuv1FbaBTJBCBhjPtQ+Vw==} + dependencies: + '@babel/runtime': 7.22.6 + '@loaders.gl/draco': 3.4.7 + '@loaders.gl/images': 3.4.7 + '@loaders.gl/loader-utils': 3.4.7 + '@loaders.gl/textures': 3.4.7 + '@math.gl/core': 3.6.3 + dev: false + + /@loaders.gl/images/3.4.6: + resolution: {integrity: sha512-zwM6lXATGxxIe27X1gPyqcgXb6ql9gPkoNlb5pWOrF1D8DrFFjTJSLV9p6WGrVKMZKeioJ2PK8ZnkeRiOYkveA==} + dependencies: + '@loaders.gl/loader-utils': 3.4.6 + dev: false + + /@loaders.gl/images/3.4.7: + resolution: {integrity: sha512-f8cQ5wUJtST75bLWy8GuMyCM/AMRst+Y2lRta4+fdWL7QMxUEbu91xoLkfKbLBIx2MwAGm0uowJzAmlLmbvAvQ==} + dependencies: + '@loaders.gl/loader-utils': 3.4.7 + dev: false + + /@loaders.gl/loader-utils/3.4.6: + resolution: {integrity: sha512-AN56Tvomas7bOZlrMEDforJWwS6DuXXFT/MsxOR/2vvzhutLDxYSuG4dZ9g5ejqJkiboDLAL3aghXXWekyToaw==} + dependencies: + '@babel/runtime': 7.22.6 + '@loaders.gl/worker-utils': 3.4.6 + '@probe.gl/stats': 4.0.4 + dev: false + + /@loaders.gl/loader-utils/3.4.7: + resolution: {integrity: sha512-nu7g3LHbq+MaeDf0LLMhMex+hQdriRNcM1TFD6hNi7jjQAPbKGcXZ1aBybuLvT3DGU/TK0o88ekUkkmrSpx83A==} + dependencies: + '@babel/runtime': 7.22.6 + '@loaders.gl/worker-utils': 3.4.7 + '@probe.gl/stats': 4.0.4 + dev: false + + /@loaders.gl/math/3.4.6: + resolution: {integrity: sha512-FC+BSp6NqMH372wkVS92yb+YIP2a26Mi1nEj8eiyRadxkQoyZ2bKH2kxoNX40yCo1xk/ZyX2v8wYq3ZNS+9fIg==} + dependencies: + '@loaders.gl/images': 3.4.6 + '@loaders.gl/loader-utils': 3.4.6 + '@math.gl/core': 3.6.3 + dev: false + + /@loaders.gl/mvt/3.4.6: + resolution: {integrity: sha512-fzZjuY5mS7p3IBu5MSyiHAvRUz2MEX1w0tRW/AlNiBn3SaEKqt8rei7Fir7QTNxK5qEBoTUDr5jOg1wH9SCC7Q==} + dependencies: + '@babel/runtime': 7.22.6 + '@loaders.gl/gis': 3.4.6 + '@loaders.gl/loader-utils': 3.4.6 + '@loaders.gl/schema': 3.4.6 + '@math.gl/polygon': 3.6.3 + pbf: 3.2.1 + dev: false + + /@loaders.gl/schema/3.4.6: + resolution: {integrity: sha512-uvToDknGCEL0TIZY1Rn76lQ0m22kUtVxE0HbgfgzwkT7dlXeT92F5yD4VVVL8qTX4oqh2xUySPQIaiAqdkGCvg==} + dependencies: + '@babel/runtime': 7.22.6 + '@types/geojson': 7946.0.10 + dev: false + + /@loaders.gl/schema/3.4.7: + resolution: {integrity: sha512-w429HMLt/NTtREbC2zFO2Fy36cOdQfYE2Ztjo9MJyv+takmZiVzwCRfYrAjOPFWcTLVwcbTkAF2r55+IyNGNeA==} + dependencies: + '@babel/runtime': 7.22.6 + '@types/geojson': 7946.0.10 + dev: false + + /@loaders.gl/terrain/3.4.6: + resolution: {integrity: sha512-Ki/t1wtroBqvPf1XxKdVKWjZ8BwEw4mxIHbWg+vRauxU7T3m85Bfp1KMF49E8jAa5HGikenD2Qumf5jC66GNSQ==} + dependencies: + '@babel/runtime': 7.22.6 + '@loaders.gl/images': 3.4.6 + '@loaders.gl/loader-utils': 3.4.6 + '@loaders.gl/schema': 3.4.6 + '@mapbox/martini': 0.2.0 + dev: false + + /@loaders.gl/textures/3.4.6: + resolution: {integrity: sha512-eeYFD0kWwkKwUWQ/sNHMP0wDiG2XsTWPY4rWV9RZRY955p+7q11Xoksqc3M4g8/DJ5+gYnBHyJMM3Tg4cG5Uhg==} + dependencies: + '@loaders.gl/images': 3.4.6 + '@loaders.gl/loader-utils': 3.4.6 + '@loaders.gl/schema': 3.4.6 + '@loaders.gl/worker-utils': 3.4.6 + ktx-parse: 0.0.4 + texture-compressor: 1.0.2 + dev: false + + /@loaders.gl/textures/3.4.7: + resolution: {integrity: sha512-YtqNBk4QOSqSNeiUByFns1i5XsE/od5FnGkafjVSMRJaXLtJXc89LbmKwV3WvVy69ktNnBayY6hwZC73566G/A==} + dependencies: + '@loaders.gl/images': 3.4.7 + '@loaders.gl/loader-utils': 3.4.7 + '@loaders.gl/schema': 3.4.7 + '@loaders.gl/worker-utils': 3.4.7 + ktx-parse: 0.0.4 + texture-compressor: 1.0.2 + dev: false + + /@loaders.gl/tiles/3.4.6_@loaders.gl+core@3.4.7: + resolution: {integrity: sha512-Tl9H9Gt8p8ZOJGdWjkdAHXjyr3UAArimC/DRRHbP70Zpipgo/qgSfYPbkGih20dvuoj4uuNe9pwSrk9ctmpxMg==} + peerDependencies: + '@loaders.gl/core': ^3.4.0 + dependencies: + '@babel/runtime': 7.22.6 + '@loaders.gl/core': 3.4.7 + '@loaders.gl/loader-utils': 3.4.6 + '@loaders.gl/math': 3.4.6 + '@math.gl/core': 3.6.3 + '@math.gl/culling': 3.6.3 + '@math.gl/geospatial': 3.6.3 + '@math.gl/web-mercator': 3.6.3 + '@probe.gl/stats': 4.0.4 + dev: false + + /@loaders.gl/wms/3.4.6: + resolution: {integrity: sha512-LkVaIM36Nqp8rTmeSVnHxHXdq8NRjnoXC0bSoDW3WzClYIcQmMf43zHzi2zQf0Y1O/DH+6oLo9ueOtGKc8VfLA==} + dependencies: + '@babel/runtime': 7.22.6 + '@loaders.gl/images': 3.4.6 + '@loaders.gl/loader-utils': 3.4.6 + '@loaders.gl/schema': 3.4.6 + '@loaders.gl/xml': 3.4.6 + '@turf/rewind': 5.1.5 + deep-strict-equal: 0.2.0 + lerc: 4.0.1 + dev: false + + /@loaders.gl/worker-utils/3.4.6: + resolution: {integrity: sha512-1Ns2d5HbJ22u9PDfEqoDWhg2F3zyYZUCQBmfmSW9Yuxblt2M0pRyB01VvAhPCnLovldvesHu+o16FsgkqieybQ==} + dependencies: + '@babel/runtime': 7.22.6 + dev: false + + /@loaders.gl/worker-utils/3.4.7: + resolution: {integrity: sha512-qMO4MWvIe9iCFhXbRcDhJEwhhw21KIh26Ehqtw3RGfHurOMRTC16jsAsGAJ+P65PZErpdg11QFS1p/dIEHp4fA==} + dependencies: + '@babel/runtime': 7.22.6 + dev: false + + /@loaders.gl/xml/3.4.6: + resolution: {integrity: sha512-kB3R2Wz9d/UEDka5Fhjv/MoIXK2dB57J7nQIXmFpdCVJKPUIm9aZXyqODcCMNoufSR2PI5uqxJ12a14vV3WZsQ==} + dependencies: + '@babel/runtime': 7.22.6 + '@loaders.gl/loader-utils': 3.4.6 + '@loaders.gl/schema': 3.4.6 + fast-xml-parser: 4.2.5 + dev: false + + /@luma.gl/constants/8.5.20: + resolution: {integrity: sha512-5yG+ybkUZ4j6kLPWMZjN4Hun2yLB0MyEpNCRKAUN9/yS9UIWA7unyVxjSf2vnE7k/7dywtxlbXegASNFgNVGxw==} + dev: false + + /@luma.gl/core/8.5.20: + resolution: {integrity: sha512-xJr96G6vhYcznYHC84fbeOG3fgNM4lFwj9bd0VPcg/Kfe8otUeN1Hl0AKHCCtNn48PiMSg3LKbaiRfNUMhaffQ==} + dependencies: + '@babel/runtime': 7.22.6 + '@luma.gl/constants': 8.5.20 + '@luma.gl/engine': 8.5.20 + '@luma.gl/gltools': 8.5.20 + '@luma.gl/shadertools': 8.5.20 + '@luma.gl/webgl': 8.5.20 + dev: false + + /@luma.gl/engine/8.5.20: + resolution: {integrity: sha512-+0ryJ/4gL1pWaEgZimY21jUPt1LYiO6Cqte8TNUprCfAHoAStsuzD7jwgEqnM6jJOUEdIxQ3w0z3Dzw/0KIE+w==} + dependencies: + '@babel/runtime': 7.22.6 + '@luma.gl/constants': 8.5.20 + '@luma.gl/gltools': 8.5.20 + '@luma.gl/shadertools': 8.5.20 + '@luma.gl/webgl': 8.5.20 + '@math.gl/core': 3.6.3 + '@probe.gl/env': 3.6.0 + '@probe.gl/stats': 3.6.0 + '@types/offscreencanvas': 2019.7.0 + dev: false + + /@luma.gl/experimental/8.5.20_7mnddonr42takpwjuhfa7cwj3i: + resolution: {integrity: sha512-V1Jp68rYMPtwMdf+50r3NSYsGV3srjwZ+lcK2ew4DshjedDbYwLqTGMWcOyBhY3K3aCl2LH3Fhn0hAY+3NTLGA==} + peerDependencies: + '@loaders.gl/gltf': ^3.0.0 + '@loaders.gl/images': ^3.0.0 + '@luma.gl/engine': ^8.4.0 + '@luma.gl/gltools': ^8.4.0 + '@luma.gl/shadertools': ^8.4.0 + '@luma.gl/webgl': ^8.4.0 + dependencies: + '@loaders.gl/gltf': 3.4.7 + '@loaders.gl/images': 3.4.7 + '@luma.gl/constants': 8.5.20 + '@luma.gl/engine': 8.5.20 + '@luma.gl/gltools': 8.5.20 + '@luma.gl/shadertools': 8.5.20 + '@luma.gl/webgl': 8.5.20 + '@math.gl/core': 3.6.3 + earcut: 2.2.4 + dev: false + + /@luma.gl/gltools/8.5.20: + resolution: {integrity: sha512-5pP6ph9FSX5gHiVWQM1DmYRUnriklzKUG9yaqlQsKEqCFsOcKB0EfK3MfBVXIfsOdP/1bJZ9Dlz/zV19soWVhg==} + dependencies: + '@babel/runtime': 7.22.6 + '@luma.gl/constants': 8.5.20 + '@probe.gl/env': 3.6.0 + '@probe.gl/log': 3.6.0 + '@types/offscreencanvas': 2019.7.0 + dev: false + + /@luma.gl/shadertools/8.5.20: + resolution: {integrity: sha512-q1lrCZy1ncIFb4mMjsYgISLzNP6eMnhLUY+Oltj/qjAMcPEssCeHN2+XGfP/CVtU+O7sC+5JY2bQGaTs6HQ/Qw==} + dependencies: + '@babel/runtime': 7.22.6 + '@math.gl/core': 3.6.3 + dev: false + + /@luma.gl/webgl/8.5.20: + resolution: {integrity: sha512-p/kt9KztywH4l+09XHoZ4cPFOoE7xlZXIBMT8rxRVgfe1w0lvi7QYh4tOG7gk+iixQ34EyDQacoHCsabdpmqQg==} + dependencies: + '@babel/runtime': 7.22.6 + '@luma.gl/constants': 8.5.20 + '@luma.gl/gltools': 8.5.20 + '@probe.gl/env': 3.6.0 + '@probe.gl/stats': 3.6.0 + dev: false + + /@mapbox/geojson-rewind/0.5.2: + resolution: {integrity: sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==} + hasBin: true + dependencies: + get-stream: 6.0.1 + minimist: 1.2.8 + dev: false + + /@mapbox/jsonlint-lines-primitives/2.0.2: + resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==} + engines: {node: '>= 0.6'} + dev: false + + /@mapbox/mapbox-gl-supported/2.0.1: + resolution: {integrity: sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ==} + dev: false + + /@mapbox/martini/0.2.0: + resolution: {integrity: sha512-7hFhtkb0KTLEls+TRw/rWayq5EeHtTaErgm/NskVoXmtgAQu/9D299aeyj6mzAR/6XUnYRp2lU+4IcrYRFjVsQ==} + dev: false + + /@mapbox/point-geometry/0.1.0: + resolution: {integrity: sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==} + dev: false + + /@mapbox/tiny-sdf/2.0.6: + resolution: {integrity: sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==} + dev: false + + /@mapbox/unitbezier/0.0.1: + resolution: {integrity: sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==} + dev: false + + /@mapbox/vector-tile/1.3.1: + resolution: {integrity: sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==} + dependencies: + '@mapbox/point-geometry': 0.1.0 + dev: false + + /@mapbox/whoots-js/3.1.0: + resolution: {integrity: sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==} + engines: {node: '>=6.0.0'} + dev: false + + /@math.gl/core/3.6.3: + resolution: {integrity: sha512-jBABmDkj5uuuE0dTDmwwss7Cup5ZwQ6Qb7h1pgvtkEutTrhkcv8SuItQNXmF45494yIHeoGue08NlyeY6wxq2A==} + dependencies: + '@babel/runtime': 7.22.6 + '@math.gl/types': 3.6.3 + gl-matrix: 3.4.3 + dev: false + + /@math.gl/culling/3.6.3: + resolution: {integrity: sha512-3UERXHbaPlM6pnTk2MI7LeQ5CoelDZzDzghTTcv+HdQCZsT/EOEuEdYimETHtSxiyiOmsX2Un65UBLYT/rbKZg==} + dependencies: + '@babel/runtime': 7.22.6 + '@math.gl/core': 3.6.3 + gl-matrix: 3.4.3 + dev: false + + /@math.gl/geospatial/3.6.3: + resolution: {integrity: sha512-6xf657lJnaecSarSzn02t0cnsCSkWb+39m4+im96v20dZTrLCWZ2glDQVzfuL91meDnDXjH4oyvynp12Mj5MFg==} + dependencies: + '@babel/runtime': 7.22.6 + '@math.gl/core': 3.6.3 + gl-matrix: 3.4.3 + dev: false + + /@math.gl/polygon/3.6.3: + resolution: {integrity: sha512-FivQ1ZnYcAss1wVifOkHP/ZnlfQy1IL/769uzNtiHxwUbW0kZG3yyOZ9I7fwyzR5Hvqt3ErJKHjSYZr0uVlz5g==} + dependencies: + '@babel/runtime': 7.22.6 + '@math.gl/core': 3.6.3 + dev: false + + /@math.gl/sun/3.6.3: + resolution: {integrity: sha512-mrx6CGYYeTNSQttvcw0KVUy+35YDmnjMqpO/o0t06Vcghrt0HNruB/ScRgUSbJrgkbOg1Vcqm23HBd++clzQzw==} + dependencies: + '@babel/runtime': 7.22.6 + dev: false + + /@math.gl/types/3.6.3: + resolution: {integrity: sha512-3uWLVXHY3jQxsXCr/UCNPSc2BG0hNUljhmOBt9l+lNFDp7zHgm0cK2Tw4kj2XfkJy4TgwZTBGwRDQgWEbLbdTA==} + dev: false + + /@math.gl/web-mercator/3.6.3: + resolution: {integrity: sha512-UVrkSOs02YLehKaehrxhAejYMurehIHPfFQvPFZmdJHglHOU4V2cCUApTVEwOksvCp161ypEqVp+9H6mGhTTcw==} + dependencies: + '@babel/runtime': 7.22.6 + gl-matrix: 3.4.3 + dev: false + /@multiformats/base-x/4.0.1: resolution: {integrity: sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==} dev: false @@ -2747,6 +3317,44 @@ packages: preact: 10.16.0 dev: false + /@probe.gl/env/3.6.0: + resolution: {integrity: sha512-4tTZYUg/8BICC3Yyb9rOeoKeijKbZHRXBEKObrfPmX4sQmYB15ZOUpoVBhAyJkOYVAM8EkPci6Uw5dLCwx2BEQ==} + dependencies: + '@babel/runtime': 7.22.6 + dev: false + + /@probe.gl/env/4.0.4: + resolution: {integrity: sha512-sYNGqesDfWD6dFP5oNZtTeFA4Z6ak5T4a8BNPdNhoqy7PK9w70JHrb6mv+RKWqKXq33KiwCDWL7fYxx2HuEH2w==} + dependencies: + '@babel/runtime': 7.22.6 + dev: false + + /@probe.gl/log/3.6.0: + resolution: {integrity: sha512-hjpyenpEvOdowgZ1qMeCJxfRD4JkKdlXz0RC14m42Un62NtOT+GpWyKA4LssT0+xyLULCByRAtG2fzZorpIAcA==} + dependencies: + '@babel/runtime': 7.22.6 + '@probe.gl/env': 3.6.0 + dev: false + + /@probe.gl/log/4.0.4: + resolution: {integrity: sha512-WpmXl6njlBMwrm8HBh/b4kSp/xnY1VVmeT4PWUKF+RkVbFuKQbsU11dA1IxoMd7gSY+5DGIwxGfAv1H5OMzA4A==} + dependencies: + '@babel/runtime': 7.22.6 + '@probe.gl/env': 4.0.4 + dev: false + + /@probe.gl/stats/3.6.0: + resolution: {integrity: sha512-JdALQXB44OP4kUBN/UrQgzbJe4qokbVF4Y8lkIA8iVCFnjVowWIgkD/z/0QO65yELT54tTrtepw1jScjKB+rhQ==} + dependencies: + '@babel/runtime': 7.22.6 + dev: false + + /@probe.gl/stats/4.0.4: + resolution: {integrity: sha512-SDuSY/D4yDL6LQDa69l/GCcnZLRiGYdyvYkxWb0CgnzTPdPrcdrzGkzkvpC3zsA4fEFw2smlDje370QGHwlisg==} + dependencies: + '@babel/runtime': 7.22.6 + dev: false + /@protobuf-ts/plugin-framework/2.9.0: resolution: {integrity: sha512-/fgpwEgYeiazEpkp9S+iaxVXd6LCkfd2iCfsvHiiSz94DatwZGkhv/85ciq2vcZVwSeEagKoSKeinnQWYvTnxw==} dependencies: @@ -3206,6 +3814,45 @@ packages: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: false + /@turf/boolean-clockwise/5.1.5: + resolution: {integrity: sha512-FqbmEEOJ4rU4/2t7FKx0HUWmjFEVqR+NJrFP7ymGSjja2SQ7Q91nnBihGuT+yuHHl6ElMjQ3ttsB/eTmyCycxA==} + dependencies: + '@turf/helpers': 5.1.5 + '@turf/invariant': 5.2.0 + dev: false + + /@turf/clone/5.1.5: + resolution: {integrity: sha512-//pITsQ8xUdcQ9pVb4JqXiSqG4dos5Q9N4sYFoWghX21tfOV2dhc5TGqYOhnHrQS7RiKQL1vQ48kIK34gQ5oRg==} + dependencies: + '@turf/helpers': 5.1.5 + dev: false + + /@turf/helpers/5.1.5: + resolution: {integrity: sha512-/lF+JR+qNDHZ8bF9d+Cp58nxtZWJ3sqFe6n3u3Vpj+/0cqkjk4nXKYBSY0azm+GIYB5mWKxUXvuP/m0ZnKj1bw==} + dev: false + + /@turf/invariant/5.2.0: + resolution: {integrity: sha512-28RCBGvCYsajVkw2EydpzLdcYyhSA77LovuOvgCJplJWaNVyJYH6BOR3HR9w50MEkPqb/Vc/jdo6I6ermlRtQA==} + dependencies: + '@turf/helpers': 5.1.5 + dev: false + + /@turf/meta/5.2.0: + resolution: {integrity: sha512-ZjQ3Ii62X9FjnK4hhdsbT+64AYRpaI8XMBMcyftEOGSmPMUVnkbvuv3C9geuElAXfQU7Zk1oWGOcrGOD9zr78Q==} + dependencies: + '@turf/helpers': 5.1.5 + dev: false + + /@turf/rewind/5.1.5: + resolution: {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.2.0 + '@turf/meta': 5.2.0 + dev: false + /@types/babel__core/7.20.1: resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} dependencies: @@ -3251,12 +3898,19 @@ packages: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} dev: true + /@types/geojson/7946.0.10: + resolution: {integrity: sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==} + /@types/graceful-fs/4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: '@types/node': 20.4.1 dev: false + /@types/hammerjs/2.0.41: + resolution: {integrity: sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==} + dev: false + /@types/hast/2.3.4: resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} dependencies: @@ -3320,6 +3974,11 @@ packages: resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} dev: false + /@types/mapbox-gl/2.7.11: + resolution: {integrity: sha512-4vSwPSTQIawZTFRiTY2R74aZwAiM9gE6KGj871xdyAPpa+DmEObXxQQXqL2PsMH31/rP9nxJ2Kv0boeTVJMXVw==} + dependencies: + '@types/geojson': 7946.0.10 + /@types/mdast/3.0.11: resolution: {integrity: sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==} dependencies: @@ -3350,6 +4009,10 @@ packages: /@types/node/20.4.1: resolution: {integrity: sha512-JIzsAvJeA/5iY6Y/OxZbv1lUcc8dNSE77lb2gnBH+/PJ3lFR1Ccvgwl5JWnHAkNHcRsT0TbpVOsiMKZ1F/yyJg==} + /@types/offscreencanvas/2019.7.0: + resolution: {integrity: sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==} + dev: false + /@types/parse5/6.0.3: resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} dev: false @@ -4197,6 +4860,11 @@ packages: node-int64: 0.4.0 dev: false + /buf-compare/1.0.1: + resolution: {integrity: sha512-Bvx4xH00qweepGc43xFvMs5BKASXTbHaHm6+kDYIK9p/4iFwjATQkmPKHQSgJZzKbAymhztRbXUf1Nqhzl73/Q==} + engines: {node: '>=0.10.0'} + dev: false + /buffer-from/1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: false @@ -4495,6 +5163,14 @@ packages: toggle-selection: 1.0.6 dev: false + /core-assert/0.2.1: + resolution: {integrity: sha512-IG97qShIP+nrJCXMCgkNZgH7jZQ4n8RpPyPeXX++T6avR/KhLhgLiHKoEn5Rc1KjfycSfA9DMa6m+4C4eguHhw==} + engines: {node: '>=0.10.0'} + dependencies: + buf-compare: 1.0.1 + is-error: 2.2.2 + dev: false + /create-require/1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: false @@ -4508,6 +5184,10 @@ packages: which: 2.0.2 dev: false + /csscolorparser/1.0.3: + resolution: {integrity: sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==} + dev: false + /csstype/3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} @@ -4589,6 +5269,13 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: false + /deep-strict-equal/0.2.0: + resolution: {integrity: sha512-3daSWyvZ/zwJvuMGlzG1O+Ow0YSadGfb3jsh9xoCutv2tWyB9dA4YvR9L9/fSdDZa2dByYQe+TqapSGUrjnkoA==} + engines: {node: '>=0.10.0'} + dependencies: + core-assert: 0.2.1 + dev: false + /deepmerge-ts/4.3.0: resolution: {integrity: sha512-if3ZYdkD2dClhnXR5reKtG98cwyaRT1NeugQoAPTTfsOpV9kqyeiBF9Qa5RHjemb3KzD5ulqygv6ED3t5j9eJw==} engines: {node: '>=12.4.0'} @@ -4729,11 +5416,19 @@ packages: resolution: {integrity: sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==} dev: false + /draco3d/1.5.5: + resolution: {integrity: sha512-JVuNV0EJzD3LBYhGyIXJLeBID/EVtmFO1ZNhAYflTgiMiAJlbhXQmRRda/azjc8MRVMHh0gqGhiqHUo5dIXM8Q==} + dev: false + /dset/3.1.2: resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} engines: {node: '>=4'} dev: false + /earcut/2.2.4: + resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==} + dev: false + /eastasianwidth/0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: false @@ -5329,6 +6024,13 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: false + /fast-xml-parser/4.2.5: + resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} + hasBin: true + dependencies: + strnum: 1.0.5 + dev: false + /fastq/1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: @@ -5453,6 +6155,10 @@ packages: engines: {node: '>=6.9.0'} dev: false + /geojson-vt/3.2.1: + resolution: {integrity: sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==} + dev: false + /get-caller-file/2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -5505,6 +6211,10 @@ packages: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} dev: false + /gl-matrix/3.4.3: + resolution: {integrity: sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==} + dev: false + /glob-parent/5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -5599,6 +6309,25 @@ packages: strip-bom-string: 1.0.0 dev: false + /grid-index/1.1.0: + resolution: {integrity: sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==} + dev: false + + /h3-js/3.7.2: + resolution: {integrity: sha512-LPjlHSwB9zQZrMqKloCZmmmt3yZzIK7nqPcXqwU93zT3TtYG6jP4tZBzAPouxut7lLjdFbMQ75wRBiKfpsnY7w==} + engines: {node: '>=4', npm: '>=3', yarn: '>=1.3.0'} + dev: false + + /h3-js/4.1.0: + resolution: {integrity: sha512-LQhmMl1dRQQjMXPzJc7MpZ/CqPOWWuAvVEoVJM9n/s7vHypj+c3Pd5rLQCkAsOgAoAYKbNCsYFE++LF7MvSfCQ==} + engines: {node: '>=4', npm: '>=3', yarn: '>=1.3.0'} + dev: false + + /hammerjs/2.0.8: + resolution: {integrity: sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==} + engines: {node: '>=0.8.0'} + dev: false + /has-bigints/1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: false @@ -5775,6 +6504,12 @@ packages: engines: {node: '>= 4'} dev: false + /image-size/0.7.5: + resolution: {integrity: sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==} + engines: {node: '>=6.9.0'} + hasBin: true + dev: false + /immutable/4.3.0: resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==} dev: true @@ -5972,6 +6707,10 @@ packages: resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} dev: false + /is-error/2.2.2: + resolution: {integrity: sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==} + dev: false + /is-extendable/0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} @@ -6830,6 +7569,10 @@ packages: resolution: {integrity: sha512-WXzwLL0745uNuedrCsCs3rpmfD6DBaf7uuVwaq98/8dafURfgQaBsSpjiPp5+CW6Vjltwy9cOGI6qE71b3T8iQ==} dev: false + /kdbush/4.0.2: + resolution: {integrity: sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==} + dev: false + /kill-port/2.0.1: resolution: {integrity: sha512-e0SVOV5jFo0mx8r7bS29maVWp17qGqLBZ5ricNSajON6//kmb7qqqNnml4twNE8Dtj97UQD+gNFOaipS/q1zzQ==} hasBin: true @@ -6853,6 +7596,14 @@ packages: engines: {node: '>=6'} dev: false + /ktx-parse/0.0.4: + resolution: {integrity: sha512-LY3nrmfXl+wZZdPxgJ3ZmLvG+wkOZZP3/dr4RbQj1Pk3Qwz44esOOSFFVQJcNWpXAtiNIC66WgXufX/SYgYz6A==} + dev: false + + /lerc/4.0.1: + resolution: {integrity: sha512-b351eOjY3DKm1H2hDVhXswsd2RCK6bgREBK6Z639ctClOuYXTi9a44l8yO3zm1pYM2o4WrriloTAKgyrb/0EyA==} + dev: false + /level-supports/4.0.1: resolution: {integrity: sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==} engines: {node: '>=12'} @@ -7082,6 +7833,11 @@ packages: wrap-ansi: 6.2.0 dev: false + /long/3.2.0: + resolution: {integrity: sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg==} + engines: {node: '>=0.6'} + dev: false + /long/4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} dev: false @@ -7151,10 +7907,43 @@ packages: tmpl: 1.0.5 dev: false + /mapbox-gl/2.15.0: + resolution: {integrity: sha512-fjv+aYrd5TIHiL7wRa+W7KjtUqKWziJMZUkK5hm8TvJ3OLeNPx4NmW/DgfYhd/jHej8wWL+QJBDbdMMAKvNC0A==} + dependencies: + '@mapbox/geojson-rewind': 0.5.2 + '@mapbox/jsonlint-lines-primitives': 2.0.2 + '@mapbox/mapbox-gl-supported': 2.0.1 + '@mapbox/point-geometry': 0.1.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.4 + geojson-vt: 3.2.1 + gl-matrix: 3.4.3 + grid-index: 1.1.0 + kdbush: 4.0.2 + murmurhash-js: 1.0.0 + pbf: 3.2.1 + potpack: 2.0.0 + quickselect: 2.0.0 + rw: 1.3.3 + supercluster: 8.0.1 + tinyqueue: 2.0.3 + vt-pbf: 3.1.3 + dev: false + /markdown-table/3.0.3: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} dev: false + /math.gl/3.6.3: + resolution: {integrity: sha512-Yq9CyECvSDox9+5ETi2+x1bGTY5WvGUGL3rJfC4KPoCZAM51MGfrCm6rIn4yOJUVfMPs2a5RwMD+yGS/n1g3gg==} + dependencies: + '@math.gl/core': 3.6.3 + dev: false + /mdast-util-definitions/5.1.2: resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} dependencies: @@ -7615,6 +8404,14 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: false + /mjolnir.js/2.7.1: + resolution: {integrity: sha512-72BeUWgTv2cj5aZQKpwL8caNUFhXZ9bDm1hxpNj70XJQ62IBnTZmtv/WPxJvtaVNhzNo+D2U8O6ryNI0zImYcw==} + engines: {node: '>= 4', npm: '>= 3'} + dependencies: + '@types/hammerjs': 2.0.41 + hammerjs: 2.0.8 + dev: false + /module-error/1.0.2: resolution: {integrity: sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==} engines: {node: '>=10'} @@ -7687,6 +8484,10 @@ packages: varint: 5.0.2 dev: false + /murmurhash-js/1.0.0: + resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==} + dev: false + /nanoid/3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -8014,6 +8815,14 @@ packages: engines: {node: '>=8'} dev: false + /pbf/3.2.1: + resolution: {integrity: sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==} + hasBin: true + dependencies: + ieee754: 1.2.1 + resolve-protobuf-schema: 2.1.0 + dev: false + /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -8069,6 +8878,10 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 + /potpack/2.0.0: + resolution: {integrity: sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==} + dev: false + /preact-render-to-string/5.2.6_preact@10.16.0: resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} peerDependencies: @@ -8204,6 +9017,10 @@ packages: long: 5.2.3 dev: false + /protocol-buffers-schema/3.6.0: + resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} + dev: false + /protons-runtime/5.0.1: resolution: {integrity: sha512-AwyAA3pQ4Ka4tEBMdIjLi/cRdpb322f7sgv3NruVq9yguLggzwu5eeLe1HuRPFYlI4UsVN/QK/AQXjLPVLCzTA==} dependencies: @@ -8232,6 +9049,10 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: false + /quickselect/2.0.0: + resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} + dev: false + /rate-limiter-flexible/2.4.1: resolution: {integrity: sha512-dgH4T44TzKVO9CLArNto62hJOwlWJMLUjVVr/ii0uUzZXEXthDNr7/yefW5z/1vvHAfycc1tnuiYyNJ8CTRB3g==} dev: false @@ -8984,6 +9805,12 @@ packages: engines: {node: '>=8'} dev: false + /resolve-protobuf-schema/2.1.0: + resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==} + dependencies: + protocol-buffers-schema: 3.6.0 + dev: false + /resolve.exports/2.0.2: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} @@ -9115,6 +9942,10 @@ packages: queue-microtask: 1.2.3 dev: false + /rw/1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + dev: false + /rxjs/7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: @@ -9194,6 +10025,11 @@ packages: regexp-ast-analysis: 0.6.0 dev: false + /search-insights/2.7.0: + resolution: {integrity: sha512-GLbVaGgzYEKMvuJbHRhLi1qoBFnjXZGZ6l4LxOYPCp4lI2jDRB3jPU9/XNhMwv6kvnA9slTreq6pvK+b3o3aqg==} + engines: {node: '>=8.16.0'} + dev: false + /section-matter/1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -9472,6 +10308,10 @@ packages: engines: {node: '>=8'} dev: false + /strnum/1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + dev: false + /stylis/4.3.0: resolution: {integrity: sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==} dev: false @@ -9482,6 +10322,12 @@ packages: s.color: 0.0.15 dev: false + /supercluster/8.0.1: + resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==} + dependencies: + kdbush: 4.0.2 + dev: false + /supports-color/5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -9529,6 +10375,14 @@ packages: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: false + /texture-compressor/1.0.2: + resolution: {integrity: sha512-dStVgoaQ11mA5htJ+RzZ51ZxIZqNOgWKAIvtjLrW1AliQQLCmrDqNzQZ8Jh91YealQ95DXt4MEduLzJmbs6lig==} + hasBin: true + dependencies: + argparse: 1.0.10 + image-size: 0.7.5 + dev: false + /throttle-debounce/5.0.0: resolution: {integrity: sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==} engines: {node: '>=12.22'} @@ -9548,6 +10402,10 @@ packages: retimer: 3.0.0 dev: false + /tinyqueue/2.0.3: + resolution: {integrity: sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==} + dev: false + /titleize/3.0.0: resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} engines: {node: '>=12'} @@ -10116,6 +10974,14 @@ packages: resolution: {integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==} dev: false + /vt-pbf/3.1.3: + resolution: {integrity: sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==} + dependencies: + '@mapbox/point-geometry': 0.1.0 + '@mapbox/vector-tile': 1.3.1 + pbf: 3.2.1 + dev: false + /walker/1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: