@collabdt/core 0.0.42 → 0.0.43

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 (264) 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/siteDetails/AssociatedBuildings.js +2 -2
  44. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js.map +1 -1
  45. package/dist/core/components/viewers/Viewer.d.ts.map +1 -1
  46. package/dist/core/components/viewers/Viewer.js +5 -1
  47. package/dist/core/components/viewers/Viewer.js.map +1 -1
  48. package/dist/core/components/viewers/bim/BimToolbar.d.ts.map +1 -1
  49. package/dist/core/components/viewers/bim/BimToolbar.js.map +1 -1
  50. package/dist/core/components/viewers/bim/BimViewer.d.ts.map +1 -1
  51. package/dist/core/components/viewers/bim/BimViewer.js +14 -5
  52. package/dist/core/components/viewers/bim/BimViewer.js.map +1 -1
  53. package/dist/core/components/viewers/bim/src/BimLoadingState/index.d.ts.map +1 -1
  54. package/dist/core/components/viewers/bim/src/BimLoadingState/index.js +6 -0
  55. package/dist/core/components/viewers/bim/src/BimLoadingState/index.js.map +1 -1
  56. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  57. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js +168 -39
  58. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  59. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
  60. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
  61. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.d.ts.map +1 -1
  62. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js +1 -1
  63. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js.map +1 -1
  64. package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts +14 -37
  65. package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts.map +1 -1
  66. package/dist/core/components/viewers/bim/src/DXFLoader/index.js +31 -318
  67. package/dist/core/components/viewers/bim/src/DXFLoader/index.js.map +1 -1
  68. package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts +66 -7
  69. package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts.map +1 -1
  70. package/dist/core/components/viewers/bim/src/FloorplanTool/index.js +253 -21
  71. package/dist/core/components/viewers/bim/src/FloorplanTool/index.js.map +1 -1
  72. package/dist/core/components/viewers/bim/src/ModelManager/index.d.ts.map +1 -1
  73. package/dist/core/components/viewers/bim/src/ModelManager/index.js +9 -0
  74. package/dist/core/components/viewers/bim/src/ModelManager/index.js.map +1 -1
  75. package/dist/core/components/viewers/bim/src/SimpleBimViewer.d.ts.map +1 -1
  76. package/dist/core/components/viewers/bim/src/SimpleBimViewer.js.map +1 -1
  77. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.d.ts +3 -2
  78. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.d.ts.map +1 -1
  79. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.js.map +1 -1
  80. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.d.ts.map +1 -1
  81. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js +3 -4
  82. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js.map +1 -1
  83. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.d.ts.map +1 -1
  84. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js +40 -18
  85. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js.map +1 -1
  86. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts +2 -5
  87. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts.map +1 -1
  88. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js +45 -59
  89. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js.map +1 -1
  90. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js +1 -0
  91. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js.map +1 -1
  92. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts +10 -1
  93. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts.map +1 -1
  94. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.js +25 -73
  95. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.js.map +1 -1
  96. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.d.ts +7 -3
  97. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.d.ts.map +1 -1
  98. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js +42 -78
  99. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js.map +1 -1
  100. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.d.ts.map +1 -1
  101. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.js +52 -75
  102. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.js.map +1 -1
  103. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.d.ts +15 -3
  104. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.d.ts.map +1 -1
  105. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js +165 -105
  106. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js.map +1 -1
  107. package/dist/core/components/viewers/index.d.ts.map +1 -1
  108. package/dist/core/components/viewers/index.js.map +1 -1
  109. package/dist/core/components/viewers/map/MapViewer.d.ts.map +1 -1
  110. package/dist/core/components/viewers/map/MapViewer.js +1 -0
  111. package/dist/core/components/viewers/map/MapViewer.js.map +1 -1
  112. package/dist/core/components/viewers/map/datasets/DatasetManager/index.d.ts.map +1 -1
  113. package/dist/core/components/viewers/map/datasets/DatasetManager/index.js +4 -3
  114. package/dist/core/components/viewers/map/datasets/DatasetManager/index.js.map +1 -1
  115. package/dist/core/components/viewers/map/datasets/RowActions.d.ts.map +1 -1
  116. package/dist/core/components/viewers/map/datasets/RowActions.js +148 -0
  117. package/dist/core/components/viewers/map/datasets/RowActions.js.map +1 -1
  118. package/dist/core/components/viewers/map/datasets/index.d.ts.map +1 -1
  119. package/dist/core/components/viewers/map/datasets/index.js +32 -15
  120. package/dist/core/components/viewers/map/datasets/index.js.map +1 -1
  121. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.d.ts +4 -0
  122. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.d.ts.map +1 -0
  123. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.js +43 -0
  124. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.js.map +1 -0
  125. package/dist/core/components/viewers/map/datasets/src/localDatasets.d.ts.map +1 -1
  126. package/dist/core/components/viewers/map/datasets/src/localDatasets.js +39 -3
  127. package/dist/core/components/viewers/map/datasets/src/localDatasets.js.map +1 -1
  128. package/dist/core/components/viewers/map/datasets/src/minioDatasets.d.ts +1 -1
  129. package/dist/core/components/viewers/map/datasets/src/minioDatasets.d.ts.map +1 -1
  130. package/dist/core/components/viewers/map/datasets/src/minioDatasets.js +2 -1
  131. package/dist/core/components/viewers/map/datasets/src/minioDatasets.js.map +1 -1
  132. package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts +47 -0
  133. package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts.map +1 -0
  134. package/dist/core/components/viewers/map/datasets/src/publishedTiles.js +114 -0
  135. package/dist/core/components/viewers/map/datasets/src/publishedTiles.js.map +1 -0
  136. package/dist/core/components/viewers/map/datasets/src/wmsTime.d.ts +49 -0
  137. package/dist/core/components/viewers/map/datasets/src/wmsTime.d.ts.map +1 -0
  138. package/dist/core/components/viewers/map/datasets/src/wmsTime.js +100 -0
  139. package/dist/core/components/viewers/map/datasets/src/wmsTime.js.map +1 -0
  140. package/dist/core/components/viewers/map/src/Geocoder.d.ts.map +1 -1
  141. package/dist/core/components/viewers/map/src/Geocoder.js +9 -9
  142. package/dist/core/components/viewers/map/src/Geocoder.js.map +1 -1
  143. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.d.ts.map +1 -1
  144. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js +25 -43
  145. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js.map +1 -1
  146. package/dist/core/components/viewers/map/src/MapLayers/index.d.ts.map +1 -1
  147. package/dist/core/components/viewers/map/src/MapLayers/index.js.map +1 -1
  148. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.d.ts.map +1 -1
  149. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js +19 -2
  150. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js.map +1 -1
  151. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.d.ts +9 -0
  152. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.d.ts.map +1 -0
  153. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.js +28 -0
  154. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.js.map +1 -0
  155. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.d.ts.map +1 -1
  156. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js +1 -16
  157. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js.map +1 -1
  158. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.d.ts.map +1 -1
  159. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.js.map +1 -1
  160. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.d.ts.map +1 -1
  161. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.js +31 -2
  162. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.js.map +1 -1
  163. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.d.ts +21 -0
  164. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.d.ts.map +1 -0
  165. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.js +111 -0
  166. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.js.map +1 -0
  167. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.d.ts.map +1 -1
  168. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js +77 -2
  169. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js.map +1 -1
  170. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  171. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  172. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
  173. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
  174. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.d.ts.map +1 -1
  175. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js +10 -3
  176. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js.map +1 -1
  177. package/dist/core/components/viewers/map/utils/geocoder.d.ts +6 -2
  178. package/dist/core/components/viewers/map/utils/geocoder.d.ts.map +1 -1
  179. package/dist/core/components/viewers/map/utils/geocoder.js +10 -62
  180. package/dist/core/components/viewers/map/utils/geocoder.js.map +1 -1
  181. package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts +5 -0
  182. package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts.map +1 -0
  183. package/dist/core/components/viewers/map/utils/geocoding/adapters.js +192 -0
  184. package/dist/core/components/viewers/map/utils/geocoding/adapters.js.map +1 -0
  185. package/dist/core/components/viewers/map/utils/geocoding/config.d.ts +6 -0
  186. package/dist/core/components/viewers/map/utils/geocoding/config.d.ts.map +1 -0
  187. package/dist/core/components/viewers/map/utils/geocoding/config.js +14 -0
  188. package/dist/core/components/viewers/map/utils/geocoding/config.js.map +1 -0
  189. package/dist/core/components/viewers/map/utils/geocoding/index.d.ts +8 -0
  190. package/dist/core/components/viewers/map/utils/geocoding/index.d.ts.map +1 -0
  191. package/dist/core/components/viewers/map/utils/geocoding/index.js +44 -0
  192. package/dist/core/components/viewers/map/utils/geocoding/index.js.map +1 -0
  193. package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts +6 -0
  194. package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts.map +1 -0
  195. package/dist/core/components/viewers/map/utils/geocoding/osm.js +39 -0
  196. package/dist/core/components/viewers/map/utils/geocoding/osm.js.map +1 -0
  197. package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts +8 -0
  198. package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts.map +1 -0
  199. package/dist/core/components/viewers/map/utils/geocoding/pelias.js +35 -0
  200. package/dist/core/components/viewers/map/utils/geocoding/pelias.js.map +1 -0
  201. package/dist/core/components/viewers/pointcloud/PointCloudToolbar.d.ts.map +1 -1
  202. package/dist/core/components/viewers/pointcloud/PointCloudToolbar.js.map +1 -1
  203. package/dist/core/components/viewers/pointcloud/PointCloudViewer.js +1 -3
  204. package/dist/core/components/viewers/pointcloud/PointCloudViewer.js.map +1 -1
  205. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.d.ts.map +1 -1
  206. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js +2 -3
  207. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js.map +1 -1
  208. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  209. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js +8 -2
  210. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  211. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.d.ts.map +1 -1
  212. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.js.map +1 -1
  213. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js +9 -9
  214. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js.map +1 -1
  215. package/dist/core/hooks/provider.js.map +1 -1
  216. package/dist/core/plugins/host/provider.d.ts.map +1 -1
  217. package/dist/core/plugins/host/provider.js.map +1 -1
  218. package/dist/core/store/AppConfig/context.d.ts.map +1 -1
  219. package/dist/core/store/AppConfig/context.js.map +1 -1
  220. package/dist/core/store/BIM/context.d.ts.map +1 -1
  221. package/dist/core/store/BIM/context.js.map +1 -1
  222. package/dist/core/store/BIM/reducer.d.ts +0 -1
  223. package/dist/core/store/BIM/reducer.d.ts.map +1 -1
  224. package/dist/core/store/BIM/reducer.js +0 -4
  225. package/dist/core/store/BIM/reducer.js.map +1 -1
  226. package/dist/core/store/Buildings/context.d.ts.map +1 -1
  227. package/dist/core/store/Buildings/context.js.map +1 -1
  228. package/dist/core/store/Content/context.d.ts.map +1 -1
  229. package/dist/core/store/Content/context.js.map +1 -1
  230. package/dist/core/store/Datasets/context.d.ts.map +1 -1
  231. package/dist/core/store/Datasets/context.js +2 -1
  232. package/dist/core/store/Datasets/context.js.map +1 -1
  233. package/dist/core/store/Datasets/reducer.d.ts +2 -0
  234. package/dist/core/store/Datasets/reducer.d.ts.map +1 -1
  235. package/dist/core/store/Datasets/reducer.js +9 -4
  236. package/dist/core/store/Datasets/reducer.js.map +1 -1
  237. package/dist/core/store/Files/context.d.ts.map +1 -1
  238. package/dist/core/store/Files/context.js.map +1 -1
  239. package/dist/core/store/Map/context.d.ts.map +1 -1
  240. package/dist/core/store/Map/context.js.map +1 -1
  241. package/dist/core/store/Menus/context.d.ts.map +1 -1
  242. package/dist/core/store/Menus/context.js.map +1 -1
  243. package/dist/core/store/Permissions/context.d.ts.map +1 -1
  244. package/dist/core/store/Permissions/context.js.map +1 -1
  245. package/dist/core/store/PointCloud/context.d.ts.map +1 -1
  246. package/dist/core/store/PointCloud/context.js.map +1 -1
  247. package/dist/core/store/Tools/context.d.ts.map +1 -1
  248. package/dist/core/store/Tools/context.js.map +1 -1
  249. package/dist/core/types/datasetTypes.d.ts +8 -1
  250. package/dist/core/types/datasetTypes.d.ts.map +1 -1
  251. package/dist/core/types/dbTypes.d.ts +13 -13
  252. package/dist/core/types/dbTypes.d.ts.map +1 -1
  253. package/dist/core/types/dbTypes.js +13 -13
  254. package/dist/core/types/dbTypes.js.map +1 -1
  255. package/dist/core/types/index.d.ts +1 -1
  256. package/dist/core/types/index.d.ts.map +1 -1
  257. package/dist/core/types/index.js.map +1 -1
  258. package/dist/core/utils/imageUtils.js +1 -1
  259. package/dist/core/utils/imageUtils.js.map +1 -1
  260. package/package.json +4 -3
  261. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.d.ts +0 -3
  262. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.d.ts.map +0 -1
  263. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.js +0 -173
  264. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.js.map +0 -1
