@collabdt/core 0.0.42 → 0.0.44

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 (275) hide show
  1. package/dist/core/components/Toolbar.d.ts.map +1 -1
  2. package/dist/core/components/Toolbar.js.map +1 -1
  3. package/dist/core/components/ToolbarBody.js.map +1 -1
  4. package/dist/core/components/TopNavigationBar.js.map +1 -1
  5. package/dist/core/components/authentication/ForgotPassword.js.map +1 -1
  6. package/dist/core/components/authentication/Signin.js.map +1 -1
  7. package/dist/core/components/authentication/Signup.js.map +1 -1
  8. package/dist/core/components/settings/src/OrganizationSkeleton.js.map +1 -1
  9. package/dist/core/components/settings/src/SettingsSkeleton.js.map +1 -1
  10. package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts.map +1 -1
  11. package/dist/core/components/ui/Comments/CollapsibleCommentItem.js.map +1 -1
  12. package/dist/core/components/ui/Comments/CommentsSection.d.ts.map +1 -1
  13. package/dist/core/components/ui/Comments/CommentsSection.js.map +1 -1
  14. package/dist/core/components/ui/DataTable.d.ts.map +1 -1
  15. package/dist/core/components/ui/DataTable.js +7 -0
  16. package/dist/core/components/ui/DataTable.js.map +1 -1
  17. package/dist/core/components/ui/FilesManager/src/FileItemComponent.d.ts.map +1 -1
  18. package/dist/core/components/ui/FilesManager/src/FileItemComponent.js.map +1 -1
  19. package/dist/core/components/ui/FilesManager/src/FileMarker.d.ts +5 -2
  20. package/dist/core/components/ui/FilesManager/src/FileMarker.d.ts.map +1 -1
  21. package/dist/core/components/ui/FilesManager/src/FileMarker.js +84 -21
  22. package/dist/core/components/ui/FilesManager/src/FileMarker.js.map +1 -1
  23. package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.d.ts.map +1 -1
  24. package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.js.map +1 -1
  25. package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.d.ts.map +1 -1
  26. package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.js.map +1 -1
  27. package/dist/core/components/ui/Icons/IfcIcon.d.ts.map +1 -1
  28. package/dist/core/components/ui/Icons/IfcIcon.js.map +1 -1
  29. package/dist/core/components/ui/InfoSidebar/index.d.ts.map +1 -1
  30. package/dist/core/components/ui/InfoSidebar/index.js.map +1 -1
  31. package/dist/core/components/ui/Navbar.d.ts.map +1 -1
  32. package/dist/core/components/ui/Navbar.js.map +1 -1
  33. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts.map +1 -1
  34. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js.map +1 -1
  35. package/dist/core/components/ui/Sensors/SensorTagsSection.d.ts.map +1 -1
  36. package/dist/core/components/ui/Sensors/SensorTagsSection.js.map +1 -1
  37. package/dist/core/components/ui/Sensors/SensorsSection.d.ts.map +1 -1
  38. package/dist/core/components/ui/Sensors/SensorsSection.js.map +1 -1
  39. package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.d.ts.map +1 -1
  40. package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.js.map +1 -1
  41. package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.js +2 -2
  42. package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.js.map +1 -1
  43. package/dist/core/components/viewers/Data/infrastructureDetails/FieldRenderer.d.ts.map +1 -1
  44. package/dist/core/components/viewers/Data/infrastructureDetails/FieldRenderer.js.map +1 -1
  45. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js +2 -2
  46. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js.map +1 -1
  47. package/dist/core/components/viewers/Viewer.d.ts.map +1 -1
  48. package/dist/core/components/viewers/Viewer.js +5 -1
  49. package/dist/core/components/viewers/Viewer.js.map +1 -1
  50. package/dist/core/components/viewers/bim/BimToolbar.d.ts.map +1 -1
  51. package/dist/core/components/viewers/bim/BimToolbar.js.map +1 -1
  52. package/dist/core/components/viewers/bim/BimViewer.d.ts.map +1 -1
  53. package/dist/core/components/viewers/bim/BimViewer.js +14 -5
  54. package/dist/core/components/viewers/bim/BimViewer.js.map +1 -1
  55. package/dist/core/components/viewers/bim/src/BimLoadingState/index.d.ts.map +1 -1
  56. package/dist/core/components/viewers/bim/src/BimLoadingState/index.js +6 -0
  57. package/dist/core/components/viewers/bim/src/BimLoadingState/index.js.map +1 -1
  58. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  59. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js +168 -39
  60. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  61. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
  62. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
  63. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.d.ts.map +1 -1
  64. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js +1 -1
  65. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js.map +1 -1
  66. package/dist/core/components/viewers/bim/src/ClippingPlane.d.ts.map +1 -1
  67. package/dist/core/components/viewers/bim/src/ClippingPlane.js.map +1 -1
  68. package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts +14 -37
  69. package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts.map +1 -1
  70. package/dist/core/components/viewers/bim/src/DXFLoader/index.js +31 -318
  71. package/dist/core/components/viewers/bim/src/DXFLoader/index.js.map +1 -1
  72. package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts +66 -7
  73. package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts.map +1 -1
  74. package/dist/core/components/viewers/bim/src/FloorplanTool/index.js +253 -21
  75. package/dist/core/components/viewers/bim/src/FloorplanTool/index.js.map +1 -1
  76. package/dist/core/components/viewers/bim/src/ModelManager/index.d.ts.map +1 -1
  77. package/dist/core/components/viewers/bim/src/ModelManager/index.js +9 -0
  78. package/dist/core/components/viewers/bim/src/ModelManager/index.js.map +1 -1
  79. package/dist/core/components/viewers/bim/src/SimpleBimViewer.d.ts.map +1 -1
  80. package/dist/core/components/viewers/bim/src/SimpleBimViewer.js.map +1 -1
  81. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.d.ts +3 -2
  82. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.d.ts.map +1 -1
  83. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.js.map +1 -1
  84. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.d.ts.map +1 -1
  85. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js +3 -4
  86. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js.map +1 -1
  87. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.d.ts.map +1 -1
  88. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js +40 -18
  89. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js.map +1 -1
  90. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts +2 -5
  91. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts.map +1 -1
  92. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js +45 -59
  93. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js.map +1 -1
  94. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddSensor.d.ts.map +1 -1
  95. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddSensor.js.map +1 -1
  96. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js +1 -0
  97. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js.map +1 -1
  98. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts +10 -1
  99. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts.map +1 -1
  100. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.js +25 -73
  101. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.js.map +1 -1
  102. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.d.ts +7 -3
  103. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.d.ts.map +1 -1
  104. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js +42 -78
  105. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js.map +1 -1
  106. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.d.ts.map +1 -1
  107. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.js +52 -75
  108. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.js.map +1 -1
  109. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.d.ts +15 -3
  110. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.d.ts.map +1 -1
  111. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js +165 -105
  112. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js.map +1 -1
  113. package/dist/core/components/viewers/index.d.ts.map +1 -1
  114. package/dist/core/components/viewers/index.js.map +1 -1
  115. package/dist/core/components/viewers/map/MapViewer.d.ts.map +1 -1
  116. package/dist/core/components/viewers/map/MapViewer.js +32 -8
  117. package/dist/core/components/viewers/map/MapViewer.js.map +1 -1
  118. package/dist/core/components/viewers/map/datasets/DatasetManager/index.d.ts.map +1 -1
  119. package/dist/core/components/viewers/map/datasets/DatasetManager/index.js +4 -3
  120. package/dist/core/components/viewers/map/datasets/DatasetManager/index.js.map +1 -1
  121. package/dist/core/components/viewers/map/datasets/RowActions.d.ts.map +1 -1
  122. package/dist/core/components/viewers/map/datasets/RowActions.js +148 -0
  123. package/dist/core/components/viewers/map/datasets/RowActions.js.map +1 -1
  124. package/dist/core/components/viewers/map/datasets/index.d.ts.map +1 -1
  125. package/dist/core/components/viewers/map/datasets/index.js +32 -15
  126. package/dist/core/components/viewers/map/datasets/index.js.map +1 -1
  127. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.d.ts +4 -0
  128. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.d.ts.map +1 -0
  129. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.js +43 -0
  130. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.js.map +1 -0
  131. package/dist/core/components/viewers/map/datasets/src/localDatasets.d.ts.map +1 -1
  132. package/dist/core/components/viewers/map/datasets/src/localDatasets.js +39 -3
  133. package/dist/core/components/viewers/map/datasets/src/localDatasets.js.map +1 -1
  134. package/dist/core/components/viewers/map/datasets/src/minioDatasets.d.ts +1 -1
  135. package/dist/core/components/viewers/map/datasets/src/minioDatasets.d.ts.map +1 -1
  136. package/dist/core/components/viewers/map/datasets/src/minioDatasets.js +2 -1
  137. package/dist/core/components/viewers/map/datasets/src/minioDatasets.js.map +1 -1
  138. package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts +47 -0
  139. package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts.map +1 -0
  140. package/dist/core/components/viewers/map/datasets/src/publishedTiles.js +114 -0
  141. package/dist/core/components/viewers/map/datasets/src/publishedTiles.js.map +1 -0
  142. package/dist/core/components/viewers/map/datasets/src/wmsTime.d.ts +49 -0
  143. package/dist/core/components/viewers/map/datasets/src/wmsTime.d.ts.map +1 -0
  144. package/dist/core/components/viewers/map/datasets/src/wmsTime.js +100 -0
  145. package/dist/core/components/viewers/map/datasets/src/wmsTime.js.map +1 -0
  146. package/dist/core/components/viewers/map/src/Geocoder.d.ts.map +1 -1
  147. package/dist/core/components/viewers/map/src/Geocoder.js +9 -9
  148. package/dist/core/components/viewers/map/src/Geocoder.js.map +1 -1
  149. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.d.ts.map +1 -1
  150. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js +25 -43
  151. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js.map +1 -1
  152. package/dist/core/components/viewers/map/src/MapLayers/index.d.ts.map +1 -1
  153. package/dist/core/components/viewers/map/src/MapLayers/index.js.map +1 -1
  154. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.d.ts.map +1 -1
  155. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js +19 -2
  156. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js.map +1 -1
  157. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.d.ts +9 -0
  158. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.d.ts.map +1 -0
  159. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.js +28 -0
  160. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.js.map +1 -0
  161. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.d.ts.map +1 -1
  162. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js +1 -16
  163. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js.map +1 -1
  164. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.d.ts.map +1 -1
  165. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.js.map +1 -1
  166. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.d.ts.map +1 -1
  167. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.js +31 -2
  168. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.js.map +1 -1
  169. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.d.ts +21 -0
  170. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.d.ts.map +1 -0
  171. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.js +111 -0
  172. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.js.map +1 -0
  173. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.d.ts.map +1 -1
  174. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js +77 -2
  175. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js.map +1 -1
  176. package/dist/core/components/viewers/map/src/MapSidebar/index.d.ts.map +1 -1
  177. package/dist/core/components/viewers/map/src/MapSidebar/index.js.map +1 -1
  178. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  179. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  180. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
  181. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
  182. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapProjection.d.ts.map +1 -1
  183. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapProjection.js +19 -9
  184. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapProjection.js.map +1 -1
  185. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.d.ts.map +1 -1
  186. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js +10 -3
  187. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js.map +1 -1
  188. package/dist/core/components/viewers/map/utils/geocoder.d.ts +6 -2
  189. package/dist/core/components/viewers/map/utils/geocoder.d.ts.map +1 -1
  190. package/dist/core/components/viewers/map/utils/geocoder.js +10 -62
  191. package/dist/core/components/viewers/map/utils/geocoder.js.map +1 -1
  192. package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts +5 -0
  193. package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts.map +1 -0
  194. package/dist/core/components/viewers/map/utils/geocoding/adapters.js +192 -0
  195. package/dist/core/components/viewers/map/utils/geocoding/adapters.js.map +1 -0
  196. package/dist/core/components/viewers/map/utils/geocoding/config.d.ts +6 -0
  197. package/dist/core/components/viewers/map/utils/geocoding/config.d.ts.map +1 -0
  198. package/dist/core/components/viewers/map/utils/geocoding/config.js +14 -0
  199. package/dist/core/components/viewers/map/utils/geocoding/config.js.map +1 -0
  200. package/dist/core/components/viewers/map/utils/geocoding/index.d.ts +8 -0
  201. package/dist/core/components/viewers/map/utils/geocoding/index.d.ts.map +1 -0
  202. package/dist/core/components/viewers/map/utils/geocoding/index.js +44 -0
  203. package/dist/core/components/viewers/map/utils/geocoding/index.js.map +1 -0
  204. package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts +6 -0
  205. package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts.map +1 -0
  206. package/dist/core/components/viewers/map/utils/geocoding/osm.js +39 -0
  207. package/dist/core/components/viewers/map/utils/geocoding/osm.js.map +1 -0
  208. package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts +8 -0
  209. package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts.map +1 -0
  210. package/dist/core/components/viewers/map/utils/geocoding/pelias.js +35 -0
  211. package/dist/core/components/viewers/map/utils/geocoding/pelias.js.map +1 -0
  212. package/dist/core/components/viewers/pointcloud/PointCloudToolbar.d.ts.map +1 -1
  213. package/dist/core/components/viewers/pointcloud/PointCloudToolbar.js.map +1 -1
  214. package/dist/core/components/viewers/pointcloud/PointCloudViewer.js +1 -3
  215. package/dist/core/components/viewers/pointcloud/PointCloudViewer.js.map +1 -1
  216. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.d.ts.map +1 -1
  217. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js +2 -3
  218. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js.map +1 -1
  219. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  220. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js +8 -2
  221. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  222. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.d.ts.map +1 -1
  223. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.js.map +1 -1
  224. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js +9 -9
  225. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js.map +1 -1
  226. package/dist/core/hooks/provider.js.map +1 -1
  227. package/dist/core/plugins/host/provider.d.ts.map +1 -1
  228. package/dist/core/plugins/host/provider.js.map +1 -1
  229. package/dist/core/store/AppConfig/context.d.ts.map +1 -1
  230. package/dist/core/store/AppConfig/context.js.map +1 -1
  231. package/dist/core/store/BIM/context.d.ts.map +1 -1
  232. package/dist/core/store/BIM/context.js.map +1 -1
  233. package/dist/core/store/BIM/reducer.d.ts +0 -1
  234. package/dist/core/store/BIM/reducer.d.ts.map +1 -1
  235. package/dist/core/store/BIM/reducer.js +0 -4
  236. package/dist/core/store/BIM/reducer.js.map +1 -1
  237. package/dist/core/store/Buildings/context.d.ts.map +1 -1
  238. package/dist/core/store/Buildings/context.js.map +1 -1
  239. package/dist/core/store/Content/context.d.ts.map +1 -1
  240. package/dist/core/store/Content/context.js.map +1 -1
  241. package/dist/core/store/Datasets/context.d.ts.map +1 -1
  242. package/dist/core/store/Datasets/context.js +2 -1
  243. package/dist/core/store/Datasets/context.js.map +1 -1
  244. package/dist/core/store/Datasets/reducer.d.ts +2 -0
  245. package/dist/core/store/Datasets/reducer.d.ts.map +1 -1
  246. package/dist/core/store/Datasets/reducer.js +9 -4
  247. package/dist/core/store/Datasets/reducer.js.map +1 -1
  248. package/dist/core/store/Files/context.d.ts.map +1 -1
  249. package/dist/core/store/Files/context.js.map +1 -1
  250. package/dist/core/store/Map/context.d.ts.map +1 -1
  251. package/dist/core/store/Map/context.js.map +1 -1
  252. package/dist/core/store/Menus/context.d.ts.map +1 -1
  253. package/dist/core/store/Menus/context.js.map +1 -1
  254. package/dist/core/store/Permissions/context.d.ts.map +1 -1
  255. package/dist/core/store/Permissions/context.js.map +1 -1
  256. package/dist/core/store/PointCloud/context.d.ts.map +1 -1
  257. package/dist/core/store/PointCloud/context.js.map +1 -1
  258. package/dist/core/store/Tools/context.d.ts.map +1 -1
  259. package/dist/core/store/Tools/context.js.map +1 -1
  260. package/dist/core/types/datasetTypes.d.ts +8 -1
  261. package/dist/core/types/datasetTypes.d.ts.map +1 -1
  262. package/dist/core/types/dbTypes.d.ts +13 -13
  263. package/dist/core/types/dbTypes.d.ts.map +1 -1
  264. package/dist/core/types/dbTypes.js +13 -13
  265. package/dist/core/types/dbTypes.js.map +1 -1
  266. package/dist/core/types/index.d.ts +1 -1
  267. package/dist/core/types/index.d.ts.map +1 -1
  268. package/dist/core/types/index.js.map +1 -1
  269. package/dist/core/utils/imageUtils.js +1 -1
  270. package/dist/core/utils/imageUtils.js.map +1 -1
  271. package/package.json +4 -3
  272. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.d.ts +0 -3
  273. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.d.ts.map +0 -1
  274. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.js +0 -173
  275. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.js.map +0 -1
