@ifc-lite/viewer 1.17.3 → 1.17.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +39 -30
- package/.turbo/turbo-typecheck.log +1 -1
- package/CHANGELOG.md +132 -0
- package/DESKTOP_CONTRACT_VERSION +1 -0
- package/dist/assets/arrow-CZ5kQ26f.js +20 -0
- package/dist/assets/basketViewActivator-86rgogji.js +1 -0
- package/dist/assets/{bcf-D5-QWGO9.js → bcf-DOG9_WPX.js} +1 -1
- package/dist/assets/{browser-CKs-FY1P.js → browser-C5TFR7sH.js} +1 -1
- package/dist/assets/cesium-ADbP7waU.css +1 -0
- package/dist/assets/cesium-DUOzBlqv.js +17817 -0
- package/dist/assets/drawing-2d-DoxKMqbO.js +257 -0
- package/dist/assets/{exporters-C_6J153K.js → exporters-CcPS9MK5.js} +2898 -2380
- package/dist/assets/geometry.worker-BFUYA08u.js +1 -0
- package/dist/assets/ids-DQ5jY0E8.js +1 -0
- package/dist/assets/ifc-lite_bg-BINvzoCP.wasm +0 -0
- package/dist/assets/{index-jhBr1wbn.js → index-Bfms9I4A.js} +41036 -34613
- package/dist/assets/index-_bfZsDCC.css +1 -0
- package/dist/assets/{maplibre-gl-BpvwNKKy.js → maplibre-gl-CGLcoNXc.js} +1 -1
- package/dist/assets/native-bridge-DUyLCMZS.js +429 -0
- package/dist/assets/{sandbox-B79eavQ3.js → sandbox-C8575tul.js} +4342 -4324
- package/dist/assets/{server-client-D3bUPJJc.js → server-client-BuZK7OST.js} +4 -4
- package/dist/assets/tauri-core-stub-D8Fa-u43.js +1 -0
- package/dist/assets/tauri-dialog-stub-r7Wksg7o.js +1 -0
- package/dist/assets/tauri-fs-stub-BdeRC7aK.js +1 -0
- package/dist/assets/wasm-bridge-JsqEGDV8.js +1 -0
- package/dist/assets/{zip-B-jFFAGa.js → zip-DBEtpeu6.js} +3 -3
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json +1 -0
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json +1 -0
- package/dist/cesium/Assets/Images/bing_maps_credit.png +0 -0
- package/dist/cesium/Assets/Images/cesium_credit.png +0 -0
- package/dist/cesium/Assets/Images/google_earth_credit.png +0 -0
- package/dist/cesium/Assets/Images/ion-credit.png +0 -0
- package/dist/cesium/Assets/Textures/LensFlare/DirtMask.jpg +0 -0
- package/dist/cesium/Assets/Textures/LensFlare/StarBurst.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/0/0/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/1/0/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/2.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/3.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/2.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/2.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/3.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/3.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/2.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/2.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml +14 -0
- package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
- package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
- package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
- package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
- package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
- package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
- package/dist/cesium/Assets/Textures/maki/airfield.png +0 -0
- package/dist/cesium/Assets/Textures/maki/airport.png +0 -0
- package/dist/cesium/Assets/Textures/maki/alcohol-shop.png +0 -0
- package/dist/cesium/Assets/Textures/maki/america-football.png +0 -0
- package/dist/cesium/Assets/Textures/maki/art-gallery.png +0 -0
- package/dist/cesium/Assets/Textures/maki/bakery.png +0 -0
- package/dist/cesium/Assets/Textures/maki/bank.png +0 -0
- package/dist/cesium/Assets/Textures/maki/bar.png +0 -0
- package/dist/cesium/Assets/Textures/maki/baseball.png +0 -0
- package/dist/cesium/Assets/Textures/maki/basketball.png +0 -0
- package/dist/cesium/Assets/Textures/maki/beer.png +0 -0
- package/dist/cesium/Assets/Textures/maki/bicycle.png +0 -0
- package/dist/cesium/Assets/Textures/maki/building.png +0 -0
- package/dist/cesium/Assets/Textures/maki/bus.png +0 -0
- package/dist/cesium/Assets/Textures/maki/cafe.png +0 -0
- package/dist/cesium/Assets/Textures/maki/camera.png +0 -0
- package/dist/cesium/Assets/Textures/maki/campsite.png +0 -0
- package/dist/cesium/Assets/Textures/maki/car.png +0 -0
- package/dist/cesium/Assets/Textures/maki/cemetery.png +0 -0
- package/dist/cesium/Assets/Textures/maki/cesium.png +0 -0
- package/dist/cesium/Assets/Textures/maki/chemist.png +0 -0
- package/dist/cesium/Assets/Textures/maki/cinema.png +0 -0
- package/dist/cesium/Assets/Textures/maki/circle-stroked.png +0 -0
- package/dist/cesium/Assets/Textures/maki/circle.png +0 -0
- package/dist/cesium/Assets/Textures/maki/city.png +0 -0
- package/dist/cesium/Assets/Textures/maki/clothing-store.png +0 -0
- package/dist/cesium/Assets/Textures/maki/college.png +0 -0
- package/dist/cesium/Assets/Textures/maki/commercial.png +0 -0
- package/dist/cesium/Assets/Textures/maki/cricket.png +0 -0
- package/dist/cesium/Assets/Textures/maki/cross.png +0 -0
- package/dist/cesium/Assets/Textures/maki/dam.png +0 -0
- package/dist/cesium/Assets/Textures/maki/danger.png +0 -0
- package/dist/cesium/Assets/Textures/maki/disability.png +0 -0
- package/dist/cesium/Assets/Textures/maki/dog-park.png +0 -0
- package/dist/cesium/Assets/Textures/maki/embassy.png +0 -0
- package/dist/cesium/Assets/Textures/maki/emergency-telephone.png +0 -0
- package/dist/cesium/Assets/Textures/maki/entrance.png +0 -0
- package/dist/cesium/Assets/Textures/maki/farm.png +0 -0
- package/dist/cesium/Assets/Textures/maki/fast-food.png +0 -0
- package/dist/cesium/Assets/Textures/maki/ferry.png +0 -0
- package/dist/cesium/Assets/Textures/maki/fire-station.png +0 -0
- package/dist/cesium/Assets/Textures/maki/fuel.png +0 -0
- package/dist/cesium/Assets/Textures/maki/garden.png +0 -0
- package/dist/cesium/Assets/Textures/maki/gift.png +0 -0
- package/dist/cesium/Assets/Textures/maki/golf.png +0 -0
- package/dist/cesium/Assets/Textures/maki/grocery.png +0 -0
- package/dist/cesium/Assets/Textures/maki/hairdresser.png +0 -0
- package/dist/cesium/Assets/Textures/maki/harbor.png +0 -0
- package/dist/cesium/Assets/Textures/maki/heart.png +0 -0
- package/dist/cesium/Assets/Textures/maki/heliport.png +0 -0
- package/dist/cesium/Assets/Textures/maki/hospital.png +0 -0
- package/dist/cesium/Assets/Textures/maki/ice-cream.png +0 -0
- package/dist/cesium/Assets/Textures/maki/industrial.png +0 -0
- package/dist/cesium/Assets/Textures/maki/land-use.png +0 -0
- package/dist/cesium/Assets/Textures/maki/laundry.png +0 -0
- package/dist/cesium/Assets/Textures/maki/library.png +0 -0
- package/dist/cesium/Assets/Textures/maki/lighthouse.png +0 -0
- package/dist/cesium/Assets/Textures/maki/lodging.png +0 -0
- package/dist/cesium/Assets/Textures/maki/logging.png +0 -0
- package/dist/cesium/Assets/Textures/maki/london-underground.png +0 -0
- package/dist/cesium/Assets/Textures/maki/marker-stroked.png +0 -0
- package/dist/cesium/Assets/Textures/maki/marker.png +0 -0
- package/dist/cesium/Assets/Textures/maki/minefield.png +0 -0
- package/dist/cesium/Assets/Textures/maki/mobilephone.png +0 -0
- package/dist/cesium/Assets/Textures/maki/monument.png +0 -0
- package/dist/cesium/Assets/Textures/maki/museum.png +0 -0
- package/dist/cesium/Assets/Textures/maki/music.png +0 -0
- package/dist/cesium/Assets/Textures/maki/oil-well.png +0 -0
- package/dist/cesium/Assets/Textures/maki/park.png +0 -0
- package/dist/cesium/Assets/Textures/maki/park2.png +0 -0
- package/dist/cesium/Assets/Textures/maki/parking-garage.png +0 -0
- package/dist/cesium/Assets/Textures/maki/parking.png +0 -0
- package/dist/cesium/Assets/Textures/maki/pharmacy.png +0 -0
- package/dist/cesium/Assets/Textures/maki/pitch.png +0 -0
- package/dist/cesium/Assets/Textures/maki/place-of-worship.png +0 -0
- package/dist/cesium/Assets/Textures/maki/playground.png +0 -0
- package/dist/cesium/Assets/Textures/maki/police.png +0 -0
- package/dist/cesium/Assets/Textures/maki/polling-place.png +0 -0
- package/dist/cesium/Assets/Textures/maki/post.png +0 -0
- package/dist/cesium/Assets/Textures/maki/prison.png +0 -0
- package/dist/cesium/Assets/Textures/maki/rail-above.png +0 -0
- package/dist/cesium/Assets/Textures/maki/rail-light.png +0 -0
- package/dist/cesium/Assets/Textures/maki/rail-metro.png +0 -0
- package/dist/cesium/Assets/Textures/maki/rail-underground.png +0 -0
- package/dist/cesium/Assets/Textures/maki/rail.png +0 -0
- package/dist/cesium/Assets/Textures/maki/religious-christian.png +0 -0
- package/dist/cesium/Assets/Textures/maki/religious-jewish.png +0 -0
- package/dist/cesium/Assets/Textures/maki/religious-muslim.png +0 -0
- package/dist/cesium/Assets/Textures/maki/restaurant.png +0 -0
- package/dist/cesium/Assets/Textures/maki/roadblock.png +0 -0
- package/dist/cesium/Assets/Textures/maki/rocket.png +0 -0
- package/dist/cesium/Assets/Textures/maki/school.png +0 -0
- package/dist/cesium/Assets/Textures/maki/scooter.png +0 -0
- package/dist/cesium/Assets/Textures/maki/shop.png +0 -0
- package/dist/cesium/Assets/Textures/maki/skiing.png +0 -0
- package/dist/cesium/Assets/Textures/maki/slaughterhouse.png +0 -0
- package/dist/cesium/Assets/Textures/maki/soccer.png +0 -0
- package/dist/cesium/Assets/Textures/maki/square-stroked.png +0 -0
- package/dist/cesium/Assets/Textures/maki/square.png +0 -0
- package/dist/cesium/Assets/Textures/maki/star-stroked.png +0 -0
- package/dist/cesium/Assets/Textures/maki/star.png +0 -0
- package/dist/cesium/Assets/Textures/maki/suitcase.png +0 -0
- package/dist/cesium/Assets/Textures/maki/swimming.png +0 -0
- package/dist/cesium/Assets/Textures/maki/telephone.png +0 -0
- package/dist/cesium/Assets/Textures/maki/tennis.png +0 -0
- package/dist/cesium/Assets/Textures/maki/theatre.png +0 -0
- package/dist/cesium/Assets/Textures/maki/toilets.png +0 -0
- package/dist/cesium/Assets/Textures/maki/town-hall.png +0 -0
- package/dist/cesium/Assets/Textures/maki/town.png +0 -0
- package/dist/cesium/Assets/Textures/maki/triangle-stroked.png +0 -0
- package/dist/cesium/Assets/Textures/maki/triangle.png +0 -0
- package/dist/cesium/Assets/Textures/maki/village.png +0 -0
- package/dist/cesium/Assets/Textures/maki/warehouse.png +0 -0
- package/dist/cesium/Assets/Textures/maki/waste-basket.png +0 -0
- package/dist/cesium/Assets/Textures/maki/water.png +0 -0
- package/dist/cesium/Assets/Textures/maki/wetland.png +0 -0
- package/dist/cesium/Assets/Textures/maki/zoo.png +0 -0
- package/dist/cesium/Assets/Textures/moonSmall.jpg +0 -0
- package/dist/cesium/Assets/Textures/pin.svg +1 -0
- package/dist/cesium/Assets/Textures/waterNormals.jpg +0 -0
- package/dist/cesium/Assets/Textures/waterNormalsSmall.jpg +0 -0
- package/dist/cesium/Assets/approximateTerrainHeights.json +1 -0
- package/dist/cesium/ThirdParty/Workers/package.json +1 -0
- package/dist/cesium/ThirdParty/Workers/zip-web-worker.js +1 -0
- package/dist/cesium/ThirdParty/basis_transcoder.wasm +0 -0
- package/dist/cesium/ThirdParty/draco_decoder.wasm +0 -0
- package/dist/cesium/ThirdParty/google-earth-dbroot-parser.js +1 -0
- package/dist/cesium/ThirdParty/wasm_splats_bg.wasm +0 -0
- package/dist/cesium/ThirdParty/zip-module.wasm +0 -0
- package/dist/cesium/Widgets/Animation/Animation.css +127 -0
- package/dist/cesium/Widgets/Animation/lighter.css +70 -0
- package/dist/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css +108 -0
- package/dist/cesium/Widgets/BaseLayerPicker/lighter.css +22 -0
- package/dist/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css +102 -0
- package/dist/cesium/Widgets/CesiumInspector/CesiumInspector.css +113 -0
- package/dist/cesium/Widgets/CesiumWidget/CesiumWidget.css +119 -0
- package/dist/cesium/Widgets/CesiumWidget/lighter.css +14 -0
- package/dist/cesium/Widgets/FullscreenButton/FullscreenButton.css +8 -0
- package/dist/cesium/Widgets/Geocoder/Geocoder.css +70 -0
- package/dist/cesium/Widgets/Geocoder/lighter.css +17 -0
- package/dist/cesium/Widgets/I3SBuildingSceneLayerExplorer/I3SBuildingSceneLayerExplorer.css +27 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/azureAerial.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/azureRoads.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/bingAerial.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/bingRoads.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/blueMarble.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/earthAtNight.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/googleContour.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/googleRoadmap.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/googleSatellite.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/googleSatelliteLabels.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/mapboxStreets.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/mapboxTerrain.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/naturalEarthII.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/openStreetMap.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/sentinel-2.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/stamenToner.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/stamenWatercolor.png +0 -0
- package/dist/cesium/Widgets/Images/NavigationHelp/Mouse.svg +84 -0
- package/dist/cesium/Widgets/Images/NavigationHelp/MouseLeft.svg +76 -0
- package/dist/cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg +76 -0
- package/dist/cesium/Widgets/Images/NavigationHelp/MouseRight.svg +76 -0
- package/dist/cesium/Widgets/Images/NavigationHelp/Touch.svg +120 -0
- package/dist/cesium/Widgets/Images/NavigationHelp/TouchDrag.svg +129 -0
- package/dist/cesium/Widgets/Images/NavigationHelp/TouchRotate.svg +76 -0
- package/dist/cesium/Widgets/Images/NavigationHelp/TouchTilt.svg +135 -0
- package/dist/cesium/Widgets/Images/NavigationHelp/TouchZoom.svg +74 -0
- package/dist/cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png +0 -0
- package/dist/cesium/Widgets/Images/TerrainProviders/Ellipsoid.png +0 -0
- package/dist/cesium/Widgets/Images/TimelineIcons.png +0 -0
- package/dist/cesium/Widgets/Images/info-loading.gif +0 -0
- package/dist/cesium/Widgets/InfoBox/InfoBox.css +92 -0
- package/dist/cesium/Widgets/InfoBox/InfoBoxDescription.css +178 -0
- package/dist/cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css +93 -0
- package/dist/cesium/Widgets/NavigationHelpButton/lighter.css +38 -0
- package/dist/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css +15 -0
- package/dist/cesium/Widgets/ProjectionPicker/ProjectionPicker.css +38 -0
- package/dist/cesium/Widgets/SceneModePicker/SceneModePicker.css +56 -0
- package/dist/cesium/Widgets/SelectionIndicator/SelectionIndicator.css +20 -0
- package/dist/cesium/Widgets/Timeline/Timeline.css +103 -0
- package/dist/cesium/Widgets/Timeline/lighter.css +23 -0
- package/dist/cesium/Widgets/VRButton/VRButton.css +8 -0
- package/dist/cesium/Widgets/Viewer/Viewer.css +107 -0
- package/dist/cesium/Widgets/VoxelInspector/VoxelInspector.css +16 -0
- package/dist/cesium/Widgets/lighter.css +237 -0
- package/dist/cesium/Widgets/lighterShared.css +46 -0
- package/dist/cesium/Widgets/shared.css +103 -0
- package/dist/cesium/Widgets/widgets.css +1342 -0
- package/dist/cesium/Workers/chunk-23ZQ2IVV.js +29 -0
- package/dist/cesium/Workers/chunk-2EQO3Q56.js +26 -0
- package/dist/cesium/Workers/chunk-2MJIIVP4.js +26 -0
- package/dist/cesium/Workers/chunk-2TE5NTVD.js +26 -0
- package/dist/cesium/Workers/chunk-2ZBHLJST.js +26 -0
- package/dist/cesium/Workers/chunk-5TJMAQVL.js +26 -0
- package/dist/cesium/Workers/chunk-6BD4U3VO.js +26 -0
- package/dist/cesium/Workers/chunk-7TVGLKQF.js +26 -0
- package/dist/cesium/Workers/chunk-BTSYJ5XU.js +26 -0
- package/dist/cesium/Workers/chunk-BXMEEOCS.js +63 -0
- package/dist/cesium/Workers/chunk-BYLCY7GP.js +29 -0
- package/dist/cesium/Workers/chunk-CTHM3W6I.js +26 -0
- package/dist/cesium/Workers/chunk-CUUSNIVQ.js +26 -0
- package/dist/cesium/Workers/chunk-E3JOOS3S.js +26 -0
- package/dist/cesium/Workers/chunk-E7KYDCM5.js +26 -0
- package/dist/cesium/Workers/chunk-EDVBB7SS.js +27 -0
- package/dist/cesium/Workers/chunk-EFBN7QNX.js +26 -0
- package/dist/cesium/Workers/chunk-EQ4YRVWL.js +26 -0
- package/dist/cesium/Workers/chunk-F6PRE7D6.js +26 -0
- package/dist/cesium/Workers/chunk-FC4ZZ65J.js +26 -0
- package/dist/cesium/Workers/chunk-FFBVWF2L.js +26 -0
- package/dist/cesium/Workers/chunk-GBAA6GVX.js +26 -0
- package/dist/cesium/Workers/chunk-ICALLYLG.js +26 -0
- package/dist/cesium/Workers/chunk-ILRYTWTP.js +26 -0
- package/dist/cesium/Workers/chunk-IRNLBSEJ.js +26 -0
- package/dist/cesium/Workers/chunk-IX4VMHEV.js +26 -0
- package/dist/cesium/Workers/chunk-L6QHHACZ.js +26 -0
- package/dist/cesium/Workers/chunk-LI2ZSORM.js +26 -0
- package/dist/cesium/Workers/chunk-LSLE2RL4.js +26 -0
- package/dist/cesium/Workers/chunk-M4HLDBCG.js +26 -0
- package/dist/cesium/Workers/chunk-MJHHSGEH.js +26 -0
- package/dist/cesium/Workers/chunk-NMVKML6W.js +26 -0
- package/dist/cesium/Workers/chunk-OCWJRAXS.js +26 -0
- package/dist/cesium/Workers/chunk-OIRKANTH.js +26 -0
- package/dist/cesium/Workers/chunk-OIT7J4IC.js +26 -0
- package/dist/cesium/Workers/chunk-OLZ3FYUM.js +26 -0
- package/dist/cesium/Workers/chunk-Q5BPHJQF.js +26 -0
- package/dist/cesium/Workers/chunk-QFM5DCMQ.js +26 -0
- package/dist/cesium/Workers/chunk-QKUIYMGC.js +28 -0
- package/dist/cesium/Workers/chunk-S44JILQT.js +26 -0
- package/dist/cesium/Workers/chunk-SLT4J352.js +26 -0
- package/dist/cesium/Workers/chunk-SQMIIXB7.js +26 -0
- package/dist/cesium/Workers/chunk-TJ4XLGBQ.js +26 -0
- package/dist/cesium/Workers/chunk-TNSUQXWK.js +27 -0
- package/dist/cesium/Workers/chunk-UBOGZS7F.js +26 -0
- package/dist/cesium/Workers/chunk-V3OSTMM6.js +26 -0
- package/dist/cesium/Workers/chunk-V7QEYVP3.js +26 -0
- package/dist/cesium/Workers/chunk-VUKYSU4H.js +26 -0
- package/dist/cesium/Workers/chunk-W37FE5GR.js +26 -0
- package/dist/cesium/Workers/chunk-WBOV35NL.js +26 -0
- package/dist/cesium/Workers/chunk-WPMZLB3Y.js +26 -0
- package/dist/cesium/Workers/chunk-WWWZVEEH.js +26 -0
- package/dist/cesium/Workers/chunk-XFIQ5DEQ.js +28 -0
- package/dist/cesium/Workers/chunk-XQHLGIO7.js +26 -0
- package/dist/cesium/Workers/chunk-XUSCFAVF.js +26 -0
- package/dist/cesium/Workers/chunk-YP7I5QBZ.js +26 -0
- package/dist/cesium/Workers/chunk-Z3QF2EHT.js +26 -0
- package/dist/cesium/Workers/combineGeometry.js +26 -0
- package/dist/cesium/Workers/createBoxGeometry.js +26 -0
- package/dist/cesium/Workers/createBoxOutlineGeometry.js +26 -0
- package/dist/cesium/Workers/createCircleGeometry.js +26 -0
- package/dist/cesium/Workers/createCircleOutlineGeometry.js +26 -0
- package/dist/cesium/Workers/createCoplanarPolygonGeometry.js +26 -0
- package/dist/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +26 -0
- package/dist/cesium/Workers/createCorridorGeometry.js +26 -0
- package/dist/cesium/Workers/createCorridorOutlineGeometry.js +26 -0
- package/dist/cesium/Workers/createCylinderGeometry.js +26 -0
- package/dist/cesium/Workers/createCylinderOutlineGeometry.js +26 -0
- package/dist/cesium/Workers/createEllipseGeometry.js +26 -0
- package/dist/cesium/Workers/createEllipseOutlineGeometry.js +26 -0
- package/dist/cesium/Workers/createEllipsoidGeometry.js +26 -0
- package/dist/cesium/Workers/createEllipsoidOutlineGeometry.js +26 -0
- package/dist/cesium/Workers/createFrustumGeometry.js +26 -0
- package/dist/cesium/Workers/createFrustumOutlineGeometry.js +26 -0
- package/dist/cesium/Workers/createGeometry.js +26 -0
- package/dist/cesium/Workers/createGroundPolylineGeometry.js +26 -0
- package/dist/cesium/Workers/createPlaneGeometry.js +26 -0
- package/dist/cesium/Workers/createPlaneOutlineGeometry.js +26 -0
- package/dist/cesium/Workers/createPolygonGeometry.js +26 -0
- package/dist/cesium/Workers/createPolygonOutlineGeometry.js +26 -0
- package/dist/cesium/Workers/createPolylineGeometry.js +26 -0
- package/dist/cesium/Workers/createPolylineVolumeGeometry.js +26 -0
- package/dist/cesium/Workers/createPolylineVolumeOutlineGeometry.js +26 -0
- package/dist/cesium/Workers/createRectangleGeometry.js +26 -0
- package/dist/cesium/Workers/createRectangleOutlineGeometry.js +26 -0
- package/dist/cesium/Workers/createSimplePolylineGeometry.js +26 -0
- package/dist/cesium/Workers/createSphereGeometry.js +26 -0
- package/dist/cesium/Workers/createSphereOutlineGeometry.js +26 -0
- package/dist/cesium/Workers/createTaskProcessorWorker.js +26 -0
- package/dist/cesium/Workers/createVectorTileClampedPolylines.js +26 -0
- package/dist/cesium/Workers/createVectorTileGeometries.js +26 -0
- package/dist/cesium/Workers/createVectorTilePoints.js +26 -0
- package/dist/cesium/Workers/createVectorTilePolygons.js +26 -0
- package/dist/cesium/Workers/createVectorTilePolylines.js +26 -0
- package/dist/cesium/Workers/createVerticesFromCesium3DTilesTerrain.js +26 -0
- package/dist/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +26 -0
- package/dist/cesium/Workers/createVerticesFromHeightmap.js +26 -0
- package/dist/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +26 -0
- package/dist/cesium/Workers/createWallGeometry.js +26 -0
- package/dist/cesium/Workers/createWallOutlineGeometry.js +26 -0
- package/dist/cesium/Workers/decodeDraco.js +26 -0
- package/dist/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +26 -0
- package/dist/cesium/Workers/decodeI3S.js +26 -0
- package/dist/cesium/Workers/gaussianSplatSorter.js +26 -0
- package/dist/cesium/Workers/gaussianSplatTextureGenerator.js +26 -0
- package/dist/cesium/Workers/incrementallyBuildTerrainPicker.js +26 -0
- package/dist/cesium/Workers/transcodeKTX2.js +56 -0
- package/dist/cesium/Workers/transferTypedArrayTest.js +26 -0
- package/dist/cesium/Workers/upsampleQuantizedTerrainMesh.js +26 -0
- package/dist/cesium/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +26 -0
- package/dist/index.html +13 -10
- package/index.html +1 -0
- package/package.json +18 -15
- package/src/App.tsx +7 -9
- package/src/components/viewer/BCFPanel.tsx +46 -4
- package/src/components/viewer/CesiumOverlay.tsx +715 -0
- package/src/components/viewer/CesiumSettingsDialog.tsx +100 -0
- package/src/components/viewer/ChatPanel.tsx +232 -90
- package/src/components/viewer/CommandPalette.tsx +6 -1
- package/src/components/viewer/DesktopEntitlementBanner.tsx +74 -0
- package/src/components/viewer/ExportChangesButton.tsx +6 -1
- package/src/components/viewer/ExportDialog.tsx +22 -6
- package/src/components/viewer/HierarchyPanel.tsx +196 -0
- package/src/components/viewer/IDSPanel.tsx +52 -3
- package/src/components/viewer/KeyboardShortcutsDialog.tsx +1 -1
- package/src/components/viewer/MainToolbar.tsx +355 -28
- package/src/components/viewer/PropertiesPanel.tsx +234 -81
- package/src/components/viewer/ScriptPanel.tsx +34 -8
- package/src/components/viewer/SettingsPage.tsx +581 -0
- package/src/components/viewer/StatusBar.tsx +17 -1
- package/src/components/viewer/ThemeSwitch.tsx +63 -7
- package/src/components/viewer/ViewerLayout.tsx +48 -6
- package/src/components/viewer/Viewport.tsx +61 -8
- package/src/components/viewer/ViewportContainer.tsx +265 -28
- package/src/components/viewer/ViewportOverlays.tsx +132 -27
- package/src/components/viewer/bcf/BCFTopicDetail.tsx +4 -4
- package/src/components/viewer/chat/ModelSelector.tsx +90 -54
- package/src/components/viewer/properties/GeoreferencingPanel.tsx +229 -55
- package/src/components/viewer/properties/LocationMap.tsx +462 -19
- package/src/components/viewer/properties/ModelMetadataPanel.tsx +1 -1
- package/src/components/viewer/selectionHandlers.ts +4 -3
- package/src/components/viewer/tools/SectionCapControls.tsx +237 -0
- package/src/components/viewer/tools/SectionPanel.tsx +39 -18
- package/src/components/viewer/useAnimationLoop.ts +13 -1
- package/src/components/viewer/useGeometryStreaming.ts +127 -40
- package/src/components/viewer/useMouseControls.ts +4 -1
- package/src/components/viewer/useRenderUpdates.ts +1 -1
- package/src/hooks/ids/idsDataAccessor.ts +60 -24
- package/src/hooks/ingest/viewerModelIngest.ts +280 -0
- package/src/hooks/useIDS.ts +1 -1
- package/src/hooks/useIfc.ts +7 -1
- package/src/hooks/useIfcCache.ts +28 -15
- package/src/hooks/useIfcFederation.ts +378 -291
- package/src/hooks/useIfcLoader.ts +1657 -130
- package/src/hooks/useIfcServer.ts +0 -69
- package/src/hooks/useViewControls.ts +13 -5
- package/src/index.css +484 -10
- package/src/lib/desktop/desktopEntitlementEvents.ts +39 -0
- package/src/lib/desktop-entitlement.ts +43 -0
- package/src/lib/desktop-product.ts +124 -0
- package/src/lib/geo/cesium-bridge.ts +318 -0
- package/src/lib/geo/effective-georef.test.ts +73 -0
- package/src/lib/geo/effective-georef.ts +111 -0
- package/src/lib/geo/reproject.ts +249 -37
- package/src/lib/llm/byok-guard.test.ts +77 -0
- package/src/lib/llm/byok-guard.ts +39 -0
- package/src/lib/llm/free-models.test.ts +0 -6
- package/src/lib/llm/models.ts +104 -42
- package/src/lib/llm/stream-client.ts +74 -110
- package/src/lib/llm/stream-direct.test.ts +130 -0
- package/src/lib/llm/stream-direct.ts +316 -0
- package/src/lib/llm/types.ts +14 -2
- package/src/lib/recent-files.ts +2 -1
- package/src/main.tsx +1 -10
- package/src/services/analysis-extensions.ts +125 -0
- package/src/services/api-keys.ts +73 -0
- package/src/services/app-navigation.ts +13 -0
- package/src/services/bsdd.ts +53 -4
- package/src/services/cacheService.ts +1 -1
- package/src/services/desktop-cache.ts +43 -0
- package/src/services/desktop-export.ts +77 -0
- package/src/services/desktop-harness.ts +196 -0
- package/src/services/desktop-logger.ts +20 -0
- package/src/services/desktop-native-metadata.ts +207 -0
- package/src/services/desktop-panel-actions.ts +43 -0
- package/src/services/desktop-preferences.ts +44 -0
- package/src/services/file-dialog.ts +147 -0
- package/src/services/tauri-core-stub.ts +7 -0
- package/src/services/tauri-dialog-stub.ts +7 -0
- package/src/services/tauri-fs-stub.ts +7 -0
- package/src/store/constants.ts +20 -2
- package/src/store/index.ts +52 -7
- package/src/store/slices/cesiumSlice.ts +127 -0
- package/src/store/slices/chatSlice.test.ts +6 -76
- package/src/store/slices/chatSlice.ts +21 -58
- package/src/store/slices/dataSlice.ts +139 -28
- package/src/store/slices/desktopEntitlementSlice.ts +86 -0
- package/src/store/slices/loadingSlice.ts +14 -2
- package/src/store/slices/modelSlice.ts +58 -3
- package/src/store/slices/sectionSlice.test.ts +87 -7
- package/src/store/slices/sectionSlice.ts +151 -5
- package/src/store/slices/uiSlice.ts +28 -5
- package/src/store/types.ts +122 -2
- package/src/store.ts +1 -1
- package/src/utils/desktopModelSnapshot.ts +358 -0
- package/src/utils/ifcConfig.ts +6 -1
- package/src/utils/nativeSpatialDataStore.ts +253 -0
- package/src/utils/serverDataModel.ts +4 -0
- package/src/utils/spatialHierarchy.ts +10 -11
- package/src/utils/viewportUtils.ts +7 -2
- package/src/vite-env.d.ts +0 -4
- package/vite.config.ts +24 -0
- package/dist/assets/arrow-DJf2ErbF.js +0 -20
- package/dist/assets/basketViewActivator-aojwdomq.js +0 -1
- package/dist/assets/desktop-cache-oPzaWXYE.js +0 -1
- package/dist/assets/drawing-2d-gWfpdfYe.js +0 -257
- package/dist/assets/geometry.worker-Nz9_YIqh.js +0 -1
- package/dist/assets/ids-B4jTqB1O.js +0 -1
- package/dist/assets/ifc-lite_bg-eSkBTizQ.wasm +0 -0
- package/dist/assets/index-pbE7itQS.css +0 -1
- package/dist/assets/native-bridge-DSIyEYXG.js +0 -113
- package/dist/assets/wasm-bridge-B0J07fZZ.js +0 -1
- package/src/components/viewer/UpgradePage.tsx +0 -69
- package/src/lib/llm/ClerkChatSync.tsx +0 -74
- package/src/lib/llm/clerk-auth.ts +0 -62
|
@@ -60,8 +60,24 @@ export function StatusBar() {
|
|
|
60
60
|
if (!geometryResult) {
|
|
61
61
|
return { elements: 0, triangles: 0 };
|
|
62
62
|
}
|
|
63
|
+
// Count actual entities: for color-merged meshes, count unique entity IDs
|
|
64
|
+
let elements = 0;
|
|
65
|
+
const meshes = geometryResult.meshes;
|
|
66
|
+
if (meshes) {
|
|
67
|
+
for (let i = 0; i < meshes.length; i++) {
|
|
68
|
+
const m = meshes[i] as { entityIds?: Uint32Array };
|
|
69
|
+
if (m.entityIds && m.entityIds.length > 0) {
|
|
70
|
+
// Count unique entity IDs in this merged mesh
|
|
71
|
+
const seen = new Set<number>();
|
|
72
|
+
for (let j = 0; j < m.entityIds.length; j++) seen.add(m.entityIds[j]);
|
|
73
|
+
elements += seen.size;
|
|
74
|
+
} else {
|
|
75
|
+
elements += 1;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
63
79
|
return {
|
|
64
|
-
elements
|
|
80
|
+
elements,
|
|
65
81
|
triangles: geometryResult.totalTriangles ?? 0,
|
|
66
82
|
};
|
|
67
83
|
}, [geometryResult]);
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
4
|
|
|
5
|
-
import { useEffect, useRef } from 'react';
|
|
5
|
+
import { useEffect, useRef, useCallback } from 'react';
|
|
6
6
|
import { ThemeToggle } from 'beautiful-theme-toggle';
|
|
7
7
|
import { useViewerStore } from '@/store';
|
|
8
8
|
|
|
@@ -12,10 +12,22 @@ import { useViewerStore } from '@/store';
|
|
|
12
12
|
* Bidirectional sync:
|
|
13
13
|
* - User clicks the widget → onChange → store.setTheme
|
|
14
14
|
* - External change (keyboard shortcut / command palette) → store updates → widget.setTheme
|
|
15
|
+
*
|
|
16
|
+
* Secret colorful mode:
|
|
17
|
+
* - Hold Shift while clicking → toggles the hidden "colorful" theme
|
|
18
|
+
* - The sun/moon widget can't represent a third state, so it shows "sun" (day vibes)
|
|
19
|
+
* while the colorful gradient takes over the world.
|
|
15
20
|
*/
|
|
16
21
|
export function ThemeSwitch() {
|
|
17
22
|
const containerRef = useRef<HTMLDivElement>(null);
|
|
18
23
|
const toggleRef = useRef<ThemeToggle | null>(null);
|
|
24
|
+
// Track whether Shift was held during the click so we can intercept in onChange
|
|
25
|
+
const shiftHeldRef = useRef(false);
|
|
26
|
+
|
|
27
|
+
// Capture shift key state on pointerdown (fires before the widget's internal click handler)
|
|
28
|
+
const handlePointerDown = useCallback((e: React.PointerEvent) => {
|
|
29
|
+
shiftHeldRef.current = e.shiftKey;
|
|
30
|
+
}, []);
|
|
19
31
|
|
|
20
32
|
useEffect(() => {
|
|
21
33
|
if (!containerRef.current) return;
|
|
@@ -25,9 +37,36 @@ export function ThemeSwitch() {
|
|
|
25
37
|
const toggle = new ThemeToggle({
|
|
26
38
|
element: containerRef.current,
|
|
27
39
|
size: 80,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
40
|
+
// Colorful → show sun (it's a bright/day-ish theme)
|
|
41
|
+
initialState: currentTheme === 'dark' ? 'dark' : 'light',
|
|
42
|
+
onChange: (widgetState) => {
|
|
43
|
+
const store = useViewerStore.getState();
|
|
44
|
+
|
|
45
|
+
if (shiftHeldRef.current) {
|
|
46
|
+
// Secret shift-click: toggle colorful mode
|
|
47
|
+
shiftHeldRef.current = false;
|
|
48
|
+
store.toggleColorful();
|
|
49
|
+
|
|
50
|
+
// Sync widget visual: colorful → sun, otherwise follow the new theme
|
|
51
|
+
const newTheme = useViewerStore.getState().theme;
|
|
52
|
+
const widgetTarget = newTheme === 'dark' ? 'dark' : 'light';
|
|
53
|
+
if (toggleRef.current && toggleRef.current.getTheme() !== widgetTarget) {
|
|
54
|
+
toggleRef.current.setTheme(widgetTarget, false);
|
|
55
|
+
}
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Normal click: dark ↔ light (if colorful, drops to dark)
|
|
60
|
+
shiftHeldRef.current = false;
|
|
61
|
+
store.toggleTheme();
|
|
62
|
+
|
|
63
|
+
// The widget already animated to widgetState, but toggleTheme may have
|
|
64
|
+
// produced a different result (e.g. colorful → dark). Reconcile:
|
|
65
|
+
const newTheme = useViewerStore.getState().theme;
|
|
66
|
+
const expectedWidget = newTheme === 'dark' ? 'dark' : 'light';
|
|
67
|
+
if (toggleRef.current && widgetState !== expectedWidget) {
|
|
68
|
+
toggleRef.current.setTheme(expectedWidget, false);
|
|
69
|
+
}
|
|
31
70
|
},
|
|
32
71
|
});
|
|
33
72
|
|
|
@@ -38,8 +77,9 @@ export function ThemeSwitch() {
|
|
|
38
77
|
const unsub = useViewerStore.subscribe((state) => {
|
|
39
78
|
if (state.theme !== prevTheme) {
|
|
40
79
|
prevTheme = state.theme;
|
|
41
|
-
|
|
42
|
-
|
|
80
|
+
const widgetTarget = state.theme === 'dark' ? 'dark' : 'light';
|
|
81
|
+
if (toggleRef.current && toggleRef.current.getTheme() !== widgetTarget) {
|
|
82
|
+
toggleRef.current.setTheme(widgetTarget, false);
|
|
43
83
|
}
|
|
44
84
|
}
|
|
45
85
|
});
|
|
@@ -51,5 +91,21 @@ export function ThemeSwitch() {
|
|
|
51
91
|
};
|
|
52
92
|
}, []);
|
|
53
93
|
|
|
54
|
-
|
|
94
|
+
const theme = useViewerStore((s) => s.theme);
|
|
95
|
+
const isColorful = theme === 'colorful';
|
|
96
|
+
|
|
97
|
+
return (
|
|
98
|
+
<div
|
|
99
|
+
ref={containerRef}
|
|
100
|
+
onPointerDown={handlePointerDown}
|
|
101
|
+
className={`flex items-center cursor-pointer transition-all duration-300 ${
|
|
102
|
+
isColorful
|
|
103
|
+
? 'opacity-100 scale-110'
|
|
104
|
+
: 'opacity-80 hover:opacity-100'
|
|
105
|
+
}`}
|
|
106
|
+
style={isColorful ? {
|
|
107
|
+
filter: 'drop-shadow(0 0 6px rgba(157,124,216,0.5)) drop-shadow(0 0 12px rgba(255,158,100,0.25))',
|
|
108
|
+
} : undefined}
|
|
109
|
+
/>
|
|
110
|
+
);
|
|
55
111
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
4
|
|
|
5
|
-
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
5
|
+
import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react';
|
|
6
6
|
import { Panel, Group as PanelGroup, Separator as PanelResizeHandle } from 'react-resizable-panels';
|
|
7
7
|
import type { PanelImperativeHandle } from 'react-resizable-panels';
|
|
8
8
|
import { TooltipProvider } from '@/components/ui/tooltip';
|
|
@@ -22,6 +22,13 @@ import { LensPanel } from './LensPanel';
|
|
|
22
22
|
import { ListPanel } from './lists/ListPanel';
|
|
23
23
|
import { ScriptPanel } from './ScriptPanel';
|
|
24
24
|
import { CommandPalette } from './CommandPalette';
|
|
25
|
+
import { DesktopEntitlementBanner } from './DesktopEntitlementBanner';
|
|
26
|
+
import {
|
|
27
|
+
closeActiveAnalysisExtension,
|
|
28
|
+
getAnalysisExtensionById,
|
|
29
|
+
getAnalysisExtensionsSnapshot,
|
|
30
|
+
subscribeAnalysisExtensions,
|
|
31
|
+
} from '@/services/analysis-extensions';
|
|
25
32
|
|
|
26
33
|
const BOTTOM_PANEL_MIN_HEIGHT = 120;
|
|
27
34
|
const BOTTOM_PANEL_DEFAULT_HEIGHT = 300;
|
|
@@ -47,6 +54,18 @@ export function ViewerLayout() {
|
|
|
47
54
|
return () => window.removeEventListener('keydown', handler);
|
|
48
55
|
}, []);
|
|
49
56
|
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
const openCommandPalette = () => setCommandPaletteOpen(true);
|
|
59
|
+
const showShortcuts = () => shortcutsDialog.toggle();
|
|
60
|
+
|
|
61
|
+
window.addEventListener('ifc-lite:open-command-palette', openCommandPalette);
|
|
62
|
+
window.addEventListener('ifc-lite:show-shortcuts', showShortcuts);
|
|
63
|
+
return () => {
|
|
64
|
+
window.removeEventListener('ifc-lite:open-command-palette', openCommandPalette);
|
|
65
|
+
window.removeEventListener('ifc-lite:show-shortcuts', showShortcuts);
|
|
66
|
+
};
|
|
67
|
+
}, [shortcutsDialog]);
|
|
68
|
+
|
|
50
69
|
// Initialize theme on mount
|
|
51
70
|
const theme = useViewerStore((s) => s.theme);
|
|
52
71
|
const isMobile = useViewerStore((s) => s.isMobile);
|
|
@@ -65,6 +84,18 @@ export function ViewerLayout() {
|
|
|
65
84
|
const setLensPanelVisible = useViewerStore((s) => s.setLensPanelVisible);
|
|
66
85
|
const scriptPanelVisible = useViewerStore((s) => s.scriptPanelVisible);
|
|
67
86
|
const setScriptPanelVisible = useViewerStore((s) => s.setScriptPanelVisible);
|
|
87
|
+
const analysisExtensionState = useSyncExternalStore(
|
|
88
|
+
subscribeAnalysisExtensions,
|
|
89
|
+
getAnalysisExtensionsSnapshot,
|
|
90
|
+
getAnalysisExtensionsSnapshot,
|
|
91
|
+
);
|
|
92
|
+
const activeAnalysisExtension = getAnalysisExtensionById(analysisExtensionState.activeId);
|
|
93
|
+
const activeRightAnalysisExtension = (activeAnalysisExtension?.placement ?? 'right') === 'right'
|
|
94
|
+
? activeAnalysisExtension
|
|
95
|
+
: null;
|
|
96
|
+
const activeBottomAnalysisExtension = activeAnalysisExtension?.placement === 'bottom'
|
|
97
|
+
? activeAnalysisExtension
|
|
98
|
+
: null;
|
|
68
99
|
|
|
69
100
|
// Panel refs for programmatic collapse/expand (command palette, keyboard shortcuts)
|
|
70
101
|
const leftPanelRef = useRef<PanelImperativeHandle>(null);
|
|
@@ -155,6 +186,7 @@ export function ViewerLayout() {
|
|
|
155
186
|
// Keep DOM class in sync when theme changes (initial class is set by inline script in index.html)
|
|
156
187
|
useEffect(() => {
|
|
157
188
|
document.documentElement.classList.toggle('dark', theme === 'dark');
|
|
189
|
+
document.documentElement.classList.toggle('colorful', theme === 'colorful');
|
|
158
190
|
}, [theme]);
|
|
159
191
|
|
|
160
192
|
|
|
@@ -171,6 +203,7 @@ export function ViewerLayout() {
|
|
|
171
203
|
|
|
172
204
|
{/* Main Toolbar */}
|
|
173
205
|
<MainToolbar onShowShortcuts={shortcutsDialog.toggle} />
|
|
206
|
+
<DesktopEntitlementBanner />
|
|
174
207
|
|
|
175
208
|
{/* Main Content Area - Desktop Layout */}
|
|
176
209
|
{!isMobile && (
|
|
@@ -221,7 +254,9 @@ export function ViewerLayout() {
|
|
|
221
254
|
}}
|
|
222
255
|
>
|
|
223
256
|
<div className="h-full w-full overflow-hidden panel-container">
|
|
224
|
-
{
|
|
257
|
+
{activeRightAnalysisExtension ? (
|
|
258
|
+
activeRightAnalysisExtension.renderPanel({ onClose: closeActiveAnalysisExtension })
|
|
259
|
+
) : lensPanelVisible ? (
|
|
225
260
|
<LensPanel onClose={() => setLensPanelVisible(false)} />
|
|
226
261
|
) : idsPanelVisible ? (
|
|
227
262
|
<IDSPanel onClose={() => setIdsPanelVisible(false)} />
|
|
@@ -236,7 +271,7 @@ export function ViewerLayout() {
|
|
|
236
271
|
</div>
|
|
237
272
|
|
|
238
273
|
{/* Bottom Panel - Lists or Script (custom resizable, outside PanelGroup) */}
|
|
239
|
-
{(listPanelVisible || scriptPanelVisible) && (
|
|
274
|
+
{(listPanelVisible || scriptPanelVisible || !!activeBottomAnalysisExtension) && (
|
|
240
275
|
<div style={{ height: bottomHeight, flexShrink: 0 }} className="relative">
|
|
241
276
|
{/* Drag handle */}
|
|
242
277
|
<div
|
|
@@ -244,7 +279,9 @@ export function ViewerLayout() {
|
|
|
244
279
|
onMouseDown={handleResizeStart}
|
|
245
280
|
/>
|
|
246
281
|
<div className="h-full w-full overflow-hidden border-t pt-1.5">
|
|
247
|
-
{
|
|
282
|
+
{activeBottomAnalysisExtension ? (
|
|
283
|
+
activeBottomAnalysisExtension.renderPanel({ onClose: closeActiveAnalysisExtension })
|
|
284
|
+
) : scriptPanelVisible ? (
|
|
248
285
|
<ScriptPanel onClose={() => setScriptPanelVisible(false)} />
|
|
249
286
|
) : (
|
|
250
287
|
<ListPanel onClose={() => setListPanelVisible(false)} />
|
|
@@ -289,7 +326,7 @@ export function ViewerLayout() {
|
|
|
289
326
|
<div className="absolute inset-x-0 bottom-0 h-[50vh] bg-background border-t rounded-t-xl shadow-xl z-40 animate-in slide-in-from-bottom">
|
|
290
327
|
<div className="flex items-center justify-between p-2 border-b">
|
|
291
328
|
<span className="font-medium text-sm">
|
|
292
|
-
{scriptPanelVisible ? 'Script' : listPanelVisible ? 'Lists' : lensPanelVisible ? 'Lens' : idsPanelVisible ? 'IDS Validation' : bcfPanelVisible ? 'BCF Issues' : 'Properties'}
|
|
329
|
+
{activeAnalysisExtension ? activeAnalysisExtension.label : scriptPanelVisible ? 'Script' : listPanelVisible ? 'Lists' : lensPanelVisible ? 'Lens' : idsPanelVisible ? 'IDS Validation' : bcfPanelVisible ? 'BCF Issues' : 'Properties'}
|
|
293
330
|
</span>
|
|
294
331
|
<button
|
|
295
332
|
className="p-1 hover:bg-muted rounded"
|
|
@@ -300,6 +337,7 @@ export function ViewerLayout() {
|
|
|
300
337
|
if (bcfPanelVisible) setBcfPanelVisible(false);
|
|
301
338
|
if (lensPanelVisible) setLensPanelVisible(false);
|
|
302
339
|
if (idsPanelVisible) setIdsPanelVisible(false);
|
|
340
|
+
if (activeAnalysisExtension) closeActiveAnalysisExtension();
|
|
303
341
|
}}
|
|
304
342
|
>
|
|
305
343
|
<span className="sr-only">Close</span>
|
|
@@ -309,7 +347,11 @@ export function ViewerLayout() {
|
|
|
309
347
|
</button>
|
|
310
348
|
</div>
|
|
311
349
|
<div className="h-[calc(50vh-48px)] overflow-auto">
|
|
312
|
-
{
|
|
350
|
+
{activeBottomAnalysisExtension ? (
|
|
351
|
+
activeBottomAnalysisExtension.renderPanel({ onClose: closeActiveAnalysisExtension })
|
|
352
|
+
) : activeRightAnalysisExtension ? (
|
|
353
|
+
activeRightAnalysisExtension.renderPanel({ onClose: closeActiveAnalysisExtension })
|
|
354
|
+
) : scriptPanelVisible ? (
|
|
313
355
|
<ScriptPanel onClose={() => setScriptPanelVisible(false)} />
|
|
314
356
|
) : listPanelVisible ? (
|
|
315
357
|
<ListPanel onClose={() => setListPanelVisible(false)} />
|
|
@@ -46,9 +46,23 @@ interface ViewportProps {
|
|
|
46
46
|
coordinateInfo?: CoordinateInfo;
|
|
47
47
|
computedIsolatedIds?: Set<number> | null;
|
|
48
48
|
modelIdToIndex?: Map<string, number>;
|
|
49
|
+
/** When true, the WebGPU canvas uses a transparent clear color so the
|
|
50
|
+
* CesiumJS globe behind it is visible. */
|
|
51
|
+
cesiumActive?: boolean;
|
|
52
|
+
releaseGeometryAfterStream?: boolean;
|
|
53
|
+
onGeometryReleased?: () => void;
|
|
49
54
|
}
|
|
50
55
|
|
|
51
|
-
export function Viewport({
|
|
56
|
+
export function Viewport({
|
|
57
|
+
geometry,
|
|
58
|
+
geometryVersion,
|
|
59
|
+
coordinateInfo,
|
|
60
|
+
computedIsolatedIds,
|
|
61
|
+
modelIdToIndex,
|
|
62
|
+
cesiumActive,
|
|
63
|
+
releaseGeometryAfterStream = false,
|
|
64
|
+
onGeometryReleased,
|
|
65
|
+
}: ViewportProps) {
|
|
52
66
|
const canvasRef = useRef<HTMLCanvasElement>(null);
|
|
53
67
|
const rendererRef = useRef<Renderer | null>(null);
|
|
54
68
|
const [isInitialized, setIsInitialized] = useState(false);
|
|
@@ -94,7 +108,7 @@ export function Viewport({ geometry, geometryVersion, coordinateInfo, computedIs
|
|
|
94
108
|
}, [modelIdToIndex]);
|
|
95
109
|
|
|
96
110
|
// Compute selectedModelIndex for renderer (multi-model selection highlighting)
|
|
97
|
-
const selectedModelIndex = selectedEntity && modelIdToIndex
|
|
111
|
+
const selectedModelIndex = models.size > 1 && selectedEntity && modelIdToIndex
|
|
98
112
|
? modelIdToIndex.get(selectedEntity.modelId) ?? undefined
|
|
99
113
|
: undefined;
|
|
100
114
|
|
|
@@ -114,12 +128,13 @@ export function Viewport({ geometry, geometryVersion, coordinateInfo, computedIs
|
|
|
114
128
|
}
|
|
115
129
|
|
|
116
130
|
const globalId = pickResult.expressId;
|
|
131
|
+
const resolvedRef = resolveEntityRef(globalId);
|
|
117
132
|
|
|
118
133
|
// Set globalId for renderer (highlighting uses globalIds directly)
|
|
119
134
|
setSelectedEntityId(globalId);
|
|
120
135
|
|
|
121
136
|
// Resolve globalId → EntityRef for property panel (single source of truth, never null)
|
|
122
|
-
setSelectedEntity(
|
|
137
|
+
setSelectedEntity(resolvedRef);
|
|
123
138
|
}, [setSelectedEntityId, setSelectedEntity]);
|
|
124
139
|
|
|
125
140
|
// Ref to always access latest handlePickForSelection from event handlers
|
|
@@ -291,6 +306,17 @@ export function Viewport({ geometry, geometryVersion, coordinateInfo, computedIs
|
|
|
291
306
|
separationLinesIntensity,
|
|
292
307
|
separationLinesRadius,
|
|
293
308
|
]);
|
|
309
|
+
|
|
310
|
+
// Override clear color when Cesium overlay is active (transparent background)
|
|
311
|
+
useEffect(() => {
|
|
312
|
+
if (cesiumActive) {
|
|
313
|
+
clearColorRef.current = [0, 0, 0, 0]; // fully transparent
|
|
314
|
+
} else {
|
|
315
|
+
clearColorRef.current = getThemeClearColor(theme as 'light' | 'dark' | 'colorful');
|
|
316
|
+
}
|
|
317
|
+
rendererRef.current?.requestRender();
|
|
318
|
+
}, [cesiumActive, theme]);
|
|
319
|
+
|
|
294
320
|
// Animation frame ref
|
|
295
321
|
const animationFrameRef = useRef<number | null>(null);
|
|
296
322
|
const lastFrameTimeRef = useRef<number>(0);
|
|
@@ -356,6 +382,11 @@ export function Viewport({ geometry, geometryVersion, coordinateInfo, computedIs
|
|
|
356
382
|
const sectionPlaneRef = useLatestRef(sectionPlane);
|
|
357
383
|
const sectionRangeRef = useLatestRef(sectionRange);
|
|
358
384
|
const visualEnhancementRef = useLatestRef(visualEnhancement);
|
|
385
|
+
|
|
386
|
+
// Terrain clip Y from Cesium store (read as ref for animation loop)
|
|
387
|
+
const cesiumTerrainClipY = useViewerStore((s) => s.cesiumTerrainClipY);
|
|
388
|
+
const fastZoomRef = useLatestRef(!!cesiumActive);
|
|
389
|
+
const terrainClipYRef = useLatestRef(cesiumActive ? cesiumTerrainClipY : null);
|
|
359
390
|
const geometryRef = useLatestRef(geometry);
|
|
360
391
|
|
|
361
392
|
// Hover throttling
|
|
@@ -457,8 +488,10 @@ export function Viewport({ geometry, geometryVersion, coordinateInfo, computedIs
|
|
|
457
488
|
|
|
458
489
|
// Helper: get pick options with visibility filtering
|
|
459
490
|
const getPickOptions = () => {
|
|
460
|
-
const
|
|
461
|
-
const
|
|
491
|
+
const currentState = useViewerStore.getState();
|
|
492
|
+
const currentProgress = currentState.progress;
|
|
493
|
+
const currentIsStreaming = currentState.geometryStreamingActive
|
|
494
|
+
|| (currentProgress !== null && currentProgress.percent < 100);
|
|
462
495
|
return {
|
|
463
496
|
isStreaming: currentIsStreaming,
|
|
464
497
|
hiddenIds: hiddenEntitiesRef.current,
|
|
@@ -656,8 +689,7 @@ export function Viewport({ geometry, geometryVersion, coordinateInfo, computedIs
|
|
|
656
689
|
const showHiddenLines = useViewerStore((s) => s.drawing2DDisplayOptions.showHiddenLines);
|
|
657
690
|
|
|
658
691
|
// ===== Streaming progress =====
|
|
659
|
-
const
|
|
660
|
-
const isStreaming = progress !== null && progress.percent < 100;
|
|
692
|
+
const isStreaming = useViewerStore((state) => state.geometryStreamingActive);
|
|
661
693
|
|
|
662
694
|
// Mouse isDragging proxy ref for animation loop
|
|
663
695
|
// The animation loop reads this to decide whether to update rotation
|
|
@@ -728,6 +760,7 @@ export function Viewport({ geometry, geometryVersion, coordinateInfo, computedIs
|
|
|
728
760
|
RENDER_THROTTLE_MS_SMALL,
|
|
729
761
|
RENDER_THROTTLE_MS_LARGE,
|
|
730
762
|
RENDER_THROTTLE_MS_HUGE,
|
|
763
|
+
fastZoomRef,
|
|
731
764
|
});
|
|
732
765
|
|
|
733
766
|
useTouchControls({
|
|
@@ -777,6 +810,7 @@ export function Viewport({ geometry, geometryVersion, coordinateInfo, computedIs
|
|
|
777
810
|
lastFrameTimeRef,
|
|
778
811
|
mouseIsDraggingRef,
|
|
779
812
|
activeToolRef,
|
|
813
|
+
terrainClipYRef,
|
|
780
814
|
hiddenEntitiesRef,
|
|
781
815
|
isolatedEntitiesRef,
|
|
782
816
|
selectedEntityIdRef,
|
|
@@ -808,6 +842,8 @@ export function Viewport({ geometry, geometryVersion, coordinateInfo, computedIs
|
|
|
808
842
|
clearPendingColorUpdates,
|
|
809
843
|
clearPendingMeshColorUpdates,
|
|
810
844
|
clearColorRef,
|
|
845
|
+
releaseGeometryAfterFinalize: releaseGeometryAfterStream,
|
|
846
|
+
onGeometryReleased,
|
|
811
847
|
});
|
|
812
848
|
|
|
813
849
|
useRenderUpdates({
|
|
@@ -838,12 +874,29 @@ export function Viewport({ geometry, geometryVersion, coordinateInfo, computedIs
|
|
|
838
874
|
showHiddenLines,
|
|
839
875
|
});
|
|
840
876
|
|
|
877
|
+
// Hide WebGPU canvas immediately when Cesium is active.
|
|
878
|
+
// The model will be rendered by Cesium (as GLB) for correct positioning.
|
|
879
|
+
// Canvas stays in the DOM for picking/interaction.
|
|
880
|
+
|
|
881
|
+
// Colorful mode: transparent WebGPU clear colour + CSS gradient on the
|
|
882
|
+
// canvas element. The gradient is the *CSS background* of the <canvas>;
|
|
883
|
+
// premultiplied-alpha compositing shows it through transparent clear-colour
|
|
884
|
+
// regions while opaque model fragments (alpha=1) stay fully visible.
|
|
885
|
+
const canvasStyle = cesiumActive
|
|
886
|
+
? { opacity: 0 }
|
|
887
|
+
: theme === 'colorful'
|
|
888
|
+
? {
|
|
889
|
+
background: 'linear-gradient(180deg, #4a5a8a 0%, #6272a8 10%, #7e8dba 20%, #9aa3c8 32%, #b5b8d1 44%, #cdc3d4 56%, #dcccc8 68%, #e8d5be 80%, #f0ddb8 92%, #f5e2b6 100%)',
|
|
890
|
+
}
|
|
891
|
+
: undefined;
|
|
892
|
+
|
|
841
893
|
return (
|
|
842
894
|
<canvas
|
|
843
895
|
ref={canvasRef}
|
|
844
896
|
data-viewport="main"
|
|
845
897
|
tabIndex={-1}
|
|
846
|
-
className=
|
|
898
|
+
className={`w-full h-full block ${cesiumActive ? 'relative z-[1]' : ''}`}
|
|
899
|
+
style={canvasStyle}
|
|
847
900
|
onPointerDown={focusViewportForKeyboardShortcuts}
|
|
848
901
|
/>
|
|
849
902
|
);
|