Sfoglia il codice sorgente

feat: 新增热点

chenlei 1 anno fa
parent
commit
d626be6373
3 ha cambiato i file con 476 aggiunte e 62 eliminazioni
  1. 1 1
      package.json
  2. 298 14
      pnpm-lock.yaml
  3. 177 47
      src/App.tsx

+ 1 - 1
package.json

@@ -6,7 +6,7 @@
   "dependencies": {
     "@ahooksjs/use-url-state": "^3.5.1",
     "@better-scroll/core": "^2.5.1",
-    "@dage/krpano": "^2.2.0",
+    "@dage/krpano": "^2.2.2",
     "@testing-library/jest-dom": "^5.17.0",
     "@testing-library/react": "^13.4.0",
     "@testing-library/user-event": "^13.5.0",

+ 298 - 14
pnpm-lock.yaml

@@ -12,8 +12,8 @@ dependencies:
     specifier: ^2.5.1
     version: 2.5.1
   '@dage/krpano':
-    specifier: ^2.2.0
-    version: 2.2.0(react-dom@18.3.1)(react@18.3.1)
+    specifier: ^2.2.2
+    version: 2.2.2(react-dom@18.3.1)(react@18.3.1)
   '@testing-library/jest-dom':
     specifier: ^5.17.0
     version: 5.17.0
@@ -52,7 +52,7 @@ dependencies:
     version: 6.23.1(react-dom@18.3.1)(react@18.3.1)
   react-scripts:
     specifier: 5.0.1
-    version: 5.0.1(@babel/plugin-syntax-flow@7.24.6)(@babel/plugin-transform-react-jsx@7.24.6)(eslint@8.57.0)(react@18.3.1)(sass@1.77.4)(typescript@4.9.5)
+    version: 5.0.1(@babel/plugin-syntax-flow@7.24.7)(@babel/plugin-transform-react-jsx@7.24.7)(eslint@8.57.0)(react@18.3.1)(sass@1.77.4)(typescript@4.9.5)
   typescript:
     specifier: ^4.9.5
     version: 4.9.5
@@ -117,11 +117,24 @@ packages:
       picocolors: 1.0.1
     dev: false
 
+  /@babel/code-frame@7.24.7:
+    resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/highlight': 7.24.7
+      picocolors: 1.0.1
+    dev: false
+
   /@babel/compat-data@7.24.6:
     resolution: {integrity: sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==}
     engines: {node: '>=6.9.0'}
     dev: false
 
+  /@babel/compat-data@7.24.7:
+    resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==}
+    engines: {node: '>=6.9.0'}
+    dev: false
+
   /@babel/core@7.24.6:
     resolution: {integrity: sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==}
     engines: {node: '>=6.9.0'}
@@ -145,6 +158,29 @@ packages:
       - supports-color
     dev: false
 
+  /@babel/core@7.24.7:
+    resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@ampproject/remapping': 2.3.0
+      '@babel/code-frame': 7.24.7
+      '@babel/generator': 7.24.7
+      '@babel/helper-compilation-targets': 7.24.7
+      '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7)
+      '@babel/helpers': 7.24.7
+      '@babel/parser': 7.24.7
+      '@babel/template': 7.24.7
+      '@babel/traverse': 7.24.7
+      '@babel/types': 7.24.7
+      convert-source-map: 2.0.0
+      debug: 4.3.5
+      gensync: 1.0.0-beta.2
+      json5: 2.2.3
+      semver: 6.3.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: false
+
   /@babel/eslint-parser@7.24.6(@babel/core@7.24.6)(eslint@8.57.0):
     resolution: {integrity: sha512-Q1BfQX42zXHx732PLW0w4+Y3wJjoZKEMaatFUEAmQ7Z+jCXxinzeqX9bvv2Q8xNPes/H6F0I23oGkcgjaItmLw==}
     engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
@@ -169,6 +205,16 @@ packages:
       jsesc: 2.5.2
     dev: false
 
+  /@babel/generator@7.24.7:
+    resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.24.7
+      '@jridgewell/gen-mapping': 0.3.5
+      '@jridgewell/trace-mapping': 0.3.25
+      jsesc: 2.5.2
+    dev: false
+
   /@babel/helper-annotate-as-pure@7.24.6:
     resolution: {integrity: sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==}
     engines: {node: '>=6.9.0'}
@@ -176,6 +222,13 @@ packages:
       '@babel/types': 7.24.6
     dev: false
 
+  /@babel/helper-annotate-as-pure@7.24.7:
+    resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.24.7
+    dev: false
+
   /@babel/helper-builder-binary-assignment-operator-visitor@7.24.6:
     resolution: {integrity: sha512-+wnfqc5uHiMYtvRX7qu80Toef8BXeh4HHR1SPeonGb1SKPniNEd4a/nlaJJMv/OIEYvIVavvo0yR7u10Gqz0Iw==}
     engines: {node: '>=6.9.0'}
