@ifc-lite/viewer 1.17.2 → 1.17.4

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.
Files changed (520) hide show
  1. package/.turbo/turbo-build.log +34 -24
  2. package/.turbo/turbo-typecheck.log +1 -42
  3. package/CHANGELOG.md +24 -0
  4. package/DESKTOP_CONTRACT_VERSION +1 -0
  5. package/dist/assets/arrow-CZ5kQ26f.js +20 -0
  6. package/dist/assets/basketViewActivator-BmnNtVfZ.js +1 -0
  7. package/dist/assets/bcf-DOG9_WPX.js +281 -0
  8. package/dist/assets/{browser-BDShTXzi.js → browser-C5TFR7sH.js} +1 -1
  9. package/dist/assets/cesium-ADbP7waU.css +1 -0
  10. package/dist/assets/cesium-DUOzBlqv.js +17817 -0
  11. package/dist/assets/drawing-2d-gWfpdfYe.js +257 -0
  12. package/dist/assets/epsg-index.generated-BjJrt_0S.js +1 -0
  13. package/dist/assets/exporters-ChAtBmlj.js +80367 -0
  14. package/dist/assets/geometry.worker-BQ0rzNo-.js +1 -0
  15. package/dist/assets/ids-B4jTqB1O.js +1 -0
  16. package/dist/assets/ifc-lite_bg-BX4E7TX8.wasm +0 -0
  17. package/dist/assets/index-Co8E2-FE.js +106013 -0
  18. package/dist/assets/index-DckuDqlv.css +1 -0
  19. package/dist/assets/lens-CSASnhAL.js +1 -0
  20. package/dist/assets/maplibre-gl-CGLcoNXc.js +811 -0
  21. package/dist/assets/native-bridge-BRvbckFQ.js +429 -0
  22. package/dist/assets/{arrow2-bb-jcVEo.js → parquet-CEXmQNRO.js} +2 -2
  23. package/dist/assets/sandbox-DZiNLNMk.js +5933 -0
  24. package/dist/assets/server-client-BV8zHZ7Y.js +626 -0
  25. package/dist/assets/tauri-core-stub-D8Fa-u43.js +1 -0
  26. package/dist/assets/tauri-dialog-stub-r7Wksg7o.js +1 -0
  27. package/dist/assets/tauri-fs-stub-BdeRC7aK.js +1 -0
  28. package/dist/assets/wasm-bridge-g01g7T9b.js +1 -0
  29. package/dist/assets/zip-DBEtpeu6.js +12 -0
  30. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json +1 -0
  31. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json +1 -0
  32. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json +1 -0
  33. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json +1 -0
  34. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json +1 -0
  35. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json +1 -0
  36. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json +1 -0
  37. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json +1 -0
  38. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json +1 -0
  39. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json +1 -0
  40. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json +1 -0
  41. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json +1 -0
  42. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json +1 -0
  43. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json +1 -0
  44. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json +1 -0
  45. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json +1 -0
  46. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json +1 -0
  47. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json +1 -0
  48. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json +1 -0
  49. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json +1 -0
  50. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json +1 -0
  51. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json +1 -0
  52. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json +1 -0
  53. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json +1 -0
  54. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json +1 -0
  55. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json +1 -0
  56. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json +1 -0
  57. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json +1 -0
  58. package/dist/cesium/Assets/Images/bing_maps_credit.png +0 -0
  59. package/dist/cesium/Assets/Images/cesium_credit.png +0 -0
  60. package/dist/cesium/Assets/Images/google_earth_credit.png +0 -0
  61. package/dist/cesium/Assets/Images/ion-credit.png +0 -0
  62. package/dist/cesium/Assets/Textures/LensFlare/DirtMask.jpg +0 -0
  63. package/dist/cesium/Assets/Textures/LensFlare/StarBurst.jpg +0 -0
  64. package/dist/cesium/Assets/Textures/NaturalEarthII/0/0/0.jpg +0 -0
  65. package/dist/cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg +0 -0
  66. package/dist/cesium/Assets/Textures/NaturalEarthII/1/0/0.jpg +0 -0
  67. package/dist/cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg +0 -0
  68. package/dist/cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg +0 -0
  69. package/dist/cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg +0 -0
  70. package/dist/cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg +0 -0
  71. package/dist/cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg +0 -0
  72. package/dist/cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg +0 -0
  73. package/dist/cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg +0 -0
  74. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg +0 -0
  75. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg +0 -0
  76. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/2.jpg +0 -0
  77. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/3.jpg +0 -0
  78. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/0.jpg +0 -0
  79. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/1.jpg +0 -0
  80. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/2.jpg +0 -0
  81. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg +0 -0
  82. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg +0 -0
  83. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg +0 -0
  84. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/2.jpg +0 -0
  85. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg +0 -0
  86. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg +0 -0
  87. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/1.jpg +0 -0
  88. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg +0 -0
  89. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/3.jpg +0 -0
  90. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg +0 -0
  91. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg +0 -0
  92. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg +0 -0
  93. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/3.jpg +0 -0
  94. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/0.jpg +0 -0
  95. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg +0 -0
  96. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/2.jpg +0 -0
  97. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg +0 -0
  98. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg +0 -0
  99. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg +0 -0
  100. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg +0 -0
  101. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg +0 -0
  102. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg +0 -0
  103. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg +0 -0
  104. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/2.jpg +0 -0
  105. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg +0 -0
  106. package/dist/cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml +14 -0
  107. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
  108. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
  109. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
  110. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
  111. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
  112. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
  113. package/dist/cesium/Assets/Textures/maki/airfield.png +0 -0
  114. package/dist/cesium/Assets/Textures/maki/airport.png +0 -0
  115. package/dist/cesium/Assets/Textures/maki/alcohol-shop.png +0 -0
  116. package/dist/cesium/Assets/Textures/maki/america-football.png +0 -0
  117. package/dist/cesium/Assets/Textures/maki/art-gallery.png +0 -0
  118. package/dist/cesium/Assets/Textures/maki/bakery.png +0 -0
  119. package/dist/cesium/Assets/Textures/maki/bank.png +0 -0
  120. package/dist/cesium/Assets/Textures/maki/bar.png +0 -0
  121. package/dist/cesium/Assets/Textures/maki/baseball.png +0 -0
  122. package/dist/cesium/Assets/Textures/maki/basketball.png +0 -0
  123. package/dist/cesium/Assets/Textures/maki/beer.png +0 -0
  124. package/dist/cesium/Assets/Textures/maki/bicycle.png +0 -0
  125. package/dist/cesium/Assets/Textures/maki/building.png +0 -0
  126. package/dist/cesium/Assets/Textures/maki/bus.png +0 -0
  127. package/dist/cesium/Assets/Textures/maki/cafe.png +0 -0
  128. package/dist/cesium/Assets/Textures/maki/camera.png +0 -0
  129. package/dist/cesium/Assets/Textures/maki/campsite.png +0 -0
  130. package/dist/cesium/Assets/Textures/maki/car.png +0 -0
  131. package/dist/cesium/Assets/Textures/maki/cemetery.png +0 -0
  132. package/dist/cesium/Assets/Textures/maki/cesium.png +0 -0
  133. package/dist/cesium/Assets/Textures/maki/chemist.png +0 -0
  134. package/dist/cesium/Assets/Textures/maki/cinema.png +0 -0
  135. package/dist/cesium/Assets/Textures/maki/circle-stroked.png +0 -0
  136. package/dist/cesium/Assets/Textures/maki/circle.png +0 -0
  137. package/dist/cesium/Assets/Textures/maki/city.png +0 -0
  138. package/dist/cesium/Assets/Textures/maki/clothing-store.png +0 -0
  139. package/dist/cesium/Assets/Textures/maki/college.png +0 -0
  140. package/dist/cesium/Assets/Textures/maki/commercial.png +0 -0
  141. package/dist/cesium/Assets/Textures/maki/cricket.png +0 -0
  142. package/dist/cesium/Assets/Textures/maki/cross.png +0 -0
  143. package/dist/cesium/Assets/Textures/maki/dam.png +0 -0
  144. package/dist/cesium/Assets/Textures/maki/danger.png +0 -0
  145. package/dist/cesium/Assets/Textures/maki/disability.png +0 -0
  146. package/dist/cesium/Assets/Textures/maki/dog-park.png +0 -0
  147. package/dist/cesium/Assets/Textures/maki/embassy.png +0 -0
  148. package/dist/cesium/Assets/Textures/maki/emergency-telephone.png +0 -0
  149. package/dist/cesium/Assets/Textures/maki/entrance.png +0 -0
  150. package/dist/cesium/Assets/Textures/maki/farm.png +0 -0
  151. package/dist/cesium/Assets/Textures/maki/fast-food.png +0 -0
  152. package/dist/cesium/Assets/Textures/maki/ferry.png +0 -0
  153. package/dist/cesium/Assets/Textures/maki/fire-station.png +0 -0
  154. package/dist/cesium/Assets/Textures/maki/fuel.png +0 -0
  155. package/dist/cesium/Assets/Textures/maki/garden.png +0 -0
  156. package/dist/cesium/Assets/Textures/maki/gift.png +0 -0
  157. package/dist/cesium/Assets/Textures/maki/golf.png +0 -0
  158. package/dist/cesium/Assets/Textures/maki/grocery.png +0 -0
  159. package/dist/cesium/Assets/Textures/maki/hairdresser.png +0 -0
  160. package/dist/cesium/Assets/Textures/maki/harbor.png +0 -0
  161. package/dist/cesium/Assets/Textures/maki/heart.png +0 -0
  162. package/dist/cesium/Assets/Textures/maki/heliport.png +0 -0
  163. package/dist/cesium/Assets/Textures/maki/hospital.png +0 -0
  164. package/dist/cesium/Assets/Textures/maki/ice-cream.png +0 -0
  165. package/dist/cesium/Assets/Textures/maki/industrial.png +0 -0
  166. package/dist/cesium/Assets/Textures/maki/land-use.png +0 -0
  167. package/dist/cesium/Assets/Textures/maki/laundry.png +0 -0
  168. package/dist/cesium/Assets/Textures/maki/library.png +0 -0
  169. package/dist/cesium/Assets/Textures/maki/lighthouse.png +0 -0
  170. package/dist/cesium/Assets/Textures/maki/lodging.png +0 -0
  171. package/dist/cesium/Assets/Textures/maki/logging.png +0 -0
  172. package/dist/cesium/Assets/Textures/maki/london-underground.png +0 -0
  173. package/dist/cesium/Assets/Textures/maki/marker-stroked.png +0 -0
  174. package/dist/cesium/Assets/Textures/maki/marker.png +0 -0
  175. package/dist/cesium/Assets/Textures/maki/minefield.png +0 -0
  176. package/dist/cesium/Assets/Textures/maki/mobilephone.png +0 -0
  177. package/dist/cesium/Assets/Textures/maki/monument.png +0 -0
  178. package/dist/cesium/Assets/Textures/maki/museum.png +0 -0
  179. package/dist/cesium/Assets/Textures/maki/music.png +0 -0
  180. package/dist/cesium/Assets/Textures/maki/oil-well.png +0 -0
  181. package/dist/cesium/Assets/Textures/maki/park.png +0 -0
  182. package/dist/cesium/Assets/Textures/maki/park2.png +0 -0
  183. package/dist/cesium/Assets/Textures/maki/parking-garage.png +0 -0
  184. package/dist/cesium/Assets/Textures/maki/parking.png +0 -0
  185. package/dist/cesium/Assets/Textures/maki/pharmacy.png +0 -0
  186. package/dist/cesium/Assets/Textures/maki/pitch.png +0 -0
  187. package/dist/cesium/Assets/Textures/maki/place-of-worship.png +0 -0
  188. package/dist/cesium/Assets/Textures/maki/playground.png +0 -0
  189. package/dist/cesium/Assets/Textures/maki/police.png +0 -0
  190. package/dist/cesium/Assets/Textures/maki/polling-place.png +0 -0
  191. package/dist/cesium/Assets/Textures/maki/post.png +0 -0
  192. package/dist/cesium/Assets/Textures/maki/prison.png +0 -0
  193. package/dist/cesium/Assets/Textures/maki/rail-above.png +0 -0
  194. package/dist/cesium/Assets/Textures/maki/rail-light.png +0 -0
  195. package/dist/cesium/Assets/Textures/maki/rail-metro.png +0 -0
  196. package/dist/cesium/Assets/Textures/maki/rail-underground.png +0 -0
  197. package/dist/cesium/Assets/Textures/maki/rail.png +0 -0
  198. package/dist/cesium/Assets/Textures/maki/religious-christian.png +0 -0
  199. package/dist/cesium/Assets/Textures/maki/religious-jewish.png +0 -0
  200. package/dist/cesium/Assets/Textures/maki/religious-muslim.png +0 -0
  201. package/dist/cesium/Assets/Textures/maki/restaurant.png +0 -0
  202. package/dist/cesium/Assets/Textures/maki/roadblock.png +0 -0
  203. package/dist/cesium/Assets/Textures/maki/rocket.png +0 -0
  204. package/dist/cesium/Assets/Textures/maki/school.png +0 -0
  205. package/dist/cesium/Assets/Textures/maki/scooter.png +0 -0
  206. package/dist/cesium/Assets/Textures/maki/shop.png +0 -0
  207. package/dist/cesium/Assets/Textures/maki/skiing.png +0 -0
  208. package/dist/cesium/Assets/Textures/maki/slaughterhouse.png +0 -0
  209. package/dist/cesium/Assets/Textures/maki/soccer.png +0 -0
  210. package/dist/cesium/Assets/Textures/maki/square-stroked.png +0 -0
  211. package/dist/cesium/Assets/Textures/maki/square.png +0 -0
  212. package/dist/cesium/Assets/Textures/maki/star-stroked.png +0 -0
  213. package/dist/cesium/Assets/Textures/maki/star.png +0 -0
  214. package/dist/cesium/Assets/Textures/maki/suitcase.png +0 -0
  215. package/dist/cesium/Assets/Textures/maki/swimming.png +0 -0
  216. package/dist/cesium/Assets/Textures/maki/telephone.png +0 -0
  217. package/dist/cesium/Assets/Textures/maki/tennis.png +0 -0
  218. package/dist/cesium/Assets/Textures/maki/theatre.png +0 -0
  219. package/dist/cesium/Assets/Textures/maki/toilets.png +0 -0
  220. package/dist/cesium/Assets/Textures/maki/town-hall.png +0 -0
  221. package/dist/cesium/Assets/Textures/maki/town.png +0 -0
  222. package/dist/cesium/Assets/Textures/maki/triangle-stroked.png +0 -0
  223. package/dist/cesium/Assets/Textures/maki/triangle.png +0 -0
  224. package/dist/cesium/Assets/Textures/maki/village.png +0 -0
  225. package/dist/cesium/Assets/Textures/maki/warehouse.png +0 -0
  226. package/dist/cesium/Assets/Textures/maki/waste-basket.png +0 -0
  227. package/dist/cesium/Assets/Textures/maki/water.png +0 -0
  228. package/dist/cesium/Assets/Textures/maki/wetland.png +0 -0
  229. package/dist/cesium/Assets/Textures/maki/zoo.png +0 -0
  230. package/dist/cesium/Assets/Textures/moonSmall.jpg +0 -0
  231. package/dist/cesium/Assets/Textures/pin.svg +1 -0
  232. package/dist/cesium/Assets/Textures/waterNormals.jpg +0 -0
  233. package/dist/cesium/Assets/Textures/waterNormalsSmall.jpg +0 -0
  234. package/dist/cesium/Assets/approximateTerrainHeights.json +1 -0
  235. package/dist/cesium/ThirdParty/Workers/package.json +1 -0
  236. package/dist/cesium/ThirdParty/Workers/zip-web-worker.js +1 -0
  237. package/dist/cesium/ThirdParty/basis_transcoder.wasm +0 -0
  238. package/dist/cesium/ThirdParty/draco_decoder.wasm +0 -0
  239. package/dist/cesium/ThirdParty/google-earth-dbroot-parser.js +1 -0
  240. package/dist/cesium/ThirdParty/wasm_splats_bg.wasm +0 -0
  241. package/dist/cesium/ThirdParty/zip-module.wasm +0 -0
  242. package/dist/cesium/Widgets/Animation/Animation.css +127 -0
  243. package/dist/cesium/Widgets/Animation/lighter.css +70 -0
  244. package/dist/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css +108 -0
  245. package/dist/cesium/Widgets/BaseLayerPicker/lighter.css +22 -0
  246. package/dist/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css +102 -0
  247. package/dist/cesium/Widgets/CesiumInspector/CesiumInspector.css +113 -0
  248. package/dist/cesium/Widgets/CesiumWidget/CesiumWidget.css +119 -0
  249. package/dist/cesium/Widgets/CesiumWidget/lighter.css +14 -0
  250. package/dist/cesium/Widgets/FullscreenButton/FullscreenButton.css +8 -0
  251. package/dist/cesium/Widgets/Geocoder/Geocoder.css +70 -0
  252. package/dist/cesium/Widgets/Geocoder/lighter.css +17 -0
  253. package/dist/cesium/Widgets/I3SBuildingSceneLayerExplorer/I3SBuildingSceneLayerExplorer.css +27 -0
  254. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png +0 -0
  255. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png +0 -0
  256. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png +0 -0
  257. package/dist/cesium/Widgets/Images/ImageryProviders/azureAerial.png +0 -0
  258. package/dist/cesium/Widgets/Images/ImageryProviders/azureRoads.png +0 -0
  259. package/dist/cesium/Widgets/Images/ImageryProviders/bingAerial.png +0 -0
  260. package/dist/cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png +0 -0
  261. package/dist/cesium/Widgets/Images/ImageryProviders/bingRoads.png +0 -0
  262. package/dist/cesium/Widgets/Images/ImageryProviders/blueMarble.png +0 -0
  263. package/dist/cesium/Widgets/Images/ImageryProviders/earthAtNight.png +0 -0
  264. package/dist/cesium/Widgets/Images/ImageryProviders/googleContour.png +0 -0
  265. package/dist/cesium/Widgets/Images/ImageryProviders/googleRoadmap.png +0 -0
  266. package/dist/cesium/Widgets/Images/ImageryProviders/googleSatellite.png +0 -0
  267. package/dist/cesium/Widgets/Images/ImageryProviders/googleSatelliteLabels.png +0 -0
  268. package/dist/cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png +0 -0
  269. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png +0 -0
  270. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxStreets.png +0 -0
  271. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxTerrain.png +0 -0
  272. package/dist/cesium/Widgets/Images/ImageryProviders/naturalEarthII.png +0 -0
  273. package/dist/cesium/Widgets/Images/ImageryProviders/openStreetMap.png +0 -0
  274. package/dist/cesium/Widgets/Images/ImageryProviders/sentinel-2.png +0 -0
  275. package/dist/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png +0 -0
  276. package/dist/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png +0 -0
  277. package/dist/cesium/Widgets/Images/ImageryProviders/stamenToner.png +0 -0
  278. package/dist/cesium/Widgets/Images/ImageryProviders/stamenWatercolor.png +0 -0
  279. package/dist/cesium/Widgets/Images/NavigationHelp/Mouse.svg +84 -0
  280. package/dist/cesium/Widgets/Images/NavigationHelp/MouseLeft.svg +76 -0
  281. package/dist/cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg +76 -0
  282. package/dist/cesium/Widgets/Images/NavigationHelp/MouseRight.svg +76 -0
  283. package/dist/cesium/Widgets/Images/NavigationHelp/Touch.svg +120 -0
  284. package/dist/cesium/Widgets/Images/NavigationHelp/TouchDrag.svg +129 -0
  285. package/dist/cesium/Widgets/Images/NavigationHelp/TouchRotate.svg +76 -0
  286. package/dist/cesium/Widgets/Images/NavigationHelp/TouchTilt.svg +135 -0
  287. package/dist/cesium/Widgets/Images/NavigationHelp/TouchZoom.svg +74 -0
  288. package/dist/cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png +0 -0
  289. package/dist/cesium/Widgets/Images/TerrainProviders/Ellipsoid.png +0 -0
  290. package/dist/cesium/Widgets/Images/TimelineIcons.png +0 -0
  291. package/dist/cesium/Widgets/Images/info-loading.gif +0 -0
  292. package/dist/cesium/Widgets/InfoBox/InfoBox.css +92 -0
  293. package/dist/cesium/Widgets/InfoBox/InfoBoxDescription.css +178 -0
  294. package/dist/cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css +93 -0
  295. package/dist/cesium/Widgets/NavigationHelpButton/lighter.css +38 -0
  296. package/dist/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css +15 -0
  297. package/dist/cesium/Widgets/ProjectionPicker/ProjectionPicker.css +38 -0
  298. package/dist/cesium/Widgets/SceneModePicker/SceneModePicker.css +56 -0
  299. package/dist/cesium/Widgets/SelectionIndicator/SelectionIndicator.css +20 -0
  300. package/dist/cesium/Widgets/Timeline/Timeline.css +103 -0
  301. package/dist/cesium/Widgets/Timeline/lighter.css +23 -0
  302. package/dist/cesium/Widgets/VRButton/VRButton.css +8 -0
  303. package/dist/cesium/Widgets/Viewer/Viewer.css +107 -0
  304. package/dist/cesium/Widgets/VoxelInspector/VoxelInspector.css +16 -0
  305. package/dist/cesium/Widgets/lighter.css +237 -0
  306. package/dist/cesium/Widgets/lighterShared.css +46 -0
  307. package/dist/cesium/Widgets/shared.css +103 -0
  308. package/dist/cesium/Widgets/widgets.css +1342 -0
  309. package/dist/cesium/Workers/chunk-23ZQ2IVV.js +29 -0
  310. package/dist/cesium/Workers/chunk-2EQO3Q56.js +26 -0
  311. package/dist/cesium/Workers/chunk-2MJIIVP4.js +26 -0
  312. package/dist/cesium/Workers/chunk-2TE5NTVD.js +26 -0
  313. package/dist/cesium/Workers/chunk-2ZBHLJST.js +26 -0
  314. package/dist/cesium/Workers/chunk-5TJMAQVL.js +26 -0
  315. package/dist/cesium/Workers/chunk-6BD4U3VO.js +26 -0
  316. package/dist/cesium/Workers/chunk-7TVGLKQF.js +26 -0
  317. package/dist/cesium/Workers/chunk-BTSYJ5XU.js +26 -0
  318. package/dist/cesium/Workers/chunk-BXMEEOCS.js +63 -0
  319. package/dist/cesium/Workers/chunk-BYLCY7GP.js +29 -0
  320. package/dist/cesium/Workers/chunk-CTHM3W6I.js +26 -0
  321. package/dist/cesium/Workers/chunk-CUUSNIVQ.js +26 -0
  322. package/dist/cesium/Workers/chunk-E3JOOS3S.js +26 -0
  323. package/dist/cesium/Workers/chunk-E7KYDCM5.js +26 -0
  324. package/dist/cesium/Workers/chunk-EDVBB7SS.js +27 -0
  325. package/dist/cesium/Workers/chunk-EFBN7QNX.js +26 -0
  326. package/dist/cesium/Workers/chunk-EQ4YRVWL.js +26 -0
  327. package/dist/cesium/Workers/chunk-F6PRE7D6.js +26 -0
  328. package/dist/cesium/Workers/chunk-FC4ZZ65J.js +26 -0
  329. package/dist/cesium/Workers/chunk-FFBVWF2L.js +26 -0
  330. package/dist/cesium/Workers/chunk-GBAA6GVX.js +26 -0
  331. package/dist/cesium/Workers/chunk-ICALLYLG.js +26 -0
  332. package/dist/cesium/Workers/chunk-ILRYTWTP.js +26 -0
  333. package/dist/cesium/Workers/chunk-IRNLBSEJ.js +26 -0
  334. package/dist/cesium/Workers/chunk-IX4VMHEV.js +26 -0
  335. package/dist/cesium/Workers/chunk-L6QHHACZ.js +26 -0
  336. package/dist/cesium/Workers/chunk-LI2ZSORM.js +26 -0
  337. package/dist/cesium/Workers/chunk-LSLE2RL4.js +26 -0
  338. package/dist/cesium/Workers/chunk-M4HLDBCG.js +26 -0
  339. package/dist/cesium/Workers/chunk-MJHHSGEH.js +26 -0
  340. package/dist/cesium/Workers/chunk-NMVKML6W.js +26 -0
  341. package/dist/cesium/Workers/chunk-OCWJRAXS.js +26 -0
  342. package/dist/cesium/Workers/chunk-OIRKANTH.js +26 -0
  343. package/dist/cesium/Workers/chunk-OIT7J4IC.js +26 -0
  344. package/dist/cesium/Workers/chunk-OLZ3FYUM.js +26 -0
  345. package/dist/cesium/Workers/chunk-Q5BPHJQF.js +26 -0
  346. package/dist/cesium/Workers/chunk-QFM5DCMQ.js +26 -0
  347. package/dist/cesium/Workers/chunk-QKUIYMGC.js +28 -0
  348. package/dist/cesium/Workers/chunk-S44JILQT.js +26 -0
  349. package/dist/cesium/Workers/chunk-SLT4J352.js +26 -0
  350. package/dist/cesium/Workers/chunk-SQMIIXB7.js +26 -0
  351. package/dist/cesium/Workers/chunk-TJ4XLGBQ.js +26 -0
  352. package/dist/cesium/Workers/chunk-TNSUQXWK.js +27 -0
  353. package/dist/cesium/Workers/chunk-UBOGZS7F.js +26 -0
  354. package/dist/cesium/Workers/chunk-V3OSTMM6.js +26 -0
  355. package/dist/cesium/Workers/chunk-V7QEYVP3.js +26 -0
  356. package/dist/cesium/Workers/chunk-VUKYSU4H.js +26 -0
  357. package/dist/cesium/Workers/chunk-W37FE5GR.js +26 -0
  358. package/dist/cesium/Workers/chunk-WBOV35NL.js +26 -0
  359. package/dist/cesium/Workers/chunk-WPMZLB3Y.js +26 -0
  360. package/dist/cesium/Workers/chunk-WWWZVEEH.js +26 -0
  361. package/dist/cesium/Workers/chunk-XFIQ5DEQ.js +28 -0
  362. package/dist/cesium/Workers/chunk-XQHLGIO7.js +26 -0
  363. package/dist/cesium/Workers/chunk-XUSCFAVF.js +26 -0
  364. package/dist/cesium/Workers/chunk-YP7I5QBZ.js +26 -0
  365. package/dist/cesium/Workers/chunk-Z3QF2EHT.js +26 -0
  366. package/dist/cesium/Workers/combineGeometry.js +26 -0
  367. package/dist/cesium/Workers/createBoxGeometry.js +26 -0
  368. package/dist/cesium/Workers/createBoxOutlineGeometry.js +26 -0
  369. package/dist/cesium/Workers/createCircleGeometry.js +26 -0
  370. package/dist/cesium/Workers/createCircleOutlineGeometry.js +26 -0
  371. package/dist/cesium/Workers/createCoplanarPolygonGeometry.js +26 -0
  372. package/dist/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +26 -0
  373. package/dist/cesium/Workers/createCorridorGeometry.js +26 -0
  374. package/dist/cesium/Workers/createCorridorOutlineGeometry.js +26 -0
  375. package/dist/cesium/Workers/createCylinderGeometry.js +26 -0
  376. package/dist/cesium/Workers/createCylinderOutlineGeometry.js +26 -0
  377. package/dist/cesium/Workers/createEllipseGeometry.js +26 -0
  378. package/dist/cesium/Workers/createEllipseOutlineGeometry.js +26 -0
  379. package/dist/cesium/Workers/createEllipsoidGeometry.js +26 -0
  380. package/dist/cesium/Workers/createEllipsoidOutlineGeometry.js +26 -0
  381. package/dist/cesium/Workers/createFrustumGeometry.js +26 -0
  382. package/dist/cesium/Workers/createFrustumOutlineGeometry.js +26 -0
  383. package/dist/cesium/Workers/createGeometry.js +26 -0
  384. package/dist/cesium/Workers/createGroundPolylineGeometry.js +26 -0
  385. package/dist/cesium/Workers/createPlaneGeometry.js +26 -0
  386. package/dist/cesium/Workers/createPlaneOutlineGeometry.js +26 -0
  387. package/dist/cesium/Workers/createPolygonGeometry.js +26 -0
  388. package/dist/cesium/Workers/createPolygonOutlineGeometry.js +26 -0
  389. package/dist/cesium/Workers/createPolylineGeometry.js +26 -0
  390. package/dist/cesium/Workers/createPolylineVolumeGeometry.js +26 -0
  391. package/dist/cesium/Workers/createPolylineVolumeOutlineGeometry.js +26 -0
  392. package/dist/cesium/Workers/createRectangleGeometry.js +26 -0
  393. package/dist/cesium/Workers/createRectangleOutlineGeometry.js +26 -0
  394. package/dist/cesium/Workers/createSimplePolylineGeometry.js +26 -0
  395. package/dist/cesium/Workers/createSphereGeometry.js +26 -0
  396. package/dist/cesium/Workers/createSphereOutlineGeometry.js +26 -0
  397. package/dist/cesium/Workers/createTaskProcessorWorker.js +26 -0
  398. package/dist/cesium/Workers/createVectorTileClampedPolylines.js +26 -0
  399. package/dist/cesium/Workers/createVectorTileGeometries.js +26 -0
  400. package/dist/cesium/Workers/createVectorTilePoints.js +26 -0
  401. package/dist/cesium/Workers/createVectorTilePolygons.js +26 -0
  402. package/dist/cesium/Workers/createVectorTilePolylines.js +26 -0
  403. package/dist/cesium/Workers/createVerticesFromCesium3DTilesTerrain.js +26 -0
  404. package/dist/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +26 -0
  405. package/dist/cesium/Workers/createVerticesFromHeightmap.js +26 -0
  406. package/dist/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +26 -0
  407. package/dist/cesium/Workers/createWallGeometry.js +26 -0
  408. package/dist/cesium/Workers/createWallOutlineGeometry.js +26 -0
  409. package/dist/cesium/Workers/decodeDraco.js +26 -0
  410. package/dist/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +26 -0
  411. package/dist/cesium/Workers/decodeI3S.js +26 -0
  412. package/dist/cesium/Workers/gaussianSplatSorter.js +26 -0
  413. package/dist/cesium/Workers/gaussianSplatTextureGenerator.js +26 -0
  414. package/dist/cesium/Workers/incrementallyBuildTerrainPicker.js +26 -0
  415. package/dist/cesium/Workers/transcodeKTX2.js +56 -0
  416. package/dist/cesium/Workers/transferTypedArrayTest.js +26 -0
  417. package/dist/cesium/Workers/upsampleQuantizedTerrainMesh.js +26 -0
  418. package/dist/cesium/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +26 -0
  419. package/dist/index.html +13 -2
  420. package/package.json +27 -19
  421. package/src/App.tsx +1 -17
  422. package/src/components/viewer/BCFPanel.tsx +46 -4
  423. package/src/components/viewer/CesiumOverlay.tsx +672 -0
  424. package/src/components/viewer/CesiumSettingsDialog.tsx +100 -0
  425. package/src/components/viewer/ChatPanel.tsx +54 -16
  426. package/src/components/viewer/CommandPalette.tsx +6 -1
  427. package/src/components/viewer/DesktopEntitlementBanner.tsx +74 -0
  428. package/src/components/viewer/ExportChangesButton.tsx +24 -4
  429. package/src/components/viewer/ExportDialog.tsx +38 -9
  430. package/src/components/viewer/HierarchyPanel.tsx +202 -6
  431. package/src/components/viewer/IDSPanel.tsx +52 -3
  432. package/src/components/viewer/KeyboardShortcutsDialog.tsx +1 -1
  433. package/src/components/viewer/MainToolbar.tsx +353 -27
  434. package/src/components/viewer/PropertiesPanel.tsx +306 -131
  435. package/src/components/viewer/ScriptPanel.tsx +34 -8
  436. package/src/components/viewer/Section2DPanel.tsx +3 -2
  437. package/src/components/viewer/SettingsPage.tsx +430 -0
  438. package/src/components/viewer/StatusBar.tsx +17 -1
  439. package/src/components/viewer/UpgradePage.tsx +6 -4
  440. package/src/components/viewer/ViewerLayout.tsx +47 -6
  441. package/src/components/viewer/Viewport.tsx +49 -8
  442. package/src/components/viewer/ViewportContainer.tsx +285 -32
  443. package/src/components/viewer/ViewportOverlays.tsx +129 -27
  444. package/src/components/viewer/hierarchy/treeDataBuilder.ts +2 -1
  445. package/src/components/viewer/properties/EpsgLookupDialog.tsx +418 -0
  446. package/src/components/viewer/properties/GeoreferencingPanel.tsx +703 -0
  447. package/src/components/viewer/properties/LocationMap.tsx +730 -0
  448. package/src/components/viewer/properties/ModelMetadataPanel.tsx +3 -70
  449. package/src/components/viewer/selectionHandlers.ts +4 -3
  450. package/src/components/viewer/useAnimationLoop.ts +4 -0
  451. package/src/components/viewer/useGeometryStreaming.ts +127 -40
  452. package/src/components/viewer/useMouseControls.ts +4 -1
  453. package/src/hooks/bcfIdLookup.ts +13 -11
  454. package/src/hooks/ids/idsColorSystem.ts +3 -8
  455. package/src/hooks/ingest/viewerModelIngest.ts +275 -0
  456. package/src/hooks/useIDS.ts +32 -17
  457. package/src/hooks/useIfc.ts +7 -1
  458. package/src/hooks/useIfcCache.ts +28 -15
  459. package/src/hooks/useIfcFederation.ts +59 -227
  460. package/src/hooks/useIfcLoader.ts +1656 -130
  461. package/src/hooks/useIfcServer.ts +0 -69
  462. package/src/lib/desktop/ClerkDesktopEntitlementSync.tsx +175 -0
  463. package/src/lib/desktop/desktopEntitlementEvents.ts +39 -0
  464. package/src/lib/desktop-entitlement.ts +45 -0
  465. package/src/lib/desktop-product.ts +124 -0
  466. package/src/lib/geo/cesium-bridge.ts +310 -0
  467. package/src/lib/geo/kmz-exporter.ts +112 -0
  468. package/src/lib/geo/reproject.ts +370 -0
  469. package/src/lib/lens/adapter.ts +3 -1
  470. package/src/lib/recent-files.ts +2 -1
  471. package/src/main.tsx +1 -0
  472. package/src/sdk/adapters/export-adapter.ts +14 -1
  473. package/src/sdk/adapters/viewer-adapter.ts +5 -9
  474. package/src/sdk/adapters/visibility-adapter.ts +6 -9
  475. package/src/services/analysis-extensions.ts +125 -0
  476. package/src/services/app-navigation.ts +13 -0
  477. package/src/services/bsdd.ts +53 -4
  478. package/src/services/cacheService.ts +1 -1
  479. package/src/services/desktop-cache.ts +43 -0
  480. package/src/services/desktop-export.ts +77 -0
  481. package/src/services/desktop-harness.ts +196 -0
  482. package/src/services/desktop-logger.ts +20 -0
  483. package/src/services/desktop-native-metadata.ts +207 -0
  484. package/src/services/desktop-panel-actions.ts +43 -0
  485. package/src/services/desktop-preferences.ts +44 -0
  486. package/src/services/file-dialog.ts +147 -0
  487. package/src/services/tauri-core-stub.ts +7 -0
  488. package/src/services/tauri-dialog-stub.ts +7 -0
  489. package/src/services/tauri-fs-stub.ts +7 -0
  490. package/src/store/basketVisibleSet.ts +3 -4
  491. package/src/store/globalId.ts +79 -0
  492. package/src/store/index.ts +41 -2
  493. package/src/store/slices/cesiumSlice.ts +122 -0
  494. package/src/store/slices/chatSlice.ts +5 -1
  495. package/src/store/slices/dataSlice.ts +139 -28
  496. package/src/store/slices/desktopEntitlementSlice.ts +86 -0
  497. package/src/store/slices/loadingSlice.ts +14 -2
  498. package/src/store/slices/modelSlice.ts +58 -3
  499. package/src/store/slices/mutationSlice.ts +178 -0
  500. package/src/store/slices/pinboardSlice.ts +4 -8
  501. package/src/store/types.ts +96 -2
  502. package/src/store.ts +1 -1
  503. package/src/utils/desktopModelSnapshot.ts +358 -0
  504. package/src/utils/ifcConfig.ts +6 -1
  505. package/src/utils/nativeSpatialDataStore.ts +250 -0
  506. package/src/utils/serverDataModel.ts +4 -0
  507. package/src/utils/spatialHierarchy.ts +10 -11
  508. package/vite.config.ts +41 -0
  509. package/dist/assets/Arrow.dom-BhOg9lpn.js +0 -20
  510. package/dist/assets/arrow2_bg-BlXl-cSQ.js +0 -1
  511. package/dist/assets/basketViewActivator-BRG5DBmM.js +0 -1
  512. package/dist/assets/desktop-cache-oPzaWXYE.js +0 -1
  513. package/dist/assets/geometry.worker-kgiT_Qhh.js +0 -1
  514. package/dist/assets/ifc-lite_bg-FNRmpSvM.wasm +0 -0
  515. package/dist/assets/index-B1Ecw4AU.js +0 -189756
  516. package/dist/assets/index-Ba4eoTe7.css +0 -1
  517. package/dist/assets/index-CrgYBjTn.js +0 -229
  518. package/dist/assets/module-6F3E5H7Y-tx0BadV3.js +0 -6
  519. package/dist/assets/native-bridge-Crsb7TKz.js +0 -111
  520. package/dist/assets/wasm-bridge-mJUhb7uk.js +0 -1
