@itwin/core-frontend 5.0.0-dev.4 → 5.0.0-dev.41

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 (373) hide show
  1. package/CHANGELOG.md +42 -1
  2. package/lib/cjs/AccuDraw.d.ts +63 -8
  3. package/lib/cjs/AccuDraw.d.ts.map +1 -1
  4. package/lib/cjs/AccuDraw.js +118 -16
  5. package/lib/cjs/AccuDraw.js.map +1 -1
  6. package/lib/cjs/ApproximateTerrainHeights.js +1 -1
  7. package/lib/cjs/ApproximateTerrainHeights.js.map +1 -1
  8. package/lib/cjs/BackgroundMapGeometry.js +5 -5
  9. package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
  10. package/lib/cjs/BriefcaseTxns.d.ts +2 -2
  11. package/lib/cjs/BriefcaseTxns.d.ts.map +1 -1
  12. package/lib/cjs/BriefcaseTxns.js.map +1 -1
  13. package/lib/cjs/DrawingViewState.js +9 -9
  14. package/lib/cjs/DrawingViewState.js.map +1 -1
  15. package/lib/cjs/GraphicalEditingScope.js +5 -5
  16. package/lib/cjs/GraphicalEditingScope.js.map +1 -1
  17. package/lib/cjs/IModelApp.d.ts.map +1 -1
  18. package/lib/cjs/IModelApp.js +62 -64
  19. package/lib/cjs/IModelApp.js.map +1 -1
  20. package/lib/cjs/IModelConnection.d.ts +4 -1
  21. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  22. package/lib/cjs/IModelConnection.js +24 -21
  23. package/lib/cjs/IModelConnection.js.map +1 -1
  24. package/lib/cjs/IModelRoutingContext.d.ts +0 -3
  25. package/lib/cjs/IModelRoutingContext.d.ts.map +1 -1
  26. package/lib/cjs/IModelRoutingContext.js +5 -4
  27. package/lib/cjs/IModelRoutingContext.js.map +1 -1
  28. package/lib/cjs/IpcApp.d.ts.map +1 -1
  29. package/lib/cjs/IpcApp.js +4 -3
  30. package/lib/cjs/IpcApp.js.map +1 -1
  31. package/lib/cjs/LocalhostIpcApp.js +1 -1
  32. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  33. package/lib/cjs/NativeApp.js +15 -17
  34. package/lib/cjs/NativeApp.js.map +1 -1
  35. package/lib/cjs/NativeAppLogger.js +1 -1
  36. package/lib/cjs/NativeAppLogger.js.map +1 -1
  37. package/lib/cjs/NoRenderApp.js +1 -1
  38. package/lib/cjs/NoRenderApp.js.map +1 -1
  39. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts +6 -1
  40. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
  41. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +14 -2
  42. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  43. package/lib/cjs/SelectionSet.d.ts +84 -35
  44. package/lib/cjs/SelectionSet.d.ts.map +1 -1
  45. package/lib/cjs/SelectionSet.js +419 -163
  46. package/lib/cjs/SelectionSet.js.map +1 -1
  47. package/lib/cjs/Sprites.js +1 -1
  48. package/lib/cjs/Sprites.js.map +1 -1
  49. package/lib/cjs/ViewCreator2d.js +3 -3
  50. package/lib/cjs/ViewCreator2d.js.map +1 -1
  51. package/lib/cjs/ViewGlobalLocation.js +5 -5
  52. package/lib/cjs/ViewGlobalLocation.js.map +1 -1
  53. package/lib/cjs/ViewState.js +2 -2
  54. package/lib/cjs/ViewState.js.map +1 -1
  55. package/lib/cjs/ViewingSpace.js +9 -9
  56. package/lib/cjs/ViewingSpace.js.map +1 -1
  57. package/lib/cjs/Viewport.js +41 -41
  58. package/lib/cjs/Viewport.js.map +1 -1
  59. package/lib/cjs/common/imdl/ImdlSchema.d.ts +4 -0
  60. package/lib/cjs/common/imdl/ImdlSchema.d.ts.map +1 -1
  61. package/lib/cjs/common/imdl/ImdlSchema.js.map +1 -1
  62. package/lib/cjs/common/imdl/ParseImdlDocument.d.ts +1 -1
  63. package/lib/cjs/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  64. package/lib/cjs/common/imdl/ParseImdlDocument.js +80 -7
  65. package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
  66. package/lib/cjs/common/internal/render/DisplayParams.js +1 -1
  67. package/lib/cjs/common/internal/render/DisplayParams.js.map +1 -1
  68. package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js +1 -1
  69. package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js.map +1 -1
  70. package/lib/cjs/common/internal/render/GraphicDescriptionContextImpl.js +1 -1
  71. package/lib/cjs/common/internal/render/GraphicDescriptionContextImpl.js.map +1 -1
  72. package/lib/cjs/common/internal/render/MeshPrimitives.js +1 -1
  73. package/lib/cjs/common/internal/render/MeshPrimitives.js.map +1 -1
  74. package/lib/cjs/internal/render/PrimitiveBuilder.js +1 -1
  75. package/lib/cjs/internal/render/PrimitiveBuilder.js.map +1 -1
  76. package/lib/cjs/internal/render/RenderInstancesParamsImpl.js +1 -1
  77. package/lib/cjs/internal/render/RenderInstancesParamsImpl.js.map +1 -1
  78. package/lib/cjs/render/MockRender.js +3 -3
  79. package/lib/cjs/render/MockRender.js.map +1 -1
  80. package/lib/cjs/render/webgl/BackgroundMapDrape.js +1 -1
  81. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  82. package/lib/cjs/render/webgl/BatchState.js +1 -1
  83. package/lib/cjs/render/webgl/BatchState.js.map +1 -1
  84. package/lib/cjs/render/webgl/ColorInfo.js +2 -2
  85. package/lib/cjs/render/webgl/ColorInfo.js.map +1 -1
  86. package/lib/cjs/render/webgl/Diagnostics.js +4 -4
  87. package/lib/cjs/render/webgl/Diagnostics.js.map +1 -1
  88. package/lib/cjs/render/webgl/DrawCommand.js +4 -4
  89. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  90. package/lib/cjs/render/webgl/IModelFrameLifecycle.js +4 -4
  91. package/lib/cjs/render/webgl/IModelFrameLifecycle.js.map +1 -1
  92. package/lib/cjs/render/webgl/InstancedGeometry.js +3 -3
  93. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  94. package/lib/cjs/render/webgl/Material.js +4 -4
  95. package/lib/cjs/render/webgl/Material.js.map +1 -1
  96. package/lib/cjs/render/webgl/PlanarClassifier.js +1 -1
  97. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  98. package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -1
  99. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  100. package/lib/cjs/render/webgl/RenderState.js +1 -1
  101. package/lib/cjs/render/webgl/RenderState.js.map +1 -1
  102. package/lib/cjs/render/webgl/Target.js +1 -1
  103. package/lib/cjs/render/webgl/Target.js.map +1 -1
  104. package/lib/cjs/render/webgl/Technique.js +39 -39
  105. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  106. package/lib/cjs/render/webgl/TechniqueFlags.js +1 -1
  107. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  108. package/lib/cjs/render/webgl/Texture.js +3 -3
  109. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  110. package/lib/cjs/tile/CesiumAssetProvider.js +1 -1
  111. package/lib/cjs/tile/CesiumAssetProvider.js.map +1 -1
  112. package/lib/cjs/tile/GltfReader.d.ts +6 -1
  113. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  114. package/lib/cjs/tile/GltfReader.js +79 -2
  115. package/lib/cjs/tile/GltfReader.js.map +1 -1
  116. package/lib/cjs/tile/ImdlParser.js +2 -2
  117. package/lib/cjs/tile/ImdlParser.js.map +1 -1
  118. package/lib/cjs/tile/ImdlReader.js +1 -1
  119. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  120. package/lib/cjs/tile/MeshoptCompression.d.ts +9 -0
  121. package/lib/cjs/tile/MeshoptCompression.d.ts.map +1 -1
  122. package/lib/cjs/tile/MeshoptCompression.js +98 -66
  123. package/lib/cjs/tile/MeshoptCompression.js.map +1 -1
  124. package/lib/cjs/tile/map/ArcGISTileMap.js +1 -1
  125. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  126. package/lib/cjs/tile/map/ArcGisUtilities.js +1 -1
  127. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  128. package/lib/cjs/tile/map/CesiumTerrainProvider.js +6 -6
  129. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  130. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  131. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +2 -2
  132. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  133. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  134. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +5 -2
  135. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  136. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
  137. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +2 -2
  138. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  139. package/lib/cjs/tile/map/ImageryTileTree.js +2 -2
  140. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  141. package/lib/cjs/tile/map/MapLayerImageryFormats.js +7 -7
  142. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  143. package/lib/cjs/tile/map/MapTile.js +8 -8
  144. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  145. package/lib/cjs/tile/map/MapTileAvailability.js +1 -1
  146. package/lib/cjs/tile/map/MapTileAvailability.js.map +1 -1
  147. package/lib/cjs/tile/map/MapTileTree.js +9 -9
  148. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  149. package/lib/cjs/tile/map/MapTilingScheme.js +1 -1
  150. package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
  151. package/lib/cjs/tile/map/WmsCapabilities.js +2 -2
  152. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  153. package/lib/cjs/tile/map/WmtsCapabilities.js +1 -1
  154. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  155. package/lib/cjs/tools/AccuDrawTool.d.ts +1 -0
  156. package/lib/cjs/tools/AccuDrawTool.d.ts.map +1 -1
  157. package/lib/cjs/tools/AccuDrawTool.js +22 -21
  158. package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
  159. package/lib/cjs/tools/ClipViewTool.js +40 -40
  160. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  161. package/lib/cjs/tools/EditManipulator.js +2 -2
  162. package/lib/cjs/tools/EditManipulator.js.map +1 -1
  163. package/lib/cjs/tools/ElementSetTool.d.ts.map +1 -1
  164. package/lib/cjs/tools/ElementSetTool.js +11 -4
  165. package/lib/cjs/tools/ElementSetTool.js.map +1 -1
  166. package/lib/cjs/tools/IdleTool.js +2 -2
  167. package/lib/cjs/tools/IdleTool.js.map +1 -1
  168. package/lib/cjs/tools/MeasureTool.d.ts.map +1 -1
  169. package/lib/cjs/tools/MeasureTool.js +39 -39
  170. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  171. package/lib/cjs/tools/SelectTool.js +7 -7
  172. package/lib/cjs/tools/SelectTool.js.map +1 -1
  173. package/lib/cjs/tools/Tool.js +10 -10
  174. package/lib/cjs/tools/Tool.js.map +1 -1
  175. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  176. package/lib/cjs/tools/ToolAdmin.js +36 -24
  177. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  178. package/lib/cjs/tools/ToolAssistance.js +19 -19
  179. package/lib/cjs/tools/ToolAssistance.js.map +1 -1
  180. package/lib/cjs/tools/ToolSettings.js +63 -63
  181. package/lib/cjs/tools/ToolSettings.js.map +1 -1
  182. package/lib/cjs/tools/ViewTool.js +37 -37
  183. package/lib/cjs/tools/ViewTool.js.map +1 -1
  184. package/lib/cjs/workers/ImdlParser/Worker.js +2 -2
  185. package/lib/cjs/workers/ImdlParser/Worker.js.map +1 -1
  186. package/lib/esm/AccuDraw.d.ts +63 -8
  187. package/lib/esm/AccuDraw.d.ts.map +1 -1
  188. package/lib/esm/AccuDraw.js +119 -17
  189. package/lib/esm/AccuDraw.js.map +1 -1
  190. package/lib/esm/ApproximateTerrainHeights.js +1 -1
  191. package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
  192. package/lib/esm/BackgroundMapGeometry.js +5 -5
  193. package/lib/esm/BackgroundMapGeometry.js.map +1 -1
  194. package/lib/esm/BriefcaseTxns.d.ts +2 -2
  195. package/lib/esm/BriefcaseTxns.d.ts.map +1 -1
  196. package/lib/esm/BriefcaseTxns.js.map +1 -1
  197. package/lib/esm/DrawingViewState.js +9 -9
  198. package/lib/esm/DrawingViewState.js.map +1 -1
  199. package/lib/esm/GraphicalEditingScope.js +5 -5
  200. package/lib/esm/GraphicalEditingScope.js.map +1 -1
  201. package/lib/esm/IModelApp.d.ts.map +1 -1
  202. package/lib/esm/IModelApp.js +63 -65
  203. package/lib/esm/IModelApp.js.map +1 -1
  204. package/lib/esm/IModelConnection.d.ts +4 -1
  205. package/lib/esm/IModelConnection.d.ts.map +1 -1
  206. package/lib/esm/IModelConnection.js +20 -17
  207. package/lib/esm/IModelConnection.js.map +1 -1
  208. package/lib/esm/IModelRoutingContext.d.ts +0 -3
  209. package/lib/esm/IModelRoutingContext.d.ts.map +1 -1
  210. package/lib/esm/IModelRoutingContext.js +3 -2
  211. package/lib/esm/IModelRoutingContext.js.map +1 -1
  212. package/lib/esm/IpcApp.d.ts.map +1 -1
  213. package/lib/esm/IpcApp.js +4 -3
  214. package/lib/esm/IpcApp.js.map +1 -1
  215. package/lib/esm/LocalhostIpcApp.js +1 -1
  216. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  217. package/lib/esm/NativeApp.js +15 -17
  218. package/lib/esm/NativeApp.js.map +1 -1
  219. package/lib/esm/NativeAppLogger.js +1 -1
  220. package/lib/esm/NativeAppLogger.js.map +1 -1
  221. package/lib/esm/NoRenderApp.js +1 -1
  222. package/lib/esm/NoRenderApp.js.map +1 -1
  223. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts +6 -1
  224. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
  225. package/lib/esm/RealityDataSourceTilesetUrlImpl.js +14 -2
  226. package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  227. package/lib/esm/SelectionSet.d.ts +84 -35
  228. package/lib/esm/SelectionSet.d.ts.map +1 -1
  229. package/lib/esm/SelectionSet.js +418 -162
  230. package/lib/esm/SelectionSet.js.map +1 -1
  231. package/lib/esm/Sprites.js +1 -1
  232. package/lib/esm/Sprites.js.map +1 -1
  233. package/lib/esm/ViewCreator2d.js +3 -3
  234. package/lib/esm/ViewCreator2d.js.map +1 -1
  235. package/lib/esm/ViewGlobalLocation.js +5 -5
  236. package/lib/esm/ViewGlobalLocation.js.map +1 -1
  237. package/lib/esm/ViewState.js +2 -2
  238. package/lib/esm/ViewState.js.map +1 -1
  239. package/lib/esm/ViewingSpace.js +9 -9
  240. package/lib/esm/ViewingSpace.js.map +1 -1
  241. package/lib/esm/Viewport.js +41 -41
  242. package/lib/esm/Viewport.js.map +1 -1
  243. package/lib/esm/common/imdl/ImdlSchema.d.ts +4 -0
  244. package/lib/esm/common/imdl/ImdlSchema.d.ts.map +1 -1
  245. package/lib/esm/common/imdl/ImdlSchema.js.map +1 -1
  246. package/lib/esm/common/imdl/ParseImdlDocument.d.ts +1 -1
  247. package/lib/esm/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  248. package/lib/esm/common/imdl/ParseImdlDocument.js +80 -7
  249. package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
  250. package/lib/esm/common/internal/render/DisplayParams.js +1 -1
  251. package/lib/esm/common/internal/render/DisplayParams.js.map +1 -1
  252. package/lib/esm/common/internal/render/GraphicDescriptionBuilderImpl.js +1 -1
  253. package/lib/esm/common/internal/render/GraphicDescriptionBuilderImpl.js.map +1 -1
  254. package/lib/esm/common/internal/render/GraphicDescriptionContextImpl.js +1 -1
  255. package/lib/esm/common/internal/render/GraphicDescriptionContextImpl.js.map +1 -1
  256. package/lib/esm/common/internal/render/MeshPrimitives.js +2 -2
  257. package/lib/esm/common/internal/render/MeshPrimitives.js.map +1 -1
  258. package/lib/esm/internal/render/PrimitiveBuilder.js +1 -1
  259. package/lib/esm/internal/render/PrimitiveBuilder.js.map +1 -1
  260. package/lib/esm/internal/render/RenderInstancesParamsImpl.js +1 -1
  261. package/lib/esm/internal/render/RenderInstancesParamsImpl.js.map +1 -1
  262. package/lib/esm/render/MockRender.js +3 -3
  263. package/lib/esm/render/MockRender.js.map +1 -1
  264. package/lib/esm/render/webgl/BackgroundMapDrape.js +1 -1
  265. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  266. package/lib/esm/render/webgl/BatchState.js +1 -1
  267. package/lib/esm/render/webgl/BatchState.js.map +1 -1
  268. package/lib/esm/render/webgl/ColorInfo.js +2 -2
  269. package/lib/esm/render/webgl/ColorInfo.js.map +1 -1
  270. package/lib/esm/render/webgl/Diagnostics.js +4 -4
  271. package/lib/esm/render/webgl/Diagnostics.js.map +1 -1
  272. package/lib/esm/render/webgl/DrawCommand.js +4 -4
  273. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  274. package/lib/esm/render/webgl/IModelFrameLifecycle.js +4 -4
  275. package/lib/esm/render/webgl/IModelFrameLifecycle.js.map +1 -1
  276. package/lib/esm/render/webgl/InstancedGeometry.js +3 -3
  277. package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
  278. package/lib/esm/render/webgl/Material.js +4 -4
  279. package/lib/esm/render/webgl/Material.js.map +1 -1
  280. package/lib/esm/render/webgl/PlanarClassifier.js +1 -1
  281. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  282. package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -1
  283. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  284. package/lib/esm/render/webgl/RenderState.js +1 -1
  285. package/lib/esm/render/webgl/RenderState.js.map +1 -1
  286. package/lib/esm/render/webgl/Target.js +1 -1
  287. package/lib/esm/render/webgl/Target.js.map +1 -1
  288. package/lib/esm/render/webgl/Technique.js +39 -39
  289. package/lib/esm/render/webgl/Technique.js.map +1 -1
  290. package/lib/esm/render/webgl/TechniqueFlags.js +1 -1
  291. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  292. package/lib/esm/render/webgl/Texture.js +3 -3
  293. package/lib/esm/render/webgl/Texture.js.map +1 -1
  294. package/lib/esm/tile/CesiumAssetProvider.js +1 -1
  295. package/lib/esm/tile/CesiumAssetProvider.js.map +1 -1
  296. package/lib/esm/tile/GltfReader.d.ts +6 -1
  297. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  298. package/lib/esm/tile/GltfReader.js +79 -2
  299. package/lib/esm/tile/GltfReader.js.map +1 -1
  300. package/lib/esm/tile/ImdlParser.js +2 -2
  301. package/lib/esm/tile/ImdlParser.js.map +1 -1
  302. package/lib/esm/tile/ImdlReader.js +1 -1
  303. package/lib/esm/tile/ImdlReader.js.map +1 -1
  304. package/lib/esm/tile/MeshoptCompression.d.ts +9 -0
  305. package/lib/esm/tile/MeshoptCompression.d.ts.map +1 -1
  306. package/lib/esm/tile/MeshoptCompression.js +98 -44
  307. package/lib/esm/tile/MeshoptCompression.js.map +1 -1
  308. package/lib/esm/tile/map/ArcGISTileMap.js +1 -1
  309. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  310. package/lib/esm/tile/map/ArcGisUtilities.js +1 -1
  311. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  312. package/lib/esm/tile/map/CesiumTerrainProvider.js +6 -6
  313. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  314. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  315. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +2 -2
  316. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  317. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  318. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +5 -2
  319. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  320. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
  321. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +2 -2
  322. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  323. package/lib/esm/tile/map/ImageryTileTree.js +2 -2
  324. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  325. package/lib/esm/tile/map/MapLayerImageryFormats.js +7 -7
  326. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  327. package/lib/esm/tile/map/MapTile.js +8 -8
  328. package/lib/esm/tile/map/MapTile.js.map +1 -1
  329. package/lib/esm/tile/map/MapTileAvailability.js +1 -1
  330. package/lib/esm/tile/map/MapTileAvailability.js.map +1 -1
  331. package/lib/esm/tile/map/MapTileTree.js +9 -9
  332. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  333. package/lib/esm/tile/map/MapTilingScheme.js +1 -1
  334. package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
  335. package/lib/esm/tile/map/WmsCapabilities.js +2 -2
  336. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  337. package/lib/esm/tile/map/WmtsCapabilities.js +1 -1
  338. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  339. package/lib/esm/tools/AccuDrawTool.d.ts +1 -0
  340. package/lib/esm/tools/AccuDrawTool.d.ts.map +1 -1
  341. package/lib/esm/tools/AccuDrawTool.js +22 -21
  342. package/lib/esm/tools/AccuDrawTool.js.map +1 -1
  343. package/lib/esm/tools/ClipViewTool.js +40 -40
  344. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  345. package/lib/esm/tools/EditManipulator.js +2 -2
  346. package/lib/esm/tools/EditManipulator.js.map +1 -1
  347. package/lib/esm/tools/ElementSetTool.d.ts.map +1 -1
  348. package/lib/esm/tools/ElementSetTool.js +11 -4
  349. package/lib/esm/tools/ElementSetTool.js.map +1 -1
  350. package/lib/esm/tools/IdleTool.js +2 -2
  351. package/lib/esm/tools/IdleTool.js.map +1 -1
  352. package/lib/esm/tools/MeasureTool.d.ts.map +1 -1
  353. package/lib/esm/tools/MeasureTool.js +40 -40
  354. package/lib/esm/tools/MeasureTool.js.map +1 -1
  355. package/lib/esm/tools/SelectTool.js +7 -7
  356. package/lib/esm/tools/SelectTool.js.map +1 -1
  357. package/lib/esm/tools/Tool.js +10 -10
  358. package/lib/esm/tools/Tool.js.map +1 -1
  359. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  360. package/lib/esm/tools/ToolAdmin.js +36 -24
  361. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  362. package/lib/esm/tools/ToolAssistance.js +19 -19
  363. package/lib/esm/tools/ToolAssistance.js.map +1 -1
  364. package/lib/esm/tools/ToolSettings.js +63 -63
  365. package/lib/esm/tools/ToolSettings.js.map +1 -1
  366. package/lib/esm/tools/ViewTool.js +37 -37
  367. package/lib/esm/tools/ViewTool.js.map +1 -1
  368. package/lib/esm/workers/ImdlParser/Worker.js +2 -2
  369. package/lib/esm/workers/ImdlParser/Worker.js.map +1 -1
  370. package/lib/public/locales/en/CoreTools.json +1 -0
  371. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  372. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  373. package/package.json +20 -21
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
2
6
  Object.defineProperty(exports, "__esModule", { value: true });
