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