@@ -20,6 +20,7 @@ import type { StateCreator } from 'zustand';
20
20
  import type { Drawing2D } from '@ifc-lite/drawing-2d';
21
21
  import type { CameraCallbacks, CameraViewpoint, EntityRef, SectionPlane } from '../types.js';
22
22
  import { entityRefToString, stringToEntityRef } from '../types.js';
23
+ import { toGlobalIdForRef } from '../globalId.js';
23
24
 
24
25
  export type BasketSource = 'selection' | 'visible' | 'hierarchy' | 'manual';
25
26
 
@@ -148,17 +149,14 @@ function basketToGlobalIds(
148
149
  const globalIds = new Set<number>();
149
150
  for (const str of basketEntities) {
150
151
  const ref = stringToEntityRef(str);
151
- const model = models.get(ref.modelId);
152
- const offset = model?.idOffset ?? 0;
153
- globalIds.add(ref.expressId + offset);
152
+ globalIds.add(toGlobalIdForRef(models, ref));
154
153
  }
155
154
  return globalIds;
156
155
  }
157
156
 
158
157
  /** Compute a single EntityRef's global ID */
159
158
  function refToGlobalId(ref: EntityRef, models: Map<string, { idOffset: number }>): number {
160
- const model = models.get(ref.modelId);
161
- return ref.expressId + (model?.idOffset ?? 0);
159
+ return toGlobalIdForRef(models, ref);
162
160
  }