3
7
  exports.SelectionSet = exports.HiliteSet = exports.SelectionSetEventType = void 0;
4
- /*---------------------------------------------------------------------------------------------
5
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
- * See LICENSE.md in the project root for license terms and full copyright notice.
7
- *--------------------------------------------------------------------------------------------*/
8
8
  /** @packageDocumentation
9
9
  * @module SelectionSet
10
10
  */
@@ -16,85 +16,38 @@ const IModelApp_1 = require("./IModelApp");
16
16
  */
17
17
  var SelectionSetEventType;
18
18
  (function (SelectionSetEventType) {
19
- /** Elements have been added to the set. */
19
+ /** Ids have been added to the set. */
20
20
  SelectionSetEventType[SelectionSetEventType["Add"] = 0] = "Add";
21
- /** Elements have been removed from the set. */
21
+ /** Ids have been removed from the set. */
22
22
  SelectionSetEventType[SelectionSetEventType["Remove"] = 1] = "Remove";
23
- /** Some elements have been added to the set and others have been removed. */
23
+ /** Some ids have been added to the set and others have been removed. */
24
24
  SelectionSetEventType[SelectionSetEventType["Replace"] = 2] = "Replace";
25
- /** All elements are about to be removed from the set. */
25
+ /** All ids have been removed from the set. */
26
26
  SelectionSetEventType[SelectionSetEventType["Clear"] = 3] = "Clear";
27
27
  })(SelectionSetEventType || (exports.SelectionSetEventType = SelectionSetEventType = {}));