@@ -194,6 +247,17 @@ packages:
       semver: 6.3.1
     dev: false
 
+  /@babel/helper-compilation-targets@7.24.7:
+    resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/compat-data': 7.24.7
+      '@babel/helper-validator-option': 7.24.7
+      browserslist: 4.23.1
+      lru-cache: 5.1.1
+      semver: 6.3.1
+    dev: false
+
   /@babel/helper-create-class-features-plugin@7.24.6(@babel/core@7.24.6):
     resolution: {integrity: sha512-djsosdPJVZE6Vsw3kk7IPRWethP94WHGOhQTc67SNXE0ZzMhHgALw8iGmYS0TD1bbMM0VDROy43od7/hN6WYcA==}
     engines: {node: '>=6.9.0'}
@@ -244,6 +308,13 @@ packages:
     engines: {node: '>=6.9.0'}
     dev: false
 
+  /@babel/helper-environment-visitor@7.24.7:
+    resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.24.7
+    dev: false
+
   /@babel/helper-function-name@7.24.6:
     resolution: {integrity: sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==}
     engines: {node: '>=6.9.0'}
@@ -252,6 +323,14 @@ packages:
       '@babel/types': 7.24.6
     dev: false
 
+  /@babel/helper-function-name@7.24.7:
+    resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/template': 7.24.7
+      '@babel/types': 7.24.7
+    dev: false
+
   /@babel/helper-hoist-variables@7.24.6:
     resolution: {integrity: sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==}
     engines: {node: '>=6.9.0'}
@@ -259,6 +338,13 @@ packages:
       '@babel/types': 7.24.6
     dev: false
 
+  /@babel/helper-hoist-variables@7.24.7:
+    resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.24.7
+    dev: false
+
   /@babel/helper-member-expression-to-functions@7.24.6:
     resolution: {integrity: sha512-OTsCufZTxDUsv2/eDXanw/mUZHWOxSbEmC3pP8cgjcy5rgeVPWWMStnv274DV60JtHxTk0adT0QrCzC4M9NWGg==}
     engines: {node: '>=6.9.0'}
@@ -273,6 +359,16 @@ packages:
       '@babel/types': 7.24.6
     dev: false
 
+  /@babel/helper-module-imports@7.24.7:
+    resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/traverse': 7.24.7
+      '@babel/types': 7.24.7
+    transitivePeerDependencies:
+      - supports-color
+    dev: false
+
   /@babel/helper-module-transforms@7.24.6(@babel/core@7.24.6):
     resolution: {integrity: sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==}
     engines: {node: '>=6.9.0'}
@@ -287,6 +383,22 @@ packages:
       '@babel/helper-validator-identifier': 7.24.6
     dev: false
 
+  /@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7):
+    resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.24.7
+      '@babel/helper-environment-visitor': 7.24.7
+      '@babel/helper-module-imports': 7.24.7
+      '@babel/helper-simple-access': 7.24.7
+      '@babel/helper-split-export-declaration': 7.24.7
+      '@babel/helper-validator-identifier': 7.24.7
+    transitivePeerDependencies:
+      - supports-color
+    dev: false
+
   /@babel/helper-optimise-call-expression@7.24.6:
     resolution: {integrity: sha512-3SFDJRbx7KuPRl8XDUr8O7GAEB8iGyWPjLKJh/ywP/Iy9WOmEfMrsWbaZpvBu2HSYn4KQygIsz0O7m8y10ncMA==}
     engines: {node: '>=6.9.0'}
@@ -299,6 +411,11 @@ packages:
     engines: {node: '>=6.9.0'}
     dev: false
 
+  /@babel/helper-plugin-utils@7.24.7:
+    resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==}
+    engines: {node: '>=6.9.0'}
+    dev: false
+
   /@babel/helper-remap-async-to-generator@7.24.6(@babel/core@7.24.6):
     resolution: {integrity: sha512-1Qursq9ArRZPAMOZf/nuzVW8HgJLkTB9y9LfP4lW2MVp4e9WkLJDovfKBxoDcCk6VuzIxyqWHyBoaCtSRP10yg==}
     engines: {node: '>=6.9.0'}
@@ -330,6 +447,16 @@ packages:
       '@babel/types': 7.24.6
     dev: false
 