@@ -27,8 +27,26 @@ export declare class FloorplanTool extends OBC.Component {
27
27
  /** True-north rotation in degrees (clockwise from default screen-up).
28
28
  * Persists across storey switches but resets to 0 on tool dispose. */
29
29
  private _northAngle;
30
+ /** True while the user is drawing the two-point north line. */
30
31
  private _pickingNorth;
31
32
  private _pickHandler;
33
+ private _moveHandler;
34
+ private _keyHandler;
35
+ /** First clicked point of the north line, in drawing-local space (Y=0).
36
+ * Null until the user places the first point. */
37
+ private _drawStart;
38
+ /** Cached snap targets — projected-geometry vertices flattened as
39
+ * [x0,z0, x1,z1, …] in drawing-local space. Rebuilt each time draw mode
40
+ * starts so it reflects the active storey's lines. */
41
+ private _snapVerts;
42
+ /** Rubber-band preview line + cursor snap marker, parented to the active
43
+ * drawing so they inherit its world transform. */
44
+ private _previewLine;
45
+ private _snapMarker;
46
+ /** Canvas cursor before draw mode swapped in the crosshair — typically the
47
+ * floorplan-mode "grab" hand. Restored (not cleared) on exit so panning
48
+ * keeps the hand; only leaving floorplan mode reverts to the default. */
49
+ private _savedPickCursor;
32
50
  private projector;
33
51
  private renderer;
34
52
  private camera;
@@ -74,16 +92,57 @@ export declare class FloorplanTool extends OBC.Component {
74
92
  * camera azimuth immediately if a floorplan is currently active so the
75
93
  * view re-orients. */
76
94
  setNorthAngle(degrees: number): void;
77
- /** Enter line-pick mode. The next click on the canvas raycasts against
78
- * the active drawing's lines; the hit line's bearing becomes the new
79
- * true-north angle. No-op if no floorplan is active. */
95
+ /** Enter two-point draw mode. The user clicks two points on the active
96
+ * floorplan (each snapped to the nearest projected-geometry vertex); the
97
+ * bearing of the segment between them becomes the new true-north angle.
98
+ * A rubber-band preview + snap marker track the cursor; Esc cancels.
99
+ * No-op if no floorplan is active. */
80
100
  startPickNorth(): void;
81
- /** Exit line-pick mode without applying any rotation. */
101
+ /** Exit draw mode without applying any rotation. Tears down the canvas
102
+ * listeners and removes the rubber-band preview. */
82
103
  cancelPickNorth(): void;
83
- /** Click handler installed during line-pick mode. Raycasts against the
84
- * active drawing's `LineSegments` and applies the hit line's bearing
85
- * (clockwise from local north) as the new true-north angle. */
104
+ /** Click handler for draw mode. First click places the start point; the
105
+ * second rotates the view so the drawn segment becomes parallel to the
106
+ * screen X-axis (horizontal). Both points lie on the drawing's horizontal
107
+ * plane (Y=0), so only the in-plane direction matters. */
86
108
  private _onPickClick;
109
+ /** Camera azimuth (degrees) that rotates the top-down view so the world
110
+ * segment a→b lands parallel to the screen X-axis (horizontal).
111
+ *
112
+ * Derivation: with the standard Y-up spherical convention camera-controls
113
+ * uses, the camera's screen-right world direction has angle ρ = −θ + C
114
+ * (θ = azimuth). We measure ρ₀ and θ₀ from the live camera so C cancels —
115
+ * making the result independent of the drawing's orientation and the
116
+ * controls' up-space. We then solve ρ(θ) = λ (the segment's world angle),
117
+ * giving θ = ρ₀ + θ₀ − λ. Returns null if the controls are unavailable. */
118
+ private _azimuthToAlignLineToX;
119
+ /** Mousemove handler for draw mode — keeps the snap marker (and, after the
120
+ * first click, the rubber-band line) glued to the cursor's snapped point. */
121
+ private _onPickMove;
122
+ /** Convert a canvas mouse event into a point on the drawing plane, in
123
+ * drawing-local space (XZ plane, Y=0). Casts a ray from the active camera,
124
+ * transforms it into the drawing's local frame, and intersects Y=0. */
125
+ private _eventToLocalPoint;
126
+ /** Snap a drawing-local point to the nearest projected-geometry vertex
127
+ * within the snap radius; returns the point unchanged if none is close. */
128
+ private _snap;
129
+ /** Snap radius in drawing-local units (= world units; the drawing is
130
+ * unscaled), derived from a fixed ~12 px tolerance at the current ortho
131
+ * zoom so it feels consistent as the user zooms. */
132
+ private _snapRadiusLocal;
133
+ /** Flatten every visible projected line vertex into drawing-local [x,z]
134
+ * pairs for endpoint snapping. Each vertex is transformed through its
135
+ * owning object's world matrix into the drawing's local frame, so it
136
+ * works regardless of how layers nest the `LineSegments`. */
137
+ private _collectSnapVertices;
138
+ /** Update (creating on first use) the cursor snap marker and, once the
139
+ * first point is placed, the rubber-band line from start → cursor. Both
140
+ * live in drawing-local space, Y=0. */
141
+ private _updatePreview;
142
+ /** Remove + dispose the preview line and snap marker. Uses each object's
143
+ * own parent so it stays correct even when called from deactivate(),
144
+ * where `_activeId` is already null. */
145
+ private _clearPreview;
87
146
  /** Push `_northAngle` into the camera-controls azimuth so the view
88
147
  * rotates around the active floor's centre. Called on every activate
89
148
  * and whenever the angle changes while a floorplan is active. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/FloorplanTool/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/FloorplanTool/index.ts"],"names":[],"mappings":"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"}
@@ -53,8 +53,26 @@ const _FloorplanTool = class _FloorplanTool extends OBC.Component {
53
53
  /** True-north rotation in degrees (clockwise from default screen-up).
54
54
  * Persists across storey switches but resets to 0 on tool dispose. */
55
55
  this._northAngle = 0;
56
+ /** True while the user is drawing the two-point north line. */
56
57
  this._pickingNorth = false;
57
58
  this._pickHandler = null;
59
+ this._moveHandler = null;
60
+ this._keyHandler = null;
61
+ /** First clicked point of the north line, in drawing-local space (Y=0).
62
+ * Null until the user places the first point. */
63
+ this._drawStart = null;
64
+ /** Cached snap targets — projected-geometry vertices flattened as
65
+ * [x0,z0, x1,z1, …] in drawing-local space. Rebuilt each time draw mode
66
+ * starts so it reflects the active storey's lines. */
67
+ this._snapVerts = null;
68
+ /** Rubber-band preview line + cursor snap marker, parented to the active
69
+ * drawing so they inherit its world transform. */
70
+ this._previewLine = null;
71
+ this._snapMarker = null;
72
+ /** Canvas cursor before draw mode swapped in the crosshair — typically the
73
+ * floorplan-mode "grab" hand. Restored (not cleared) on exit so panning
74
+ * keeps the hand; only leaving floorplan mode reverts to the default. */
75
+ this._savedPickCursor = null;
58
76
  components.add(_FloorplanTool.uuid, this);
59
77
  this.projector = new StoreyProjector(components);
60
78
  this.renderer = new FloorplanRenderer(components, this.projector);
@@ -222,61 +240,275 @@ const _FloorplanTool = class _FloorplanTool extends OBC.Component {
222
240
  this.onNorthAngleChanged.trigger(normalized);
223
241
  if (this._activeId) this._applyNorthToCamera();
224
242
  }
225
- /** Enter line-pick mode. The next click on the canvas raycasts against
226
- * the active drawing's lines; the hit line's bearing becomes the new
227
- * true-north angle. No-op if no floorplan is active. */
243
+ /** Enter two-point draw mode. The user clicks two points on the active
244
+ * floorplan (each snapped to the nearest projected-geometry vertex); the
245
+ * bearing of the segment between them becomes the new true-north angle.
246
+ * A rubber-band preview + snap marker track the cursor; Esc cancels.
247
+ * No-op if no floorplan is active. */
228
248
  startPickNorth() {
229
249
  if (this._pickingNorth || !this._activeId) return;
250
+ const entry = this.activeDrawing;
230
251
  const world = this.components.get(CurrentWorld).world;
231
- if (!(world == null ? void 0 : world.renderer)) return;
252
+ if (!(entry == null ? void 0 : entry.drawing) || !(world == null ? void 0 : world.renderer)) return;
232
253
  const canvas = world.renderer.three.domElement;
254
+ this._drawStart = null;
255
+ this._snapVerts = this._collectSnapVertices(entry);
233
256
  this._pickHandler = (e) => this._onPickClick(e);
257
+ this._moveHandler = (e) => this._onPickMove(e);
258
+ this._keyHandler = (e) => {
259
+ if (e.key === "Escape") this.cancelPickNorth();
260
+ };
234
261
  canvas.addEventListener("click", this._pickHandler);
262
+ canvas.addEventListener("mousemove", this._moveHandler);
263
+ window.addEventListener("keydown", this._keyHandler);
264
+ this._savedPickCursor = canvas.style.cursor;
235
265
  canvas.style.cursor = "crosshair";
236
266
  this._pickingNorth = true;
237
267
  this.onPickingNorthChanged.trigger(true);
238
268
  }
239
- /** Exit line-pick mode without applying any rotation. */
269
+ /** Exit draw mode without applying any rotation. Tears down the canvas
270
+ * listeners and removes the rubber-band preview. */
240
271
  cancelPickNorth() {
241
- var _a, _b;
272
+ var _a, _b, _c;
242
273
  if (!this._pickingNorth) return;
243
274
  const world = this.components.get(CurrentWorld).world;
244
275
  const canvas = (_b = (_a = world == null ? void 0 : world.renderer) == null ? void 0 : _a.three.domElement) != null ? _b : null;
245
- if (canvas && this._pickHandler) {
246
- canvas.removeEventListener("click", this._pickHandler);
247
- canvas.style.cursor = "";
276
+ if (canvas) {
277
+ if (this._pickHandler) canvas.removeEventListener("click", this._pickHandler);
278
+ if (this._moveHandler) canvas.removeEventListener("mousemove", this._moveHandler);
279
+ canvas.style.cursor = (_c = this._savedPickCursor) != null ? _c : "grab";
248
280
  }
281
+ this._savedPickCursor = null;
282
+ if (this._keyHandler) window.removeEventListener("keydown", this._keyHandler);
249
283
  this._pickHandler = null;
284
+ this._moveHandler = null;
285
+ this._keyHandler = null;
286
+ this._drawStart = null;
287
+ this._snapVerts = null;
288
+ this._clearPreview();
250
289
  this._pickingNorth = false;
251
290
  this.onPickingNorthChanged.trigger(false);
252
291
  }
253
- /** Click handler installed during line-pick mode. Raycasts against the
254
- * active drawing's `LineSegments` and applies the hit line's bearing
255
- * (clockwise from local north) as the new true-north angle. */
292
+ /** Click handler for draw mode. First click places the start point; the
293
+ * second rotates the view so the drawn segment becomes parallel to the
294
+ * screen X-axis (horizontal). Both points lie on the drawing's horizontal
295
+ * plane (Y=0), so only the in-plane direction matters. */
256
296
  _onPickClick(event) {
257
297
  const entry = this.activeDrawing;
258
298
  if (!(entry == null ? void 0 : entry.drawing)) return;
299
+ const local = this._eventToLocalPoint(event, entry);
300
+ if (!local) return;
301
+ const point = this._snap(local);
302
+ if (!this._drawStart) {
303
+ this._drawStart = point;
304
+ this._updatePreview(entry, point);
305
+ this._requestUpdate();
306
+ return;
307
+ }
308
+ const dx = point.x - this._drawStart.x;
309
+ const dz = point.z - this._drawStart.z;
310
+ if (dx * dx + dz * dz < 1e-6) return;
311
+ const drawing = entry.drawing;
312
+ drawing.three.updateWorldMatrix(true, false);
313
+ const aWorld = drawing.three.localToWorld(this._drawStart.clone());
314
+ const bWorld = drawing.three.localToWorld(point.clone());
315
+ const azimuthDeg = this._azimuthToAlignLineToX(aWorld, bWorld);
316
+ if (azimuthDeg !== null) this.setNorthAngle(azimuthDeg);
317
+ this.cancelPickNorth();
318
+ }
319
+ /** Camera azimuth (degrees) that rotates the top-down view so the world
320
+ * segment a→b lands parallel to the screen X-axis (horizontal).
321
+ *
322
+ * Derivation: with the standard Y-up spherical convention camera-controls
323
+ * uses, the camera's screen-right world direction has angle ρ = −θ + C
324
+ * (θ = azimuth). We measure ρ₀ and θ₀ from the live camera so C cancels —
325
+ * making the result independent of the drawing's orientation and the
326
+ * controls' up-space. We then solve ρ(θ) = λ (the segment's world angle),
327
+ * giving θ = ρ₀ + θ₀ − λ. Returns null if the controls are unavailable. */
328
+ _azimuthToAlignLineToX(aWorld, bWorld) {
329
+ var _a, _b;
330
+ const world = this.components.get(CurrentWorld).world;
331
+ const cam = (_a = world == null ? void 0 : world.camera) == null ? void 0 : _a.three;
332
+ const controls = (_b = world == null ? void 0 : world.camera) == null ? void 0 : _b.controls;
333
+ if (!cam || typeof (controls == null ? void 0 : controls.azimuthAngle) !== "number") return null;
334
+ const lx = bWorld.x - aWorld.x;
335
+ const lz = bWorld.z - aWorld.z;
336
+ if (lx * lx + lz * lz < 1e-12) return null;
337
+ const lambda = Math.atan2(lz, lx);
338
+ cam.updateMatrixWorld();
339
+ const e = cam.matrixWorld.elements;
340
+ const rho0 = Math.atan2(e[2], e[0]);
341
+ const theta0 = controls.azimuthAngle;
342
+ return (rho0 + theta0 - lambda) * 180 / Math.PI;
343
+ }
344
+ /** Mousemove handler for draw mode — keeps the snap marker (and, after the
345
+ * first click, the rubber-band line) glued to the cursor's snapped point. */
346
+ _onPickMove(event) {
347
+ const entry = this.activeDrawing;
348
+ if (!(entry == null ? void 0 : entry.drawing)) return;
349
+ const local = this._eventToLocalPoint(event, entry);
350
+ if (!local) return;
351
+ this._updatePreview(entry, this._snap(local));
352
+ this._requestUpdate();
353
+ }
354
+ /** Convert a canvas mouse event into a point on the drawing plane, in
355
+ * drawing-local space (XZ plane, Y=0). Casts a ray from the active camera,
356
+ * transforms it into the drawing's local frame, and intersects Y=0. */
357
+ _eventToLocalPoint(event, entry) {
259
358
  const world = this.components.get(CurrentWorld).world;
260
- if (!(world == null ? void 0 : world.renderer) || !(world == null ? void 0 : world.camera)) return;
359
+ if (!(world == null ? void 0 : world.renderer) || !world.camera || !entry.drawing) return null;
261
360
  const canvas = world.renderer.three.domElement;
262
361
  const rect = canvas.getBoundingClientRect();
263
362
  const x = (event.clientX - rect.left) / rect.width * 2 - 1;
264
363
  const y = -((event.clientY - rect.top) / rect.height) * 2 + 1;
265
364
  const raycaster = new THREE.Raycaster();
266
- raycaster.params.Line.threshold = 0.5;
267
365
  raycaster.setFromCamera(
268
366
  new THREE.Vector2(x, y),
269
367
  world.camera.three
270
368
  );
271
- const hit = entry.drawing.raycast(raycaster.ray, null);
272
- if (!(hit == null ? void 0 : hit.line)) {
369
+ const drawing = entry.drawing;
370
+ drawing.three.updateWorldMatrix(true, false);
371
+ const inv = new THREE.Matrix4().copy(drawing.three.matrixWorld).invert();
372
+ const origin = raycaster.ray.origin.clone().applyMatrix4(inv);
373
+ const dir = raycaster.ray.direction.clone().transformDirection(inv);
374
+ if (Math.abs(dir.y) < 1e-9) return null;
375
+ const t = -origin.y / dir.y;
376
+ if (!Number.isFinite(t)) return null;
377
+ return new THREE.Vector3(
378
+ origin.x + dir.x * t,
379
+ 0,
380
+ origin.z + dir.z * t
381
+ );
382
+ }
383
+ /** Snap a drawing-local point to the nearest projected-geometry vertex
384
+ * within the snap radius; returns the point unchanged if none is close. */
385
+ _snap(local) {
386
+ const verts = this._snapVerts;
387
+ if (!verts) return local;
388
+ const radius = this._snapRadiusLocal();
389
+ let best = -1;
390
+ let bestD2 = radius * radius;
391
+ for (let i = 0; i < verts.length; i += 2) {
392
+ const dx = verts[i] - local.x;
393
+ const dz = verts[i + 1] - local.z;
394
+ const d2 = dx * dx + dz * dz;
395
+ if (d2 < bestD2) {
396
+ bestD2 = d2;
397
+ best = i;
398
+ }
399
+ }
400
+ if (best < 0) return local;
401
+ return new THREE.Vector3(verts[best], 0, verts[best + 1]);
402
+ }
403
+ /** Snap radius in drawing-local units (= world units; the drawing is
404
+ * unscaled), derived from a fixed ~12 px tolerance at the current ortho
405
+ * zoom so it feels consistent as the user zooms. */
406
+ _snapRadiusLocal() {
407
+ var _a, _b;
408
+ const SNAP_PX = 12;
409
+ const FALLBACK = 0.5;
410
+ const world = this.components.get(CurrentWorld).world;
411
+ const cam = (_a = world == null ? void 0 : world.camera) == null ? void 0 : _a.three;
412
+ const canvas = (_b = world == null ? void 0 : world.renderer) == null ? void 0 : _b.three.domElement;
413
+ if (!(cam == null ? void 0 : cam.isOrthographicCamera) || !canvas) return FALLBACK;
414
+ const worldWidth = (cam.right - cam.left) / (cam.zoom || 1);
415
+ const worldPerPixel = worldWidth / Math.max(1, canvas.clientWidth);
416
+ return worldPerPixel * SNAP_PX || FALLBACK;
417
+ }
418
+ /** Flatten every visible projected line vertex into drawing-local [x,z]
419
+ * pairs for endpoint snapping. Each vertex is transformed through its
420
+ * owning object's world matrix into the drawing's local frame, so it
421
+ * works regardless of how layers nest the `LineSegments`. */
422
+ _collectSnapVertices(entry) {
423
+ const drawing = entry.drawing;
424
+ if (!drawing) return null;
425
+ drawing.three.updateWorldMatrix(true, true);
426
+ const inv = new THREE.Matrix4().copy(drawing.three.matrixWorld).invert();
427
+ const v = new THREE.Vector3();
428
+ const out = [];
429
+ drawing.three.traverse((child) => {
430
+ var _a, _b, _c;
431
+ if (!(child instanceof THREE.LineSegments) || !child.visible) return;
432
+ if ((_a = child.userData) == null ? void 0 : _a.isDimension) return;
433
+ const pos = (_c = (_b = child.geometry) == null ? void 0 : _b.attributes) == null ? void 0 : _c.position;
434
+ if (!pos) return;
435
+ for (let i = 0; i < pos.count; i++) {
436
+ v.set(pos.getX(i), pos.getY(i), pos.getZ(i)).applyMatrix4(child.matrixWorld).applyMatrix4(inv);
437
+ out.push(v.x, v.z);
438
+ }
439
+ });
440
+ return out.length ? new Float32Array(out) : null;
441
+ }
442
+ /** Update (creating on first use) the cursor snap marker and, once the
443
+ * first point is placed, the rubber-band line from start → cursor. Both
444
+ * live in drawing-local space, Y=0. */
445
+ _updatePreview(entry, current) {
446
+ const drawing = entry.drawing;
447
+ if (!drawing) return;
448
+ const COLOR = 2450411;
449
+ if (!this._snapMarker) {
450
+ const geom = new THREE.BufferGeometry();
451
+ geom.setAttribute(
452
+ "position",
453
+ new THREE.Float32BufferAttribute(
454
+ new Float32Array([-1, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, 1]),
455
+ 3
456
+ )
457
+ );
458
+ this._snapMarker = new THREE.LineSegments(
459
+ geom,
460
+ new THREE.LineBasicMaterial({ color: COLOR })
461
+ );
462
+ this._snapMarker.renderOrder = 999;
463
+ drawing.three.add(this._snapMarker);
464
+ }
465
+ const arm = this._snapRadiusLocal();
466
+ this._snapMarker.scale.setScalar(arm);
467
+ this._snapMarker.position.set(current.x, 0, current.z);
468
+ this._snapMarker.visible = true;
469
+ if (!this._drawStart) {
470
+ if (this._previewLine) this._previewLine.visible = false;
273
471
  return;
274
472
  }
275
- const dx = hit.line.end.x - hit.line.start.x;
276
- const dz = hit.line.end.z - hit.line.start.z;
277
- const bearingDeg = Math.atan2(dx, -dz) * 180 / Math.PI;
278
- this.setNorthAngle(bearingDeg);
279
- this.cancelPickNorth();
473
+ if (!this._previewLine) {
474
+ const geom = new THREE.BufferGeometry();
475
+ geom.setAttribute(
476
+ "position",
477
+ new THREE.Float32BufferAttribute(new Float32Array(6), 3)
478
+ );
479
+ this._previewLine = new THREE.Line(
480
+ geom,
481
+ new THREE.LineBasicMaterial({ color: COLOR })
482
+ );
483
+ this._previewLine.renderOrder = 999;
484
+ drawing.three.add(this._previewLine);
485
+ }
486
+ const pos = this._previewLine.geometry.attributes.position;
487
+ pos.setXYZ(0, this._drawStart.x, 0, this._drawStart.z);
488
+ pos.setXYZ(1, current.x, 0, current.z);
489
+ pos.needsUpdate = true;
490
+ this._previewLine.visible = true;
491
+ }
492
+ /** Remove + dispose the preview line and snap marker. Uses each object's
493
+ * own parent so it stays correct even when called from deactivate(),
494
+ * where `_activeId` is already null. */
495
+ _clearPreview() {
496
+ var _a, _b;
497
+ if (this._previewLine) {
498
+ (_a = this._previewLine.parent) == null ? void 0 : _a.remove(this._previewLine);
499
+ this._previewLine.geometry.dispose();
500
+ const m = this._previewLine.material;
501
+ if (!Array.isArray(m)) m.dispose();
502
+ this._previewLine = null;
503
+ }
504
+ if (this._snapMarker) {
505
+ (_b = this._snapMarker.parent) == null ? void 0 : _b.remove(this._snapMarker);
506
+ this._snapMarker.geometry.dispose();
507
+ const m = this._snapMarker.material;
508
+ if (!Array.isArray(m)) m.dispose();
509
+ this._snapMarker = null;
510
+ }
511
+ this._requestUpdate();
280
512
  }
281
513
  /** Push `_northAngle` into the camera-controls azimuth so the view
282
514
  * rotates around the active floor's centre. Called on every activate