28
- /** Tracks a set of hilited entities. When the set changes, notifies ViewManager so that symbology overrides can be updated in active Viewports.
28
+ /** Holds a set of hilited entities and makes any changes to the set by passing the change
29
+ * function to given `change` callback.
29
30
  * @internal
30
31
  */
31
32
  class HilitedIds extends core_bentley_1.Id64.Uint32Set {
32
- constructor(iModel) {
33
+ constructor(_change) {
33
34
  super();
34
- this._changing = false;
35
- this._iModel = iModel;
35
+ this._change = _change;
36
36
  }
37
37
  add(low, high) {
38
- super.add(low, high);
39
- this.onChanged();
38
+ this._change(() => super.add(low, high));
40
39
  }
41
40
  delete(low, high) {
42
- super.delete(low, high);
43
- this.onChanged();
41
+ this._change(() => super.delete(low, high));
44
42
  }
45
43
  clear() {
46
- super.clear();
47
- this.onChanged();
44
+ this._change(() => super.clear());
48
45
  }
49
46
  addIds(ids) {
50
- this.change(() => super.addIds(ids));
47
+ this._change(() => super.addIds(ids));
51
48
  }
52
49
  deleteIds(ids) {
53
- this.change(() => super.deleteIds(ids));
54
- }
55
- onChanged() {
56
- if (!this._changing)
57
- IModelApp_1.IModelApp.viewManager.onSelectionSetChanged(this._iModel);
58
- }
59
- change(func) {
60
- const changing = this._changing;
61
- this._changing = false;
62
- func();
63
- this._changing = changing;
64
- this.onChanged();
65
- }
66
- }
67
- /** Keeps the set of hilited elements in sync with the selection set.
68
- * @internal
69
- */
70
- class HilitedElementIds extends HilitedIds {
71
- constructor(iModel, syncWithSelectionSet = true) {
72
- super(iModel);
73
- this.wantSyncWithSelectionSet = syncWithSelectionSet;
74
- }
75
- get wantSyncWithSelectionSet() { return undefined !== this._removeListener; }
76
- set wantSyncWithSelectionSet(want) {
77
- if (want === this.wantSyncWithSelectionSet)
78
- return;
79
- if (want) {
80
- const set = this._iModel.selectionSet;
81
- this._removeListener = set.onChanged.addListener((ev) => this.change(() => this.processSelectionSetEvent(ev)));
82
- this.processSelectionSetEvent({
83
- set,
84
- type: SelectionSetEventType.Add,
85
- added: set.elements,
86
- });
87
- }
88
- else {
89
- this._removeListener();
90
- this._removeListener = undefined;
91
- }
92
- }
93
- processSelectionSetEvent(ev) {
94
- if (SelectionSetEventType.Add !== ev.type)
95
- this.deleteIds(ev.removed);
96
- if (ev.type === SelectionSetEventType.Add || ev.type === SelectionSetEventType.Replace)
97
- this.addIds(ev.added);
50
+ this._change(() => super.deleteIds(ids));
98
51
  }
99
52
  }
100
53
  /** A set of *hilited* elements for an [[IModelConnection]], by element id.
@@ -116,8 +69,9 @@ class HilitedElementIds extends HilitedIds {
116
69
  * @extensions
117
70
  */
118
71
  class HiliteSet {
119
- /** The set of hilited elements. */
120
- get elements() { return this._elements; }
72
+ #mode;
73
+ #selectionChangesListener;
74
+ #changing;
121
75
  /** Controls how the sets of hilited [[models]] and [[subcategories]] interact with one another.
122
76
  * By default they are treated as a union: a [Feature]($common) is hilited if either its model **or** its subcategory is hilited.
123
77
  * This can be changed to an intersection such that a [Feature]($common) is hilited only if both its model **and** subcategory are hilited.
@@ -125,189 +79,491 @@ class HiliteSet {
125
79
  * [[elements]] is always hilited regardless of its model or subcategories.
126
80
  */
127
81
  get modelSubCategoryMode() {
128
- return this._mode;
82
+ return this.#mode;
129
83
  }
130
84
  set modelSubCategoryMode(mode) {
131
- if (mode === this._mode)
85
+ if (mode === this.#mode) {
132
86
  return;
87
+ }
133
88
  this.onModelSubCategoryModeChanged.raiseEvent(mode);
134
- this._mode = mode;
89
+ this.#mode = mode;
135
90
  }
136
91
  /** Construct a HiliteSet
137
92
  * @param iModel The iModel containing the entities to be hilited.
138
- * @param syncWithSelectionSet If true, the contents of the `elements` set will be synchronized with those in the `iModel`'s [[SelectionSet]].
93
+ * @param syncWithSelectionSet If true, the hilite set contents will be synchronized with those in the `iModel`'s [[SelectionSet]].
139
94
  */
140
95
  constructor(iModel, syncWithSelectionSet = true) {
141
96
  this.iModel = iModel;
142
- this._mode = "union";
97
+ this.#mode = "union";
98
+ this.#changing = false;
143
99
  /** Event raised just before changing the value of [[modelSubCategoryMode]]. */
144
100
  this.onModelSubCategoryModeChanged = new core_bentley_1.BeEvent();
145
- this._elements = new HilitedElementIds(iModel, syncWithSelectionSet);
146
- this.subcategories = new HilitedIds(iModel);
147
- this.models = new HilitedIds(iModel);
101
+ this.elements = new HilitedIds((func) => this.#change(func));
102
+ this.subcategories = new HilitedIds((func) => this.#change(func));
103
+ this.models = new HilitedIds((func) => this.#change(func));
104
+ this.wantSyncWithSelectionSet = syncWithSelectionSet;
148
105
  }
149
- /** Control whether the hilited elements will be synchronized with the contents of the [[SelectionSet]].
106
+ /** Control whether the hilite set will be synchronized with the contents of the [[SelectionSet]].
150
107
  * By default they are synchronized. Applications that override this take responsibility for managing the set of hilited entities.
151
108
  * When turning synchronization off, the contents of the HiliteSet will remain unchanged.
152
109
  * When turning synchronization on, the current contents of the HiliteSet will be preserved, and the contents of the selection set will be added to them.
153
110
  */
154
- get wantSyncWithSelectionSet() { return this._elements.wantSyncWithSelectionSet; }
155
- set wantSyncWithSelectionSet(want) { this._elements.wantSyncWithSelectionSet = want; }
111
+ get wantSyncWithSelectionSet() {
112
+ return !!this.#selectionChangesListener;
113
+ }
114
+ set wantSyncWithSelectionSet(want) {
115
+ if (want === this.wantSyncWithSelectionSet) {
116
+ return;
117
+ }
118
+ if (want) {
119
+ const set = this.iModel.selectionSet;
120
+ this.#selectionChangesListener = set.onChanged.addListener((ev) => this.#processSelectionSetEvent(ev));
121
+ this.add(set.active);
122
+ }
123
+ else {
124
+ this.#selectionChangesListener();
125
+ this.#selectionChangesListener = undefined;
126
+ }
127
+ }
128
+ #onChanged() {
129
+ if (!this.#changing) {
130
+ IModelApp_1.IModelApp.viewManager.onSelectionSetChanged(this.iModel);
131
+ }
132
+ }
133
+ #change(func) {
134
+ const changing = this.#changing;
135
+ this.#changing = true;
136
+ try {
137
+ func();
138
+ }
139
+ finally {
140
+ this.#changing = changing;
141
+ }
142
+ this.#onChanged();
143
+ }
144
+ #processSelectionSetEvent(ev) {
145
+ switch (ev.type) {
146
+ case SelectionSetEventType.Add:
147
+ return this.add(ev.additions);
148
+ case SelectionSetEventType.Replace:
149
+ return this.#change(() => {
150
+ this.add(ev.additions);
151
+ this.remove(ev.removals);
152
+ });
153
+ case SelectionSetEventType.Remove:
154
+ case SelectionSetEventType.Clear:
155
+ return this.remove(ev.removals);
156
+ }
157
+ }
158
+ /** Adds a collection of geometric element, model and subcategory ids to this hilite set. */
159
+ add(additions) {
160
+ this.#change(() => {
161
+ additions.elements && this.elements.addIds(additions.elements);
162
+ additions.models && this.models.addIds(additions.models);
163
+ additions.subcategories && this.subcategories.addIds(additions.subcategories);
164
+ });
165
+ }
166
+ /** Removes a collection of geometric element, model and subcategory ids from this hilite set. */
167
+ remove(removals) {
168
+ this.#change(() => {
169
+ removals.elements && this.elements.deleteIds(removals.elements);
170
+ removals.models && this.models.deleteIds(removals.models);
171
+ removals.subcategories && this.subcategories.deleteIds(removals.subcategories);
172
+ });
173
+ }
174
+ /** Replaces ids currently in the hilite set with the given collection. */
175
+ replace(ids) {
176
+ this.#change(() => {
177
+ this.clear();
178
+ this.add(ids);
179
+ });
180
+ }
156
181
  /** Remove all elements from the hilited set. */
