@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.
Files changed (530) hide show
  1. package/.turbo/turbo-build.log +39 -30
  2. package/.turbo/turbo-typecheck.log +1 -1
  3. package/CHANGELOG.md +132 -0
  4. package/DESKTOP_CONTRACT_VERSION +1 -0
  5. package/dist/assets/arrow-CZ5kQ26f.js +20 -0
  6. package/dist/assets/basketViewActivator-86rgogji.js +1 -0
  7. package/dist/assets/{bcf-D5-QWGO9.js → bcf-DOG9_WPX.js} +1 -1
  8. package/dist/assets/{browser-CKs-FY1P.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-DoxKMqbO.js +257 -0
  12. package/dist/assets/{exporters-C_6J153K.js → exporters-CcPS9MK5.js} +2898 -2380
  13. package/dist/assets/geometry.worker-BFUYA08u.js +1 -0
  14. package/dist/assets/ids-DQ5jY0E8.js +1 -0
  15. package/dist/assets/ifc-lite_bg-BINvzoCP.wasm +0 -0
  16. package/dist/assets/{index-jhBr1wbn.js → index-Bfms9I4A.js} +41036 -34613
  17. package/dist/assets/index-_bfZsDCC.css +1 -0
  18. package/dist/assets/{maplibre-gl-BpvwNKKy.js → maplibre-gl-CGLcoNXc.js} +1 -1
  19. package/dist/assets/native-bridge-DUyLCMZS.js +429 -0
  20. package/dist/assets/{sandbox-B79eavQ3.js → sandbox-C8575tul.js} +4342 -4324
  21. package/dist/assets/{server-client-D3bUPJJc.js → server-client-BuZK7OST.js} +4 -4
  22. package/dist/assets/tauri-core-stub-D8Fa-u43.js +1 -0
  23. package/dist/assets/tauri-dialog-stub-r7Wksg7o.js +1 -0
  24. package/dist/assets/tauri-fs-stub-BdeRC7aK.js +1 -0
  25. package/dist/assets/wasm-bridge-JsqEGDV8.js +1 -0
  26. package/dist/assets/{zip-B-jFFAGa.js → zip-DBEtpeu6.js} +3 -3
  27. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json +1 -0
  28. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json +1 -0
  29. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json +1 -0
  30. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json +1 -0
  31. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json +1 -0
  32. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json +1 -0
  33. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json +1 -0
  34. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json +1 -0
  35. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json +1 -0
  36. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json +1 -0
  37. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json +1 -0
  38. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json +1 -0
  39. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json +1 -0
  40. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json +1 -0
  41. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json +1 -0
  42. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json +1 -0
  43. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json +1 -0
  44. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json +1 -0
  45. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json +1 -0
  46. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json +1 -0
  47. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json +1 -0
  48. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json +1 -0
  49. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json +1 -0
  50. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json +1 -0
  51. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json +1 -0
  52. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json +1 -0
  53. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json +1 -0
  54. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json +1 -0
  55. package/dist/cesium/Assets/Images/bing_maps_credit.png +0 -0
  56. package/dist/cesium/Assets/Images/cesium_credit.png +0 -0
  57. package/dist/cesium/Assets/Images/google_earth_credit.png +0 -0
  58. package/dist/cesium/Assets/Images/ion-credit.png +0 -0
  59. package/dist/cesium/Assets/Textures/LensFlare/DirtMask.jpg +0 -0
  60. package/dist/cesium/Assets/Textures/LensFlare/StarBurst.jpg +0 -0
  61. package/dist/cesium/Assets/Textures/NaturalEarthII/0/0/0.jpg +0 -0
  62. package/dist/cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg +0 -0
  63. package/dist/cesium/Assets/Textures/NaturalEarthII/1/0/0.jpg +0 -0
  64. package/dist/cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg +0 -0
  65. package/dist/cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg +0 -0
  66. package/dist/cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg +0 -0
  67. package/dist/cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg +0 -0
  68. package/dist/cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg +0 -0
  69. package/dist/cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg +0 -0
  70. package/dist/cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg +0 -0
  71. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg +0 -0
  72. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg +0 -0
  73. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/2.jpg +0 -0
  74. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/3.jpg +0 -0
  75. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/0.jpg +0 -0
  76. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/1.jpg +0 -0
  77. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/2.jpg +0 -0
  78. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg +0 -0
  79. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg +0 -0
  80. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg +0 -0
  81. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/2.jpg +0 -0
  82. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg +0 -0
  83. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg +0 -0
  84. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/1.jpg +0 -0
  85. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg +0 -0
  86. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/3.jpg +0 -0
  87. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg +0 -0
  88. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg +0 -0
  89. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg +0 -0
  90. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/3.jpg +0 -0
  91. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/0.jpg +0 -0
  92. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg +0 -0
  93. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/2.jpg +0 -0
  94. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg +0 -0
  95. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg +0 -0
  96. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg +0 -0
  97. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg +0 -0
  98. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg +0 -0
  99. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg +0 -0
  100. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg +0 -0
  101. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/2.jpg +0 -0
  102. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg +0 -0
  103. package/dist/cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml +14 -0
  104. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
  105. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
  106. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
  107. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
  108. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
  109. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
  110. package/dist/cesium/Assets/Textures/maki/airfield.png +0 -0
  111. package/dist/cesium/Assets/Textures/maki/airport.png +0 -0
  112. package/dist/cesium/Assets/Textures/maki/alcohol-shop.png +0 -0
  113. package/dist/cesium/Assets/Textures/maki/america-football.png +0 -0
  114. package/dist/cesium/Assets/Textures/maki/art-gallery.png +0 -0
  115. package/dist/cesium/Assets/Textures/maki/bakery.png +0 -0
  116. package/dist/cesium/Assets/Textures/maki/bank.png +0 -0
  117. package/dist/cesium/Assets/Textures/maki/bar.png +0 -0
  118. package/dist/cesium/Assets/Textures/maki/baseball.png +0 -0
  119. package/dist/cesium/Assets/Textures/maki/basketball.png +0 -0
  120. package/dist/cesium/Assets/Textures/maki/beer.png +0 -0
  121. package/dist/cesium/Assets/Textures/maki/bicycle.png +0 -0
  122. package/dist/cesium/Assets/Textures/maki/building.png +0 -0
  123. package/dist/cesium/Assets/Textures/maki/bus.png +0 -0
  124. package/dist/cesium/Assets/Textures/maki/cafe.png +0 -0
  125. package/dist/cesium/Assets/Textures/maki/camera.png +0 -0
  126. package/dist/cesium/Assets/Textures/maki/campsite.png +0 -0
  127. package/dist/cesium/Assets/Textures/maki/car.png +0 -0
  128. package/dist/cesium/Assets/Textures/maki/cemetery.png +0 -0
  129. package/dist/cesium/Assets/Textures/maki/cesium.png +0 -0
  130. package/dist/cesium/Assets/Textures/maki/chemist.png +0 -0
  131. package/dist/cesium/Assets/Textures/maki/cinema.png +0 -0
  132. package/dist/cesium/Assets/Textures/maki/circle-stroked.png +0 -0
  133. package/dist/cesium/Assets/Textures/maki/circle.png +0 -0
  134. package/dist/cesium/Assets/Textures/maki/city.png +0 -0
  135. package/dist/cesium/Assets/Textures/maki/clothing-store.png +0 -0
  136. package/dist/cesium/Assets/Textures/maki/college.png +0 -0
  137. package/dist/cesium/Assets/Textures/maki/commercial.png +0 -0
  138. package/dist/cesium/Assets/Textures/maki/cricket.png +0 -0
  139. package/dist/cesium/Assets/Textures/maki/cross.png +0 -0
  140. package/dist/cesium/Assets/Textures/maki/dam.png +0 -0
  141. package/dist/cesium/Assets/Textures/maki/danger.png +0 -0
  142. package/dist/cesium/Assets/Textures/maki/disability.png +0 -0
  143. package/dist/cesium/Assets/Textures/maki/dog-park.png +0 -0
  144. package/dist/cesium/Assets/Textures/maki/embassy.png +0 -0
  145. package/dist/cesium/Assets/Textures/maki/emergency-telephone.png +0 -0
  146. package/dist/cesium/Assets/Textures/maki/entrance.png +0 -0
  147. package/dist/cesium/Assets/Textures/maki/farm.png +0 -0
  148. package/dist/cesium/Assets/Textures/maki/fast-food.png +0 -0
  149. package/dist/cesium/Assets/Textures/maki/ferry.png +0 -0
  150. package/dist/cesium/Assets/Textures/maki/fire-station.png +0 -0
  151. package/dist/cesium/Assets/Textures/maki/fuel.png +0 -0
  152. package/dist/cesium/Assets/Textures/maki/garden.png +0 -0
  153. package/dist/cesium/Assets/Textures/maki/gift.png +0 -0
  154. package/dist/cesium/Assets/Textures/maki/golf.png +0 -0
  155. package/dist/cesium/Assets/Textures/maki/grocery.png +0 -0
  156. package/dist/cesium/Assets/Textures/maki/hairdresser.png +0 -0
  157. package/dist/cesium/Assets/Textures/maki/harbor.png +0 -0
  158. package/dist/cesium/Assets/Textures/maki/heart.png +0 -0
  159. package/dist/cesium/Assets/Textures/maki/heliport.png +0 -0
  160. package/dist/cesium/Assets/Textures/maki/hospital.png +0 -0
  161. package/dist/cesium/Assets/Textures/maki/ice-cream.png +0 -0
  162. package/dist/cesium/Assets/Textures/maki/industrial.png +0 -0
  163. package/dist/cesium/Assets/Textures/maki/land-use.png +0 -0
  164. package/dist/cesium/Assets/Textures/maki/laundry.png +0 -0
  165. package/dist/cesium/Assets/Textures/maki/library.png +0 -0
  166. package/dist/cesium/Assets/Textures/maki/lighthouse.png +0 -0
  167. package/dist/cesium/Assets/Textures/maki/lodging.png +0 -0
  168. package/dist/cesium/Assets/Textures/maki/logging.png +0 -0
  169. package/dist/cesium/Assets/Textures/maki/london-underground.png +0 -0
  170. package/dist/cesium/Assets/Textures/maki/marker-stroked.png +0 -0
  171. package/dist/cesium/Assets/Textures/maki/marker.png +0 -0
  172. package/dist/cesium/Assets/Textures/maki/minefield.png +0 -0
  173. package/dist/cesium/Assets/Textures/maki/mobilephone.png +0 -0
  174. package/dist/cesium/Assets/Textures/maki/monument.png +0 -0
  175. package/dist/cesium/Assets/Textures/maki/museum.png +0 -0
  176. package/dist/cesium/Assets/Textures/maki/music.png +0 -0
  177. package/dist/cesium/Assets/Textures/maki/oil-well.png +0 -0
  178. package/dist/cesium/Assets/Textures/maki/park.png +0 -0
  179. package/dist/cesium/Assets/Textures/maki/park2.png +0 -0
  180. package/dist/cesium/Assets/Textures/maki/parking-garage.png +0 -0
  181. package/dist/cesium/Assets/Textures/maki/parking.png +0 -0
  182. package/dist/cesium/Assets/Textures/maki/pharmacy.png +0 -0
  183. package/dist/cesium/Assets/Textures/maki/pitch.png +0 -0
  184. package/dist/cesium/Assets/Textures/maki/place-of-worship.png +0 -0
  185. package/dist/cesium/Assets/Textures/maki/playground.png +0 -0
  186. package/dist/cesium/Assets/Textures/maki/police.png +0 -0
  187. package/dist/cesium/Assets/Textures/maki/polling-place.png +0 -0
  188. package/dist/cesium/Assets/Textures/maki/post.png +0 -0
  189. package/dist/cesium/Assets/Textures/maki/prison.png +0 -0
  190. package/dist/cesium/Assets/Textures/maki/rail-above.png +0 -0
  191. package/dist/cesium/Assets/Textures/maki/rail-light.png +0 -0
  192. package/dist/cesium/Assets/Textures/maki/rail-metro.png +0 -0
  193. package/dist/cesium/Assets/Textures/maki/rail-underground.png +0 -0
  194. package/dist/cesium/Assets/Textures/maki/rail.png +0 -0
  195. package/dist/cesium/Assets/Textures/maki/religious-christian.png +0 -0
  196. package/dist/cesium/Assets/Textures/maki/religious-jewish.png +0 -0
  197. package/dist/cesium/Assets/Textures/maki/religious-muslim.png +0 -0
  198. package/dist/cesium/Assets/Textures/maki/restaurant.png +0 -0
  199. package/dist/cesium/Assets/Textures/maki/roadblock.png +0 -0
  200. package/dist/cesium/Assets/Textures/maki/rocket.png +0 -0
  201. package/dist/cesium/Assets/Textures/maki/school.png +0 -0
  202. package/dist/cesium/Assets/Textures/maki/scooter.png +0 -0
  203. package/dist/cesium/Assets/Textures/maki/shop.png +0 -0
  204. package/dist/cesium/Assets/Textures/maki/skiing.png +0 -0
  205. package/dist/cesium/Assets/Textures/maki/slaughterhouse.png +0 -0
  206. package/dist/cesium/Assets/Textures/maki/soccer.png +0 -0
  207. package/dist/cesium/Assets/Textures/maki/square-stroked.png +0 -0
  208. package/dist/cesium/Assets/Textures/maki/square.png +0 -0
  209. package/dist/cesium/Assets/Textures/maki/star-stroked.png +0 -0
  210. package/dist/cesium/Assets/Textures/maki/star.png +0 -0
  211. package/dist/cesium/Assets/Textures/maki/suitcase.png +0 -0
  212. package/dist/cesium/Assets/Textures/maki/swimming.png +0 -0
  213. package/dist/cesium/Assets/Textures/maki/telephone.png +0 -0
  214. package/dist/cesium/Assets/Textures/maki/tennis.png +0 -0
  215. package/dist/cesium/Assets/Textures/maki/theatre.png +0 -0
  216. package/dist/cesium/Assets/Textures/maki/toilets.png +0 -0
  217. package/dist/cesium/Assets/Textures/maki/town-hall.png +0 -0
  218. package/dist/cesium/Assets/Textures/maki/town.png +0 -0
  219. package/dist/cesium/Assets/Textures/maki/triangle-stroked.png +0 -0
  220. package/dist/cesium/Assets/Textures/maki/triangle.png +0 -0
  221. package/dist/cesium/Assets/Textures/maki/village.png +0 -0
  222. package/dist/cesium/Assets/Textures/maki/warehouse.png +0 -0
  223. package/dist/cesium/Assets/Textures/maki/waste-basket.png +0 -0
  224. package/dist/cesium/Assets/Textures/maki/water.png +0 -0
  225. package/dist/cesium/Assets/Textures/maki/wetland.png +0 -0
  226. package/dist/cesium/Assets/Textures/maki/zoo.png +0 -0
  227. package/dist/cesium/Assets/Textures/moonSmall.jpg +0 -0
  228. package/dist/cesium/Assets/Textures/pin.svg +1 -0
  229. package/dist/cesium/Assets/Textures/waterNormals.jpg +0 -0
  230. package/dist/cesium/Assets/Textures/waterNormalsSmall.jpg +0 -0
  231. package/dist/cesium/Assets/approximateTerrainHeights.json +1 -0
  232. package/dist/cesium/ThirdParty/Workers/package.json +1 -0
  233. package/dist/cesium/ThirdParty/Workers/zip-web-worker.js +1 -0
  234. package/dist/cesium/ThirdParty/basis_transcoder.wasm +0 -0
  235. package/dist/cesium/ThirdParty/draco_decoder.wasm +0 -0
  236. package/dist/cesium/ThirdParty/google-earth-dbroot-parser.js +1 -0
  237. package/dist/cesium/ThirdParty/wasm_splats_bg.wasm +0 -0
  238. package/dist/cesium/ThirdParty/zip-module.wasm +0 -0
  239. package/dist/cesium/Widgets/Animation/Animation.css +127 -0
  240. package/dist/cesium/Widgets/Animation/lighter.css +70 -0
  241. package/dist/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css +108 -0
  242. package/dist/cesium/Widgets/BaseLayerPicker/lighter.css +22 -0
  243. package/dist/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css +102 -0
  244. package/dist/cesium/Widgets/CesiumInspector/CesiumInspector.css +113 -0
  245. package/dist/cesium/Widgets/CesiumWidget/CesiumWidget.css +119 -0
  246. package/dist/cesium/Widgets/CesiumWidget/lighter.css +14 -0
  247. package/dist/cesium/Widgets/FullscreenButton/FullscreenButton.css +8 -0
  248. package/dist/cesium/Widgets/Geocoder/Geocoder.css +70 -0
  249. package/dist/cesium/Widgets/Geocoder/lighter.css +17 -0
  250. package/dist/cesium/Widgets/I3SBuildingSceneLayerExplorer/I3SBuildingSceneLayerExplorer.css +27 -0
  251. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png +0 -0
  252. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png +0 -0
  253. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png +0 -0
  254. package/dist/cesium/Widgets/Images/ImageryProviders/azureAerial.png +0 -0
  255. package/dist/cesium/Widgets/Images/ImageryProviders/azureRoads.png +0 -0
  256. package/dist/cesium/Widgets/Images/ImageryProviders/bingAerial.png +0 -0
  257. package/dist/cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png +0 -0
  258. package/dist/cesium/Widgets/Images/ImageryProviders/bingRoads.png +0 -0
  259. package/dist/cesium/Widgets/Images/ImageryProviders/blueMarble.png +0 -0
  260. package/dist/cesium/Widgets/Images/ImageryProviders/earthAtNight.png +0 -0
  261. package/dist/cesium/Widgets/Images/ImageryProviders/googleContour.png +0 -0
  262. package/dist/cesium/Widgets/Images/ImageryProviders/googleRoadmap.png +0 -0
  263. package/dist/cesium/Widgets/Images/ImageryProviders/googleSatellite.png +0 -0
  264. package/dist/cesium/Widgets/Images/ImageryProviders/googleSatelliteLabels.png +0 -0
  265. package/dist/cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png +0 -0
  266. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png +0 -0
  267. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxStreets.png +0 -0
  268. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxTerrain.png +0 -0
  269. package/dist/cesium/Widgets/Images/ImageryProviders/naturalEarthII.png +0 -0
  270. package/dist/cesium/Widgets/Images/ImageryProviders/openStreetMap.png +0 -0
  271. package/dist/cesium/Widgets/Images/ImageryProviders/sentinel-2.png +0 -0
  272. package/dist/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png +0 -0
  273. package/dist/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png +0 -0
  274. package/dist/cesium/Widgets/Images/ImageryProviders/stamenToner.png +0 -0
  275. package/dist/cesium/Widgets/Images/ImageryProviders/stamenWatercolor.png +0 -0
  276. package/dist/cesium/Widgets/Images/NavigationHelp/Mouse.svg +84 -0
  277. package/dist/cesium/Widgets/Images/NavigationHelp/MouseLeft.svg +76 -0
  278. package/dist/cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg +76 -0
  279. package/dist/cesium/Widgets/Images/NavigationHelp/MouseRight.svg +76 -0
  280. package/dist/cesium/Widgets/Images/NavigationHelp/Touch.svg +120 -0
  281. package/dist/cesium/Widgets/Images/NavigationHelp/TouchDrag.svg +129 -0
  282. package/dist/cesium/Widgets/Images/NavigationHelp/TouchRotate.svg +76 -0
  283. package/dist/cesium/Widgets/Images/NavigationHelp/TouchTilt.svg +135 -0
  284. package/dist/cesium/Widgets/Images/NavigationHelp/TouchZoom.svg +74 -0
  285. package/dist/cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png +0 -0
  286. package/dist/cesium/Widgets/Images/TerrainProviders/Ellipsoid.png +0 -0
  287. package/dist/cesium/Widgets/Images/TimelineIcons.png +0 -0
  288. package/dist/cesium/Widgets/Images/info-loading.gif +0 -0
  289. package/dist/cesium/Widgets/InfoBox/InfoBox.css +92 -0
  290. package/dist/cesium/Widgets/InfoBox/InfoBoxDescription.css +178 -0
  291. package/dist/cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css +93 -0
  292. package/dist/cesium/Widgets/NavigationHelpButton/lighter.css +38 -0
  293. package/dist/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css +15 -0
  294. package/dist/cesium/Widgets/ProjectionPicker/ProjectionPicker.css +38 -0
  295. package/dist/cesium/Widgets/SceneModePicker/SceneModePicker.css +56 -0
  296. package/dist/cesium/Widgets/SelectionIndicator/SelectionIndicator.css +20 -0
  297. package/dist/cesium/Widgets/Timeline/Timeline.css +103 -0
  298. package/dist/cesium/Widgets/Timeline/lighter.css +23 -0
  299. package/dist/cesium/Widgets/VRButton/VRButton.css +8 -0
  300. package/dist/cesium/Widgets/Viewer/Viewer.css +107 -0
  301. package/dist/cesium/Widgets/VoxelInspector/VoxelInspector.css +16 -0
  302. package/dist/cesium/Widgets/lighter.css +237 -0
  303. package/dist/cesium/Widgets/lighterShared.css +46 -0
  304. package/dist/cesium/Widgets/shared.css +103 -0
  305. package/dist/cesium/Widgets/widgets.css +1342 -0
  306. package/dist/cesium/Workers/chunk-23ZQ2IVV.js +29 -0
  307. package/dist/cesium/Workers/chunk-2EQO3Q56.js +26 -0
  308. package/dist/cesium/Workers/chunk-2MJIIVP4.js +26 -0
  309. package/dist/cesium/Workers/chunk-2TE5NTVD.js +26 -0
  310. package/dist/cesium/Workers/chunk-2ZBHLJST.js +26 -0
  311. package/dist/cesium/Workers/chunk-5TJMAQVL.js +26 -0
  312. package/dist/cesium/Workers/chunk-6BD4U3VO.js +26 -0
  313. package/dist/cesium/Workers/chunk-7TVGLKQF.js +26 -0
  314. package/dist/cesium/Workers/chunk-BTSYJ5XU.js +26 -0
  315. package/dist/cesium/Workers/chunk-BXMEEOCS.js +63 -0
  316. package/dist/cesium/Workers/chunk-BYLCY7GP.js +29 -0
  317. package/dist/cesium/Workers/chunk-CTHM3W6I.js +26 -0
  318. package/dist/cesium/Workers/chunk-CUUSNIVQ.js +26 -0
  319. package/dist/cesium/Workers/chunk-E3JOOS3S.js +26 -0
  320. package/dist/cesium/Workers/chunk-E7KYDCM5.js +26 -0
  321. package/dist/cesium/Workers/chunk-EDVBB7SS.js +27 -0
  322. package/dist/cesium/Workers/chunk-EFBN7QNX.js +26 -0
  323. package/dist/cesium/Workers/chunk-EQ4YRVWL.js +26 -0
  324. package/dist/cesium/Workers/chunk-F6PRE7D6.js +26 -0
  325. package/dist/cesium/Workers/chunk-FC4ZZ65J.js +26 -0
  326. package/dist/cesium/Workers/chunk-FFBVWF2L.js +26 -0
  327. package/dist/cesium/Workers/chunk-GBAA6GVX.js +26 -0
  328. package/dist/cesium/Workers/chunk-ICALLYLG.js +26 -0
  329. package/dist/cesium/Workers/chunk-ILRYTWTP.js +26 -0
  330. package/dist/cesium/Workers/chunk-IRNLBSEJ.js +26 -0
  331. package/dist/cesium/Workers/chunk-IX4VMHEV.js +26 -0
  332. package/dist/cesium/Workers/chunk-L6QHHACZ.js +26 -0
  333. package/dist/cesium/Workers/chunk-LI2ZSORM.js +26 -0
  334. package/dist/cesium/Workers/chunk-LSLE2RL4.js +26 -0
  335. package/dist/cesium/Workers/chunk-M4HLDBCG.js +26 -0
  336. package/dist/cesium/Workers/chunk-MJHHSGEH.js +26 -0
  337. package/dist/cesium/Workers/chunk-NMVKML6W.js +26 -0
  338. package/dist/cesium/Workers/chunk-OCWJRAXS.js +26 -0
  339. package/dist/cesium/Workers/chunk-OIRKANTH.js +26 -0
  340. package/dist/cesium/Workers/chunk-OIT7J4IC.js +26 -0
  341. package/dist/cesium/Workers/chunk-OLZ3FYUM.js +26 -0
  342. package/dist/cesium/Workers/chunk-Q5BPHJQF.js +26 -0
  343. package/dist/cesium/Workers/chunk-QFM5DCMQ.js +26 -0
  344. package/dist/cesium/Workers/chunk-QKUIYMGC.js +28 -0
  345. package/dist/cesium/Workers/chunk-S44JILQT.js +26 -0
  346. package/dist/cesium/Workers/chunk-SLT4J352.js +26 -0
  347. package/dist/cesium/Workers/chunk-SQMIIXB7.js +26 -0
  348. package/dist/cesium/Workers/chunk-TJ4XLGBQ.js +26 -0
  349. package/dist/cesium/Workers/chunk-TNSUQXWK.js +27 -0
  350. package/dist/cesium/Workers/chunk-UBOGZS7F.js +26 -0
  351. package/dist/cesium/Workers/chunk-V3OSTMM6.js +26 -0
  352. package/dist/cesium/Workers/chunk-V7QEYVP3.js +26 -0
  353. package/dist/cesium/Workers/chunk-VUKYSU4H.js +26 -0
  354. package/dist/cesium/Workers/chunk-W37FE5GR.js +26 -0
  355. package/dist/cesium/Workers/chunk-WBOV35NL.js +26 -0
  356. package/dist/cesium/Workers/chunk-WPMZLB3Y.js +26 -0
  357. package/dist/cesium/Workers/chunk-WWWZVEEH.js +26 -0
  358. package/dist/cesium/Workers/chunk-XFIQ5DEQ.js +28 -0
  359. package/dist/cesium/Workers/chunk-XQHLGIO7.js +26 -0
  360. package/dist/cesium/Workers/chunk-XUSCFAVF.js +26 -0
  361. package/dist/cesium/Workers/chunk-YP7I5QBZ.js +26 -0
  362. package/dist/cesium/Workers/chunk-Z3QF2EHT.js +26 -0
  363. package/dist/cesium/Workers/combineGeometry.js +26 -0
  364. package/dist/cesium/Workers/createBoxGeometry.js +26 -0
  365. package/dist/cesium/Workers/createBoxOutlineGeometry.js +26 -0
  366. package/dist/cesium/Workers/createCircleGeometry.js +26 -0
  367. package/dist/cesium/Workers/createCircleOutlineGeometry.js +26 -0
  368. package/dist/cesium/Workers/createCoplanarPolygonGeometry.js +26 -0
  369. package/dist/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +26 -0
  370. package/dist/cesium/Workers/createCorridorGeometry.js +26 -0
  371. package/dist/cesium/Workers/createCorridorOutlineGeometry.js +26 -0
  372. package/dist/cesium/Workers/createCylinderGeometry.js +26 -0
  373. package/dist/cesium/Workers/createCylinderOutlineGeometry.js +26 -0
  374. package/dist/cesium/Workers/createEllipseGeometry.js +26 -0
  375. package/dist/cesium/Workers/createEllipseOutlineGeometry.js +26 -0
  376. package/dist/cesium/Workers/createEllipsoidGeometry.js +26 -0
  377. package/dist/cesium/Workers/createEllipsoidOutlineGeometry.js +26 -0
  378. package/dist/cesium/Workers/createFrustumGeometry.js +26 -0
  379. package/dist/cesium/Workers/createFrustumOutlineGeometry.js +26 -0
  380. package/dist/cesium/Workers/createGeometry.js +26 -0
  381. package/dist/cesium/Workers/createGroundPolylineGeometry.js +26 -0
  382. package/dist/cesium/Workers/createPlaneGeometry.js +26 -0
  383. package/dist/cesium/Workers/createPlaneOutlineGeometry.js +26 -0
  384. package/dist/cesium/Workers/createPolygonGeometry.js +26 -0
  385. package/dist/cesium/Workers/createPolygonOutlineGeometry.js +26 -0
  386. package/dist/cesium/Workers/createPolylineGeometry.js +26 -0
  387. package/dist/cesium/Workers/createPolylineVolumeGeometry.js +26 -0
  388. package/dist/cesium/Workers/createPolylineVolumeOutlineGeometry.js +26 -0
  389. package/dist/cesium/Workers/createRectangleGeometry.js +26 -0
  390. package/dist/cesium/Workers/createRectangleOutlineGeometry.js +26 -0
  391. package/dist/cesium/Workers/createSimplePolylineGeometry.js +26 -0
  392. package/dist/cesium/Workers/createSphereGeometry.js +26 -0
  393. package/dist/cesium/Workers/createSphereOutlineGeometry.js +26 -0
  394. package/dist/cesium/Workers/createTaskProcessorWorker.js +26 -0
  395. package/dist/cesium/Workers/createVectorTileClampedPolylines.js +26 -0
  396. package/dist/cesium/Workers/createVectorTileGeometries.js +26 -0
  397. package/dist/cesium/Workers/createVectorTilePoints.js +26 -0
  398. package/dist/cesium/Workers/createVectorTilePolygons.js +26 -0
  399. package/dist/cesium/Workers/createVectorTilePolylines.js +26 -0
  400. package/dist/cesium/Workers/createVerticesFromCesium3DTilesTerrain.js +26 -0
  401. package/dist/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +26 -0
  402. package/dist/cesium/Workers/createVerticesFromHeightmap.js +26 -0
  403. package/dist/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +26 -0
  404. package/dist/cesium/Workers/createWallGeometry.js +26 -0
  405. package/dist/cesium/Workers/createWallOutlineGeometry.js +26 -0
  406. package/dist/cesium/Workers/decodeDraco.js +26 -0
  407. package/dist/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +26 -0
  408. package/dist/cesium/Workers/decodeI3S.js +26 -0
  409. package/dist/cesium/Workers/gaussianSplatSorter.js +26 -0
  410. package/dist/cesium/Workers/gaussianSplatTextureGenerator.js +26 -0
  411. package/dist/cesium/Workers/incrementallyBuildTerrainPicker.js +26 -0
  412. package/dist/cesium/Workers/transcodeKTX2.js +56 -0
  413. package/dist/cesium/Workers/transferTypedArrayTest.js +26 -0
  414. package/dist/cesium/Workers/upsampleQuantizedTerrainMesh.js +26 -0
  415. package/dist/cesium/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +26 -0
  416. package/dist/index.html +13 -10
  417. package/index.html +1 -0
  418. package/package.json +18 -15
  419. package/src/App.tsx +7 -9
  420. package/src/components/viewer/BCFPanel.tsx +46 -4
  421. package/src/components/viewer/CesiumOverlay.tsx +715 -0
  422. package/src/components/viewer/CesiumSettingsDialog.tsx +100 -0
  423. package/src/components/viewer/ChatPanel.tsx +232 -90
  424. package/src/components/viewer/CommandPalette.tsx +6 -1
  425. package/src/components/viewer/DesktopEntitlementBanner.tsx +74 -0
  426. package/src/components/viewer/ExportChangesButton.tsx +6 -1
  427. package/src/components/viewer/ExportDialog.tsx +22 -6
  428. package/src/components/viewer/HierarchyPanel.tsx +196 -0
  429. package/src/components/viewer/IDSPanel.tsx +52 -3
  430. package/src/components/viewer/KeyboardShortcutsDialog.tsx +1 -1
  431. package/src/components/viewer/MainToolbar.tsx +355 -28
  432. package/src/components/viewer/PropertiesPanel.tsx +234 -81
  433. package/src/components/viewer/ScriptPanel.tsx +34 -8
  434. package/src/components/viewer/SettingsPage.tsx +581 -0
  435. package/src/components/viewer/StatusBar.tsx +17 -1
  436. package/src/components/viewer/ThemeSwitch.tsx +63 -7
  437. package/src/components/viewer/ViewerLayout.tsx +48 -6
  438. package/src/components/viewer/Viewport.tsx +61 -8
  439. package/src/components/viewer/ViewportContainer.tsx +265 -28
  440. package/src/components/viewer/ViewportOverlays.tsx +132 -27
  441. package/src/components/viewer/bcf/BCFTopicDetail.tsx +4 -4
  442. package/src/components/viewer/chat/ModelSelector.tsx +90 -54
  443. package/src/components/viewer/properties/GeoreferencingPanel.tsx +229 -55
  444. package/src/components/viewer/properties/LocationMap.tsx +462 -19
  445. package/src/components/viewer/properties/ModelMetadataPanel.tsx +1 -1
  446. package/src/components/viewer/selectionHandlers.ts +4 -3
  447. package/src/components/viewer/tools/SectionCapControls.tsx +237 -0
  448. package/src/components/viewer/tools/SectionPanel.tsx +39 -18
  449. package/src/components/viewer/useAnimationLoop.ts +13 -1
  450. package/src/components/viewer/useGeometryStreaming.ts +127 -40
  451. package/src/components/viewer/useMouseControls.ts +4 -1
  452. package/src/components/viewer/useRenderUpdates.ts +1 -1
  453. package/src/hooks/ids/idsDataAccessor.ts +60 -24
  454. package/src/hooks/ingest/viewerModelIngest.ts +280 -0
  455. package/src/hooks/useIDS.ts +1 -1
  456. package/src/hooks/useIfc.ts +7 -1
  457. package/src/hooks/useIfcCache.ts +28 -15
  458. package/src/hooks/useIfcFederation.ts +378 -291
  459. package/src/hooks/useIfcLoader.ts +1657 -130
  460. package/src/hooks/useIfcServer.ts +0 -69
  461. package/src/hooks/useViewControls.ts +13 -5
  462. package/src/index.css +484 -10
  463. package/src/lib/desktop/desktopEntitlementEvents.ts +39 -0
  464. package/src/lib/desktop-entitlement.ts +43 -0
  465. package/src/lib/desktop-product.ts +124 -0
  466. package/src/lib/geo/cesium-bridge.ts +318 -0
  467. package/src/lib/geo/effective-georef.test.ts +73 -0
  468. package/src/lib/geo/effective-georef.ts +111 -0
  469. package/src/lib/geo/reproject.ts +249 -37
  470. package/src/lib/llm/byok-guard.test.ts +77 -0
  471. package/src/lib/llm/byok-guard.ts +39 -0
  472. package/src/lib/llm/free-models.test.ts +0 -6
  473. package/src/lib/llm/models.ts +104 -42
  474. package/src/lib/llm/stream-client.ts +74 -110
  475. package/src/lib/llm/stream-direct.test.ts +130 -0
  476. package/src/lib/llm/stream-direct.ts +316 -0
  477. package/src/lib/llm/types.ts +14 -2
  478. package/src/lib/recent-files.ts +2 -1
  479. package/src/main.tsx +1 -10
  480. package/src/services/analysis-extensions.ts +125 -0
  481. package/src/services/api-keys.ts +73 -0
  482. package/src/services/app-navigation.ts +13 -0
  483. package/src/services/bsdd.ts +53 -4
  484. package/src/services/cacheService.ts +1 -1
  485. package/src/services/desktop-cache.ts +43 -0
  486. package/src/services/desktop-export.ts +77 -0
  487. package/src/services/desktop-harness.ts +196 -0
  488. package/src/services/desktop-logger.ts +20 -0
  489. package/src/services/desktop-native-metadata.ts +207 -0
  490. package/src/services/desktop-panel-actions.ts +43 -0
  491. package/src/services/desktop-preferences.ts +44 -0
  492. package/src/services/file-dialog.ts +147 -0
  493. package/src/services/tauri-core-stub.ts +7 -0
  494. package/src/services/tauri-dialog-stub.ts +7 -0
  495. package/src/services/tauri-fs-stub.ts +7 -0
  496. package/src/store/constants.ts +20 -2
  497. package/src/store/index.ts +52 -7
  498. package/src/store/slices/cesiumSlice.ts +127 -0
  499. package/src/store/slices/chatSlice.test.ts +6 -76
  500. package/src/store/slices/chatSlice.ts +21 -58
  501. package/src/store/slices/dataSlice.ts +139 -28
  502. package/src/store/slices/desktopEntitlementSlice.ts +86 -0
  503. package/src/store/slices/loadingSlice.ts +14 -2
  504. package/src/store/slices/modelSlice.ts +58 -3
  505. package/src/store/slices/sectionSlice.test.ts +87 -7
  506. package/src/store/slices/sectionSlice.ts +151 -5
  507. package/src/store/slices/uiSlice.ts +28 -5
  508. package/src/store/types.ts +122 -2
  509. package/src/store.ts +1 -1
  510. package/src/utils/desktopModelSnapshot.ts +358 -0
  511. package/src/utils/ifcConfig.ts +6 -1
  512. package/src/utils/nativeSpatialDataStore.ts +253 -0
  513. package/src/utils/serverDataModel.ts +4 -0
  514. package/src/utils/spatialHierarchy.ts +10 -11
  515. package/src/utils/viewportUtils.ts +7 -2
  516. package/src/vite-env.d.ts +0 -4
  517. package/vite.config.ts +24 -0
  518. package/dist/assets/arrow-DJf2ErbF.js +0 -20
  519. package/dist/assets/basketViewActivator-aojwdomq.js +0 -1
  520. package/dist/assets/desktop-cache-oPzaWXYE.js +0 -1
  521. package/dist/assets/drawing-2d-gWfpdfYe.js +0 -257
  522. package/dist/assets/geometry.worker-Nz9_YIqh.js +0 -1
  523. package/dist/assets/ids-B4jTqB1O.js +0 -1
  524. package/dist/assets/ifc-lite_bg-eSkBTizQ.wasm +0 -0
  525. package/dist/assets/index-pbE7itQS.css +0 -1
  526. package/dist/assets/native-bridge-DSIyEYXG.js +0 -113
  527. package/dist/assets/wasm-bridge-B0J07fZZ.js +0 -1
  528. package/src/components/viewer/UpgradePage.tsx +0 -69
  529. package/src/lib/llm/ClerkChatSync.tsx +0 -74
  530. package/src/lib/llm/clerk-auth.ts +0 -62
@@ -1 +0,0 @@
1
- const x="http://www.w3.org/2001/XMLSchema";class M extends Error{constructor(e,a){super(e),this.details=a,this.name="IDSParseError"}}function Ie(t){const e=typeof t=="string"?t:new TextDecoder().decode(t),i=new DOMParser().parseFromString(e,"text/xml"),n=i.querySelector("parsererror");if(n)throw new M("Invalid XML format",n.textContent||void 0);const s=i.documentElement;if(s.localName!=="ids")throw new M(`Invalid root element: expected "ids", got "${s.localName}"`);return{info:F(s),specifications:_(s)}}function F(t){const e=o(t,"info");return e?{title:b(e,"title")||"Untitled IDS",copyright:b(e,"copyright"),version:b(e,"version"),author:b(e,"author"),date:b(e,"date"),purpose:b(e,"purpose"),milestone:b(e,"milestone"),description:b(e,"description")}:{title:"Untitled IDS"}}function _(t){const e=o(t,"specifications");return e?R(e,"specification").map((i,n)=>L(i,n)):[]}function L(t,e){const a=t.getAttribute("name")||`Specification ${e+1}`,n=(t.getAttribute("ifcVersion")||"IFC4").split(/\s+/).map(d=>D(d)).filter(d=>d!==null),s=o(t,"applicability"),r={facets:s?B(s):[]},u=(s?s.getAttribute("minOccurs"):null)??t.getAttribute("minOccurs"),p=(s?s.getAttribute("maxOccurs"):null)??t.getAttribute("maxOccurs");let c;if(u!==null){const d=parseInt(u,10);Number.isFinite(d)&&(c=d)}let m;if(p!==null){const d=parseInt(p,10);p==="unbounded"?m="unbounded":Number.isFinite(d)&&(m=d)}const h=o(t,"requirements"),v=h?z(h):[];return{id:t.getAttribute("identifier")||`spec-${e}`,name:a,description:t.getAttribute("description")||void 0,instructions:t.getAttribute("instructions")||void 0,identifier:t.getAttribute("identifier")||void 0,ifcVersions:n.length>0?n:["IFC4"],applicability:r,requirements:v,minOccurs:c,maxOccurs:m}}function D(t){const e=t.toUpperCase().replace(/[^A-Z0-9]/g,"");switch(e){case"IFC2X3":return"IFC2X3";case"IFC4":return"IFC4";case"IFC4X3":case"IFC4X3ADD2":return"IFC4X3";default:return e.startsWith("IFC4X3")?"IFC4X3":e.startsWith("IFC4")?"IFC4":e.startsWith("IFC2X3")?"IFC2X3":null}}function B(t){const e=[];for(const a of Array.from(t.children)){const i=C(a);i&&e.push(i)}return e}function C(t){switch(t.localName.toLowerCase()){case"entity":return V(t);case"attribute":return q(t);case"property":return H(t);case"classification":return k(t);case"material":return U(t);case"partof":return Y(t);default:return null}}function V(t){const e=o(t,"name"),a=o(t,"predefinedType");if(!e)throw new M("Entity facet must have a name element");return{type:"entity",name:f(e),predefinedType:a?f(a):void 0}}function q(t){const e=o(t,"name"),a=o(t,"value");if(!e)throw new M("Attribute facet must have a name element");return{type:"attribute",name:f(e),value:a?f(a):void 0}}function H(t){const e=o(t,"propertySet"),a=o(t,"baseName"),i=o(t,"dataType"),n=o(t,"value");if(!e)throw new M("Property facet must have a propertySet element");if(!a)throw new M("Property facet must have a baseName element");return{type:"property",propertySet:f(e),baseName:f(a),dataType:i?f(i):void 0,value:n?f(n):void 0}}function k(t){const e=o(t,"system"),a=o(t,"value");return{type:"classification",system:e?f(e):void 0,value:a?f(a):void 0}}function U(t){const e=o(t,"value");return{type:"material",value:e?f(e):void 0}}function Y(t){const e=t.getAttribute("relation")||"IfcRelContainedInSpatialStructure",a=o(t,"entity");return{type:"partOf",relation:G(e),entity:a?V(a):void 0}}function G(t){const e=t.toUpperCase();return e.includes("AGGREGATE")?"IfcRelAggregates":e.includes("CONTAINED")||e.includes("SPATIAL")?"IfcRelContainedInSpatialStructure":e.includes("NEST")?"IfcRelNests":e.includes("VOID")?"IfcRelVoidsElement":e.includes("FILL")?"IfcRelFillsElement":"IfcRelContainedInSpatialStructure"}function z(t){const e=[];let a=0;for(const i of Array.from(t.children)){const n=C(i);if(n){const s=i.getAttribute("minOccurs"),r=i.getAttribute("maxOccurs");let u="required";s==="0"&&r==="0"?u="prohibited":s==="0"&&(u="optional"),e.push({id:`req-${a++}`,facet:n,optionality:u,description:i.getAttribute("description")||void 0,instructions:i.getAttribute("instructions")||void 0})}}return e}function f(t){const e=o(t,"simpleValue");if(e)return{type:"simpleValue",value:e.textContent?.trim()||""};const a=T(t,"restriction",x)||o(t,"restriction");if(a)return j(a);const i=t.textContent?.trim();return i?{type:"simpleValue",value:i}:{type:"simpleValue",value:""}}function j(t){const e=T(t,"pattern",x)||o(t,"pattern");if(e)return{type:"pattern",pattern:e.getAttribute("value")||e.textContent||""};const a=W(t,"enumeration",x);if(a.length===0){const p=R(t,"enumeration");if(p.length>0)return{type:"enumeration",values:p.map(c=>c.getAttribute("value")||c.textContent||"")}}else return{type:"enumeration",values:a.map(p=>p.getAttribute("value")||p.textContent||"")};const i=T(t,"minInclusive",x)||o(t,"minInclusive"),n=T(t,"maxInclusive",x)||o(t,"maxInclusive"),s=T(t,"minExclusive",x)||o(t,"minExclusive"),r=T(t,"maxExclusive",x)||o(t,"maxExclusive");if(i||n||s||r){const p={type:"bounds"};if(i){const c=parseFloat(i.getAttribute("value")||i.textContent||"");isNaN(c)||(p.minInclusive=c)}if(n){const c=parseFloat(n.getAttribute("value")||n.textContent||"");isNaN(c)||(p.maxInclusive=c)}if(s){const c=parseFloat(s.getAttribute("value")||s.textContent||"");isNaN(c)||(p.minExclusive=c)}if(r){const c=parseFloat(r.getAttribute("value")||r.textContent||"");isNaN(c)||(p.maxExclusive=c)}return p}const u=t.getAttribute("base");return u?{type:"simpleValue",value:u}:{type:"simpleValue",value:t.textContent?.trim()||""}}function o(t,e){for(const a of Array.from(t.children))if(a.localName.toLowerCase()===e.toLowerCase())return a;return null}function R(t,e){const a=[];for(const i of Array.from(t.children))i.localName.toLowerCase()===e.toLowerCase()&&a.push(i);return a}function T(t,e,a){for(const i of Array.from(t.children))if(i.localName.toLowerCase()===e.toLowerCase()&&i.namespaceURI===a)return i;return null}function W(t,e,a){const i=[];for(const n of Array.from(t.children))n.localName.toLowerCase()===e.toLowerCase()&&n.namespaceURI===a&&i.push(n);return i}function b(t,e){return o(t,e)?.textContent?.trim()||void 0}const A=1e-6;function y(t,e){if(e==null)return!1;switch(t.type){case"simpleValue":return X(t,e);case"pattern":return K(t,e);case"enumeration":return Z(t,e);case"bounds":return Q(t,e);default:return!1}}function X(t,e){const a=t.value,i=String(e);if(i===a||i.toUpperCase()===a.toUpperCase())return!0;const n=parseFloat(a),s=typeof e=="number"?e:parseFloat(i);if(!isNaN(n)&&!isNaN(s))return Math.abs(n-s)<=A;if(typeof e=="boolean"){const p=a.toLowerCase();if(p==="true"||p==="1")return e===!0;if(p==="false"||p==="0")return e===!1}const r=i.toLowerCase(),u=a.toLowerCase();return(r==="true"||r==="false")&&(u==="true"||u==="false")?r===u:!1}function K(t,e){const a=String(e);try{const i=J(t.pattern);return new RegExp(`^${i}$`,"i").test(a)}catch{return!1}}function J(t){return t.replace(/\\i/g,"[A-Za-z_:]").replace(/\\c/g,"[A-Za-z0-9._:-]").replace(/\\p\{[^}]+\}/g,".").replace(/\[([^\]]+)-\[[^\]]+\]\]/g,"[$1]")}function Z(t,e){const a=String(e),i=a.toUpperCase();return t.values.some(n=>{if(n===a||n.toUpperCase()===i)return!0;const s=parseFloat(n),r=typeof e=="number"?e:parseFloat(a);return!isNaN(s)&&!isNaN(r)?Math.abs(s-r)<=A:!1})}function Q(t,e){const a=typeof e=="number"?e:parseFloat(String(e));return!(isNaN(a)||t.minInclusive!==void 0&&a<t.minInclusive-A||t.maxInclusive!==void 0&&a>t.maxInclusive+A||t.minExclusive!==void 0&&a<=t.minExclusive||t.maxExclusive!==void 0&&a>=t.maxExclusive)}function l(t){switch(t.type){case"simpleValue":return`"${t.value}"`;case"pattern":return`pattern "${t.pattern}"`;case"enumeration":return t.values.length===1?`"${t.values[0]}"`:`one of [${t.values.map(e=>`"${e}"`).join(", ")}]`;case"bounds":return ee(t);default:return"unknown"}}function ee(t){const e=[];return t.minInclusive!==void 0&&t.maxInclusive!==void 0?`between ${t.minInclusive} and ${t.maxInclusive}`:(t.minInclusive!==void 0&&e.push(`>= ${t.minInclusive}`),t.maxInclusive!==void 0&&e.push(`<= ${t.maxInclusive}`),t.minExclusive!==void 0&&e.push(`> ${t.minExclusive}`),t.maxExclusive!==void 0&&e.push(`< ${t.maxExclusive}`),e.join(" and ")||"any value")}function te(t,e,a){const i=a.getEntityType(e);if(!i)return{passed:!1,actualValue:void 0,expectedValue:l(t.name),failure:{type:"ENTITY_TYPE_MISMATCH",field:"entityType",actual:"unknown",expected:l(t.name)}};if(!y(t.name,i))return{passed:!1,actualValue:i,expectedValue:l(t.name),failure:{type:"ENTITY_TYPE_MISMATCH",field:"entityType",actual:i,expected:l(t.name)}};if(t.predefinedType){const n=a.getObjectType(e);if(!n)return{passed:!1,actualValue:i,expectedValue:`${l(t.name)} with predefinedType ${l(t.predefinedType)}`,failure:{type:"PREDEFINED_TYPE_MISSING",field:"predefinedType",expected:l(t.predefinedType)}};if(!y(t.predefinedType,n))return{passed:!1,actualValue:`${i}[${n}]`,expectedValue:`${l(t.name)} with predefinedType ${l(t.predefinedType)}`,failure:{type:"PREDEFINED_TYPE_MISMATCH",field:"predefinedType",actual:n,expected:l(t.predefinedType)}}}return{passed:!0,actualValue:t.predefinedType?`${i}[${a.getObjectType(e)||""}]`:i,expectedValue:l(t.name)}}function ie(t,e){const a=t.name;if(a.type==="simpleValue")return e.getEntitiesByType(a.value);if(a.type==="enumeration"){const i=[];for(const n of a.values)i.push(...e.getEntitiesByType(n));return i}}const ae=["Name","Description","ObjectType","Tag","GlobalId","LongName"];function ne(t,e,a){const i=t.name;let n;if(i.type==="simpleValue")n=i.value;else{const r=ae.filter(u=>y(i,u));if(r.length===0)return{passed:!1,failure:{type:"ATTRIBUTE_MISSING",field:l(i),expected:l(i)}};n=r[0]}const s=se(n,e,a);return s==null||s===""?{passed:!1,actualValue:void 0,expectedValue:t.value?l(t.value):`attribute "${n}" to exist`,failure:{type:"ATTRIBUTE_MISSING",field:n,expected:t.value?l(t.value):"any value"}}:t.value?y(t.value,s)?{passed:!0,actualValue:String(s),expectedValue:l(t.value)}:{passed:!1,actualValue:String(s),expectedValue:l(t.value),failure:{type:t.value.type==="pattern"?"ATTRIBUTE_PATTERN_MISMATCH":"ATTRIBUTE_VALUE_MISMATCH",field:n,actual:String(s),expected:l(t.value)}}:{passed:!0,actualValue:String(s),expectedValue:`attribute "${n}" to exist`}}function se(t,e,a){switch(t.toLowerCase()){case"name":return a.getEntityName(e);case"description":return a.getDescription(e);case"objecttype":return a.getObjectType(e);case"globalid":return a.getGlobalId(e);default:return a.getAttribute(e,t)}}function re(t,e,a){const i=a.getPropertySets(e);if(i.length===0)return{passed:!1,expectedValue:`property "${l(t.baseName)}" in "${l(t.propertySet)}"`,failure:{type:"PSET_MISSING",field:l(t.propertySet),expected:l(t.propertySet)}};const n=i.filter(u=>y(t.propertySet,u.name));if(n.length===0){const u=i.map(p=>p.name).join(", ");return{passed:!1,actualValue:u||"(none)",expectedValue:l(t.propertySet),failure:{type:"PSET_MISSING",field:"propertySet",actual:u,expected:l(t.propertySet),context:{availablePsets:u}}}}for(const u of n){const p=le(t,u);if(p.passed)return p}const s=n.map(u=>u.name).join(", "),r=n.flatMap(u=>u.properties.map(p=>`${u.name}.${p.name}`)).join(", ");return{passed:!1,actualValue:r||"(none)",expectedValue:`${l(t.propertySet)}.${l(t.baseName)}`,failure:{type:"PROPERTY_MISSING",field:l(t.baseName),expected:l(t.baseName),context:{propertySet:s,availableProperties:r}}}}function le(t,e){const a=e.properties.filter(i=>y(t.baseName,i.name));if(a.length===0)return{passed:!1,failure:{type:"PROPERTY_MISSING",field:l(t.baseName),expected:l(t.baseName),context:{propertySet:e.name,availableProperties:e.properties.map(i=>i.name).join(", ")}}};for(const i of a){if(t.dataType&&!y(t.dataType,i.dataType))return{passed:!1,actualValue:`${e.name}.${i.name} (${i.dataType})`,expectedValue:`dataType ${l(t.dataType)}`,failure:{type:"PROPERTY_DATATYPE_MISMATCH",field:`${e.name}.${i.name}`,actual:i.dataType,expected:l(t.dataType)}};if(t.value){const n=i.value;if(n==null)return{passed:!1,actualValue:"(empty)",expectedValue:l(t.value),failure:{type:"PROPERTY_VALUE_MISMATCH",field:`${e.name}.${i.name}`,actual:"(empty)",expected:l(t.value)}};if(!y(t.value,n)){const s=t.value.type==="bounds"?"PROPERTY_OUT_OF_BOUNDS":"PROPERTY_VALUE_MISMATCH";return{passed:!1,actualValue:String(n),expectedValue:l(t.value),failure:{type:s,field:`${e.name}.${i.name}`,actual:String(n),expected:l(t.value)}}}}return{passed:!0,actualValue:`${e.name}.${i.name} = ${i.value}`,expectedValue:t.value?l(t.value):"property exists"}}return{passed:!1,failure:{type:"PROPERTY_MISSING",field:l(t.baseName)}}}function ue(t,e,a){const i=a.getClassifications(e);if(!t.system&&!t.value)return i.length===0?{passed:!1,actualValue:"(none)",expectedValue:"any classification",failure:{type:"CLASSIFICATION_MISSING",expected:"any classification"}}:{passed:!0,actualValue:i.map(s=>`${s.system}:${s.value}`).join(", "),expectedValue:"any classification"};let n=i;if(t.system&&(n=i.filter(s=>y(t.system,s.system)),n.length===0)){const s=[...new Set(i.map(r=>r.system))].join(", ");return{passed:!1,actualValue:s||"(none)",expectedValue:l(t.system),failure:{type:"CLASSIFICATION_SYSTEM_MISMATCH",field:"system",actual:s,expected:l(t.system),context:{availableSystems:s}}}}if(t.value){const s=n.filter(r=>y(t.value,r.value));if(s.length===0){const r=n.map(u=>u.value).join(", ");return{passed:!1,actualValue:r||"(none)",expectedValue:l(t.value),failure:{type:"CLASSIFICATION_VALUE_MISMATCH",field:"value",actual:r,expected:l(t.value),context:{system:t.system?l(t.system):"any",availableValues:r}}}}return{passed:!0,actualValue:s.map(r=>`${r.system}:${r.value}`).join(", "),expectedValue:t.system?`${l(t.system)}:${l(t.value)}`:l(t.value)}}return{passed:!0,actualValue:n.map(s=>`${s.system}:${s.value}`).join(", "),expectedValue:l(t.system)}}function pe(t,e,a){const i=a.getMaterials(e);if(!t.value)return i.length===0?{passed:!1,actualValue:"(none)",expectedValue:"any material",failure:{type:"MATERIAL_MISSING",expected:"any material"}}:{passed:!0,actualValue:i.map(s=>s.name).join(", "),expectedValue:"any material"};const n=i.filter(s=>y(t.value,s.name)||s.category&&y(t.value,s.category));if(n.length===0){if(i.length===0)return{passed:!1,actualValue:"(none)",expectedValue:l(t.value),failure:{type:"MATERIAL_MISSING",expected:l(t.value)}};const s=i.map(r=>r.name).join(", ");return{passed:!1,actualValue:s,expectedValue:l(t.value),failure:{type:"MATERIAL_VALUE_MISMATCH",field:"material",actual:s,expected:l(t.value),context:{availableMaterials:s}}}}return{passed:!0,actualValue:n.map(s=>s.name).join(", "),expectedValue:l(t.value)}}const S={IfcRelAggregates:"aggregated in",IfcRelContainedInSpatialStructure:"contained in",IfcRelNests:"nested in",IfcRelVoidsElement:"voiding",IfcRelFillsElement:"filling"};function oe(t,e,a){const i=a.getParent(e,t.relation);if(!i){const r=S[t.relation]||t.relation,u=t.entity?l(t.entity.name):"any entity";return{passed:!1,actualValue:"(no parent)",expectedValue:`${r} ${u}`,failure:{type:"PARTOF_RELATION_MISSING",field:t.relation,expected:`${r} ${u}`,context:{relation:t.relation}}}}if(!t.entity){const r=S[t.relation]||t.relation;return{passed:!0,actualValue:`${r} ${i.entityType}`,expectedValue:`${r} any entity`}}if(!y(t.entity.name,i.entityType)){const r=S[t.relation]||t.relation;return{passed:!1,actualValue:`${r} ${i.entityType}`,expectedValue:`${r} ${l(t.entity.name)}`,failure:{type:"PARTOF_ENTITY_MISMATCH",field:"entity",actual:i.entityType,expected:l(t.entity.name),context:{relation:t.relation,parentId:String(i.expressId)}}}}if(t.entity.predefinedType){if(!i.predefinedType)return{passed:!1,actualValue:`${i.entityType} (no predefinedType)`,expectedValue:`${l(t.entity.name)} with predefinedType ${l(t.entity.predefinedType)}`,failure:{type:"PARTOF_ENTITY_MISMATCH",field:"predefinedType",expected:l(t.entity.predefinedType),context:{relation:t.relation,parentType:i.entityType}}};if(!y(t.entity.predefinedType,i.predefinedType))return{passed:!1,actualValue:`${i.entityType}[${i.predefinedType}]`,expectedValue:`${l(t.entity.name)}[${l(t.entity.predefinedType)}]`,failure:{type:"PARTOF_ENTITY_MISMATCH",field:"predefinedType",actual:i.predefinedType,expected:l(t.entity.predefinedType),context:{relation:t.relation,parentType:i.entityType}}}}const n=S[t.relation]||t.relation,s=i.predefinedType?`${i.entityType}[${i.predefinedType}]`:i.entityType;return{passed:!0,actualValue:`${n} ${s}`,expectedValue:`${n} ${l(t.entity.name)}`}}function w(t,e,a){switch(t.type){case"entity":return te(t,e,a);case"attribute":return ne(t,e,a);case"property":return re(t,e,a);case"classification":return ue(t,e,a);case"material":return pe(t,e,a);case"partOf":return oe(t,e,a);default:return{passed:!1,failure:{type:"ENTITY_TYPE_MISMATCH",expected:"known facet type",actual:t.type}}}}function ce(t,e){switch(t.type){case"entity":return ie(t,e);default:return}}async function Se(t,e,a,i={}){const{translator:n,onProgress:s,includePassingEntities:r=!0}=i,u=[],p=t.specifications.length;for(let m=0;m<p;m++){const h=t.specifications[m];s&&s({phase:"filtering",specificationIndex:m,totalSpecifications:p,entitiesProcessed:0,totalEntities:0,percentage:Math.floor(m/p*100)});const v=await de(h,e,a.modelId,i,d=>{s&&s({...d,specificationIndex:m,totalSpecifications:p,percentage:Math.floor((m+d.entitiesProcessed/Math.max(d.totalEntities,1))/p*100)})});u.push(v)}s&&s({phase:"complete",specificationIndex:p,totalSpecifications:p,entitiesProcessed:0,totalEntities:0,percentage:100});const c=ve(u);return{document:t,modelInfo:a,timestamp:new Date,summary:c,specificationResults:u}}async function de(t,e,a,i,n){const{translator:s,maxEntities:r,includePassingEntities:u=!0}=i,p=me(t,e),c=r?p.slice(0,r):p,m=[],h=c.length;for(let E=0;E<h;E++){const $=c[E];n&&E%100===0&&n({phase:"validating",entitiesProcessed:E,totalEntities:h});const P=ye(t,$,a,e,s);(u||!P.passed)&&m.push(P)}let v=0,d=0;for(const E of m)E.passed?v++:d++;u||(v=h-d);const I=he(t,p.length);let g="pass";p.length===0?I?.passed===!1?g="fail":I?.passed===!0?g="pass":g="not_applicable":(d>0||I?.passed===!1)&&(g="fail");const O=h>0?Math.floor(v/h*100):100;return{specification:t,status:g,applicableCount:p.length,passedCount:v,failedCount:d,passRate:O,entityResults:m,cardinalityResult:I}}function me(t,e){const a=t.applicability.facets;if(a.length===0)return e.getAllEntityIds();let i;for(const s of a){const r=ce(s,e);if(r!==void 0){i=r;break}}i===void 0&&(i=e.getAllEntityIds());const n=[];for(const s of i){let r=!0;for(const u of a)if(!w(u,s,e).passed){r=!1;break}r&&n.push(s)}return n}function ye(t,e,a,i,n){const s=[];let r=!0;for(const u of t.requirements){const p=fe(u,e,i,n);s.push(p),p.status==="fail"&&(r=!1)}return{expressId:e,modelId:a,entityType:i.getEntityType(e)||"Unknown",entityName:i.getEntityName(e),globalId:i.getGlobalId(e),passed:r,requirementResults:s}}function fe(t,e,a,i){const n=w(t.facet,e,a);let s,r;switch(t.optionality){case"required":s=n.passed?"pass":"fail",n.passed||(r=i?i.describeFailure({requirement:t,status:"fail",facetType:t.facet.type,checkedDescription:"",actualValue:n.actualValue,expectedValue:n.expectedValue,failure:n.failure}):be(n));break;case"optional":s="pass";break;case"prohibited":s=n.passed?"fail":"pass",s==="fail"&&(r=i?i.t("failures.prohibited",{field:n.actualValue||"value"}):`Prohibited: found ${n.actualValue}`);break;default:s=n.passed?"pass":"fail"}const u=i?i.describeRequirement(t):Ee(t);return{requirement:t,status:s,facetType:t.facet.type,checkedDescription:u,failureReason:r,actualValue:n.actualValue,expectedValue:n.expectedValue,failure:n.failure}}function he(t,e){if(t.minOccurs===void 0&&t.maxOccurs===void 0)return;const a=t.minOccurs??0,i=t.maxOccurs;let n=!0;const s=[];return e<a&&(n=!1,s.push(`Expected at least ${a}, found ${e}`)),i!=="unbounded"&&i!==void 0&&e>i&&(n=!1,s.push(`Expected at most ${i}, found ${e}`)),{passed:n,actualCount:e,minExpected:t.minOccurs,maxExpected:t.maxOccurs,message:s.length>0?s.join("; "):"Cardinality satisfied"}}function ve(t){let e=t.length,a=0,i=0,n=0,s=0,r=0;for(const p of t)p.status==="pass"?a++:p.status==="fail"&&i++,n+=p.applicableCount,s+=p.passedCount,r+=p.failedCount;const u=n>0?Math.floor(s/n*100):100;return{totalSpecifications:e,passedSpecifications:a,failedSpecifications:i,totalEntitiesChecked:n,totalEntitiesPassed:s,totalEntitiesFailed:r,overallPassRate:u}}function be(t){if(!t.failure)return`Expected ${t.expectedValue}, got ${t.actualValue}`;const{type:e,field:a,actual:i,expected:n}=t.failure;switch(e){case"ENTITY_TYPE_MISMATCH":return`Entity type "${i}" does not match expected ${n}`;case"PREDEFINED_TYPE_MISMATCH":return`Predefined type "${i}" does not match expected ${n}`;case"PREDEFINED_TYPE_MISSING":return`Predefined type is missing, expected ${n}`;case"ATTRIBUTE_MISSING":return`Attribute "${a}" is missing`;case"ATTRIBUTE_VALUE_MISMATCH":return`Attribute "${a}" value "${i}" does not match expected ${n}`;case"ATTRIBUTE_PATTERN_MISMATCH":return`Attribute "${a}" value "${i}" does not match pattern ${n}`;case"PSET_MISSING":return`Property set "${a||n}" not found`;case"PROPERTY_MISSING":return`Property "${a}" not found`;case"PROPERTY_VALUE_MISMATCH":return`Property "${a}" value "${i}" does not match expected ${n}`;case"PROPERTY_DATATYPE_MISMATCH":return`Property "${a}" type "${i}" does not match expected ${n}`;case"PROPERTY_OUT_OF_BOUNDS":return`Property "${a}" value ${i} is out of bounds ${n}`;case"CLASSIFICATION_MISSING":return"No classification found";case"CLASSIFICATION_SYSTEM_MISMATCH":return`Classification system "${i}" does not match expected ${n}`;case"CLASSIFICATION_VALUE_MISMATCH":return`Classification value "${i}" does not match expected ${n}`;case"MATERIAL_MISSING":return"No material assigned";case"MATERIAL_VALUE_MISMATCH":return`Material "${i}" does not match expected ${n}`;case"PARTOF_RELATION_MISSING":return`Not ${a} any entity`;case"PARTOF_ENTITY_MISMATCH":return`Parent entity "${i}" does not match expected ${n}`;default:return`Validation failed: ${e}`}}function Ee(t){const e=t.facet,a=t.optionality;let i;switch(e.type){case"entity":i=`Must be ${l(e.name)}`,e.predefinedType&&(i+=` with predefinedType ${l(e.predefinedType)}`);break;case"attribute":e.value?i=`Attribute "${l(e.name)}" must equal ${l(e.value)}`:i=`Attribute "${l(e.name)}" must exist`;break;case"property":e.value?i=`Property "${l(e.propertySet)}.${l(e.baseName)}" must equal ${l(e.value)}`:i=`Property "${l(e.propertySet)}.${l(e.baseName)}" must exist`;break;case"classification":e.system&&e.value?i=`Must have classification ${l(e.value)} in ${l(e.system)}`:e.system?i=`Must be classified in ${l(e.system)}`:e.value?i=`Must have classification ${l(e.value)}`:i="Must have a classification";break;case"material":e.value?i=`Must have material ${l(e.value)}`:i="Must have a material assigned";break;case"partOf":{const n=e.relation.replace("IfcRel","").toLowerCase();e.entity?i=`Must be ${n} ${l(e.entity.name)}`:i=`Must be ${n} some entity`;break}default:i="Unknown requirement"}return a==="prohibited"?i=i.replace("Must","Must NOT").replace("must","must NOT"):a==="optional"&&(i=i.replace("Must","Should").replace("must","should")),i}const xe={status:{pass:"PASS",fail:"FAIL",not_applicable:"NOT APPLICABLE"},optionality:{required:"Required",optional:"Optional",prohibited:"Prohibited"},cardinality:{satisfied:"Cardinality satisfied",atLeast:"Expected at least {min}, found {count}",atMost:"Expected at most {max}, found {count}",between:"Expected between {min} and {max}, found {count}",exactly:"Expected exactly {count}"},relations:{IfcRelAggregates:"part of",IfcRelContainedInSpatialStructure:"contained in",IfcRelNests:"nested in",IfcRelVoidsElement:"voiding",IfcRelFillsElement:"filling"},constraints:{simpleValue:'"{value}"',pattern:'matching pattern "{pattern}"',enumeration:{single:'"{value}"',multiple:"one of [{values}]"},bounds:{between:"between {min} and {max}",atLeast:"at least {min}",atMost:"at most {max}",greaterThan:"greater than {min}",lessThan:"less than {max}"}},applicability:{entity:{simple:"Elements of type {entityType}",withPredefined:"{entityType} elements with predefined type {predefinedType}",pattern:"Elements with type matching {pattern}"},attribute:{exists:'Elements where attribute "{name}" exists',equals:'Elements where "{name}" equals {value}',pattern:'Elements where "{name}" matches {pattern}'},property:{exists:'Elements with property "{property}" in "{pset}"',equals:'Elements where "{pset}.{property}" equals {value}',pattern:'Elements where "{pset}.{property}" matches {pattern}',bounded:'Elements where "{pset}.{property}" is {bounds}'},classification:{any:"Elements with any classification",system:'Elements classified in "{system}"',value:'Elements with classification "{value}"',systemAndValue:'Elements classified as "{value}" in "{system}"'},material:{any:"Elements with any material assigned",value:'Elements with material "{value}"',pattern:"Elements with material matching {pattern}"},partOf:{simple:"Elements that are {relation} another element",withEntity:"Elements that are {relation} a {entity}",withEntityAndType:"Elements that are {relation} a {entity} with type {predefinedType}"}},requirements:{entity:{mustBe:"Must be of type {entityType}",mustHavePredefined:"Must have predefined type {predefinedType}",mustBeWithPredefined:"Must be {entityType} with predefined type {predefinedType}"},attribute:{mustExist:'Attribute "{name}" must exist',mustEqual:'Attribute "{name}" must equal {value}',mustMatch:'Attribute "{name}" must match {pattern}',mustNotExist:'Attribute "{name}" must not exist',mustNotEqual:'Attribute "{name}" must not equal {value}'},property:{mustExist:'Property "{pset}.{property}" must exist',mustEqual:'Property "{pset}.{property}" must equal {value}',mustMatch:'Property "{pset}.{property}" must match {pattern}',mustBeBounded:'Property "{pset}.{property}" must be {bounds}',mustHaveType:'Property "{pset}.{property}" must be of type {dataType}',mustNotExist:'Property "{pset}.{property}" must not exist'},classification:{mustHave:"Must have a classification",mustBeInSystem:'Must be classified in "{system}"',mustHaveValue:'Must have classification "{value}"',mustBeInSystemWithValue:'Must be classified as "{value}" in "{system}"',mustNotHave:"Must not have any classification",mustNotBeInSystem:'Must not be classified in "{system}"'},material:{mustHave:"Must have a material assigned",mustBe:'Must have material "{value}"',mustMatch:"Must have material matching {pattern}",mustNotHave:"Must not have any material assigned"},partOf:{mustBe:"Must be {relation} a {entity}",mustBeSimple:"Must be {relation} another element",mustNotBe:"Must not be {relation} any element"}},failures:{entityTypeMismatch:'Entity type is "{actual}", expected {expected}',predefinedTypeMismatch:'Predefined type is "{actual}", expected {expected}',predefinedTypeMissing:"Predefined type is not set, expected {expected}",attributeMissing:'Attribute "{name}" does not exist',attributeEmpty:'Attribute "{name}" is empty',attributeValueMismatch:'Attribute "{name}" is "{actual}", expected {expected}',attributePatternMismatch:'Attribute "{name}" value "{actual}" does not match pattern {expected}',attributeProhibited:'Prohibited attribute "{name}" exists with value "{actual}"',psetMissing:'Property set "{pset}" not found',psetMissingAvailable:'Property set "{pset}" not found. Available: {available}',propertyMissing:'Property "{property}" not found in "{pset}"',propertyMissingAvailable:'Property "{property}" not found in "{pset}". Available: {available}',propertyEmpty:'Property "{pset}.{property}" has no value',propertyValueMismatch:'Property "{pset}.{property}" is "{actual}", expected {expected}',propertyPatternMismatch:'Property "{pset}.{property}" value "{actual}" does not match {expected}',propertyDatatypeMismatch:'Property "{pset}.{property}" data type is "{actual}", expected {expected}',propertyOutOfBounds:'Property "{pset}.{property}" value {actual} is out of range {expected}',propertyProhibited:'Prohibited property "{pset}.{property}" exists with value "{actual}"',classificationMissing:"No classification assigned",classificationSystemMismatch:'Classification system "{actual}" does not match expected "{expected}"',classificationSystemMissingAvailable:'Classification system "{expected}" not found. Available: {available}',classificationValueMismatch:'Classification code "{actual}" does not match expected {expected}',classificationValueMissingAvailable:"Classification code {expected} not found. Available: {available}",classificationProhibited:'Prohibited classification "{actual}" exists in system "{system}"',materialMissing:"No material assigned",materialValueMismatch:'Material "{actual}" does not match expected {expected}',materialValueMissingAvailable:"Material {expected} not found. Available: {available}",materialProhibited:'Prohibited material "{actual}" is assigned',partOfMissing:"Element is not {relation} any {entity}",partOfMissingSimple:"Element is not {relation} any element",partOfEntityMismatch:"Parent element is {actual}, expected {expected}",partOfPredefinedMismatch:'Parent predefined type is "{actual}", expected {expected}',partOfProhibited:"Element is {relation} {actual}, which is prohibited",prohibited:'Prohibited {field} found: "{actual}"',unknown:"Validation failed: {reason}"},summary:{title:"IDS Validation Report",specifications:"{passed}/{total} specifications passed",entities:"{passed}/{total} entities compliant ({percent}%)",overallPass:"Model meets all requirements",overallFail:"Model has {count} failing specifications",noApplicable:"No applicable entities found"},ui:{specification:"Specification",specifications:"Specifications",requirement:"Requirement",requirements:"Requirements",applicability:"Applies to",entity:"Entity",entities:"Entities",passed:"Passed",failed:"Failed",passRate:"Pass rate",actualValue:"Actual",expectedValue:"Expected",failureReason:"Reason",showAll:"Show all",showFailed:"Show failed only",isolateFailed:"Isolate failed",isolatePassed:"Isolate passed",exportJson:"Export JSON",exportBcf:"Export BCF",loadIds:"Load IDS file",runValidation:"Run validation",clearResults:"Clear results"}},Te={status:{pass:"BESTANDEN",fail:"FEHLGESCHLAGEN",not_applicable:"NICHT ANWENDBAR"},optionality:{required:"Erforderlich",optional:"Optional",prohibited:"Verboten"},cardinality:{satisfied:"Kardinalität erfüllt",atLeast:"Mindestens {min} erwartet, {count} gefunden",atMost:"Maximal {max} erwartet, {count} gefunden",between:"Zwischen {min} und {max} erwartet, {count} gefunden",exactly:"Genau {count} erwartet"},relations:{IfcRelAggregates:"Teil von",IfcRelContainedInSpatialStructure:"enthalten in",IfcRelNests:"verschachtelt in",IfcRelVoidsElement:"durchbrechend",IfcRelFillsElement:"ausfüllend"},constraints:{simpleValue:'"{value}"',pattern:'entsprechend Muster "{pattern}"',enumeration:{single:'"{value}"',multiple:"eines von [{values}]"},bounds:{between:"zwischen {min} und {max}",atLeast:"mindestens {min}",atMost:"höchstens {max}",greaterThan:"größer als {min}",lessThan:"kleiner als {max}"}},applicability:{entity:{simple:"Elemente vom Typ {entityType}",withPredefined:"{entityType}-Elemente mit vordefiniertem Typ {predefinedType}",pattern:"Elemente mit Typ entsprechend {pattern}"},attribute:{exists:'Elemente bei denen Attribut "{name}" existiert',equals:'Elemente bei denen "{name}" gleich {value} ist',pattern:'Elemente bei denen "{name}" dem Muster {pattern} entspricht'},property:{exists:'Elemente mit Eigenschaft "{property}" in "{pset}"',equals:'Elemente bei denen "{pset}.{property}" gleich {value} ist',pattern:'Elemente bei denen "{pset}.{property}" dem Muster {pattern} entspricht',bounded:'Elemente bei denen "{pset}.{property}" {bounds} ist'},classification:{any:"Elemente mit beliebiger Klassifizierung",system:'Elemente klassifiziert in "{system}"',value:'Elemente mit Klassifizierung "{value}"',systemAndValue:'Elemente klassifiziert als "{value}" in "{system}"'},material:{any:"Elemente mit zugewiesenem Material",value:'Elemente mit Material "{value}"',pattern:"Elemente mit Material entsprechend {pattern}"},partOf:{simple:"Elemente die {relation} einem anderen Element sind",withEntity:"Elemente die {relation} einem/einer {entity} sind",withEntityAndType:"Elemente die {relation} einem/einer {entity} mit Typ {predefinedType} sind"}},requirements:{entity:{mustBe:"Muss vom Typ {entityType} sein",mustHavePredefined:"Muss vordefinierten Typ {predefinedType} haben",mustBeWithPredefined:"Muss {entityType} mit vordefiniertem Typ {predefinedType} sein"},attribute:{mustExist:'Attribut "{name}" muss existieren',mustEqual:'Attribut "{name}" muss {value} entsprechen',mustMatch:'Attribut "{name}" muss dem Muster {pattern} entsprechen',mustNotExist:'Attribut "{name}" darf nicht existieren',mustNotEqual:'Attribut "{name}" darf nicht {value} sein'},property:{mustExist:'Eigenschaft "{pset}.{property}" muss existieren',mustEqual:'Eigenschaft "{pset}.{property}" muss {value} sein',mustMatch:'Eigenschaft "{pset}.{property}" muss dem Muster {pattern} entsprechen',mustBeBounded:'Eigenschaft "{pset}.{property}" muss {bounds} sein',mustHaveType:'Eigenschaft "{pset}.{property}" muss vom Datentyp {dataType} sein',mustNotExist:'Eigenschaft "{pset}.{property}" darf nicht existieren'},classification:{mustHave:"Muss eine Klassifizierung haben",mustBeInSystem:'Muss in "{system}" klassifiziert sein',mustHaveValue:'Muss Klassifizierung "{value}" haben',mustBeInSystemWithValue:'Muss als "{value}" in "{system}" klassifiziert sein',mustNotHave:"Darf keine Klassifizierung haben",mustNotBeInSystem:'Darf nicht in "{system}" klassifiziert sein'},material:{mustHave:"Muss ein Material zugewiesen haben",mustBe:'Muss Material "{value}" haben',mustMatch:"Muss Material entsprechend {pattern} haben",mustNotHave:"Darf kein Material zugewiesen haben"},partOf:{mustBe:"Muss {relation} einem/einer {entity} sein",mustBeSimple:"Muss {relation} einem anderen Element sein",mustNotBe:"Darf nicht {relation} einem Element sein"}},failures:{entityTypeMismatch:'Elementtyp ist "{actual}", erwartet {expected}',predefinedTypeMismatch:'Vordefinierter Typ ist "{actual}", erwartet {expected}',predefinedTypeMissing:"Vordefinierter Typ ist nicht gesetzt, erwartet {expected}",attributeMissing:'Attribut "{name}" existiert nicht',attributeEmpty:'Attribut "{name}" ist leer',attributeValueMismatch:'Attribut "{name}" ist "{actual}", erwartet {expected}',attributePatternMismatch:'Attribut "{name}" Wert "{actual}" entspricht nicht dem Muster {expected}',attributeProhibited:'Verbotenes Attribut "{name}" existiert mit Wert "{actual}"',psetMissing:'PropertySet "{pset}" nicht gefunden',psetMissingAvailable:'PropertySet "{pset}" nicht gefunden. Verfügbar: {available}',propertyMissing:'Eigenschaft "{property}" nicht in "{pset}" gefunden',propertyMissingAvailable:'Eigenschaft "{property}" nicht in "{pset}" gefunden. Verfügbar: {available}',propertyEmpty:'Eigenschaft "{pset}.{property}" hat keinen Wert',propertyValueMismatch:'Eigenschaft "{pset}.{property}" ist "{actual}", erwartet {expected}',propertyPatternMismatch:'Eigenschaft "{pset}.{property}" Wert "{actual}" entspricht nicht {expected}',propertyDatatypeMismatch:'Eigenschaft "{pset}.{property}" Datentyp ist "{actual}", erwartet {expected}',propertyOutOfBounds:'Eigenschaft "{pset}.{property}" Wert {actual} liegt außerhalb des Bereichs {expected}',propertyProhibited:'Verbotene Eigenschaft "{pset}.{property}" existiert mit Wert "{actual}"',classificationMissing:"Keine Klassifizierung zugewiesen",classificationSystemMismatch:'Klassifizierungssystem "{actual}" entspricht nicht dem erwarteten "{expected}"',classificationSystemMissingAvailable:'Klassifizierungssystem "{expected}" nicht gefunden. Verfügbar: {available}',classificationValueMismatch:'Klassifizierungscode "{actual}" entspricht nicht dem erwarteten {expected}',classificationValueMissingAvailable:"Klassifizierungscode {expected} nicht gefunden. Verfügbar: {available}",classificationProhibited:'Verbotene Klassifizierung "{actual}" existiert im System "{system}"',materialMissing:"Kein Material zugewiesen",materialValueMismatch:'Material "{actual}" entspricht nicht dem erwarteten {expected}',materialValueMissingAvailable:"Material {expected} nicht gefunden. Verfügbar: {available}",materialProhibited:'Verbotenes Material "{actual}" ist zugewiesen',partOfMissing:"Element ist nicht {relation} einem/einer {entity}",partOfMissingSimple:"Element ist nicht {relation} einem anderen Element",partOfEntityMismatch:"Übergeordnetes Element ist {actual}, erwartet {expected}",partOfPredefinedMismatch:'Vordefinierter Typ des übergeordneten Elements ist "{actual}", erwartet {expected}',partOfProhibited:"Element ist {relation} {actual}, was verboten ist",prohibited:'Verbotenes {field} gefunden: "{actual}"',unknown:"Validierung fehlgeschlagen: {reason}"},summary:{title:"IDS-Validierungsbericht",specifications:"{passed}/{total} Spezifikationen bestanden",entities:"{passed}/{total} Elemente konform ({percent}%)",overallPass:"Modell erfüllt alle Anforderungen",overallFail:"Modell hat {count} fehlgeschlagene Spezifikationen",noApplicable:"Keine anwendbaren Elemente gefunden"},ui:{specification:"Spezifikation",specifications:"Spezifikationen",requirement:"Anforderung",requirements:"Anforderungen",applicability:"Gilt für",entity:"Element",entities:"Elemente",passed:"Bestanden",failed:"Fehlgeschlagen",passRate:"Erfolgsquote",actualValue:"Tatsächlich",expectedValue:"Erwartet",failureReason:"Grund",showAll:"Alle anzeigen",showFailed:"Nur fehlgeschlagene",isolateFailed:"Fehlgeschlagene isolieren",isolatePassed:"Bestandene isolieren",exportJson:"JSON exportieren",exportBcf:"BCF exportieren",loadIds:"IDS-Datei laden",runValidation:"Validierung starten",clearResults:"Ergebnisse löschen"}},Me={status:{pass:"CONFORME",fail:"NON CONFORME",not_applicable:"NON APPLICABLE"},optionality:{required:"Obligatoire",optional:"Optionnel",prohibited:"Interdit"},cardinality:{satisfied:"Cardinalité respectée",atLeast:"Au moins {min} attendu(s), {count} trouvé(s)",atMost:"Au maximum {max} attendu(s), {count} trouvé(s)",between:"Entre {min} et {max} attendu(s), {count} trouvé(s)",exactly:"Exactement {count} attendu(s)"},relations:{IfcRelAggregates:"agrégé dans",IfcRelContainedInSpatialStructure:"contenu dans",IfcRelNests:"imbriqué dans",IfcRelVoidsElement:"perçant",IfcRelFillsElement:"remplissant"},constraints:{simpleValue:'"{value}"',pattern:'correspondant au motif "{pattern}"',enumeration:{single:'"{value}"',multiple:"l'un de [{values}]"},bounds:{between:"entre {min} et {max}",atLeast:"au moins {min}",atMost:"au plus {max}",greaterThan:"supérieur à {min}",lessThan:"inférieur à {max}"}},applicability:{entity:{simple:"Éléments de type {entityType}",withPredefined:"Éléments {entityType} avec type prédéfini {predefinedType}",pattern:"Éléments avec type correspondant à {pattern}"},attribute:{exists:`Éléments où l'attribut "{name}" existe`,equals:'Éléments où "{name}" est égal à {value}',pattern:'Éléments où "{name}" correspond au motif {pattern}'},property:{exists:'Éléments avec propriété "{property}" dans "{pset}"',equals:'Éléments où "{pset}.{property}" est égal à {value}',pattern:'Éléments où "{pset}.{property}" correspond au motif {pattern}',bounded:'Éléments où "{pset}.{property}" est {bounds}'},classification:{any:"Éléments avec une classification quelconque",system:'Éléments classifiés dans "{system}"',value:'Éléments avec classification "{value}"',systemAndValue:'Éléments classifiés comme "{value}" dans "{system}"'},material:{any:"Éléments avec un matériau attribué",value:'Éléments avec matériau "{value}"',pattern:"Éléments avec matériau correspondant à {pattern}"},partOf:{simple:"Éléments qui sont {relation} un autre élément",withEntity:"Éléments qui sont {relation} un(e) {entity}",withEntityAndType:"Éléments qui sont {relation} un(e) {entity} de type {predefinedType}"}},requirements:{entity:{mustBe:"Doit être de type {entityType}",mustHavePredefined:"Doit avoir le type prédéfini {predefinedType}",mustBeWithPredefined:"Doit être {entityType} avec type prédéfini {predefinedType}"},attribute:{mustExist:`L'attribut "{name}" doit exister`,mustEqual:`L'attribut "{name}" doit être égal à {value}`,mustMatch:`L'attribut "{name}" doit correspondre au motif {pattern}`,mustNotExist:`L'attribut "{name}" ne doit pas exister`,mustNotEqual:`L'attribut "{name}" ne doit pas être {value}`},property:{mustExist:'La propriété "{pset}.{property}" doit exister',mustEqual:'La propriété "{pset}.{property}" doit être égale à {value}',mustMatch:'La propriété "{pset}.{property}" doit correspondre au motif {pattern}',mustBeBounded:'La propriété "{pset}.{property}" doit être {bounds}',mustHaveType:'La propriété "{pset}.{property}" doit être de type {dataType}',mustNotExist:'La propriété "{pset}.{property}" ne doit pas exister'},classification:{mustHave:"Doit avoir une classification",mustBeInSystem:'Doit être classifié dans "{system}"',mustHaveValue:'Doit avoir la classification "{value}"',mustBeInSystemWithValue:'Doit être classifié comme "{value}" dans "{system}"',mustNotHave:"Ne doit pas avoir de classification",mustNotBeInSystem:'Ne doit pas être classifié dans "{system}"'},material:{mustHave:"Doit avoir un matériau attribué",mustBe:'Doit avoir le matériau "{value}"',mustMatch:"Doit avoir un matériau correspondant à {pattern}",mustNotHave:"Ne doit pas avoir de matériau attribué"},partOf:{mustBe:"Doit être {relation} un(e) {entity}",mustBeSimple:"Doit être {relation} un autre élément",mustNotBe:"Ne doit pas être {relation} un élément"}},failures:{entityTypeMismatch:`Le type d'élément est "{actual}", attendu {expected}`,predefinedTypeMismatch:'Le type prédéfini est "{actual}", attendu {expected}',predefinedTypeMissing:"Le type prédéfini n'est pas défini, attendu {expected}",attributeMissing:`L'attribut "{name}" n'existe pas`,attributeEmpty:`L'attribut "{name}" est vide`,attributeValueMismatch:`L'attribut "{name}" est "{actual}", attendu {expected}`,attributePatternMismatch:`La valeur de l'attribut "{name}" "{actual}" ne correspond pas au motif {expected}`,attributeProhibited:`L'attribut interdit "{name}" existe avec la valeur "{actual}"`,psetMissing:`L'ensemble de propriétés "{pset}" n'a pas été trouvé`,psetMissingAvailable:`L'ensemble de propriétés "{pset}" n'a pas été trouvé. Disponibles : {available}`,propertyMissing:`La propriété "{property}" n'a pas été trouvée dans "{pset}"`,propertyMissingAvailable:`La propriété "{property}" n'a pas été trouvée dans "{pset}". Disponibles : {available}`,propertyEmpty:`La propriété "{pset}.{property}" n'a pas de valeur`,propertyValueMismatch:'La propriété "{pset}.{property}" est "{actual}", attendu {expected}',propertyPatternMismatch:'La valeur de la propriété "{pset}.{property}" "{actual}" ne correspond pas à {expected}',propertyDatatypeMismatch:'Le type de données de la propriété "{pset}.{property}" est "{actual}", attendu {expected}',propertyOutOfBounds:'La valeur de la propriété "{pset}.{property}" {actual} est hors de la plage {expected}',propertyProhibited:'La propriété interdite "{pset}.{property}" existe avec la valeur "{actual}"',classificationMissing:"Aucune classification attribuée",classificationSystemMismatch:'Le système de classification "{actual}" ne correspond pas à "{expected}" attendu',classificationSystemMissingAvailable:`Le système de classification "{expected}" n'a pas été trouvé. Disponibles : {available}`,classificationValueMismatch:'Le code de classification "{actual}" ne correspond pas à {expected} attendu',classificationValueMissingAvailable:"Le code de classification {expected} n'a pas été trouvé. Disponibles : {available}",classificationProhibited:'La classification interdite "{actual}" existe dans le système "{system}"',materialMissing:"Aucun matériau attribué",materialValueMismatch:'Le matériau "{actual}" ne correspond pas à {expected} attendu',materialValueMissingAvailable:"Le matériau {expected} n'a pas été trouvé. Disponibles : {available}",materialProhibited:'Le matériau interdit "{actual}" est attribué',partOfMissing:"L'élément n'est pas {relation} un(e) {entity}",partOfMissingSimple:"L'élément n'est pas {relation} un autre élément",partOfEntityMismatch:"L'élément parent est {actual}, attendu {expected}",partOfPredefinedMismatch:`Le type prédéfini de l'élément parent est "{actual}", attendu {expected}`,partOfProhibited:"L'élément est {relation} {actual}, ce qui est interdit",prohibited:'{field} interdit trouvé : "{actual}"',unknown:"Validation échouée : {reason}"},summary:{title:"Rapport de validation IDS",specifications:"{passed}/{total} spécifications conformes",entities:"{passed}/{total} éléments conformes ({percent}%)",overallPass:"Le modèle respecte toutes les exigences",overallFail:"Le modèle a {count} spécifications non conformes",noApplicable:"Aucun élément applicable trouvé"},ui:{specification:"Spécification",specifications:"Spécifications",requirement:"Exigence",requirements:"Exigences",applicability:"S'applique à",entity:"Élément",entities:"Éléments",passed:"Conforme",failed:"Non conforme",passRate:"Taux de conformité",actualValue:"Réel",expectedValue:"Attendu",failureReason:"Raison",showAll:"Afficher tout",showFailed:"Afficher non conformes",isolateFailed:"Isoler non conformes",isolatePassed:"Isoler conformes",exportJson:"Exporter JSON",exportBcf:"Exporter BCF",loadIds:"Charger fichier IDS",runValidation:"Lancer la validation",clearResults:"Effacer les résultats"}},N={en:xe,de:Te,fr:Me};function Ae(t="en"){return new ge(t)}class ge{locale;translations;constructor(e){this.locale=e,this.translations=N[e]||N.en}t(e,a){const i=e.split(".");let n=this.translations;for(const s of i)if(n&&typeof n=="object"&&s in n)n=n[s];else return e;return typeof n!="string"?e:a?this.interpolate(n,a):n}interpolate(e,a){return e.replace(/\{(\w+)\}/g,(i,n)=>n in a?String(a[n]):i)}describeFacet(e,a){switch(this.translations,e.type){case"entity":return this.describeEntityFacet(e,a);case"attribute":return this.describeAttributeFacet(e,a);case"property":return this.describePropertyFacet(e,a);case"classification":return this.describeClassificationFacet(e,a);case"material":return this.describeMaterialFacet(e,a);case"partOf":return this.describePartOfFacet(e,a);default:return"Unknown facet"}}describeEntityFacet(e,a){const i=this.translations,n=this.describeConstraint(e.name);return a==="applicability"?e.predefinedType?this.interpolate(i.applicability.entity.withPredefined,{entityType:n,predefinedType:this.describeConstraint(e.predefinedType)}):this.interpolate(i.applicability.entity.simple,{entityType:n}):e.predefinedType?this.interpolate(i.requirements.entity.mustBeWithPredefined,{entityType:n,predefinedType:this.describeConstraint(e.predefinedType)}):this.interpolate(i.requirements.entity.mustBe,{entityType:n})}describeAttributeFacet(e,a){const i=this.translations,n=this.describeConstraint(e.name);return a==="applicability"?e.value?e.value.type==="pattern"?this.interpolate(i.applicability.attribute.pattern,{name:n,pattern:this.describeConstraint(e.value)}):this.interpolate(i.applicability.attribute.equals,{name:n,value:this.describeConstraint(e.value)}):this.interpolate(i.applicability.attribute.exists,{name:n}):e.value?e.value.type==="pattern"?this.interpolate(i.requirements.attribute.mustMatch,{name:n,pattern:this.describeConstraint(e.value)}):this.interpolate(i.requirements.attribute.mustEqual,{name:n,value:this.describeConstraint(e.value)}):this.interpolate(i.requirements.attribute.mustExist,{name:n})}describePropertyFacet(e,a){const i=this.translations,n=this.describeConstraint(e.propertySet),s=this.describeConstraint(e.baseName);return a==="applicability"?e.value?e.value.type==="pattern"?this.interpolate(i.applicability.property.pattern,{pset:n,property:s,pattern:this.describeConstraint(e.value)}):e.value.type==="bounds"?this.interpolate(i.applicability.property.bounded,{pset:n,property:s,bounds:this.describeConstraint(e.value)}):this.interpolate(i.applicability.property.equals,{pset:n,property:s,value:this.describeConstraint(e.value)}):this.interpolate(i.applicability.property.exists,{pset:n,property:s}):e.value?e.value.type==="pattern"?this.interpolate(i.requirements.property.mustMatch,{pset:n,property:s,pattern:this.describeConstraint(e.value)}):e.value.type==="bounds"?this.interpolate(i.requirements.property.mustBeBounded,{pset:n,property:s,bounds:this.describeConstraint(e.value)}):this.interpolate(i.requirements.property.mustEqual,{pset:n,property:s,value:this.describeConstraint(e.value)}):this.interpolate(i.requirements.property.mustExist,{pset:n,property:s})}describeClassificationFacet(e,a){const i=this.translations;return a==="applicability"?e.system&&e.value?this.interpolate(i.applicability.classification.systemAndValue,{system:this.describeConstraint(e.system),value:this.describeConstraint(e.value)}):e.system?this.interpolate(i.applicability.classification.system,{system:this.describeConstraint(e.system)}):e.value?this.interpolate(i.applicability.classification.value,{value:this.describeConstraint(e.value)}):i.applicability.classification.any:e.system&&e.value?this.interpolate(i.requirements.classification.mustBeInSystemWithValue,{system:this.describeConstraint(e.system),value:this.describeConstraint(e.value)}):e.system?this.interpolate(i.requirements.classification.mustBeInSystem,{system:this.describeConstraint(e.system)}):e.value?this.interpolate(i.requirements.classification.mustHaveValue,{value:this.describeConstraint(e.value)}):i.requirements.classification.mustHave}describeMaterialFacet(e,a){const i=this.translations;return a==="applicability"?e.value?e.value.type==="pattern"?this.interpolate(i.applicability.material.pattern,{pattern:this.describeConstraint(e.value)}):this.interpolate(i.applicability.material.value,{value:this.describeConstraint(e.value)}):i.applicability.material.any:e.value?e.value.type==="pattern"?this.interpolate(i.requirements.material.mustMatch,{pattern:this.describeConstraint(e.value)}):this.interpolate(i.requirements.material.mustBe,{value:this.describeConstraint(e.value)}):i.requirements.material.mustHave}describePartOfFacet(e,a){const i=this.translations,n=this.getRelationDescription(e.relation);return a==="applicability"?e.entity?e.entity.predefinedType?this.interpolate(i.applicability.partOf.withEntityAndType,{relation:n,entity:this.describeConstraint(e.entity.name),predefinedType:this.describeConstraint(e.entity.predefinedType)}):this.interpolate(i.applicability.partOf.withEntity,{relation:n,entity:this.describeConstraint(e.entity.name)}):this.interpolate(i.applicability.partOf.simple,{relation:n}):e.entity?this.interpolate(i.requirements.partOf.mustBe,{relation:n,entity:this.describeConstraint(e.entity.name)}):this.interpolate(i.requirements.partOf.mustBeSimple,{relation:n})}describeConstraint(e){const a=this.translations;switch(e.type){case"simpleValue":return this.interpolate(a.constraints.simpleValue,{value:e.value});case"pattern":return this.interpolate(a.constraints.pattern,{pattern:e.pattern});case"enumeration":return e.values.length===1?this.interpolate(a.constraints.enumeration.single,{value:e.values[0]}):this.interpolate(a.constraints.enumeration.multiple,{values:e.values.map(i=>`"${i}"`).join(", ")});case"bounds":return this.describeBounds(e);default:return"unknown constraint"}}describeBounds(e){const a=this.translations.constraints.bounds;return e.minInclusive!==void 0&&e.maxInclusive!==void 0?this.interpolate(a.between,{min:e.minInclusive,max:e.maxInclusive}):e.minInclusive!==void 0?this.interpolate(a.atLeast,{min:e.minInclusive}):e.maxInclusive!==void 0?this.interpolate(a.atMost,{max:e.maxInclusive}):e.minExclusive!==void 0?this.interpolate(a.greaterThan,{min:e.minExclusive}):e.maxExclusive!==void 0?this.interpolate(a.lessThan,{max:e.maxExclusive}):"any value"}describeFailure(e){const a=this.translations.failures;if(!e.failure)return e.actualValue&&e.expectedValue?`${e.actualValue} ≠ ${e.expectedValue}`:a.unknown.replace("{reason}","no details");const{type:i,field:n,actual:s,expected:r,context:u}=e.failure;switch(i){case"ENTITY_TYPE_MISMATCH":return this.interpolate(a.entityTypeMismatch,{actual:s||"?",expected:r||"?"});case"PREDEFINED_TYPE_MISMATCH":return this.interpolate(a.predefinedTypeMismatch,{actual:s||"?",expected:r||"?"});case"PREDEFINED_TYPE_MISSING":return this.interpolate(a.predefinedTypeMissing,{expected:r||"?"});case"ATTRIBUTE_MISSING":return this.interpolate(a.attributeMissing,{name:n||"?"});case"ATTRIBUTE_VALUE_MISMATCH":return this.interpolate(a.attributeValueMismatch,{name:n||"?",actual:s||"?",expected:r||"?"});case"ATTRIBUTE_PATTERN_MISMATCH":return this.interpolate(a.attributePatternMismatch,{name:n||"?",actual:s||"?",expected:r||"?"});case"PSET_MISSING":return u?.availablePsets?this.interpolate(a.psetMissingAvailable,{pset:n||r||"?",available:u.availablePsets}):this.interpolate(a.psetMissing,{pset:n||r||"?"});case"PROPERTY_MISSING":return u?.availableProperties?this.interpolate(a.propertyMissingAvailable,{property:n||"?",pset:u.propertySet||"?",available:u.availableProperties}):this.interpolate(a.propertyMissing,{property:n||"?",pset:u?.propertySet||"?"});case"PROPERTY_VALUE_MISMATCH":return this.interpolate(a.propertyValueMismatch,{pset:this.extractPsetFromField(n),property:this.extractPropertyFromField(n),actual:s||"?",expected:r||"?"});case"PROPERTY_DATATYPE_MISMATCH":return this.interpolate(a.propertyDatatypeMismatch,{pset:this.extractPsetFromField(n),property:this.extractPropertyFromField(n),actual:s||"?",expected:r||"?"});case"PROPERTY_OUT_OF_BOUNDS":return this.interpolate(a.propertyOutOfBounds,{pset:this.extractPsetFromField(n),property:this.extractPropertyFromField(n),actual:s||"?",expected:r||"?"});case"CLASSIFICATION_MISSING":return a.classificationMissing;case"CLASSIFICATION_SYSTEM_MISMATCH":return u?.availableSystems?this.interpolate(a.classificationSystemMissingAvailable,{expected:r||"?",available:u.availableSystems}):this.interpolate(a.classificationSystemMismatch,{actual:s||"?",expected:r||"?"});case"CLASSIFICATION_VALUE_MISMATCH":return u?.availableValues?this.interpolate(a.classificationValueMissingAvailable,{expected:r||"?",available:u.availableValues}):this.interpolate(a.classificationValueMismatch,{actual:s||"?",expected:r||"?"});case"MATERIAL_MISSING":return a.materialMissing;case"MATERIAL_VALUE_MISMATCH":return u?.availableMaterials?this.interpolate(a.materialValueMissingAvailable,{expected:r||"?",available:u.availableMaterials}):this.interpolate(a.materialValueMismatch,{actual:s||"?",expected:r||"?"});case"PARTOF_RELATION_MISSING":return u?.entity?this.interpolate(a.partOfMissing,{relation:this.getRelationDescription(n||"IfcRelContainedInSpatialStructure"),entity:u.entity}):this.interpolate(a.partOfMissingSimple,{relation:this.getRelationDescription(n||"IfcRelContainedInSpatialStructure")});case"PARTOF_ENTITY_MISMATCH":return this.interpolate(a.partOfEntityMismatch,{actual:s||"?",expected:r||"?"});case"PROHIBITED_ATTRIBUTE_EXISTS":case"PROHIBITED_PROPERTY_EXISTS":case"PROHIBITED_CLASSIFICATION_EXISTS":case"PROHIBITED_MATERIAL_EXISTS":return this.interpolate(a.prohibited,{field:n||"value",actual:s||"?"});default:return this.interpolate(a.unknown,{reason:i})}}extractPsetFromField(e){if(!e)return"?";const a=e.split(".");return a.length>1?a[0]:"?"}extractPropertyFromField(e){if(!e)return"?";const a=e.split(".");return a.length>1?a.slice(1).join("."):e}describeRequirement(e){let a=this.describeFacet(e.facet,"requirement");return e.optionality==="prohibited"?a=this.applyProhibited(a):e.optionality==="optional"&&(a=this.applyOptional(a)),a}applyProhibited(e){return e.replace(/^Must be/i,"Must NOT be").replace(/^Must have/i,"Must NOT have").replace(/^Muss/i,"Darf nicht").replace(/^Doit être/i,"Ne doit pas être").replace(/^Doit avoir/i,"Ne doit pas avoir")}applyOptional(e){return e.replace(/^Must/i,"Should").replace(/^Muss/i,"Sollte").replace(/^Doit/i,"Devrait")}getStatusText(e){return this.translations.status[e]}getOptionalityText(e){return this.translations.optionality[e]}getRelationDescription(e){return this.translations.relations[e]||e.replace("IfcRel","").toLowerCase()}}export{Ae as c,Ie as p,Se as v};