+  /@babel/helper-simple-access@7.24.7:
+    resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/traverse': 7.24.7
+      '@babel/types': 7.24.7
+    transitivePeerDependencies:
+      - supports-color
+    dev: false
+
   /@babel/helper-skip-transparent-expression-wrappers@7.24.6:
     resolution: {integrity: sha512-jhbbkK3IUKc4T43WadP96a27oYti9gEf1LdyGSP2rHGH77kwLwfhO7TgwnWvxxQVmke0ImmCSS47vcuxEMGD3Q==}
     engines: {node: '>=6.9.0'}
@@ -344,21 +471,43 @@ packages:
       '@babel/types': 7.24.6
     dev: false
 
+  /@babel/helper-split-export-declaration@7.24.7:
+    resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.24.7
+    dev: false
+
   /@babel/helper-string-parser@7.24.6:
     resolution: {integrity: sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==}
     engines: {node: '>=6.9.0'}
     dev: false
 
+  /@babel/helper-string-parser@7.24.7:
+    resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==}
+    engines: {node: '>=6.9.0'}
+    dev: false
+
   /@babel/helper-validator-identifier@7.24.6:
     resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==}
     engines: {node: '>=6.9.0'}
     dev: false
 
+  /@babel/helper-validator-identifier@7.24.7:
+    resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==}
+    engines: {node: '>=6.9.0'}
+    dev: false
+
   /@babel/helper-validator-option@7.24.6:
     resolution: {integrity: sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==}
     engines: {node: '>=6.9.0'}
     dev: false
 
+  /@babel/helper-validator-option@7.24.7:
+    resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==}
+    engines: {node: '>=6.9.0'}
+    dev: false
+
   /@babel/helper-wrap-function@7.24.6:
     resolution: {integrity: sha512-f1JLrlw/jbiNfxvdrfBgio/gRBk3yTAEJWirpAkiJG2Hb22E7cEYKHWo0dFPTv/niPovzIdPdEDetrv6tC6gPQ==}
     engines: {node: '>=6.9.0'}
@@ -376,6 +525,14 @@ packages:
       '@babel/types': 7.24.6
     dev: false
 
+  /@babel/helpers@7.24.7:
+    resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/template': 7.24.7
+      '@babel/types': 7.24.7
+    dev: false
+
   /@babel/highlight@7.24.6:
     resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==}
     engines: {node: '>=6.9.0'}
@@ -386,6 +543,16 @@ packages:
       picocolors: 1.0.1
     dev: false
 
+  /@babel/highlight@7.24.7:
+    resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-validator-identifier': 7.24.7
+      chalk: 2.4.2
+      js-tokens: 4.0.0
+      picocolors: 1.0.1
+    dev: false
+
   /@babel/parser@7.24.6:
     resolution: {integrity: sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==}
     engines: {node: '>=6.0.0'}
@@ -394,6 +561,14 @@ packages:
       '@babel/types': 7.24.6
     dev: false
 
+  /@babel/parser@7.24.7:
+    resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==}
+    engines: {node: '>=6.0.0'}
+    hasBin: true
+    dependencies:
+      '@babel/types': 7.24.7
+    dev: false
+
   /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.6(@babel/core@7.24.6):
     resolution: {integrity: sha512-bYndrJ6Ph6Ar+GaB5VAc0JPoP80bQCm4qon6JEzXfRl5QZyQ8Ur1K6k7htxWmPA5z+k7JQvaMUrtXlqclWYzKw==}
     engines: {node: '>=6.9.0'}
@@ -609,6 +784,16 @@ packages:
       '@babel/helper-plugin-utils': 7.24.6
     dev: false
 
+  /@babel/plugin-syntax-flow@7.24.7(@babel/core@7.24.7):
+    resolution: {integrity: sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.24.7
+      '@babel/helper-plugin-utils': 7.24.7
+    dev: false
+
   /@babel/plugin-syntax-import-assertions@7.24.6(@babel/core@7.24.6):
     resolution: {integrity: sha512-BE6o2BogJKJImTmGpkmOic4V0hlRRxVtzqxiSPa8TIFxyhi4EFjHm08nq1M4STK4RytuLMgnSz0/wfflvGFNOg==}
     engines: {node: '>=6.9.0'}
@@ -657,6 +842,16 @@ packages:
       '@babel/helper-plugin-utils': 7.24.6
     dev: false
 
+  /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7):
+    resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.24.7
+      '@babel/helper-plugin-utils': 7.24.7
+    dev: false
+
   /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.6):
     resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
     peerDependencies:
@@ -1223,6 +1418,22 @@ packages:
       '@babel/types': 7.24.6
     dev: false
 