157
182
  clear() {
158
- this.elements.clear();
159
- this.subcategories.clear();
160
- this.models.clear();
183
+ this.#change(() => {
184
+ this.elements.clear();
185
+ this.models.clear();
186
+ this.subcategories.clear();
187
+ });
161
188
  }
162
189
  /** Returns true if nothing is hilited. */
163
- get isEmpty() { return this.elements.isEmpty && this.subcategories.isEmpty && this.models.isEmpty; }
190
+ get isEmpty() {
191
+ return this.elements.isEmpty && this.subcategories.isEmpty && this.models.isEmpty;
192
+ }
164
193
  /** Toggle the hilited state of one or more elements.
165
194
  * @param arg the ID(s) of the elements whose state is to be toggled.
166
195
  * @param onOff True to add the elements to the hilited set, false to remove them.
196
+ * @deprecated in 5.0. Use [[add]], [[remove]], [[replace]] instead.
167
197
  */
168
198
  setHilite(arg, onOff) {
169
- const oldSize = this.elements.size;
170
- for (const id of core_bentley_1.Id64.iterable(arg)) {
171
- if (onOff)
172
- this.elements.addId(id);
173
- else
174
- this.elements.deleteId(id);
199
+ if (onOff) {
200
+ this.add({ elements: arg });
201
+ }
202
+ else {
203
+ this.remove({ elements: arg });
175
204
  }
176
- if (oldSize !== this.elements.size)
177
- IModelApp_1.IModelApp.viewManager.onSelectionSetChanged(this.iModel);
178
205
  }
179
206
  }
