@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
|
@@ -29,10 +29,11 @@ import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip
|
|
|
29
29
|
import { useViewerStore } from '@/store';
|
|
30
30
|
import { toGlobalIdFromModels } from '@/store/globalId';
|
|
31
31
|
import { useIfc } from '@/hooks/useIfc';
|
|
32
|
+
import { getNativeEntityDetails } from '@/services/desktop-native-metadata';
|
|
32
33
|
import { configureMutationView } from '@/utils/configureMutationView';
|
|
33
34
|
import { IfcQuery } from '@ifc-lite/query';
|
|
34
35
|
import { MutablePropertyView } from '@ifc-lite/mutations';
|
|
35
|
-
import { extractClassificationsOnDemand, extractMaterialsOnDemand, extractTypePropertiesOnDemand, extractTypeEntityOwnProperties, extractDocumentsOnDemand, extractRelationshipsOnDemand, extractGeoreferencingOnDemand, type IfcDataStore } from '@ifc-lite/parser';
|
|
36
|
+
import { extractClassificationsOnDemand, extractMaterialsOnDemand, extractTypePropertiesOnDemand, extractTypeEntityOwnProperties, extractDocumentsOnDemand, extractRelationshipsOnDemand, extractGeoreferencingOnDemand, extractLengthUnitScale, type IfcDataStore } from '@ifc-lite/parser';
|
|
36
37
|
import { EntityFlags, RelationshipType, isSpatialStructureTypeName, isStoreyLikeSpatialTypeName } from '@ifc-lite/data';
|
|
37
38
|
import type { EntityRef, FederatedModel } from '@/store/types';
|
|
38
39
|
|
|
@@ -103,7 +104,7 @@ export function PropertiesPanel() {
|
|
|
103
104
|
const m = models.get(selectedEntity.modelId);
|
|
104
105
|
if (m) {
|
|
105
106
|
return {
|
|
106
|
-
modelQuery: new IfcQuery(m.ifcDataStore),
|
|
107
|
+
modelQuery: m.nativeMetadata ? null : (m.ifcDataStore ? new IfcQuery(m.ifcDataStore) : null),
|
|
107
108
|
model: m,
|
|
108
109
|
};
|
|
109
110
|
}
|
|
@@ -123,7 +124,7 @@ export function PropertiesPanel() {
|
|
|
123
124
|
|
|
124
125
|
// Ensure mutation view exists for editing - creates it on-demand if needed
|
|
125
126
|
useEffect(() => {
|
|
126
|
-
if (!model || !selectedEntity || selectedEntity.modelId === 'legacy') return;
|
|
127
|
+
if (!model || !model.ifcDataStore || !selectedEntity || selectedEntity.modelId === 'legacy') return;
|
|
127
128
|
|
|
128
129
|
const modelId = selectedEntity.modelId;
|
|
129
130
|
let mutationView = getMutationView(modelId);
|
|
@@ -142,10 +143,38 @@ export function PropertiesPanel() {
|
|
|
142
143
|
const [copied, setCopied] = useState(false);
|
|
143
144
|
const [coordCopied, setCoordCopied] = useState<string | null>(null);
|
|
144
145
|
const [coordOpen, setCoordOpen] = useState(false);
|
|
146
|
+
const [nativeDetails, setNativeDetails] = useState<import('@/store/types').NativeMetadataEntityDetails | null>(null);
|
|
147
|
+
const [nativeDetailsState, setNativeDetailsState] = useState<'idle' | 'loading' | 'error'>('idle');
|
|
145
148
|
|
|
146
149
|
// Edit mode toggle - allows inline property editing
|
|
147
150
|
const [editMode, setEditMode] = useState(false);
|
|
148
151
|
|
|
152
|
+
useEffect(() => {
|
|
153
|
+
if (!selectedEntity || !model?.nativeMetadata) {
|
|
154
|
+
setNativeDetails(null);
|
|
155
|
+
setNativeDetailsState('idle');
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
let cancelled = false;
|
|
159
|
+
setNativeDetailsState('loading');
|
|
160
|
+
void getNativeEntityDetails(model.nativeMetadata.cacheKey, selectedEntity.expressId)
|
|
161
|
+
.then((details) => {
|
|
162
|
+
if (!cancelled) {
|
|
163
|
+
setNativeDetails(details);
|
|
164
|
+
setNativeDetailsState('idle');
|
|
165
|
+
}
|
|
166
|
+
})
|
|
167
|
+
.catch(() => {
|
|
168
|
+
if (!cancelled) {
|
|
169
|
+
setNativeDetails(null);
|
|
170
|
+
setNativeDetailsState('error');
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
return () => {
|
|
174
|
+
cancelled = true;
|
|
175
|
+
};
|
|
176
|
+
}, [selectedEntity, model?.nativeMetadata]);
|
|
177
|
+
|
|
149
178
|
const copyToClipboard = useCallback((text: string) => {
|
|
150
179
|
navigator.clipboard.writeText(text);
|
|
151
180
|
setCopied(true);
|
|
@@ -525,6 +554,13 @@ export function PropertiesPanel() {
|
|
|
525
554
|
return info?.hasGeoreference ? info : null;
|
|
526
555
|
}, [model, ifcDataStore]);
|
|
527
556
|
|
|
557
|
+
// Extract IFC length unit scale (e.g. 0.001 for mm, 0.3048 for ft)
|
|
558
|
+
const lengthUnitScale = useMemo(() => {
|
|
559
|
+
const dataStore = model?.ifcDataStore ?? ifcDataStore;
|
|
560
|
+
if (!dataStore?.source?.length || !dataStore?.entityIndex) return 1;
|
|
561
|
+
return extractLengthUnitScale(dataStore.source, dataStore.entityIndex);
|
|
562
|
+
}, [model, ifcDataStore]);
|
|
563
|
+
|
|
528
564
|
// Extract type-level properties (e.g., from IfcWallType's HasPropertySets)
|
|
529
565
|
const typeProperties = useMemo(() => {
|
|
530
566
|
if (!selectedEntity) return null;
|
|
@@ -747,6 +783,114 @@ export function PropertiesPanel() {
|
|
|
747
783
|
return names;
|
|
748
784
|
}, [attributes]);
|
|
749
785
|
|
|
786
|
+
const isNativeLazySelection = Boolean(selectedEntity && model?.nativeMetadata);
|
|
787
|
+
|
|
788
|
+
useEffect(() => {
|
|
789
|
+
if (isNativeLazySelection && editMode) {
|
|
790
|
+
setEditMode(false);
|
|
791
|
+
}
|
|
792
|
+
}, [isNativeLazySelection, editMode]);
|
|
793
|
+
|
|
794
|
+
const nativeSpatialInfo = useMemo(() => {
|
|
795
|
+
if (!nativeDetails?.spatial?.storeyName) return null;
|
|
796
|
+
return {
|
|
797
|
+
storeyId: nativeDetails.spatial.storeyId ?? undefined,
|
|
798
|
+
storeyName: nativeDetails.spatial.storeyName,
|
|
799
|
+
elevation: nativeDetails.spatial.elevation ?? undefined,
|
|
800
|
+
height: nativeDetails.spatial.height ?? undefined,
|
|
801
|
+
};
|
|
802
|
+
}, [nativeDetails]);
|
|
803
|
+
|
|
804
|
+
const nativeOccurrenceProperties = useMemo<PropertySet[]>(() => {
|
|
805
|
+
if (!nativeDetails) return [];
|
|
806
|
+
return nativeDetails.properties.map((pset) => ({
|
|
807
|
+
name: pset.name,
|
|
808
|
+
properties: pset.properties.map((property) => ({
|
|
809
|
+
name: property.name,
|
|
810
|
+
value: property.value,
|
|
811
|
+
isMutated: false,
|
|
812
|
+
})),
|
|
813
|
+
isNewPset: false,
|
|
814
|
+
source: 'instance' as const,
|
|
815
|
+
}));
|
|
816
|
+
}, [nativeDetails]);
|
|
817
|
+
|
|
818
|
+
const nativeQuantities = useMemo<QuantitySet[]>(() => {
|
|
819
|
+
if (!nativeDetails) return [];
|
|
820
|
+
return nativeDetails.quantities.map((qset) => ({
|
|
821
|
+
name: qset.name,
|
|
822
|
+
quantities: qset.quantities.map((quantity) => ({
|
|
823
|
+
name: quantity.name,
|
|
824
|
+
value: quantity.value,
|
|
825
|
+
type: quantity.type ?? 0,
|
|
826
|
+
})),
|
|
827
|
+
}));
|
|
828
|
+
}, [nativeDetails]);
|
|
829
|
+
|
|
830
|
+
const renderedEntityType = isNativeLazySelection
|
|
831
|
+
? (nativeDetails?.summary.type ?? 'Loading...')
|
|
832
|
+
: (entityNode?.type ?? 'Unknown');
|
|
833
|
+
const renderedEntityName = isNativeLazySelection
|
|
834
|
+
? (nativeDetails?.summary.name ?? `#${selectedEntity?.expressId ?? ''}`)
|
|
835
|
+
: entityNode?.name;
|
|
836
|
+
const renderedEntityGlobalId = isNativeLazySelection
|
|
837
|
+
? (nativeDetails?.summary.globalId ?? null)
|
|
838
|
+
: entityNode?.globalId;
|
|
839
|
+
const renderedEntityDescription = isNativeLazySelection ? undefined : entityNode?.description;
|
|
840
|
+
const renderedEntityObjectType = isNativeLazySelection ? undefined : entityNode?.objectType;
|
|
841
|
+
const renderedSpatialInfo = isNativeLazySelection ? nativeSpatialInfo : spatialInfo;
|
|
842
|
+
const renderedOccurrenceProperties = isNativeLazySelection ? nativeOccurrenceProperties : occurrenceProperties;
|
|
843
|
+
const renderedInheritedTypeProperties = isNativeLazySelection ? [] : inheritedTypeProperties;
|
|
844
|
+
const renderedMergedProperties = isNativeLazySelection
|
|
845
|
+
? nativeOccurrenceProperties
|
|
846
|
+
: mergedProperties;
|
|
847
|
+
const renderedQuantities = isNativeLazySelection ? nativeQuantities : quantities;
|
|
848
|
+
const renderedAttributes = isNativeLazySelection ? [] : attributes;
|
|
849
|
+
const renderedClassifications = isNativeLazySelection ? [] : classifications;
|
|
850
|
+
const renderedMaterialInfo = isNativeLazySelection ? null : materialInfo;
|
|
851
|
+
const renderedDocuments = isNativeLazySelection ? [] : documents;
|
|
852
|
+
const renderedEntityRelationships = isNativeLazySelection ? null : entityRelationships;
|
|
853
|
+
const renderedGeoref = isNativeLazySelection ? null : georef;
|
|
854
|
+
const renderedSpatialContainment = isNativeLazySelection ? null : spatialContainment;
|
|
855
|
+
const renderedTypeProperties = isNativeLazySelection
|
|
856
|
+
? (nativeDetails?.typeSummary
|
|
857
|
+
? {
|
|
858
|
+
typeName: nativeDetails.typeSummary.name,
|
|
859
|
+
typeId: nativeDetails.typeSummary.expressId,
|
|
860
|
+
psets: [] as PropertySet[],
|
|
861
|
+
}
|
|
862
|
+
: null)
|
|
863
|
+
: typeProperties;
|
|
864
|
+
const renderedTypeEditImpact = isNativeLazySelection ? null : typeEditImpact;
|
|
865
|
+
const renderedIsTypeEntity = isNativeLazySelection
|
|
866
|
+
? ((nativeDetails?.summary.type ?? '').endsWith('Type'))
|
|
867
|
+
: isTypeEntity;
|
|
868
|
+
const renderedExistingProps = useMemo(() => {
|
|
869
|
+
const keys = new Set<string>();
|
|
870
|
+
for (const pset of renderedMergedProperties) {
|
|
871
|
+
for (const prop of pset.properties) {
|
|
872
|
+
keys.add(`${pset.name}:${prop.name}`);
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
return keys;
|
|
876
|
+
}, [renderedMergedProperties]);
|
|
877
|
+
const renderedExistingQuants = useMemo(() => {
|
|
878
|
+
const keys = new Set<string>();
|
|
879
|
+
for (const qset of renderedQuantities) {
|
|
880
|
+
for (const q of qset.quantities) {
|
|
881
|
+
keys.add(`${qset.name}:${q.name}`);
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
return keys;
|
|
885
|
+
}, [renderedQuantities]);
|
|
886
|
+
const renderedExistingAttributeNames = useMemo(() => {
|
|
887
|
+
const names = new Set<string>();
|
|
888
|
+
for (const attr of renderedAttributes) {
|
|
889
|
+
if (attr.value) names.add(attr.name);
|
|
890
|
+
}
|
|
891
|
+
return names;
|
|
892
|
+
}, [renderedAttributes]);
|
|
893
|
+
|
|
750
894
|
// Model metadata display (when clicking top-level model in hierarchy)
|
|
751
895
|
if (selectedModelId) {
|
|
752
896
|
const selectedModel = models.get(selectedModelId);
|
|
@@ -766,8 +910,13 @@ export function PropertiesPanel() {
|
|
|
766
910
|
);
|
|
767
911
|
}
|
|
768
912
|
|
|
769
|
-
if (!selectedEntityId || !modelQuery || !entityNode) {
|
|
770
|
-
// Show model metadata when a single
|
|
913
|
+
if (!selectedEntityId || (!isNativeLazySelection && (!modelQuery || !entityNode))) {
|
|
914
|
+
// Show model metadata when a single model is loaded and nothing selected.
|
|
915
|
+
// Handles both federated models (models.size >= 1) and legacy single-model path (models.size === 0).
|
|
916
|
+
if (models.size === 1) {
|
|
917
|
+
const singleModel = models.values().next().value as FederatedModel;
|
|
918
|
+
return <ModelMetadataPanel model={singleModel} />;
|
|
919
|
+
}
|
|
771
920
|
if (ifcDataStore && models.size === 0 && geometryResult) {
|
|
772
921
|
const legacyModel: FederatedModel = {
|
|
773
922
|
id: '__legacy__',
|
|
@@ -784,6 +933,7 @@ export function PropertiesPanel() {
|
|
|
784
933
|
};
|
|
785
934
|
return <ModelMetadataPanel model={legacyModel} />;
|
|
786
935
|
}
|
|
936
|
+
// Multi-model or no model loaded: show empty state
|
|
787
937
|
return (
|
|
788
938
|
<div className="h-full flex flex-col border-l-2 border-zinc-200 dark:border-zinc-800 bg-zinc-50 dark:bg-black">
|
|
789
939
|
<div className="p-3 border-b-2 border-zinc-200 dark:border-zinc-800 bg-white dark:bg-black">
|
|
@@ -803,11 +953,11 @@ export function PropertiesPanel() {
|
|
|
803
953
|
}
|
|
804
954
|
|
|
805
955
|
// These are safe to access after the early return check (entityNode is confirmed non-null above)
|
|
806
|
-
const entityType =
|
|
807
|
-
const entityName =
|
|
808
|
-
const entityGlobalId =
|
|
809
|
-
const entityDescription =
|
|
810
|
-
const entityObjectType =
|
|
956
|
+
const entityType = renderedEntityType;
|
|
957
|
+
const entityName = renderedEntityName;
|
|
958
|
+
const entityGlobalId = renderedEntityGlobalId;
|
|
959
|
+
const entityDescription = renderedEntityDescription;
|
|
960
|
+
const entityObjectType = renderedEntityObjectType;
|
|
811
961
|
|
|
812
962
|
return (
|
|
813
963
|
<div className="h-full flex flex-col border-l-2 border-zinc-200 dark:border-zinc-800 bg-white dark:bg-black">
|
|
@@ -823,10 +973,10 @@ export function PropertiesPanel() {
|
|
|
823
973
|
</h3>
|
|
824
974
|
<p className="text-xs font-mono text-zinc-500 dark:text-zinc-400">{entityType}</p>
|
|
825
975
|
{/* Show associated type entity for occurrences */}
|
|
826
|
-
{!
|
|
827
|
-
<p className="text-[11px] font-mono text-indigo-500 dark:text-indigo-400 truncate" title={`${activeDataStore?.entities.getTypeName(
|
|
976
|
+
{!renderedIsTypeEntity && renderedTypeProperties && (
|
|
977
|
+
<p className="text-[11px] font-mono text-indigo-500 dark:text-indigo-400 truncate" title={`${activeDataStore?.entities.getTypeName(renderedTypeProperties.typeId) || 'Type'}: ${renderedTypeProperties.typeName}`}>
|
|
828
978
|
<Building2 className="inline h-3 w-3 mr-1 -mt-0.5" />
|
|
829
|
-
{activeDataStore?.entities.getTypeName(
|
|
979
|
+
{activeDataStore?.entities.getTypeName(renderedTypeProperties.typeId) || 'Type'}: {renderedTypeProperties.typeName}
|
|
830
980
|
</p>
|
|
831
981
|
)}
|
|
832
982
|
</div>
|
|
@@ -872,19 +1022,21 @@ export function PropertiesPanel() {
|
|
|
872
1022
|
</TooltipContent>
|
|
873
1023
|
</Tooltip>
|
|
874
1024
|
{/* Edit mode toggle */}
|
|
875
|
-
|
|
876
|
-
<
|
|
877
|
-
<
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
1025
|
+
{!isNativeLazySelection && (
|
|
1026
|
+
<Tooltip>
|
|
1027
|
+
<TooltipTrigger asChild>
|
|
1028
|
+
<Button
|
|
1029
|
+
variant={editMode ? 'default' : 'ghost'}
|
|
1030
|
+
size="icon-xs"
|
|
1031
|
+
className={`rounded-none ${editMode ? 'bg-purple-600 hover:bg-purple-700 text-white' : 'hover:bg-zinc-200 dark:hover:bg-zinc-700'}`}
|
|
1032
|
+
onClick={() => setEditMode(!editMode)}
|
|
1033
|
+
>
|
|
1034
|
+
<PenLine className="h-3.5 w-3.5" />
|
|
1035
|
+
</Button>
|
|
1036
|
+
</TooltipTrigger>
|
|
1037
|
+
<TooltipContent>{editMode ? 'Exit Edit Mode' : 'Edit Properties'}</TooltipContent>
|
|
1038
|
+
</Tooltip>
|
|
1039
|
+
)}
|
|
888
1040
|
</div>
|
|
889
1041
|
</div>
|
|
890
1042
|
|
|
@@ -918,34 +1070,34 @@ export function PropertiesPanel() {
|
|
|
918
1070
|
)}
|
|
919
1071
|
|
|
920
1072
|
{/* Spatial Location */}
|
|
921
|
-
{
|
|
1073
|
+
{renderedSpatialInfo && (
|
|
922
1074
|
<div className="flex items-center gap-2 text-xs border border-emerald-500/30 bg-emerald-50/50 dark:bg-emerald-900/10 px-2 py-1.5 text-emerald-800 dark:text-emerald-400 min-w-0">
|
|
923
1075
|
<Layers className="h-3.5 w-3.5 shrink-0" />
|
|
924
|
-
<span className="font-bold uppercase tracking-wide truncate min-w-0 flex-1">{
|
|
1076
|
+
<span className="font-bold uppercase tracking-wide truncate min-w-0 flex-1">{renderedSpatialInfo.storeyName}</span>
|
|
925
1077
|
<div className="flex items-center gap-1.5 shrink-0">
|
|
926
|
-
{
|
|
1078
|
+
{renderedSpatialInfo.elevation !== undefined && (
|
|
927
1079
|
<Tooltip>
|
|
928
1080
|
<TooltipTrigger asChild>
|
|
929
1081
|
<span className="text-emerald-600/70 dark:text-emerald-500/70 font-mono whitespace-nowrap">
|
|
930
|
-
{
|
|
1082
|
+
{renderedSpatialInfo.elevation >= 0 ? '+' : ''}{renderedSpatialInfo.elevation.toFixed(2)}m
|
|
931
1083
|
</span>
|
|
932
1084
|
</TooltipTrigger>
|
|
933
1085
|
<TooltipContent>
|
|
934
|
-
<p className="text-xs">Elevation: {
|
|
1086
|
+
<p className="text-xs">Elevation: {renderedSpatialInfo.elevation >= 0 ? '+' : ''}{renderedSpatialInfo.elevation.toFixed(2)}m from ground</p>
|
|
935
1087
|
</TooltipContent>
|
|
936
1088
|
</Tooltip>
|
|
937
1089
|
)}
|
|
938
|
-
{
|
|
1090
|
+
{renderedSpatialInfo.height !== undefined && (
|
|
939
1091
|
<Tooltip>
|
|
940
1092
|
<TooltipTrigger asChild>
|
|
941
1093
|
<span className="flex items-center gap-1 text-emerald-500/60 dark:text-emerald-400/60 font-mono text-[10px] whitespace-nowrap">
|
|
942
1094
|
<ArrowUpDown className="h-2.5 w-2.5 shrink-0" />
|
|
943
|
-
<span className="hidden sm:inline">{
|
|
944
|
-
<span className="sm:hidden">{
|
|
1095
|
+
<span className="hidden sm:inline">{renderedSpatialInfo.height.toFixed(2)}m</span>
|
|
1096
|
+
<span className="sm:hidden">{renderedSpatialInfo.height.toFixed(1)}m</span>
|
|
945
1097
|
</span>
|
|
946
1098
|
</TooltipTrigger>
|
|
947
1099
|
<TooltipContent>
|
|
948
|
-
<p className="text-xs">Height: {
|
|
1100
|
+
<p className="text-xs">Height: {renderedSpatialInfo.height.toFixed(2)}m to next storey</p>
|
|
949
1101
|
</TooltipContent>
|
|
950
1102
|
</Tooltip>
|
|
951
1103
|
)}
|
|
@@ -954,7 +1106,7 @@ export function PropertiesPanel() {
|
|
|
954
1106
|
)}
|
|
955
1107
|
|
|
956
1108
|
{/* World coordinates + Georeferencing — single consolidated section */}
|
|
957
|
-
{(entityCoordinates ||
|
|
1109
|
+
{(entityCoordinates || renderedGeoref || editMode) && (
|
|
958
1110
|
<Collapsible open={coordOpen} onOpenChange={setCoordOpen}>
|
|
959
1111
|
<CollapsibleTrigger className="flex items-center gap-2 w-full text-xs border border-teal-500/30 px-2 py-1.5 text-teal-800 dark:text-teal-400 min-w-0 text-left group/coord">
|
|
960
1112
|
<Crosshair className="h-3.5 w-3.5 shrink-0" />
|
|
@@ -968,8 +1120,8 @@ export function PropertiesPanel() {
|
|
|
968
1120
|
<CoordVal axis="Z" value={entityCoordinates.worldZup.center.z} />
|
|
969
1121
|
</span>
|
|
970
1122
|
)}
|
|
971
|
-
{
|
|
972
|
-
<span className="font-mono text-[9px] text-teal-500/60 shrink-0">{
|
|
1123
|
+
{renderedGeoref?.projectedCRS?.name && (
|
|
1124
|
+
<span className="font-mono text-[9px] text-teal-500/60 shrink-0">{renderedGeoref.projectedCRS.name}</span>
|
|
973
1125
|
)}
|
|
974
1126
|
<span className="text-[9px] text-teal-500/0 group-hover/coord:text-teal-500/40 transition-colors shrink-0">details</span>
|
|
975
1127
|
</>
|
|
@@ -1010,12 +1162,13 @@ export function PropertiesPanel() {
|
|
|
1010
1162
|
</div>
|
|
1011
1163
|
)}
|
|
1012
1164
|
<GeoreferencingPanel
|
|
1013
|
-
georef={
|
|
1165
|
+
georef={renderedGeoref}
|
|
1014
1166
|
modelId={selectedEntity?.modelId === 'legacy' ? '__legacy__' : (model?.id ?? selectedEntity?.modelId)}
|
|
1015
1167
|
enableEditing
|
|
1016
1168
|
schemaVersion={activeDataStore?.schemaVersion}
|
|
1017
1169
|
coordinateInfo={(model?.geometryResult ?? geometryResult)?.coordinateInfo}
|
|
1018
1170
|
geometryResult={model?.geometryResult ?? geometryResult}
|
|
1171
|
+
lengthUnitScale={lengthUnitScale}
|
|
1019
1172
|
/>
|
|
1020
1173
|
</CollapsibleContent>
|
|
1021
1174
|
</Collapsible>
|
|
@@ -1031,17 +1184,17 @@ export function PropertiesPanel() {
|
|
|
1031
1184
|
</div>
|
|
1032
1185
|
|
|
1033
1186
|
{/* IFC Attributes */}
|
|
1034
|
-
{
|
|
1187
|
+
{renderedAttributes.length > 0 && (
|
|
1035
1188
|
<Collapsible defaultOpen className="border-b">
|
|
1036
1189
|
<CollapsibleTrigger className="flex items-center gap-2 w-full p-3 hover:bg-muted/50 text-left">
|
|
1037
1190
|
<Tag className="h-4 w-4 text-muted-foreground" />
|
|
1038
1191
|
<span className="font-medium text-sm">Attributes</span>
|
|
1039
1192
|
{editMode && <PenLine className="h-3 w-3 text-purple-500 ml-1" />}
|
|
1040
|
-
<span className="text-xs text-muted-foreground ml-auto">{
|
|
1193
|
+
<span className="text-xs text-muted-foreground ml-auto">{renderedAttributes.length}</span>
|
|
1041
1194
|
</CollapsibleTrigger>
|
|
1042
1195
|
<CollapsibleContent>
|
|
1043
1196
|
<div className="divide-y border-t">
|
|
1044
|
-
{
|
|
1197
|
+
{renderedAttributes.map((attr) => (
|
|
1045
1198
|
<div key={attr.name} className="grid grid-cols-[minmax(80px,1fr)_minmax(0,2fr)] gap-2 px-3 py-1.5 text-sm">
|
|
1046
1199
|
<span className="text-muted-foreground truncate" title={attr.name}>{attr.name}</span>
|
|
1047
1200
|
{editMode && selectedEntity ? (
|
|
@@ -1066,16 +1219,16 @@ export function PropertiesPanel() {
|
|
|
1066
1219
|
)}
|
|
1067
1220
|
|
|
1068
1221
|
{/* Spatial Containment - for spatial containers (Project, Site, Building, Storey) */}
|
|
1069
|
-
{
|
|
1222
|
+
{renderedSpatialContainment && (
|
|
1070
1223
|
<Collapsible defaultOpen className="border-b">
|
|
1071
1224
|
<CollapsibleTrigger className="flex items-center gap-2 w-full p-3 hover:bg-muted/50 text-left">
|
|
1072
1225
|
<Layers className="h-4 w-4 text-emerald-600" />
|
|
1073
1226
|
<span className="font-medium text-sm">Structure</span>
|
|
1074
|
-
<span className="text-xs text-muted-foreground ml-auto">{
|
|
1227
|
+
<span className="text-xs text-muted-foreground ml-auto">{renderedSpatialContainment.length}</span>
|
|
1075
1228
|
</CollapsibleTrigger>
|
|
1076
1229
|
<CollapsibleContent>
|
|
1077
1230
|
<div className="divide-y border-t">
|
|
1078
|
-
{
|
|
1231
|
+
{renderedSpatialContainment.map((item) => (
|
|
1079
1232
|
<div key={item.label} className="grid grid-cols-[minmax(80px,1fr)_minmax(0,2fr)] gap-2 px-3 py-1.5 text-sm">
|
|
1080
1233
|
<span className="text-muted-foreground truncate" title={item.label}>{item.label}</span>
|
|
1081
1234
|
<span className="font-medium font-mono">{item.value}</span>
|
|
@@ -1118,26 +1271,26 @@ export function PropertiesPanel() {
|
|
|
1118
1271
|
<ScrollArea className="flex-1 bg-white dark:bg-black">
|
|
1119
1272
|
<TabsContent value="properties" className="m-0 p-3 overflow-hidden">
|
|
1120
1273
|
{/* Edit toolbar - only shown when edit mode is active */}
|
|
1121
|
-
{editMode && selectedEntity && (
|
|
1274
|
+
{editMode && selectedEntity && !isNativeLazySelection && (
|
|
1122
1275
|
<EditToolbar
|
|
1123
1276
|
modelId={selectedEntity.modelId}
|
|
1124
1277
|
entityId={selectedEntity.expressId}
|
|
1125
1278
|
entityType={entityType}
|
|
1126
|
-
existingPsets={
|
|
1127
|
-
existingQtos={
|
|
1279
|
+
existingPsets={renderedMergedProperties.map(p => p.name)}
|
|
1280
|
+
existingQtos={renderedQuantities.map(q => q.name)}
|
|
1128
1281
|
schemaVersion={activeDataStore?.schemaVersion}
|
|
1129
1282
|
/>
|
|
1130
1283
|
)}
|
|
1131
|
-
{
|
|
1284
|
+
{renderedMergedProperties.length === 0 && renderedClassifications.length === 0 && !renderedMaterialInfo && renderedDocuments.length === 0 ? (
|
|
1132
1285
|
<p className="text-sm text-zinc-500 dark:text-zinc-500 text-center py-8 font-mono">No property sets</p>
|
|
1133
1286
|
) : (
|
|
1134
1287
|
<div className="space-y-3 w-full overflow-hidden">
|
|
1135
1288
|
{/* Occurrence/Type Properties (based on whether entity itself is a type) */}
|
|
1136
|
-
{
|
|
1289
|
+
{renderedOccurrenceProperties.length > 0 && (
|
|
1137
1290
|
<>
|
|
1138
|
-
{(
|
|
1291
|
+
{(renderedIsTypeEntity || (renderedTypeProperties && renderedTypeProperties.psets.length > 0)) && (
|
|
1139
1292
|
<div className="flex items-center gap-2 px-1 pb-0.5 text-[11px] text-zinc-500 dark:text-zinc-400 uppercase tracking-wider font-semibold">
|
|
1140
|
-
{
|
|
1293
|
+
{renderedIsTypeEntity ? (
|
|
1141
1294
|
<>
|
|
1142
1295
|
<Building2 className="h-3 w-3 shrink-0 text-indigo-500" />
|
|
1143
1296
|
Type Properties:
|
|
@@ -1145,83 +1298,83 @@ export function PropertiesPanel() {
|
|
|
1145
1298
|
) : 'Occurrence Properties:'}
|
|
1146
1299
|
</div>
|
|
1147
1300
|
)}
|
|
1148
|
-
{
|
|
1301
|
+
{renderedOccurrenceProperties.map((pset: PropertySet) => (
|
|
1149
1302
|
<PropertySetCard
|
|
1150
1303
|
key={`occ-${pset.name}`}
|
|
1151
1304
|
pset={pset}
|
|
1152
1305
|
modelId={selectedEntity?.modelId}
|
|
1153
1306
|
entityId={selectedEntity?.expressId}
|
|
1154
|
-
enableEditing={editMode}
|
|
1155
|
-
isTypeProperty={
|
|
1156
|
-
typeEditScope={
|
|
1307
|
+
enableEditing={editMode && !isNativeLazySelection}
|
|
1308
|
+
isTypeProperty={renderedIsTypeEntity}
|
|
1309
|
+
typeEditScope={renderedIsTypeEntity ? renderedTypeEditImpact ?? undefined : undefined}
|
|
1157
1310
|
/>
|
|
1158
1311
|
))}
|
|
1159
1312
|
</>
|
|
1160
1313
|
)}
|
|
1161
1314
|
|
|
1162
1315
|
{/* Inherited Type Properties */}
|
|
1163
|
-
{
|
|
1316
|
+
{renderedInheritedTypeProperties.length > 0 && renderedTypeProperties && (
|
|
1164
1317
|
<>
|
|
1165
|
-
{
|
|
1318
|
+
{renderedOccurrenceProperties.length > 0 && (
|
|
1166
1319
|
<div className="border-t border-indigo-200 dark:border-indigo-800/50 pt-2 mt-2" />
|
|
1167
1320
|
)}
|
|
1168
1321
|
<div className="flex items-center gap-2 px-1 pb-0.5 text-[11px] text-indigo-600/70 dark:text-indigo-400/60 uppercase tracking-wider font-semibold">
|
|
1169
1322
|
<Building2 className="h-3 w-3 shrink-0" />
|
|
1170
|
-
<span className="truncate">Type Properties ({
|
|
1323
|
+
<span className="truncate">Type Properties ({renderedTypeProperties.typeName})</span>
|
|
1171
1324
|
</div>
|
|
1172
|
-
{
|
|
1325
|
+
{renderedInheritedTypeProperties.map((pset: PropertySet) => (
|
|
1173
1326
|
<PropertySetCard
|
|
1174
1327
|
key={`type-${pset.name}`}
|
|
1175
1328
|
pset={pset}
|
|
1176
1329
|
modelId={selectedEntity?.modelId}
|
|
1177
|
-
entityId={
|
|
1178
|
-
enableEditing={editMode}
|
|
1330
|
+
entityId={renderedTypeProperties.typeId}
|
|
1331
|
+
enableEditing={editMode && !isNativeLazySelection}
|
|
1179
1332
|
isTypeProperty
|
|
1180
|
-
typeEditScope={
|
|
1333
|
+
typeEditScope={renderedTypeEditImpact?.mode === 'inherited' ? renderedTypeEditImpact : undefined}
|
|
1181
1334
|
/>
|
|
1182
1335
|
))}
|
|
1183
1336
|
</>
|
|
1184
1337
|
)}
|
|
1185
1338
|
|
|
1186
1339
|
{/* Classifications */}
|
|
1187
|
-
{
|
|
1340
|
+
{renderedClassifications.length > 0 && (
|
|
1188
1341
|
<>
|
|
1189
|
-
{
|
|
1342
|
+
{renderedMergedProperties.length > 0 && (
|
|
1190
1343
|
<div className="border-t border-zinc-200 dark:border-zinc-800 pt-2 mt-2" />
|
|
1191
1344
|
)}
|
|
1192
|
-
{
|
|
1345
|
+
{renderedClassifications.map((classification, i) => (
|
|
1193
1346
|
<ClassificationCard key={`class-${i}`} classification={classification} />
|
|
1194
1347
|
))}
|
|
1195
1348
|
</>
|
|
1196
1349
|
)}
|
|
1197
1350
|
|
|
1198
1351
|
{/* Materials */}
|
|
1199
|
-
{
|
|
1352
|
+
{renderedMaterialInfo && (
|
|
1200
1353
|
<>
|
|
1201
|
-
{(
|
|
1354
|
+
{(renderedMergedProperties.length > 0 || renderedClassifications.length > 0) && (
|
|
1202
1355
|
<div className="border-t border-zinc-200 dark:border-zinc-800 pt-2 mt-2" />
|
|
1203
1356
|
)}
|
|
1204
|
-
<MaterialCard material={
|
|
1357
|
+
<MaterialCard material={renderedMaterialInfo} />
|
|
1205
1358
|
</>
|
|
1206
1359
|
)}
|
|
1207
1360
|
|
|
1208
1361
|
{/* Documents */}
|
|
1209
|
-
{
|
|
1362
|
+
{renderedDocuments.length > 0 && (
|
|
1210
1363
|
<>
|
|
1211
|
-
{(
|
|
1364
|
+
{(renderedMergedProperties.length > 0 || renderedClassifications.length > 0 || renderedMaterialInfo) && (
|
|
1212
1365
|
<div className="border-t border-zinc-200 dark:border-zinc-800 pt-2 mt-2" />
|
|
1213
1366
|
)}
|
|
1214
|
-
{
|
|
1367
|
+
{renderedDocuments.map((doc, i) => (
|
|
1215
1368
|
<DocumentCard key={`doc-${i}`} document={doc} />
|
|
1216
1369
|
))}
|
|
1217
1370
|
</>
|
|
1218
1371
|
)}
|
|
1219
1372
|
|
|
1220
1373
|
{/* Relationships */}
|
|
1221
|
-
{
|
|
1374
|
+
{renderedEntityRelationships && (
|
|
1222
1375
|
<>
|
|
1223
1376
|
<div className="border-t border-zinc-200 dark:border-zinc-800 pt-2 mt-2" />
|
|
1224
|
-
<RelationshipsCard relationships={
|
|
1377
|
+
<RelationshipsCard relationships={renderedEntityRelationships} />
|
|
1225
1378
|
</>
|
|
1226
1379
|
)}
|
|
1227
1380
|
</div>
|
|
@@ -1229,11 +1382,11 @@ export function PropertiesPanel() {
|
|
|
1229
1382
|
</TabsContent>
|
|
1230
1383
|
|
|
1231
1384
|
<TabsContent value="quantities" className="m-0 p-3 overflow-hidden">
|
|
1232
|
-
{
|
|
1385
|
+
{renderedQuantities.length === 0 ? (
|
|
1233
1386
|
<p className="text-sm text-zinc-500 dark:text-zinc-500 text-center py-8 font-mono">No quantities</p>
|
|
1234
1387
|
) : (
|
|
1235
1388
|
<div className="space-y-3 w-full overflow-hidden">
|
|
1236
|
-
{
|
|
1389
|
+
{renderedQuantities.map((qset: QuantitySet) => (
|
|
1237
1390
|
<QuantitySetCard key={qset.name} qset={qset} />
|
|
1238
1391
|
))}
|
|
1239
1392
|
</div>
|
|
@@ -1246,11 +1399,11 @@ export function PropertiesPanel() {
|
|
|
1246
1399
|
entityType={entityType}
|
|
1247
1400
|
modelId={selectedEntity.modelId}
|
|
1248
1401
|
entityId={selectedEntity.expressId}
|
|
1249
|
-
existingPsets={
|
|
1250
|
-
existingProps={
|
|
1251
|
-
existingQsets={
|
|
1252
|
-
existingQuants={
|
|
1253
|
-
existingAttributes={
|
|
1402
|
+
existingPsets={renderedMergedProperties.map(p => p.name)}
|
|
1403
|
+
existingProps={renderedExistingProps}
|
|
1404
|
+
existingQsets={renderedQuantities.map(q => q.name)}
|
|
1405
|
+
existingQuants={renderedExistingQuants}
|
|
1406
|
+
existingAttributes={renderedExistingAttributeNames}
|
|
1254
1407
|
/>
|
|
1255
1408
|
)}
|
|
1256
1409
|
</TabsContent>
|