+  /@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.7):
+    resolution: {integrity: sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.24.7
+      '@babel/helper-annotate-as-pure': 7.24.7
+      '@babel/helper-module-imports': 7.24.7
+      '@babel/helper-plugin-utils': 7.24.7
+      '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7)
+      '@babel/types': 7.24.7
+    transitivePeerDependencies:
+      - supports-color
+    dev: false
+
   /@babel/plugin-transform-react-pure-annotations@7.24.6(@babel/core@7.24.6):
     resolution: {integrity: sha512-0HoDQlFJJkXRyV2N+xOpUETbKHcouSwijRQbKWVtxsPoq5bbB30qZag9/pSc5xcWVYjTHlLsBsY+hZDnzQTPNw==}
     engines: {node: '>=6.9.0'}
@@ -1522,6 +1733,13 @@ packages:
       regenerator-runtime: 0.14.1
     dev: false
 
+  /@babel/runtime@7.24.7:
+    resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      regenerator-runtime: 0.14.1
+    dev: false
+
   /@babel/template@7.24.6:
     resolution: {integrity: sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==}
     engines: {node: '>=6.9.0'}
@@ -1531,6 +1749,15 @@ packages:
       '@babel/types': 7.24.6
     dev: false
 
+  /@babel/template@7.24.7:
+    resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/code-frame': 7.24.7
+      '@babel/parser': 7.24.7
+      '@babel/types': 7.24.7
+    dev: false
+
   /@babel/traverse@7.24.6:
     resolution: {integrity: sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==}
     engines: {node: '>=6.9.0'}
@@ -1549,6 +1776,24 @@ packages:
       - supports-color
     dev: false
 
+  /@babel/traverse@7.24.7:
+    resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/code-frame': 7.24.7
+      '@babel/generator': 7.24.7
+      '@babel/helper-environment-visitor': 7.24.7
+      '@babel/helper-function-name': 7.24.7
+      '@babel/helper-hoist-variables': 7.24.7
+      '@babel/helper-split-export-declaration': 7.24.7
+      '@babel/parser': 7.24.7
+      '@babel/types': 7.24.7
+      debug: 4.3.5
+      globals: 11.12.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: false
+
   /@babel/types@7.24.6:
     resolution: {integrity: sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==}
     engines: {node: '>=6.9.0'}
@@ -1558,6 +1803,15 @@ packages:
       to-fast-properties: 2.0.0
     dev: false
 
+  /@babel/types@7.24.7:
+    resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-string-parser': 7.24.7
+      '@babel/helper-validator-identifier': 7.24.7
+      to-fast-properties: 2.0.0
+    dev: false
+
   /@bcoe/v8-coverage@0.2.3:
     resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
     dev: false
@@ -1729,8 +1983,8 @@ packages:
       postcss-selector-parser: 6.1.0
     dev: false
 
-  /@dage/krpano@2.2.0(react-dom@18.3.1)(react@18.3.1):
-    resolution: {integrity: sha512-wuxl59g5OAozx/OXpJVQeCGreho3LVPzwJSnmnyxXG0pAfhN4+4r9r9w3oxY5EjPjEhT5Fnc8tnj8bxdGS/WiA==}
+  /@dage/krpano@2.2.2(react-dom@18.3.1)(react@18.3.1):
+    resolution: {integrity: sha512-TO+cYOirCgGt/5VQLozWbMkxltrWJs9BWMn11TyQnbM8qXUObgrVfRDQeEQNXAdubtpTEpotSOG6NZiDWeCx1Q==}
     peerDependencies:
       react: '>=18'
       react-dom: '>=18'
@@ -2371,8 +2625,8 @@ packages:
     resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==}
     engines: {node: '>=18'}
     dependencies:
-      '@babel/code-frame': 7.24.6
-      '@babel/runtime': 7.24.6
+      '@babel/code-frame': 7.24.7
+      '@babel/runtime': 7.24.7
       '@types/aria-query': 5.0.4
       aria-query: 5.3.0
       chalk: 4.1.2
@@ -3653,6 +3907,17 @@ packages:
       update-browserslist-db: 1.0.16(browserslist@4.23.0)
     dev: false
 
+  /browserslist@4.23.1:
+    resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==}
+    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+    hasBin: true
+    dependencies:
+      caniuse-lite: 1.0.30001632
+      electron-to-chromium: 1.4.798
+      node-releases: 2.0.14
+      update-browserslist-db: 1.0.16(browserslist@4.23.1)
+    dev: false
+
   /bser@2.1.1:
     resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
     dependencies:
@@ -3729,6 +3994,10 @@ packages:
     resolution: {integrity: sha512-4zgNiB8nTyV/tHhwZrFs88ryjls/lHiqFhrxCW4qSTeuRByBVnPYpDInchOIySWknznucaf31Z4KYqjfbrecVw==}
     dev: false
 
+  /caniuse-lite@1.0.30001632:
+    resolution: {integrity: sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg==}
+    dev: false
+
   /case-sensitive-paths-webpack-plugin@2.4.0:
     resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==}
     engines: {node: '>=4'}