180
207
  exports.HiliteSet = HiliteSet;
181
- /** A set of *currently selected* elements for an IModelConnection.
182
- * Selected elements are displayed with a customizable hilite effect within a [[Viewport]].
208
+ /** A set of *currently selected* geometric elements, models and subcategories for an `IModelConnection`.
209
+ * Generally, selected elements are displayed with a customizable hilite effect within a [[Viewport]], see [[HiliteSet]].
183
210
  * @see [Hilite.Settings]($common) for customization of the hilite effect.
184
211
  * @public
185
212
  * @extensions
186
213
  */
187
214
  class SelectionSet {
215
+ #selection;
188
216
  /** The IDs of the selected elements.
189
217
  * @note Do not modify this set directly. Instead, use methods like [[SelectionSet.add]].
190
218
  */
191
- get elements() { return this._elements; }
219
+ get elements() {
220
+ return this.#selection.elements;
221
+ }
222
+ /** The IDs of the selected models.
223
+ * @note Do not modify this set directly. Instead, use methods like [[SelectionSet.add]].
224
+ */
225
+ get models() {
226
+ return this.#selection.models;
227
+ }
228
+ /** The IDs of the selected subcategories.
229
+ * @note Do not modify this set directly. Instead, use methods like [[SelectionSet.add]].
230
+ */
231
+ get subcategories() {
232
+ return this.#selection.subcategories;
233
+ }
234
+ /** Get the active selection as a collection of geometric element, model and subcategory ids.
235
+ * @note Do not modify the sets in returned collection directly. Instead, use methods like [[SelectionSet.add]].
236
+ */
237
+ get active() {
238
+ return { ...this.#selection };
239
+ }
192
240
  constructor(iModel) {
193
241
  this.iModel = iModel;
194
- this._elements = new Set();
195
- /** Called whenever elements are added or removed from this SelectionSet */
242
+ /** Called whenever ids are added or removed from this `SelectionSet` */
196
243
  this.onChanged = new core_bentley_1.BeEvent();
244
+ this.#selection = {
245
+ elements: new Set(),
246
+ models: new Set(),
247
+ subcategories: new Set(),
248
+ };
197
249
  }
198
- sendChangedEvent(ev) {
250
+ #sendChangedEvent(ev) {
199
251
  IModelApp_1.IModelApp.viewManager.onSelectionSetChanged(this.iModel);
200
252
  this.onChanged.raiseEvent(ev);
201
253
  }
202
254
  /** Get the number of entries in this selection set. */
203
- get size() { return this.elements.size; }
204
- /** Check whether there are any selected elements. */
205
- get isActive() { return this.size !== 0; }
206
- /** Return true if elemId is in this SelectionSet.
255
+ get size() {
256
+ return this.elements.size + this.models.size + this.subcategories.size;
257
+ }
258
+ /** Check whether there are any ids in this selection set. */
259
+ get isActive() {
260
+ return this.elements.size > 0 || this.models.size > 0 || this.subcategories.size > 0;
261
+ }
262
+ /** Return true if elemId is in this `SelectionSet`.
207
263
  * @see [[isSelected]]
264
+ * @deprecated in 5.0. Use `SelectionSet.elements.has(elemId)` instead.
208
265
  */
209
- has(elemId) { return !!elemId && this.elements.has(elemId); }
266
+ has(elemId) {
267
+ return !!elemId && this.elements.has(elemId);
268
+ }
210
269
  /** Query whether an Id is in the selection set.
211
270
  * @see [[has]]
271
+ * @deprecated in 5.0. Use `SelectionSet.elements.has(elemId)` instead.
212
272
  */
213
- isSelected(elemId) { return !!elemId && this.elements.has(elemId); }
273
+ isSelected(elemId) {
274
+ return !!elemId && this.elements.has(elemId);
275
+ }
214
276
  /** Clear current selection set.
215
277
  * @note raises the [[onChanged]] event with [[SelectionSetEventType.Clear]].
216
278
  */
217
279
  emptyAll() {
218
- if (!this.isActive)
280
+ if (!this.isActive) {
219
281
  return;
220
- const removed = this._elements;
221
- this._elements = new Set();
222
- this.sendChangedEvent({ set: this, type: SelectionSetEventType.Clear, removed });
282
+ }
283
+ const removals = this.#selection;
284
+ this.#selection = {
285
+ elements: new Set(),
286
+ models: new Set(),
287
+ subcategories: new Set(),
288
+ };
289
+ this.#sendChangedEvent({ set: this, type: SelectionSetEventType.Clear, removals, removed: removals.elements });
223
290
  }