163
161
 
164
162
  function refsToEntityKeySet(refs: EntityRef[]): Set<string> {
@@ -195,9 +193,7 @@ function computeBasketVisibility(
195
193
  }
196
194
  const hiddenEntities = new Set<number>(currentHidden);
197
195
  for (const ref of unhideRefs) {
198
- const model = models.get(ref.modelId);
199
- const offset = model?.idOffset ?? 0;
200
- hiddenEntities.delete(ref.expressId + offset);
196
+ hiddenEntities.delete(toGlobalIdForRef(models, ref));
201
197
  }
202
198
  return { isolatedEntities, hiddenEntities };
203
199
  }
@@ -192,6 +192,86 @@ export interface EntityRef {
192
192
  /** IFC schema version enum for type safety */
193
193
  export type SchemaVersion = 'IFC2X3' | 'IFC4' | 'IFC4X3' | 'IFC5';
194
194
 
195
+ export type GeometryLoadState =
196
+ | 'pending'
197
+ | 'opening'
198
+ | 'streaming'
199
+ | 'interactive'
200
+ | 'complete'
201
+ | 'error';
202
+
203
+ export type MetadataLoadState =
204
+ | 'idle'
205
+ | 'bootstrapping'
206
+ | 'spatial-ready'
207
+ | 'lazy'
208
+ | 'querying'
209
+ | 'complete'
210
+ | 'error';
211
+
212
+ export interface NativeMetadataProperty {
213
+ name: string;
214
+ value: string | number | boolean | null;
215
+ type?: number;
216
+ }
217
+
218
+ export interface NativeMetadataPropertySet {
219
+ name: string;
220
+ globalId?: string;
221
+ properties: NativeMetadataProperty[];
222
+ }
223
+
224
+ export interface NativeMetadataQuantity {
225
+ name: string;
226
+ value: number;
227
+ type?: number;
228
+ }
229
+
230
+ export interface NativeMetadataQuantitySet {
231
+ name: string;
232
+ quantities: NativeMetadataQuantity[];
233
+ }
234
+
235
+ export interface NativeMetadataEntitySummary {
236
+ expressId: number;
237
+ type: string;
238
+ name: string;
239
+ globalId?: string | null;
240
+ kind: 'spatial' | 'element';
241
+ hasChildren: boolean;
242
+ elementCount?: number;
243
+ elevation?: number | null;
244
+ }
245
+
246
+ export interface NativeMetadataSpatialNode extends NativeMetadataEntitySummary {
247
+ children: NativeMetadataSpatialNode[];
248
+ elements: NativeMetadataEntitySummary[];
249
+ }
250
+
251
+ export interface NativeMetadataSpatialInfo {
252
+ storeyId?: number | null;
253
+ storeyName?: string | null;
254
+ elevation?: number | null;
255
+ height?: number | null;
256
+ }
257
+
258
+ export interface NativeMetadataEntityDetails {
259
+ summary: NativeMetadataEntitySummary;
260
+ typeSummary?: NativeMetadataEntitySummary | null;
261
+ spatial?: NativeMetadataSpatialInfo | null;
262
+ properties: NativeMetadataPropertySet[];
263
+ quantities: NativeMetadataQuantitySet[];
264
+ }
265
+
266
+ export interface NativeMetadataSnapshot {
267
+ mode: 'desktop-lazy';
268
+ cacheKey: string;
269
+ filePath: string;
270
+ schemaVersion: SchemaVersion;
271
+ entityCount: number;
272
+ spatialTree: NativeMetadataSpatialNode | null;
273
+ }
274
+
195
275
  /** Complete model container for federation */
196
276
  export interface FederatedModel {
197
277
  /** Unique identifier (UUID generated on load) */
@@ -199,9 +279,9 @@ export interface FederatedModel {
199
279
  /** Display name (filename by default, user can rename) */
200
280
  name: string;
201
281
  /** Parsed IFC data model */
202
- ifcDataStore: IfcDataStore;
282
+ ifcDataStore: IfcDataStore | null;
203
283
  /** Pre-tessellated geometry (with globalIds, not original expressIds) */
204
- geometryResult: GeometryResult;
284
+ geometryResult: GeometryResult | null;
205
285
  /** Model-level visibility toggle */
206
286
  visible: boolean;
207
287
  /** UI collapse state in hierarchy panel */
@@ -220,6 +300,20 @@ export interface FederatedModel {
220
300
  idOffset: number;
221
301
  /** Maximum original expressId in this model (for range validation) */
222
302
  maxExpressId: number;
303
+ /** Unified ingest lifecycle state. */
304
+ loadState?: 'pending' | 'streaming-geometry' | 'hydrating-metadata' | 'complete' | 'error';
305
+ /** Geometry-first readiness for large desktop loads. */
306
+ geometryLoadState?: GeometryLoadState;
307
+ /** Metadata availability state for lazy desktop loads. */
308
+ metadataLoadState?: MetadataLoadState;
309
+ /** True once the model is visibly interactive in the viewport. */
310
+ interactiveReady?: boolean;
311
+ /** Optional sparse desktop metadata snapshot for huge native loads. */
312
+ nativeMetadata?: NativeMetadataSnapshot | null;
313
+ /** Cache state for the current load session. */
314
+ cacheState?: 'none' | 'hit' | 'miss' | 'writing';
315
+ /** Optional load error for this model. */
316
+ loadError?: string | null;
223
317
  }
224
318
 
225
319
  /** Convert EntityRef to string for use as Map/Set key */
package/src/store.ts CHANGED
@@ -20,7 +20,7 @@
20
20
  */
21
21
 
22
22
  // Re-export everything from the modular store
23
- export { useViewerStore } from './store/index.js';
23
+ export { getViewerStoreApi, useViewerStore } from './store/index.js';
24
24
  export type { ViewerState } from './store/index.js';
25
25
 
26
26
  // Re-export types for backward compatibility
@@ -0,0 +1,358 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+
5
+ import {
6
+ IfcTypeEnum,
7
+ IfcTypeEnumToString,
8
+ PropertyTableBuilder,
9
+ PropertyValueType,
10
+ QuantityTableBuilder,
11
+ type PropertyTable,
12
+ type QuantityTable,
13
+ type SpatialHierarchy,
14
+ type SpatialNode,
15
+ } from '@ifc-lite/data';
16
+ import {
17
+ BinaryCacheReader,
18
+ BinaryCacheWriter,
19
+ SchemaVersion as CacheSchemaVersion,
20
+ type IfcDataStore as CacheDataStore,
21
+ } from '@ifc-lite/cache';
22
+ import { extractPropertiesOnDemand, extractQuantitiesOnDemand, type IfcDataStore } from '@ifc-lite/parser';
23
+ import { rebuildOnDemandMaps } from './spatialHierarchy.js';
24
+
25
+ interface SerializedSpatialNode {
26
+ expressId: number;
27
+ type: number;
28
+ name: string;
29
+ elevation?: number;
30
+ children: SerializedSpatialNode[];
31
+ elements: number[];
32
+ }
33
+
34
+ interface SerializedSpatialHierarchy {
35
+ project: SerializedSpatialNode;
36
+ byStorey: Array<[number, number[]]>;
37
+ byBuilding: Array<[number, number[]]>;
38
+ bySite: Array<[number, number[]]>;
39
+ bySpace: Array<[number, number[]]>;
40
+ storeyElevations: Array<[number, number]>;
41
+ storeyHeights: Array<[number, number]>;
42
+ elementToStorey: Array<[number, number]>;
43
+ }
44
+
45
+ interface SerializedDesktopMetadataSnapshot {
46
+ version: number;
47
+ schemaVersion: IfcDataStore['schemaVersion'];
48
+ fileSize: number;
49
+ entityCount: number;
50
+ parseTime: number;
51
+ spatialHierarchy: SerializedSpatialHierarchy | null;
52
+ propertySetIds: number[];
53
+ quantitySetIds: number[];
54
+ }
55
+
56
+ interface DecodedDesktopMetadataSnapshot {
57
+ cacheBuffer: ArrayBuffer;
58
+ metadata: SerializedDesktopMetadataSnapshot;
59
+ }
60
+
61
+ const SNAPSHOT_VERSION = 2;
62
+
63
+ function toCacheSchemaVersion(schemaVersion: IfcDataStore['schemaVersion']): CacheSchemaVersion {
64
+ switch (schemaVersion) {
65
+ case 'IFC4':
66
+ return CacheSchemaVersion.IFC4;
67
+ case 'IFC4X3':
68
+ return CacheSchemaVersion.IFC4X3;
69
+ default:
70
+ return CacheSchemaVersion.IFC2X3;
71
+ }
72
+ }
73
+
74
+ function serializeSpatialNode(node: SpatialNode): SerializedSpatialNode {
75
+ return {
76
+ expressId: node.expressId,
77
+ type: node.type,
78
+ name: node.name,
79
+ elevation: node.elevation,
80
+ children: node.children.map(serializeSpatialNode),
81
+ elements: [...node.elements],
82
+ };
83
+ }
84
+
85
+ function deserializeSpatialNode(node: SerializedSpatialNode): SpatialNode {
86
+ return {
87
+ expressId: node.expressId,
88
+ type: node.type as IfcTypeEnum,
89
+ name: node.name,
90
+ elevation: node.elevation,
91
+ children: node.children.map(deserializeSpatialNode),
92
+ elements: [...node.elements],
93
+ };
94
+ }
95
+
96
+ function serializeSpatialHierarchy(spatialHierarchy: SpatialHierarchy | undefined): SerializedSpatialHierarchy | null {
97
+ if (!spatialHierarchy) return null;
98
+ return {
99
+ project: serializeSpatialNode(spatialHierarchy.project),
100
+ byStorey: [...spatialHierarchy.byStorey.entries()].map(([id, elements]) => [id, [...elements]]),
101
+ byBuilding: [...spatialHierarchy.byBuilding.entries()].map(([id, elements]) => [id, [...elements]]),
102
+ bySite: [...spatialHierarchy.bySite.entries()].map(([id, elements]) => [id, [...elements]]),
103
+ bySpace: [...spatialHierarchy.bySpace.entries()].map(([id, elements]) => [id, [...elements]]),
104
+ storeyElevations: [...spatialHierarchy.storeyElevations.entries()],
105
+ storeyHeights: [...spatialHierarchy.storeyHeights.entries()],
106
+ elementToStorey: [...spatialHierarchy.elementToStorey.entries()],
107
+ };
108
+ }
109
+
110
+ function deserializeSpatialHierarchy(
111
+ serialized: SerializedSpatialHierarchy | null | undefined,
112
+ ): SpatialHierarchy | undefined {
113
+ if (!serialized) return undefined;
114
+
115
+ const project = deserializeSpatialNode(serialized.project);
116
+ const byStorey = new Map<number, number[]>(serialized.byStorey.map(([id, elements]) => [id, [...elements]]));
117
+ const byBuilding = new Map<number, number[]>(serialized.byBuilding.map(([id, elements]) => [id, [...elements]]));
118
+ const bySite = new Map<number, number[]>(serialized.bySite.map(([id, elements]) => [id, [...elements]]));
119
+ const bySpace = new Map<number, number[]>(serialized.bySpace.map(([id, elements]) => [id, [...elements]]));
120
+ const storeyElevations = new Map<number, number>(serialized.storeyElevations);
121
+ const storeyHeights = new Map<number, number>(serialized.storeyHeights);
122
+ const elementToStorey = new Map<number, number>(serialized.elementToStorey);
123
+ const elementToSpace = new Map<number, number>();
124
+
125
+ for (const [spaceId, elementIds] of bySpace) {
126
+ for (const elementId of elementIds) {
127
+ elementToSpace.set(elementId, spaceId);
128
+ }
129
+ }
130
+
131
+ return {
132
+ project,
133
+ byStorey,
134
+ byBuilding,
135
+ bySite,
136
+ bySpace,
137
+ storeyElevations,
138
+ storeyHeights,
139
+ elementToStorey,
140
+ getStoreyElements(storeyId: number): number[] {
141
+ return byStorey.get(storeyId) ?? [];
142
+ },
143
+ getStoreyByElevation(z: number): number | null {
144
+ let bestStoreyId: number | null = null;
145
+ let bestDistance = Number.POSITIVE_INFINITY;
146
+ for (const [storeyId, elevation] of storeyElevations) {
147
+ const distance = Math.abs(elevation - z);
148
+ if (distance < bestDistance) {
149
+ bestDistance = distance;
150
+ bestStoreyId = storeyId;
151
+ }
152
+ }
153
+ return bestStoreyId;
154
+ },
155
+ getContainingSpace(elementId: number): number | null {
156
+ return elementToSpace.get(elementId) ?? null;
157
+ },
158
+ getPath(elementId: number): SpatialNode[] {
159
+ const path: SpatialNode[] = [];
160
+ const walk = (node: SpatialNode): boolean => {
161
+ path.push(node);
162
+ if (node.elements.includes(elementId)) {
163
+ return true;
164
+ }
165
+ for (const child of node.children) {
166
+ if (walk(child)) {
167
+ return true;
168
+ }
169
+ }
170
+ path.pop();
171
+ return false;
172
+ };
173
+ walk(project);
174
+ return path;
175
+ },
176
+ };
177
+ }
178
+
179
+ function encodeSnapshotEnvelope(cacheBuffer: ArrayBuffer, metadata: SerializedDesktopMetadataSnapshot): ArrayBuffer {
180
+ const metadataBytes = new TextEncoder().encode(JSON.stringify(metadata));
181
+ const cacheBytes = new Uint8Array(cacheBuffer);
182
+ const out = new Uint8Array(4 + metadataBytes.length + cacheBytes.length);
183
+ const view = new DataView(out.buffer);
184
+ view.setUint32(0, metadataBytes.length, true);
185
+ out.set(metadataBytes, 4);
186
+ out.set(cacheBytes, 4 + metadataBytes.length);
187
+ return out.buffer;
188
+ }
189
+
190
+ function collectSnapshotIndexIds(dataStore: IfcDataStore): { propertySetIds: number[]; quantitySetIds: number[] } {
191
+ return {
192
+ propertySetIds: [
193
+ ...(dataStore.entityIndex.byType.get('IFCPROPERTYSET') ?? dataStore.entityIndex.byType.get('IfcPropertySet') ?? []),
194
+ ],
195
+ quantitySetIds: [
196
+ ...(dataStore.entityIndex.byType.get('IFCELEMENTQUANTITY') ?? dataStore.entityIndex.byType.get('IfcElementQuantity') ?? []),
197
+ ],
198
+ };
199
+ }
200
+
201
+ function buildEntityIndexByType(
202
+ dataStore: Pick<IfcDataStore, 'entities'>,
203
+ propertySetIds: number[],
204
+ quantitySetIds: number[],
205
+ ): Map<string, number[]> {
206
+ const byType = new Map<string, number[]>();
207
+ for (let i = 0; i < dataStore.entities.count; i++) {
208
+ const typeName = IfcTypeEnumToString(dataStore.entities.typeEnum[i]).toUpperCase();
209
+ const expressId = dataStore.entities.expressId[i];
210
+ let ids = byType.get(typeName);
211
+ if (!ids) {
212
+ ids = [];
213
+ byType.set(typeName, ids);
214
+ }
215
+ ids.push(expressId);
216
+ }
217
+ if (propertySetIds.length > 0) {
218
+ byType.set('IFCPROPERTYSET', [...propertySetIds]);
219
+ }
220
+ if (quantitySetIds.length > 0) {
221
+ byType.set('IFCELEMENTQUANTITY', [...quantitySetIds]);
222
+ }
223
+ return byType;
224
+ }
225
+
226
+ function decodeSnapshotEnvelope(buffer: ArrayBuffer): DecodedDesktopMetadataSnapshot {
227
+ const bytes = new Uint8Array(buffer);
228
+ const view = new DataView(buffer);
229
+ const metadataLength = view.getUint32(0, true);
230
+ const metadataBytes = bytes.subarray(4, 4 + metadataLength);
231
+ const cacheBytes = bytes.subarray(4 + metadataLength);
232
+ const metadata = JSON.parse(new TextDecoder().decode(metadataBytes)) as SerializedDesktopMetadataSnapshot;
233
+ return {
234
+ cacheBuffer: cacheBytes.slice().buffer,
235
+ metadata,
236
+ };
237
+ }
238
+
239
+ function materializeSnapshotPropertyTable(dataStore: IfcDataStore): PropertyTable {
240
+ if (dataStore.properties.count > 0 || !dataStore.source?.length || !dataStore.onDemandPropertyMap?.size) {
241
+ return dataStore.properties;
242
+ }
243
+
244
+ const builder = new PropertyTableBuilder(dataStore.strings);
245
+ for (const entityId of dataStore.onDemandPropertyMap.keys()) {
246
+ const propertySets = extractPropertiesOnDemand(dataStore, entityId);
247
+ for (const propertySet of propertySets) {
248
+ for (const property of propertySet.properties) {
249
+ builder.add({
250
+ entityId,
251
+ psetName: propertySet.name,
252
+ psetGlobalId: propertySet.globalId ?? '',
253
+ propName: property.name,
254
+ propType: property.type as PropertyValueType,
255
+ value: property.value,
256
+ });
257
+ }
258
+ }
259
+ }
260
+ return builder.build();
261
+ }
262
+
263
+ function materializeSnapshotQuantityTable(dataStore: IfcDataStore): QuantityTable {
264
+ if (dataStore.quantities.count > 0 || !dataStore.source?.length || !dataStore.onDemandQuantityMap?.size) {
265
+ return dataStore.quantities;
266
+ }
267
+
268
+ const builder = new QuantityTableBuilder(dataStore.strings);
269
+ for (const entityId of dataStore.onDemandQuantityMap.keys()) {
270
+ const quantitySets = extractQuantitiesOnDemand(dataStore, entityId);
271
+ for (const quantitySet of quantitySets) {
272
+ for (const quantity of quantitySet.quantities) {
273
+ builder.add({
274
+ entityId,
275
+ qsetName: quantitySet.name,
276
+ quantityName: quantity.name,
277
+ quantityType: quantity.type,
278
+ value: quantity.value,
279
+ });
280
+ }
281
+ }
282
+ }
283
+ return builder.build();
284
+ }
285
+
286
+ export async function buildDesktopMetadataSnapshot(
287
+ dataStore: IfcDataStore,
288
+ sourceBuffer: ArrayBuffer,
289
+ ): Promise<ArrayBuffer> {
290
+ const writer = new BinaryCacheWriter();
291
+ const properties = materializeSnapshotPropertyTable(dataStore);
292
+ const quantities = materializeSnapshotQuantityTable(dataStore);
293
+ const cacheDataStore: CacheDataStore = {
294
+ schema: toCacheSchemaVersion(dataStore.schemaVersion),
295
+ entityCount: dataStore.entityCount || dataStore.entities?.count || 0,
296
+ strings: dataStore.strings,
297
+ entities: dataStore.entities,
298
+ properties,
299
+ quantities,
300
+ relationships: dataStore.relationships,
301
+ spatialHierarchy: dataStore.spatialHierarchy,
302
+ };
303
+
304
+ const cacheBuffer = await writer.write(cacheDataStore, undefined, sourceBuffer, {
305
+ includeGeometry: false,
306
+ includeSpatialHierarchy: false,
307
+ });
308
+ const { propertySetIds, quantitySetIds } = collectSnapshotIndexIds(dataStore);
309
+
310
+ return encodeSnapshotEnvelope(cacheBuffer, {
311
+ version: SNAPSHOT_VERSION,
312
+ schemaVersion: dataStore.schemaVersion,
313
+ fileSize: dataStore.fileSize,
314
+ entityCount: dataStore.entityCount,
315
+ parseTime: dataStore.parseTime,
316
+ spatialHierarchy: serializeSpatialHierarchy(dataStore.spatialHierarchy),
317
+ propertySetIds,
318
+ quantitySetIds,
319
+ });
320
+ }
321
+
322
+ export async function restoreDesktopMetadataSnapshot(
323
+ snapshotBuffer: ArrayBuffer,
324
+ ): Promise<IfcDataStore> {
325
+ const { cacheBuffer, metadata } = decodeSnapshotEnvelope(snapshotBuffer);
326
+ if (metadata.version !== SNAPSHOT_VERSION) {
327
+ throw new Error(`unsupported-desktop-metadata-snapshot:${metadata.version}`);
328
+ }
329
+ const reader = new BinaryCacheReader();
330
+ const result = await reader.read(cacheBuffer, { skipGeometry: true });
331
+ const dataStore = result.dataStore as unknown as IfcDataStore;
332
+ const byType = buildEntityIndexByType(
333
+ dataStore,
334
+ metadata.propertySetIds ?? [],
335
+ metadata.quantitySetIds ?? [],
336
+ );
337
+
338
+ dataStore.fileSize = metadata.fileSize;
339
+ dataStore.schemaVersion = metadata.schemaVersion;
340
+ dataStore.entityCount = metadata.entityCount;
341
+ dataStore.parseTime = metadata.parseTime;
342
+ dataStore.source = new Uint8Array(0);
343
+ dataStore.entityIndex = {
344
+ byId: new Map() as IfcDataStore['entityIndex']['byId'],
345
+ byType,
346
+ };
347
+ dataStore.spatialHierarchy = deserializeSpatialHierarchy(metadata.spatialHierarchy);
348
+
349
+ const { onDemandPropertyMap, onDemandQuantityMap } = rebuildOnDemandMaps(
350
+ dataStore.entities,
351
+ dataStore.relationships,
352
+ dataStore.entityIndex,
353
+ );
354
+ dataStore.onDemandPropertyMap = onDemandPropertyMap;
355
+ dataStore.onDemandQuantityMap = onDemandQuantityMap;
356
+
357
+ return dataStore;
358
+ }
@@ -46,6 +46,9 @@ export const CACHE_SIZE_THRESHOLD = 10 * 1024 * 1024;
46
46
  * and including it would make the IndexedDB write prohibitively large. */
47
47
  export const CACHE_MAX_SOURCE_SIZE = 150 * 1024 * 1024;
48
48
 
49
+ /** Route desktop IFCs above this threshold through the bounded-memory path. */
50
+ export const HUGE_NATIVE_FILE_THRESHOLD = 128 * 1024 * 1024;
51
+
49
52
  /** File size thresholds for various optimizations */
50
53
  export const THRESHOLDS = {
51
54
  /** Use streaming Parquet above this (150MB) */
@@ -65,7 +68,9 @@ export const THRESHOLDS = {
65
68
  // ============================================================================
66
69
 
67
70
  /** Detect if running in Tauri (desktop) environment */
68
- export const isTauri = typeof window !== 'undefined' && '__TAURI_INTERNALS__' in window;
71
+ export function isTauri(): boolean {
72
+ return typeof window !== 'undefined' && '__TAURI_INTERNALS__' in window;
73
+ }
69
74
 
70
75
  // ============================================================================
71
76
  // Dynamic Batch Configuration