@@ -1,348 +1,61 @@
1
1
  import * as THREE from "three";
2
2
  import * as OBC from "@thatopen/components";
3
3
  import { DxfViewer } from "dxf-viewer";
4
- import { TransformControls } from "three/examples/jsm/Addons.js";
5
- import { CurrentWorld } from "../CurrentWorld";
6
4
  const _DXFManager = class _DXFManager extends OBC.Component {
7
5
  constructor(components) {
8
6
  super(components);
9
7
  this.enabled = true;
10
- this.onDXFImported = new OBC.Event();
11
- this.onDXFTransformed = new OBC.Event();
12
- this._world = null;
13
- this._scale = 1;
14
- this._id = null;
15
- this._rotation = 0;
16
- this._origin = new THREE.Vector3();
17
- this._rotationMatrix = new THREE.Matrix4().makeRotationX(
18
- THREE.MathUtils.degToRad(-90)
19
- );
20
- this._list = {};
21
- this.container = document.createElement("bim-viewport");
8
+ this._container = document.createElement("bim-viewport");
22
9
  components.add(_DXFManager.uuid, this);
23
- this._dxfViewer = new DxfViewer(this.container, null);
24
- this.container.addEventListener("resize", () => {
25
- const { width, height } = this.container.getBoundingClientRect();
26
- this._dxfViewer.SetSize(width, height);
27
- });
28
- this.setupDxfViewer();
29
- this._world = components.get(CurrentWorld).world;
30
- }
31
- get scale() {
32
- return this._scale;
33
- }
34
- set scale(scale) {
35
- this._scale = scale;
36
- }
37
- get rotation() {
38
- return this._rotation;
39
- }
40
- set rotation(rotation) {
41
- this._rotation = rotation;
42
- }
43
- get origin() {
44
- return this._origin;
45
- }
46
- set origin(value) {
47
- this._origin = value;
48
- }
49
- setupDxfViewer() {
50
- const scene = this._dxfViewer.GetScene();
51
- const camera = this._dxfViewer.GetCamera();
52
- const canvas = this._dxfViewer.GetCanvas();
53
- const mouse = new OBC.Mouse(canvas);
54
- const raycaster = new THREE.Raycaster();
55
- raycaster.params.Line.threshold = 3;
56
- const geometry = new THREE.SphereGeometry(5);
57
- const material = new THREE.MeshBasicMaterial({ color: 16711680 });
58
- const sphere = new THREE.Mesh(geometry, material);
59
- sphere.visible = false;
60
- scene.add(sphere);
61
- document.addEventListener("mousemove", () => {
62
- if (scene.children.length === 0) return;
63
- raycaster.setFromCamera(mouse.position, camera);
64
- const result = raycaster.intersectObjects(scene.children, true);
65
- if (result.length > 0) {
66
- const element = result[0];
67
- sphere.position.copy(element.point);
68
- if (element instanceof THREE.Line) console.log(element);
69
- }
70
- });
71
- }
72
- async load(url, id, name, origin) {
73
- var _a;
74
- const existingDrawing = this._list[name];
75
- this._id = id;
10
+ this._dxfViewer = new DxfViewer(this._container, null);
11
+ }
12
+ /**
13
+ * Load and parse a DXF into a THREE.Group centered on its own origin and laid
14
+ * flat on the world ground (XZ) plane. DXF coordinates can carry huge offsets,
15
+ * so recentering keeps the drawing co-located with whatever point it is placed at.
16
+ */
17
+ async parse(url) {
76
18
  await this._dxfViewer.Load({
77
19
  url,
78
20
  fonts: ["/fonts/Roboto-LightItalic.ttf"],
79
21
  progressCbk: null,
80
22
  workerFactory: null
81
23
  });
82
- const dxfGroup = existingDrawing ? existingDrawing.drawing : new THREE.Group();
83
- if (existingDrawing) {
84
- if ((_a = this._world) == null ? void 0 : _a.scene.three.children.includes(existingDrawing.drawing)) {
85
- this._world.scene.three.remove(existingDrawing.drawing);
86
- }
87
- } else {
88
- dxfGroup.name = name;
89
- this._list[name] = {
90
- drawing: dxfGroup,
91
- matrix: new THREE.Matrix4().set(
92
- 1,
93
- 0,
94
- 0,
95
- 0,
96
- 0,
97
- 1,
98
- 0,
99
- 0,
100
- 0,
101
- 0,
102
- 1,
103
- 0,
104
- 0,
105
- 0,
106
- 0,
107
- 1
108
- )
109
- };
110
- }
24
+ const inner = new THREE.Group();
111
25
  const dxfScene = this._dxfViewer.GetScene();
112
- for (const child of dxfScene.children) {
113
- this.setPosition(child);
114
- dxfGroup.add(child);
115
- }
116
- const clone = dxfGroup.clone();
117
- clone.scale.set(this._scale, this._scale, this._scale);
118
- if (origin) {
119
- clone.position.x = origin.x;
120
- clone.position.z = origin.y;
121
- clone.position.y = -origin.z;
122
- }
123
- clone.rotateZ(THREE.MathUtils.degToRad(this._rotation));
124
- if (!this._world) return;
125
- clone.name = this._id;
126
- this._world.scene.three.add(clone);
127
- const rotationMatrix = new THREE.Matrix4().makeRotationX(
128
- THREE.MathUtils.degToRad(-90)
129
- );
130
- clone.applyMatrix4(rotationMatrix);
131
- for (const child of clone.children) {
132
- this._world.meshes.add(child);
26
+ for (const child of [...dxfScene.children]) {
27
+ this.flattenTo3D(child);
28
+ inner.add(child);
133
29
  }
134
- this.setupTransformControls(clone, name);
135
- this.onDXFImported.trigger(clone);
136
- return clone;
137
- }
138
- setupTransformControls(dxfGroup, name) {
139
- var _a, _b;
140
- if (!((_a = this._world) == null ? void 0 : _a.camera) || !((_b = this._world) == null ? void 0 : _b.renderer)) return;
141
- const controls = new TransformControls(
142
- this._world.camera.three,
143
- // Use .three to get the actual THREE.Camera
144
- this._world.renderer.three.domElement
145
- );
146
- controls.setMode("translate");
147
- controls.addEventListener("dragging-changed", (event) => {
148
- var _a2, _b2;
149
- if ((_b2 = (_a2 = this._world) == null ? void 0 : _a2.camera) == null ? void 0 : _b2.controls) {
150
- this._world.camera.controls.enabled = !event.value;
151
- }
152
- });
153
- controls.addEventListener("change", () => {
154
- dxfGroup.updateMatrixWorld(true);
155
- this.onDXFTransformed.trigger();
156
- });
157
- const handleKeyDown = (event) => {
158
- switch (event.key.toLowerCase()) {
159
- case "g":
160
- controls.setMode("translate");
161
- break;
162
- case "r":
163
- controls.setMode("rotate");
164
- break;
165
- case "s":
166
- controls.setMode("scale");
167
- break;
168
- }
169
- };
170
- document.addEventListener("keydown", handleKeyDown);
171
- controls.attach(dxfGroup);
172
- const gizmo = controls.getHelper();
173
- this._world.scene.three.add(controls);
174
- this._world.scene.three.add(gizmo);
175
- if (this._list[name]) {
176
- this._list[name].controls = controls;
177
- this._list[name].gizmo = gizmo;
178
- this._list[name].keydownHandler = handleKeyDown;
30
+ const box = new THREE.Box3().setFromObject(inner);
31
+ if (!box.isEmpty()) {
32
+ const center = box.getCenter(new THREE.Vector3());
33
+ for (const child of inner.children) child.position.sub(center);
179
34
  }
35
+ inner.rotateX(THREE.MathUtils.degToRad(-90));
36
+ const group = new THREE.Group();
37
+ group.add(inner);
38
+ return group;
180
39
  }
181
- transform(dxfName, baseA, baseB, targetA, targetB, targetPlaneNormal) {
182
- var _a;
183
- const existingDrawing = (_a = this._list[dxfName]) == null ? void 0 : _a.drawing;
184
- if (!existingDrawing) {
185
- console.warn(`There is no dxf drawing called ${dxfName}`);
186
- return;
187
- }
188
- const matrix = this.getTransformMatrix(
189
- baseA,
190
- baseB,
191
- targetA,
192
- targetB,
193
- targetPlaneNormal
194
- );
195
- this._list[dxfName].matrix = matrix;
196
- for (const child of existingDrawing.children) {
197
- child.geometry.getAttribute("position").applyMatrix4(matrix);
198
- }
199
- this.onDXFTransformed.trigger(matrix);
200
- }
201
- setPosition(object) {
40
+ /** DxfViewer line geometry is 2D (x, y); promote it to 3D (x, y, 0) for the world scene. */
41
+ flattenTo3D(object) {
202
42
  if (!("geometry" in object)) return;
203
43
  const geometry = object.geometry;
204
44
  const position = geometry.getAttribute("position");
205
- const array = [];
45
+ if (!position || position.itemSize === 3) return;
46
+ const flattened = [];
206
47
  for (let i = 0; i < position.array.length; i += position.itemSize) {
207
- array.push(position.array[i], position.array[i + 1], 0);
48
+ flattened.push(position.array[i], position.array[i + 1], 0);
208
49
  }
209
- const newPosition = new THREE.BufferAttribute(new Float32Array(array), 3);
210
- geometry.setAttribute("position", newPosition);
211
- }
212
- getTransformMatrix(baseA, baseB, targetA, targetB, targetPlaneNormal) {
213
- const matrix = new THREE.Matrix4();
214
- baseB.sub(baseA);
215
- targetB.sub(targetA);
216
- const scaleFactor = targetB.length() / baseB.length();
217
- const scaleVector = new THREE.Vector3(1, 1, 1).multiplyScalar(scaleFactor);
218
- const angle = targetB.angleTo(baseB);
219
- const axis = baseB.clone().cross(targetB).normalize();
220
- const rotationMatrix = new THREE.Matrix4().makeRotationAxis(axis, angle);
221
- const upDirection = new THREE.Vector3(0, 1, 0);
222
- const upAngle = upDirection.angleTo(targetPlaneNormal);
223
- const upAxis = upDirection.clone().cross(targetPlaneNormal).normalize();
224
- const upRotationMatrix = new THREE.Matrix4().makeRotationAxis(
225
- upAxis,
226
- upAngle
50
+ geometry.setAttribute(
51
+ "position",
52
+ new THREE.BufferAttribute(new Float32Array(flattened), 3)
227
53
  );
228
- const finalRotation = upRotationMatrix.multiply(rotationMatrix);
229
- matrix.multiply(finalRotation);
230
- matrix.scale(scaleVector);
231
- const finalPosition = baseA.multiplyScalar(scaleFactor * -1).applyMatrix4(finalRotation.clone().setPosition(targetA));
232
- matrix.setPosition(
233
- finalPosition.add(
234
- new THREE.Vector3().addScalar(this._scale).multiply(targetPlaneNormal)
235
- )
236
- );
237
- return matrix;
238
54
  }
239
55
  dispose() {
240
56
  var _a, _b;
241
- for (const { controls, drawing } of Object.values(this._list)) {
242
- if (controls && ((_a = this._world) == null ? void 0 : _a.scene.three)) {
243
- this._world.scene.three.remove(controls);
244
- const gizmo = controls.gizmo;
245
- if (gizmo) {
246
- this._world.scene.three.remove(gizmo);
247
- }
248
- controls.dispose();
249
- }
250
- if (drawing && ((_b = this._world) == null ? void 0 : _b.scene.three)) {
251
- this._world.scene.three.remove(drawing);
252
- }
253
- const keydownHandler = this._list.keydownHandler;
254
- if (keydownHandler) {
255
- document.removeEventListener("keydown", keydownHandler);
256
- }
257
- }
258
- this._list = {};
259
- }
260
- removeTransformControls(name) {
261
- var _a;
262
- const dxfData = this._list[name];
263
- if ((dxfData == null ? void 0 : dxfData.controls) && ((_a = this._world) == null ? void 0 : _a.scene.three)) {
264
- this._world.scene.three.remove(dxfData.controls);
265
- const gizmo = dxfData.gizmo;
266
- if (gizmo) {
267
- this._world.scene.three.remove(gizmo);
268
- }
269
- dxfData.controls.dispose();
270
- const keydownHandler = dxfData.keydownHandler;
271
- if (keydownHandler) {
272
- document.removeEventListener("keydown", keydownHandler);
273
- }
274
- delete dxfData.controls;
275
- delete dxfData.gizmo;
276
- delete dxfData.keydownHandler;
277
- }
278
- }
279
- enableEditMode(name) {
280
- var _a, _b;
281
- const dxfData = this._list[name];
282
- if (!(dxfData == null ? void 0 : dxfData.drawing) || !((_a = this._world) == null ? void 0 : _a.camera) || !((_b = this._world) == null ? void 0 : _b.renderer)) {
283
- console.warn(`Cannot enable edit mode: DXF "${name}" not found or world not available`);
284
- return false;
285
- }
286
- if (dxfData.controls) {
287
- console.log(`Edit mode already enabled for DXF "${name}"`);
288
- return true;
289
- }
290
- console.log(`Enabling edit mode for DXF "${name}"`);
291
- const controls = new TransformControls(
292
- this._world.camera.three,
293
- this._world.renderer.three.domElement
294
- );
295
- controls.setMode("translate");
296
- controls.addEventListener("dragging-changed", (event) => {
297
- var _a2, _b2;
298
- if ((_b2 = (_a2 = this._world) == null ? void 0 : _a2.camera) == null ? void 0 : _b2.controls) {
299
- this._world.camera.controls.enabled = !event.value;
300
- }
301
- });
302
- controls.addEventListener("change", () => {
303
- dxfData.drawing.updateMatrixWorld(true);
304
- this.onDXFTransformed.trigger();
305
- });
306
- const handleKeyDown = (event) => {
307
- switch (event.key.toLowerCase()) {
308
- case "g":
309
- controls.setMode("translate");
310
- break;
311
- case "r":
312
- controls.setMode("rotate");
313
- break;
314
- case "s":
315
- controls.setMode("scale");
316
- break;
317
- }
318
- };
319
- document.addEventListener("keydown", handleKeyDown);
320
- controls.attach(dxfData.drawing);
321
- const gizmo = controls.getHelper();
322
- this._world.scene.three.add(controls);
323
- this._world.scene.three.add(gizmo);
324
- dxfData.controls = controls;
325
- dxfData.gizmo = gizmo;
326
- dxfData.keydownHandler = handleKeyDown;
327
- console.log(`Edit mode enabled for DXF "${name}"`);
328
- return true;
329
- }
330
- isInEditMode(name) {
331
- const dxfData = this._list[name];
332
- return Boolean(dxfData == null ? void 0 : dxfData.controls);
333
- }
334
- getDxfList() {
335
- return Object.keys(this._list);
336
- }
337
- getDxfInfo(name) {
338
- const dxfData = this._list[name];
339
- if (!dxfData) return null;
340
- return {
341
- name,
342
- hasControls: Boolean(dxfData.controls),
343
- drawing: dxfData.drawing,
344
- matrix: dxfData.matrix
345
- };
57
+ ;
58
+ (_b = (_a = this._dxfViewer).Destroy) == null ? void 0 : _b.call(_a);
346
59
  }
347
60
  };
348
61
  _DXFManager.uuid = "2cf1b746-3b3d-4988-960b-ea640e0e8925";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/DXFLoader/index.ts"],"sourcesContent":["import * as THREE from 'three'\r\nimport * as OBC from '@thatopen/components'\r\nimport { DxfViewer } from 'dxf-viewer'\r\nimport { TransformControls } from 'three/examples/jsm/Addons.js'\r\nimport { CurrentWorld } from '../CurrentWorld'\r\n\r\nexport interface Position {\r\n x: number\r\n y: number\r\n z: number\r\n}\r\n\r\nexport class DXFManager extends OBC.Component {\r\n static uuid = '2cf1b746-3b3d-4988-960b-ea640e0e8925' as const\r\n\r\n enabled = true\r\n\r\n onDXFImported = new OBC.Event<THREE.Group>()\r\n\r\n onDXFTransformed = new OBC.Event()\r\n\r\n private _world: OBC.World | null = null\r\n\r\n private _scale: number = 1\r\n\r\n private _id: string | null = null\r\n\r\n get scale() {\r\n return this._scale\r\n }\r\n\r\n set scale(scale: number) {\r\n this._scale = scale\r\n }\r\n\r\n private _rotation: number = 0\r\n\r\n get rotation() {\r\n return this._rotation\r\n }\r\n\r\n set rotation(rotation: number) {\r\n this._rotation = rotation\r\n }\r\n\r\n private _origin: THREE.Vector3 = new THREE.Vector3()\r\n\r\n get origin() {\r\n return this._origin\r\n }\r\n\r\n set origin(value: THREE.Vector3) {\r\n this._origin = value\r\n }\r\n\r\n private _dxfViewer: DxfViewer\r\n\r\n private _rotationMatrix = new THREE.Matrix4().makeRotationX(\r\n THREE.MathUtils.degToRad(-90),\r\n )\r\n\r\n private _list: {\r\n [id: string]: {\r\n drawing: THREE.Group\r\n matrix: THREE.Matrix4\r\n controls?: TransformControls\r\n }\r\n } = {}\r\n\r\n readonly container = document.createElement('bim-viewport')\r\n\r\n constructor(components: OBC.Components) {\r\n super(components)\r\n components.add(DXFManager.uuid, this)\r\n this._dxfViewer = new DxfViewer(this.container, null)\r\n this.container.addEventListener('resize', () => {\r\n const { width, height } = this.container.getBoundingClientRect()\r\n this._dxfViewer.SetSize(width, height)\r\n })\r\n\r\n this.setupDxfViewer()\r\n this._world = components.get(CurrentWorld).world\r\n }\r\n\r\n private setupDxfViewer() {\r\n const scene = this._dxfViewer.GetScene()\r\n const camera = this._dxfViewer.GetCamera()\r\n const canvas = this._dxfViewer.GetCanvas()\r\n const mouse = new OBC.Mouse(canvas)\r\n const raycaster = new THREE.Raycaster()\r\n raycaster.params.Line.threshold = 3\r\n\r\n const geometry = new THREE.SphereGeometry(5)\r\n const material = new THREE.MeshBasicMaterial({ color: 0xFF_00_00 })\r\n\r\n const sphere = new THREE.Mesh(geometry, material)\r\n sphere.visible = false\r\n scene.add(sphere)\r\n\r\n document.addEventListener('mousemove', () => {\r\n if (scene.children.length === 0) return\r\n raycaster.setFromCamera(mouse.position, camera)\r\n const result = raycaster.intersectObjects(scene.children, true)\r\n if (result.length > 0) {\r\n const element = result[0]\r\n sphere.position.copy(element.point)\r\n if (element instanceof THREE.Line) console.log(element)\r\n }\r\n })\r\n }\r\n\r\n async load(url: string, id: string, name: string, origin?: Position) {\r\n const existingDrawing = this._list[name]\r\n this._id = id\r\n\r\n await this._dxfViewer.Load({\r\n url,\r\n fonts: ['/fonts/Roboto-LightItalic.ttf'],\r\n progressCbk: null,\r\n workerFactory: null,\r\n })\r\n\r\n const dxfGroup = existingDrawing\r\n ? existingDrawing.drawing\r\n : new THREE.Group()\r\n\r\n if (existingDrawing) {\r\n // Remove existing from scene if present\r\n if (this._world?.scene.three.children.includes(existingDrawing.drawing)) {\r\n this._world.scene.three.remove(existingDrawing.drawing)\r\n }\r\n }\r\n else {\r\n dxfGroup.name = name\r\n this._list[name] = {\r\n drawing: dxfGroup,\r\n matrix: new THREE.Matrix4().set(\r\n 1, 0, 0, 0,\r\n 0, 1, 0, 0,\r\n 0, 0, 1, 0,\r\n 0, 0, 0, 1,\r\n ),\r\n }\r\n }\r\n\r\n const dxfScene = this._dxfViewer.GetScene()\r\n for (const child of dxfScene.children) {\r\n this.setPosition(child)\r\n dxfGroup.add(child)\r\n }\r\n\r\n // Apply transformations\r\n const clone = dxfGroup.clone()\r\n clone.scale.set(this._scale, this._scale, this._scale)\r\n\r\n if (origin) {\r\n clone.position.x = origin.x\r\n clone.position.z = origin.y\r\n clone.position.y = -origin.z\r\n }\r\n\r\n clone.rotateZ(THREE.MathUtils.degToRad(this._rotation))\r\n\r\n if (!this._world) return\r\n\r\n clone.name = this._id\r\n\r\n // Add to world scene\r\n this._world.scene.three.add(clone)\r\n\r\n const rotationMatrix = new THREE.Matrix4().makeRotationX(\r\n THREE.MathUtils.degToRad(-90),\r\n )\r\n clone.applyMatrix4(rotationMatrix)\r\n\r\n for (const child of clone.children) {\r\n // @ts-ignore\r\n this._world.meshes.add(child)\r\n }\r\n\r\n // Setup transform controls (gizmo)\r\n this.setupTransformControls(clone, name)\r\n\r\n this.onDXFImported.trigger(clone)\r\n\r\n return clone\r\n }\r\n\r\n private setupTransformControls(dxfGroup: THREE.Group, name: string) {\r\n if (!this._world?.camera || !this._world?.renderer) return\r\n\r\n const controls = new TransformControls(\r\n this._world.camera.three, // Use .three to get the actual THREE.Camera\r\n this._world.renderer.three.domElement,\r\n )\r\n\r\n // Set the initial mode to translate (move)\r\n controls.setMode('translate') // This allows X, Y, Z movement\r\n\r\n // You can also switch modes programmatically:\r\n // controls.setMode('rotate'); // For rotation\r\n // controls.setMode('scale'); // For scaling\r\n\r\n controls.addEventListener('dragging-changed', (event: any) => {\r\n if (this._world?.camera?.controls) {\r\n this._world.camera.controls.enabled = !event.value\r\n }\r\n })\r\n\r\n controls.addEventListener('change', () => {\r\n dxfGroup.updateMatrixWorld(true)\r\n this.onDXFTransformed.trigger()\r\n })\r\n\r\n // Add keyboard shortcuts for switching modes\r\n const handleKeyDown = (event: KeyboardEvent) => {\r\n switch (event.key.toLowerCase()) {\r\n case 'g': // G for grab/translate\r\n controls.setMode('translate')\r\n break\r\n case 'r': // R for rotate\r\n controls.setMode('rotate')\r\n break\r\n case 's': // S for scale\r\n controls.setMode('scale')\r\n break\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyDown)\r\n\r\n controls.attach(dxfGroup)\r\n\r\n // Get the gizmo helper and add it to the scene\r\n const gizmo = controls.getHelper()\r\n this._world.scene.three.add(controls)\r\n this._world.scene.three.add(gizmo)\r\n\r\n // Store controls reference\r\n if (this._list[name]) {\r\n this._list[name].controls = controls;\r\n // Store the gizmo helper reference for cleanup\r\n (this._list[name] as any).gizmo = gizmo;\r\n // Store the cleanup function for the keyboard listener\r\n (this._list[name] as any).keydownHandler = handleKeyDown\r\n }\r\n }\r\n\r\n transform(\r\n dxfName: string,\r\n baseA: THREE.Vector3,\r\n baseB: THREE.Vector3,\r\n targetA: THREE.Vector3,\r\n targetB: THREE.Vector3,\r\n targetPlaneNormal: THREE.Vector3,\r\n ) {\r\n const existingDrawing = this._list[dxfName]?.drawing\r\n if (!existingDrawing) {\r\n console.warn(`There is no dxf drawing called ${dxfName}`)\r\n return\r\n }\r\n const matrix = this.getTransformMatrix(\r\n baseA,\r\n baseB,\r\n targetA,\r\n targetB,\r\n targetPlaneNormal,\r\n )\r\n this._list[dxfName].matrix = matrix\r\n for (const child of existingDrawing.children) {\r\n // @ts-ignore\r\n child.geometry.getAttribute('position').applyMatrix4(matrix)\r\n }\r\n this.onDXFTransformed.trigger(matrix)\r\n }\r\n\r\n private setPosition(object: THREE.Object3D) {\r\n if (!('geometry' in object)) return\r\n const geometry = object.geometry as THREE.BufferGeometry\r\n const position = geometry.getAttribute('position')\r\n const array: number[] = []\r\n for (let i = 0; i < position.array.length; i += position.itemSize) {\r\n array.push(position.array[i], position.array[i + 1], 0)\r\n }\r\n const newPosition = new THREE.BufferAttribute(new Float32Array(array), 3)\r\n geometry.setAttribute('position', newPosition)\r\n }\r\n\r\n private getTransformMatrix(\r\n baseA: THREE.Vector3,\r\n baseB: THREE.Vector3,\r\n targetA: THREE.Vector3,\r\n targetB: THREE.Vector3,\r\n targetPlaneNormal: THREE.Vector3,\r\n ) {\r\n const matrix = new THREE.Matrix4()\r\n\r\n baseB.sub(baseA)\r\n targetB.sub(targetA)\r\n\r\n // Scale\r\n const scaleFactor = targetB.length() / baseB.length()\r\n const scaleVector = new THREE.Vector3(1, 1, 1).multiplyScalar(scaleFactor)\r\n\r\n // Rotation\r\n const angle = targetB.angleTo(baseB)\r\n const axis = baseB.clone().cross(targetB).normalize()\r\n const rotationMatrix = new THREE.Matrix4().makeRotationAxis(axis, angle)\r\n\r\n // Additional rotation to align object's up direction with target plane normal\r\n const upDirection = new THREE.Vector3(0, 1, 0)\r\n const upAngle = upDirection.angleTo(targetPlaneNormal)\r\n const upAxis = upDirection.clone().cross(targetPlaneNormal).normalize()\r\n const upRotationMatrix = new THREE.Matrix4().makeRotationAxis(\r\n upAxis,\r\n upAngle,\r\n )\r\n\r\n const finalRotation = upRotationMatrix.multiply(rotationMatrix)\r\n\r\n // Transform matrix\r\n matrix.multiply(finalRotation)\r\n matrix.scale(scaleVector)\r\n const finalPosition = baseA\r\n .multiplyScalar(scaleFactor * -1)\r\n .applyMatrix4(finalRotation.clone().setPosition(targetA))\r\n matrix.setPosition(\r\n finalPosition.add(\r\n new THREE.Vector3().addScalar(this._scale).multiply(targetPlaneNormal),\r\n ),\r\n )\r\n\r\n return matrix\r\n }\r\n\r\n dispose() {\r\n // Clean up transform controls and keyboard listeners\r\n for (const { controls, drawing } of Object.values(this._list)) {\r\n if (controls && this._world?.scene.three) {\r\n this._world.scene.three.remove(controls)\r\n\r\n // Remove gizmo helper\r\n const gizmo = (controls as any).gizmo\r\n if (gizmo) {\r\n this._world.scene.three.remove(gizmo)\r\n }\r\n\r\n controls.dispose()\r\n }\r\n if (drawing && this._world?.scene.three) {\r\n this._world.scene.three.remove(drawing)\r\n }\r\n // Clean up keyboard event listener\r\n const keydownHandler = (this._list as any).keydownHandler\r\n if (keydownHandler) {\r\n document.removeEventListener('keydown', keydownHandler)\r\n }\r\n }\r\n this._list = {}\r\n }\r\n\r\n removeTransformControls(name: string) {\r\n const dxfData = this._list[name]\r\n if (dxfData?.controls && this._world?.scene.three) {\r\n // Remove the controls from the scene\r\n this._world.scene.three.remove(dxfData.controls)\r\n\r\n // Remove the gizmo helper from the scene\r\n const gizmo = (dxfData as any).gizmo\r\n if (gizmo) {\r\n this._world.scene.three.remove(gizmo)\r\n }\r\n\r\n // Dispose of the controls\r\n dxfData.controls.dispose()\r\n\r\n // Remove keyboard event listener\r\n const keydownHandler = (dxfData as any).keydownHandler\r\n if (keydownHandler) {\r\n document.removeEventListener('keydown', keydownHandler)\r\n }\r\n\r\n // Clear the controls and gizmo references\r\n delete dxfData.controls\r\n delete (dxfData as any).gizmo\r\n delete (dxfData as any).keydownHandler\r\n }\r\n }\r\n\r\n enableEditMode(name: string) {\r\n const dxfData = this._list[name]\r\n if (!dxfData?.drawing || !this._world?.camera || !this._world?.renderer) {\r\n console.warn(`Cannot enable edit mode: DXF \"${name}\" not found or world not available`)\r\n return false\r\n }\r\n\r\n // If controls already exist, don't recreate them\r\n if (dxfData.controls) {\r\n console.log(`Edit mode already enabled for DXF \"${name}\"`)\r\n return true\r\n }\r\n\r\n console.log(`Enabling edit mode for DXF \"${name}\"`)\r\n\r\n // Create new transform controls\r\n const controls = new TransformControls(\r\n this._world.camera.three,\r\n this._world.renderer.three.domElement,\r\n )\r\n\r\n // Set the initial mode to translate\r\n controls.setMode('translate')\r\n\r\n controls.addEventListener('dragging-changed', (event: any) => {\r\n if (this._world?.camera?.controls) {\r\n this._world.camera.controls.enabled = !event.value\r\n }\r\n })\r\n\r\n controls.addEventListener('change', () => {\r\n dxfData.drawing.updateMatrixWorld(true)\r\n this.onDXFTransformed.trigger()\r\n })\r\n\r\n // Add keyboard shortcuts for switching modes\r\n const handleKeyDown = (event: KeyboardEvent) => {\r\n switch (event.key.toLowerCase()) {\r\n case 'g': // G for grab/translate\r\n controls.setMode('translate')\r\n break\r\n case 'r': // R for rotate\r\n controls.setMode('rotate')\r\n break\r\n case 's': // S for scale\r\n controls.setMode('scale')\r\n break\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyDown)\r\n\r\n // Attach controls to the DXF group\r\n controls.attach(dxfData.drawing)\r\n\r\n // Get the gizmo helper and add both to the scene\r\n const gizmo = controls.getHelper()\r\n this._world.scene.three.add(controls)\r\n this._world.scene.three.add(gizmo)\r\n\r\n // Store references for cleanup\r\n dxfData.controls = controls;\r\n (dxfData as any).gizmo = gizmo;\r\n (dxfData as any).keydownHandler = handleKeyDown\r\n\r\n console.log(`Edit mode enabled for DXF \"${name}\"`)\r\n return true\r\n }\r\n\r\n isInEditMode(name: string): boolean {\r\n const dxfData = this._list[name]\r\n return Boolean(dxfData?.controls)\r\n }\r\n\r\n getDxfList(): string[] {\r\n return Object.keys(this._list)\r\n }\r\n\r\n getDxfInfo(name: string) {\r\n const dxfData = this._list[name]\r\n if (!dxfData) return null\r\n\r\n return {\r\n name,\r\n hasControls: Boolean(dxfData.controls),\r\n drawing: dxfData.drawing,\r\n matrix: dxfData.matrix,\r\n }\r\n }\r\n}\r\n"],"mappings":"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","names":["_a","_b"]}
1
+ {"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/DXFLoader/index.ts"],"sourcesContent":["import * as THREE from 'three'\r\nimport * as OBC from '@thatopen/components'\r\nimport { DxfViewer } from 'dxf-viewer'\r\n\r\n/**\r\n * Parses DXF files into THREE.Groups for the BIM world. This is a pure parser:\r\n * it owns no scene placement, transforms or gizmos — the caller (AddDxf) decides\r\n * where the drawing goes. A single off-screen DxfViewer is reused as the parser.\r\n */\r\nexport class DXFManager extends OBC.Component {\r\n static uuid = '2cf1b746-3b3d-4988-960b-ea640e0e8925' as const\r\n\r\n enabled = true\r\n\r\n private readonly _container = document.createElement('bim-viewport')\r\n private _dxfViewer: DxfViewer\r\n\r\n constructor(components: OBC.Components) {\r\n super(components)\r\n components.add(DXFManager.uuid, this)\r\n this._dxfViewer = new DxfViewer(this._container, null)\r\n }\r\n\r\n /**\r\n * Load and parse a DXF into a THREE.Group centered on its own origin and laid\r\n * flat on the world ground (XZ) plane. DXF coordinates can carry huge offsets,\r\n * so recentering keeps the drawing co-located with whatever point it is placed at.\r\n */\r\n async parse(url: string): Promise<THREE.Group> {\r\n await this._dxfViewer.Load({\r\n url,\r\n fonts: ['/fonts/Roboto-LightItalic.ttf'],\r\n progressCbk: null,\r\n workerFactory: null,\r\n })\r\n\r\n const inner = new THREE.Group()\r\n const dxfScene = this._dxfViewer.GetScene()\r\n for (const child of [...dxfScene.children]) {\r\n this.flattenTo3D(child)\r\n inner.add(child)\r\n }\r\n\r\n // Recenter geometry on the group origin so placement lands the drawing's\r\n // center at the chosen point regardless of the DXF's authored coordinates.\r\n const box = new THREE.Box3().setFromObject(inner)\r\n if (!box.isEmpty()) {\r\n const center = box.getCenter(new THREE.Vector3())\r\n for (const child of inner.children) child.position.sub(center)\r\n }\r\n\r\n // DXF is authored in the XY plane; tip it onto the world XZ ground plane (Y up).\r\n inner.rotateX(THREE.MathUtils.degToRad(-90))\r\n\r\n const group = new THREE.Group()\r\n group.add(inner)\r\n return group\r\n }\r\n\r\n /** DxfViewer line geometry is 2D (x, y); promote it to 3D (x, y, 0) for the world scene. */\r\n private flattenTo3D(object: THREE.Object3D) {\r\n if (!('geometry' in object)) return\r\n const geometry = object.geometry as THREE.BufferGeometry\r\n const position = geometry.getAttribute('position')\r\n if (!position || position.itemSize === 3) return\r\n\r\n const flattened: number[] = []\r\n for (let i = 0; i < position.array.length; i += position.itemSize) {\r\n flattened.push(position.array[i], position.array[i + 1], 0)\r\n }\r\n geometry.setAttribute(\r\n 'position',\r\n new THREE.BufferAttribute(new Float32Array(flattened), 3),\r\n )\r\n }\r\n\r\n dispose() {\r\n ;(this._dxfViewer as unknown as { Destroy?: () => void }).Destroy?.()\r\n }\r\n}\r\n"],"mappings":"AAAA,YAAY,WAAW;AACvB,YAAY,SAAS;AACrB,SAAS,iBAAiB;AAOnB,MAAM,cAAN,MAAM,oBAAmB,IAAI,UAAU;AAAA,EAQ5C,YAAY,YAA4B;AACtC,UAAM,UAAU;AANlB,mBAAU;AAEV,SAAiB,aAAa,SAAS,cAAc,cAAc;AAKjE,eAAW,IAAI,YAAW,MAAM,IAAI;AACpC,SAAK,aAAa,IAAI,UAAU,KAAK,YAAY,IAAI;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,MAAM,KAAmC;AAC7C,UAAM,KAAK,WAAW,KAAK;AAAA,MACzB;AAAA,MACA,OAAO,CAAC,+BAA+B;AAAA,MACvC,aAAa;AAAA,MACb,eAAe;AAAA,IACjB,CAAC;AAED,UAAM,QAAQ,IAAI,MAAM,MAAM;AAC9B,UAAM,WAAW,KAAK,WAAW,SAAS;AAC1C,eAAW,SAAS,CAAC,GAAG,SAAS,QAAQ,GAAG;AAC1C,WAAK,YAAY,KAAK;AACtB,YAAM,IAAI,KAAK;AAAA,IACjB;AAIA,UAAM,MAAM,IAAI,MAAM,KAAK,EAAE,cAAc,KAAK;AAChD,QAAI,CAAC,IAAI,QAAQ,GAAG;AAClB,YAAM,SAAS,IAAI,UAAU,IAAI,MAAM,QAAQ,CAAC;AAChD,iBAAW,SAAS,MAAM,SAAU,OAAM,SAAS,IAAI,MAAM;AAAA,IAC/D;AAGA,UAAM,QAAQ,MAAM,UAAU,SAAS,GAAG,CAAC;AAE3C,UAAM,QAAQ,IAAI,MAAM,MAAM;AAC9B,UAAM,IAAI,KAAK;AACf,WAAO;AAAA,EACT;AAAA;AAAA,EAGQ,YAAY,QAAwB;AAC1C,QAAI,EAAE,cAAc,QAAS;AAC7B,UAAM,WAAW,OAAO;AACxB,UAAM,WAAW,SAAS,aAAa,UAAU;AACjD,QAAI,CAAC,YAAY,SAAS,aAAa,EAAG;AAE1C,UAAM,YAAsB,CAAC;AAC7B,aAAS,IAAI,GAAG,IAAI,SAAS,MAAM,QAAQ,KAAK,SAAS,UAAU;AACjE,gBAAU,KAAK,SAAS,MAAM,CAAC,GAAG,SAAS,MAAM,IAAI,CAAC,GAAG,CAAC;AAAA,IAC5D;AACA,aAAS;AAAA,MACP;AAAA,MACA,IAAI,MAAM,gBAAgB,IAAI,aAAa,SAAS,GAAG,CAAC;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,UAAU;AA5EZ;AA6EI;AAAC,KAAC,gBAAK,YAAmD,YAAxD;AAAA,EACJ;AACF;AAtEa,YACJ,OAAO;AADT,IAAM,aAAN;","names":[]}
@@ -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":"AAAA,OAAO,KAAK,GAAG,MAAM,sBAAsB,CAAA;AAW3C,OAAO,EAAgB,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAEnE,OAAO,EAAqB,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAExE,OAAO,EAAyB,cAAc,EAAuB,MAAM,aAAa,CAAA;AAMxF,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,MAAM,qBAAqB,GAC7B,MAAM,GACN,gBAAgB,GAChB,WAAW,GACX,SAAS,GACT,MAAM,CAAA;AAEV,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,qBAAqB,CAAC,CAAA;AAc3E,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,qBAAqB,GAAG,SAAS,GACvC,MAAM,CAER;AAED,qBAAa,aAAc,SAAQ,GAAG,CAAC,SAAS;IAC9C,MAAM,CAAC,IAAI,yCAAsB;IAEjC,OAAO,UAAQ;IAEf,QAAQ,CAAC,iBAAiB,8BAAoC;IAC9D,QAAQ,CAAC,sBAAsB,4BAAyC;IACxE,QAAQ,CAAC,wBAAwB,mCAAyC;IAC1E,yEAAyE;IACzE,QAAQ,CAAC,eAAe,4BAAkC;IAC1D,0EAA0E;IAC1E,QAAQ,CAAC,mBAAmB,oBAA0B;IACtD,gDAAgD;IAChD,QAAQ,CAAC,qBAAqB,qBAA2B;IAEzD,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,SAAS,CAAsB;IACvC;;qEAEiE;IACjE,OAAO,CAAC,YAAY,CAAI;IACxB;2EACuE;IACvE,OAAO,CAAC,WAAW,CAAI;IACvB,+DAA+D;IAC/D,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,YAAY,CAAyC;IAC7D,OAAO,CAAC,YAAY,CAAyC;IAC7D,OAAO,CAAC,WAAW,CAA4C;IAC/D;sDACkD;IAClD,OAAO,CAAC,UAAU,CAA6B;IAC/C;;2DAEuD;IACvD,OAAO,CAAC,UAAU,CAA4B;IAC9C;uDACmD;IACnD,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,WAAW,CAAkC;IACrD;;8EAE0E;IAC1E,OAAO,CAAC,gBAAgB,CAAsB;IAE9C,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,IAAI,CAAgB;gBAEhB,UAAU,EAAE,GAAG,CAAC,UAAU;IAiBtC,IAAI,QAAQ,IAAI,cAAc,EAAE,CAI/B;IAED,IAAI,eAAe,WAElB;IAED,IAAI,aAAa,IAAI,cAAc,GAAG,IAAI,CAEzC;IAED;gEAC4D;IAC5D,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAIxB,2EAA2E;IAC3E,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAUpE;;;;iDAI6C;IACvC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAerE;;oEAEgE;IAChE,OAAO,CAAC,uBAAuB;IA8B/B;;;+BAG2B;YACb,qBAAqB;IAgDnC;;2CAEuC;IACjC,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAStD;8CAC0C;IACpC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IASrD,wEAAwE;IACxE,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,wEAAwE;IACxE,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED;;2BAEuB;IACvB,aAAa,CAAC,OAAO,EAAE,MAAM;IAQ7B;;;;2CAIuC;IACvC,cAAc;IAwBd;yDACqD;IACrD,eAAe;IAuBf;;;+DAG2D;IAC3D,OAAO,CAAC,YAAY;IAgCpB;;;;;;;;gFAQ4E;IAC5E,OAAO,CAAC,sBAAsB;IAuB9B;kFAC8E;IAC9E,OAAO,CAAC,WAAW;IASnB;;4EAEwE;IACxE,OAAO,CAAC,kBAAkB;IA8B1B;gFAC4E;IAC5E,OAAO,CAAC,KAAK;IAmBb;;yDAEqD;IACrD,OAAO,CAAC,gBAAgB;IAYxB;;;kEAG8D;IAC9D,OAAO,CAAC,oBAAoB;IAwB5B;;4CAEwC;IACxC,OAAO,CAAC,cAAc;IAqDtB;;6CAEyC;IACzC,OAAO,CAAC,aAAa;IAkBrB;;sEAEkE;IAClE,OAAO,CAAC,mBAAmB;IAY3B;uDACmD;IACnD,OAAO,CAAC,cAAc;IAStB;4BACwB;IAClB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA2D1D;;;;;;;OAOG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM;IA8FzB;;;;OAIG;IACG,UAAU;IA2ChB,sBAAsB,CAAC,OAAO,EAAE,MAAM;IAetC,OAAO;IASP,OAAO,CAAC,KAAK;IAIb;qEACiE;YACnD,oBAAoB;IASlC,OAAO,CAAC,mBAAmB;IAQ3B;;wDAEoD;IACpD,OAAO,CAAC,eAAe;IASvB;;kDAE8C;IAC9C,OAAO,CAAC,YAAY;CAkBrB"}