224
291
  /**
225
292
  * Add one or more Ids to the current selection set.
226
293
  * @param elem The set of Ids to add.
227
294
  * @returns true if any elements were added.
228
295
  */
229
- add(elem) {
230
- return this._add(elem);
231
- }
232
- _add(elem, sendEvent = true) {
233
- const oldSize = this.elements.size;
234
- for (const id of core_bentley_1.Id64.iterable(elem))
235
- this.elements.add(id);
236
- const changed = oldSize !== this.elements.size;
237
- if (sendEvent && changed)
238
- this.sendChangedEvent({ type: SelectionSetEventType.Add, set: this, added: elem });
239
- return changed;
296
+ add(adds) {
297
+ return !!this.#add(adds);
298
+ }
299
+ #add(adds, sendEvent = true) {
300
+ const oldSize = this.size;
301
+ const additions = {};
302
+ forEachSelectableType({
303
+ ids: adds,
304
+ elements: (elementIds) => addIds({
305
+ target: this.#selection.elements,
306
+ ids: elementIds,
307
+ onAdd: (id) => (additions.elements ??= []).push(id),
308
+ }),
309
+ models: (modelIds) => addIds({
310
+ target: this.#selection.models,
311
+ ids: modelIds,
312
+ onAdd: (id) => (additions.models ??= []).push(id),
313
+ }),
314
+ subcategories: (subcategoryIds) => addIds({
315
+ target: this.#selection.subcategories,
316
+ ids: subcategoryIds,
317
+ onAdd: (id) => (additions.subcategories ??= []).push(id),
318
+ }),
319
+ });
320
+ const changed = oldSize !== this.size;
321
+ if (!changed) {
322
+ return undefined;
323
+ }
324
+ if (sendEvent) {
325
+ this.#sendChangedEvent({
326
+ type: SelectionSetEventType.Add,
327
+ set: this,
328
+ additions,
329
+ added: additions.elements ?? [],
330
+ });
331
+ }
332
+ return additions;
240
333
  }