@@ -4605,6 +4874,10 @@ packages:
     resolution: {integrity: sha512-0VbyiaXoT++Fi2vHGo2ThOeS6X3vgRCWrjPeO2FeIAWL6ItiSJ9BqlH8LfCXe3X1IdcG+S0iLoNaxQWhfZoGzQ==}
     dev: false
 
+  /electron-to-chromium@1.4.798:
+    resolution: {integrity: sha512-by9J2CiM9KPGj9qfp5U4FcPSbXJG7FNzqnYaY4WLzX+v2PHieVGmnsA4dxfpGE3QEC7JofpPZmn7Vn1B9NR2+Q==}
+    dev: false
+
   /emittery@0.10.2:
     resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==}
     engines: {node: '>=12'}
@@ -4843,7 +5116,7 @@ packages:
       source-map: 0.6.1
     dev: false
 
-  /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.6)(@babel/plugin-transform-react-jsx@7.24.6)(eslint@8.57.0)(jest@27.5.1)(typescript@4.9.5):
+  /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.7)(@babel/plugin-transform-react-jsx@7.24.7)(eslint@8.57.0)(jest@27.5.1)(typescript@4.9.5):
     resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -4861,7 +5134,7 @@ packages:
       babel-preset-react-app: 10.0.1
       confusing-browser-globals: 1.0.11
       eslint: 8.57.0
-      eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.6)(@babel/plugin-transform-react-jsx@7.24.6)(eslint@8.57.0)
+      eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.7)(@babel/plugin-transform-react-jsx@7.24.7)(eslint@8.57.0)
       eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)
       eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(jest@27.5.1)(typescript@4.9.5)
       eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0)
@@ -4917,7 +5190,7 @@ packages:
       - supports-color
     dev: false
 
-  /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.24.6)(@babel/plugin-transform-react-jsx@7.24.6)(eslint@8.57.0):
+  /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.24.7)(@babel/plugin-transform-react-jsx@7.24.7)(eslint@8.57.0):
     resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==}
     engines: {node: '>=12.0.0'}
     peerDependencies:
@@ -4925,8 +5198,8 @@ packages:
       '@babel/plugin-transform-react-jsx': ^7.14.9
       eslint: ^8.1.0
     dependencies:
-      '@babel/plugin-syntax-flow': 7.24.6(@babel/core@7.24.6)
-      '@babel/plugin-transform-react-jsx': 7.24.6(@babel/core@7.24.6)
+      '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.24.7)
+      '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.7)
       eslint: 8.57.0
       lodash: 4.17.21
       string-natural-compare: 3.0.1
@@ -8859,7 +9132,7 @@ packages:
       react: 18.3.1
     dev: false
 
-  /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.6)(@babel/plugin-transform-react-jsx@7.24.6)(eslint@8.57.0)(react@18.3.1)(sass@1.77.4)(typescript@4.9.5):
+  /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7)(@babel/plugin-transform-react-jsx@7.24.7)(eslint@8.57.0)(react@18.3.1)(sass@1.77.4)(typescript@4.9.5):
     resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==}
     engines: {node: '>=14.0.0'}
     hasBin: true
@@ -8887,7 +9160,7 @@ packages:
       dotenv: 10.0.0
       dotenv-expand: 5.1.0
       eslint: 8.57.0
-      eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.6)(@babel/plugin-transform-react-jsx@7.24.6)(eslint@8.57.0)(jest@27.5.1)(typescript@4.9.5)
+      eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.7)(@babel/plugin-transform-react-jsx@7.24.7)(eslint@8.57.0)(jest@27.5.1)(typescript@4.9.5)
       eslint-webpack-plugin: 3.2.0(eslint@8.57.0)(webpack@5.91.0)
       file-loader: 6.2.0(webpack@5.91.0)
       fs-extra: 10.1.0
@@ -10294,6 +10567,17 @@ packages:
       picocolors: 1.0.1
     dev: false
 
+  /update-browserslist-db@1.0.16(browserslist@4.23.1):
+    resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==}
+    hasBin: true
+    peerDependencies:
+      browserslist: '>= 4.21.0'
+    dependencies:
+      browserslist: 4.23.1
+      escalade: 3.1.2
+      picocolors: 1.0.1
+    dev: false
+
   /uri-js@4.4.1:
     resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
     dependencies:

+ 177 - 47
src/App.tsx

