@itwin/core-frontend 4.0.0-dev.87 → 4.0.0-dev.89

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 (820) hide show
  1. package/CHANGELOG.md +14 -1
  2. package/lib/cjs/AccuDraw.js.map +1 -1
  3. package/lib/cjs/AccuSnap.js.map +1 -1
  4. package/lib/cjs/ApproximateTerrainHeights.js.map +1 -1
  5. package/lib/cjs/ApproximateTerrainHeightsProps.js.map +1 -1
  6. package/lib/cjs/AuxCoordSys.js.map +1 -1
  7. package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
  8. package/lib/cjs/BingLocation.js.map +1 -1
  9. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  10. package/lib/cjs/BriefcaseTxns.js.map +1 -1
  11. package/lib/cjs/CategorySelectorState.js.map +1 -1
  12. package/lib/cjs/ChangeFlags.js.map +1 -1
  13. package/lib/cjs/CheckpointConnection.js.map +1 -1
  14. package/lib/cjs/CoordSystem.js.map +1 -1
  15. package/lib/cjs/DecorationsCache.js.map +1 -1
  16. package/lib/cjs/DevTools.js.map +1 -1
  17. package/lib/cjs/DisplayStyleState.js.map +1 -1
  18. package/lib/cjs/DrawingViewState.js +5 -5
  19. package/lib/cjs/DrawingViewState.js.map +1 -1
  20. package/lib/cjs/ElementLocateManager.js.map +1 -1
  21. package/lib/cjs/EmphasizeElements.js.map +1 -1
  22. package/lib/cjs/EntityState.js.map +1 -1
  23. package/lib/cjs/EnvironmentDecorations.js.map +1 -1
  24. package/lib/cjs/FeatureOverrideProvider.js.map +1 -1
  25. package/lib/cjs/FlashSettings.js.map +1 -1
  26. package/lib/cjs/FrontendHubAccess.js.map +1 -1
  27. package/lib/cjs/FrontendLoggerCategory.js.map +1 -1
  28. package/lib/cjs/Frustum2d.js.map +1 -1
  29. package/lib/cjs/FrustumAnimator.js.map +1 -1
  30. package/lib/cjs/FuzzySearch.js.map +1 -1
  31. package/lib/cjs/GeoServices.js.map +1 -1
  32. package/lib/cjs/GlobeAnimator.js.map +1 -1
  33. package/lib/cjs/GraphicalEditingScope.js.map +1 -1
  34. package/lib/cjs/HitDetail.js.map +1 -1
  35. package/lib/cjs/IModelApp.js.map +1 -1
  36. package/lib/cjs/IModelConnection.js +23 -23
  37. package/lib/cjs/IModelConnection.js.map +1 -1
  38. package/lib/cjs/IModelRoutingContext.js.map +1 -1
  39. package/lib/cjs/IModeljs-css.d.ts +2 -2
  40. package/lib/cjs/IModeljs-css.d.ts.map +1 -1
  41. package/lib/cjs/IModeljs-css.js +136 -136
  42. package/lib/cjs/IModeljs-css.js.map +1 -1
  43. package/lib/cjs/ImageUtil.js.map +1 -1
  44. package/lib/cjs/IpcApp.js.map +1 -1
  45. package/lib/cjs/LinePlaneIntersect.js.map +1 -1
  46. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  47. package/lib/cjs/MarginPercent.js.map +1 -1
  48. package/lib/cjs/Marker.js.map +1 -1
  49. package/lib/cjs/ModelSelectorState.js.map +1 -1
  50. package/lib/cjs/NativeApp.js.map +1 -1
  51. package/lib/cjs/NativeAppLogger.js.map +1 -1
  52. package/lib/cjs/NoRenderApp.js.map +1 -1
  53. package/lib/cjs/NotificationManager.js.map +1 -1
  54. package/lib/cjs/PerModelCategoryVisibility.js.map +1 -1
  55. package/lib/cjs/PlanarClipMaskState.js.map +1 -1
  56. package/lib/cjs/RealityDataSource.js.map +1 -1
  57. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  58. package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -1
  59. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  60. package/lib/cjs/SelectionSet.js.map +1 -1
  61. package/lib/cjs/SheetViewState.js.map +1 -1
  62. package/lib/cjs/SpatialViewState.js.map +1 -1
  63. package/lib/cjs/Sprites.js.map +1 -1
  64. package/lib/cjs/StandardView.js.map +1 -1
  65. package/lib/cjs/SubCategoriesCache.js.map +1 -1
  66. package/lib/cjs/TentativePoint.js.map +1 -1
  67. package/lib/cjs/Tiles.js.map +1 -1
  68. package/lib/cjs/UserPreferences.js.map +1 -1
  69. package/lib/cjs/ViewAnimation.js.map +1 -1
  70. package/lib/cjs/ViewContext.js.map +1 -1
  71. package/lib/cjs/ViewCreator2d.js.map +1 -1
  72. package/lib/cjs/ViewCreator3d.js.map +1 -1
  73. package/lib/cjs/ViewGlobalLocation.js.map +1 -1
  74. package/lib/cjs/ViewManager.js.map +1 -1
  75. package/lib/cjs/ViewPose.js.map +1 -1
  76. package/lib/cjs/ViewRect.js.map +1 -1
  77. package/lib/cjs/ViewState.js.map +1 -1
  78. package/lib/cjs/ViewStatus.js.map +1 -1
  79. package/lib/cjs/ViewingSpace.js.map +1 -1
  80. package/lib/cjs/Viewport.js.map +1 -1
  81. package/lib/cjs/ViewportSync.js.map +1 -1
  82. package/lib/cjs/WebWorkerManager.js.map +1 -1
  83. package/lib/cjs/core-frontend.js.map +1 -1
  84. package/lib/cjs/extension/Extension.js.map +1 -1
  85. package/lib/cjs/extension/ExtensionAdmin.js.map +1 -1
  86. package/lib/cjs/extension/ExtensionHost.js.map +1 -1
  87. package/lib/cjs/extension/ExtensionImpl.js.map +1 -1
  88. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  89. package/lib/cjs/extension/providers/ExtensionLoadScript.js.map +1 -1
  90. package/lib/cjs/extension/providers/LocalExtensionProvider.js.map +1 -1
  91. package/lib/cjs/extension/providers/RemoteExtensionProvider.js.map +1 -1
  92. package/lib/cjs/gltf/GltfModel.js.map +1 -1
  93. package/lib/cjs/gltf/GltfParser.js.map +1 -1
  94. package/lib/cjs/gltf/GltfSchema.js.map +1 -1
  95. package/lib/cjs/properties/AngleDescription.js.map +1 -1
  96. package/lib/cjs/properties/FormattedQuantityDescription.js.map +1 -1
  97. package/lib/cjs/properties/LengthDescription.js.map +1 -1
  98. package/lib/cjs/public/scripts/checkbrowser.js +24 -24
  99. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  100. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  101. package/lib/cjs/quantity-formatting/LocalUnitFormatProvider.js.map +1 -1
  102. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  103. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -1
  104. package/lib/cjs/quantity-formatting/UnitsData.js.map +1 -1
  105. package/lib/cjs/render/CanvasDecoration.js.map +1 -1
  106. package/lib/cjs/render/Decorations.js.map +1 -1
  107. package/lib/cjs/render/FeatureSymbology.js.map +1 -1
  108. package/lib/cjs/render/FrameStats.js.map +1 -1
  109. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  110. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  111. package/lib/cjs/render/GraphicPrimitive.js.map +1 -1
  112. package/lib/cjs/render/InstancedGraphicParams.js.map +1 -1
  113. package/lib/cjs/render/MockRender.js.map +1 -1
  114. package/lib/cjs/render/ParticleCollectionBuilder.js.map +1 -1
  115. package/lib/cjs/render/Pixel.js.map +1 -1
  116. package/lib/cjs/render/RealityMeshGraphicParams.js.map +1 -1
  117. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  118. package/lib/cjs/render/RenderClipVolume.js.map +1 -1
  119. package/lib/cjs/render/RenderGraphic.js.map +1 -1
  120. package/lib/cjs/render/RenderMaterial.js.map +1 -1
  121. package/lib/cjs/render/RenderMemory.js.map +1 -1
  122. package/lib/cjs/render/RenderPlan.js.map +1 -1
  123. package/lib/cjs/render/RenderPlanarClassifier.js.map +1 -1
  124. package/lib/cjs/render/RenderSystem.js.map +1 -1
  125. package/lib/cjs/render/RenderTarget.js.map +1 -1
  126. package/lib/cjs/render/RenderTexture.js.map +1 -1
  127. package/lib/cjs/render/Scene.js.map +1 -1
  128. package/lib/cjs/render/ScreenSpaceEffectBuilder.js.map +1 -1
  129. package/lib/cjs/render/UpsampleRealityMeshParams.js.map +1 -1
  130. package/lib/cjs/render/VisibleFeature.js.map +1 -1
  131. package/lib/cjs/render/primitives/AuxChannelTable.js.map +1 -1
  132. package/lib/cjs/render/primitives/ColorMap.js.map +1 -1
  133. package/lib/cjs/render/primitives/DisplayParams.js.map +1 -1
  134. package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
  135. package/lib/cjs/render/primitives/PointCloudPrimitive.js.map +1 -1
  136. package/lib/cjs/render/primitives/PointStringParams.js.map +1 -1
  137. package/lib/cjs/render/primitives/Polyface.js.map +1 -1
  138. package/lib/cjs/render/primitives/PolylineParams.js.map +1 -1
  139. package/lib/cjs/render/primitives/Primitives.js.map +1 -1
  140. package/lib/cjs/render/primitives/Strokes.js.map +1 -1
  141. package/lib/cjs/render/primitives/SurfaceParams.js.map +1 -1
  142. package/lib/cjs/render/primitives/VertexKey.js.map +1 -1
  143. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  144. package/lib/cjs/render/primitives/VertexTableSplitter.js.map +1 -1
  145. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  146. package/lib/cjs/render/primitives/geometry/GeometryList.js.map +1 -1
  147. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  148. package/lib/cjs/render/primitives/geometry/GeometryPrimitives.js.map +1 -1
  149. package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +1 -1
  150. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  151. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  152. package/lib/cjs/render/webgl/AtmosphereUniforms.js.map +1 -1
  153. package/lib/cjs/render/webgl/AttributeBuffers.js.map +1 -1
  154. package/lib/cjs/render/webgl/AttributeMap.js.map +1 -1
  155. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  156. package/lib/cjs/render/webgl/BatchState.js.map +1 -1
  157. package/lib/cjs/render/webgl/BatchUniforms.js.map +1 -1
  158. package/lib/cjs/render/webgl/BranchStack.js.map +1 -1
  159. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  160. package/lib/cjs/render/webgl/BranchUniforms.js.map +1 -1
  161. package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
  162. package/lib/cjs/render/webgl/ClipStack.js.map +1 -1
  163. package/lib/cjs/render/webgl/ClipVolume.js.map +1 -1
  164. package/lib/cjs/render/webgl/ClippingProgram.js.map +1 -1
  165. package/lib/cjs/render/webgl/ColorInfo.js.map +1 -1
  166. package/lib/cjs/render/webgl/Diagnostics.js.map +1 -1
  167. package/lib/cjs/render/webgl/Disposable.js.map +1 -1
  168. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  169. package/lib/cjs/render/webgl/EDL.js.map +1 -1
  170. package/lib/cjs/render/webgl/EdgeGeometry.js.map +1 -1
  171. package/lib/cjs/render/webgl/EdgeSettings.js.map +1 -1
  172. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  173. package/lib/cjs/render/webgl/FloatRGBA.js.map +1 -1
  174. package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
  175. package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
  176. package/lib/cjs/render/webgl/GL.js.map +1 -1
  177. package/lib/cjs/render/webgl/GLTimer.js.map +1 -1
  178. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  179. package/lib/cjs/render/webgl/HiliteUniforms.js.map +1 -1
  180. package/lib/cjs/render/webgl/IModelFrameLifecycle.js.map +1 -1
  181. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  182. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  183. package/lib/cjs/render/webgl/Layer.js.map +1 -1
  184. package/lib/cjs/render/webgl/LayerCommands.js.map +1 -1
  185. package/lib/cjs/render/webgl/LightingUniforms.js.map +1 -1
  186. package/lib/cjs/render/webgl/LineCode.js.map +1 -1
  187. package/lib/cjs/render/webgl/Material.js.map +1 -1
  188. package/lib/cjs/render/webgl/Matrix.js.map +1 -1
  189. package/lib/cjs/render/webgl/Mesh.js.map +1 -1
  190. package/lib/cjs/render/webgl/MeshData.js.map +1 -1
  191. package/lib/cjs/render/webgl/MeshGeometry.js.map +1 -1
  192. package/lib/cjs/render/webgl/PerformanceMetrics.js.map +1 -1
  193. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  194. package/lib/cjs/render/webgl/PlanarGrid.js.map +1 -1
  195. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  196. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  197. package/lib/cjs/render/webgl/PointString.js.map +1 -1
  198. package/lib/cjs/render/webgl/Polyline.js.map +1 -1
  199. package/lib/cjs/render/webgl/Primitive.js.map +1 -1
  200. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  201. package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
  202. package/lib/cjs/render/webgl/RenderBuffer.js.map +1 -1
  203. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  204. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  205. package/lib/cjs/render/webgl/RenderState.js.map +1 -1
  206. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  207. package/lib/cjs/render/webgl/ScratchDrawParams.js.map +1 -1
  208. package/lib/cjs/render/webgl/ScreenSpaceEffect.js.map +1 -1
  209. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  210. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  211. package/lib/cjs/render/webgl/ShadowUniforms.js.map +1 -1
  212. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  213. package/lib/cjs/render/webgl/StyleUniforms.js.map +1 -1
  214. package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
  215. package/lib/cjs/render/webgl/Sync.js.map +1 -1
  216. package/lib/cjs/render/webgl/System.js.map +1 -1
  217. package/lib/cjs/render/webgl/Target.js.map +1 -1
  218. package/lib/cjs/render/webgl/TargetGraphics.js.map +1 -1
  219. package/lib/cjs/render/webgl/TargetUniforms.js.map +1 -1
  220. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  221. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  222. package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
  223. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  224. package/lib/cjs/render/webgl/TextureDrape.js.map +1 -1
  225. package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
  226. package/lib/cjs/render/webgl/ThematicUniforms.js.map +1 -1
  227. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  228. package/lib/cjs/render/webgl/VertexLUT.js.map +1 -1
  229. package/lib/cjs/render/webgl/ViewRectUniforms.js.map +1 -1
  230. package/lib/cjs/render/webgl/VisibleTileFeatures.js.map +1 -1
  231. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +154 -154
  232. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  233. package/lib/cjs/render/webgl/glsl/Animation.js +83 -83
  234. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  235. package/lib/cjs/render/webgl/glsl/Atmosphere.js +266 -266
  236. package/lib/cjs/render/webgl/glsl/Atmosphere.js.map +1 -1
  237. package/lib/cjs/render/webgl/glsl/Blur.js +37 -37
  238. package/lib/cjs/render/webgl/glsl/Blur.js.map +1 -1
  239. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +4 -4
  240. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  241. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +3 -3
  242. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  243. package/lib/cjs/render/webgl/glsl/Clipping.js +60 -60
  244. package/lib/cjs/render/webgl/glsl/Clipping.js.map +1 -1
  245. package/lib/cjs/render/webgl/glsl/Color.js +12 -12
  246. package/lib/cjs/render/webgl/glsl/Color.js.map +1 -1
  247. package/lib/cjs/render/webgl/glsl/Combine3Textures.js +7 -7
  248. package/lib/cjs/render/webgl/glsl/Combine3Textures.js.map +1 -1
  249. package/lib/cjs/render/webgl/glsl/CombineTextures.js +5 -5
  250. package/lib/cjs/render/webgl/glsl/CombineTextures.js.map +1 -1
  251. package/lib/cjs/render/webgl/glsl/Common.js +16 -16
  252. package/lib/cjs/render/webgl/glsl/Common.js.map +1 -1
  253. package/lib/cjs/render/webgl/glsl/Composite.js +71 -71
  254. package/lib/cjs/render/webgl/glsl/Composite.js.map +1 -1
  255. package/lib/cjs/render/webgl/glsl/CopyColor.js +6 -6
  256. package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
  257. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +3 -3
  258. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  259. package/lib/cjs/render/webgl/glsl/CopyStencil.js +4 -4
  260. package/lib/cjs/render/webgl/glsl/CopyStencil.js.map +1 -1
  261. package/lib/cjs/render/webgl/glsl/Decode.js +65 -65
  262. package/lib/cjs/render/webgl/glsl/Decode.js.map +1 -1
  263. package/lib/cjs/render/webgl/glsl/EDL.js +103 -103
  264. package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -1
  265. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js +25 -25
  266. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  267. package/lib/cjs/render/webgl/glsl/Edge.js +146 -146
  268. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  269. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +232 -232
  270. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  271. package/lib/cjs/render/webgl/glsl/Fragment.js +41 -41
  272. package/lib/cjs/render/webgl/glsl/Fragment.js.map +1 -1
  273. package/lib/cjs/render/webgl/glsl/Instancing.js +21 -21
  274. package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
  275. package/lib/cjs/render/webgl/glsl/Lighting.js +92 -92
  276. package/lib/cjs/render/webgl/glsl/Lighting.js.map +1 -1
  277. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  278. package/lib/cjs/render/webgl/glsl/LookupTable.js +19 -19
  279. package/lib/cjs/render/webgl/glsl/LookupTable.js.map +1 -1
  280. package/lib/cjs/render/webgl/glsl/Monochrome.js +13 -13
  281. package/lib/cjs/render/webgl/glsl/Monochrome.js.map +1 -1
  282. package/lib/cjs/render/webgl/glsl/PlanarClassification.js +188 -188
  283. package/lib/cjs/render/webgl/glsl/PlanarClassification.js.map +1 -1
  284. package/lib/cjs/render/webgl/glsl/PlanarGrid.js +22 -22
  285. package/lib/cjs/render/webgl/glsl/PlanarGrid.js.map +1 -1
  286. package/lib/cjs/render/webgl/glsl/PointCloud.js +28 -28
  287. package/lib/cjs/render/webgl/glsl/PointCloud.js.map +1 -1
  288. package/lib/cjs/render/webgl/glsl/PointString.js +9 -9
  289. package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
  290. package/lib/cjs/render/webgl/glsl/Polyline.js +213 -213
  291. package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
  292. package/lib/cjs/render/webgl/glsl/RealityMesh.js +83 -83
  293. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  294. package/lib/cjs/render/webgl/glsl/RenderPass.js.map +1 -1
  295. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js +9 -9
  296. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
  297. package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
  298. package/lib/cjs/render/webgl/glsl/SkySphere.js +49 -49
  299. package/lib/cjs/render/webgl/glsl/SkySphere.js.map +1 -1
  300. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +51 -51
  301. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  302. package/lib/cjs/render/webgl/glsl/Surface.js +239 -239
  303. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  304. package/lib/cjs/render/webgl/glsl/Thematic.js +134 -134
  305. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  306. package/lib/cjs/render/webgl/glsl/Translucency.js +19 -19
  307. package/lib/cjs/render/webgl/glsl/Translucency.js.map +1 -1
  308. package/lib/cjs/render/webgl/glsl/Vertex.js +73 -73
  309. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  310. package/lib/cjs/render/webgl/glsl/Viewport.js +38 -38
  311. package/lib/cjs/render/webgl/glsl/Viewport.js.map +1 -1
  312. package/lib/cjs/render/webgl/glsl/ViewportQuad.js.map +1 -1
  313. package/lib/cjs/render/webgl/glsl/Wiremesh.js +10 -10
  314. package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -1
  315. package/lib/cjs/render-primitives.js.map +1 -1
  316. package/lib/cjs/request/Request.js.map +1 -1
  317. package/lib/cjs/tile/B3dmReader.js.map +1 -1
  318. package/lib/cjs/tile/BatchedTileIdMap.js.map +1 -1
  319. package/lib/cjs/tile/CesiumAssetProvider.js.map +1 -1
  320. package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
  321. package/lib/cjs/tile/ContextShareProvider.js.map +1 -1
  322. package/lib/cjs/tile/DisclosedTileTreeSet.js.map +1 -1
  323. package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
  324. package/lib/cjs/tile/GltfReader.js.map +1 -1
  325. package/lib/cjs/tile/GraphicsCollector.js.map +1 -1
  326. package/lib/cjs/tile/I3dmReader.js.map +1 -1
  327. package/lib/cjs/tile/IModelTile.js.map +1 -1
  328. package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
  329. package/lib/cjs/tile/IModelTileTree.js.map +1 -1
  330. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  331. package/lib/cjs/tile/LRUTileList.js.map +1 -1
  332. package/lib/cjs/tile/OPCFormatInterpreter.js.map +1 -1
  333. package/lib/cjs/tile/PntsReader.js.map +1 -1
  334. package/lib/cjs/tile/RealityTile.js.map +1 -1
  335. package/lib/cjs/tile/RealityTileDrawArgs.js.map +1 -1
  336. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  337. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  338. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  339. package/lib/cjs/tile/Tile.js.map +1 -1
  340. package/lib/cjs/tile/TileAdmin.d.ts +1 -1
  341. package/lib/cjs/tile/TileAdmin.js +1 -1
  342. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  343. package/lib/cjs/tile/TileContent.js.map +1 -1
  344. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  345. package/lib/cjs/tile/TileGeometryCollector.js.map +1 -1
  346. package/lib/cjs/tile/TileParams.js.map +1 -1
  347. package/lib/cjs/tile/TileRequest.js.map +1 -1
  348. package/lib/cjs/tile/TileRequestChannel.js.map +1 -1
  349. package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
  350. package/lib/cjs/tile/TileStorage.js.map +1 -1
  351. package/lib/cjs/tile/TileTree.js.map +1 -1
  352. package/lib/cjs/tile/TileTreeOwner.js.map +1 -1
  353. package/lib/cjs/tile/TileTreeParams.js.map +1 -1
  354. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  355. package/lib/cjs/tile/TileTreeSupplier.js.map +1 -1
  356. package/lib/cjs/tile/TileUsageMarker.js.map +1 -1
  357. package/lib/cjs/tile/TileUser.js.map +1 -1
  358. package/lib/cjs/tile/TileUserSet.js.map +1 -1
  359. package/lib/cjs/tile/TiledGraphicsProvider.js.map +1 -1
  360. package/lib/cjs/tile/ViewFlagOverrides.js.map +1 -1
  361. package/lib/cjs/tile/internal.js.map +1 -1
  362. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  363. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  364. package/lib/cjs/tile/map/BingElevation.js.map +1 -1
  365. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  366. package/lib/cjs/tile/map/EllipsoidTerrainProvider.js.map +1 -1
  367. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  368. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  369. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  370. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  371. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  372. package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  373. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  374. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  375. package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
  376. package/lib/cjs/tile/map/MapFeatureInfo.js.map +1 -1
  377. package/lib/cjs/tile/map/MapLayerAuthentication.js.map +1 -1
  378. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  379. package/lib/cjs/tile/map/MapLayerImageryProvider.js +2 -2
  380. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  381. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  382. package/lib/cjs/tile/map/MapLayerTileTreeReference.js.map +1 -1
  383. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  384. package/lib/cjs/tile/map/MapTileAvailability.js.map +1 -1
  385. package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
  386. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  387. package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
  388. package/lib/cjs/tile/map/QuadId.js.map +1 -1
  389. package/lib/cjs/tile/map/TerrainMeshProvider.js.map +1 -1
  390. package/lib/cjs/tile/map/TerrainProvider.js.map +1 -1
  391. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  392. package/lib/cjs/tile/map/WmsUtilities.js.map +1 -1
  393. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  394. package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
  395. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  396. package/lib/cjs/tools/EditManipulator.js.map +1 -1
  397. package/lib/cjs/tools/ElementSetTool.js.map +1 -1
  398. package/lib/cjs/tools/EventController.js.map +1 -1
  399. package/lib/cjs/tools/IdleTool.js.map +1 -1
  400. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  401. package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
  402. package/lib/cjs/tools/SelectTool.js.map +1 -1
  403. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  404. package/lib/cjs/tools/ToolAssistance.js.map +1 -1
  405. package/lib/cjs/tools/ToolSettings.js.map +1 -1
  406. package/lib/cjs/tools/ViewTool.js.map +1 -1
  407. package/lib/cjs/webgl.js.map +1 -1
  408. package/lib/esm/AccuDraw.js.map +1 -1
  409. package/lib/esm/AccuSnap.js.map +1 -1
  410. package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
  411. package/lib/esm/ApproximateTerrainHeightsProps.js.map +1 -1
  412. package/lib/esm/AuxCoordSys.js.map +1 -1
  413. package/lib/esm/BackgroundMapGeometry.js.map +1 -1
  414. package/lib/esm/BingLocation.js.map +1 -1
  415. package/lib/esm/BriefcaseConnection.js.map +1 -1
  416. package/lib/esm/BriefcaseTxns.js.map +1 -1
  417. package/lib/esm/CategorySelectorState.js.map +1 -1
  418. package/lib/esm/ChangeFlags.js.map +1 -1
  419. package/lib/esm/CheckpointConnection.js.map +1 -1
  420. package/lib/esm/CoordSystem.js.map +1 -1
  421. package/lib/esm/DecorationsCache.js.map +1 -1
  422. package/lib/esm/DevTools.js.map +1 -1
  423. package/lib/esm/DisplayStyleState.js.map +1 -1
  424. package/lib/esm/DrawingViewState.js +5 -5
  425. package/lib/esm/DrawingViewState.js.map +1 -1
  426. package/lib/esm/ElementLocateManager.js.map +1 -1
  427. package/lib/esm/EmphasizeElements.js.map +1 -1
  428. package/lib/esm/EntityState.js.map +1 -1
  429. package/lib/esm/EnvironmentDecorations.js.map +1 -1
  430. package/lib/esm/FeatureOverrideProvider.js.map +1 -1
  431. package/lib/esm/FlashSettings.js.map +1 -1
  432. package/lib/esm/FrontendHubAccess.js.map +1 -1
  433. package/lib/esm/FrontendLoggerCategory.js.map +1 -1
  434. package/lib/esm/Frustum2d.js.map +1 -1
  435. package/lib/esm/FrustumAnimator.js.map +1 -1
  436. package/lib/esm/FuzzySearch.js.map +1 -1
  437. package/lib/esm/GeoServices.js.map +1 -1
  438. package/lib/esm/GlobeAnimator.js.map +1 -1
  439. package/lib/esm/GraphicalEditingScope.js.map +1 -1
  440. package/lib/esm/HitDetail.js.map +1 -1
  441. package/lib/esm/IModelApp.js.map +1 -1
  442. package/lib/esm/IModelConnection.js +23 -23
  443. package/lib/esm/IModelConnection.js.map +1 -1
  444. package/lib/esm/IModelRoutingContext.js.map +1 -1
  445. package/lib/esm/IModeljs-css.d.ts +2 -2
  446. package/lib/esm/IModeljs-css.d.ts.map +1 -1
  447. package/lib/esm/IModeljs-css.js +136 -136
  448. package/lib/esm/IModeljs-css.js.map +1 -1
  449. package/lib/esm/ImageUtil.js.map +1 -1
  450. package/lib/esm/IpcApp.js.map +1 -1
  451. package/lib/esm/LinePlaneIntersect.js.map +1 -1
  452. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  453. package/lib/esm/MarginPercent.js.map +1 -1
  454. package/lib/esm/Marker.js.map +1 -1
  455. package/lib/esm/ModelSelectorState.js.map +1 -1
  456. package/lib/esm/NativeApp.js.map +1 -1
  457. package/lib/esm/NativeAppLogger.js.map +1 -1
  458. package/lib/esm/NoRenderApp.js.map +1 -1
  459. package/lib/esm/NotificationManager.js.map +1 -1
  460. package/lib/esm/PerModelCategoryVisibility.js.map +1 -1
  461. package/lib/esm/PlanarClipMaskState.js.map +1 -1
  462. package/lib/esm/RealityDataSource.js.map +1 -1
  463. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  464. package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -1
  465. package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  466. package/lib/esm/SelectionSet.js.map +1 -1
  467. package/lib/esm/SheetViewState.js.map +1 -1
  468. package/lib/esm/SpatialViewState.js.map +1 -1
  469. package/lib/esm/Sprites.js.map +1 -1
  470. package/lib/esm/StandardView.js.map +1 -1
  471. package/lib/esm/SubCategoriesCache.js.map +1 -1
  472. package/lib/esm/TentativePoint.js.map +1 -1
  473. package/lib/esm/Tiles.js.map +1 -1
  474. package/lib/esm/UserPreferences.js.map +1 -1
  475. package/lib/esm/ViewAnimation.js.map +1 -1
  476. package/lib/esm/ViewContext.js.map +1 -1
  477. package/lib/esm/ViewCreator2d.js.map +1 -1
  478. package/lib/esm/ViewCreator3d.js.map +1 -1
  479. package/lib/esm/ViewGlobalLocation.js.map +1 -1
  480. package/lib/esm/ViewManager.js.map +1 -1
  481. package/lib/esm/ViewPose.js.map +1 -1
  482. package/lib/esm/ViewRect.js.map +1 -1
  483. package/lib/esm/ViewState.js.map +1 -1
  484. package/lib/esm/ViewStatus.js.map +1 -1
  485. package/lib/esm/ViewingSpace.js.map +1 -1
  486. package/lib/esm/Viewport.js.map +1 -1
  487. package/lib/esm/ViewportSync.js.map +1 -1
  488. package/lib/esm/WebWorkerManager.js.map +1 -1
  489. package/lib/esm/core-frontend.js.map +1 -1
  490. package/lib/esm/extension/Extension.js.map +1 -1
  491. package/lib/esm/extension/ExtensionAdmin.js.map +1 -1
  492. package/lib/esm/extension/ExtensionHost.js.map +1 -1
  493. package/lib/esm/extension/ExtensionImpl.js.map +1 -1
  494. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  495. package/lib/esm/extension/providers/ExtensionLoadScript.js.map +1 -1
  496. package/lib/esm/extension/providers/LocalExtensionProvider.js.map +1 -1
  497. package/lib/esm/extension/providers/RemoteExtensionProvider.js.map +1 -1
  498. package/lib/esm/gltf/GltfModel.js.map +1 -1
  499. package/lib/esm/gltf/GltfParser.js.map +1 -1
  500. package/lib/esm/gltf/GltfSchema.js.map +1 -1
  501. package/lib/esm/properties/AngleDescription.js.map +1 -1
  502. package/lib/esm/properties/FormattedQuantityDescription.js.map +1 -1
  503. package/lib/esm/properties/LengthDescription.js.map +1 -1
  504. package/lib/esm/public/scripts/checkbrowser.js +24 -24
  505. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  506. package/lib/esm/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  507. package/lib/esm/quantity-formatting/LocalUnitFormatProvider.js.map +1 -1
  508. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  509. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -1
  510. package/lib/esm/quantity-formatting/UnitsData.js.map +1 -1
  511. package/lib/esm/render/CanvasDecoration.js.map +1 -1
  512. package/lib/esm/render/Decorations.js.map +1 -1
  513. package/lib/esm/render/FeatureSymbology.js.map +1 -1
  514. package/lib/esm/render/FrameStats.js.map +1 -1
  515. package/lib/esm/render/GraphicBranch.js.map +1 -1
  516. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  517. package/lib/esm/render/GraphicPrimitive.js.map +1 -1
  518. package/lib/esm/render/InstancedGraphicParams.js.map +1 -1
  519. package/lib/esm/render/MockRender.js.map +1 -1
  520. package/lib/esm/render/ParticleCollectionBuilder.js.map +1 -1
  521. package/lib/esm/render/Pixel.js.map +1 -1
  522. package/lib/esm/render/RealityMeshGraphicParams.js.map +1 -1
  523. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  524. package/lib/esm/render/RenderClipVolume.js.map +1 -1
  525. package/lib/esm/render/RenderGraphic.js.map +1 -1
  526. package/lib/esm/render/RenderMaterial.js.map +1 -1
  527. package/lib/esm/render/RenderMemory.js.map +1 -1
  528. package/lib/esm/render/RenderPlan.js.map +1 -1
  529. package/lib/esm/render/RenderPlanarClassifier.js.map +1 -1
  530. package/lib/esm/render/RenderSystem.js.map +1 -1
  531. package/lib/esm/render/RenderTarget.js.map +1 -1
  532. package/lib/esm/render/RenderTexture.js.map +1 -1
  533. package/lib/esm/render/Scene.js.map +1 -1
  534. package/lib/esm/render/ScreenSpaceEffectBuilder.js.map +1 -1
  535. package/lib/esm/render/UpsampleRealityMeshParams.js.map +1 -1
  536. package/lib/esm/render/VisibleFeature.js.map +1 -1
  537. package/lib/esm/render/primitives/AuxChannelTable.js.map +1 -1
  538. package/lib/esm/render/primitives/ColorMap.js.map +1 -1
  539. package/lib/esm/render/primitives/DisplayParams.js.map +1 -1
  540. package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
  541. package/lib/esm/render/primitives/PointCloudPrimitive.js.map +1 -1
  542. package/lib/esm/render/primitives/PointStringParams.js.map +1 -1
  543. package/lib/esm/render/primitives/Polyface.js.map +1 -1
  544. package/lib/esm/render/primitives/PolylineParams.js.map +1 -1
  545. package/lib/esm/render/primitives/Primitives.js.map +1 -1
  546. package/lib/esm/render/primitives/Strokes.js.map +1 -1
  547. package/lib/esm/render/primitives/SurfaceParams.js.map +1 -1
  548. package/lib/esm/render/primitives/VertexKey.js.map +1 -1
  549. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  550. package/lib/esm/render/primitives/VertexTableSplitter.js.map +1 -1
  551. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  552. package/lib/esm/render/primitives/geometry/GeometryList.js.map +1 -1
  553. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  554. package/lib/esm/render/primitives/geometry/GeometryPrimitives.js.map +1 -1
  555. package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +1 -1
  556. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  557. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  558. package/lib/esm/render/webgl/AtmosphereUniforms.js.map +1 -1
  559. package/lib/esm/render/webgl/AttributeBuffers.js.map +1 -1
  560. package/lib/esm/render/webgl/AttributeMap.js.map +1 -1
  561. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  562. package/lib/esm/render/webgl/BatchState.js.map +1 -1
  563. package/lib/esm/render/webgl/BatchUniforms.js.map +1 -1
  564. package/lib/esm/render/webgl/BranchStack.js.map +1 -1
  565. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  566. package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
  567. package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
  568. package/lib/esm/render/webgl/ClipStack.js.map +1 -1
  569. package/lib/esm/render/webgl/ClipVolume.js.map +1 -1
  570. package/lib/esm/render/webgl/ClippingProgram.js.map +1 -1
  571. package/lib/esm/render/webgl/ColorInfo.js.map +1 -1
  572. package/lib/esm/render/webgl/Diagnostics.js.map +1 -1
  573. package/lib/esm/render/webgl/Disposable.js.map +1 -1
  574. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  575. package/lib/esm/render/webgl/EDL.js.map +1 -1
  576. package/lib/esm/render/webgl/EdgeGeometry.js.map +1 -1
  577. package/lib/esm/render/webgl/EdgeSettings.js.map +1 -1
  578. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  579. package/lib/esm/render/webgl/FloatRGBA.js.map +1 -1
  580. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  581. package/lib/esm/render/webgl/FrustumUniforms.js.map +1 -1
  582. package/lib/esm/render/webgl/GL.js.map +1 -1
  583. package/lib/esm/render/webgl/GLTimer.js.map +1 -1
  584. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  585. package/lib/esm/render/webgl/HiliteUniforms.js.map +1 -1
  586. package/lib/esm/render/webgl/IModelFrameLifecycle.js.map +1 -1
  587. package/lib/esm/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  588. package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
  589. package/lib/esm/render/webgl/Layer.js.map +1 -1
  590. package/lib/esm/render/webgl/LayerCommands.js.map +1 -1
  591. package/lib/esm/render/webgl/LightingUniforms.js.map +1 -1
  592. package/lib/esm/render/webgl/LineCode.js.map +1 -1
  593. package/lib/esm/render/webgl/Material.js.map +1 -1
  594. package/lib/esm/render/webgl/Matrix.js.map +1 -1
  595. package/lib/esm/render/webgl/Mesh.js.map +1 -1
  596. package/lib/esm/render/webgl/MeshData.js.map +1 -1
  597. package/lib/esm/render/webgl/MeshGeometry.js.map +1 -1
  598. package/lib/esm/render/webgl/PerformanceMetrics.js.map +1 -1
  599. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  600. package/lib/esm/render/webgl/PlanarGrid.js.map +1 -1
  601. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  602. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  603. package/lib/esm/render/webgl/PointString.js.map +1 -1
  604. package/lib/esm/render/webgl/Polyline.js.map +1 -1
  605. package/lib/esm/render/webgl/Primitive.js.map +1 -1
  606. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  607. package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
  608. package/lib/esm/render/webgl/RenderBuffer.js.map +1 -1
  609. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  610. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  611. package/lib/esm/render/webgl/RenderState.js.map +1 -1
  612. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  613. package/lib/esm/render/webgl/ScratchDrawParams.js.map +1 -1
  614. package/lib/esm/render/webgl/ScreenSpaceEffect.js.map +1 -1
  615. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  616. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  617. package/lib/esm/render/webgl/ShadowUniforms.js.map +1 -1
  618. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  619. package/lib/esm/render/webgl/StyleUniforms.js.map +1 -1
  620. package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
  621. package/lib/esm/render/webgl/Sync.js.map +1 -1
  622. package/lib/esm/render/webgl/System.js.map +1 -1
  623. package/lib/esm/render/webgl/Target.js.map +1 -1
  624. package/lib/esm/render/webgl/TargetGraphics.js.map +1 -1
  625. package/lib/esm/render/webgl/TargetUniforms.js.map +1 -1
  626. package/lib/esm/render/webgl/Technique.js.map +1 -1
  627. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  628. package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
  629. package/lib/esm/render/webgl/Texture.js.map +1 -1
  630. package/lib/esm/render/webgl/TextureDrape.js.map +1 -1
  631. package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
  632. package/lib/esm/render/webgl/ThematicUniforms.js.map +1 -1
  633. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  634. package/lib/esm/render/webgl/VertexLUT.js.map +1 -1
  635. package/lib/esm/render/webgl/ViewRectUniforms.js.map +1 -1
  636. package/lib/esm/render/webgl/VisibleTileFeatures.js.map +1 -1
  637. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +154 -154
  638. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  639. package/lib/esm/render/webgl/glsl/Animation.js +83 -83
  640. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  641. package/lib/esm/render/webgl/glsl/Atmosphere.js +266 -266
  642. package/lib/esm/render/webgl/glsl/Atmosphere.js.map +1 -1
  643. package/lib/esm/render/webgl/glsl/Blur.js +37 -37
  644. package/lib/esm/render/webgl/glsl/Blur.js.map +1 -1
  645. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +4 -4
  646. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  647. package/lib/esm/render/webgl/glsl/ClearTranslucent.js +3 -3
  648. package/lib/esm/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  649. package/lib/esm/render/webgl/glsl/Clipping.js +60 -60
  650. package/lib/esm/render/webgl/glsl/Clipping.js.map +1 -1
  651. package/lib/esm/render/webgl/glsl/Color.js +12 -12
  652. package/lib/esm/render/webgl/glsl/Color.js.map +1 -1
  653. package/lib/esm/render/webgl/glsl/Combine3Textures.js +7 -7
  654. package/lib/esm/render/webgl/glsl/Combine3Textures.js.map +1 -1
  655. package/lib/esm/render/webgl/glsl/CombineTextures.js +5 -5
  656. package/lib/esm/render/webgl/glsl/CombineTextures.js.map +1 -1
  657. package/lib/esm/render/webgl/glsl/Common.js +16 -16
  658. package/lib/esm/render/webgl/glsl/Common.js.map +1 -1
  659. package/lib/esm/render/webgl/glsl/Composite.js +71 -71
  660. package/lib/esm/render/webgl/glsl/Composite.js.map +1 -1
  661. package/lib/esm/render/webgl/glsl/CopyColor.js +6 -6
  662. package/lib/esm/render/webgl/glsl/CopyColor.js.map +1 -1
  663. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +3 -3
  664. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  665. package/lib/esm/render/webgl/glsl/CopyStencil.js +4 -4
  666. package/lib/esm/render/webgl/glsl/CopyStencil.js.map +1 -1
  667. package/lib/esm/render/webgl/glsl/Decode.js +65 -65
  668. package/lib/esm/render/webgl/glsl/Decode.js.map +1 -1
  669. package/lib/esm/render/webgl/glsl/EDL.js +103 -103
  670. package/lib/esm/render/webgl/glsl/EDL.js.map +1 -1
  671. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js +25 -25
  672. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  673. package/lib/esm/render/webgl/glsl/Edge.js +146 -146
  674. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  675. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +232 -232
  676. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  677. package/lib/esm/render/webgl/glsl/Fragment.js +41 -41
  678. package/lib/esm/render/webgl/glsl/Fragment.js.map +1 -1
  679. package/lib/esm/render/webgl/glsl/Instancing.js +21 -21
  680. package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
  681. package/lib/esm/render/webgl/glsl/Lighting.js +92 -92
  682. package/lib/esm/render/webgl/glsl/Lighting.js.map +1 -1
  683. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  684. package/lib/esm/render/webgl/glsl/LookupTable.js +19 -19
  685. package/lib/esm/render/webgl/glsl/LookupTable.js.map +1 -1
  686. package/lib/esm/render/webgl/glsl/Monochrome.js +13 -13
  687. package/lib/esm/render/webgl/glsl/Monochrome.js.map +1 -1
  688. package/lib/esm/render/webgl/glsl/PlanarClassification.js +188 -188
  689. package/lib/esm/render/webgl/glsl/PlanarClassification.js.map +1 -1
  690. package/lib/esm/render/webgl/glsl/PlanarGrid.js +22 -22
  691. package/lib/esm/render/webgl/glsl/PlanarGrid.js.map +1 -1
  692. package/lib/esm/render/webgl/glsl/PointCloud.js +28 -28
  693. package/lib/esm/render/webgl/glsl/PointCloud.js.map +1 -1
  694. package/lib/esm/render/webgl/glsl/PointString.js +9 -9
  695. package/lib/esm/render/webgl/glsl/PointString.js.map +1 -1
  696. package/lib/esm/render/webgl/glsl/Polyline.js +213 -213
  697. package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
  698. package/lib/esm/render/webgl/glsl/RealityMesh.js +83 -83
  699. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  700. package/lib/esm/render/webgl/glsl/RenderPass.js.map +1 -1
  701. package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js +9 -9
  702. package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
  703. package/lib/esm/render/webgl/glsl/SkyBox.js.map +1 -1
  704. package/lib/esm/render/webgl/glsl/SkySphere.js +49 -49
  705. package/lib/esm/render/webgl/glsl/SkySphere.js.map +1 -1
  706. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js +51 -51
  707. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  708. package/lib/esm/render/webgl/glsl/Surface.js +239 -239
  709. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  710. package/lib/esm/render/webgl/glsl/Thematic.js +134 -134
  711. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  712. package/lib/esm/render/webgl/glsl/Translucency.js +19 -19
  713. package/lib/esm/render/webgl/glsl/Translucency.js.map +1 -1
  714. package/lib/esm/render/webgl/glsl/Vertex.js +73 -73
  715. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  716. package/lib/esm/render/webgl/glsl/Viewport.js +38 -38
  717. package/lib/esm/render/webgl/glsl/Viewport.js.map +1 -1
  718. package/lib/esm/render/webgl/glsl/ViewportQuad.js.map +1 -1
  719. package/lib/esm/render/webgl/glsl/Wiremesh.js +10 -10
  720. package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -1
  721. package/lib/esm/render-primitives.js.map +1 -1
  722. package/lib/esm/request/Request.js.map +1 -1
  723. package/lib/esm/tile/B3dmReader.js.map +1 -1
  724. package/lib/esm/tile/BatchedTileIdMap.js.map +1 -1
  725. package/lib/esm/tile/CesiumAssetProvider.js.map +1 -1
  726. package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
  727. package/lib/esm/tile/ContextShareProvider.js.map +1 -1
  728. package/lib/esm/tile/DisclosedTileTreeSet.js.map +1 -1
  729. package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
  730. package/lib/esm/tile/GltfReader.js.map +1 -1
  731. package/lib/esm/tile/GraphicsCollector.js.map +1 -1
  732. package/lib/esm/tile/I3dmReader.js.map +1 -1
  733. package/lib/esm/tile/IModelTile.js.map +1 -1
  734. package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
  735. package/lib/esm/tile/IModelTileTree.js.map +1 -1
  736. package/lib/esm/tile/ImdlReader.js.map +1 -1
  737. package/lib/esm/tile/LRUTileList.js.map +1 -1
  738. package/lib/esm/tile/OPCFormatInterpreter.js.map +1 -1
  739. package/lib/esm/tile/PntsReader.js.map +1 -1
  740. package/lib/esm/tile/RealityTile.js.map +1 -1
  741. package/lib/esm/tile/RealityTileDrawArgs.js.map +1 -1
  742. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  743. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  744. package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  745. package/lib/esm/tile/Tile.js.map +1 -1
  746. package/lib/esm/tile/TileAdmin.d.ts +1 -1
  747. package/lib/esm/tile/TileAdmin.js +1 -1
  748. package/lib/esm/tile/TileAdmin.js.map +1 -1
  749. package/lib/esm/tile/TileContent.js.map +1 -1
  750. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  751. package/lib/esm/tile/TileGeometryCollector.js.map +1 -1
  752. package/lib/esm/tile/TileParams.js.map +1 -1
  753. package/lib/esm/tile/TileRequest.js.map +1 -1
  754. package/lib/esm/tile/TileRequestChannel.js.map +1 -1
  755. package/lib/esm/tile/TileRequestChannels.js.map +1 -1
  756. package/lib/esm/tile/TileStorage.js.map +1 -1
  757. package/lib/esm/tile/TileTree.js.map +1 -1
  758. package/lib/esm/tile/TileTreeOwner.js.map +1 -1
  759. package/lib/esm/tile/TileTreeParams.js.map +1 -1
  760. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  761. package/lib/esm/tile/TileTreeSupplier.js.map +1 -1
  762. package/lib/esm/tile/TileUsageMarker.js.map +1 -1
  763. package/lib/esm/tile/TileUser.js.map +1 -1
  764. package/lib/esm/tile/TileUserSet.js.map +1 -1
  765. package/lib/esm/tile/TiledGraphicsProvider.js.map +1 -1
  766. package/lib/esm/tile/ViewFlagOverrides.js.map +1 -1
  767. package/lib/esm/tile/internal.js.map +1 -1
  768. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  769. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  770. package/lib/esm/tile/map/BingElevation.js.map +1 -1
  771. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  772. package/lib/esm/tile/map/EllipsoidTerrainProvider.js.map +1 -1
  773. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  774. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  775. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  776. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  777. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  778. package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  779. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  780. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  781. package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
  782. package/lib/esm/tile/map/MapFeatureInfo.js.map +1 -1
  783. package/lib/esm/tile/map/MapLayerAuthentication.js.map +1 -1
  784. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  785. package/lib/esm/tile/map/MapLayerImageryProvider.js +2 -2
  786. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  787. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  788. package/lib/esm/tile/map/MapLayerTileTreeReference.js.map +1 -1
  789. package/lib/esm/tile/map/MapTile.js.map +1 -1
  790. package/lib/esm/tile/map/MapTileAvailability.js.map +1 -1
  791. package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
  792. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  793. package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
  794. package/lib/esm/tile/map/QuadId.js.map +1 -1
  795. package/lib/esm/tile/map/TerrainMeshProvider.js.map +1 -1
  796. package/lib/esm/tile/map/TerrainProvider.js.map +1 -1
  797. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  798. package/lib/esm/tile/map/WmsUtilities.js.map +1 -1
  799. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  800. package/lib/esm/tools/AccuDrawTool.js.map +1 -1
  801. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  802. package/lib/esm/tools/EditManipulator.js.map +1 -1
  803. package/lib/esm/tools/ElementSetTool.js.map +1 -1
  804. package/lib/esm/tools/EventController.js.map +1 -1
  805. package/lib/esm/tools/IdleTool.js.map +1 -1
  806. package/lib/esm/tools/MeasureTool.js.map +1 -1
  807. package/lib/esm/tools/PrimitiveTool.js.map +1 -1
  808. package/lib/esm/tools/SelectTool.js.map +1 -1
  809. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  810. package/lib/esm/tools/ToolAssistance.js.map +1 -1
  811. package/lib/esm/tools/ToolSettings.js.map +1 -1
  812. package/lib/esm/tools/ViewTool.js.map +1 -1
  813. package/lib/esm/webgl.js.map +1 -1
  814. package/lib/public/assets/MapLayerSources.json +25 -25
  815. package/lib/public/images/cesium-ion.svg +92 -92
  816. package/lib/public/images/imodeljs-icon.svg +2 -2
  817. package/lib/public/locales/en/CoreTools.json +477 -477
  818. package/lib/public/locales/en/iModelJs.json +170 -170
  819. package/lib/public/scripts/checkbrowser.js +24 -24
  820. package/package.json +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"GltfParser.js","sourceRoot":"","sources":["../../../src/gltf/GltfParser.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Rendering\n */\n\nimport { ByteStream, JsonUtils, Logger, utf8ToString } from \"@itwin/core-bentley\";\nimport { Matrix3d, Point3d, Point4d, Transform } from \"@itwin/core-geometry\";\nimport { GlbHeader, ImageSource, TileFormat } from \"@itwin/core-common\";\nimport type { DracoLoader, DracoMesh } from \"@loaders.gl/draco\";\nimport { FrontendLoggerCategory } from \"../FrontendLoggerCategory\";\nimport {\n getImageSourceFormatForMimeType, imageBitmapFromImageSource, imageElementFromImageSource, tryImageElementFromUrl,\n} from \"../ImageUtil\";\nimport { TextureImageSource } from \"../render/RenderTexture\";\nimport {\n DracoMeshCompression, getGltfNodeMeshIds, GltfAccessor, GltfBuffer, GltfBufferViewProps, GltfDictionary, gltfDictionaryIterator, GltfDocument, GltfId, GltfImage, GltfMesh, GltfMeshMode, GltfMeshPrimitive, GltfNode, traverseGltfNodes,\n} from \"./GltfSchema\";\nimport { Gltf } from \"./GltfModel\";\n\n/** @internal */\nexport interface ParseGltfLogger {\n log(message: string, type: \"error\" | \"warning\" | \"info\"): void;\n}\n\n/** Arguments supplied to [[parseGltf]].\n * @internal\n */\nexport interface ParseGltfArgs {\n logger?: ParseGltfLogger;\n gltf: Uint8Array | GltfDocument;\n noCreateImageBitmap?: boolean;\n baseUrl?: string;\n isCanceled?: boolean;\n upAxis?: \"y\" | \"z\"; // default \"y\"\n}\n\n/** Parse a [[GltfDocument]] or binary representation thereof to produce a [[Gltf.Model]].\n * This implementation is incomplete and not currently used.\n * @internal\n */\nexport async function parseGltf(args: ParseGltfArgs): Promise<Gltf.Model | undefined> {\n const source = args.gltf;\n let version: number;\n let json: GltfDocument;\n let binary: Uint8Array | undefined;\n\n if (source instanceof Uint8Array) {\n // It may be JSON - check for magic indicating glb.\n const buffer = ByteStream.fromUint8Array(source);\n if (TileFormat.Gltf !== buffer.readUint32()) {\n try {\n const utf8Json = utf8ToString(source);\n if (!utf8Json)\n return undefined;\n\n json = JSON.parse(utf8Json);\n version = 2;\n } catch (_) {\n return undefined;\n }\n } else {\n buffer.reset();\n const header = new GlbHeader(buffer);\n if (!header.isValid)\n return undefined;\n\n version = header.version;\n if (header.binaryChunk)\n binary = new Uint8Array(source.buffer, source.byteOffset + header.binaryChunk.offset, header.binaryChunk.length);\n\n try {\n const jsonBytes = new Uint8Array(source.buffer, source.byteOffset + header.jsonChunk.offset, header.jsonChunk.length);\n const jsonStr = utf8ToString(jsonBytes);\n if (undefined === jsonStr)\n return undefined;\n\n json = JSON.parse(jsonStr);\n } catch (_) {\n return undefined;\n }\n }\n } else {\n version = 2; // ###TODO verify against source.asset?.version\n json = source;\n }\n\n // asset is required in glTF 2, optional in glTF 1\n const asset = JsonUtils.asObject(json.asset);\n if (version === 2 && !asset)\n return undefined;\n\n const document: GltfDocument = {\n asset,\n scene: JsonUtils.asString(json.scene),\n extensions: JsonUtils.asObject(json.extensions),\n extensionsUsed: JsonUtils.asArray(json.extensionsUsed),\n extensionsRequired: JsonUtils.asArray(json.extensionsRequired),\n accessors: JsonUtils.asObject(json.accessors),\n buffers: JsonUtils.asObject(json.buffers),\n bufferViews: JsonUtils.asObject(json.bufferViews),\n images: JsonUtils.asObject(json.images),\n materials: JsonUtils.asObject(json.materials),\n meshes: JsonUtils.asObject(json.meshes),\n nodes: JsonUtils.asObject(json.nodes),\n samplers: JsonUtils.asObject(json.samplers),\n scenes: JsonUtils.asObject(json.scenes),\n textures: JsonUtils.asObject(json.textures),\n techniques: JsonUtils.asObject(json.techniques),\n };\n\n if (!document.meshes)\n return undefined;\n\n const logger = args.logger ?? {\n log: (message: string, type: \"error\" | \"warning\" | \"info\") => {\n const category = `${FrontendLoggerCategory.Package}.gltf`;\n const fn = type === \"error\" ? \"logError\" : (type === \"warning\" ? \"logWarning\" : \"logInfo\");\n Logger[fn](category, message);\n },\n };\n\n const parser = new GltfParser({\n document,\n version,\n upAxis: args.upAxis ?? \"y\",\n binary,\n baseUrl: args.baseUrl,\n logger,\n isCanceled: () => args.isCanceled ?? false,\n imageFromImageSource: (args.noCreateImageBitmap ?\n async (imgSrc) => imageElementFromImageSource(imgSrc) :\n async (imgSrc) => imageBitmapFromImageSource(imgSrc)),\n });\n\n return parser.parse();\n}\n\ninterface GltfParserOptions {\n document: GltfDocument;\n version: number;\n upAxis: \"y\" | \"z\";\n binary?: Uint8Array;\n baseUrl?: string;\n logger: ParseGltfLogger;\n imageFromImageSource: (source: ImageSource) => Promise<TextureImageSource>;\n isCanceled: () => boolean;\n}\n\ntype ParserBuffer = GltfBuffer & { resolvedBuffer?: Gltf.Buffer };\ntype ParserImage = GltfImage & { resolvedImage?: TextureImageSource };\n\nclass GltfParser {\n private readonly _version: number;\n private readonly _upAxis: \"y\" | \"z\";\n private readonly _baseUrl?: string;\n private readonly _logger: ParseGltfLogger;\n private readonly _isCanceled: () => boolean;\n private readonly _buffers: GltfDictionary<ParserBuffer>;\n private readonly _images: GltfDictionary<ParserImage>;\n private readonly _nodes: GltfDictionary<GltfNode>;\n private readonly _meshes: GltfDictionary<GltfMesh>;\n private readonly _accessors: GltfDictionary<GltfAccessor>;\n private readonly _sceneNodes: GltfId[];\n private readonly _bufferViews: GltfDictionary<GltfBufferViewProps>;\n private readonly _imageFromImageSource: (source: ImageSource) => Promise<TextureImageSource>;\n private readonly _dracoMeshes = new Map<DracoMeshCompression, DracoMesh>();\n\n public constructor(options: GltfParserOptions) {\n this._version = options.version;\n this._upAxis = options.upAxis;\n this._baseUrl = options.baseUrl;\n this._logger = options.logger;\n this._isCanceled = options.isCanceled;\n this._imageFromImageSource = options.imageFromImageSource;\n\n const emptyDict = { };\n const doc = options.document;\n this._buffers = doc.buffers ?? emptyDict;\n this._images = doc.images ?? emptyDict;\n this._nodes = doc.nodes ?? emptyDict;\n this._meshes = doc.meshes ?? emptyDict;\n this._bufferViews = doc.bufferViews ?? emptyDict;\n this._accessors = doc.accessors ?? emptyDict;\n\n if (options.binary) {\n const buffer = this._buffers[this._version === 2 ? 0 : \"binary_glTF\"];\n if (buffer && undefined === buffer.uri)\n buffer.resolvedBuffer = { data: options.binary };\n }\n\n let sceneNodes;\n if (doc.scenes && undefined !== doc.scene)\n sceneNodes = doc.scenes[doc.scene]?.nodes;\n\n this._sceneNodes = sceneNodes ?? Object.keys(this._nodes);\n }\n\n public async parse(): Promise<Gltf.Model | undefined> {\n // ###TODO_GLTF RTC_CENTER\n // ###TODO_GLTF pseudo-rtc bias (apply translation to each point at read time, for scalable mesh...)\n const toWorld = undefined;\n\n await this.resolveResources();\n if (this._isCanceled())\n return undefined;\n\n // ###TODO_GLTF compute content range (maybe do so elsewhere?)\n // I think spec says POSITION must specify min and max?\n\n const nodes: Gltf.Node[] = [];\n for (const nodeKey of this._sceneNodes) {\n const node = this._nodes[nodeKey];\n if (node)\n nodes.push(this.parseNode(node));\n }\n\n return {\n toWorld,\n nodes,\n };\n }\n\n private parseNode(node: GltfNode): Gltf.Node {\n const primitives = [];\n for (const meshId of getGltfNodeMeshIds(node)) {\n const mesh = this._meshes[meshId];\n if (!mesh)\n continue;\n\n const parsedPrimitives = this.parsePrimitives(mesh);\n for (const primitive of parsedPrimitives)\n primitives.push(primitive);\n }\n\n let toParent;\n if (node.matrix) {\n const origin = Point3d.create(node.matrix[12], node.matrix[13], node.matrix[14]);\n const matrix = Matrix3d.createRowValues(\n node.matrix[0], node.matrix[4], node.matrix[8],\n node.matrix[1], node.matrix[5], node.matrix[9],\n node.matrix[2], node.matrix[6], node.matrix[10],\n );\n\n toParent = Transform.createOriginAndMatrix(origin, matrix);\n } else if (node.rotation || node.scale || node.translation) {\n // SPEC: To compose the local transformation matrix, TRS properties MUST be converted to matrices and postmultiplied in the T * R * S order;\n // first the scale is applied to the vertices, then the rotation, and then the translation.\n const scale = Transform.createRefs(undefined, node.scale ? Matrix3d.createScale(node.scale[0], node.scale[1], node.scale[2]) : Matrix3d.identity);\n const rot = Transform.createRefs(undefined, node.rotation ? Matrix3d.createFromQuaternion(Point4d.create(node.rotation[0], node.rotation[1], node.rotation[2], node.rotation[3])) : Matrix3d.identity);\n rot.matrix.transposeInPlace(); // See comment on Matrix3d.createFromQuaternion\n const trans = Transform.createTranslation(node.translation ? new Point3d(node.translation[0], node.translation[1], node.translation[2]) : Point3d.createZero());\n\n toParent = scale.multiplyTransformTransform(rot);\n trans.multiplyTransformTransform(toParent, toParent);\n }\n\n return {\n primitives,\n toParent,\n };\n }\n\n private parsePrimitives(mesh: GltfMesh): Gltf.AnyPrimitive[] {\n const primitives: Gltf.AnyPrimitive[] = [];\n if (!mesh.primitives)\n return primitives;\n\n for (const primitive of mesh.primitives) {\n const parsedPrimitive = this.parsePrimitive(primitive);\n if (parsedPrimitive)\n primitives.push(parsedPrimitive);\n }\n\n return primitives;\n }\n\n private parsePrimitive(primitive: GltfMeshPrimitive): Gltf.AnyPrimitive | undefined {\n const meshMode = JsonUtils.asInt(primitive.mode, GltfMeshMode.Triangles);\n switch (meshMode) {\n case GltfMeshMode.TriangleStrip:\n return this.parseTrianglesPrimitive(primitive);\n default:\n // ###TODO_GLTF Make parser support all primitive types. Consumer can choose to do whatever with them.\n return undefined;\n }\n }\n\n private parseTrianglesPrimitive(primitive: GltfMeshPrimitive): Gltf.TrianglesPrimitive | undefined {\n const posId = primitive.attributes.POSITION;\n const pos = undefined !== posId ? this._accessors[posId] : undefined;\n if (!pos)\n return undefined;\n\n return undefined; // ###TODO_GLTF\n }\n\n private traverseNodes(nodeIds: Iterable<GltfId>): Iterable<GltfNode> {\n return traverseGltfNodes(nodeIds, this._nodes, new Set<GltfId>());\n }\n\n private async resolveResources(): Promise<void> {\n // Load any external images and buffers.\n await this._resolveResources();\n\n // If any meshes are draco-compressed, dynamically load the decoder module and then decode the meshes.\n const dracoMeshes: DracoMeshCompression[] = [];\n\n for (const node of this.traverseNodes(this._sceneNodes)) {\n for (const meshId of getGltfNodeMeshIds(node)) {\n const mesh = this._meshes[meshId];\n if (mesh?.primitives)\n for (const primitive of mesh.primitives)\n if (primitive.extensions?.KHR_draco_mesh_compression)\n dracoMeshes.push(primitive.extensions.KHR_draco_mesh_compression);\n }\n }\n\n if (dracoMeshes.length === 0)\n return;\n\n try {\n const dracoLoader = (await import(\"@loaders.gl/draco\")).DracoLoader;\n await Promise.all(dracoMeshes.map(async (x) => this.decodeDracoMesh(x, dracoLoader)));\n } catch (err) {\n Logger.logWarning(FrontendLoggerCategory.Render, \"Failed to decode draco-encoded glTF mesh\");\n Logger.logException(FrontendLoggerCategory.Render, err);\n }\n }\n\n private async _resolveResources(): Promise<void> {\n // ###TODO traverse the scene nodes to find resources referenced by them, instead of resolving everything - some resources may not\n // be required for the scene.\n const promises: Array<Promise<void>> = [];\n try {\n for (const buffer of gltfDictionaryIterator(this._buffers))\n if (!buffer.resolvedBuffer)\n promises.push(this.resolveBuffer(buffer));\n\n await Promise.all(promises);\n if (this._isCanceled())\n return;\n\n promises.length = 0;\n for (const image of gltfDictionaryIterator(this._images))\n if (!image.resolvedImage)\n promises.push(this.resolveImage(image));\n\n await Promise.all(promises);\n } catch (_) {\n // ###TODO_GLTF log\n }\n }\n\n private resolveUrl(uri: string): string | undefined {\n try {\n return new URL(uri, this._baseUrl).toString();\n } catch (_) {\n return undefined;\n }\n }\n\n private async resolveBuffer(buffer: ParserBuffer): Promise<void> {\n if (buffer.resolvedBuffer || undefined === buffer.uri)\n return;\n\n try {\n const url = this.resolveUrl(buffer.uri);\n const response = url ? await fetch(url) : undefined;\n if (this._isCanceled())\n return;\n\n const data = await response?.arrayBuffer();\n if (this._isCanceled())\n return;\n\n if (data)\n buffer.resolvedBuffer = { data: new Uint8Array(data) };\n } catch (_) {\n //\n }\n }\n\n private async resolveImage(image: ParserImage): Promise<void> {\n if (image.resolvedImage)\n return;\n\n interface BufferViewSource { bufferView?: GltfId, mimeType?: string }\n const bvSrc: BufferViewSource | undefined = undefined !== image.bufferView ? image : image.extensions?.KHR_binary_glTF;\n if (undefined !== bvSrc?.bufferView) {\n const format = undefined !== bvSrc.mimeType ? getImageSourceFormatForMimeType(bvSrc.mimeType) : undefined;\n const bufferView = this._bufferViews[bvSrc.bufferView];\n if (undefined === format || !bufferView || !bufferView.byteLength || bufferView.byteLength < 0)\n return;\n\n const bufferData = this._buffers[bufferView.buffer]?.resolvedBuffer?.data;\n if (!bufferData)\n return;\n\n const offset = bufferView.byteOffset ?? 0;\n const bytes = bufferData.subarray(offset, offset + bufferView.byteLength);\n try {\n const imageSource = new ImageSource(bytes, format);\n image.resolvedImage = await this._imageFromImageSource(imageSource);\n } catch (_) {\n //\n }\n\n return;\n }\n\n const url = undefined !== image.uri ? this.resolveUrl(image.uri) : undefined;\n if (undefined !== url)\n image.resolvedImage = await tryImageElementFromUrl(url);\n }\n\n private async decodeDracoMesh(ext: DracoMeshCompression, loader: typeof DracoLoader): Promise<void> {\n const bv = this._bufferViews[ext.bufferView];\n if (!bv || !bv.byteLength)\n return;\n\n let buf = this._buffers[bv.buffer]?.resolvedBuffer?.data;\n if (!buf)\n return;\n\n const offset = bv.byteOffset ?? 0;\n buf = buf.subarray(offset, offset + bv.byteLength);\n const mesh = await loader.parse(buf, { }); // NB: `options` argument declared optional but will produce exception if not supplied.\n if (mesh)\n this._dracoMeshes.set(ext, mesh);\n }\n}\n"]}