241
334
  /**
242
335
  * Remove one or more Ids from the current selection set.
243
336
  * @param elem The set of Ids to remove.
244
337
  * @returns true if any elements were removed.
245
338
  */
246
- remove(elem) {
247
- return this._remove(elem);
248
- }
249
- _remove(elem, sendEvent = true) {
250
- const oldSize = this.elements.size;
251
- for (const id of core_bentley_1.Id64.iterable(elem))
252
- this.elements.delete(id);
253
- const changed = oldSize !== this.elements.size;
254
- if (sendEvent && changed)
255
- this.sendChangedEvent({ type: SelectionSetEventType.Remove, set: this, removed: elem });
256
- return changed;
339
+ remove(removes) {
340
+ return !!this.#remove(removes);
341
+ }
342
+ #remove(removes, sendEvent = true) {
343
+ const oldSize = this.size;
344
+ const removals = {};
345
+ forEachSelectableType({
346
+ ids: removes,
347
+ elements: (elementIds) => removeIds({
348
+ target: this.#selection.elements,
349
+ ids: elementIds,
350
+ onRemove: (id) => (removals.elements ??= []).push(id),
351
+ }),
352
+ models: (modelIds) => removeIds({
353
+ target: this.#selection.models,
354
+ ids: modelIds,
355
+ onRemove: (id) => (removals.models ??= []).push(id),
356
+ }),
357
+ subcategories: (subcategoryIds) => removeIds({
358
+ target: this.#selection.subcategories,
359
+ ids: subcategoryIds,
360
+ onRemove: (id) => (removals.subcategories ??= []).push(id),
361
+ }),
362
+ });
363
+ const changed = oldSize !== this.size;
364
+ if (!changed) {
365
+ return undefined;
366
+ }
367
+ if (sendEvent) {
368
+ this.#sendChangedEvent({
369
+ type: SelectionSetEventType.Remove,
370
+ set: this,
371
+ removals,
372
+ removed: removals.elements ?? [],
373
+ });
374
+ }
375
+ return removals;
257
376
  }
258
377
  /**
259
378
  * Add one set of Ids, and remove another set of Ids. Any Ids that are in both sets are removed.
260
379
  * @returns True if any Ids were either added or removed.
261
380
  */
262
381
  addAndRemove(adds, removes) {
263
- const added = this._add(adds, false);
264
- const removed = this._remove(removes, false);
265
- if (added && removed)
266
- this.sendChangedEvent({ type: SelectionSetEventType.Replace, set: this, added: adds, removed: removes });
267
- else if (added)
268
- this.sendChangedEvent({ type: SelectionSetEventType.Add, set: this, added: adds });
269
- else if (removed)
270
- this.sendChangedEvent({ type: SelectionSetEventType.Remove, set: this, removed: removes });
271
- return (added || removed);
272
- }
273
- /** Invert the state of a set of Ids in the SelectionSet */
274
- invert(elem) {
275
- const elementsToAdd = new Set();
276
- const elementsToRemove = new Set();
277
- for (const id of core_bentley_1.Id64.iterable(elem)) {
278
- if (this.elements.has(id))
279
- elementsToRemove.add(id);
280
- else
281
- elementsToAdd.add(id);
382
+ const additions = this.#add(adds, false);
383
+ const removals = this.#remove(removes, false);
384
+ const addedElements = additions?.elements ?? [];
385
+ const removedElements = removals?.elements ?? [];
386
+ if (additions && removals) {
387
+ this.#sendChangedEvent({
388
+ type: SelectionSetEventType.Replace,
389
+ set: this,
390
+ additions,
391
+ added: addedElements,
392
+ removals,
393
+ removed: removedElements,
394
+ });
395
+ }
396
+ else if (additions) {
397
+ this.#sendChangedEvent({
398
+ type: SelectionSetEventType.Add,
399
+ set: this,
400
+ additions,
401
+ added: addedElements,
402
+ });
282
403
  }