@@ -98,18 +98,22 @@ function App() {
             <View
               hlookat={10}
               vlookat={20}
+              hlookatMin={-70}
+              hlookatMax={85}
+              vlookatMin={-70}
+              vlookatMax={80}
               fovType="MFOV"
               fov={120}
               maxPixelZoom={2}
               fovMin={70}
               fovMax={140}
-              limitView="auto"
+              limitView="range"
             />
 
             <HotSpot
               name="hotspot1"
               type="text"
-              atv={17}
+              atv={6}
               ath={-1}
               scale={0.5}
               edge="top"
@@ -120,7 +124,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-XW4mfRey6mK")}
             >
               <div className="hotspot-item">
-                <p>翠湖山商业区</p>
+                <p>香园</p>
               </div>
             </HotSpot>
 
@@ -138,15 +142,15 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-5iy1XKL3pYu")}
             >
               <div className="hotspot-item">
-                <p>翠湖香山留香苑6-111</p>
+                <p style={{ letterSpacing: 1 }}>留香苑传统中式合院别墅(B2)</p>
               </div>
             </HotSpot>
 
             <HotSpot
               name="hotspot3"
               type="text"
-              atv={-12}
-              ath={2.5}
+              atv={-13}
+              ath={19}
               scale={0.5}
               edge="top"
               bg={false}
@@ -156,7 +160,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-vrMFXRis6MK")}
             >
               <div className="hotspot-item">
-                <p style={{ letterSpacing: 0 }}>留香苑AB区主入口及中轴景观</p>
+                <p>留香苑AB区归家大堂</p>
               </div>
             </HotSpot>
 
@@ -174,7 +178,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-WqBcApJJRfd")}
             >
               <div className="hotspot-item">
-                <p>留香苑C区</p>
+                <p>留香苑C区归家大堂</p>
               </div>
             </HotSpot>
           </>
@@ -223,7 +227,8 @@ function App() {
               maxPixelZoom={2}
               fovMin={70}
               fovMax={140}
-              limitView="auto"
+              vlookatMin={-70}
+              limitView="range"
             />
 
             <HotSpot
@@ -240,7 +245,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-XW4mfRey6mK")}
             >
               <div className="hotspot-item">
-                <p>翠湖山商业区</p>
+                <p>香园</p>
               </div>
             </HotSpot>
 
@@ -258,7 +263,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-5iy1XKL3pYu")}
             >
               <div className="hotspot-item">
-                <p>翠湖香山留香苑6-111</p>
+                <p style={{ letterSpacing: 1 }}>留香苑传统中式合院别墅(B2)</p>
               </div>
             </HotSpot>
 
@@ -276,7 +281,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-vrMFXRis6MK")}
             >
               <div className="hotspot-item">
-                <p style={{ letterSpacing: 0 }}>留香苑AB区主入口及中轴景观</p>
+                <p>留香苑AB区归家大堂</p>
               </div>
             </HotSpot>
 
@@ -294,7 +299,24 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-WqBcApJJRfd")}
             >
               <div className="hotspot-item">
-                <p>留香苑C区</p>
+                <p>留香苑C区归家大堂</p>
+              </div>
+            </HotSpot>
+
+            <HotSpot
+              name="hotspot5"
+              type="text"
+              atv={-18}
+              ath={-30}
+              scale={0.4}
+              edge="top"
+              bg={false}
+              distorted={true}
+              onOver={() => {}}
+              onOut={() => {}}
+            >
+              <div className="hotspot-item">
+                <p>翠湖高尔夫</p>
               </div>
             </HotSpot>
           </>
@@ -343,7 +365,8 @@ function App() {
               maxPixelZoom={2}
               fovMin={70}
               fovMax={140}
-              limitView="auto"
+              vlookatMin={-70}
+              limitView="range"
             />
 
             <HotSpot
@@ -360,7 +383,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-XW4mfRey6mK")}
             >
               <div className="hotspot-item">
-                <p>翠湖山商业区</p>
+                <p>香园</p>
               </div>
             </HotSpot>
 
@@ -378,7 +401,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-5iy1XKL3pYu")}
             >
               <div className="hotspot-item">
-                <p>翠湖香山留香苑6-111</p>
+                <p style={{ letterSpacing: 1 }}>留香苑传统中式合院别墅(B2)</p>
               </div>
             </HotSpot>
 
@@ -396,7 +419,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-vrMFXRis6MK")}
             >
               <div className="hotspot-item">
-                <p style={{ letterSpacing: 0 }}>留香苑AB区主入口及中轴景观</p>
+                <p>留香苑AB区归家大堂</p>
               </div>
             </HotSpot>
 
@@ -414,7 +437,24 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-WqBcApJJRfd")}
             >
               <div className="hotspot-item">
-                <p>留香苑C区</p>
+                <p>留香苑C区归家大堂</p>
+              </div>
+            </HotSpot>
+
+            <HotSpot
+              name="hotspot5"
+              type="text"
+              atv={-17}
+              ath={-40}
+              scale={0.4}
+              edge="top"
+              bg={false}
+              distorted={true}
+              onOver={() => {}}
+              onOut={() => {}}
+            >
+              <div className="hotspot-item">
+                <p>翠湖高尔夫</p>
               </div>
             </HotSpot>
           </>
@@ -463,7 +503,8 @@ function App() {
               maxPixelZoom={2}
               fovMin={70}
               fovMax={140}
-              limitView="auto"
+              vlookatMin={-70}
+              limitView="range"
             />
 
             <HotSpot
@@ -480,7 +521,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-XW4mfRey6mK")}
             >
               <div className="hotspot-item">
-                <p>翠湖山商业区</p>
+                <p>香园</p>
               </div>
             </HotSpot>
 
@@ -498,15 +539,15 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-5iy1XKL3pYu")}
             >
               <div className="hotspot-item">
-                <p>翠湖香山留香苑6-111</p>
+                <p style={{ letterSpacing: 1 }}>留香苑传统中式合院别墅(B2)</p>
               </div>
             </HotSpot>
 
             <HotSpot
               name="hotspot3"
               type="text"
-              atv={-5}
-              ath={-36}
+              atv={-10}
+              ath={-37}
               scale={0.5}
               edge="top"
               bg={false}
@@ -516,7 +557,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-vrMFXRis6MK")}
             >
               <div className="hotspot-item">
-                <p style={{ letterSpacing: 0 }}>留香苑AB区主入口及中轴景观</p>
+                <p>留香苑AB区归家大堂</p>
               </div>
             </HotSpot>
 
@@ -534,7 +575,24 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-WqBcApJJRfd")}
             >
               <div className="hotspot-item">
-                <p>留香苑C区</p>
+                <p>留香苑C区归家大堂</p>
+              </div>
+            </HotSpot>
+
+            <HotSpot
+              name="hotspot5"
+              type="text"
+              atv={-16}
+              ath={79}
+              scale={0.4}
+              edge="top"
+              bg={false}
+              distorted={true}
+              onOver={() => {}}
+              onOut={() => {}}
+            >
+              <div className="hotspot-item">
+                <p>翠湖高尔夫</p>
               </div>
             </HotSpot>
           </>
@@ -583,7 +641,8 @@ function App() {
               maxPixelZoom={2}
               fovMin={70}
               fovMax={140}
-              limitView="auto"
+              vlookatMin={-70}
+              limitView="range"
             />
 
             <HotSpot
@@ -600,7 +659,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-XW4mfRey6mK")}
             >
               <div className="hotspot-item">
-                <p>翠湖山商业区</p>
+                <p>香园</p>
               </div>
             </HotSpot>
 
@@ -618,7 +677,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-5iy1XKL3pYu")}
             >
               <div className="hotspot-item">
-                <p>翠湖香山留香苑6-111</p>
+                <p style={{ letterSpacing: 1 }}>留香苑传统中式合院别墅(B2)</p>
               </div>
             </HotSpot>
 
@@ -636,7 +695,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-vrMFXRis6MK")}
             >
               <div className="hotspot-item">
-                <p style={{ letterSpacing: 0 }}>留香苑AB区主入口及中轴景观</p>
+                <p>留香苑AB区归家大堂</p>
               </div>
             </HotSpot>
 
@@ -654,7 +713,24 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-WqBcApJJRfd")}
             >
               <div className="hotspot-item">
-                <p>留香苑C区</p>
+                <p>留香苑C区归家大堂</p>
+              </div>
+            </HotSpot>
+
+            <HotSpot
+              name="hotspot5"
+              type="text"
+              atv={-19}
+              ath={200}
+              scale={0.4}
+              edge="top"
+              bg={false}
+              distorted={true}
+              onOver={() => {}}
+              onOut={() => {}}
+            >
+              <div className="hotspot-item">
+                <p>翠湖高尔夫</p>
               </div>
             </HotSpot>
           </>
@@ -703,10 +779,28 @@ function App() {
               maxPixelZoom={2}
               fovMin={70}
               fovMax={140}
-              limitView="auto"
+              vlookatMin={-70}
+              limitView="range"
             />
 
             <HotSpot
+              name="hotspot5"
+              type="text"
+              atv={-19}
+              ath={-125}
+              scale={0.4}
+              edge="top"
+              bg={false}
+              distorted={true}
+              onOver={() => {}}
+              onOut={() => {}}
+            >
+              <div className="hotspot-item">
+                <p>翠湖高尔夫</p>
+              </div>
+            </HotSpot>
+
+            <HotSpot
               name="hotspot1"
               type="text"
               atv={-16}
@@ -720,7 +814,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-XW4mfRey6mK")}
             >
               <div className="hotspot-item">
-                <p>翠湖山商业区</p>
+                <p>香园</p>
               </div>
             </HotSpot>
 
@@ -738,15 +832,15 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-5iy1XKL3pYu")}
             >
               <div className="hotspot-item">
-                <p>翠湖香山留香苑6-111</p>
+                <p style={{ letterSpacing: 1 }}>留香苑传统中式合院别墅(B2)</p>
               </div>
             </HotSpot>
 
             <HotSpot
               name="hotspot3"
               type="text"
-              atv={-9}
-              ath={240}
+              atv={-7}
+              ath={235}
               scale={0.5}
               edge="top"
               bg={false}
@@ -756,7 +850,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-vrMFXRis6MK")}
             >
               <div className="hotspot-item">
-                <p style={{ letterSpacing: 0 }}>留香苑AB区主入口及中轴景观</p>
+                <p>留香苑AB区归家大堂</p>
               </div>
             </HotSpot>
 
@@ -774,7 +868,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-WqBcApJJRfd")}
             >
               <div className="hotspot-item">
-                <p>留香苑C区</p>
+                <p>留香苑C区归家大堂</p>
               </div>
             </HotSpot>
           </>
@@ -823,10 +917,28 @@ function App() {
               maxPixelZoom={2}
               fovMin={70}
               fovMax={140}
-              limitView="auto"
+              vlookatMin={-70}
+              limitView="range"
             />
 
             <HotSpot
+              name="hotspot5"
+              type="text"
+              atv={-19.5}
+              ath={-32}
+              scale={0.4}
+              edge="top"
+              bg={false}
+              distorted={true}
+              onOver={() => {}}
+              onOut={() => {}}
+            >
+              <div className="hotspot-item">
+                <p>翠湖高尔夫</p>
+              </div>
+            </HotSpot>
+
+            <HotSpot
               name="hotspot1"
               type="text"
               atv={-19.5}
@@ -840,7 +952,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-XW4mfRey6mK")}
             >
               <div className="hotspot-item">
-                <p>翠湖山商业区</p>
+                <p>香园</p>
               </div>
             </HotSpot>
 
@@ -858,7 +970,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-5iy1XKL3pYu")}
             >
               <div className="hotspot-item">
-                <p>翠湖香山留香苑6-111</p>
+                <p style={{ letterSpacing: 1 }}>留香苑传统中式合院别墅(B2)</p>
               </div>
             </HotSpot>
 
@@ -876,7 +988,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-vrMFXRis6MK")}
             >
               <div className="hotspot-item">
-                <p style={{ letterSpacing: 0 }}>留香苑AB区主入口及中轴景观</p>
+                <p>留香苑AB区归家大堂</p>
               </div>
             </HotSpot>
 
@@ -894,7 +1006,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-WqBcApJJRfd")}
             >
               <div className="hotspot-item">
-                <p>留香苑C区</p>
+                <p>留香苑C区归家大堂</p>
               </div>
             </HotSpot>
           </>
@@ -943,7 +1055,8 @@ function App() {
               maxPixelZoom={2}
               fovMin={70}
               fovMax={140}
-              limitView="auto"
+              vlookatMin={-70}
+              limitView="range"
             />
 
             <HotSpot
@@ -960,7 +1073,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-XW4mfRey6mK")}
             >
               <div className="hotspot-item">
-                <p>翠湖山商业区</p>
+                <p>香园</p>
               </div>
             </HotSpot>
 
@@ -978,7 +1091,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-5iy1XKL3pYu")}
             >
               <div className="hotspot-item">
-                <p>翠湖香山留香苑6-111</p>
+                <p style={{ letterSpacing: 1 }}>留香苑传统中式合院别墅(B2)</p>
               </div>
             </HotSpot>
 
@@ -996,7 +1109,7 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-vrMFXRis6MK")}
             >
               <div className="hotspot-item">
-                <p style={{ letterSpacing: 0 }}>留香苑AB区主入口及中轴景观</p>
+                <p>留香苑AB区归家大堂</p>
               </div>
             </HotSpot>
 
@@ -1014,7 +1127,24 @@ function App() {
               onClick={goToScene.bind(undefined, "KJ-WqBcApJJRfd")}
             >
               <div className="hotspot-item">
-                <p>留香苑C区</p>
+                <p>留香苑C区归家大堂</p>
+              </div>
+            </HotSpot>
+
+            <HotSpot
+              name="hotspot5"
+              type="text"
+              atv={-19.5}
+              ath={55}
+              scale={0.4}
+              edge="top"
+              bg={false}
+              distorted={true}
+              onOver={() => {}}
+              onOut={() => {}}
+            >
+              <div className="hotspot-item">
+                <p>翠湖高尔夫</p>
               </div>
             </HotSpot>
           </>