1
+ {"version":3,"file":"GltfParser.js","sourceRoot":"","sources":["../../../src/gltf/GltfParser.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { ByteStream, JsonUtils, Logger, utf8ToString } from \"@itwin/core-bentley\";\r\nimport { Matrix3d, Point3d, Point4d, Transform } from \"@itwin/core-geometry\";\r\nimport { GlbHeader, ImageSource, TileFormat } from \"@itwin/core-common\";\r\nimport type { DracoLoader, DracoMesh } from \"@loaders.gl/draco\";\r\nimport { FrontendLoggerCategory } from \"../FrontendLoggerCategory\";\r\nimport {\r\n getImageSourceFormatForMimeType, imageBitmapFromImageSource, imageElementFromImageSource, tryImageElementFromUrl,\r\n} from \"../ImageUtil\";\r\nimport { TextureImageSource } from \"../render/RenderTexture\";\r\nimport {\r\n DracoMeshCompression, getGltfNodeMeshIds, GltfAccessor, GltfBuffer, GltfBufferViewProps, GltfDictionary, gltfDictionaryIterator, GltfDocument, GltfId, GltfImage, GltfMesh, GltfMeshMode, GltfMeshPrimitive, GltfNode, traverseGltfNodes,\r\n} from \"./GltfSchema\";\r\nimport { Gltf } from \"./GltfModel\";\r\n\r\n/** @internal */\r\nexport interface ParseGltfLogger {\r\n log(message: string, type: \"error\" | \"warning\" | \"info\"): void;\r\n}\r\n\r\n/** Arguments supplied to [[parseGltf]].\r\n * @internal\r\n */\r\nexport interface ParseGltfArgs {\r\n logger?: ParseGltfLogger;\r\n gltf: Uint8Array | GltfDocument;\r\n noCreateImageBitmap?: boolean;\r\n baseUrl?: string;\r\n isCanceled?: boolean;\r\n upAxis?: \"y\" | \"z\"; // default \"y\"\r\n}\r\n\r\n/** Parse a [[GltfDocument]] or binary representation thereof to produce a [[Gltf.Model]].\r\n * This implementation is incomplete and not currently used.\r\n * @internal\r\n */\r\nexport async function parseGltf(args: ParseGltfArgs): Promise<Gltf.Model | undefined> {\r\n const source = args.gltf;\r\n let version: number;\r\n let json: GltfDocument;\r\n let binary: Uint8Array | undefined;\r\n\r\n if (source instanceof Uint8Array) {\r\n // It may be JSON - check for magic indicating glb.\r\n const buffer = ByteStream.fromUint8Array(source);\r\n if (TileFormat.Gltf !== buffer.readUint32()) {\r\n try {\r\n const utf8Json = utf8ToString(source);\r\n if (!utf8Json)\r\n return undefined;\r\n\r\n json = JSON.parse(utf8Json);\r\n version = 2;\r\n } catch (_) {\r\n return undefined;\r\n }\r\n } else {\r\n buffer.reset();\r\n const header = new GlbHeader(buffer);\r\n if (!header.isValid)\r\n return undefined;\r\n\r\n version = header.version;\r\n if (header.binaryChunk)\r\n binary = new Uint8Array(source.buffer, source.byteOffset + header.binaryChunk.offset, header.binaryChunk.length);\r\n\r\n try {\r\n const jsonBytes = new Uint8Array(source.buffer, source.byteOffset + header.jsonChunk.offset, header.jsonChunk.length);\r\n const jsonStr = utf8ToString(jsonBytes);\r\n if (undefined === jsonStr)\r\n return undefined;\r\n\r\n json = JSON.parse(jsonStr);\r\n } catch (_) {\r\n return undefined;\r\n }\r\n }\r\n } else {\r\n version = 2; // ###TODO verify against source.asset?.version\r\n json = source;\r\n }\r\n\r\n // asset is required in glTF 2, optional in glTF 1\r\n const asset = JsonUtils.asObject(json.asset);\r\n if (version === 2 && !asset)\r\n return undefined;\r\n\r\n const document: GltfDocument = {\r\n asset,\r\n scene: JsonUtils.asString(json.scene),\r\n extensions: JsonUtils.asObject(json.extensions),\r\n extensionsUsed: JsonUtils.asArray(json.extensionsUsed),\r\n extensionsRequired: JsonUtils.asArray(json.extensionsRequired),\r\n accessors: JsonUtils.asObject(json.accessors),\r\n buffers: JsonUtils.asObject(json.buffers),\r\n bufferViews: JsonUtils.asObject(json.bufferViews),\r\n images: JsonUtils.asObject(json.images),\r\n materials: JsonUtils.asObject(json.materials),\r\n meshes: JsonUtils.asObject(json.meshes),\r\n nodes: JsonUtils.asObject(json.nodes),\r\n samplers: JsonUtils.asObject(json.samplers),\r\n scenes: JsonUtils.asObject(json.scenes),\r\n textures: JsonUtils.asObject(json.textures),\r\n techniques: JsonUtils.asObject(json.techniques),\r\n };\r\n\r\n if (!document.meshes)\r\n return undefined;\r\n\r\n const logger = args.logger ?? {\r\n log: (message: string, type: \"error\" | \"warning\" | \"info\") => {\r\n const category = `${FrontendLoggerCategory.Package}.gltf`;\r\n const fn = type === \"error\" ? \"logError\" : (type === \"warning\" ? \"logWarning\" : \"logInfo\");\r\n Logger[fn](category, message);\r\n },\r\n };\r\n\r\n const parser = new GltfParser({\r\n document,\r\n version,\r\n upAxis: args.upAxis ?? \"y\",\r\n binary,\r\n baseUrl: args.baseUrl,\r\n logger,\r\n isCanceled: () => args.isCanceled ?? false,\r\n imageFromImageSource: (args.noCreateImageBitmap ?\r\n async (imgSrc) => imageElementFromImageSource(imgSrc) :\r\n async (imgSrc) => imageBitmapFromImageSource(imgSrc)),\r\n });\r\n\r\n return parser.parse();\r\n}\r\n\r\ninterface GltfParserOptions {\r\n document: GltfDocument;\r\n version: number;\r\n upAxis: \"y\" | \"z\";\r\n binary?: Uint8Array;\r\n baseUrl?: string;\r\n logger: ParseGltfLogger;\r\n imageFromImageSource: (source: ImageSource) => Promise<TextureImageSource>;\r\n isCanceled: () => boolean;\r\n}\r\n\r\ntype ParserBuffer = GltfBuffer & { resolvedBuffer?: Gltf.Buffer };\r\ntype ParserImage = GltfImage & { resolvedImage?: TextureImageSource };\r\n\r\nclass GltfParser {\r\n private readonly _version: number;\r\n private readonly _upAxis: \"y\" | \"z\";\r\n private readonly _baseUrl?: string;\r\n private readonly _logger: ParseGltfLogger;\r\n private readonly _isCanceled: () => boolean;\r\n private readonly _buffers: GltfDictionary<ParserBuffer>;\r\n private readonly _images: GltfDictionary<ParserImage>;\r\n private readonly _nodes: GltfDictionary<GltfNode>;\r\n private readonly _meshes: GltfDictionary<GltfMesh>;\r\n private readonly _accessors: GltfDictionary<GltfAccessor>;\r\n private readonly _sceneNodes: GltfId[];\r\n private readonly _bufferViews: GltfDictionary<GltfBufferViewProps>;\r\n private readonly _imageFromImageSource: (source: ImageSource) => Promise<TextureImageSource>;\r\n private readonly _dracoMeshes = new Map<DracoMeshCompression, DracoMesh>();\r\n\r\n public constructor(options: GltfParserOptions) {\r\n this._version = options.version;\r\n this._upAxis = options.upAxis;\r\n this._baseUrl = options.baseUrl;\r\n this._logger = options.logger;\r\n this._isCanceled = options.isCanceled;\r\n this._imageFromImageSource = options.imageFromImageSource;\r\n\r\n const emptyDict = { };\r\n const doc = options.document;\r\n this._buffers = doc.buffers ?? emptyDict;\r\n this._images = doc.images ?? emptyDict;\r\n this._nodes = doc.nodes ?? emptyDict;\r\n this._meshes = doc.meshes ?? emptyDict;\r\n this._bufferViews = doc.bufferViews ?? emptyDict;\r\n this._accessors = doc.accessors ?? emptyDict;\r\n\r\n if (options.binary) {\r\n const buffer = this._buffers[this._version === 2 ? 0 : \"binary_glTF\"];\r\n if (buffer && undefined === buffer.uri)\r\n buffer.resolvedBuffer = { data: options.binary };\r\n }\r\n\r\n let sceneNodes;\r\n if (doc.scenes && undefined !== doc.scene)\r\n sceneNodes = doc.scenes[doc.scene]?.nodes;\r\n\r\n this._sceneNodes = sceneNodes ?? Object.keys(this._nodes);\r\n }\r\n\r\n public async parse(): Promise<Gltf.Model | undefined> {\r\n // ###TODO_GLTF RTC_CENTER\r\n // ###TODO_GLTF pseudo-rtc bias (apply translation to each point at read time, for scalable mesh...)\r\n const toWorld = undefined;\r\n\r\n await this.resolveResources();\r\n if (this._isCanceled())\r\n return undefined;\r\n\r\n // ###TODO_GLTF compute content range (maybe do so elsewhere?)\r\n // I think spec says POSITION must specify min and max?\r\n\r\n const nodes: Gltf.Node[] = [];\r\n for (const nodeKey of this._sceneNodes) {\r\n const node = this._nodes[nodeKey];\r\n if (node)\r\n nodes.push(this.parseNode(node));\r\n }\r\n\r\n return {\r\n toWorld,\r\n nodes,\r\n };\r\n }\r\n\r\n private parseNode(node: GltfNode): Gltf.Node {\r\n const primitives = [];\r\n for (const meshId of getGltfNodeMeshIds(node)) {\r\n const mesh = this._meshes[meshId];\r\n if (!mesh)\r\n continue;\r\n\r\n const parsedPrimitives = this.parsePrimitives(mesh);\r\n for (const primitive of parsedPrimitives)\r\n primitives.push(primitive);\r\n }\r\n\r\n let toParent;\r\n if (node.matrix) {\r\n const origin = Point3d.create(node.matrix[12], node.matrix[13], node.matrix[14]);\r\n const matrix = Matrix3d.createRowValues(\r\n node.matrix[0], node.matrix[4], node.matrix[8],\r\n node.matrix[1], node.matrix[5], node.matrix[9],\r\n node.matrix[2], node.matrix[6], node.matrix[10],\r\n );\r\n\r\n toParent = Transform.createOriginAndMatrix(origin, matrix);\r\n } else if (node.rotation || node.scale || node.translation) {\r\n // SPEC: To compose the local transformation matrix, TRS properties MUST be converted to matrices and postmultiplied in the T * R * S order;\r\n // first the scale is applied to the vertices, then the rotation, and then the translation.\r\n const scale = Transform.createRefs(undefined, node.scale ? Matrix3d.createScale(node.scale[0], node.scale[1], node.scale[2]) : Matrix3d.identity);\r\n const rot = Transform.createRefs(undefined, node.rotation ? Matrix3d.createFromQuaternion(Point4d.create(node.rotation[0], node.rotation[1], node.rotation[2], node.rotation[3])) : Matrix3d.identity);\r\n rot.matrix.transposeInPlace(); // See comment on Matrix3d.createFromQuaternion\r\n const trans = Transform.createTranslation(node.translation ? new Point3d(node.translation[0], node.translation[1], node.translation[2]) : Point3d.createZero());\r\n\r\n toParent = scale.multiplyTransformTransform(rot);\r\n trans.multiplyTransformTransform(toParent, toParent);\r\n }\r\n\r\n return {\r\n primitives,\r\n toParent,\r\n };\r\n }\r\n\r\n private parsePrimitives(mesh: GltfMesh): Gltf.AnyPrimitive[] {\r\n const primitives: Gltf.AnyPrimitive[] = [];\r\n if (!mesh.primitives)\r\n return primitives;\r\n\r\n for (const primitive of mesh.primitives) {\r\n const parsedPrimitive = this.parsePrimitive(primitive);\r\n if (parsedPrimitive)\r\n primitives.push(parsedPrimitive);\r\n }\r\n\r\n return primitives;\r\n }\r\n\r\n private parsePrimitive(primitive: GltfMeshPrimitive): Gltf.AnyPrimitive | undefined {\r\n const meshMode = JsonUtils.asInt(primitive.mode, GltfMeshMode.Triangles);\r\n switch (meshMode) {\r\n case GltfMeshMode.TriangleStrip:\r\n return this.parseTrianglesPrimitive(primitive);\r\n default:\r\n // ###TODO_GLTF Make parser support all primitive types. Consumer can choose to do whatever with them.\r\n return undefined;\r\n }\r\n }\r\n\r\n private parseTrianglesPrimitive(primitive: GltfMeshPrimitive): Gltf.TrianglesPrimitive | undefined {\r\n const posId = primitive.attributes.POSITION;\r\n const pos = undefined !== posId ? this._accessors[posId] : undefined;\r\n if (!pos)\r\n return undefined;\r\n\r\n return undefined; // ###TODO_GLTF\r\n }\r\n\r\n private traverseNodes(nodeIds: Iterable<GltfId>): Iterable<GltfNode> {\r\n return traverseGltfNodes(nodeIds, this._nodes, new Set<GltfId>());\r\n }\r\n\r\n private async resolveResources(): Promise<void> {\r\n // Load any external images and buffers.\r\n await this._resolveResources();\r\n\r\n // If any meshes are draco-compressed, dynamically load the decoder module and then decode the meshes.\r\n const dracoMeshes: DracoMeshCompression[] = [];\r\n\r\n for (const node of this.traverseNodes(this._sceneNodes)) {\r\n for (const meshId of getGltfNodeMeshIds(node)) {\r\n const mesh = this._meshes[meshId];\r\n if (mesh?.primitives)\r\n for (const primitive of mesh.primitives)\r\n if (primitive.extensions?.KHR_draco_mesh_compression)\r\n dracoMeshes.push(primitive.extensions.KHR_draco_mesh_compression);\r\n }\r\n }\r\n\r\n if (dracoMeshes.length === 0)\r\n return;\r\n\r\n try {\r\n const dracoLoader = (await import(\"@loaders.gl/draco\")).DracoLoader;\r\n await Promise.all(dracoMeshes.map(async (x) => this.decodeDracoMesh(x, dracoLoader)));\r\n } catch (err) {\r\n Logger.logWarning(FrontendLoggerCategory.Render, \"Failed to decode draco-encoded glTF mesh\");\r\n Logger.logException(FrontendLoggerCategory.Render, err);\r\n }\r\n }\r\n\r\n private async _resolveResources(): Promise<void> {\r\n // ###TODO traverse the scene nodes to find resources referenced by them, instead of resolving everything - some resources may not\r\n // be required for the scene.\r\n const promises: Array<Promise<void>> = [];\r\n try {\r\n for (const buffer of gltfDictionaryIterator(this._buffers))\r\n if (!buffer.resolvedBuffer)\r\n promises.push(this.resolveBuffer(buffer));\r\n\r\n await Promise.all(promises);\r\n if (this._isCanceled())\r\n return;\r\n\r\n promises.length = 0;\r\n for (const image of gltfDictionaryIterator(this._images))\r\n if (!image.resolvedImage)\r\n promises.push(this.resolveImage(image));\r\n\r\n await Promise.all(promises);\r\n } catch (_) {\r\n // ###TODO_GLTF log\r\n }\r\n }\r\n\r\n private resolveUrl(uri: string): string | undefined {\r\n try {\r\n return new URL(uri, this._baseUrl).toString();\r\n } catch (_) {\r\n return undefined;\r\n }\r\n }\r\n\r\n private async resolveBuffer(buffer: ParserBuffer): Promise<void> {\r\n if (buffer.resolvedBuffer || undefined === buffer.uri)\r\n return;\r\n\r\n try {\r\n const url = this.resolveUrl(buffer.uri);\r\n const response = url ? await fetch(url) : undefined;\r\n if (this._isCanceled())\r\n return;\r\n\r\n const data = await response?.arrayBuffer();\r\n if (this._isCanceled())\r\n return;\r\n\r\n if (data)\r\n buffer.resolvedBuffer = { data: new Uint8Array(data) };\r\n } catch (_) {\r\n //\r\n }\r\n }\r\n\r\n private async resolveImage(image: ParserImage): Promise<void> {\r\n if (image.resolvedImage)\r\n return;\r\n\r\n interface BufferViewSource { bufferView?: GltfId, mimeType?: string }\r\n const bvSrc: BufferViewSource | undefined = undefined !== image.bufferView ? image : image.extensions?.KHR_binary_glTF;\r\n if (undefined !== bvSrc?.bufferView) {\r\n const format = undefined !== bvSrc.mimeType ? getImageSourceFormatForMimeType(bvSrc.mimeType) : undefined;\r\n const bufferView = this._bufferViews[bvSrc.bufferView];\r\n if (undefined === format || !bufferView || !bufferView.byteLength || bufferView.byteLength < 0)\r\n return;\r\n\r\n const bufferData = this._buffers[bufferView.buffer]?.resolvedBuffer?.data;\r\n if (!bufferData)\r\n return;\r\n\r\n const offset = bufferView.byteOffset ?? 0;\r\n const bytes = bufferData.subarray(offset, offset + bufferView.byteLength);\r\n try {\r\n const imageSource = new ImageSource(bytes, format);\r\n image.resolvedImage = await this._imageFromImageSource(imageSource);\r\n } catch (_) {\r\n //\r\n }\r\n\r\n return;\r\n }\r\n\r\n const url = undefined !== image.uri ? this.resolveUrl(image.uri) : undefined;\r\n if (undefined !== url)\r\n image.resolvedImage = await tryImageElementFromUrl(url);\r\n }\r\n\r\n private async decodeDracoMesh(ext: DracoMeshCompression, loader: typeof DracoLoader): Promise<void> {\r\n const bv = this._bufferViews[ext.bufferView];\r\n if (!bv || !bv.byteLength)\r\n return;\r\n\r\n let buf = this._buffers[bv.buffer]?.resolvedBuffer?.data;\r\n if (!buf)\r\n return;\r\n\r\n const offset = bv.byteOffset ?? 0;\r\n buf = buf.subarray(offset, offset + bv.byteLength);\r\n const mesh = await loader.parse(buf, { }); // NB: `options` argument declared optional but will produce exception if not supplied.\r\n if (mesh)\r\n this._dracoMeshes.set(ext, mesh);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GltfSchema.js","sourceRoot":"","sources":["../../../src/gltf/GltfSchema.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Rendering\n */\n\n/** Enumerates the types of [[GltfMeshPrimitive]] topologies.\n * @internal\n */\nexport enum GltfMeshMode {\n Points = 0,\n Lines = 1,\n LineStrip = 3,\n Triangles = 4,\n /** Not currently supported. */\n TriangleStrip = 5,\n /** Not currently supported. */\n TriangleFan = 6,\n}\n\n/** Enumerates the basic data types supported by accessors, material values, technique uniforms, etc.\n * @internal\n */\nexport enum GltfDataType {\n SignedByte = 0x1400,\n UnsignedByte = 0x1401,\n SignedShort = 5122,\n UnsignedShort = 5123,\n UInt32 = 5125,\n Float = 5126,\n Rgb = 6407,\n Rgba = 6408,\n IntVec2 = 0x8b53,\n IntVec3 = 0x8b54,\n FloatVec2 = 35664,\n FloatVec3 = 35665,\n FloatVec4 = 35666,\n FloatMat3 = 35675,\n FloatMat4 = 35676,\n Sampler2d = 35678,\n}\n\n/** @internal */\nexport enum GltfMagFilter {\n Nearest = 9728,\n Linear = 9729,\n}\n\n/** @internal */\nexport enum GltfMinFilter {\n Nearest = GltfMagFilter.Nearest,\n Linear = GltfMagFilter.Linear,\n NearestMipMapNearest = 9984,\n LinearMipMapNearest = 9985,\n NearestMipMapLinear = 9986,\n LinearMipMapLinear = 9987,\n}\n\n/** Describes how texture coordinates outside of the range [0..1] are handled.\n * @internal\n */\nexport enum GltfWrapMode {\n ClampToEdge = 33071,\n MirroredRepeat = 33648,\n Repeat = 10497,\n}\n\n/** Describes the intended target of a [[GltfBufferViewProps]].\n * @internal\n */\nexport enum GltfBufferTarget {\n ArrayBuffer = 34962,\n ElementArrayBuffer = 24963,\n}\n\n/** The type used to refer to an entry in a GltfDictionary in a glTF 1.0 asset. @internal */\nexport type Gltf1Id = string;\n/** The type used to refer to an entry in a GltfDictionary in a glTF 2.0 asset. @internal */\nexport type Gltf2Id = number;\n/** The type used to refer to an entry in a GltfDictionary. @internal */\nexport type GltfId = Gltf1Id | Gltf2Id;\n\n/** A collection of resources of some type defined at the top-level of a [[GltfDocument]].\n * In glTF 1.0, these are defined as objects; each resource is referenced and accessed by its string key.\n * In glTF 2.0, these are defined as arrays; each resource is referenced and accessed by its integer array index.\n * @internal\n */\nexport interface GltfDictionary<T extends GltfChildOfRootProperty> {\n [key: GltfId]: T | undefined;\n}\n\n/** @internal */\nexport interface GltfStringMap<T> {\n [key: string]: T | undefined;\n}\n\n/** Iterate the contents of a [[GltfDictionary]].\n * @internal\n */\nexport function * gltfDictionaryIterator<T extends GltfChildOfRootProperty>(dict: GltfDictionary<T>): Iterable<T> {\n if (Array.isArray(dict)) {\n for (const elem of dict)\n yield elem;\n } else {\n for (const key of Object.keys(dict)) {\n const value = dict[key];\n if (undefined !== value)\n yield value;\n }\n }\n}\n\n/** Optional extensions applied to a [[GltfProperty]] to enable behavior not defined in the core specification.\n * @internal\n */\nexport type GltfExtensions = GltfStringMap<unknown>;\n\n/** The base interface provided by most objects in a glTF asset, permitting additional data to be associated with the object.\n * @internal\n */\nexport interface GltfProperty {\n extensions?: GltfExtensions;\n extras?: any;\n}\n\n/** The base interface provided by top-level properties of a [[GltfDocument]].\n * @internal\n */\nexport interface GltfChildOfRootProperty extends GltfProperty {\n /** Optional name, strictly for human consumption. */\n name?: string;\n}\n\n/** @internal */\nexport interface DracoMeshCompression {\n bufferView: GltfId;\n // TEXCOORD_0, POSITION, etc\n attributes: GltfStringMap<number>;\n}\n\n/** @internal */\nexport interface MeshFeature extends GltfProperty {\n featureCount: number;\n nullFeatureId?: number;\n label?: string;\n propertyTable?: number;\n texture?: unknown;\n attribute?: number;\n}\n\n/** @internal */\nexport interface MeshFeatures {\n featureIds: MeshFeature[];\n}\n\n/** A unit of geometry belonging to a [[GltfMesh]]. @internal */\nexport interface GltfMeshPrimitive extends GltfProperty {\n /** Maps the name of each mesh attribute semantic to the Id of the [[GltfAccessor]] providing the attribute's data. */\n attributes: GltfStringMap<GltfId>;\n /** The Id of the [[GltfAccessor]] providing the vertex indices. */\n indices?: GltfId;\n /** The Id of the [[GltfMaterial]] to apply to the primitive when rendering. */\n material?: GltfId;\n /** The primitive topology type. */\n mode?: GltfMeshMode;\n /** Morph targets - currently unsupported. */\n targets?: GltfStringMap<GltfId>;\n extensions?: GltfExtensions & {\n /** The [CESIUM_primitive_outline](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Vendor/CESIUM_primitive_outline) extension\n * describes how to draw outline edges for a triangle mesh.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n CESIUM_primitive_outline?: {\n /** The Id of the [[GltfBufferViewProps]] supplying the endpoints of each edge as indices into the triangle mesh's vertex array.\n * The number of indices must be even; each consecutive pair of indices describes one line segment. No connectivity between\n * line segments is implied.\n */\n indices?: GltfId;\n };\n /** The [KHR_draco_mesh_compression](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_draco_mesh_compression/README.md) extension\n * allows glTF to support geometry compressed with Draco geometry compression.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n KHR_draco_mesh_compression?: DracoMeshCompression;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n EXT_mesh_features?: MeshFeatures;\n };\n}\n\n/** A collection of [[GltfMeshPrimitive]]s to be rendered. Each mesh is referenced by a node. Multiple nodes can refer to the same mesh.\n * The node's transform is applied when rendering the mesh.\n * @internal\n */\nexport interface GltfMesh extends GltfChildOfRootProperty {\n /** The collection of primitives to be rendered. */\n primitives?: GltfMeshPrimitive[];\n /** For morph targets - currently unsupported. */\n weights?: number[];\n}\n\n/** Properties common to [[Gltf1Node]] and [[Gltf2Node]]. @internal */\nexport interface GltfNodeBaseProps {\n /** The Ids of the child nodes. @see [[GltfNode]]. */\n children?: GltfId[];\n /** Currently ignored. */\n camera?: GltfId;\n /** Currently ignored. */\n skin?: GltfId;\n /** A 4x4 column-major transformation matrix. Mutually exclusive with [[rotation]], [[scale]], and [[translation]]. */\n matrix?: number[];\n /** Unit quaternion as [x, y, z, w], where w is the scalar. */\n rotation?: number[];\n /** Non-uniform scale as [x, y, z]. */\n scale?: number[];\n /** Translation as [x, y, z]. */\n translation?: number[];\n}\n\n/** glTF 1.0 representation of a [[GltfNode]]. Unlike a [[Gltf2Node]], a Gltf1Node may refer to any number of [[GltfMesh]]es.\n * @internal\n */\nexport interface Gltf1Node extends GltfChildOfRootProperty, GltfNodeBaseProps {\n /** The Ids of the [[GltfMesh]]es to be rendered by this node.\n * @note The spec defines this as an array of strings, but the original implementation of [[GltfReader]] was written to treat it as a string instead.\n * In case this was because of non-spec-compliant glTF that placed a string here instead of an array, either is permitted.\n */\n meshes?: GltfId[] | string;\n mesh?: never;\n /** Currently ignored. */\n jointName?: GltfId;\n /** Currently ignored. */\n skeletons?: GltfId[];\n}\n\n/** glTF 2.0 representation of a [[GltfNode]]. Unlike a [[Gltf1Node]], a Gltf2Node may refer to at most one [[GltfMesh]].\n * @internal\n */\nexport interface Gltf2Node extends GltfChildOfRootProperty, GltfNodeBaseProps {\n /** The Id of the [[GltfMesh]] to be rendered by this node. */\n mesh?: GltfId;\n meshes?: never;\n /** Morph targets - currently ignored. */\n weights?: number[];\n}\n\n/** Describes a node in a [[GltfScene]]. Each node may be associated with zero, one (glTF 2.0), or any number of (glTF 1.0) [[GltfMesh]]es.\n * Each node may define a transform. Each node may have any number of child nodes. A child node's transform is multiplied by its parent node's transform.\n * Some nodes may be associated with other types of data like cameras, skins, lights, etc - these types of data are currently unsupported.\n * Rendering a node means rendering its meshes and the meshes of all of its descendants, with transforms applied.\n * @internal\n */\nexport type GltfNode = Gltf1Node | Gltf2Node;\n\n/** Get the Ids of the meshes associated with a node.\n * @internal\n */\nexport function getGltfNodeMeshIds(node: GltfNode): GltfId[] {\n if (undefined !== node.meshes)\n return typeof node.meshes === \"string\" ? [node.meshes] : node.meshes;\n else if (undefined !== node.mesh)\n return [node.mesh];\n\n return [];\n}\n\n/** @internal */\nexport function * traverseGltfNodes(ids: Iterable<GltfId>, nodes: GltfDictionary<GltfNode>, traversed: Set<GltfId>): Iterable<GltfNode> {\n for (const id of ids) {\n if (traversed.has(id))\n throw new Error(\"Cycle detected while traversing glTF nodes\");\n\n const node = nodes[id];\n if (!node)\n continue;\n\n traversed.add(id);\n yield node;\n if (node.children)\n for (const child of traverseGltfNodes(node.children, nodes, traversed))\n yield child;\n }\n}\n\n/** Describes a scene graph that composes any number of [[GltfNode]]s to produce a rendering of the [[GltfDocument]] asset.\n * An asset may define any number of scenes; the default scene is specified by [[Gltf.scene]].\n * @internal\n */\nexport interface GltfScene extends GltfChildOfRootProperty {\n /** The Ids of the nodes comprising the scene graph. */\n nodes?: GltfId[];\n}\n\n/** Provides metadata about a [[GltfDocument]] asset.\n * @internal\n */\nexport interface GltfAsset extends GltfProperty {\n /** A copyright message suitable for display to credit the content creator. */\n copyright?: string;\n /** The name of the tool that generated the asset. */\n generator?: string;\n /** The glTF version targeted by the asset, in the form \"major.minor\" where \"major\" and \"minor\" are integers. */\n version: string;\n /** The minimum glTF version required to properly load this asset, in the same form as [[version]].\n * This minimum version must be no greater than [[version]].\n */\n minVersion?: string;\n}\n\n/** Describes an image such as one used for a [[GltfTexture]]. The image may be referenced by a [[uri]] or a [[bufferView]].\n * @internal\n */\nexport interface GltfImage extends GltfChildOfRootProperty {\n /** URI from which the image data can be obtained, either as a base-64-encoded data URI or an external resource.\n * Mutually exclusive with [[bufferView]].\n */\n uri?: string;\n /** The image's media type. This property is required if [[bufferView]] is defined. */\n mimeType?: \"image/jpeg\" | \"image/png\";\n /** The Id of the [[GltfBufferViewProps]] containing the image data. Mutually exclusive with [[uri]]. */\n bufferView?: GltfId;\n extensions?: GltfExtensions & {\n /** The [KHR_binary_glTF](https://github.com/KhronosGroup/glTF/tree/main/extensions/1.0/Khronos/KHR_binary_glTF) allows an image to\n * be embedded in a binary chunk appended to the glTF asset's JSON, instead of being referenced by an external URI.\n * This is superseded in glTF 2.0 by support for the glb file format specification.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n KHR_binary_glTF?: {\n /** The Id of the [[GltfBufferViewProps]] that contains the binary image data. */\n bufferView?: GltfId;\n /** Required - @see [[GltfImage.mimeType]]. */\n mimeType?: string;\n };\n };\n}\n\n/** Describes a reference to a [[GltfTexture]]. @internal */\nexport interface GltfTextureInfo extends GltfProperty {\n /** The Id of the [[GltfTexture]]. */\n index: GltfId;\n /** The set index of the texture's TEXCOORD attribute used for texture coordinate mapping.\n * For example, if `texCoord` is `2`, an attribute named `TEXCOORD_2` must exist containing the texture coordinates.\n * Default: 0.\n */\n texCoord?: number;\n}\n\n/** Describes a texture and its sampler.\n * @internal\n */\nexport interface GltfTexture extends GltfChildOfRootProperty {\n /** The Id of the [[GltfSampler]] used by this texture.\n * If undefined, a sampler with repeat wrapping and auto filtering should be used by default.\n */\n sampler?: GltfId;\n /** The Id of the [[GltfImage]] used by this texture.\n * If undefined, an extension or other mechanism should supply an alternate image source - otherwise, the behavior is undefined.\n */\n source?: GltfId;\n}\n\n/** Describes the filtering and wrapping behavior to be applied to a [[GltfTexture]].\n * @note The implementation currently does not support MirroredRepeat and does not support different wrapping for U and V;\n * effectively, unless `wrapS` or `wrapT` is set to ClampToEdge, the sampler will use GltfWrapMode.Repeat.\n * @internal\n */\nexport interface GltfSampler extends GltfChildOfRootProperty {\n /** Magnification filter. */\n magFilter?: GltfMagFilter;\n /** Minification filter. */\n minFilter?: GltfMinFilter;\n /** S (U) wrapping mode. Default: Repeat. */\n wrapS?: GltfWrapMode;\n /** T (V) wrapping mode. Default: Repeat. */\n wrapT?: GltfWrapMode;\n}\n\n/** GL states that can be enabled by a [[GltfTechnique]]. Only those queried by this implementation are enumerated.\n * @internal\n */\nexport enum GltfTechniqueState {\n /** Enables alpha blending. */\n Blend = 3042,\n}\n\n/** For glTF 1.0 only, describes shader programs and shader state associated with a [[Gltf1Material]], used to render meshes associated with the material.\n * This implementation uses it strictly to identify techniques that require alpha blending.\n * @internal\n */\nexport interface GltfTechnique extends GltfChildOfRootProperty {\n /** GL render states to be applied by the technique. */\n states?: {\n /** An array of integers corresponding to boolean GL states that should be enabled using GL's `enable` function.\n * For example, the value [[GltfTechniqueState.Blend]] (3042) indicates that blending should be enabled.\n */\n enable?: GltfTechniqueState[];\n };\n}\n\n/** @internal */\nexport interface Gltf1Material extends GltfChildOfRootProperty {\n diffuse?: string;\n emission?: number[];\n shininess?: number;\n specular?: number[];\n technique?: GltfId;\n values?: {\n texStep?: number[];\n color?: number[];\n tex?: number | string;\n };\n}\n\n/** @internal */\nexport interface GltfMaterialPbrMetallicRoughness extends GltfProperty {\n // Default [1,1,1,1]\n baseColorFactor?: number[];\n baseColorTexture?: GltfTextureInfo;\n // Default 1\n metallicFactor?: number;\n // Default 1\n roughnessFactor?: number;\n metallicRoughnessTexture?: GltfTextureInfo;\n}\n\n/** @internal */\nexport type GltfAlphaMode = \"OPAQUE\" | \"MASK\" | \"BLEND\";\n\n/** @internal */\nexport interface Gltf2Material extends GltfChildOfRootProperty {\n pbrMetallicRoughness?: GltfMaterialPbrMetallicRoughness;\n normalTexture?: GltfTextureInfo;\n occlusionTexture?: unknown;\n emissiveTexture?: GltfTextureInfo;\n emissiveFactor?: number[];\n // Default OPAQUE\n alphaMode?: GltfAlphaMode;\n // Default 0.5. Ignored unless alphaMode=MASK\n alphaCutoff?: number;\n doubleSided?: boolean;\n extensions?: GltfExtensions & {\n /** The [KHR_materials_unlit](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_unlit) extension\n * indicates that the material should be displayed without lighting. The extension adds no additional properties; it is effectively a boolean flag.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n KHR_materials_unlit?: { };\n /** The [KHR_techniques_webgl extension](https://github.com/KhronosGroup/glTF/blob/c1c12bd100e88ff468ccef1cb88cfbec56a69af2/extensions/2.0/Khronos/KHR_techniques_webgl/README.md)\n * allows \"techniques\" to be associated with [[GltfMaterial]]s. Techniques can supply custom shader programs to render geometry; this was a core feature of glTF 1.0 (see [[GltfTechnique]]).\n * Here, it is only used to extract uniform values.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n KHR_techniques_webgl?: {\n technique?: number;\n // An object containing uniform values. Each property name corresponds to a uniform in the material's technique and must conform to that uniform's type and count properties.\n // A handful of uniforms referenced in this implementation by name are defined below.\n values?: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n u_texStep?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n u_color?: number[];\n // Diffuse texture.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n u_diffuse?: { index: number, texCoord: number };\n [k: string]: unknown | undefined;\n };\n };\n };\n}\n\n/** @internal */\nexport type GltfMaterial = Gltf1Material | Gltf2Material;\n\n/** @internal */\nexport function isGltf1Material(material: GltfMaterial): material is Gltf1Material {\n const mat1 = material as Gltf1Material;\n return undefined !== mat1.technique || undefined !== mat1.values;\n}\n\n/** @internal */\nexport interface GltfBuffer extends GltfChildOfRootProperty {\n uri?: string;\n byteLength?: number;\n}\n\n/** @internal */\nexport interface GltfBufferViewProps extends GltfChildOfRootProperty {\n buffer: GltfId;\n byteLength?: number;\n byteOffset?: number;\n byteStride?: number;\n target?: GltfBufferTarget;\n}\n\n/** @internal */\nexport interface GltfAccessor extends GltfChildOfRootProperty {\n bufferView?: GltfId;\n byteOffset?: number;\n componentType?: GltfDataType.SignedByte | GltfDataType.UnsignedByte | GltfDataType.SignedShort | GltfDataType.UnsignedShort | GltfDataType.UInt32 | GltfDataType.Float;\n normalized?: boolean;\n count: number;\n type: \"SCALAR\" | \"VEC2\" | \"VEC3\" | \"VEC4\" | \"MAT2\" | \"MAT3\" | \"MAT4\";\n max?: number[];\n min?: number[];\n sparse?: unknown; // ###TODO sparse accessors\n extensions?: GltfExtensions & {\n /** Quantized attributes for glTF 1.0. Superceded by KHR_mesh_quantization. */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n WEB3D_quantized_attributes?: {\n decodedMin: number[];\n decodedMax: number[];\n /** Currently ignored. */\n decodeMatrix: number[];\n };\n };\n}\n\n/** @internal */\nexport namespace GltfStructuralMetadata {\n export type ClassPropertyType = \"SCALAR\" | \"STRING\" | \"BOOLEAN\" | \"ENUM\" | \"VEC2\" | \"VEC3\" | \"VEC4\" | \"MAT2\" | \"MAT3\" | \"MAT4\" | string;\n export type ClassPropertyComponentType = \"INT8\" | \"UINT8\" | \"INT16\" | \"UINT16\" | \"INT32\" | \"UINT32\" | \"INT64\" | \"UINT64\" | \"FLOAT32\" | \"FLOAT64\" | string;\n\n // Ignoring VECN and MATN types because they complicate offset, scale, min, and max, all of which are otherwise only relevant to SCALAR in which case they're all just numbers.\n export interface ClassProperty extends GltfProperty {\n type: ClassPropertyType;\n name?: string;\n description?: string;\n componentType?: ClassPropertyComponentType;\n enumType?: string;\n array?: boolean;\n count?: number;\n normalized?: boolean;\n offset?: number;\n scale?: number;\n min?: number;\n max?: number;\n required?: boolean;\n noData?: unknown;\n default?: unknown;\n semantic?: string;\n }\n\n export interface EnumValue extends GltfProperty {\n name: string;\n value: number; // an integer\n description?: string;\n }\n\n export interface Enum extends GltfProperty {\n values: EnumValue[];\n // Default: UINT16\n valueType?: \"INT8\" | \"UINT8\" | \"INT16\" | \"UINT16\" | \"INT32\" | \"UINT32\" | \"INT64\" | \"UINT64\" | string;\n name?: string;\n description?: string;\n }\n\n export interface Class extends GltfProperty {\n name?: string;\n description?: string;\n properties?: {\n [propertyId: string]: ClassProperty | undefined;\n };\n }\n\n export interface Schema extends GltfProperty {\n id: string;\n name?: string;\n description?: string;\n version?: string;\n classes?: Class[];\n enums?: Enum[];\n }\n\n // Ignoring VECN and MATN types because they complicate offset, scale, min, and max, all of which are otherwise only relevant to SCALAR in which case they're all just numbers.\n export interface PropertyTableProperty extends GltfProperty {\n values: GltfId;\n arrayOffsets?: GltfId;\n stringOffsets?: GltfId;\n arrayOffsetType?: \"UINT8\" | \"UINT16\" | \"UINT32\" | \"UINT64\" | string;\n stringOffsetType?: \"UINT8\" | \"UINT16\" | \"UINT32\" | \"UINT64\" | string;\n offset?: number;\n scale?: number;\n min?: number;\n max?: number;\n }\n\n export interface PropertyTable {\n class: string;\n count: number;\n properties?: {\n [propertyId: string]: PropertyTableProperty | undefined;\n };\n }\n\n export interface Extension extends GltfProperty {\n // Exactly one of schema or schemaUri must be present.\n schemaUri?: string;\n schema?: Schema;\n propertyTables?: PropertyTable[];\n propertyTextures?: unknown;\n propertyAttributes?: unknown;\n }\n}\n\n/** Describes the top-level structure of a glTF asset.\n * This interface, along with all of the related Gltf* types defined in this file, is primarily based upon the [official glTF 2.0 specification](https://www.khronos.org/registry/glTF/specs/2.0/glTF-2.0.html).\n * However, it can also represent a [glTF 1.0](https://github.com/KhronosGroup/glTF/tree/main/specification/1.0#reference-node) asset.\n * Some types are combined. For example, the top-level dictionaries in glTF 1.0 are objects, while in glTF 2.0 they are arrays; the GltfDictionary interface supports accessing\n * items using either strings or numeric indexes represented by [[GltfId]].\n * For types that differ significantly between the two specs, Gltf1* and Gltf2* versions are defined (e.g., GltfMaterial is a union of Gltf1Material and Gltf2Material).\n * These interfaces also accommodate some deviations from both specs that are known to exist in the wild.\n * Most aspects of the specifications that are not implemented here are omitted (e.g., skinning, animations).\n * @internal\n */\nexport interface GltfDocument extends GltfProperty {\n /** Metadata about the glTF asset.\n * @note This property is required in glTF 2.0, but optional in 1.0.\n */\n asset?: GltfAsset;\n /** The Id of the default [[GltfScene]] in [[scenes]]. */\n scene?: GltfId;\n extensions?: GltfExtensions & {\n /** The [CESIUM_RTC extension](https://github.com/KhronosGroup/glTF/blob/main/extensions/1.0/Vendor/CESIUM_RTC/README.md) defines a centroid\n * relative to which all coordinates in the asset are defined, to reduce floating-point precision errors for large coordinates.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n CESIUM_RTC?: {\n center?: number[];\n };\n /** The [KHR_techniques_webgl extension](https://github.com/KhronosGroup/glTF/blob/c1c12bd100e88ff468ccef1cb88cfbec56a69af2/extensions/2.0/Khronos/KHR_techniques_webgl/README.md)\n * allows \"techniques\" to be associated with [[GltfMaterial]]s. Techniques can supply custom shader programs to render geometry; this was a core feature of glTF 1.0 (see [[GltfTechnique]]).\n * Here, it is only used to extract uniform values.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n KHR_techniques_webgl?: {\n techniques?: Array<{\n uniforms?: {\n [key: string]: { type: GltfDataType, value?: any } | undefined;\n };\n }>;\n };\n // eslint-disable-next-line @typescript-eslint/naming-convention\n EXT_structural_metadata?: GltfStructuralMetadata.Extension;\n };\n /** Names of glTF extensions used in the asset. */\n extensionsUsed?: string[];\n /** Names of glTF extensions required to properly load the asset. */\n extensionsRequired?: string[];\n accessors?: GltfDictionary<GltfAccessor>;\n /** Not currently supported. */\n animations?: GltfDictionary<any>;\n buffers?: GltfDictionary<GltfBuffer>;\n bufferViews?: GltfDictionary<GltfBufferViewProps>;\n /** Not currently used. */\n cameras?: GltfDictionary<any>;\n images?: GltfDictionary<GltfImage>;\n materials?: GltfDictionary<GltfMaterial>;\n meshes?: GltfDictionary<GltfMesh>;\n nodes?: GltfDictionary<GltfNode>;\n samplers?: GltfDictionary<GltfSampler>;\n scenes?: GltfDictionary<GltfScene>;\n /** Not currently supported. */\n skins?: GltfDictionary<any>;\n textures?: GltfDictionary<GltfTexture>;\n /** For glTF 1.0 only, techniques associated with [[Gltf1Material]]s. */\n techniques?: GltfDictionary<GltfTechnique>;\n}\n"]}
1
+ {"version":3,"file":"GltfSchema.js","sourceRoot":"","sources":["../../../src/gltf/GltfSchema.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\n/** Enumerates the types of [[GltfMeshPrimitive]] topologies.\r\n * @internal\r\n */\r\nexport enum GltfMeshMode {\r\n Points = 0,\r\n Lines = 1,\r\n LineStrip = 3,\r\n Triangles = 4,\r\n /** Not currently supported. */\r\n TriangleStrip = 5,\r\n /** Not currently supported. */\r\n TriangleFan = 6,\r\n}\r\n\r\n/** Enumerates the basic data types supported by accessors, material values, technique uniforms, etc.\r\n * @internal\r\n */\r\nexport enum GltfDataType {\r\n SignedByte = 0x1400,\r\n UnsignedByte = 0x1401,\r\n SignedShort = 5122,\r\n UnsignedShort = 5123,\r\n UInt32 = 5125,\r\n Float = 5126,\r\n Rgb = 6407,\r\n Rgba = 6408,\r\n IntVec2 = 0x8b53,\r\n IntVec3 = 0x8b54,\r\n FloatVec2 = 35664,\r\n FloatVec3 = 35665,\r\n FloatVec4 = 35666,\r\n FloatMat3 = 35675,\r\n FloatMat4 = 35676,\r\n Sampler2d = 35678,\r\n}\r\n\r\n/** @internal */\r\nexport enum GltfMagFilter {\r\n Nearest = 9728,\r\n Linear = 9729,\r\n}\r\n\r\n/** @internal */\r\nexport enum GltfMinFilter {\r\n Nearest = GltfMagFilter.Nearest,\r\n Linear = GltfMagFilter.Linear,\r\n NearestMipMapNearest = 9984,\r\n LinearMipMapNearest = 9985,\r\n NearestMipMapLinear = 9986,\r\n LinearMipMapLinear = 9987,\r\n}\r\n\r\n/** Describes how texture coordinates outside of the range [0..1] are handled.\r\n * @internal\r\n */\r\nexport enum GltfWrapMode {\r\n ClampToEdge = 33071,\r\n MirroredRepeat = 33648,\r\n Repeat = 10497,\r\n}\r\n\r\n/** Describes the intended target of a [[GltfBufferViewProps]].\r\n * @internal\r\n */\r\nexport enum GltfBufferTarget {\r\n ArrayBuffer = 34962,\r\n ElementArrayBuffer = 24963,\r\n}\r\n\r\n/** The type used to refer to an entry in a GltfDictionary in a glTF 1.0 asset. @internal */\r\nexport type Gltf1Id = string;\r\n/** The type used to refer to an entry in a GltfDictionary in a glTF 2.0 asset. @internal */\r\nexport type Gltf2Id = number;\r\n/** The type used to refer to an entry in a GltfDictionary. @internal */\r\nexport type GltfId = Gltf1Id | Gltf2Id;\r\n\r\n/** A collection of resources of some type defined at the top-level of a [[GltfDocument]].\r\n * In glTF 1.0, these are defined as objects; each resource is referenced and accessed by its string key.\r\n * In glTF 2.0, these are defined as arrays; each resource is referenced and accessed by its integer array index.\r\n * @internal\r\n */\r\nexport interface GltfDictionary<T extends GltfChildOfRootProperty> {\r\n [key: GltfId]: T | undefined;\r\n}\r\n\r\n/** @internal */\r\nexport interface GltfStringMap<T> {\r\n [key: string]: T | undefined;\r\n}\r\n\r\n/** Iterate the contents of a [[GltfDictionary]].\r\n * @internal\r\n */\r\nexport function * gltfDictionaryIterator<T extends GltfChildOfRootProperty>(dict: GltfDictionary<T>): Iterable<T> {\r\n if (Array.isArray(dict)) {\r\n for (const elem of dict)\r\n yield elem;\r\n } else {\r\n for (const key of Object.keys(dict)) {\r\n const value = dict[key];\r\n if (undefined !== value)\r\n yield value;\r\n }\r\n }\r\n}\r\n\r\n/** Optional extensions applied to a [[GltfProperty]] to enable behavior not defined in the core specification.\r\n * @internal\r\n */\r\nexport type GltfExtensions = GltfStringMap<unknown>;\r\n\r\n/** The base interface provided by most objects in a glTF asset, permitting additional data to be associated with the object.\r\n * @internal\r\n */\r\nexport interface GltfProperty {\r\n extensions?: GltfExtensions;\r\n extras?: any;\r\n}\r\n\r\n/** The base interface provided by top-level properties of a [[GltfDocument]].\r\n * @internal\r\n */\r\nexport interface GltfChildOfRootProperty extends GltfProperty {\r\n /** Optional name, strictly for human consumption. */\r\n name?: string;\r\n}\r\n\r\n/** @internal */\r\nexport interface DracoMeshCompression {\r\n bufferView: GltfId;\r\n // TEXCOORD_0, POSITION, etc\r\n attributes: GltfStringMap<number>;\r\n}\r\n\r\n/** @internal */\r\nexport interface MeshFeature extends GltfProperty {\r\n featureCount: number;\r\n nullFeatureId?: number;\r\n label?: string;\r\n propertyTable?: number;\r\n texture?: unknown;\r\n attribute?: number;\r\n}\r\n\r\n/** @internal */\r\nexport interface MeshFeatures {\r\n featureIds: MeshFeature[];\r\n}\r\n\r\n/** A unit of geometry belonging to a [[GltfMesh]]. @internal */\r\nexport interface GltfMeshPrimitive extends GltfProperty {\r\n /** Maps the name of each mesh attribute semantic to the Id of the [[GltfAccessor]] providing the attribute's data. */\r\n attributes: GltfStringMap<GltfId>;\r\n /** The Id of the [[GltfAccessor]] providing the vertex indices. */\r\n indices?: GltfId;\r\n /** The Id of the [[GltfMaterial]] to apply to the primitive when rendering. */\r\n material?: GltfId;\r\n /** The primitive topology type. */\r\n mode?: GltfMeshMode;\r\n /** Morph targets - currently unsupported. */\r\n targets?: GltfStringMap<GltfId>;\r\n extensions?: GltfExtensions & {\r\n /** The [CESIUM_primitive_outline](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Vendor/CESIUM_primitive_outline) extension\r\n * describes how to draw outline edges for a triangle mesh.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CESIUM_primitive_outline?: {\r\n /** The Id of the [[GltfBufferViewProps]] supplying the endpoints of each edge as indices into the triangle mesh's vertex array.\r\n * The number of indices must be even; each consecutive pair of indices describes one line segment. No connectivity between\r\n * line segments is implied.\r\n */\r\n indices?: GltfId;\r\n };\r\n /** The [KHR_draco_mesh_compression](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_draco_mesh_compression/README.md) extension\r\n * allows glTF to support geometry compressed with Draco geometry compression.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n KHR_draco_mesh_compression?: DracoMeshCompression;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n EXT_mesh_features?: MeshFeatures;\r\n };\r\n}\r\n\r\n/** A collection of [[GltfMeshPrimitive]]s to be rendered. Each mesh is referenced by a node. Multiple nodes can refer to the same mesh.\r\n * The node's transform is applied when rendering the mesh.\r\n * @internal\r\n */\r\nexport interface GltfMesh extends GltfChildOfRootProperty {\r\n /** The collection of primitives to be rendered. */\r\n primitives?: GltfMeshPrimitive[];\r\n /** For morph targets - currently unsupported. */\r\n weights?: number[];\r\n}\r\n\r\n/** Properties common to [[Gltf1Node]] and [[Gltf2Node]]. @internal */\r\nexport interface GltfNodeBaseProps {\r\n /** The Ids of the child nodes. @see [[GltfNode]]. */\r\n children?: GltfId[];\r\n /** Currently ignored. */\r\n camera?: GltfId;\r\n /** Currently ignored. */\r\n skin?: GltfId;\r\n /** A 4x4 column-major transformation matrix. Mutually exclusive with [[rotation]], [[scale]], and [[translation]]. */\r\n matrix?: number[];\r\n /** Unit quaternion as [x, y, z, w], where w is the scalar. */\r\n rotation?: number[];\r\n /** Non-uniform scale as [x, y, z]. */\r\n scale?: number[];\r\n /** Translation as [x, y, z]. */\r\n translation?: number[];\r\n}\r\n\r\n/** glTF 1.0 representation of a [[GltfNode]]. Unlike a [[Gltf2Node]], a Gltf1Node may refer to any number of [[GltfMesh]]es.\r\n * @internal\r\n */\r\nexport interface Gltf1Node extends GltfChildOfRootProperty, GltfNodeBaseProps {\r\n /** The Ids of the [[GltfMesh]]es to be rendered by this node.\r\n * @note The spec defines this as an array of strings, but the original implementation of [[GltfReader]] was written to treat it as a string instead.\r\n * In case this was because of non-spec-compliant glTF that placed a string here instead of an array, either is permitted.\r\n */\r\n meshes?: GltfId[] | string;\r\n mesh?: never;\r\n /** Currently ignored. */\r\n jointName?: GltfId;\r\n /** Currently ignored. */\r\n skeletons?: GltfId[];\r\n}\r\n\r\n/** glTF 2.0 representation of a [[GltfNode]]. Unlike a [[Gltf1Node]], a Gltf2Node may refer to at most one [[GltfMesh]].\r\n * @internal\r\n */\r\nexport interface Gltf2Node extends GltfChildOfRootProperty, GltfNodeBaseProps {\r\n /** The Id of the [[GltfMesh]] to be rendered by this node. */\r\n mesh?: GltfId;\r\n meshes?: never;\r\n /** Morph targets - currently ignored. */\r\n weights?: number[];\r\n}\r\n\r\n/** Describes a node in a [[GltfScene]]. Each node may be associated with zero, one (glTF 2.0), or any number of (glTF 1.0) [[GltfMesh]]es.\r\n * Each node may define a transform. Each node may have any number of child nodes. A child node's transform is multiplied by its parent node's transform.\r\n * Some nodes may be associated with other types of data like cameras, skins, lights, etc - these types of data are currently unsupported.\r\n * Rendering a node means rendering its meshes and the meshes of all of its descendants, with transforms applied.\r\n * @internal\r\n */\r\nexport type GltfNode = Gltf1Node | Gltf2Node;\r\n\r\n/** Get the Ids of the meshes associated with a node.\r\n * @internal\r\n */\r\nexport function getGltfNodeMeshIds(node: GltfNode): GltfId[] {\r\n if (undefined !== node.meshes)\r\n return typeof node.meshes === \"string\" ? [node.meshes] : node.meshes;\r\n else if (undefined !== node.mesh)\r\n return [node.mesh];\r\n\r\n return [];\r\n}\r\n\r\n/** @internal */\r\nexport function * traverseGltfNodes(ids: Iterable<GltfId>, nodes: GltfDictionary<GltfNode>, traversed: Set<GltfId>): Iterable<GltfNode> {\r\n for (const id of ids) {\r\n if (traversed.has(id))\r\n throw new Error(\"Cycle detected while traversing glTF nodes\");\r\n\r\n const node = nodes[id];\r\n if (!node)\r\n continue;\r\n\r\n traversed.add(id);\r\n yield node;\r\n if (node.children)\r\n for (const child of traverseGltfNodes(node.children, nodes, traversed))\r\n yield child;\r\n }\r\n}\r\n\r\n/** Describes a scene graph that composes any number of [[GltfNode]]s to produce a rendering of the [[GltfDocument]] asset.\r\n * An asset may define any number of scenes; the default scene is specified by [[Gltf.scene]].\r\n * @internal\r\n */\r\nexport interface GltfScene extends GltfChildOfRootProperty {\r\n /** The Ids of the nodes comprising the scene graph. */\r\n nodes?: GltfId[];\r\n}\r\n\r\n/** Provides metadata about a [[GltfDocument]] asset.\r\n * @internal\r\n */\r\nexport interface GltfAsset extends GltfProperty {\r\n /** A copyright message suitable for display to credit the content creator. */\r\n copyright?: string;\r\n /** The name of the tool that generated the asset. */\r\n generator?: string;\r\n /** The glTF version targeted by the asset, in the form \"major.minor\" where \"major\" and \"minor\" are integers. */\r\n version: string;\r\n /** The minimum glTF version required to properly load this asset, in the same form as [[version]].\r\n * This minimum version must be no greater than [[version]].\r\n */\r\n minVersion?: string;\r\n}\r\n\r\n/** Describes an image such as one used for a [[GltfTexture]]. The image may be referenced by a [[uri]] or a [[bufferView]].\r\n * @internal\r\n */\r\nexport interface GltfImage extends GltfChildOfRootProperty {\r\n /** URI from which the image data can be obtained, either as a base-64-encoded data URI or an external resource.\r\n * Mutually exclusive with [[bufferView]].\r\n */\r\n uri?: string;\r\n /** The image's media type. This property is required if [[bufferView]] is defined. */\r\n mimeType?: \"image/jpeg\" | \"image/png\";\r\n /** The Id of the [[GltfBufferViewProps]] containing the image data. Mutually exclusive with [[uri]]. */\r\n bufferView?: GltfId;\r\n extensions?: GltfExtensions & {\r\n /** The [KHR_binary_glTF](https://github.com/KhronosGroup/glTF/tree/main/extensions/1.0/Khronos/KHR_binary_glTF) allows an image to\r\n * be embedded in a binary chunk appended to the glTF asset's JSON, instead of being referenced by an external URI.\r\n * This is superseded in glTF 2.0 by support for the glb file format specification.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n KHR_binary_glTF?: {\r\n /** The Id of the [[GltfBufferViewProps]] that contains the binary image data. */\r\n bufferView?: GltfId;\r\n /** Required - @see [[GltfImage.mimeType]]. */\r\n mimeType?: string;\r\n };\r\n };\r\n}\r\n\r\n/** Describes a reference to a [[GltfTexture]]. @internal */\r\nexport interface GltfTextureInfo extends GltfProperty {\r\n /** The Id of the [[GltfTexture]]. */\r\n index: GltfId;\r\n /** The set index of the texture's TEXCOORD attribute used for texture coordinate mapping.\r\n * For example, if `texCoord` is `2`, an attribute named `TEXCOORD_2` must exist containing the texture coordinates.\r\n * Default: 0.\r\n */\r\n texCoord?: number;\r\n}\r\n\r\n/** Describes a texture and its sampler.\r\n * @internal\r\n */\r\nexport interface GltfTexture extends GltfChildOfRootProperty {\r\n /** The Id of the [[GltfSampler]] used by this texture.\r\n * If undefined, a sampler with repeat wrapping and auto filtering should be used by default.\r\n */\r\n sampler?: GltfId;\r\n /** The Id of the [[GltfImage]] used by this texture.\r\n * If undefined, an extension or other mechanism should supply an alternate image source - otherwise, the behavior is undefined.\r\n */\r\n source?: GltfId;\r\n}\r\n\r\n/** Describes the filtering and wrapping behavior to be applied to a [[GltfTexture]].\r\n * @note The implementation currently does not support MirroredRepeat and does not support different wrapping for U and V;\r\n * effectively, unless `wrapS` or `wrapT` is set to ClampToEdge, the sampler will use GltfWrapMode.Repeat.\r\n * @internal\r\n */\r\nexport interface GltfSampler extends GltfChildOfRootProperty {\r\n /** Magnification filter. */\r\n magFilter?: GltfMagFilter;\r\n /** Minification filter. */\r\n minFilter?: GltfMinFilter;\r\n /** S (U) wrapping mode. Default: Repeat. */\r\n wrapS?: GltfWrapMode;\r\n /** T (V) wrapping mode. Default: Repeat. */\r\n wrapT?: GltfWrapMode;\r\n}\r\n\r\n/** GL states that can be enabled by a [[GltfTechnique]]. Only those queried by this implementation are enumerated.\r\n * @internal\r\n */\r\nexport enum GltfTechniqueState {\r\n /** Enables alpha blending. */\r\n Blend = 3042,\r\n}\r\n\r\n/** For glTF 1.0 only, describes shader programs and shader state associated with a [[Gltf1Material]], used to render meshes associated with the material.\r\n * This implementation uses it strictly to identify techniques that require alpha blending.\r\n * @internal\r\n */\r\nexport interface GltfTechnique extends GltfChildOfRootProperty {\r\n /** GL render states to be applied by the technique. */\r\n states?: {\r\n /** An array of integers corresponding to boolean GL states that should be enabled using GL's `enable` function.\r\n * For example, the value [[GltfTechniqueState.Blend]] (3042) indicates that blending should be enabled.\r\n */\r\n enable?: GltfTechniqueState[];\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport interface Gltf1Material extends GltfChildOfRootProperty {\r\n diffuse?: string;\r\n emission?: number[];\r\n shininess?: number;\r\n specular?: number[];\r\n technique?: GltfId;\r\n values?: {\r\n texStep?: number[];\r\n color?: number[];\r\n tex?: number | string;\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport interface GltfMaterialPbrMetallicRoughness extends GltfProperty {\r\n // Default [1,1,1,1]\r\n baseColorFactor?: number[];\r\n baseColorTexture?: GltfTextureInfo;\r\n // Default 1\r\n metallicFactor?: number;\r\n // Default 1\r\n roughnessFactor?: number;\r\n metallicRoughnessTexture?: GltfTextureInfo;\r\n}\r\n\r\n/** @internal */\r\nexport type GltfAlphaMode = \"OPAQUE\" | \"MASK\" | \"BLEND\";\r\n\r\n/** @internal */\r\nexport interface Gltf2Material extends GltfChildOfRootProperty {\r\n pbrMetallicRoughness?: GltfMaterialPbrMetallicRoughness;\r\n normalTexture?: GltfTextureInfo;\r\n occlusionTexture?: unknown;\r\n emissiveTexture?: GltfTextureInfo;\r\n emissiveFactor?: number[];\r\n // Default OPAQUE\r\n alphaMode?: GltfAlphaMode;\r\n // Default 0.5. Ignored unless alphaMode=MASK\r\n alphaCutoff?: number;\r\n doubleSided?: boolean;\r\n extensions?: GltfExtensions & {\r\n /** The [KHR_materials_unlit](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_unlit) extension\r\n * indicates that the material should be displayed without lighting. The extension adds no additional properties; it is effectively a boolean flag.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n KHR_materials_unlit?: { };\r\n /** The [KHR_techniques_webgl extension](https://github.com/KhronosGroup/glTF/blob/c1c12bd100e88ff468ccef1cb88cfbec56a69af2/extensions/2.0/Khronos/KHR_techniques_webgl/README.md)\r\n * allows \"techniques\" to be associated with [[GltfMaterial]]s. Techniques can supply custom shader programs to render geometry; this was a core feature of glTF 1.0 (see [[GltfTechnique]]).\r\n * Here, it is only used to extract uniform values.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n KHR_techniques_webgl?: {\r\n technique?: number;\r\n // An object containing uniform values. Each property name corresponds to a uniform in the material's technique and must conform to that uniform's type and count properties.\r\n // A handful of uniforms referenced in this implementation by name are defined below.\r\n values?: {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n u_texStep?: number[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n u_color?: number[];\r\n // Diffuse texture.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n u_diffuse?: { index: number, texCoord: number };\r\n [k: string]: unknown | undefined;\r\n };\r\n };\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport type GltfMaterial = Gltf1Material | Gltf2Material;\r\n\r\n/** @internal */\r\nexport function isGltf1Material(material: GltfMaterial): material is Gltf1Material {\r\n const mat1 = material as Gltf1Material;\r\n return undefined !== mat1.technique || undefined !== mat1.values;\r\n}\r\n\r\n/** @internal */\r\nexport interface GltfBuffer extends GltfChildOfRootProperty {\r\n uri?: string;\r\n byteLength?: number;\r\n}\r\n\r\n/** @internal */\r\nexport interface GltfBufferViewProps extends GltfChildOfRootProperty {\r\n buffer: GltfId;\r\n byteLength?: number;\r\n byteOffset?: number;\r\n byteStride?: number;\r\n target?: GltfBufferTarget;\r\n}\r\n\r\n/** @internal */\r\nexport interface GltfAccessor extends GltfChildOfRootProperty {\r\n bufferView?: GltfId;\r\n byteOffset?: number;\r\n componentType?: GltfDataType.SignedByte | GltfDataType.UnsignedByte | GltfDataType.SignedShort | GltfDataType.UnsignedShort | GltfDataType.UInt32 | GltfDataType.Float;\r\n normalized?: boolean;\r\n count: number;\r\n type: \"SCALAR\" | \"VEC2\" | \"VEC3\" | \"VEC4\" | \"MAT2\" | \"MAT3\" | \"MAT4\";\r\n max?: number[];\r\n min?: number[];\r\n sparse?: unknown; // ###TODO sparse accessors\r\n extensions?: GltfExtensions & {\r\n /** Quantized attributes for glTF 1.0. Superceded by KHR_mesh_quantization. */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n WEB3D_quantized_attributes?: {\r\n decodedMin: number[];\r\n decodedMax: number[];\r\n /** Currently ignored. */\r\n decodeMatrix: number[];\r\n };\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport namespace GltfStructuralMetadata {\r\n export type ClassPropertyType = \"SCALAR\" | \"STRING\" | \"BOOLEAN\" | \"ENUM\" | \"VEC2\" | \"VEC3\" | \"VEC4\" | \"MAT2\" | \"MAT3\" | \"MAT4\" | string;\r\n export type ClassPropertyComponentType = \"INT8\" | \"UINT8\" | \"INT16\" | \"UINT16\" | \"INT32\" | \"UINT32\" | \"INT64\" | \"UINT64\" | \"FLOAT32\" | \"FLOAT64\" | string;\r\n\r\n // Ignoring VECN and MATN types because they complicate offset, scale, min, and max, all of which are otherwise only relevant to SCALAR in which case they're all just numbers.\r\n export interface ClassProperty extends GltfProperty {\r\n type: ClassPropertyType;\r\n name?: string;\r\n description?: string;\r\n componentType?: ClassPropertyComponentType;\r\n enumType?: string;\r\n array?: boolean;\r\n count?: number;\r\n normalized?: boolean;\r\n offset?: number;\r\n scale?: number;\r\n min?: number;\r\n max?: number;\r\n required?: boolean;\r\n noData?: unknown;\r\n default?: unknown;\r\n semantic?: string;\r\n }\r\n\r\n export interface EnumValue extends GltfProperty {\r\n name: string;\r\n value: number; // an integer\r\n description?: string;\r\n }\r\n\r\n export interface Enum extends GltfProperty {\r\n values: EnumValue[];\r\n // Default: UINT16\r\n valueType?: \"INT8\" | \"UINT8\" | \"INT16\" | \"UINT16\" | \"INT32\" | \"UINT32\" | \"INT64\" | \"UINT64\" | string;\r\n name?: string;\r\n description?: string;\r\n }\r\n\r\n export interface Class extends GltfProperty {\r\n name?: string;\r\n description?: string;\r\n properties?: {\r\n [propertyId: string]: ClassProperty | undefined;\r\n };\r\n }\r\n\r\n export interface Schema extends GltfProperty {\r\n id: string;\r\n name?: string;\r\n description?: string;\r\n version?: string;\r\n classes?: Class[];\r\n enums?: Enum[];\r\n }\r\n\r\n // Ignoring VECN and MATN types because they complicate offset, scale, min, and max, all of which are otherwise only relevant to SCALAR in which case they're all just numbers.\r\n export interface PropertyTableProperty extends GltfProperty {\r\n values: GltfId;\r\n arrayOffsets?: GltfId;\r\n stringOffsets?: GltfId;\r\n arrayOffsetType?: \"UINT8\" | \"UINT16\" | \"UINT32\" | \"UINT64\" | string;\r\n stringOffsetType?: \"UINT8\" | \"UINT16\" | \"UINT32\" | \"UINT64\" | string;\r\n offset?: number;\r\n scale?: number;\r\n min?: number;\r\n max?: number;\r\n }\r\n\r\n export interface PropertyTable {\r\n class: string;\r\n count: number;\r\n properties?: {\r\n [propertyId: string]: PropertyTableProperty | undefined;\r\n };\r\n }\r\n\r\n export interface Extension extends GltfProperty {\r\n // Exactly one of schema or schemaUri must be present.\r\n schemaUri?: string;\r\n schema?: Schema;\r\n propertyTables?: PropertyTable[];\r\n propertyTextures?: unknown;\r\n propertyAttributes?: unknown;\r\n }\r\n}\r\n\r\n/** Describes the top-level structure of a glTF asset.\r\n * This interface, along with all of the related Gltf* types defined in this file, is primarily based upon the [official glTF 2.0 specification](https://www.khronos.org/registry/glTF/specs/2.0/glTF-2.0.html).\r\n * However, it can also represent a [glTF 1.0](https://github.com/KhronosGroup/glTF/tree/main/specification/1.0#reference-node) asset.\r\n * Some types are combined. For example, the top-level dictionaries in glTF 1.0 are objects, while in glTF 2.0 they are arrays; the GltfDictionary interface supports accessing\r\n * items using either strings or numeric indexes represented by [[GltfId]].\r\n * For types that differ significantly between the two specs, Gltf1* and Gltf2* versions are defined (e.g., GltfMaterial is a union of Gltf1Material and Gltf2Material).\r\n * These interfaces also accommodate some deviations from both specs that are known to exist in the wild.\r\n * Most aspects of the specifications that are not implemented here are omitted (e.g., skinning, animations).\r\n * @internal\r\n */\r\nexport interface GltfDocument extends GltfProperty {\r\n /** Metadata about the glTF asset.\r\n * @note This property is required in glTF 2.0, but optional in 1.0.\r\n */\r\n asset?: GltfAsset;\r\n /** The Id of the default [[GltfScene]] in [[scenes]]. */\r\n scene?: GltfId;\r\n extensions?: GltfExtensions & {\r\n /** The [CESIUM_RTC extension](https://github.com/KhronosGroup/glTF/blob/main/extensions/1.0/Vendor/CESIUM_RTC/README.md) defines a centroid\r\n * relative to which all coordinates in the asset are defined, to reduce floating-point precision errors for large coordinates.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CESIUM_RTC?: {\r\n center?: number[];\r\n };\r\n /** The [KHR_techniques_webgl extension](https://github.com/KhronosGroup/glTF/blob/c1c12bd100e88ff468ccef1cb88cfbec56a69af2/extensions/2.0/Khronos/KHR_techniques_webgl/README.md)\r\n * allows \"techniques\" to be associated with [[GltfMaterial]]s. Techniques can supply custom shader programs to render geometry; this was a core feature of glTF 1.0 (see [[GltfTechnique]]).\r\n * Here, it is only used to extract uniform values.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n KHR_techniques_webgl?: {\r\n techniques?: Array<{\r\n uniforms?: {\r\n [key: string]: { type: GltfDataType, value?: any } | undefined;\r\n };\r\n }>;\r\n };\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n EXT_structural_metadata?: GltfStructuralMetadata.Extension;\r\n };\r\n /** Names of glTF extensions used in the asset. */\r\n extensionsUsed?: string[];\r\n /** Names of glTF extensions required to properly load the asset. */\r\n extensionsRequired?: string[];\r\n accessors?: GltfDictionary<GltfAccessor>;\r\n /** Not currently supported. */\r\n animations?: GltfDictionary<any>;\r\n buffers?: GltfDictionary<GltfBuffer>;\r\n bufferViews?: GltfDictionary<GltfBufferViewProps>;\r\n /** Not currently used. */\r\n cameras?: GltfDictionary<any>;\r\n images?: GltfDictionary<GltfImage>;\r\n materials?: GltfDictionary<GltfMaterial>;\r\n meshes?: GltfDictionary<GltfMesh>;\r\n nodes?: GltfDictionary<GltfNode>;\r\n samplers?: GltfDictionary<GltfSampler>;\r\n scenes?: GltfDictionary<GltfScene>;\r\n /** Not currently supported. */\r\n skins?: GltfDictionary<any>;\r\n textures?: GltfDictionary<GltfTexture>;\r\n /** For glTF 1.0 only, techniques associated with [[Gltf1Material]]s. */\r\n techniques?: GltfDictionary<GltfTechnique>;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"AngleDescription.js","sourceRoot":"","sources":["../../../src/properties/AngleDescription.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,4CAAyC;AACzC,gFAAwE;AACxE,iFAA8E;AAE9E;;;GAGG;AACH,MAAa,gBAAiB,SAAQ,2DAA4B;IAChE,YAAY,IAAa,EAAE,YAAqB,EAAE,QAAiB;QACjE,MAAM,WAAW,GAAG,OAAO,CAAC;QAC5B,KAAK,CACH,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EACzB,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,EACpG,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,IAAW,qBAAqB,KAAmB,OAAO,gCAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/E,IAAW,YAAY,KAAa,OAAO,OAAO,CAAC,CAAC,CAAC;IAErD,IAAW,UAAU,KAAa,OAAO,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,wCAAwC,CAAC,CAAC,CAAC,CAAC;CAChI;AAdD,4CAcC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Properties\n */\n\nimport { IModelApp } from \"../IModelApp\";\nimport { QuantityType } from \"../quantity-formatting/QuantityFormatter\";\nimport { FormattedQuantityDescription } from \"./FormattedQuantityDescription\";\n\n/**\n * Angle Property Description\n * @beta\n */\nexport class AngleDescription extends FormattedQuantityDescription {\n constructor(name?: string, displayLabel?: string, iconSpec?: string) {\n const defaultName = \"angle\";\n super(\n name ? name : defaultName,\n displayLabel ? displayLabel : IModelApp.localization.getLocalizedString(\"iModelJs:Properties.Angle\"),\n iconSpec,\n );\n }\n\n public get formatterQuantityType(): QuantityType { return QuantityType.Angle; }\n public get quantityType(): string { return \"Angle\"; }\n\n public get parseError(): string { return IModelApp.localization.getLocalizedString(\"iModelJs:Properties.UnableToParseAngle\"); }\n}\n"]}
1
+ {"version":3,"file":"AngleDescription.js","sourceRoot":"","sources":["../../../src/properties/AngleDescription.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,4CAAyC;AACzC,gFAAwE;AACxE,iFAA8E;AAE9E;;;GAGG;AACH,MAAa,gBAAiB,SAAQ,2DAA4B;IAChE,YAAY,IAAa,EAAE,YAAqB,EAAE,QAAiB;QACjE,MAAM,WAAW,GAAG,OAAO,CAAC;QAC5B,KAAK,CACH,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EACzB,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,EACpG,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,IAAW,qBAAqB,KAAmB,OAAO,gCAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/E,IAAW,YAAY,KAAa,OAAO,OAAO,CAAC,CAAC,CAAC;IAErD,IAAW,UAAU,KAAa,OAAO,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,wCAAwC,CAAC,CAAC,CAAC,CAAC;CAChI;AAdD,4CAcC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Properties\r\n */\r\n\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { QuantityType } from \"../quantity-formatting/QuantityFormatter\";\r\nimport { FormattedQuantityDescription } from \"./FormattedQuantityDescription\";\r\n\r\n/**\r\n * Angle Property Description\r\n * @beta\r\n */\r\nexport class AngleDescription extends FormattedQuantityDescription {\r\n constructor(name?: string, displayLabel?: string, iconSpec?: string) {\r\n const defaultName = \"angle\";\r\n super(\r\n name ? name : defaultName,\r\n displayLabel ? displayLabel : IModelApp.localization.getLocalizedString(\"iModelJs:Properties.Angle\"),\r\n iconSpec,\r\n );\r\n }\r\n\r\n public get formatterQuantityType(): QuantityType { return QuantityType.Angle; }\r\n public get quantityType(): string { return \"Angle\"; }\r\n\r\n public get parseError(): string { return IModelApp.localization.getLocalizedString(\"iModelJs:Properties.UnableToParseAngle\"); }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"FormattedQuantityDescription.js","sourceRoot":"","sources":["../../../src/properties/FormattedQuantityDescription.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,wDAAyE;AACzE,0DAA8E;AAC9E,4CAAyC;AAGzC;;;GAGG;AACH,MAAsB,4BAA6B,SAAQ,wCAAuB;IAIhF,YAAY,IAAY,EAAE,YAAoB,EAAE,QAAiB;QAC/D,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAES,WAAW,CAAC,WAAmB;QACvC,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,OAAO,qBAAS,CAAC,iBAAiB,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;SACpF;QACD,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAES,WAAW,CAAC,SAAiB;QACrC,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,MAAM,WAAW,GAAG,qBAAS,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACjG,IAAI,sBAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE;gBACxC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC;aACrC;iBAAM;gBACL,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;aACxC;SACF;QACD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAC7C,CAAC;IAED,IAAW,aAAa;QACtB,IAAI,IAAI,CAAC,cAAc;YACrB,OAAO,IAAI,CAAC,cAAc,CAAC;QAE7B,MAAM,aAAa,GAAG,qBAAS,CAAC,iBAAiB,CAAC,+BAA+B,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC9G,IAAI,aAAa,EAAE;YACjB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;YACpC,OAAO,aAAa,CAAC;SACtB;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAW,UAAU;QACnB,IAAI,IAAI,CAAC,WAAW;YAClB,OAAO,IAAI,CAAC,WAAW,CAAC;QAE1B,MAAM,UAAU,GAAG,qBAAS,CAAC,iBAAiB,CAAC,4BAA4B,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACxG,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;YAC9B,OAAO,UAAU,CAAC;SACnB;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CAKF;AAxDD,oEAwDC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Properties\n */\n\nimport { FormatterSpec, Parser, ParserSpec } from \"@itwin/core-quantity\";\nimport { BaseQuantityDescription, ParseResults } from \"@itwin/appui-abstract\";\nimport { IModelApp } from \"../IModelApp\";\nimport { QuantityType } from \"../quantity-formatting/QuantityFormatter\";\n\n/**\n * Base Quantity Property Description\n * @beta\n */\nexport abstract class FormattedQuantityDescription extends BaseQuantityDescription {\n private _formatterSpec?: FormatterSpec;\n private _parserSpec?: ParserSpec;\n\n constructor(name: string, displayLabel: string, iconSpec?: string) {\n super(name, displayLabel, iconSpec);\n }\n\n protected formatValue(numberValue: number): string {\n if (this.formatterSpec) {\n return IModelApp.quantityFormatter.formatQuantity(numberValue, this.formatterSpec);\n }\n return numberValue.toFixed(2);\n }\n\n protected parseString(userInput: string): ParseResults {\n if (this.parserSpec) {\n const parseResult = IModelApp.quantityFormatter.parseToQuantityValue(userInput, this.parserSpec);\n if (Parser.isParsedQuantity(parseResult)) {\n return { value: parseResult.value };\n } else {\n return { parseError: this.parseError };\n }\n }\n return { parseError: \"no parser defined\" };\n }\n\n public get formatterSpec(): FormatterSpec | undefined {\n if (this._formatterSpec)\n return this._formatterSpec;\n\n const formatterSpec = IModelApp.quantityFormatter.findFormatterSpecByQuantityType(this.formatterQuantityType);\n if (formatterSpec) {\n this._formatterSpec = formatterSpec;\n return formatterSpec;\n }\n\n return undefined;\n }\n\n public get parserSpec(): ParserSpec | undefined {\n if (this._parserSpec)\n return this._parserSpec;\n\n const parserSpec = IModelApp.quantityFormatter.findParserSpecByQuantityType(this.formatterQuantityType);\n if (parserSpec) {\n this._parserSpec = parserSpec;\n return parserSpec;\n }\n\n return undefined;\n }\n\n public abstract get formatterQuantityType(): QuantityType;\n\n public abstract override get parseError(): string;\n}\n"]}
1
+ {"version":3,"file":"FormattedQuantityDescription.js","sourceRoot":"","sources":["../../../src/properties/FormattedQuantityDescription.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,wDAAyE;AACzE,0DAA8E;AAC9E,4CAAyC;AAGzC;;;GAGG;AACH,MAAsB,4BAA6B,SAAQ,wCAAuB;IAIhF,YAAY,IAAY,EAAE,YAAoB,EAAE,QAAiB;QAC/D,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAES,WAAW,CAAC,WAAmB;QACvC,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,OAAO,qBAAS,CAAC,iBAAiB,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;SACpF;QACD,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAES,WAAW,CAAC,SAAiB;QACrC,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,MAAM,WAAW,GAAG,qBAAS,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACjG,IAAI,sBAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE;gBACxC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC;aACrC;iBAAM;gBACL,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;aACxC;SACF;QACD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAC7C,CAAC;IAED,IAAW,aAAa;QACtB,IAAI,IAAI,CAAC,cAAc;YACrB,OAAO,IAAI,CAAC,cAAc,CAAC;QAE7B,MAAM,aAAa,GAAG,qBAAS,CAAC,iBAAiB,CAAC,+BAA+B,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC9G,IAAI,aAAa,EAAE;YACjB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;YACpC,OAAO,aAAa,CAAC;SACtB;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAW,UAAU;QACnB,IAAI,IAAI,CAAC,WAAW;YAClB,OAAO,IAAI,CAAC,WAAW,CAAC;QAE1B,MAAM,UAAU,GAAG,qBAAS,CAAC,iBAAiB,CAAC,4BAA4B,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACxG,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;YAC9B,OAAO,UAAU,CAAC;SACnB;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CAKF;AAxDD,oEAwDC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Properties\r\n */\r\n\r\nimport { FormatterSpec, Parser, ParserSpec } from \"@itwin/core-quantity\";\r\nimport { BaseQuantityDescription, ParseResults } from \"@itwin/appui-abstract\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { QuantityType } from \"../quantity-formatting/QuantityFormatter\";\r\n\r\n/**\r\n * Base Quantity Property Description\r\n * @beta\r\n */\r\nexport abstract class FormattedQuantityDescription extends BaseQuantityDescription {\r\n private _formatterSpec?: FormatterSpec;\r\n private _parserSpec?: ParserSpec;\r\n\r\n constructor(name: string, displayLabel: string, iconSpec?: string) {\r\n super(name, displayLabel, iconSpec);\r\n }\r\n\r\n protected formatValue(numberValue: number): string {\r\n if (this.formatterSpec) {\r\n return IModelApp.quantityFormatter.formatQuantity(numberValue, this.formatterSpec);\r\n }\r\n return numberValue.toFixed(2);\r\n }\r\n\r\n protected parseString(userInput: string): ParseResults {\r\n if (this.parserSpec) {\r\n const parseResult = IModelApp.quantityFormatter.parseToQuantityValue(userInput, this.parserSpec);\r\n if (Parser.isParsedQuantity(parseResult)) {\r\n return { value: parseResult.value };\r\n } else {\r\n return { parseError: this.parseError };\r\n }\r\n }\r\n return { parseError: \"no parser defined\" };\r\n }\r\n\r\n public get formatterSpec(): FormatterSpec | undefined {\r\n if (this._formatterSpec)\r\n return this._formatterSpec;\r\n\r\n const formatterSpec = IModelApp.quantityFormatter.findFormatterSpecByQuantityType(this.formatterQuantityType);\r\n if (formatterSpec) {\r\n this._formatterSpec = formatterSpec;\r\n return formatterSpec;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n public get parserSpec(): ParserSpec | undefined {\r\n if (this._parserSpec)\r\n return this._parserSpec;\r\n\r\n const parserSpec = IModelApp.quantityFormatter.findParserSpecByQuantityType(this.formatterQuantityType);\r\n if (parserSpec) {\r\n this._parserSpec = parserSpec;\r\n return parserSpec;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n public abstract get formatterQuantityType(): QuantityType;\r\n\r\n public abstract override get parseError(): string;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LengthDescription.js","sourceRoot":"","sources":["../../../src/properties/LengthDescription.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,4CAAyC;AACzC,gFAAwE;AACxE,iFAA8E;AAE9E;;;GAGG;AACH,MAAa,iBAAkB,SAAQ,2DAA4B;IACjE,YAAY,IAAa,EAAE,YAAqB,EAAE,QAAiB;QACjE,MAAM,WAAW,GAAG,QAAQ,CAAC;QAC7B,KAAK,CACH,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EACzB,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,EACrG,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,IAAW,qBAAqB,KAAmB,OAAO,gCAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAChF,IAAW,YAAY,KAAa,OAAO,QAAQ,CAAC,CAAC,CAAC;IAEtD,IAAW,UAAU,KAAa,OAAO,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAC;CACjI;AAdD,8CAcC;AAED;;;GAGG;AACH,MAAa,uBAAwB,SAAQ,2DAA4B;IACvE,YAAY,IAAa,EAAE,YAAqB,EAAE,QAAiB;QACjE,MAAM,WAAW,GAAG,cAAc,CAAC;QACnC,KAAK,CACH,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EACzB,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,EACrG,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,IAAW,qBAAqB,KAAmB,OAAO,gCAAY,CAAC,YAAY,CAAC,CAAC,CAAC;IACtF,IAAW,YAAY,KAAa,OAAO,cAAc,CAAC,CAAC,CAAC;IAE5D,IAAW,UAAU,KAAa,OAAO,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAC;CACjI;AAdD,0DAcC;AAED;;;GAGG;AACH,MAAa,4BAA6B,SAAQ,2DAA4B;IAE5E,YAAY,IAAa,EAAE,YAAqB,EAAE,QAAiB;QACjE,MAAM,WAAW,GAAG,mBAAmB,CAAC;QACxC,KAAK,CACH,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EACzB,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,EACrG,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,IAAW,qBAAqB,KAAmB,OAAO,gCAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC3F,IAAW,YAAY,KAAa,OAAO,mBAAmB,CAAC,CAAC,CAAC;IAEjE,IAAW,UAAU,KAAa,OAAO,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAC;CACjI;AAfD,oEAeC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Properties\n */\n\nimport { IModelApp } from \"../IModelApp\";\nimport { QuantityType } from \"../quantity-formatting/QuantityFormatter\";\nimport { FormattedQuantityDescription } from \"./FormattedQuantityDescription\";\n\n/**\n * Length Property Description\n * @beta\n */\nexport class LengthDescription extends FormattedQuantityDescription {\n constructor(name?: string, displayLabel?: string, iconSpec?: string) {\n const defaultName = \"length\";\n super(\n name ? name : defaultName,\n displayLabel ? displayLabel : IModelApp.localization.getLocalizedString(\"iModelJs:Properties.Length\"),\n iconSpec,\n );\n }\n\n public get formatterQuantityType(): QuantityType { return QuantityType.Length; }\n public get quantityType(): string { return \"Length\"; }\n\n public get parseError(): string { return IModelApp.localization.getLocalizedString(\"iModelJs:Properties.UnableToParseLength\"); }\n}\n\n/**\n * Survey Length Property Description\n * @beta\n */\nexport class SurveyLengthDescription extends FormattedQuantityDescription {\n constructor(name?: string, displayLabel?: string, iconSpec?: string) {\n const defaultName = \"surveyLength\";\n super(\n name ? name : defaultName,\n displayLabel ? displayLabel : IModelApp.localization.getLocalizedString(\"iModelJs:Properties.Length\"),\n iconSpec,\n );\n }\n\n public get formatterQuantityType(): QuantityType { return QuantityType.LengthSurvey; }\n public get quantityType(): string { return \"LengthSurvey\"; }\n\n public get parseError(): string { return IModelApp.localization.getLocalizedString(\"iModelJs:Properties.UnableToParseLength\"); }\n}\n\n/**\n * Engineering Length Property Description\n * @beta\n */\nexport class EngineeringLengthDescription extends FormattedQuantityDescription {\n\n constructor(name?: string, displayLabel?: string, iconSpec?: string) {\n const defaultName = \"engineeringLength\";\n super(\n name ? name : defaultName,\n displayLabel ? displayLabel : IModelApp.localization.getLocalizedString(\"iModelJs:Properties.Length\"),\n iconSpec,\n );\n }\n\n public get formatterQuantityType(): QuantityType { return QuantityType.LengthEngineering; }\n public get quantityType(): string { return \"LengthEngineering\"; }\n\n public get parseError(): string { return IModelApp.localization.getLocalizedString(\"iModelJs:Properties.UnableToParseLength\"); }\n}\n"]}
1
+ {"version":3,"file":"LengthDescription.js","sourceRoot":"","sources":["../../../src/properties/LengthDescription.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,4CAAyC;AACzC,gFAAwE;AACxE,iFAA8E;AAE9E;;;GAGG;AACH,MAAa,iBAAkB,SAAQ,2DAA4B;IACjE,YAAY,IAAa,EAAE,YAAqB,EAAE,QAAiB;QACjE,MAAM,WAAW,GAAG,QAAQ,CAAC;QAC7B,KAAK,CACH,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EACzB,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,EACrG,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,IAAW,qBAAqB,KAAmB,OAAO,gCAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAChF,IAAW,YAAY,KAAa,OAAO,QAAQ,CAAC,CAAC,CAAC;IAEtD,IAAW,UAAU,KAAa,OAAO,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAC;CACjI;AAdD,8CAcC;AAED;;;GAGG;AACH,MAAa,uBAAwB,SAAQ,2DAA4B;IACvE,YAAY,IAAa,EAAE,YAAqB,EAAE,QAAiB;QACjE,MAAM,WAAW,GAAG,cAAc,CAAC;QACnC,KAAK,CACH,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EACzB,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,EACrG,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,IAAW,qBAAqB,KAAmB,OAAO,gCAAY,CAAC,YAAY,CAAC,CAAC,CAAC;IACtF,IAAW,YAAY,KAAa,OAAO,cAAc,CAAC,CAAC,CAAC;IAE5D,IAAW,UAAU,KAAa,OAAO,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAC;CACjI;AAdD,0DAcC;AAED;;;GAGG;AACH,MAAa,4BAA6B,SAAQ,2DAA4B;IAE5E,YAAY,IAAa,EAAE,YAAqB,EAAE,QAAiB;QACjE,MAAM,WAAW,GAAG,mBAAmB,CAAC;QACxC,KAAK,CACH,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EACzB,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,EACrG,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,IAAW,qBAAqB,KAAmB,OAAO,gCAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC3F,IAAW,YAAY,KAAa,OAAO,mBAAmB,CAAC,CAAC,CAAC;IAEjE,IAAW,UAAU,KAAa,OAAO,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAC;CACjI;AAfD,oEAeC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Properties\r\n */\r\n\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { QuantityType } from \"../quantity-formatting/QuantityFormatter\";\r\nimport { FormattedQuantityDescription } from \"./FormattedQuantityDescription\";\r\n\r\n/**\r\n * Length Property Description\r\n * @beta\r\n */\r\nexport class LengthDescription extends FormattedQuantityDescription {\r\n constructor(name?: string, displayLabel?: string, iconSpec?: string) {\r\n const defaultName = \"length\";\r\n super(\r\n name ? name : defaultName,\r\n displayLabel ? displayLabel : IModelApp.localization.getLocalizedString(\"iModelJs:Properties.Length\"),\r\n iconSpec,\r\n );\r\n }\r\n\r\n public get formatterQuantityType(): QuantityType { return QuantityType.Length; }\r\n public get quantityType(): string { return \"Length\"; }\r\n\r\n public get parseError(): string { return IModelApp.localization.getLocalizedString(\"iModelJs:Properties.UnableToParseLength\"); }\r\n}\r\n\r\n/**\r\n * Survey Length Property Description\r\n * @beta\r\n */\r\nexport class SurveyLengthDescription extends FormattedQuantityDescription {\r\n constructor(name?: string, displayLabel?: string, iconSpec?: string) {\r\n const defaultName = \"surveyLength\";\r\n super(\r\n name ? name : defaultName,\r\n displayLabel ? displayLabel : IModelApp.localization.getLocalizedString(\"iModelJs:Properties.Length\"),\r\n iconSpec,\r\n );\r\n }\r\n\r\n public get formatterQuantityType(): QuantityType { return QuantityType.LengthSurvey; }\r\n public get quantityType(): string { return \"LengthSurvey\"; }\r\n\r\n public get parseError(): string { return IModelApp.localization.getLocalizedString(\"iModelJs:Properties.UnableToParseLength\"); }\r\n}\r\n\r\n/**\r\n * Engineering Length Property Description\r\n * @beta\r\n */\r\nexport class EngineeringLengthDescription extends FormattedQuantityDescription {\r\n\r\n constructor(name?: string, displayLabel?: string, iconSpec?: string) {\r\n const defaultName = \"engineeringLength\";\r\n super(\r\n name ? name : defaultName,\r\n displayLabel ? displayLabel : IModelApp.localization.getLocalizedString(\"iModelJs:Properties.Length\"),\r\n iconSpec,\r\n );\r\n }\r\n\r\n public get formatterQuantityType(): QuantityType { return QuantityType.LengthEngineering; }\r\n public get quantityType(): string { return \"LengthEngineering\"; }\r\n\r\n public get parseError(): string { return IModelApp.localization.getLocalizedString(\"iModelJs:Properties.UnableToParseLength\"); }\r\n}\r\n"]}
@@ -1,24 +1,24 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
-
6
- // refuse to continue if using Internet Explorer or old Microsoft Edge.
7
- if (!!document.documentMode || !!window.StyleMedia) {
8
- const body = document.createElement("body");
9
- const newDiv = document.createElement("div");
10
- newDiv.style.font = "normal bold 16px sans-serif";
11
- newDiv.style.display = "flex";
12
- newDiv.style.justifyContent = "center";
13
- newDiv.style.position = "relative";
14
- newDiv.style.top = "25%";
15
- newDiv.innerHTML = "Sorry, the browser you are using is not supported. Please use Firefox, Chrome, or Safari.";
16
- body.appendChild(newDiv);
17
- document.body = body;
18
-
19
- // remove all the other script tags from the head.
20
- var scripts = document.head.getElementsByTagName("script");
21
- for (var i = 0; i < scripts.length; i++) {
22
- document.head.removeChild(scripts[i]);
23
- }
24
- }
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+
6
+ // refuse to continue if using Internet Explorer or old Microsoft Edge.
7
+ if (!!document.documentMode || !!window.StyleMedia) {
8
+ const body = document.createElement("body");
9
+ const newDiv = document.createElement("div");
10
+ newDiv.style.font = "normal bold 16px sans-serif";
11
+ newDiv.style.display = "flex";
12
+ newDiv.style.justifyContent = "center";
13
+ newDiv.style.position = "relative";
14
+ newDiv.style.top = "25%";
15
+ newDiv.innerHTML = "Sorry, the browser you are using is not supported. Please use Firefox, Chrome, or Safari.";
16
+ body.appendChild(newDiv);
17
+ document.body = body;
18
+
19
+ // remove all the other script tags from the head.
20
+ var scripts = document.head.getElementsByTagName("script");
21
+ for (var i = 0; i < scripts.length; i++) {
22
+ document.head.removeChild(scripts[i]);
23
+ }
24
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"BaseUnitFormattingSettingsProvider.js","sourceRoot":"","sources":["../../../src/quantity-formatting/BaseUnitFormattingSettingsProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module QuantityFormatting\n */\n\nimport { FormatProps, UnitSystemKey } from \"@itwin/core-quantity\";\nimport { IModelApp } from \"../IModelApp\";\nimport { IModelConnection } from \"../IModelConnection\";\nimport { SelectedViewportChangedArgs } from \"../ViewManager\";\nimport {\n FormattingUnitSystemChangedArgs, OverrideFormatEntry, QuantityFormatOverridesChangedArgs, QuantityFormatter,\n QuantityTypeKey, UnitFormattingSettingsProvider,\n} from \"./QuantityFormatter\";\n\n/** This abstract class reacts to changes in the \"active\" iModel and updates the [[QuantityFormatter]] overrides and active\n * presentation unit system based on stored preferences. In addition, monitors the [[QuantityFormatter]] for changes to format overrides and the active\n * unit system and stores these changes. The \"active\" iModel is determined by listening to the `IModelApp.viewManager.onSelectedViewportChanged` event\n * and gets the iModel from the selected viewport.\n * @beta\n */\nexport abstract class BaseUnitFormattingSettingsProvider implements UnitFormattingSettingsProvider {\n protected _imodelConnection: IModelConnection | undefined;\n\n /**\n * @param maintainOverridesPerIModel If maintainOverridesPerIModel is true the base class will set up listeners\n * to monitor \"active\" iModel changes so the overrides for the QuantityFormatter properly match the overrides set\n * up by the user. If false then the overrides are maintained only per user.\n * @beta\n */\n constructor(private _quantityFormatter: QuantityFormatter, private _maintainOverridesPerIModel?: boolean) {\n if (this._maintainOverridesPerIModel) {\n IModelApp.viewManager.onSelectedViewportChanged.addListener(this.handleViewportChanged);\n IModelConnection.onOpen.addListener(this.handleIModelOpen);\n IModelConnection.onClose.addListener(this.handleIModelClose);\n }\n }\n\n public get maintainOverridesPerIModel(): boolean {\n return !!this._maintainOverridesPerIModel;\n }\n\n public storeFormatOverrides = async ({typeKey, overrideEntry, unitSystem}: QuantityFormatOverridesChangedArgs) => {\n if (undefined === overrideEntry) {\n // remove all overrides for quantity type\n if (undefined === unitSystem) {\n await this.remove (typeKey);\n return;\n }else {\n // remove only system specific overrides for quantity type\n const storedJson = await this.retrieve (typeKey);\n if (storedJson) {\n delete storedJson[unitSystem];\n if (Object.keys(storedJson).length) {\n await this.store (typeKey, storedJson);\n } else {\n await this.remove (typeKey);\n }\n }\n }\n } else {\n // setting a new override or set of overrides\n const storedJson = await this.retrieve (typeKey);\n const updatedFormat = {...storedJson, ...overrideEntry};\n await this.store (typeKey, updatedFormat);\n }\n };\n\n /** save UnitSystem for active iModel */\n public storeUnitSystemSetting = async ({system}: FormattingUnitSystemChangedArgs) => {\n await this.storeUnitSystemKey(system);\n };\n\n public async loadOverrides(imodel?: IModelConnection): Promise<void> {\n await this.applyQuantityFormattingSettingsForIModel(imodel);\n }\n\n protected applyQuantityFormattingSettingsForIModel = async (imodel?: IModelConnection) => {\n if (this._maintainOverridesPerIModel)\n this._imodelConnection = imodel;\n const overrideFormatProps = await this.buildQuantityFormatOverridesMap();\n const unitSystemKey = await this.retrieveUnitSystem (this._quantityFormatter.activeUnitSystem);\n await this._quantityFormatter.reinitializeFormatAndParsingsMaps(overrideFormatProps, unitSystemKey, true, true);\n };\n\n private handleIModelOpen = async (imodel: IModelConnection) => {\n await this.applyQuantityFormattingSettingsForIModel (imodel);\n };\n\n private handleViewportChanged = async (args: SelectedViewportChangedArgs) => {\n if(args.current?.iModel && (args.current?.iModel?.iModelId !== this.imodelConnection?.iModelId)) {\n await this.applyQuantityFormattingSettingsForIModel (args.current?.iModel);\n }\n };\n\n private handleIModelClose = async () => {\n this._imodelConnection = undefined;\n };\n\n protected get imodelConnection() {\n return this._imodelConnection;\n }\n\n /** function to convert from serialized JSON format for Quantity Type overrides to build a map compatible with QuantityManager */\n protected async buildQuantityFormatOverridesMap() {\n const overrideFormatProps = new Map<UnitSystemKey, Map<QuantityTypeKey, FormatProps>>();\n\n // use map and await all returned promises - overrides are stored by QuantityType\n for await (const quantityTypeKey of [...this._quantityFormatter.quantityTypesRegistry.keys()]) {\n const quantityTypeDef = this._quantityFormatter.quantityTypesRegistry.get(quantityTypeKey);\n if (quantityTypeDef) {\n const typeKey = quantityTypeDef.key;\n const overrideEntry = await this.retrieve (typeKey);\n if (overrideEntry) {\n // extract overrides and insert into appropriate override map entry\n Object.keys(overrideEntry).forEach ((systemKey) => {\n const unitSystemKey = systemKey as UnitSystemKey;\n const props = overrideEntry[unitSystemKey];\n if (props) {\n if (overrideFormatProps.has(unitSystemKey)) {\n overrideFormatProps.get(unitSystemKey)!.set(typeKey, props);\n } else {\n const newMap = new Map<string, FormatProps>();\n newMap.set(typeKey, props);\n overrideFormatProps.set(unitSystemKey, newMap);\n }\n }\n });\n }\n }\n }\n return overrideFormatProps;\n }\n\n /** Serializes JSON object containing format overrides for a specific quantity type. */\n public abstract store(quantityTypeKey: QuantityTypeKey, overrideProps: OverrideFormatEntry): Promise<boolean>;\n\n /** Retrieves serialized JSON object containing format overrides for a specific quantity type. */\n public abstract retrieve(quantityTypeKey: QuantityTypeKey): Promise<OverrideFormatEntry|undefined>;\n\n /** Removes the override formats for a specific quantity type. */\n public abstract remove(quantityTypeKey: QuantityTypeKey): Promise<boolean>;\n\n /** Retrieves the active unit system typically based on the \"active\" iModelConnection. */\n public abstract retrieveUnitSystem(defaultKey: UnitSystemKey): Promise<UnitSystemKey>;\n\n /** Store the active unit system typically for the \"active\" iModelConnection. */\n public abstract storeUnitSystemKey(unitSystemKey: UnitSystemKey): Promise<boolean>;\n}\n\n"]}
1
+ {"version":3,"file":"BaseUnitFormattingSettingsProvider.js","sourceRoot":"","sources":["../../../src/quantity-formatting/BaseUnitFormattingSettingsProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,4CAAyC;AACzC,0DAAuD;AAOvD;;;;;GAKG;AACH,MAAsB,kCAAkC;IAGtD;;;;;OAKG;IACH,YAAoB,kBAAqC,EAAU,2BAAqC;QAApF,uBAAkB,GAAlB,kBAAkB,CAAmB;QAAU,gCAA2B,GAA3B,2BAA2B,CAAU;QAYjG,yBAAoB,GAAG,KAAK,EAAE,EAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAqC,EAAE,EAAE;YAC/G,IAAI,SAAS,KAAK,aAAa,EAAE;gBAC/B,yCAAyC;gBACzC,IAAI,SAAS,KAAK,UAAU,EAAE;oBAC5B,MAAM,IAAI,CAAC,MAAM,CAAE,OAAO,CAAC,CAAC;oBAC5B,OAAO;iBACR;qBAAK;oBACJ,0DAA0D;oBAC1D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAE,OAAO,CAAC,CAAC;oBACjD,IAAI,UAAU,EAAE;wBACd,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC;wBAC9B,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE;4BAClC,MAAM,IAAI,CAAC,KAAK,CAAE,OAAO,EAAE,UAAU,CAAC,CAAC;yBACxC;6BAAM;4BACL,MAAM,IAAI,CAAC,MAAM,CAAE,OAAO,CAAC,CAAC;yBAC7B;qBACF;iBACF;aACF;iBAAM;gBACL,6CAA6C;gBAC7C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAE,OAAO,CAAC,CAAC;gBACjD,MAAM,aAAa,GAAG,EAAC,GAAG,UAAU,EAAE,GAAG,aAAa,EAAC,CAAC;gBACxD,MAAM,IAAI,CAAC,KAAK,CAAE,OAAO,EAAE,aAAa,CAAC,CAAC;aAC3C;QACH,CAAC,CAAC;QAEF,wCAAwC;QACjC,2BAAsB,GAAG,KAAK,EAAE,EAAC,MAAM,EAAkC,EAAE,EAAE;YAClF,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC,CAAC;QAMQ,6CAAwC,GAAG,KAAK,EAAE,MAAyB,EAAE,EAAE;YACvF,IAAI,IAAI,CAAC,2BAA2B;gBAClC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC;YAClC,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,+BAA+B,EAAE,CAAC;YACzE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAE,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;YAC/F,MAAM,IAAI,CAAC,kBAAkB,CAAC,iCAAiC,CAAC,mBAAmB,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAClH,CAAC,CAAC;QAEM,qBAAgB,GAAG,KAAK,EAAE,MAAwB,EAAE,EAAE;YAC5D,MAAM,IAAI,CAAC,wCAAwC,CAAE,MAAM,CAAC,CAAC;QAC/D,CAAC,CAAC;QAEM,0BAAqB,GAAG,KAAK,EAAE,IAAiC,EAAE,EAAE;YAC1E,IAAG,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,KAAK,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE;gBAC/F,MAAM,IAAI,CAAC,wCAAwC,CAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;aAC5E;QACH,CAAC,CAAC;QAEM,sBAAiB,GAAG,KAAK,IAAI,EAAE;YACrC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACrC,CAAC,CAAC;QAlEA,IAAI,IAAI,CAAC,2BAA2B,EAAE;YACpC,qBAAS,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACxF,mCAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC3D,mCAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAC9D;IACH,CAAC;IAED,IAAW,0BAA0B;QACnC,OAAO,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC;IAC5C,CAAC;IAiCM,KAAK,CAAC,aAAa,CAAC,MAAyB;QAClD,MAAM,IAAI,CAAC,wCAAwC,CAAC,MAAM,CAAC,CAAC;IAC9D,CAAC;IAwBD,IAAc,gBAAgB;QAC5B,OAAQ,IAAI,CAAC,iBAAiB,CAAC;IACjC,CAAC;IAED,iIAAiI;IACvH,KAAK,CAAC,+BAA+B;QAC7C,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAoD,CAAC;QAExF,iFAAiF;QACjF,IAAI,KAAK,EAAE,MAAM,eAAe,IAAI,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC,EAAE;YAC7F,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC3F,IAAI,eAAe,EAAE;gBACnB,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC;gBACpC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAE,OAAO,CAAC,CAAC;gBACpD,IAAI,aAAa,EAAE;oBACjB,mEAAmE;oBACnE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAE,CAAC,SAAS,EAAE,EAAE;wBAChD,MAAM,aAAa,GAAG,SAA0B,CAAC;wBACjD,MAAM,KAAK,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;wBAC3C,IAAI,KAAK,EAAE;4BACT,IAAI,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;gCAC1C,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAE,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;6BAC7D;iCAAM;gCACL,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;gCAC9C,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gCAC3B,mBAAmB,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;6BAChD;yBACF;oBACH,CAAC,CAAC,CAAC;iBACJ;aACF;SACF;QACD,OAAO,mBAAmB,CAAC;IAC7B,CAAC;CAgBF;AA/HD,gFA+HC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module QuantityFormatting\r\n */\r\n\r\nimport { FormatProps, UnitSystemKey } from \"@itwin/core-quantity\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { SelectedViewportChangedArgs } from \"../ViewManager\";\r\nimport {\r\n FormattingUnitSystemChangedArgs, OverrideFormatEntry, QuantityFormatOverridesChangedArgs, QuantityFormatter,\r\n QuantityTypeKey, UnitFormattingSettingsProvider,\r\n} from \"./QuantityFormatter\";\r\n\r\n/** This abstract class reacts to changes in the \"active\" iModel and updates the [[QuantityFormatter]] overrides and active\r\n * presentation unit system based on stored preferences. In addition, monitors the [[QuantityFormatter]] for changes to format overrides and the active\r\n * unit system and stores these changes. The \"active\" iModel is determined by listening to the `IModelApp.viewManager.onSelectedViewportChanged` event\r\n * and gets the iModel from the selected viewport.\r\n * @beta\r\n */\r\nexport abstract class BaseUnitFormattingSettingsProvider implements UnitFormattingSettingsProvider {\r\n protected _imodelConnection: IModelConnection | undefined;\r\n\r\n /**\r\n * @param maintainOverridesPerIModel If maintainOverridesPerIModel is true the base class will set up listeners\r\n * to monitor \"active\" iModel changes so the overrides for the QuantityFormatter properly match the overrides set\r\n * up by the user. If false then the overrides are maintained only per user.\r\n * @beta\r\n */\r\n constructor(private _quantityFormatter: QuantityFormatter, private _maintainOverridesPerIModel?: boolean) {\r\n if (this._maintainOverridesPerIModel) {\r\n IModelApp.viewManager.onSelectedViewportChanged.addListener(this.handleViewportChanged);\r\n IModelConnection.onOpen.addListener(this.handleIModelOpen);\r\n IModelConnection.onClose.addListener(this.handleIModelClose);\r\n }\r\n }\r\n\r\n public get maintainOverridesPerIModel(): boolean {\r\n return !!this._maintainOverridesPerIModel;\r\n }\r\n\r\n public storeFormatOverrides = async ({typeKey, overrideEntry, unitSystem}: QuantityFormatOverridesChangedArgs) => {\r\n if (undefined === overrideEntry) {\r\n // remove all overrides for quantity type\r\n if (undefined === unitSystem) {\r\n await this.remove (typeKey);\r\n return;\r\n }else {\r\n // remove only system specific overrides for quantity type\r\n const storedJson = await this.retrieve (typeKey);\r\n if (storedJson) {\r\n delete storedJson[unitSystem];\r\n if (Object.keys(storedJson).length) {\r\n await this.store (typeKey, storedJson);\r\n } else {\r\n await this.remove (typeKey);\r\n }\r\n }\r\n }\r\n } else {\r\n // setting a new override or set of overrides\r\n const storedJson = await this.retrieve (typeKey);\r\n const updatedFormat = {...storedJson, ...overrideEntry};\r\n await this.store (typeKey, updatedFormat);\r\n }\r\n };\r\n\r\n /** save UnitSystem for active iModel */\r\n public storeUnitSystemSetting = async ({system}: FormattingUnitSystemChangedArgs) => {\r\n await this.storeUnitSystemKey(system);\r\n };\r\n\r\n public async loadOverrides(imodel?: IModelConnection): Promise<void> {\r\n await this.applyQuantityFormattingSettingsForIModel(imodel);\r\n }\r\n\r\n protected applyQuantityFormattingSettingsForIModel = async (imodel?: IModelConnection) => {\r\n if (this._maintainOverridesPerIModel)\r\n this._imodelConnection = imodel;\r\n const overrideFormatProps = await this.buildQuantityFormatOverridesMap();\r\n const unitSystemKey = await this.retrieveUnitSystem (this._quantityFormatter.activeUnitSystem);\r\n await this._quantityFormatter.reinitializeFormatAndParsingsMaps(overrideFormatProps, unitSystemKey, true, true);\r\n };\r\n\r\n private handleIModelOpen = async (imodel: IModelConnection) => {\r\n await this.applyQuantityFormattingSettingsForIModel (imodel);\r\n };\r\n\r\n private handleViewportChanged = async (args: SelectedViewportChangedArgs) => {\r\n if(args.current?.iModel && (args.current?.iModel?.iModelId !== this.imodelConnection?.iModelId)) {\r\n await this.applyQuantityFormattingSettingsForIModel (args.current?.iModel);\r\n }\r\n };\r\n\r\n private handleIModelClose = async () => {\r\n this._imodelConnection = undefined;\r\n };\r\n\r\n protected get imodelConnection() {\r\n return this._imodelConnection;\r\n }\r\n\r\n /** function to convert from serialized JSON format for Quantity Type overrides to build a map compatible with QuantityManager */\r\n protected async buildQuantityFormatOverridesMap() {\r\n const overrideFormatProps = new Map<UnitSystemKey, Map<QuantityTypeKey, FormatProps>>();\r\n\r\n // use map and await all returned promises - overrides are stored by QuantityType\r\n for await (const quantityTypeKey of [...this._quantityFormatter.quantityTypesRegistry.keys()]) {\r\n const quantityTypeDef = this._quantityFormatter.quantityTypesRegistry.get(quantityTypeKey);\r\n if (quantityTypeDef) {\r\n const typeKey = quantityTypeDef.key;\r\n const overrideEntry = await this.retrieve (typeKey);\r\n if (overrideEntry) {\r\n // extract overrides and insert into appropriate override map entry\r\n Object.keys(overrideEntry).forEach ((systemKey) => {\r\n const unitSystemKey = systemKey as UnitSystemKey;\r\n const props = overrideEntry[unitSystemKey];\r\n if (props) {\r\n if (overrideFormatProps.has(unitSystemKey)) {\r\n overrideFormatProps.get(unitSystemKey)!.set(typeKey, props);\r\n } else {\r\n const newMap = new Map<string, FormatProps>();\r\n newMap.set(typeKey, props);\r\n overrideFormatProps.set(unitSystemKey, newMap);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n return overrideFormatProps;\r\n }\r\n\r\n /** Serializes JSON object containing format overrides for a specific quantity type. */\r\n public abstract store(quantityTypeKey: QuantityTypeKey, overrideProps: OverrideFormatEntry): Promise<boolean>;\r\n\r\n /** Retrieves serialized JSON object containing format overrides for a specific quantity type. */\r\n public abstract retrieve(quantityTypeKey: QuantityTypeKey): Promise<OverrideFormatEntry|undefined>;\r\n\r\n /** Removes the override formats for a specific quantity type. */\r\n public abstract remove(quantityTypeKey: QuantityTypeKey): Promise<boolean>;\r\n\r\n /** Retrieves the active unit system typically based on the \"active\" iModelConnection. */\r\n public abstract retrieveUnitSystem(defaultKey: UnitSystemKey): Promise<UnitSystemKey>;\r\n\r\n /** Store the active unit system typically for the \"active\" iModelConnection. */\r\n public abstract storeUnitSystemKey(unitSystemKey: UnitSystemKey): Promise<boolean>;\r\n}\r\n\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"BasicUnitsProvider.js","sourceRoot":"","sources":["../../../src/quantity-formatting/BasicUnitsProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module QuantityFormatting\n */\n\nimport {\n BadUnit, BasicUnit, UnitConversionProps, UnitProps, UnitsProvider,\n} from \"@itwin/core-quantity\";\nimport { UnitNameKey } from \"./QuantityFormatter\";\nimport { UNIT_EXTRA_DATA } from \"./UnitsData\";\n\n// cSpell:ignore ussurvey USCUSTOM\n\n/** Units provider that provides a limited number of UnitDefinitions that are needed to support basic tools.\n * @internal\n */\nexport class BasicUnitsProvider implements UnitsProvider {\n\n /** Find a unit given the unitLabel. */\n public async findUnit(unitLabel: string, schemaName?: string, phenomenon?: string, unitSystem?: string): Promise<UnitProps> {\n const labelToFind = unitLabel.toLowerCase();\n const unitFamilyToFind = phenomenon ? phenomenon.toLowerCase() : undefined;\n const unitSystemToFind = unitSystem ? unitSystem.toLowerCase() : undefined;\n\n for (const entry of UNIT_DATA) {\n if (schemaName && schemaName !== \"Units\")\n continue;\n\n if (phenomenon && entry.phenomenon.toLowerCase() !== unitFamilyToFind)\n continue;\n\n if (unitSystemToFind && entry.system.toLowerCase() !== unitSystemToFind)\n continue;\n\n if (entry.displayLabel.toLowerCase() === labelToFind || entry.name.toLowerCase() === labelToFind) {\n const unitProps = new BasicUnit(entry.name, entry.displayLabel, entry.phenomenon, entry.system);\n return unitProps;\n }\n\n if (entry.altDisplayLabels && entry.altDisplayLabels.length > 0) {\n if (entry.altDisplayLabels.findIndex((ref) => ref.toLowerCase() === labelToFind) !== -1) {\n const unitProps = new BasicUnit(entry.name, entry.displayLabel, entry.phenomenon, entry.system);\n return unitProps;\n }\n }\n }\n\n return new BadUnit();\n }\n\n /** Find all units given phenomenon */\n public async getUnitsByFamily(phenomenon: string): Promise<UnitProps[]> {\n const units: UnitProps[] = [];\n for (const entry of UNIT_DATA) {\n if (entry.phenomenon !== phenomenon)\n continue;\n units.push(new BasicUnit(entry.name, entry.displayLabel, entry.phenomenon, entry.system));\n }\n return units;\n }\n\n protected findUnitDefinition(name: string): UnitDefinition | undefined {\n for (const entry of UNIT_DATA) {\n if (entry.name === name)\n return entry;\n }\n\n return undefined;\n }\n\n /** Find a unit given the unit's unique name. */\n public async findUnitByName(unitName: string): Promise<UnitProps> {\n const unitDataEntry = this.findUnitDefinition(unitName);\n if (unitDataEntry) {\n return new BasicUnit(unitDataEntry.name, unitDataEntry.displayLabel, unitDataEntry.phenomenon, unitDataEntry.system);\n }\n return new BadUnit();\n }\n\n /** Return the information needed to convert a value between two different units. The units should be from the same phenomenon. */\n public async getConversion(fromUnit: UnitProps, toUnit: UnitProps): Promise<UnitConversionProps> {\n const fromUnitData = this.findUnitDefinition(fromUnit.name);\n const toUnitData = this.findUnitDefinition(toUnit.name);\n\n if (fromUnitData && toUnitData) {\n const deltaOffset = toUnitData.conversion.offset - fromUnitData.conversion.offset;\n const deltaNumerator = toUnitData.conversion.numerator * fromUnitData.conversion.denominator;\n const deltaDenominator = toUnitData.conversion.denominator * fromUnitData.conversion.numerator;\n\n const conversionData = new ConversionData();\n conversionData.factor = deltaNumerator / deltaDenominator;\n conversionData.offset = deltaOffset;\n return conversionData;\n }\n\n return new ConversionData();\n }\n}\n\n/** Class that implements the minimum UnitConversionProps interface to provide information needed to convert unit values.\n * @alpha\n */\nclass ConversionData implements UnitConversionProps {\n public factor: number = 1.0;\n public offset: number = 0.0;\n public error: boolean = false;\n}\n\n/** interface use to define unit conversions to a base used for a phenomenon */\ninterface ConversionDef {\n numerator: number;\n denominator: number;\n offset: number;\n}\n\n// Temporary interface use to define structure of the unit definitions in this example.\ninterface UnitDefinition {\n readonly name: string;\n readonly phenomenon: string;\n readonly displayLabel: string;\n readonly altDisplayLabels?: string[];\n readonly conversion: ConversionDef;\n readonly system: string;\n}\n\n/** Function to generate default set of alternate unit labels\n * @internal\n */\nexport function getDefaultAlternateUnitLabels() {\n const altDisplayLabelsMap = new Map<UnitNameKey, Set<string>>();\n for (const entry of UNIT_EXTRA_DATA) {\n if (entry.altDisplayLabels && entry.altDisplayLabels.length > 0) {\n altDisplayLabelsMap.set(entry.name, new Set<string>(entry.altDisplayLabels));\n }\n }\n if (altDisplayLabelsMap.size)\n return altDisplayLabelsMap;\n return undefined;\n}\n\n// ========================================================================================================================================\n// Minimum set of UNITs to be removed when official UnitsProvider is available\n// ========================================================================================================================================\n// cSpell:ignore MILLIINCH, MICROINCH, MILLIFOOT\n// Set of supported units - this information will come from Schema-based units once the EC package is ready to provide this information.\nconst UNIT_DATA: UnitDefinition[] = [\n // Angles ( base unit radian )\n { name: \"Units.RAD\", phenomenon: \"Units.ANGLE\", system: \"Units.SI\", conversion: { numerator: 1.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"rad\" },\n // 1 rad = 180.0/PI °\n { name: \"Units.ARC_DEG\", phenomenon: \"Units.ANGLE\", system: \"Units.METRIC\", conversion: { numerator: 180.0, denominator: 3.141592653589793, offset: 0.0 }, displayLabel: \"°\" },\n { name: \"Units.ARC_MINUTE\", phenomenon: \"Units.ANGLE\", system: \"Units.METRIC\", conversion: { numerator: 10800.0, denominator: 3.141592653589793, offset: 0.0 }, displayLabel: \"'\" },\n { name: \"Units.ARC_SECOND\", phenomenon: \"Units.ANGLE\", system: \"Units.METRIC\", conversion: { numerator: 648000.0, denominator: 3.141592653589793, offset: 0.0 }, displayLabel: '\"' },\n { name: \"Units.GRAD\", phenomenon: \"Units.ANGLE\", system: \"Units.METRIC\", conversion: { numerator: 200, denominator: 3.141592653589793, offset: 0.0 }, displayLabel: \"grad\" },\n // Time ( base unit second )\n { name: \"Units.S\", phenomenon: \"Units.TIME\", system: \"Units.SI\", conversion: { numerator: 1.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"s\" },\n { name: \"Units.MIN\", phenomenon: \"Units.TIME\", system: \"Units.INTERNATIONAL\", conversion: { numerator: 1.0, denominator: 60.0, offset: 0.0 }, displayLabel: \"min\" },\n { name: \"Units.HR\", phenomenon: \"Units.TIME\", system: \"Units.INTERNATIONAL\", conversion: { numerator: 1.0, denominator: 3600.0, offset: 0.0 }, displayLabel: \"h\"},\n { name: \"Units.DAY\", phenomenon: \"Units.TIME\", system: \"Units.INTERNATIONAL\", conversion: { numerator: 1.0, denominator: 86400.0, offset: 0.0 }, displayLabel: \"days\" },\n { name: \"Units.WEEK\", phenomenon: \"Units.TIME\", system: \"Units.INTERNATIONAL\", conversion: { numerator: 1.0, denominator: 604800.0, offset: 0.0 }, displayLabel: \"weeks\" },\n // 1 sec = 1/31536000.0 yr\n { name: \"Units.YR\", phenomenon: \"Units.TIME\", system: \"Units.INTERNATIONAL\", conversion: { numerator: 1.0, denominator: 31536000.0, offset: 0.0 }, displayLabel: \"years\" },\n // conversion => specified unit to base unit of m\n { name: \"Units.M\", phenomenon: \"Units.LENGTH\", system: \"Units.SI\", conversion: { numerator: 1.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"m\" },\n { name: \"Units.MM\", phenomenon: \"Units.LENGTH\", system: \"Units.METRIC\", conversion: { numerator: 1000.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"mm\" },\n { name: \"Units.CM\", phenomenon: \"Units.LENGTH\", system: \"Units.METRIC\", conversion: { numerator: 100.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"cm\" },\n { name: \"Units.DM\", phenomenon: \"Units.LENGTH\", system: \"Units.METRIC\", conversion: { numerator: 10.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"dm\" },\n { name: \"Units.KM\", phenomenon: \"Units.LENGTH\", system: \"Units.METRIC\", conversion: { numerator: 1.0, denominator: 1000.0, offset: 0.0 }, displayLabel: \"km\" },\n { name: \"Units.UM\", phenomenon: \"Units.LENGTH\", system: \"Units.METRIC\", conversion: { numerator: 1000000.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"µm\" },\n { name: \"Units.MILLIINCH\", phenomenon: \"Units.LENGTH\", system: \"Units.USCUSTOM\", conversion: { numerator: 1000.0, denominator: 0.0254, offset: 0.0 }, displayLabel: \"mil\" },\n { name: \"Units.MICROINCH\", phenomenon: \"Units.LENGTH\", system: \"Units.USCUSTOM\", conversion: { numerator: 1000000.0, denominator: 0.0254, offset: 0.0 }, displayLabel: \"µin\" },\n { name: \"Units.MILLIFOOT\", phenomenon: \"Units.LENGTH\", system: \"Units.USCUSTOM\", conversion: { numerator: 1000.0, denominator: 0.3048, offset: 0.0 }, displayLabel: \"mft\" },\n { name: \"Units.IN\", phenomenon: \"Units.LENGTH\", system: \"Units.USCUSTOM\", conversion: { numerator: 1.0, denominator: 0.0254, offset: 0.0 }, displayLabel: \"in\" },\n { name: \"Units.FT\", phenomenon: \"Units.LENGTH\", system: \"Units.USCUSTOM\", conversion: { numerator: 1.0, denominator: 0.3048, offset: 0.0 }, displayLabel: \"ft\" },\n { name: \"Units.CHAIN\", phenomenon: \"Units.LENGTH\", system: \"Units.USCUSTOM\", conversion: { numerator: 1.0, denominator: 66.0 * 0.3048, offset: 0.0 }, displayLabel: \"chain\" },\n { name: \"Units.YRD\", phenomenon: \"Units.LENGTH\", system: \"Units.USCUSTOM\", conversion: { numerator: 1.0, denominator: 0.9144, offset: 0.0 }, displayLabel: \"yd\" },\n { name: \"Units.MILE\", phenomenon: \"Units.LENGTH\", system: \"Units.USCUSTOM\", conversion: { numerator: 1.0, denominator: 1609.344, offset: 0.0 }, displayLabel: \"mi\" },\n { name: \"Units.US_SURVEY_FT\", phenomenon: \"Units.LENGTH\", system: \"Units.USSURVEY\", conversion: { numerator: 3937.0, denominator: 1200.0, offset: 0.0 }, displayLabel: \"ft (US Survey)\" },\n { name: \"Units.US_SURVEY_YRD\", phenomenon: \"Units.LENGTH\", system: \"Units.USSURVEY\", conversion: { numerator: 3937.0, denominator: 3.0 * 1200.0, offset: 0.0 }, displayLabel: \"yrd (US Survey)\" },\n { name: \"Units.US_SURVEY_IN\", phenomenon: \"Units.LENGTH\", system: \"Units.USSURVEY\", conversion: { numerator: 3937.0, denominator: 100.0, offset: 0.0 }, displayLabel: \"in (US Survey)\" },\n { name: \"Units.US_SURVEY_MILE\", phenomenon: \"Units.LENGTH\", system: \"Units.USSURVEY\", conversion: { numerator: 3937.0, denominator: 5280.0 * 1200.0, offset: 0.0 }, displayLabel: \"mi (US Survey)\" },\n { name: \"Units.US_SURVEY_CHAIN\", phenomenon: \"Units.LENGTH\", system: \"Units.USSURVEY\", conversion: { numerator: 1.0, denominator: 20.11684, offset: 0.0 }, displayLabel: \"chain (US Survey)\" },\n // conversion => specified unit to base unit of m²\n { name: \"Units.SQ_FT\", phenomenon: \"Units.AREA\", system: \"Units.USCUSTOM\", conversion: { numerator: 1.0, denominator: .09290304, offset: 0.0 }, displayLabel: \"ft²\" },\n { name: \"Units.SQ_US_SURVEY_FT\", phenomenon: \"Units.AREA\", system: \"Units.USCUSTOM\", conversion: { numerator: 15499969.0, denominator: 1440000, offset: 0.0 }, displayLabel: \"ft² (US Survey)\" },\n { name: \"Units.SQ_M\", phenomenon: \"Units.AREA\", system: \"Units.SI\", conversion: { numerator: 1.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"m²\" },\n // conversion => specified unit to base unit m³\n { name: \"Units.CUB_FT\", phenomenon: \"Units.VOLUME\", system: \"Units.USCUSTOM\", conversion: { numerator: 1.0, denominator: 0.028316847, offset: 0.0 }, displayLabel: \"ft³\" },\n { name: \"Units.CUB_US_SURVEY_FT\", phenomenon: \"Units.VOLUME\", system: \"Units.USSURVEY\", conversion: { numerator: 1, denominator: 0.0283170164937591, offset: 0.0 }, displayLabel: \"ft³\" },\n { name: \"Units.CUB_YRD\", phenomenon: \"Units.VOLUME\", system: \"Units.USCUSTOM\", conversion: { numerator: 1.0, denominator: 0.76455486, offset: 0.0 }, displayLabel: \"yd³\" },\n { name: \"Units.CUB_M\", phenomenon: \"Units.VOLUME\", system: \"Units.SI\", conversion: { numerator: 1.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"m³\" },\n];\n"]}
1
+ {"version":3,"file":"BasicUnitsProvider.js","sourceRoot":"","sources":["../../../src/quantity-formatting/BasicUnitsProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module QuantityFormatting\r\n */\r\n\r\nimport {\r\n BadUnit, BasicUnit, UnitConversionProps, UnitProps, UnitsProvider,\r\n} from \"@itwin/core-quantity\";\r\nimport { UnitNameKey } from \"./QuantityFormatter\";\r\nimport { UNIT_EXTRA_DATA } from \"./UnitsData\";\r\n\r\n// cSpell:ignore ussurvey USCUSTOM\r\n\r\n/** Units provider that provides a limited number of UnitDefinitions that are needed to support basic tools.\r\n * @internal\r\n */\r\nexport class BasicUnitsProvider implements UnitsProvider {\r\n\r\n /** Find a unit given the unitLabel. */\r\n public async findUnit(unitLabel: string, schemaName?: string, phenomenon?: string, unitSystem?: string): Promise<UnitProps> {\r\n const labelToFind = unitLabel.toLowerCase();\r\n const unitFamilyToFind = phenomenon ? phenomenon.toLowerCase() : undefined;\r\n const unitSystemToFind = unitSystem ? unitSystem.toLowerCase() : undefined;\r\n\r\n for (const entry of UNIT_DATA) {\r\n if (schemaName && schemaName !== \"Units\")\r\n continue;\r\n\r\n if (phenomenon && entry.phenomenon.toLowerCase() !== unitFamilyToFind)\r\n continue;\r\n\r\n if (unitSystemToFind && entry.system.toLowerCase() !== unitSystemToFind)\r\n continue;\r\n\r\n if (entry.displayLabel.toLowerCase() === labelToFind || entry.name.toLowerCase() === labelToFind) {\r\n const unitProps = new BasicUnit(entry.name, entry.displayLabel, entry.phenomenon, entry.system);\r\n return unitProps;\r\n }\r\n\r\n if (entry.altDisplayLabels && entry.altDisplayLabels.length > 0) {\r\n if (entry.altDisplayLabels.findIndex((ref) => ref.toLowerCase() === labelToFind) !== -1) {\r\n const unitProps = new BasicUnit(entry.name, entry.displayLabel, entry.phenomenon, entry.system);\r\n return unitProps;\r\n }\r\n }\r\n }\r\n\r\n return new BadUnit();\r\n }\r\n\r\n /** Find all units given phenomenon */\r\n public async getUnitsByFamily(phenomenon: string): Promise<UnitProps[]> {\r\n const units: UnitProps[] = [];\r\n for (const entry of UNIT_DATA) {\r\n if (entry.phenomenon !== phenomenon)\r\n continue;\r\n units.push(new BasicUnit(entry.name, entry.displayLabel, entry.phenomenon, entry.system));\r\n }\r\n return units;\r\n }\r\n\r\n protected findUnitDefinition(name: string): UnitDefinition | undefined {\r\n for (const entry of UNIT_DATA) {\r\n if (entry.name === name)\r\n return entry;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /** Find a unit given the unit's unique name. */\r\n public async findUnitByName(unitName: string): Promise<UnitProps> {\r\n const unitDataEntry = this.findUnitDefinition(unitName);\r\n if (unitDataEntry) {\r\n return new BasicUnit(unitDataEntry.name, unitDataEntry.displayLabel, unitDataEntry.phenomenon, unitDataEntry.system);\r\n }\r\n return new BadUnit();\r\n }\r\n\r\n /** Return the information needed to convert a value between two different units. The units should be from the same phenomenon. */\r\n public async getConversion(fromUnit: UnitProps, toUnit: UnitProps): Promise<UnitConversionProps> {\r\n const fromUnitData = this.findUnitDefinition(fromUnit.name);\r\n const toUnitData = this.findUnitDefinition(toUnit.name);\r\n\r\n if (fromUnitData && toUnitData) {\r\n const deltaOffset = toUnitData.conversion.offset - fromUnitData.conversion.offset;\r\n const deltaNumerator = toUnitData.conversion.numerator * fromUnitData.conversion.denominator;\r\n const deltaDenominator = toUnitData.conversion.denominator * fromUnitData.conversion.numerator;\r\n\r\n const conversionData = new ConversionData();\r\n conversionData.factor = deltaNumerator / deltaDenominator;\r\n conversionData.offset = deltaOffset;\r\n return conversionData;\r\n }\r\n\r\n return new ConversionData();\r\n }\r\n}\r\n\r\n/** Class that implements the minimum UnitConversionProps interface to provide information needed to convert unit values.\r\n * @alpha\r\n */\r\nclass ConversionData implements UnitConversionProps {\r\n public factor: number = 1.0;\r\n public offset: number = 0.0;\r\n public error: boolean = false;\r\n}\r\n\r\n/** interface use to define unit conversions to a base used for a phenomenon */\r\ninterface ConversionDef {\r\n numerator: number;\r\n denominator: number;\r\n offset: number;\r\n}\r\n\r\n// Temporary interface use to define structure of the unit definitions in this example.\r\ninterface UnitDefinition {\r\n readonly name: string;\r\n readonly phenomenon: string;\r\n readonly displayLabel: string;\r\n readonly altDisplayLabels?: string[];\r\n readonly conversion: ConversionDef;\r\n readonly system: string;\r\n}\r\n\r\n/** Function to generate default set of alternate unit labels\r\n * @internal\r\n */\r\nexport function getDefaultAlternateUnitLabels() {\r\n const altDisplayLabelsMap = new Map<UnitNameKey, Set<string>>();\r\n for (const entry of UNIT_EXTRA_DATA) {\r\n if (entry.altDisplayLabels && entry.altDisplayLabels.length > 0) {\r\n altDisplayLabelsMap.set(entry.name, new Set<string>(entry.altDisplayLabels));\r\n }\r\n }\r\n if (altDisplayLabelsMap.size)\r\n return altDisplayLabelsMap;\r\n return undefined;\r\n}\r\n\r\n// ========================================================================================================================================\r\n// Minimum set of UNITs to be removed when official UnitsProvider is available\r\n// ========================================================================================================================================\r\n// cSpell:ignore MILLIINCH, MICROINCH, MILLIFOOT\r\n// Set of supported units - this information will come from Schema-based units once the EC package is ready to provide this information.\r\nconst UNIT_DATA: UnitDefinition[] = [\r\n // Angles ( base unit radian )\r\n { name: \"Units.RAD\", phenomenon: \"Units.ANGLE\", system: \"Units.SI\", conversion: { numerator: 1.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"rad\" },\r\n // 1 rad = 180.0/PI °\r\n { name: \"Units.ARC_DEG\", phenomenon: \"Units.ANGLE\", system: \"Units.METRIC\", conversion: { numerator: 180.0, denominator: 3.141592653589793, offset: 0.0 }, displayLabel: \"°\" },\r\n { name: \"Units.ARC_MINUTE\", phenomenon: \"Units.ANGLE\", system: \"Units.METRIC\", conversion: { numerator: 10800.0, denominator: 3.141592653589793, offset: 0.0 }, displayLabel: \"'\" },\r\n { name: \"Units.ARC_SECOND\", phenomenon: \"Units.ANGLE\", system: \"Units.METRIC\", conversion: { numerator: 648000.0, denominator: 3.141592653589793, offset: 0.0 }, displayLabel: '\"' },\r\n { name: \"Units.GRAD\", phenomenon: \"Units.ANGLE\", system: \"Units.METRIC\", conversion: { numerator: 200, denominator: 3.141592653589793, offset: 0.0 }, displayLabel: \"grad\" },\r\n // Time ( base unit second )\r\n { name: \"Units.S\", phenomenon: \"Units.TIME\", system: \"Units.SI\", conversion: { numerator: 1.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"s\" },\r\n { name: \"Units.MIN\", phenomenon: \"Units.TIME\", system: \"Units.INTERNATIONAL\", conversion: { numerator: 1.0, denominator: 60.0, offset: 0.0 }, displayLabel: \"min\" },\r\n { name: \"Units.HR\", phenomenon: \"Units.TIME\", system: \"Units.INTERNATIONAL\", conversion: { numerator: 1.0, denominator: 3600.0, offset: 0.0 }, displayLabel: \"h\"},\r\n { name: \"Units.DAY\", phenomenon: \"Units.TIME\", system: \"Units.INTERNATIONAL\", conversion: { numerator: 1.0, denominator: 86400.0, offset: 0.0 }, displayLabel: \"days\" },\r\n { name: \"Units.WEEK\", phenomenon: \"Units.TIME\", system: \"Units.INTERNATIONAL\", conversion: { numerator: 1.0, denominator: 604800.0, offset: 0.0 }, displayLabel: \"weeks\" },\r\n // 1 sec = 1/31536000.0 yr\r\n { name: \"Units.YR\", phenomenon: \"Units.TIME\", system: \"Units.INTERNATIONAL\", conversion: { numerator: 1.0, denominator: 31536000.0, offset: 0.0 }, displayLabel: \"years\" },\r\n // conversion => specified unit to base unit of m\r\n { name: \"Units.M\", phenomenon: \"Units.LENGTH\", system: \"Units.SI\", conversion: { numerator: 1.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"m\" },\r\n { name: \"Units.MM\", phenomenon: \"Units.LENGTH\", system: \"Units.METRIC\", conversion: { numerator: 1000.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"mm\" },\r\n { name: \"Units.CM\", phenomenon: \"Units.LENGTH\", system: \"Units.METRIC\", conversion: { numerator: 100.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"cm\" },\r\n { name: \"Units.DM\", phenomenon: \"Units.LENGTH\", system: \"Units.METRIC\", conversion: { numerator: 10.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"dm\" },\r\n { name: \"Units.KM\", phenomenon: \"Units.LENGTH\", system: \"Units.METRIC\", conversion: { numerator: 1.0, denominator: 1000.0, offset: 0.0 }, displayLabel: \"km\" },\r\n { name: \"Units.UM\", phenomenon: \"Units.LENGTH\", system: \"Units.METRIC\", conversion: { numerator: 1000000.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"µm\" },\r\n { name: \"Units.MILLIINCH\", phenomenon: \"Units.LENGTH\", system: \"Units.USCUSTOM\", conversion: { numerator: 1000.0, denominator: 0.0254, offset: 0.0 }, displayLabel: \"mil\" },\r\n { name: \"Units.MICROINCH\", phenomenon: \"Units.LENGTH\", system: \"Units.USCUSTOM\", conversion: { numerator: 1000000.0, denominator: 0.0254, offset: 0.0 }, displayLabel: \"µin\" },\r\n { name: \"Units.MILLIFOOT\", phenomenon: \"Units.LENGTH\", system: \"Units.USCUSTOM\", conversion: { numerator: 1000.0, denominator: 0.3048, offset: 0.0 }, displayLabel: \"mft\" },\r\n { name: \"Units.IN\", phenomenon: \"Units.LENGTH\", system: \"Units.USCUSTOM\", conversion: { numerator: 1.0, denominator: 0.0254, offset: 0.0 }, displayLabel: \"in\" },\r\n { name: \"Units.FT\", phenomenon: \"Units.LENGTH\", system: \"Units.USCUSTOM\", conversion: { numerator: 1.0, denominator: 0.3048, offset: 0.0 }, displayLabel: \"ft\" },\r\n { name: \"Units.CHAIN\", phenomenon: \"Units.LENGTH\", system: \"Units.USCUSTOM\", conversion: { numerator: 1.0, denominator: 66.0 * 0.3048, offset: 0.0 }, displayLabel: \"chain\" },\r\n { name: \"Units.YRD\", phenomenon: \"Units.LENGTH\", system: \"Units.USCUSTOM\", conversion: { numerator: 1.0, denominator: 0.9144, offset: 0.0 }, displayLabel: \"yd\" },\r\n { name: \"Units.MILE\", phenomenon: \"Units.LENGTH\", system: \"Units.USCUSTOM\", conversion: { numerator: 1.0, denominator: 1609.344, offset: 0.0 }, displayLabel: \"mi\" },\r\n { name: \"Units.US_SURVEY_FT\", phenomenon: \"Units.LENGTH\", system: \"Units.USSURVEY\", conversion: { numerator: 3937.0, denominator: 1200.0, offset: 0.0 }, displayLabel: \"ft (US Survey)\" },\r\n { name: \"Units.US_SURVEY_YRD\", phenomenon: \"Units.LENGTH\", system: \"Units.USSURVEY\", conversion: { numerator: 3937.0, denominator: 3.0 * 1200.0, offset: 0.0 }, displayLabel: \"yrd (US Survey)\" },\r\n { name: \"Units.US_SURVEY_IN\", phenomenon: \"Units.LENGTH\", system: \"Units.USSURVEY\", conversion: { numerator: 3937.0, denominator: 100.0, offset: 0.0 }, displayLabel: \"in (US Survey)\" },\r\n { name: \"Units.US_SURVEY_MILE\", phenomenon: \"Units.LENGTH\", system: \"Units.USSURVEY\", conversion: { numerator: 3937.0, denominator: 5280.0 * 1200.0, offset: 0.0 }, displayLabel: \"mi (US Survey)\" },\r\n { name: \"Units.US_SURVEY_CHAIN\", phenomenon: \"Units.LENGTH\", system: \"Units.USSURVEY\", conversion: { numerator: 1.0, denominator: 20.11684, offset: 0.0 }, displayLabel: \"chain (US Survey)\" },\r\n // conversion => specified unit to base unit of m²\r\n { name: \"Units.SQ_FT\", phenomenon: \"Units.AREA\", system: \"Units.USCUSTOM\", conversion: { numerator: 1.0, denominator: .09290304, offset: 0.0 }, displayLabel: \"ft²\" },\r\n { name: \"Units.SQ_US_SURVEY_FT\", phenomenon: \"Units.AREA\", system: \"Units.USCUSTOM\", conversion: { numerator: 15499969.0, denominator: 1440000, offset: 0.0 }, displayLabel: \"ft² (US Survey)\" },\r\n { name: \"Units.SQ_M\", phenomenon: \"Units.AREA\", system: \"Units.SI\", conversion: { numerator: 1.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"m²\" },\r\n // conversion => specified unit to base unit m³\r\n { name: \"Units.CUB_FT\", phenomenon: \"Units.VOLUME\", system: \"Units.USCUSTOM\", conversion: { numerator: 1.0, denominator: 0.028316847, offset: 0.0 }, displayLabel: \"ft³\" },\r\n { name: \"Units.CUB_US_SURVEY_FT\", phenomenon: \"Units.VOLUME\", system: \"Units.USSURVEY\", conversion: { numerator: 1, denominator: 0.0283170164937591, offset: 0.0 }, displayLabel: \"ft³\" },\r\n { name: \"Units.CUB_YRD\", phenomenon: \"Units.VOLUME\", system: \"Units.USCUSTOM\", conversion: { numerator: 1.0, denominator: 0.76455486, offset: 0.0 }, displayLabel: \"yd³\" },\r\n { name: \"Units.CUB_M\", phenomenon: \"Units.VOLUME\", system: \"Units.SI\", conversion: { numerator: 1.0, denominator: 1.0, offset: 0.0 }, displayLabel: \"m³\" },\r\n];\r\n"]}