283
- return this.addAndRemove(elementsToAdd, elementsToRemove);
404
+ else if (removals) {
405
+ this.#sendChangedEvent({
406
+ type: SelectionSetEventType.Remove,
407
+ set: this,
408
+ removals,
409
+ removed: removedElements,
410
+ });
411
+ }
412
+ return !!additions || !!removals;
413
+ }
414
+ /** Invert the state of a set of Ids in the `SelectionSet` */
415
+ invert(ids) {
416
+ const adds = {};
417
+ const removes = {};
418
+ forEachSelectableType({
419
+ ids,
420
+ elements: (elementIds) => {
421
+ for (const id of core_bentley_1.Id64.iterable(elementIds)) {
422
+ ((this.elements.has(id) ? removes : adds).elements ??= new Set()).add(id);
423
+ }
424
+ },
425
+ models: (modelIds) => {
426
+ for (const id of core_bentley_1.Id64.iterable(modelIds)) {
427
+ ((this.models.has(id) ? removes : adds).models ??= new Set()).add(id);
428
+ }
429
+ },
430
+ subcategories: (subcategoryIds) => {
431
+ for (const id of core_bentley_1.Id64.iterable(subcategoryIds)) {
432
+ ((this.subcategories.has(id) ? removes : adds).subcategories ??= new Set()).add(id);
433
+ }
434
+ },
435
+ });
436
+ return this.addAndRemove(adds, removes);
284
437
  }
285
438
  /** Change selection set to be the supplied set of Ids. */
286
- replace(elem) {
287
- if (areEqual(this.elements, elem))
288
- return;
289
- const removed = this._elements;
290
- this._elements = new Set();
291
- this._add(elem, false);
292
- if (0 < removed.size) {
293
- for (const id of core_bentley_1.Id64.iterable(elem)) {
294
- if (removed.has(id))
295
- removed.delete(id);
296
- }
439
+ replace(ids) {
440
+ if (areEqual(this.#selection, ids)) {
441
+ return false;
297
442
  }
298
- this.sendChangedEvent({ type: SelectionSetEventType.Replace, set: this, added: elem, removed });
443
+ const previousSelection = this.#selection;
444
+ this.#selection = {
445
+ elements: new Set(),
446
+ models: new Set(),
447
+ subcategories: new Set(),
448
+ };
449
+ this.#add(ids, false);
450
+ const additions = {};
451
+ const removals = {};
452
+ forEachSelectableType({
453
+ ids: this.#selection,
454
+ elements: (elementIds) => {
455
+ removeIds({
456
+ target: previousSelection.elements,
457
+ ids: elementIds,
458
+ onNotFound: (id) => (additions.elements ??= new Set()).add(id),
459
+ });
460
+ if (previousSelection.elements.size > 0) {
461
+ removals.elements = previousSelection.elements;
462
+ }
463
+ },
464
+ models: (modelIds) => {
465
+ removeIds({
466
+ target: previousSelection.models,
467
+ ids: modelIds,
468
+ onNotFound: (id) => (additions.models ??= new Set()).add(id),
469
+ });
470
+ if (previousSelection.models.size > 0) {
471
+ removals.models = previousSelection.models;
472
+ }
473
+ },
474
+ subcategories: (subcategoryIds) => {
475
+ removeIds({
476
+ target: previousSelection.subcategories,
477
+ ids: subcategoryIds,
478
+ onNotFound: (id) => (additions.subcategories ??= new Set()).add(id),
479
+ });
480
+ if (previousSelection.subcategories.size > 0) {
481
+ removals.subcategories = previousSelection.subcategories;
482
+ }
483
+ },
484
+ });
485
+ this.#sendChangedEvent({
486
+ type: SelectionSetEventType.Replace,
487
+ set: this,
488
+ additions,
489
+ added: additions.elements ?? [],
490
+ removals,
491
+ removed: removals.elements ?? [],
492
+ });
493
+ return true;
299
494
  }
300
495
  }
301
496
  exports.SelectionSet = SelectionSet;
497
+ function forEachSelectableType({ ids, elements, models, subcategories, }) {
498
+ if (typeof ids === "string" || Array.isArray(ids) || ids instanceof Set) {
499
+ elements(ids);
500
+ return { elements: ids };
501
+ }
502
+ elements(ids.elements ?? []);
503
+ models(ids.models ?? []);
504
+ subcategories(ids.subcategories ?? []);
505
+ return ids;
506
+ }
302
507
  function areEqual(lhs, rhs) {
508
+ let result = true;
509
+ forEachSelectableType({
510
+ ids: rhs,
511
+ elements: (elementIds) => {
512
+ if (result && !areIdsEqual(lhs.elements, elementIds)) {
513
+ result = false;
514
+ }
515
+ },
516
+ models: (modelIds) => {
517
+ if (result && !areIdsEqual(lhs.models, modelIds)) {
518
+ result = false;
519
+ }
520
+ },
521
+ subcategories: (subcategoryIds) => {
522
+ if (result && !areIdsEqual(lhs.subcategories, subcategoryIds)) {
523
+ result = false;
524
+ }
525
+ },
526
+ });
527
+ return result;
528
+ }
529
+ function areIdsEqual(lhs, rhs) {
303
530
  // Size is unreliable if input can contain duplicates...
304
- if (Array.isArray(rhs))
531
+ if (Array.isArray(rhs)) {
305
532
  rhs = core_bentley_1.Id64.toIdSet(rhs);
306
- if (lhs.size !== core_bentley_1.Id64.sizeOf(rhs))
533
+ }
534
+ if (lhs.size !== core_bentley_1.Id64.sizeOf(rhs)) {
307
535
  return false;
308
- for (const id of core_bentley_1.Id64.iterable(rhs))
309
- if (!lhs.has(id))
536
+ }
537
+ for (const id of core_bentley_1.Id64.iterable(rhs)) {
538
+ if (!lhs.has(id)) {
310
539
  return false;
540
+ }
541
+ }
311
542
  return true;
312
543
  }
544
+ function addIds({ target, ids, onAdd }) {
545
+ let size = target.size;
546
+ for (const id of core_bentley_1.Id64.iterable(ids)) {
547
+ target.add(id);
548
+ const newSize = target.size;
549
+ if (newSize !== size) {
550
+ onAdd?.(id);
551
+ }
552
+ size = newSize;
553
+ }
554
+ }
555
+ function removeIds({ target, ids, onRemove, onNotFound, }) {
556
+ let size = target.size;
557
+ for (const id of core_bentley_1.Id64.iterable(ids)) {
558
+ target.delete(id);
559
+ const newSize = target.size;
560
+ if (newSize !== size) {
561
+ onRemove?.(id);
562
+ }
563
+ else {
564
+ onNotFound?.(id);
565
+ }
566
+ size = newSize;
567
+ }
568
+ }
313
569
  //# sourceMappingURL=SelectionSet.js.map