@collabdt/core 0.3.0 → 0.3.1

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 (1284) hide show
  1. package/dist/core/components/AppSidebarContent.d.ts +1 -1
  2. package/dist/core/components/AppSidebarContent.d.ts.map +1 -1
  3. package/dist/core/components/AppSidebarContent.js +9 -9
  4. package/dist/core/components/AppSidebarContent.js.map +1 -1
  5. package/dist/core/components/ConfirmDialog.js.map +1 -1
  6. package/dist/core/components/DataTableSkeleton.d.ts.map +1 -1
  7. package/dist/core/components/DataTableSkeleton.js.map +1 -1
  8. package/dist/core/components/LanguageSwitch.d.ts.map +1 -1
  9. package/dist/core/components/LanguageSwitch.js +4 -4
  10. package/dist/core/components/LanguageSwitch.js.map +1 -1
  11. package/dist/core/components/Logo.js +1 -1
  12. package/dist/core/components/Logo.js.map +1 -1
  13. package/dist/core/components/Toolbar.d.ts +1 -1
  14. package/dist/core/components/Toolbar.d.ts.map +1 -1
  15. package/dist/core/components/Toolbar.js +1 -1
  16. package/dist/core/components/Toolbar.js.map +1 -1
  17. package/dist/core/components/ToolbarBody.d.ts +1 -1
  18. package/dist/core/components/ToolbarBody.d.ts.map +1 -1
  19. package/dist/core/components/ToolbarBody.js +1 -1
  20. package/dist/core/components/ToolbarBody.js.map +1 -1
  21. package/dist/core/components/ToolbarSubmenu.d.ts +1 -1
  22. package/dist/core/components/ToolbarSubmenu.d.ts.map +1 -1
  23. package/dist/core/components/ToolbarSubmenu.js +2 -2
  24. package/dist/core/components/ToolbarSubmenu.js.map +1 -1
  25. package/dist/core/components/TopNavigationBar.d.ts.map +1 -1
  26. package/dist/core/components/TopNavigationBar.js +5 -5
  27. package/dist/core/components/TopNavigationBar.js.map +1 -1
  28. package/dist/core/components/authentication/AuthPage.d.ts.map +1 -1
  29. package/dist/core/components/authentication/AuthPage.js +5 -5
  30. package/dist/core/components/authentication/AuthPage.js.map +1 -1
  31. package/dist/core/components/authentication/ForgotPassword.d.ts.map +1 -1
  32. package/dist/core/components/authentication/ForgotPassword.js +3 -3
  33. package/dist/core/components/authentication/ForgotPassword.js.map +1 -1
  34. package/dist/core/components/authentication/Signin.d.ts.map +1 -1
  35. package/dist/core/components/authentication/Signin.js +5 -5
  36. package/dist/core/components/authentication/Signin.js.map +1 -1
  37. package/dist/core/components/authentication/Signup.d.ts.map +1 -1
  38. package/dist/core/components/authentication/Signup.js +7 -7
  39. package/dist/core/components/authentication/Signup.js.map +1 -1
  40. package/dist/core/components/instance-not-found/index.d.ts.map +1 -1
  41. package/dist/core/components/instance-not-found/index.js +4 -4
  42. package/dist/core/components/instance-not-found/index.js.map +1 -1
  43. package/dist/core/components/instance-not-found/src/OrganizationNotFoundSection.d.ts.map +1 -1
  44. package/dist/core/components/instance-not-found/src/OrganizationNotFoundSection.js +3 -3
  45. package/dist/core/components/instance-not-found/src/OrganizationNotFoundSection.js.map +1 -1
  46. package/dist/core/components/organizationConfig/index.d.ts.map +1 -1
  47. package/dist/core/components/organizationConfig/index.js +4 -4
  48. package/dist/core/components/organizationConfig/index.js.map +1 -1
  49. package/dist/core/components/organizationConfig/src/organizationConfigContent.js +2 -2
  50. package/dist/core/components/organizationConfig/src/organizationConfigContent.js.map +1 -1
  51. package/dist/core/components/settings/index.d.ts.map +1 -1
  52. package/dist/core/components/settings/index.js +2 -2
  53. package/dist/core/components/settings/index.js.map +1 -1
  54. package/dist/core/components/settings/src/AccountSettingsPanel.d.ts.map +1 -1
  55. package/dist/core/components/settings/src/AccountSettingsPanel.js +8 -8
  56. package/dist/core/components/settings/src/AccountSettingsPanel.js.map +1 -1
  57. package/dist/core/components/settings/src/ChangePassword.d.ts.map +1 -1
  58. package/dist/core/components/settings/src/ChangePassword.js +5 -5
  59. package/dist/core/components/settings/src/ChangePassword.js.map +1 -1
  60. package/dist/core/components/settings/src/OrganizationSettingsPanel.d.ts.map +1 -1
  61. package/dist/core/components/settings/src/OrganizationSettingsPanel.js +7 -7
  62. package/dist/core/components/settings/src/OrganizationSettingsPanel.js.map +1 -1
  63. package/dist/core/components/settings/src/SettingsContent.d.ts.map +1 -1
  64. package/dist/core/components/settings/src/SettingsContent.js +1 -1
  65. package/dist/core/components/settings/src/SettingsContent.js.map +1 -1
  66. package/dist/core/components/settings/src/SettingsSidebar.d.ts.map +1 -1
  67. package/dist/core/components/settings/src/SettingsSidebar.js +3 -3
  68. package/dist/core/components/settings/src/SettingsSidebar.js.map +1 -1
  69. package/dist/core/components/settings/src/UsersSettingsPanel.js +1 -1
  70. package/dist/core/components/settings/src/UsersSettingsPanel.js.map +1 -1
  71. package/dist/core/components/support/BugReportDialog.d.ts.map +1 -1
  72. package/dist/core/components/support/BugReportDialog.js +8 -8
  73. package/dist/core/components/support/BugReportDialog.js.map +1 -1
  74. package/dist/core/components/support/FeatureRequestDialog.d.ts.map +1 -1
  75. package/dist/core/components/support/FeatureRequestDialog.js +6 -6
  76. package/dist/core/components/support/FeatureRequestDialog.js.map +1 -1
  77. package/dist/core/components/support/SupportMenu.d.ts.map +1 -1
  78. package/dist/core/components/support/SupportMenu.js +1 -1
  79. package/dist/core/components/support/SupportMenu.js.map +1 -1
  80. package/dist/core/components/ui/Accordion.d.ts +1 -1
  81. package/dist/core/components/ui/Accordion.d.ts.map +1 -1
  82. package/dist/core/components/ui/Accordion.js +1 -1
  83. package/dist/core/components/ui/Accordion.js.map +1 -1
  84. package/dist/core/components/ui/AddItemDialog.d.ts.map +1 -1
  85. package/dist/core/components/ui/AddItemDialog.js +1 -1
  86. package/dist/core/components/ui/AddItemDialog.js.map +1 -1
  87. package/dist/core/components/ui/AlertDialog.d.ts +1 -1
  88. package/dist/core/components/ui/AlertDialog.d.ts.map +1 -1
  89. package/dist/core/components/ui/AlertDialog.js +1 -1
  90. package/dist/core/components/ui/AlertDialog.js.map +1 -1
  91. package/dist/core/components/ui/AnimatedBackground.js +1 -1
  92. package/dist/core/components/ui/AnimatedBackground.js.map +1 -1
  93. package/dist/core/components/ui/AppSidebar.d.ts.map +1 -1
  94. package/dist/core/components/ui/AppSidebar.js +7 -7
  95. package/dist/core/components/ui/AppSidebar.js.map +1 -1
  96. package/dist/core/components/ui/Avatar.d.ts +1 -1
  97. package/dist/core/components/ui/Avatar.d.ts.map +1 -1
  98. package/dist/core/components/ui/Avatar.js +1 -1
  99. package/dist/core/components/ui/Avatar.js.map +1 -1
  100. package/dist/core/components/ui/Badge.d.ts.map +1 -1
  101. package/dist/core/components/ui/Badge.js.map +1 -1
  102. package/dist/core/components/ui/Breadcrumb.d.ts.map +1 -1
  103. package/dist/core/components/ui/Breadcrumb.js +2 -2
  104. package/dist/core/components/ui/Breadcrumb.js.map +1 -1
  105. package/dist/core/components/ui/Button.d.ts.map +1 -1
  106. package/dist/core/components/ui/Button.js +1 -1
  107. package/dist/core/components/ui/Button.js.map +1 -1
  108. package/dist/core/components/ui/Calendar.d.ts +2 -1
  109. package/dist/core/components/ui/Calendar.d.ts.map +1 -1
  110. package/dist/core/components/ui/Calendar.js +1 -1
  111. package/dist/core/components/ui/Calendar.js.map +1 -1
  112. package/dist/core/components/ui/Checkbox.d.ts +1 -1
  113. package/dist/core/components/ui/Checkbox.d.ts.map +1 -1
  114. package/dist/core/components/ui/Checkbox.js +1 -1
  115. package/dist/core/components/ui/Checkbox.js.map +1 -1
  116. package/dist/core/components/ui/CollapsibleSection.d.ts.map +1 -1
  117. package/dist/core/components/ui/CollapsibleSection.js +2 -2
  118. package/dist/core/components/ui/CollapsibleSection.js.map +1 -1
  119. package/dist/core/components/ui/Command.d.ts +8 -8
  120. package/dist/core/components/ui/Command.d.ts.map +1 -1
  121. package/dist/core/components/ui/Command.js +1 -1
  122. package/dist/core/components/ui/Command.js.map +1 -1
  123. package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts +1 -1
  124. package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts.map +1 -1
  125. package/dist/core/components/ui/Comments/CollapsibleCommentItem.js +9 -9
  126. package/dist/core/components/ui/Comments/CollapsibleCommentItem.js.map +1 -1
  127. package/dist/core/components/ui/Comments/Comment.d.ts.map +1 -1
  128. package/dist/core/components/ui/Comments/Comment.js +4 -4
  129. package/dist/core/components/ui/Comments/Comment.js.map +1 -1
  130. package/dist/core/components/ui/Comments/CommentInput.d.ts.map +1 -1
  131. package/dist/core/components/ui/Comments/CommentInput.js +6 -6
  132. package/dist/core/components/ui/Comments/CommentInput.js.map +1 -1
  133. package/dist/core/components/ui/Comments/CommentsSection.d.ts.map +1 -1
  134. package/dist/core/components/ui/Comments/CommentsSection.js +4 -4
  135. package/dist/core/components/ui/Comments/CommentsSection.js.map +1 -1
  136. package/dist/core/components/ui/Comments/commentUtils.d.ts +1 -1
  137. package/dist/core/components/ui/Comments/commentUtils.d.ts.map +1 -1
  138. package/dist/core/components/ui/Comments/commentUtils.js.map +1 -1
  139. package/dist/core/components/ui/Countdown.d.ts.map +1 -1
  140. package/dist/core/components/ui/Countdown.js +1 -1
  141. package/dist/core/components/ui/Countdown.js.map +1 -1
  142. package/dist/core/components/ui/DataTable.d.ts +1 -1
  143. package/dist/core/components/ui/DataTable.d.ts.map +1 -1
  144. package/dist/core/components/ui/DataTable.js +17 -17
  145. package/dist/core/components/ui/DataTable.js.map +1 -1
  146. package/dist/core/components/ui/DatePicker.d.ts.map +1 -1
  147. package/dist/core/components/ui/DatePicker.js +2 -2
  148. package/dist/core/components/ui/DatePicker.js.map +1 -1
  149. package/dist/core/components/ui/DescriptionList.d.ts.map +1 -1
  150. package/dist/core/components/ui/DescriptionList.js +2 -2
  151. package/dist/core/components/ui/DescriptionList.js.map +1 -1
  152. package/dist/core/components/ui/Dialog.d.ts +1 -1
  153. package/dist/core/components/ui/Dialog.d.ts.map +1 -1
  154. package/dist/core/components/ui/Dialog.js +1 -1
  155. package/dist/core/components/ui/Dialog.js.map +1 -1
  156. package/dist/core/components/ui/DropdownMenu.d.ts +1 -1
  157. package/dist/core/components/ui/DropdownMenu.d.ts.map +1 -1
  158. package/dist/core/components/ui/DropdownMenu.js +1 -1
  159. package/dist/core/components/ui/DropdownMenu.js.map +1 -1
  160. package/dist/core/components/ui/ExportData.d.ts +2 -2
  161. package/dist/core/components/ui/ExportData.d.ts.map +1 -1
  162. package/dist/core/components/ui/ExportData.js +5 -5
  163. package/dist/core/components/ui/ExportData.js.map +1 -1
  164. package/dist/core/components/ui/FilesManager/src/FileItemComponent.d.ts.map +1 -1
  165. package/dist/core/components/ui/FilesManager/src/FileItemComponent.js +3 -3
  166. package/dist/core/components/ui/FilesManager/src/FileItemComponent.js.map +1 -1
  167. package/dist/core/components/ui/FilesManager/src/FileMarker.d.ts.map +1 -1
  168. package/dist/core/components/ui/FilesManager/src/FileMarker.js +2 -2
  169. package/dist/core/components/ui/FilesManager/src/FileMarker.js.map +1 -1
  170. package/dist/core/components/ui/FilesManager/src/ViewerContextMenu.d.ts.map +1 -1
  171. package/dist/core/components/ui/FilesManager/src/ViewerContextMenu.js +1 -1
  172. package/dist/core/components/ui/FilesManager/src/ViewerContextMenu.js.map +1 -1
  173. package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.d.ts.map +1 -1
  174. package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.js.map +1 -1
  175. package/dist/core/components/ui/FilesManager/src/downloadUtils.d.ts +1 -1
  176. package/dist/core/components/ui/FilesManager/src/downloadUtils.d.ts.map +1 -1
  177. package/dist/core/components/ui/FilesManager/src/downloadUtils.js.map +1 -1
  178. package/dist/core/components/ui/FilesManager/src/useCommonFileUpload.js.map +1 -1
  179. package/dist/core/components/ui/FilesManager/src/useFileActions.d.ts +2 -2
  180. package/dist/core/components/ui/FilesManager/src/useFileActions.d.ts.map +1 -1
  181. package/dist/core/components/ui/FilesManager/src/useFileActions.js +2 -2
  182. package/dist/core/components/ui/FilesManager/src/useFileActions.js.map +1 -1
  183. package/dist/core/components/ui/FilesManager/src/useFileDeleteHandler.js +1 -1
  184. package/dist/core/components/ui/FilesManager/src/useFileDeleteHandler.js.map +1 -1
  185. package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.js +3 -3
  186. package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.js.map +1 -1
  187. package/dist/core/components/ui/FilesManager/src/useFileUploadWithProgress.d.ts.map +1 -1
  188. package/dist/core/components/ui/FilesManager/src/useFileUploadWithProgress.js.map +1 -1
  189. package/dist/core/components/ui/GenericTool.d.ts +1 -1
  190. package/dist/core/components/ui/GenericTool.d.ts.map +1 -1
  191. package/dist/core/components/ui/GenericTool.js +2 -2
  192. package/dist/core/components/ui/GenericTool.js.map +1 -1
  193. package/dist/core/components/ui/Icons/FloorPlanIcon.js +1 -1
  194. package/dist/core/components/ui/Icons/FloorPlanIcon.js.map +1 -1
  195. package/dist/core/components/ui/InfoSidebar/Container.d.ts.map +1 -1
  196. package/dist/core/components/ui/InfoSidebar/Container.js.map +1 -1
  197. package/dist/core/components/ui/InfoSidebar/Header.d.ts.map +1 -1
  198. package/dist/core/components/ui/InfoSidebar/Header.js +4 -4
  199. package/dist/core/components/ui/InfoSidebar/Header.js.map +1 -1
  200. package/dist/core/components/ui/InfoSidebar/index.d.ts +1 -1
  201. package/dist/core/components/ui/InfoSidebar/index.d.ts.map +1 -1
  202. package/dist/core/components/ui/InfoSidebar/index.js +1 -1
  203. package/dist/core/components/ui/InfoSidebar/index.js.map +1 -1
  204. package/dist/core/components/ui/Label.d.ts +1 -1
  205. package/dist/core/components/ui/Label.d.ts.map +1 -1
  206. package/dist/core/components/ui/Label.js +1 -1
  207. package/dist/core/components/ui/Label.js.map +1 -1
  208. package/dist/core/components/ui/LanguageToggle.d.ts +1 -1
  209. package/dist/core/components/ui/LanguageToggle.d.ts.map +1 -1
  210. package/dist/core/components/ui/LanguageToggle.js +1 -1
  211. package/dist/core/components/ui/LanguageToggle.js.map +1 -1
  212. package/dist/core/components/ui/Menubar.d.ts +1 -1
  213. package/dist/core/components/ui/Menubar.d.ts.map +1 -1
  214. package/dist/core/components/ui/Menubar.js +1 -1
  215. package/dist/core/components/ui/Menubar.js.map +1 -1
  216. package/dist/core/components/ui/NavUser.js +7 -7
  217. package/dist/core/components/ui/NavUser.js.map +1 -1
  218. package/dist/core/components/ui/Navbar.d.ts.map +1 -1
  219. package/dist/core/components/ui/Navbar.js +2 -2
  220. package/dist/core/components/ui/Navbar.js.map +1 -1
  221. package/dist/core/components/ui/Popover.d.ts +1 -1
  222. package/dist/core/components/ui/Popover.d.ts.map +1 -1
  223. package/dist/core/components/ui/Popover.js +1 -1
  224. package/dist/core/components/ui/Popover.js.map +1 -1
  225. package/dist/core/components/ui/Progress.d.ts +1 -1
  226. package/dist/core/components/ui/Progress.d.ts.map +1 -1
  227. package/dist/core/components/ui/Progress.js +1 -1
  228. package/dist/core/components/ui/Progress.js.map +1 -1
  229. package/dist/core/components/ui/ScrollArea.d.ts +1 -1
  230. package/dist/core/components/ui/ScrollArea.d.ts.map +1 -1
  231. package/dist/core/components/ui/ScrollArea.js +1 -1
  232. package/dist/core/components/ui/ScrollArea.js.map +1 -1
  233. package/dist/core/components/ui/SearchInput.d.ts.map +1 -1
  234. package/dist/core/components/ui/SearchInput.js +2 -2
  235. package/dist/core/components/ui/SearchInput.js.map +1 -1
  236. package/dist/core/components/ui/Select.d.ts +1 -1
  237. package/dist/core/components/ui/Select.d.ts.map +1 -1
  238. package/dist/core/components/ui/Select.js +3 -3
  239. package/dist/core/components/ui/Select.js.map +1 -1
  240. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts +1 -1
  241. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts.map +1 -1
  242. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js +10 -10
  243. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js.map +1 -1
  244. package/dist/core/components/ui/Sensors/Sensor.d.ts +2 -1
  245. package/dist/core/components/ui/Sensors/Sensor.d.ts.map +1 -1
  246. package/dist/core/components/ui/Sensors/Sensor.js +3 -3
  247. package/dist/core/components/ui/Sensors/Sensor.js.map +1 -1
  248. package/dist/core/components/ui/Sensors/SensorChart.d.ts +1 -1
  249. package/dist/core/components/ui/Sensors/SensorChart.d.ts.map +1 -1
  250. package/dist/core/components/ui/Sensors/SensorChart.js +1 -1
  251. package/dist/core/components/ui/Sensors/SensorChart.js.map +1 -1
  252. package/dist/core/components/ui/Sensors/SensorInput.d.ts.map +1 -1
  253. package/dist/core/components/ui/Sensors/SensorInput.js +9 -9
  254. package/dist/core/components/ui/Sensors/SensorInput.js.map +1 -1
  255. package/dist/core/components/ui/Sensors/SensorTagsSection.d.ts.map +1 -1
  256. package/dist/core/components/ui/Sensors/SensorTagsSection.js +3 -3
  257. package/dist/core/components/ui/Sensors/SensorTagsSection.js.map +1 -1
  258. package/dist/core/components/ui/Sensors/SensorsSection.d.ts.map +1 -1
  259. package/dist/core/components/ui/Sensors/SensorsSection.js +7 -7
  260. package/dist/core/components/ui/Sensors/SensorsSection.js.map +1 -1
  261. package/dist/core/components/ui/Sensors/SensorsSectionSkeleton.d.ts.map +1 -1
  262. package/dist/core/components/ui/Sensors/SensorsSectionSkeleton.js.map +1 -1
  263. package/dist/core/components/ui/Sensors/sensorUtils.d.ts +1 -1
  264. package/dist/core/components/ui/Sensors/sensorUtils.d.ts.map +1 -1
  265. package/dist/core/components/ui/Sensors/sensorUtils.js.map +1 -1
  266. package/dist/core/components/ui/Separator.d.ts +1 -1
  267. package/dist/core/components/ui/Separator.d.ts.map +1 -1
  268. package/dist/core/components/ui/Separator.js +1 -1
  269. package/dist/core/components/ui/Separator.js.map +1 -1
  270. package/dist/core/components/ui/SettingsButton.d.ts.map +1 -1
  271. package/dist/core/components/ui/SettingsButton.js +4 -4
  272. package/dist/core/components/ui/SettingsButton.js.map +1 -1
  273. package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.d.ts +1 -1
  274. package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.d.ts.map +1 -1
  275. package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.js +14 -14
  276. package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.js.map +1 -1
  277. package/dist/core/components/ui/Sheet.d.ts +1 -1
  278. package/dist/core/components/ui/Sheet.d.ts.map +1 -1
  279. package/dist/core/components/ui/Sheet.js +1 -1
  280. package/dist/core/components/ui/Sheet.js.map +1 -1
  281. package/dist/core/components/ui/Sidebar.d.ts +1 -1
  282. package/dist/core/components/ui/Sidebar.d.ts.map +1 -1
  283. package/dist/core/components/ui/Sidebar.js +6 -6
  284. package/dist/core/components/ui/Sidebar.js.map +1 -1
  285. package/dist/core/components/ui/Slider.d.ts +1 -1
  286. package/dist/core/components/ui/Slider.d.ts.map +1 -1
  287. package/dist/core/components/ui/Slider.js +1 -1
  288. package/dist/core/components/ui/Slider.js.map +1 -1
  289. package/dist/core/components/ui/Switch.d.ts +1 -1
  290. package/dist/core/components/ui/Switch.d.ts.map +1 -1
  291. package/dist/core/components/ui/Switch.js +1 -1
  292. package/dist/core/components/ui/Switch.js.map +1 -1
  293. package/dist/core/components/ui/Tabs.d.ts +1 -1
  294. package/dist/core/components/ui/Tabs.d.ts.map +1 -1
  295. package/dist/core/components/ui/Tabs.js +1 -1
  296. package/dist/core/components/ui/Tabs.js.map +1 -1
  297. package/dist/core/components/ui/Toggle.d.ts +1 -1
  298. package/dist/core/components/ui/Toggle.d.ts.map +1 -1
  299. package/dist/core/components/ui/Toggle.js +1 -1
  300. package/dist/core/components/ui/Toggle.js.map +1 -1
  301. package/dist/core/components/ui/ToggleGroup.d.ts +1 -1
  302. package/dist/core/components/ui/ToggleGroup.d.ts.map +1 -1
  303. package/dist/core/components/ui/ToggleGroup.js +1 -1
  304. package/dist/core/components/ui/ToggleGroup.js.map +1 -1
  305. package/dist/core/components/ui/ToolbarButton.d.ts +1 -1
  306. package/dist/core/components/ui/ToolbarButton.d.ts.map +1 -1
  307. package/dist/core/components/ui/ToolbarButton.js +1 -1
  308. package/dist/core/components/ui/ToolbarButton.js.map +1 -1
  309. package/dist/core/components/ui/Tooltip.d.ts +1 -1
  310. package/dist/core/components/ui/Tooltip.d.ts.map +1 -1
  311. package/dist/core/components/ui/Tooltip.js +1 -1
  312. package/dist/core/components/ui/Tooltip.js.map +1 -1
  313. package/dist/core/components/ui/UserAvatar.d.ts.map +1 -1
  314. package/dist/core/components/ui/UserAvatar.js +1 -1
  315. package/dist/core/components/ui/UserAvatar.js.map +1 -1
  316. package/dist/core/components/ui/downloadUtils.d.ts.map +1 -1
  317. package/dist/core/components/ui/downloadUtils.js.map +1 -1
  318. package/dist/core/components/ui/stats.d.ts.map +1 -1
  319. package/dist/core/components/ui/stats.js.map +1 -1
  320. package/dist/core/components/ui/uploadFile.js +1 -1
  321. package/dist/core/components/ui/uploadFile.js.map +1 -1
  322. package/dist/core/components/viewers/Data/DataMenu.d.ts +1 -1
  323. package/dist/core/components/viewers/Data/DataMenu.d.ts.map +1 -1
  324. package/dist/core/components/viewers/Data/DataMenu.js +11 -11
  325. package/dist/core/components/viewers/Data/DataMenu.js.map +1 -1
  326. package/dist/core/components/viewers/Data/FilterButtons.d.ts +1 -1
  327. package/dist/core/components/viewers/Data/FilterButtons.d.ts.map +1 -1
  328. package/dist/core/components/viewers/Data/FilterButtons.js +7 -7
  329. package/dist/core/components/viewers/Data/FilterButtons.js.map +1 -1
  330. package/dist/core/components/viewers/Data/HeaderButtons.d.ts +1 -1
  331. package/dist/core/components/viewers/Data/HeaderButtons.d.ts.map +1 -1
  332. package/dist/core/components/viewers/Data/HeaderButtons.js +9 -9
  333. package/dist/core/components/viewers/Data/HeaderButtons.js.map +1 -1
  334. package/dist/core/components/viewers/Data/MoreOptions.d.ts +1 -1
  335. package/dist/core/components/viewers/Data/MoreOptions.d.ts.map +1 -1
  336. package/dist/core/components/viewers/Data/MoreOptions.js +16 -16
  337. package/dist/core/components/viewers/Data/MoreOptions.js.map +1 -1
  338. package/dist/core/components/viewers/Data/advancedFilter/Filters.d.ts +1 -1
  339. package/dist/core/components/viewers/Data/advancedFilter/Filters.d.ts.map +1 -1
  340. package/dist/core/components/viewers/Data/advancedFilter/Filters.js +2 -2
  341. package/dist/core/components/viewers/Data/advancedFilter/Filters.js.map +1 -1
  342. package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.d.ts +1 -1
  343. package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.d.ts.map +1 -1
  344. package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.js +6 -6
  345. package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.js.map +1 -1
  346. package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.d.ts.map +1 -1
  347. package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.js +3 -3
  348. package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.js.map +1 -1
  349. package/dist/core/components/viewers/Data/buildingDetails/BuildingDetails.d.ts.map +1 -1
  350. package/dist/core/components/viewers/Data/buildingDetails/BuildingDetails.js +10 -10
  351. package/dist/core/components/viewers/Data/buildingDetails/BuildingDetails.js.map +1 -1
  352. package/dist/core/components/viewers/Data/buildingDetails/BuildingsMoreOptions.d.ts.map +1 -1
  353. package/dist/core/components/viewers/Data/buildingDetails/BuildingsMoreOptions.js +11 -11
  354. package/dist/core/components/viewers/Data/buildingDetails/BuildingsMoreOptions.js.map +1 -1
  355. package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.d.ts.map +1 -1
  356. package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.js +10 -10
  357. package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.js.map +1 -1
  358. package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.d.ts.map +1 -1
  359. package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.js.map +1 -1
  360. package/dist/core/components/viewers/Data/buildingDetails/buildingSchemaTemplate.d.ts.map +1 -1
  361. package/dist/core/components/viewers/Data/buildingDetails/buildingSchemaTemplate.js.map +1 -1
  362. package/dist/core/components/viewers/Data/details/AttachedFiles.d.ts +1 -1
  363. package/dist/core/components/viewers/Data/details/AttachedFiles.d.ts.map +1 -1
  364. package/dist/core/components/viewers/Data/details/AttachedFiles.js +3 -3
  365. package/dist/core/components/viewers/Data/details/AttachedFiles.js.map +1 -1
  366. package/dist/core/components/viewers/Data/details/DetailActions.d.ts +1 -1
  367. package/dist/core/components/viewers/Data/details/DetailActions.d.ts.map +1 -1
  368. package/dist/core/components/viewers/Data/details/DetailActions.js +2 -2
  369. package/dist/core/components/viewers/Data/details/DetailActions.js.map +1 -1
  370. package/dist/core/components/viewers/Data/details/DetailHeader.d.ts.map +1 -1
  371. package/dist/core/components/viewers/Data/details/DetailHeader.js.map +1 -1
  372. package/dist/core/components/viewers/Data/details/EnergySourcesGrid.d.ts.map +1 -1
  373. package/dist/core/components/viewers/Data/details/EnergySourcesGrid.js +4 -4
  374. package/dist/core/components/viewers/Data/details/EnergySourcesGrid.js.map +1 -1
  375. package/dist/core/components/viewers/Data/details/FieldValue.d.ts.map +1 -1
  376. package/dist/core/components/viewers/Data/details/FieldValue.js +2 -2
  377. package/dist/core/components/viewers/Data/details/FieldValue.js.map +1 -1
  378. package/dist/core/components/viewers/Data/details/FileUpload.d.ts.map +1 -1
  379. package/dist/core/components/viewers/Data/details/FileUpload.js +2 -2
  380. package/dist/core/components/viewers/Data/details/FileUpload.js.map +1 -1
  381. package/dist/core/components/viewers/Data/details/FilterFiles.d.ts.map +1 -1
  382. package/dist/core/components/viewers/Data/details/FilterFiles.js +2 -2
  383. package/dist/core/components/viewers/Data/details/FilterFiles.js.map +1 -1
  384. package/dist/core/components/viewers/Data/details/TabSidebar.d.ts.map +1 -1
  385. package/dist/core/components/viewers/Data/details/TabSidebar.js +3 -3
  386. package/dist/core/components/viewers/Data/details/TabSidebar.js.map +1 -1
  387. package/dist/core/components/viewers/Data/files/DatatableFileAdder.d.ts.map +1 -1
  388. package/dist/core/components/viewers/Data/files/DatatableFileAdder.js +3 -3
  389. package/dist/core/components/viewers/Data/files/DatatableFileAdder.js.map +1 -1
  390. package/dist/core/components/viewers/Data/files/FileDetails.d.ts.map +1 -1
  391. package/dist/core/components/viewers/Data/files/FileDetails.js +8 -8
  392. package/dist/core/components/viewers/Data/files/FileDetails.js.map +1 -1
  393. package/dist/core/components/viewers/Data/files/FileMoreOptions.d.ts.map +1 -1
  394. package/dist/core/components/viewers/Data/files/FileMoreOptions.js +8 -8
  395. package/dist/core/components/viewers/Data/files/FileMoreOptions.js.map +1 -1
  396. package/dist/core/components/viewers/Data/files/FilePreview.d.ts +1 -1
  397. package/dist/core/components/viewers/Data/files/FilePreview.d.ts.map +1 -1
  398. package/dist/core/components/viewers/Data/files/FilePreview.js +1 -1
  399. package/dist/core/components/viewers/Data/files/FilePreview.js.map +1 -1
  400. package/dist/core/components/viewers/Data/infrastructureDetails/AddInfrastructure.d.ts.map +1 -1
  401. package/dist/core/components/viewers/Data/infrastructureDetails/AddInfrastructure.js +3 -3
  402. package/dist/core/components/viewers/Data/infrastructureDetails/AddInfrastructure.js.map +1 -1
  403. package/dist/core/components/viewers/Data/infrastructureDetails/FieldRenderer.d.ts.map +1 -1
  404. package/dist/core/components/viewers/Data/infrastructureDetails/FieldRenderer.js +2 -2
  405. package/dist/core/components/viewers/Data/infrastructureDetails/FieldRenderer.js.map +1 -1
  406. package/dist/core/components/viewers/Data/infrastructureDetails/InfrastructureDetails.d.ts.map +1 -1
  407. package/dist/core/components/viewers/Data/infrastructureDetails/InfrastructureDetails.js +6 -6
  408. package/dist/core/components/viewers/Data/infrastructureDetails/InfrastructureDetails.js.map +1 -1
  409. package/dist/core/components/viewers/Data/siteDetails/AddSite.d.ts.map +1 -1
  410. package/dist/core/components/viewers/Data/siteDetails/AddSite.js +5 -5
  411. package/dist/core/components/viewers/Data/siteDetails/AddSite.js.map +1 -1
  412. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.d.ts.map +1 -1
  413. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js +10 -10
  414. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js.map +1 -1
  415. package/dist/core/components/viewers/Data/siteDetails/FieldRenderer.d.ts.map +1 -1
  416. package/dist/core/components/viewers/Data/siteDetails/FieldRenderer.js +9 -9
  417. package/dist/core/components/viewers/Data/siteDetails/FieldRenderer.js.map +1 -1
  418. package/dist/core/components/viewers/Data/siteDetails/SiteDetails.d.ts.map +1 -1
  419. package/dist/core/components/viewers/Data/siteDetails/SiteDetails.js +11 -11
  420. package/dist/core/components/viewers/Data/siteDetails/SiteDetails.js.map +1 -1
  421. package/dist/core/components/viewers/Data/userDetails/AddUser.d.ts.map +1 -1
  422. package/dist/core/components/viewers/Data/userDetails/AddUser.js +3 -3
  423. package/dist/core/components/viewers/Data/userDetails/AddUser.js.map +1 -1
  424. package/dist/core/components/viewers/Data/userDetails/UserDetails.d.ts.map +1 -1
  425. package/dist/core/components/viewers/Data/userDetails/UserDetails.js +12 -12
  426. package/dist/core/components/viewers/Data/userDetails/UserDetails.js.map +1 -1
  427. package/dist/core/components/viewers/Data/userDetails/UserMoreOptions.d.ts.map +1 -1
  428. package/dist/core/components/viewers/Data/userDetails/UserMoreOptions.js +12 -12
  429. package/dist/core/components/viewers/Data/userDetails/UserMoreOptions.js.map +1 -1
  430. package/dist/core/components/viewers/Data/utils/Columns.d.ts +2 -2
  431. package/dist/core/components/viewers/Data/utils/Columns.d.ts.map +1 -1
  432. package/dist/core/components/viewers/Data/utils/Columns.js +7 -7
  433. package/dist/core/components/viewers/Data/utils/Columns.js.map +1 -1
  434. package/dist/core/components/viewers/Data/utils/Headers.d.ts.map +1 -1
  435. package/dist/core/components/viewers/Data/utils/Headers.js.map +1 -1
  436. package/dist/core/components/viewers/Data/utils/csvUtils.js.map +1 -1
  437. package/dist/core/components/viewers/Data/utils/positionParser.js.map +1 -1
  438. package/dist/core/components/viewers/Data/utils/useViewerData.d.ts +2 -2
  439. package/dist/core/components/viewers/Data/utils/useViewerData.d.ts.map +1 -1
  440. package/dist/core/components/viewers/Data/utils/useViewerData.js.map +1 -1
  441. package/dist/core/components/viewers/Viewer.d.ts +1 -1
  442. package/dist/core/components/viewers/Viewer.d.ts.map +1 -1
  443. package/dist/core/components/viewers/Viewer.js +6 -6
  444. package/dist/core/components/viewers/Viewer.js.map +1 -1
  445. package/dist/core/components/viewers/bim/BimToolbar.d.ts.map +1 -1
  446. package/dist/core/components/viewers/bim/BimToolbar.js +1 -1
  447. package/dist/core/components/viewers/bim/BimToolbar.js.map +1 -1
  448. package/dist/core/components/viewers/bim/BimViewer.d.ts.map +1 -1
  449. package/dist/core/components/viewers/bim/BimViewer.js +7 -7
  450. package/dist/core/components/viewers/bim/BimViewer.js.map +1 -1
  451. package/dist/core/components/viewers/bim/src/BCFTopicsManager.d.ts.map +1 -1
  452. package/dist/core/components/viewers/bim/src/BCFTopicsManager.js.map +1 -1
  453. package/dist/core/components/viewers/bim/src/BIMManager/index.d.ts +2 -2
  454. package/dist/core/components/viewers/bim/src/BIMManager/index.d.ts.map +1 -1
  455. package/dist/core/components/viewers/bim/src/BIMManager/index.js.map +1 -1
  456. package/dist/core/components/viewers/bim/src/BimLoadingState/index.d.ts.map +1 -1
  457. package/dist/core/components/viewers/bim/src/BimLoadingState/index.js +9 -9
  458. package/dist/core/components/viewers/bim/src/BimLoadingState/index.js.map +1 -1
  459. package/dist/core/components/viewers/bim/src/BimMeasurements/LenghtMeasurement.d.ts.map +1 -1
  460. package/dist/core/components/viewers/bim/src/BimMeasurements/LenghtMeasurement.js +1 -1
  461. package/dist/core/components/viewers/bim/src/BimMeasurements/LenghtMeasurement.js.map +1 -1
  462. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/index.d.ts +1 -1
  463. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/index.d.ts.map +1 -1
  464. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/index.js +1 -1
  465. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/index.js.map +1 -1
  466. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CollapsibleTopicItem.d.ts +1 -1
  467. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CollapsibleTopicItem.d.ts.map +1 -1
  468. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CollapsibleTopicItem.js +5 -5
  469. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CollapsibleTopicItem.js.map +1 -1
  470. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CreateTopicDialog.d.ts +1 -1
  471. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CreateTopicDialog.d.ts.map +1 -1
  472. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CreateTopicDialog.js +9 -9
  473. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CreateTopicDialog.js.map +1 -1
  474. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/TopicsSection.d.ts.map +1 -1
  475. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/TopicsSection.js +6 -6
  476. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/TopicsSection.js.map +1 -1
  477. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/index.d.ts.map +1 -1
  478. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/index.js +4 -4
  479. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/index.js.map +1 -1
  480. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.d.ts +1 -1
  481. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  482. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js +10 -10
  483. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  484. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
  485. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.js +9 -9
  486. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
  487. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/index.d.ts.map +1 -1
  488. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/index.js +1 -1
  489. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/index.js.map +1 -1
  490. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/ElevationsSection.d.ts.map +1 -1
  491. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/ElevationsSection.js +2 -2
  492. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/ElevationsSection.js.map +1 -1
  493. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.d.ts.map +1 -1
  494. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js +1 -1
  495. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js.map +1 -1
  496. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/SpatialStructureSection.d.ts.map +1 -1
  497. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/SpatialStructureSection.js +6 -6
  498. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/SpatialStructureSection.js.map +1 -1
  499. package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.d.ts +1 -1
  500. package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.d.ts.map +1 -1
  501. package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.js.map +1 -1
  502. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/index.d.ts.map +1 -1
  503. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/index.js +2 -2
  504. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/index.js.map +1 -1
  505. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.d.ts.map +1 -1
  506. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.js +5 -5
  507. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.js.map +1 -1
  508. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/LightingManagement.d.ts.map +1 -1
  509. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/LightingManagement.js +3 -3
  510. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/LightingManagement.js.map +1 -1
  511. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.d.ts.map +1 -1
  512. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.js +3 -3
  513. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.js.map +1 -1
  514. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.d.ts.map +1 -1
  515. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.js +4 -4
  516. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.js.map +1 -1
  517. package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.d.ts +1 -1
  518. package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.d.ts.map +1 -1
  519. package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.js +1 -1
  520. package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.js.map +1 -1
  521. package/dist/core/components/viewers/bim/src/BimSidebar/src/index.d.ts.map +1 -1
  522. package/dist/core/components/viewers/bim/src/BimSidebar/src/index.js +5 -5
  523. package/dist/core/components/viewers/bim/src/BimSidebar/src/index.js.map +1 -1
  524. package/dist/core/components/viewers/bim/src/CameraProjection.d.ts.map +1 -1
  525. package/dist/core/components/viewers/bim/src/CameraProjection.js.map +1 -1
  526. package/dist/core/components/viewers/bim/src/ClippingPlane.d.ts.map +1 -1
  527. package/dist/core/components/viewers/bim/src/ClippingPlane.js +1 -1
  528. package/dist/core/components/viewers/bim/src/ClippingPlane.js.map +1 -1
  529. package/dist/core/components/viewers/bim/src/Cursor.d.ts +1 -1
  530. package/dist/core/components/viewers/bim/src/Cursor.d.ts.map +1 -1
  531. package/dist/core/components/viewers/bim/src/Cursor.js.map +1 -1
  532. package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts +1 -1
  533. package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts.map +1 -1
  534. package/dist/core/components/viewers/bim/src/DXFLoader/index.js +1 -1
  535. package/dist/core/components/viewers/bim/src/DXFLoader/index.js.map +1 -1
  536. package/dist/core/components/viewers/bim/src/ElevationsTool/index.d.ts +1 -1
  537. package/dist/core/components/viewers/bim/src/ElevationsTool/index.d.ts.map +1 -1
  538. package/dist/core/components/viewers/bim/src/ElevationsTool/index.js +1 -1
  539. package/dist/core/components/viewers/bim/src/ElevationsTool/index.js.map +1 -1
  540. package/dist/core/components/viewers/bim/src/ElevationsTool/src/ElevationProjector.d.ts +1 -1
  541. package/dist/core/components/viewers/bim/src/ElevationsTool/src/ElevationProjector.d.ts.map +1 -1
  542. package/dist/core/components/viewers/bim/src/ElevationsTool/src/ElevationProjector.js.map +1 -1
  543. package/dist/core/components/viewers/bim/src/ElevationsTool/src/types.d.ts +4 -4
  544. package/dist/core/components/viewers/bim/src/ElevationsTool/src/types.d.ts.map +1 -1
  545. package/dist/core/components/viewers/bim/src/ElevationsTool/src/types.js.map +1 -1
  546. package/dist/core/components/viewers/bim/src/FitCamera.d.ts.map +1 -1
  547. package/dist/core/components/viewers/bim/src/FitCamera.js +1 -1
  548. package/dist/core/components/viewers/bim/src/FitCamera.js.map +1 -1
  549. package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts +3 -3
  550. package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts.map +1 -1
  551. package/dist/core/components/viewers/bim/src/FloorplanTool/index.js +1 -1
  552. package/dist/core/components/viewers/bim/src/FloorplanTool/index.js.map +1 -1
  553. package/dist/core/components/viewers/bim/src/FloorplanTool/src/FloorplanRenderer.d.ts +3 -3
  554. package/dist/core/components/viewers/bim/src/FloorplanTool/src/FloorplanRenderer.d.ts.map +1 -1
  555. package/dist/core/components/viewers/bim/src/FloorplanTool/src/FloorplanRenderer.js.map +1 -1
  556. package/dist/core/components/viewers/bim/src/FloorplanTool/src/StoreyProjector.d.ts +1 -1
  557. package/dist/core/components/viewers/bim/src/FloorplanTool/src/StoreyProjector.d.ts.map +1 -1
  558. package/dist/core/components/viewers/bim/src/FloorplanTool/src/StoreyProjector.js.map +1 -1
  559. package/dist/core/components/viewers/bim/src/FloorplanTool/src/types.d.ts +2 -2
  560. package/dist/core/components/viewers/bim/src/FloorplanTool/src/types.d.ts.map +1 -1
  561. package/dist/core/components/viewers/bim/src/FloorplanTool/src/types.js.map +1 -1
  562. package/dist/core/components/viewers/bim/src/GhostMode.d.ts +1 -1
  563. package/dist/core/components/viewers/bim/src/GhostMode.d.ts.map +1 -1
  564. package/dist/core/components/viewers/bim/src/GhostMode.js.map +1 -1
  565. package/dist/core/components/viewers/bim/src/Highlighter/index.d.ts.map +1 -1
  566. package/dist/core/components/viewers/bim/src/Highlighter/index.js +1 -1
  567. package/dist/core/components/viewers/bim/src/Highlighter/index.js.map +1 -1
  568. package/dist/core/components/viewers/bim/src/IDSManager/index.d.ts.map +1 -1
  569. package/dist/core/components/viewers/bim/src/IDSManager/index.js +3 -3
  570. package/dist/core/components/viewers/bim/src/IDSManager/index.js.map +1 -1
  571. package/dist/core/components/viewers/bim/src/IDSManager/src/IDSLegend.d.ts.map +1 -1
  572. package/dist/core/components/viewers/bim/src/IDSManager/src/IDSLegend.js +2 -2
  573. package/dist/core/components/viewers/bim/src/IDSManager/src/IDSLegend.js.map +1 -1
  574. package/dist/core/components/viewers/bim/src/LoadIfcAsFragments.d.ts.map +1 -1
  575. package/dist/core/components/viewers/bim/src/LoadIfcAsFragments.js.map +1 -1
  576. package/dist/core/components/viewers/bim/src/LoadModels.d.ts +1 -1
  577. package/dist/core/components/viewers/bim/src/LoadModels.d.ts.map +1 -1
  578. package/dist/core/components/viewers/bim/src/LoadModels.js +1 -1
  579. package/dist/core/components/viewers/bim/src/LoadModels.js.map +1 -1
  580. package/dist/core/components/viewers/bim/src/ModelManager/index.d.ts +1 -1
  581. package/dist/core/components/viewers/bim/src/ModelManager/index.d.ts.map +1 -1
  582. package/dist/core/components/viewers/bim/src/ModelManager/index.js +4 -4
  583. package/dist/core/components/viewers/bim/src/ModelManager/index.js.map +1 -1
  584. package/dist/core/components/viewers/bim/src/SimpleBimViewer.d.ts +1 -1
  585. package/dist/core/components/viewers/bim/src/SimpleBimViewer.d.ts.map +1 -1
  586. package/dist/core/components/viewers/bim/src/SimpleBimViewer.js +8 -8
  587. package/dist/core/components/viewers/bim/src/SimpleBimViewer.js.map +1 -1
  588. package/dist/core/components/viewers/bim/src/SpatialStructure.js.map +1 -1
  589. package/dist/core/components/viewers/bim/src/ViewportGizmo.d.ts.map +1 -1
  590. package/dist/core/components/viewers/bim/src/ViewportGizmo.js +2 -2
  591. package/dist/core/components/viewers/bim/src/ViewportGizmo.js.map +1 -1
  592. package/dist/core/components/viewers/bim/src/lib/CameraController.d.ts +1 -1
  593. package/dist/core/components/viewers/bim/src/lib/CameraController.d.ts.map +1 -1
  594. package/dist/core/components/viewers/bim/src/lib/CameraController.js.map +1 -1
  595. package/dist/core/components/viewers/bim/src/lib/ChromeController.d.ts +1 -1
  596. package/dist/core/components/viewers/bim/src/lib/ChromeController.d.ts.map +1 -1
  597. package/dist/core/components/viewers/bim/src/lib/ChromeController.js.map +1 -1
  598. package/dist/core/components/viewers/bim/src/lib/ClipController.d.ts +1 -1
  599. package/dist/core/components/viewers/bim/src/lib/ClipController.d.ts.map +1 -1
  600. package/dist/core/components/viewers/bim/src/lib/ClipController.js.map +1 -1
  601. package/dist/core/components/viewers/bim/src/lib/GridController.d.ts.map +1 -1
  602. package/dist/core/components/viewers/bim/src/lib/GridController.js.map +1 -1
  603. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.d.ts.map +1 -1
  604. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.js +1 -1
  605. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.js.map +1 -1
  606. package/dist/core/components/viewers/bim/src/lib/ViewSectionList.d.ts +2 -2
  607. package/dist/core/components/viewers/bim/src/lib/ViewSectionList.d.ts.map +1 -1
  608. package/dist/core/components/viewers/bim/src/lib/ViewSectionList.js +1 -1
  609. package/dist/core/components/viewers/bim/src/lib/ViewSectionList.js.map +1 -1
  610. package/dist/core/components/viewers/bim/src/lib/drawingProjection.d.ts +1 -1
  611. package/dist/core/components/viewers/bim/src/lib/drawingProjection.d.ts.map +1 -1
  612. package/dist/core/components/viewers/bim/src/lib/drawingProjection.js.map +1 -1
  613. package/dist/core/components/viewers/bim/src/lib/useBuildingName.d.ts.map +1 -1
  614. package/dist/core/components/viewers/bim/src/lib/useBuildingName.js.map +1 -1
  615. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js +1 -1
  616. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js.map +1 -1
  617. package/dist/core/components/viewers/bim/src/propertiesMenu/index.d.ts.map +1 -1
  618. package/dist/core/components/viewers/bim/src/propertiesMenu/index.js +4 -4
  619. package/dist/core/components/viewers/bim/src/propertiesMenu/index.js.map +1 -1
  620. package/dist/core/components/viewers/bim/src/propertiesMenu/src/ElementList.d.ts.map +1 -1
  621. package/dist/core/components/viewers/bim/src/propertiesMenu/src/ElementList.js +1 -1
  622. package/dist/core/components/viewers/bim/src/propertiesMenu/src/ElementList.js.map +1 -1
  623. package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertiesMenuHeader.d.ts.map +1 -1
  624. package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertiesMenuHeader.js +2 -2
  625. package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertiesMenuHeader.js.map +1 -1
  626. package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertyGroup.d.ts.map +1 -1
  627. package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertyGroup.js.map +1 -1
  628. package/dist/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.d.ts +1 -1
  629. package/dist/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.d.ts.map +1 -1
  630. package/dist/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.js +2 -2
  631. package/dist/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.js.map +1 -1
  632. package/dist/core/components/viewers/bim/src/propertiesMenu/src/utils.d.ts.map +1 -1
  633. package/dist/core/components/viewers/bim/src/propertiesMenu/src/utils.js.map +1 -1
  634. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.d.ts.map +1 -1
  635. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js +9 -9
  636. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js.map +1 -1
  637. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts +1 -1
  638. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts.map +1 -1
  639. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js +2 -2
  640. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js.map +1 -1
  641. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddFile.d.ts.map +1 -1
  642. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddFile.js +2 -2
  643. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddFile.js.map +1 -1
  644. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddSensor.d.ts +1 -1
  645. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddSensor.d.ts.map +1 -1
  646. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddSensor.js.map +1 -1
  647. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddToBimToolbar.d.ts.map +1 -1
  648. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddToBimToolbar.js +3 -3
  649. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddToBimToolbar.js.map +1 -1
  650. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.d.ts +1 -1
  651. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.d.ts.map +1 -1
  652. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.js.map +1 -1
  653. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.d.ts +2 -2
  654. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.d.ts.map +1 -1
  655. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js.map +1 -1
  656. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts +5 -5
  657. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts.map +1 -1
  658. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.js.map +1 -1
  659. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.d.ts.map +1 -1
  660. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js +2 -2
  661. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js.map +1 -1
  662. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.d.ts.map +1 -1
  663. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.js +1 -1
  664. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.js.map +1 -1
  665. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.d.ts +1 -1
  666. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.d.ts.map +1 -1
  667. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.js +1 -1
  668. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.js.map +1 -1
  669. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.d.ts.map +1 -1
  670. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.js +4 -4
  671. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.js.map +1 -1
  672. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.d.ts +2 -2
  673. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.d.ts.map +1 -1
  674. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js +4 -4
  675. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js.map +1 -1
  676. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.d.ts.map +1 -1
  677. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.js +6 -6
  678. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.js.map +1 -1
  679. package/dist/core/components/viewers/bim/src/tools/BIMSearchTool.d.ts.map +1 -1
  680. package/dist/core/components/viewers/bim/src/tools/BIMSearchTool.js +2 -2
  681. package/dist/core/components/viewers/bim/src/tools/BIMSearchTool.js.map +1 -1
  682. package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.d.ts +1 -1
  683. package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.d.ts.map +1 -1
  684. package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.js +6 -6
  685. package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.js.map +1 -1
  686. package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.d.ts +1 -1
  687. package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.d.ts.map +1 -1
  688. package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.js +3 -3
  689. package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.js.map +1 -1
  690. package/dist/core/components/viewers/bim/src/tools/FitCameraTool.d.ts +1 -1
  691. package/dist/core/components/viewers/bim/src/tools/FitCameraTool.d.ts.map +1 -1
  692. package/dist/core/components/viewers/bim/src/tools/FitCameraTool.js +2 -2
  693. package/dist/core/components/viewers/bim/src/tools/FitCameraTool.js.map +1 -1
  694. package/dist/core/components/viewers/bim/src/tools/InspectBimTool.d.ts +1 -1
  695. package/dist/core/components/viewers/bim/src/tools/InspectBimTool.d.ts.map +1 -1
  696. package/dist/core/components/viewers/bim/src/tools/InspectBimTool.js +4 -4
  697. package/dist/core/components/viewers/bim/src/tools/InspectBimTool.js.map +1 -1
  698. package/dist/core/components/viewers/bim/src/tools/bimToolbar.d.ts +1 -1
  699. package/dist/core/components/viewers/bim/src/tools/bimToolbar.d.ts.map +1 -1
  700. package/dist/core/components/viewers/bim/src/tools/bimToolbar.js +4 -4
  701. package/dist/core/components/viewers/bim/src/tools/bimToolbar.js.map +1 -1
  702. package/dist/core/components/viewers/bim/src/tools/measureBimTool.d.ts +1 -1
  703. package/dist/core/components/viewers/bim/src/tools/measureBimTool.d.ts.map +1 -1
  704. package/dist/core/components/viewers/bim/src/tools/measureBimTool.js +5 -5
  705. package/dist/core/components/viewers/bim/src/tools/measureBimTool.js.map +1 -1
  706. package/dist/core/components/viewers/bim/src/tools/selectionBimTool.d.ts +1 -1
  707. package/dist/core/components/viewers/bim/src/tools/selectionBimTool.d.ts.map +1 -1
  708. package/dist/core/components/viewers/bim/src/tools/selectionBimTool.js +5 -5
  709. package/dist/core/components/viewers/bim/src/tools/selectionBimTool.js.map +1 -1
  710. package/dist/core/components/viewers/bim/src/tools/shareBimTool.d.ts +1 -1
  711. package/dist/core/components/viewers/bim/src/tools/shareBimTool.d.ts.map +1 -1
  712. package/dist/core/components/viewers/bim/src/tools/shareBimTool.js.map +1 -1
  713. package/dist/core/components/viewers/bim/utils/GizmoController.d.ts +1 -1
  714. package/dist/core/components/viewers/bim/utils/GizmoController.d.ts.map +1 -1
  715. package/dist/core/components/viewers/bim/utils/GizmoController.js.map +1 -1
  716. package/dist/core/components/viewers/bim/utils/setCameraLookAt.d.ts +1 -1
  717. package/dist/core/components/viewers/bim/utils/setCameraLookAt.d.ts.map +1 -1
  718. package/dist/core/components/viewers/bim/utils/setCameraLookAt.js.map +1 -1
  719. package/dist/core/components/viewers/map/MapViewer.d.ts +1 -1
  720. package/dist/core/components/viewers/map/MapViewer.d.ts.map +1 -1
  721. package/dist/core/components/viewers/map/MapViewer.js +7 -7
  722. package/dist/core/components/viewers/map/MapViewer.js.map +1 -1
  723. package/dist/core/components/viewers/map/datasets/AddPortalDialog.d.ts.map +1 -1
  724. package/dist/core/components/viewers/map/datasets/AddPortalDialog.js +4 -4
  725. package/dist/core/components/viewers/map/datasets/AddPortalDialog.js.map +1 -1
  726. package/dist/core/components/viewers/map/datasets/DatasetDetails.d.ts +1 -1
  727. package/dist/core/components/viewers/map/datasets/DatasetDetails.d.ts.map +1 -1
  728. package/dist/core/components/viewers/map/datasets/DatasetDetails.js +4 -4
  729. package/dist/core/components/viewers/map/datasets/DatasetDetails.js.map +1 -1
  730. package/dist/core/components/viewers/map/datasets/DatasetManager/index.d.ts.map +1 -1
  731. package/dist/core/components/viewers/map/datasets/DatasetManager/index.js +13 -13
  732. package/dist/core/components/viewers/map/datasets/DatasetManager/index.js.map +1 -1
  733. package/dist/core/components/viewers/map/datasets/DatasetManager/src/FieldsTable.d.ts.map +1 -1
  734. package/dist/core/components/viewers/map/datasets/DatasetManager/src/FieldsTable.js +2 -2
  735. package/dist/core/components/viewers/map/datasets/DatasetManager/src/FieldsTable.js.map +1 -1
  736. package/dist/core/components/viewers/map/datasets/DatasetSkeleton.d.ts.map +1 -1
  737. package/dist/core/components/viewers/map/datasets/DatasetSkeleton.js.map +1 -1
  738. package/dist/core/components/viewers/map/datasets/Filters.d.ts.map +1 -1
  739. package/dist/core/components/viewers/map/datasets/Filters.js +2 -2
  740. package/dist/core/components/viewers/map/datasets/Filters.js.map +1 -1
  741. package/dist/core/components/viewers/map/datasets/NestedFilter.d.ts.map +1 -1
  742. package/dist/core/components/viewers/map/datasets/NestedFilter.js +1 -1
  743. package/dist/core/components/viewers/map/datasets/NestedFilter.js.map +1 -1
  744. package/dist/core/components/viewers/map/datasets/RowActions.d.ts.map +1 -1
  745. package/dist/core/components/viewers/map/datasets/RowActions.js +3 -3
  746. package/dist/core/components/viewers/map/datasets/RowActions.js.map +1 -1
  747. package/dist/core/components/viewers/map/datasets/data.d.ts +1 -1
  748. package/dist/core/components/viewers/map/datasets/data.d.ts.map +1 -1
  749. package/dist/core/components/viewers/map/datasets/data.js +2 -2
  750. package/dist/core/components/viewers/map/datasets/data.js.map +1 -1
  751. package/dist/core/components/viewers/map/datasets/index.d.ts +1 -1
  752. package/dist/core/components/viewers/map/datasets/index.d.ts.map +1 -1
  753. package/dist/core/components/viewers/map/datasets/index.js +11 -11
  754. package/dist/core/components/viewers/map/datasets/index.js.map +1 -1
  755. package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.d.ts +1 -1
  756. package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.d.ts.map +1 -1
  757. package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.js +2 -2
  758. package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.js.map +1 -1
  759. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.d.ts.map +1 -1
  760. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.js.map +1 -1
  761. package/dist/core/components/viewers/map/datasets/src/cache.js.map +1 -1
  762. package/dist/core/components/viewers/map/datasets/src/ckanDatasets.d.ts +1 -1
  763. package/dist/core/components/viewers/map/datasets/src/ckanDatasets.d.ts.map +1 -1
  764. package/dist/core/components/viewers/map/datasets/src/ckanDatasets.js +1 -1
  765. package/dist/core/components/viewers/map/datasets/src/ckanDatasets.js.map +1 -1
  766. package/dist/core/components/viewers/map/datasets/src/localDatasets.d.ts +1 -1
  767. package/dist/core/components/viewers/map/datasets/src/localDatasets.d.ts.map +1 -1
  768. package/dist/core/components/viewers/map/datasets/src/localDatasets.js +3 -3
  769. package/dist/core/components/viewers/map/datasets/src/localDatasets.js.map +1 -1
  770. package/dist/core/components/viewers/map/datasets/src/minioDatasets.d.ts.map +1 -1
  771. package/dist/core/components/viewers/map/datasets/src/minioDatasets.js.map +1 -1
  772. package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.d.ts +1 -1
  773. package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.d.ts.map +1 -1
  774. package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.js +1 -1
  775. package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.js.map +1 -1
  776. package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts +1 -1
  777. package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts.map +1 -1
  778. package/dist/core/components/viewers/map/datasets/src/publishedTiles.js.map +1 -1
  779. package/dist/core/components/viewers/map/datasets/src/socrataDatasets.d.ts.map +1 -1
  780. package/dist/core/components/viewers/map/datasets/src/socrataDatasets.js +1 -1
  781. package/dist/core/components/viewers/map/datasets/src/socrataDatasets.js.map +1 -1
  782. package/dist/core/components/viewers/map/datasets/src/urlSources.d.ts +1 -12
  783. package/dist/core/components/viewers/map/datasets/src/urlSources.d.ts.map +1 -1
  784. package/dist/core/components/viewers/map/datasets/src/urlSources.js +1 -1
  785. package/dist/core/components/viewers/map/datasets/src/urlSources.js.map +1 -1
  786. package/dist/core/components/viewers/map/datasets/src/useDatasetsForPortals.d.ts.map +1 -1
  787. package/dist/core/components/viewers/map/datasets/src/useDatasetsForPortals.js +1 -1
  788. package/dist/core/components/viewers/map/datasets/src/useDatasetsForPortals.js.map +1 -1
  789. package/dist/core/components/viewers/map/datasets/src/useFastDatasetCache.d.ts +1 -1
  790. package/dist/core/components/viewers/map/datasets/src/useFastDatasetCache.d.ts.map +1 -1
  791. package/dist/core/components/viewers/map/datasets/src/useFastDatasetCache.js.map +1 -1
  792. package/dist/core/components/viewers/map/datasets/utils.d.ts +1 -1
  793. package/dist/core/components/viewers/map/datasets/utils.d.ts.map +1 -1
  794. package/dist/core/components/viewers/map/datasets/utils.js.map +1 -1
  795. package/dist/core/components/viewers/map/legends/MapLegendHost.d.ts.map +1 -1
  796. package/dist/core/components/viewers/map/legends/MapLegendHost.js +3 -3
  797. package/dist/core/components/viewers/map/legends/MapLegendHost.js.map +1 -1
  798. package/dist/core/components/viewers/map/src/Geocoder.d.ts.map +1 -1
  799. package/dist/core/components/viewers/map/src/Geocoder.js +8 -8
  800. package/dist/core/components/viewers/map/src/Geocoder.js.map +1 -1
  801. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/index.d.ts +1 -1
  802. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/index.d.ts.map +1 -1
  803. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/index.js.map +1 -1
  804. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/index.d.ts +1 -1
  805. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/index.d.ts.map +1 -1
  806. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/index.js +3 -3
  807. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/index.js.map +1 -1
  808. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.d.ts +1 -1
  809. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.d.ts.map +1 -1
  810. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.js +11 -10
  811. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.js.map +1 -1
  812. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.d.ts.map +1 -1
  813. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js +23 -55
  814. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js.map +1 -1
  815. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/OpenDataFeaturePopover.d.ts.map +1 -1
  816. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/OpenDataFeaturePopover.js +4 -4
  817. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/OpenDataFeaturePopover.js.map +1 -1
  818. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/PopoverSkeleton.d.ts.map +1 -1
  819. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/PopoverSkeleton.js +2 -2
  820. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/PopoverSkeleton.js.map +1 -1
  821. package/dist/core/components/viewers/map/src/MapLayers/index.d.ts.map +1 -1
  822. package/dist/core/components/viewers/map/src/MapLayers/index.js +5 -5
  823. package/dist/core/components/viewers/map/src/MapLayers/index.js.map +1 -1
  824. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.d.ts.map +1 -1
  825. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js +5 -5
  826. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js.map +1 -1
  827. package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/index.d.ts.map +1 -1
  828. package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/index.js +4 -4
  829. package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/index.js.map +1 -1
  830. package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/src/databaseBuildings.d.ts +1 -1
  831. package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/src/databaseBuildings.d.ts.map +1 -1
  832. package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/src/databaseBuildings.js.map +1 -1
  833. package/dist/core/components/viewers/map/src/MapLayers/src/CommentLayer/index.d.ts.map +1 -1
  834. package/dist/core/components/viewers/map/src/MapLayers/src/CommentLayer/index.js +9 -9
  835. package/dist/core/components/viewers/map/src/MapLayers/src/CommentLayer/index.js.map +1 -1
  836. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.d.ts.map +1 -1
  837. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js +1 -1
  838. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js.map +1 -1
  839. package/dist/core/components/viewers/map/src/MapLayers/src/EditPosition.d.ts.map +1 -1
  840. package/dist/core/components/viewers/map/src/MapLayers/src/EditPosition.js +3 -3
  841. package/dist/core/components/viewers/map/src/MapLayers/src/EditPosition.js.map +1 -1
  842. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.d.ts +1 -1
  843. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.d.ts.map +1 -1
  844. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.js +1 -1
  845. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.js.map +1 -1
  846. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileIcon.d.ts.map +1 -1
  847. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileIcon.js.map +1 -1
  848. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.d.ts +1 -1
  849. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.d.ts.map +1 -1
  850. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.js +3 -3
  851. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.js.map +1 -1
  852. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.d.ts.map +1 -1
  853. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.js +2 -2
  854. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.js.map +1 -1
  855. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileMarker.d.ts.map +1 -1
  856. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileMarker.js.map +1 -1
  857. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/index.d.ts.map +1 -1
  858. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/index.js +6 -6
  859. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/index.js.map +1 -1
  860. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.d.ts +1 -1
  861. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.d.ts.map +1 -1
  862. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.js.map +1 -1
  863. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/openFileInPopUpWindow.d.ts +1 -1
  864. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/openFileInPopUpWindow.d.ts.map +1 -1
  865. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/openFileInPopUpWindow.js.map +1 -1
  866. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.d.ts.map +1 -1
  867. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.js.map +1 -1
  868. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.d.ts.map +1 -1
  869. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js +3 -3
  870. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js.map +1 -1
  871. package/dist/core/components/viewers/map/src/MapLayers/src/PlaceOnMap.d.ts.map +1 -1
  872. package/dist/core/components/viewers/map/src/MapLayers/src/PlaceOnMap.js +3 -3
  873. package/dist/core/components/viewers/map/src/MapLayers/src/PlaceOnMap.js.map +1 -1
  874. package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.d.ts.map +1 -1
  875. package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.js +11 -11
  876. package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.js.map +1 -1
  877. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.d.ts.map +1 -1
  878. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.js +2 -2
  879. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.js.map +1 -1
  880. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.d.ts.map +1 -1
  881. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.js +4 -4
  882. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.js.map +1 -1
  883. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/index.d.ts +1 -1
  884. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/index.d.ts.map +1 -1
  885. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/index.js.map +1 -1
  886. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/siteGeometry.d.ts.map +1 -1
  887. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/siteGeometry.js.map +1 -1
  888. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/useShowSitesOnMap.d.ts.map +1 -1
  889. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/useShowSitesOnMap.js.map +1 -1
  890. package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.d.ts +1 -1
  891. package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.d.ts.map +1 -1
  892. package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.js +1 -1
  893. package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.js.map +1 -1
  894. package/dist/core/components/viewers/map/src/MapSidebar/index.d.ts +1 -1
  895. package/dist/core/components/viewers/map/src/MapSidebar/index.d.ts.map +1 -1
  896. package/dist/core/components/viewers/map/src/MapSidebar/index.js +4 -4
  897. package/dist/core/components/viewers/map/src/MapSidebar/index.js.map +1 -1
  898. package/dist/core/components/viewers/map/src/MapSidebar/src/CommunicationTab/index.d.ts +1 -1
  899. package/dist/core/components/viewers/map/src/MapSidebar/src/CommunicationTab/index.d.ts.map +1 -1
  900. package/dist/core/components/viewers/map/src/MapSidebar/src/CommunicationTab/index.js.map +1 -1
  901. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/index.d.ts.map +1 -1
  902. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/index.js +2 -2
  903. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/index.js.map +1 -1
  904. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.d.ts +1 -1
  905. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  906. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.js +5 -5
  907. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  908. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
  909. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.js +5 -5
  910. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
  911. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.d.ts +1 -1
  912. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.d.ts.map +1 -1
  913. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.js +4 -4
  914. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.js.map +1 -1
  915. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AppliedDatasetsSection.d.ts.map +1 -1
  916. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AppliedDatasetsSection.js +4 -4
  917. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AppliedDatasetsSection.js.map +1 -1
  918. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AvailableDatasetsSection.d.ts.map +1 -1
  919. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AvailableDatasetsSection.js +2 -2
  920. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AvailableDatasetsSection.js.map +1 -1
  921. package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.d.ts +1 -1
  922. package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.d.ts.map +1 -1
  923. package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.js.map +1 -1
  924. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.d.ts.map +1 -1
  925. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.js.map +1 -1
  926. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.d.ts.map +1 -1
  927. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.js +3 -3
  928. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.js.map +1 -1
  929. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapCustomization.d.ts.map +1 -1
  930. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapCustomization.js +3 -3
  931. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapCustomization.js.map +1 -1
  932. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapProjection.d.ts.map +1 -1
  933. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapProjection.js +3 -3
  934. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapProjection.js.map +1 -1
  935. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.d.ts.map +1 -1
  936. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js +3 -3
  937. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js.map +1 -1
  938. package/dist/core/components/viewers/map/src/SimpleMap.d.ts.map +1 -1
  939. package/dist/core/components/viewers/map/src/SimpleMap.js +1 -1
  940. package/dist/core/components/viewers/map/src/SimpleMap.js.map +1 -1
  941. package/dist/core/components/viewers/map/src/compare/AddItem.d.ts +1 -1
  942. package/dist/core/components/viewers/map/src/compare/AddItem.d.ts.map +1 -1
  943. package/dist/core/components/viewers/map/src/compare/AddItem.js +6 -6
  944. package/dist/core/components/viewers/map/src/compare/AddItem.js.map +1 -1
  945. package/dist/core/components/viewers/map/src/compare/CompareDialog.d.ts +2 -2
  946. package/dist/core/components/viewers/map/src/compare/CompareDialog.d.ts.map +1 -1
  947. package/dist/core/components/viewers/map/src/compare/CompareDialog.js +5 -5
  948. package/dist/core/components/viewers/map/src/compare/CompareDialog.js.map +1 -1
  949. package/dist/core/components/viewers/map/src/compare/index.d.ts +1 -1
  950. package/dist/core/components/viewers/map/src/compare/index.d.ts.map +1 -1
  951. package/dist/core/components/viewers/map/src/compare/index.js +6 -6
  952. package/dist/core/components/viewers/map/src/compare/index.js.map +1 -1
  953. package/dist/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.d.ts.map +1 -1
  954. package/dist/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.js +3 -3
  955. package/dist/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.js.map +1 -1
  956. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/FileAdder.d.ts.map +1 -1
  957. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/FileAdder.js +5 -5
  958. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/FileAdder.js.map +1 -1
  959. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.d.ts.map +1 -1
  960. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.js +3 -3
  961. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.js.map +1 -1
  962. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.d.ts.map +1 -1
  963. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.js +7 -7
  964. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.js.map +1 -1
  965. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/persistSite.d.ts.map +1 -1
  966. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/persistSite.js +1 -1
  967. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/persistSite.js.map +1 -1
  968. package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.d.ts +2 -2
  969. package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.d.ts.map +1 -1
  970. package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.js +8 -8
  971. package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.js.map +1 -1
  972. package/dist/core/components/viewers/map/src/tools/DatasetMapTool.d.ts +2 -2
  973. package/dist/core/components/viewers/map/src/tools/DatasetMapTool.d.ts.map +1 -1
  974. package/dist/core/components/viewers/map/src/tools/DatasetMapTool.js +1 -1
  975. package/dist/core/components/viewers/map/src/tools/DatasetMapTool.js.map +1 -1
  976. package/dist/core/components/viewers/map/src/tools/mapTools.d.ts +2 -2
  977. package/dist/core/components/viewers/map/src/tools/mapTools.d.ts.map +1 -1
  978. package/dist/core/components/viewers/map/src/tools/mapTools.js +4 -4
  979. package/dist/core/components/viewers/map/src/tools/mapTools.js.map +1 -1
  980. package/dist/core/components/viewers/map/src/tools/measureMapTool.d.ts +1 -1
  981. package/dist/core/components/viewers/map/src/tools/measureMapTool.d.ts.map +1 -1
  982. package/dist/core/components/viewers/map/src/tools/measureMapTool.js +3 -3
  983. package/dist/core/components/viewers/map/src/tools/measureMapTool.js.map +1 -1
  984. package/dist/core/components/viewers/map/src/tools/shareMapTool.d.ts +1 -1
  985. package/dist/core/components/viewers/map/src/tools/shareMapTool.d.ts.map +1 -1
  986. package/dist/core/components/viewers/map/src/tools/shareMapTool.js.map +1 -1
  987. package/dist/core/components/viewers/map/utils/ClusterManager.d.ts +1 -1
  988. package/dist/core/components/viewers/map/utils/ClusterManager.d.ts.map +1 -1
  989. package/dist/core/components/viewers/map/utils/ClusterManager.js.map +1 -1
  990. package/dist/core/components/viewers/map/utils/MarkerManager.d.ts +1 -1
  991. package/dist/core/components/viewers/map/utils/MarkerManager.d.ts.map +1 -1
  992. package/dist/core/components/viewers/map/utils/MarkerManager.js.map +1 -1
  993. package/dist/core/components/viewers/map/utils/extractCoordinates.js.map +1 -1
  994. package/dist/core/components/viewers/map/utils/fitBuildingsBounds.d.ts +1 -1
  995. package/dist/core/components/viewers/map/utils/fitBuildingsBounds.d.ts.map +1 -1
  996. package/dist/core/components/viewers/map/utils/fitBuildingsBounds.js.map +1 -1
  997. package/dist/core/components/viewers/map/utils/flyToEach.d.ts +1 -1
  998. package/dist/core/components/viewers/map/utils/flyToEach.d.ts.map +1 -1
  999. package/dist/core/components/viewers/map/utils/flyToEach.js.map +1 -1
  1000. package/dist/core/components/viewers/map/utils/geocoder.d.ts +1 -1
  1001. package/dist/core/components/viewers/map/utils/geocoder.d.ts.map +1 -1
  1002. package/dist/core/components/viewers/map/utils/geocoder.js +1 -1
  1003. package/dist/core/components/viewers/map/utils/geocoder.js.map +1 -1
  1004. package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts +1 -1
  1005. package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts.map +1 -1
  1006. package/dist/core/components/viewers/map/utils/geocoding/adapters.js.map +1 -1
  1007. package/dist/core/components/viewers/map/utils/geocoding/index.d.ts +1 -1
  1008. package/dist/core/components/viewers/map/utils/geocoding/index.d.ts.map +1 -1
  1009. package/dist/core/components/viewers/map/utils/geocoding/index.js +1 -1
  1010. package/dist/core/components/viewers/map/utils/geocoding/index.js.map +1 -1
  1011. package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts +1 -1
  1012. package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts.map +1 -1
  1013. package/dist/core/components/viewers/map/utils/geocoding/osm.js +1 -1
  1014. package/dist/core/components/viewers/map/utils/geocoding/osm.js.map +1 -1
  1015. package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts +1 -1
  1016. package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts.map +1 -1
  1017. package/dist/core/components/viewers/map/utils/geocoding/pelias.js.map +1 -1
  1018. package/dist/core/components/viewers/map/utils/getOsmIdFromMartin.d.ts +1 -1
  1019. package/dist/core/components/viewers/map/utils/getOsmIdFromMartin.d.ts.map +1 -1
  1020. package/dist/core/components/viewers/map/utils/getOsmIdFromMartin.js.map +1 -1
  1021. package/dist/core/components/viewers/pointcloud/PointCloudToolbar.d.ts.map +1 -1
  1022. package/dist/core/components/viewers/pointcloud/PointCloudToolbar.js +1 -1
  1023. package/dist/core/components/viewers/pointcloud/PointCloudToolbar.js.map +1 -1
  1024. package/dist/core/components/viewers/pointcloud/PointCloudViewer.d.ts.map +1 -1
  1025. package/dist/core/components/viewers/pointcloud/PointCloudViewer.js +5 -5
  1026. package/dist/core/components/viewers/pointcloud/PointCloudViewer.js.map +1 -1
  1027. package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.d.ts.map +1 -1
  1028. package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.js +7 -7
  1029. package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.js.map +1 -1
  1030. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.d.ts.map +1 -1
  1031. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.js.map +1 -1
  1032. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.d.ts.map +1 -1
  1033. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.js +15 -15
  1034. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.js.map +1 -1
  1035. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.d.ts.map +1 -1
  1036. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.js +3 -3
  1037. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.js.map +1 -1
  1038. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/TabSelector.d.ts +1 -1
  1039. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/TabSelector.d.ts.map +1 -1
  1040. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/TabSelector.js +1 -1
  1041. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/TabSelector.js.map +1 -1
  1042. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.d.ts.map +1 -1
  1043. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.js +2 -2
  1044. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.js.map +1 -1
  1045. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.d.ts.map +1 -1
  1046. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js +3 -3
  1047. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js.map +1 -1
  1048. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.d.ts +1 -1
  1049. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  1050. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js +4 -4
  1051. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  1052. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.d.ts +1 -1
  1053. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.d.ts.map +1 -1
  1054. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.js +5 -5
  1055. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.js.map +1 -1
  1056. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/index.d.ts.map +1 -1
  1057. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/index.js +1 -1
  1058. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/index.js.map +1 -1
  1059. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/CameraSettings.d.ts.map +1 -1
  1060. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/CameraSettings.js +3 -3
  1061. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/CameraSettings.js.map +1 -1
  1062. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/GridManagement.d.ts.map +1 -1
  1063. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/GridManagement.js +4 -4
  1064. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/GridManagement.js.map +1 -1
  1065. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/PerformanceSettings.d.ts.map +1 -1
  1066. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/PerformanceSettings.js +10 -10
  1067. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/PerformanceSettings.js.map +1 -1
  1068. package/dist/core/components/viewers/pointcloud/src/ViewportGizmo.js.map +1 -1
  1069. package/dist/core/components/viewers/pointcloud/src/tools/ClippingTools/ClippingTool.d.ts +1 -1
  1070. package/dist/core/components/viewers/pointcloud/src/tools/ClippingTools/ClippingTool.d.ts.map +1 -1
  1071. package/dist/core/components/viewers/pointcloud/src/tools/ClippingTools/ClippingTool.js +3 -3
  1072. package/dist/core/components/viewers/pointcloud/src/tools/ClippingTools/ClippingTool.js.map +1 -1
  1073. package/dist/core/components/viewers/pointcloud/src/tools/FitToScreen.d.ts.map +1 -1
  1074. package/dist/core/components/viewers/pointcloud/src/tools/FitToScreen.js.map +1 -1
  1075. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AngleMeasurement.d.ts.map +1 -1
  1076. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AngleMeasurement.js.map +1 -1
  1077. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AreaMeasurement.d.ts.map +1 -1
  1078. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AreaMeasurement.js.map +1 -1
  1079. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/LineMeasurement.d.ts.map +1 -1
  1080. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/LineMeasurement.js.map +1 -1
  1081. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/MeasurePointCloudTool.d.ts +1 -1
  1082. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/MeasurePointCloudTool.d.ts.map +1 -1
  1083. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/MeasurePointCloudTool.js +6 -6
  1084. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/MeasurePointCloudTool.js.map +1 -1
  1085. package/dist/core/components/viewers/pointcloud/src/tools/PCSearchTool.d.ts.map +1 -1
  1086. package/dist/core/components/viewers/pointcloud/src/tools/PCSearchTool.js +2 -2
  1087. package/dist/core/components/viewers/pointcloud/src/tools/PCSearchTool.js.map +1 -1
  1088. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.d.ts.map +1 -1
  1089. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js +2 -2
  1090. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js.map +1 -1
  1091. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PerformanceSettingTools.d.ts.map +1 -1
  1092. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PerformanceSettingTools.js +3 -3
  1093. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PerformanceSettingTools.js.map +1 -1
  1094. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PointBudgetTool.d.ts.map +1 -1
  1095. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PointBudgetTool.js +1 -1
  1096. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PointBudgetTool.js.map +1 -1
  1097. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/ShowOctreeBoxTool.d.ts.map +1 -1
  1098. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/ShowOctreeBoxTool.js +1 -1
  1099. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/ShowOctreeBoxTool.js.map +1 -1
  1100. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/SplatQualitySelection.d.ts.map +1 -1
  1101. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/SplatQualitySelection.js +1 -1
  1102. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/SplatQualitySelection.js.map +1 -1
  1103. package/dist/core/components/viewers/pointcloud/src/tools/SetCameraOption.d.ts.map +1 -1
  1104. package/dist/core/components/viewers/pointcloud/src/tools/SetCameraOption.js +4 -4
  1105. package/dist/core/components/viewers/pointcloud/src/tools/SetCameraOption.js.map +1 -1
  1106. package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/index.d.ts +1 -1
  1107. package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/index.d.ts.map +1 -1
  1108. package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/index.js +1 -1
  1109. package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/index.js.map +1 -1
  1110. package/dist/core/components/viewers/pointcloud/src/tools/pointcloudToolbarTools.d.ts +1 -1
  1111. package/dist/core/components/viewers/pointcloud/src/tools/pointcloudToolbarTools.d.ts.map +1 -1
  1112. package/dist/core/components/viewers/pointcloud/src/tools/pointcloudToolbarTools.js +2 -2
  1113. package/dist/core/components/viewers/pointcloud/src/tools/pointcloudToolbarTools.js.map +1 -1
  1114. package/dist/core/components/viewers/pointcloud/utils/restoreCameraFromUrl.d.ts +1 -1
  1115. package/dist/core/components/viewers/pointcloud/utils/restoreCameraFromUrl.d.ts.map +1 -1
  1116. package/dist/core/components/viewers/pointcloud/utils/restoreCameraFromUrl.js.map +1 -1
  1117. package/dist/core/hooks/buildings/createBuildingHooks.d.ts +1 -1
  1118. package/dist/core/hooks/buildings/createBuildingHooks.d.ts.map +1 -1
  1119. package/dist/core/hooks/buildings/createBuildingHooks.js.map +1 -1
  1120. package/dist/core/hooks/comments/createCommentHooks.d.ts +1 -1
  1121. package/dist/core/hooks/comments/createCommentHooks.d.ts.map +1 -1
  1122. package/dist/core/hooks/comments/createCommentHooks.js +1 -1
  1123. package/dist/core/hooks/comments/createCommentHooks.js.map +1 -1
  1124. package/dist/core/hooks/files/createFileHooks.d.ts +1 -1
  1125. package/dist/core/hooks/files/createFileHooks.d.ts.map +1 -1
  1126. package/dist/core/hooks/files/createFileHooks.js.map +1 -1
  1127. package/dist/core/hooks/files/files.d.ts.map +1 -1
  1128. package/dist/core/hooks/files/files.js +1 -1
  1129. package/dist/core/hooks/files/files.js.map +1 -1
  1130. package/dist/core/hooks/infrastructures/createInfrastructureHooks.d.ts +1 -1
  1131. package/dist/core/hooks/infrastructures/createInfrastructureHooks.d.ts.map +1 -1
  1132. package/dist/core/hooks/infrastructures/createInfrastructureHooks.js.map +1 -1
  1133. package/dist/core/hooks/openDataPortals/createOpenDataPortalHooks.d.ts +1 -1
  1134. package/dist/core/hooks/openDataPortals/createOpenDataPortalHooks.d.ts.map +1 -1
  1135. package/dist/core/hooks/openDataPortals/createOpenDataPortalHooks.js.map +1 -1
  1136. package/dist/core/hooks/organizations/createOrganizationHooks.d.ts +1 -1
  1137. package/dist/core/hooks/organizations/createOrganizationHooks.d.ts.map +1 -1
  1138. package/dist/core/hooks/organizations/createOrganizationHooks.js.map +1 -1
  1139. package/dist/core/hooks/provider.d.ts +5 -5
  1140. package/dist/core/hooks/provider.d.ts.map +1 -1
  1141. package/dist/core/hooks/provider.js +4 -4
  1142. package/dist/core/hooks/provider.js.map +1 -1
  1143. package/dist/core/hooks/sensorTypes/createSensorTypeHooks.d.ts +1 -1
  1144. package/dist/core/hooks/sensorTypes/createSensorTypeHooks.d.ts.map +1 -1
  1145. package/dist/core/hooks/sensorTypes/createSensorTypeHooks.js.map +1 -1
  1146. package/dist/core/hooks/sensors/createSensorHooks.d.ts +1 -1
  1147. package/dist/core/hooks/sensors/createSensorHooks.d.ts.map +1 -1
  1148. package/dist/core/hooks/sensors/createSensorHooks.js +1 -1
  1149. package/dist/core/hooks/sensors/createSensorHooks.js.map +1 -1
  1150. package/dist/core/hooks/sites/createSiteHooks.d.ts +1 -1
  1151. package/dist/core/hooks/sites/createSiteHooks.d.ts.map +1 -1
  1152. package/dist/core/hooks/sites/createSiteHooks.js.map +1 -1
  1153. package/dist/core/hooks/sites/sites.d.ts.map +1 -1
  1154. package/dist/core/hooks/useCaptureScreenshot.d.ts.map +1 -1
  1155. package/dist/core/hooks/useCaptureScreenshot.js.map +1 -1
  1156. package/dist/core/hooks/useCurrentViewerPosition.d.ts.map +1 -1
  1157. package/dist/core/hooks/useCurrentViewerPosition.js +1 -1
  1158. package/dist/core/hooks/useCurrentViewerPosition.js.map +1 -1
  1159. package/dist/core/hooks/useGeocodingRuntimeConfig.d.ts +1 -1
  1160. package/dist/core/hooks/useGeocodingRuntimeConfig.d.ts.map +1 -1
  1161. package/dist/core/hooks/useGeocodingRuntimeConfig.js.map +1 -1
  1162. package/dist/core/hooks/useShareUrl.d.ts.map +1 -1
  1163. package/dist/core/hooks/useShareUrl.js +1 -1
  1164. package/dist/core/hooks/useShareUrl.js.map +1 -1
  1165. package/dist/core/hooks/users/createUserHooks.d.ts +1 -1
  1166. package/dist/core/hooks/users/createUserHooks.d.ts.map +1 -1
  1167. package/dist/core/hooks/users/createUserHooks.js.map +1 -1
  1168. package/dist/core/i18n/index.js +1 -1
  1169. package/dist/core/i18n/index.js.map +1 -1
  1170. package/dist/core/i18n/messages/en.json +1872 -1872
  1171. package/dist/core/i18n/messages/es.json +1870 -1870
  1172. package/dist/core/i18n/messages/fr.json +1870 -1870
  1173. package/dist/core/plugins/host/context.d.ts +1 -1
  1174. package/dist/core/plugins/host/context.d.ts.map +1 -1
  1175. package/dist/core/plugins/host/context.js.map +1 -1
  1176. package/dist/core/plugins/host/host.d.ts +1 -1
  1177. package/dist/core/plugins/host/host.d.ts.map +1 -1
  1178. package/dist/core/plugins/host/host.js.map +1 -1
  1179. package/dist/core/plugins/host/provider.d.ts.map +1 -1
  1180. package/dist/core/plugins/host/provider.js +2 -2
  1181. package/dist/core/plugins/host/provider.js.map +1 -1
  1182. package/dist/core/store/AppConfig/context.d.ts +1 -1
  1183. package/dist/core/store/AppConfig/context.d.ts.map +1 -1
  1184. package/dist/core/store/AppConfig/context.js.map +1 -1
  1185. package/dist/core/store/AppConfig/reducer.d.ts +2 -2
  1186. package/dist/core/store/AppConfig/reducer.d.ts.map +1 -1
  1187. package/dist/core/store/AppConfig/reducer.js.map +1 -1
  1188. package/dist/core/store/BIM/context.d.ts +1 -1
  1189. package/dist/core/store/BIM/context.d.ts.map +1 -1
  1190. package/dist/core/store/BIM/context.js.map +1 -1
  1191. package/dist/core/store/BIM/reducer.d.ts +3 -3
  1192. package/dist/core/store/BIM/reducer.d.ts.map +1 -1
  1193. package/dist/core/store/BIM/reducer.js.map +1 -1
  1194. package/dist/core/store/Buildings/context.d.ts +1 -1
  1195. package/dist/core/store/Buildings/context.d.ts.map +1 -1
  1196. package/dist/core/store/Buildings/context.js.map +1 -1
  1197. package/dist/core/store/Buildings/reducer.d.ts +2 -2
  1198. package/dist/core/store/Buildings/reducer.d.ts.map +1 -1
  1199. package/dist/core/store/Buildings/reducer.js.map +1 -1
  1200. package/dist/core/store/CombineProviders.d.ts.map +1 -1
  1201. package/dist/core/store/CombineProviders.js +7 -7
  1202. package/dist/core/store/CombineProviders.js.map +1 -1
  1203. package/dist/core/store/Content/context.d.ts +1 -1
  1204. package/dist/core/store/Content/context.d.ts.map +1 -1
  1205. package/dist/core/store/Content/context.js.map +1 -1
  1206. package/dist/core/store/Datasets/context.d.ts +1 -1
  1207. package/dist/core/store/Datasets/context.d.ts.map +1 -1
  1208. package/dist/core/store/Datasets/context.js.map +1 -1
  1209. package/dist/core/store/Datasets/reducer.d.ts +1 -1
  1210. package/dist/core/store/Datasets/reducer.d.ts.map +1 -1
  1211. package/dist/core/store/Datasets/reducer.js.map +1 -1
  1212. package/dist/core/store/Files/context.d.ts +1 -1
  1213. package/dist/core/store/Files/context.d.ts.map +1 -1
  1214. package/dist/core/store/Files/context.js.map +1 -1
  1215. package/dist/core/store/Files/reducer.d.ts +3 -3
  1216. package/dist/core/store/Files/reducer.d.ts.map +1 -1
  1217. package/dist/core/store/Files/reducer.js.map +1 -1
  1218. package/dist/core/store/Map/context.d.ts +1 -1
  1219. package/dist/core/store/Map/context.d.ts.map +1 -1
  1220. package/dist/core/store/Map/context.js +1 -1
  1221. package/dist/core/store/Map/context.js.map +1 -1
  1222. package/dist/core/store/Map/reducer.d.ts +6 -5
  1223. package/dist/core/store/Map/reducer.d.ts.map +1 -1
  1224. package/dist/core/store/Map/reducer.js.map +1 -1
  1225. package/dist/core/store/MapSites/context.d.ts +1 -1
  1226. package/dist/core/store/MapSites/context.d.ts.map +1 -1
  1227. package/dist/core/store/MapSites/context.js.map +1 -1
  1228. package/dist/core/store/MapSites/reducer.d.ts +1 -1
  1229. package/dist/core/store/MapSites/reducer.d.ts.map +1 -1
  1230. package/dist/core/store/MapSites/reducer.js.map +1 -1
  1231. package/dist/core/store/Menus/context.d.ts +1 -1
  1232. package/dist/core/store/Menus/context.d.ts.map +1 -1
  1233. package/dist/core/store/Menus/context.js +2 -2
  1234. package/dist/core/store/Menus/context.js.map +1 -1
  1235. package/dist/core/store/Menus/reducer.d.ts +1 -1
  1236. package/dist/core/store/Menus/reducer.d.ts.map +1 -1
  1237. package/dist/core/store/Menus/reducer.js.map +1 -1
  1238. package/dist/core/store/Permissions/context.d.ts +1 -1
  1239. package/dist/core/store/Permissions/context.d.ts.map +1 -1
  1240. package/dist/core/store/Permissions/context.js +2 -2
  1241. package/dist/core/store/Permissions/context.js.map +1 -1
  1242. package/dist/core/store/PointCloud/context.d.ts +1 -1
  1243. package/dist/core/store/PointCloud/context.d.ts.map +1 -1
  1244. package/dist/core/store/PointCloud/context.js.map +1 -1
  1245. package/dist/core/store/PointCloud/reducer.d.ts +1 -1
  1246. package/dist/core/store/PointCloud/reducer.d.ts.map +1 -1
  1247. package/dist/core/store/PointCloud/reducer.js.map +1 -1
  1248. package/dist/core/store/Tools/context.d.ts +1 -1
  1249. package/dist/core/store/Tools/context.d.ts.map +1 -1
  1250. package/dist/core/store/Tools/context.js.map +1 -1
  1251. package/dist/core/store/Tools/reducer.d.ts +1 -1
  1252. package/dist/core/store/Tools/reducer.d.ts.map +1 -1
  1253. package/dist/core/store/Tools/reducer.js.map +1 -1
  1254. package/dist/core/styles/globals.css +17 -16
  1255. package/dist/core/styles/tailwindMerge.d.ts +1 -1
  1256. package/dist/core/styles/tailwindMerge.d.ts.map +1 -1
  1257. package/dist/core/styles/tailwindMerge.js.map +1 -1
  1258. package/dist/core/types/datasetTypes.d.ts +2 -2
  1259. package/dist/core/types/datasetTypes.d.ts.map +1 -1
  1260. package/dist/core/types/dbTypes.d.ts +1 -1
  1261. package/dist/core/types/dbTypes.d.ts.map +1 -1
  1262. package/dist/core/types/dbTypes.js.map +1 -1
  1263. package/dist/core/types/files.d.ts +2 -2
  1264. package/dist/core/types/files.d.ts.map +1 -1
  1265. package/dist/core/types/global.d.ts +3 -3
  1266. package/dist/core/types/global.d.ts.map +1 -1
  1267. package/dist/core/types/global.js.map +1 -1
  1268. package/dist/core/types/map.d.ts +2 -2
  1269. package/dist/core/types/map.d.ts.map +1 -1
  1270. package/dist/core/types/tools.d.ts +3 -3
  1271. package/dist/core/types/tools.d.ts.map +1 -1
  1272. package/dist/core/types/users.d.ts +2 -2
  1273. package/dist/core/types/users.d.ts.map +1 -1
  1274. package/dist/core/utils/getFileIcon.d.ts +1 -1
  1275. package/dist/core/utils/getFileIcon.d.ts.map +1 -1
  1276. package/dist/core/utils/getFileIcon.js.map +1 -1
  1277. package/dist/core/utils/memcache.js.map +1 -1
  1278. package/dist/core/utils/roles.d.ts.map +1 -1
  1279. package/dist/core/utils/roles.js.map +1 -1
  1280. package/dist/core/utils/timeUtils.js.map +1 -1
  1281. package/dist/core/utils/utils.d.ts +1 -1
  1282. package/dist/core/utils/utils.d.ts.map +1 -1
  1283. package/dist/core/utils/utils.js.map +1 -1
  1284. package/package.json +5 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/drawingProjection.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as OBC from '@thatopen/components'\r\nimport * as OBF from '@thatopen/components-front'\r\nimport * as THREE from 'three'\r\nimport { CurrentWorld } from '../CurrentWorld'\r\nimport {\r\n defaultLayerColor,\r\n DrawingLayerInfo,\r\n sortClassesByPriority,\r\n} from './drawingLayers'\r\n\r\nexport const FONT_URL =\r\n 'https://thatopen.github.io/engine_components/resources/fonts/PlusJakartaSans-Medium.ttf'\r\n\r\nexport const VISIBLE_LAYER = 'Visible'\r\nexport const HIDDEN_LAYER = 'Hidden'\r\nexport const ANNOTATIONS_LAYER = 'Annotations'\r\n\r\nexport interface DrawingViewportConfig {\r\n left: number\r\n right: number\r\n top: number\r\n bottom: number\r\n scale?: number\r\n name?: string\r\n}\r\n\r\nexport interface DrawingConfig {\r\n /** Direction the drawing's \"camera\" looks. Top-down floorplan: (0,-1,0).\r\n * North elevation: (0,0,-1). Etc. */\r\n orientation: THREE.Vector3\r\n /** World position of the drawing plane. */\r\n position: THREE.Vector3\r\n /** Depth captured from the plane along the orientation. */\r\n far: number\r\n viewport: DrawingViewportConfig\r\n}\r\n\r\n/**\r\n * Lazy, idempotent setup of `OBF.DrawingEditor` (font + source world).\r\n * Call before any drawing-projection work.\r\n */\r\nexport class DrawingEditorReady {\r\n private _fontLoaded = false\r\n private _editorSourceSet = false\r\n\r\n constructor(private components: OBC.Components) {}\r\n\r\n async ensure() {\r\n const editor = this.components.get(OBF.DrawingEditor)\r\n\r\n if (!this._fontLoaded) {\r\n try {\r\n await editor.fonts.load(FONT_URL)\r\n } catch (error) {\r\n console.warn('[drawingProjection] Font load failed:', error)\r\n }\r\n this._fontLoaded = true\r\n }\r\n\r\n if (!this._editorSourceSet) {\r\n const sourceWorld = this.components.get(CurrentWorld).world\r\n if (sourceWorld) {\r\n editor.setSource(sourceWorld)\r\n this._editorSourceSet = true\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** Create a new TechnicalDrawing pre-configured with the standard\r\n * visible/hidden/annotations layers + viewport. Caller still needs to\r\n * add projection items (`addProjectionFromItems`). */\r\nexport function createDrawing(\r\n components: OBC.Components,\r\n config: DrawingConfig,\r\n): OBC.TechnicalDrawing | null {\r\n const sourceWorld = components.get(CurrentWorld).world\r\n if (!sourceWorld) return null\r\n\r\n const techDrawings = components.get(OBC.TechnicalDrawings)\r\n const drawing = techDrawings.create(sourceWorld)\r\n drawing.orientTo(config.orientation.clone())\r\n drawing.three.position.copy(config.position)\r\n drawing.three.visible = false\r\n drawing.far = config.far\r\n\r\n drawing.layers.create(VISIBLE_LAYER, {\r\n material: new THREE.LineBasicMaterial({ color: 0x000000 }),\r\n })\r\n drawing.layers.create(HIDDEN_LAYER, {\r\n material: new THREE.LineDashedMaterial({\r\n color: 0x888888,\r\n dashSize: 0.2,\r\n gapSize: 0.1,\r\n }),\r\n visible: false,\r\n } as any)\r\n drawing.layers.create(ANNOTATIONS_LAYER, {\r\n material: new THREE.LineBasicMaterial({ color: 0x000000 }),\r\n })\r\n drawing.activeLayer = ANNOTATIONS_LAYER\r\n\r\n drawing.viewports.create({\r\n left: config.viewport.left,\r\n right: config.viewport.right,\r\n top: config.viewport.top,\r\n bottom: config.viewport.bottom,\r\n scale: config.viewport.scale ?? 100,\r\n name: config.viewport.name ?? 'Drawing',\r\n })\r\n\r\n return drawing\r\n}\r\n\r\n/** Force ProjectionGenerator off the WebGPU path (it silently returns 0\r\n * edges when WebGPU is unavailable in the browser, which @thatopen\r\n * components 3.4 hits). Idempotent. */\r\nexport function disableProjectorWebGPU(components: OBC.Components) {\r\n const projector = components.get(OBC.EdgeProjector)\r\n ;(projector as any).generator.useWebGPU = false\r\n}\r\n\r\n/** Patch a model's `getItemsGeometry` to give every entry a unique\r\n * representationId. EdgeProjector at index.mjs:11228 uses\r\n * `!geomData.representationId` to validate, so id=0 is incorrectly\r\n * skipped — and the fragments worker for our models returns 0 for every\r\n * entry. Idempotent per model via a flag on the model itself. */\r\nexport function patchModelGeometryRepresentationIds(model: any) {\r\n if (model._floorplanGeometryPatched) return\r\n const original = model.getItemsGeometry.bind(model)\r\n let counter = 1\r\n model.getItemsGeometry = async (ids: number[]) => {\r\n const data = await original(ids)\r\n if (data && typeof data === 'object') {\r\n const arrays = Array.isArray(data) ? data : Object.values(data)\r\n for (const arr of arrays) {\r\n if (!Array.isArray(arr)) continue\r\n for (const g of arr) {\r\n if (\r\n g &&\r\n (g.representationId === 0 ||\r\n g.representationId == null ||\r\n g.representationId === '')\r\n ) {\r\n g.representationId = `cdt-rep-${counter++}`\r\n }\r\n }\r\n }\r\n }\r\n return data\r\n }\r\n model._floorplanGeometryPatched = true\r\n}\r\n\r\n/** Add the projection lines for the given item ids to a drawing. Lays\r\n * them into the standard visible/hidden layers. */\r\nexport async function addItemsProjection(\r\n drawing: OBC.TechnicalDrawing,\r\n modelId: string,\r\n itemIds: number[],\r\n): Promise<void> {\r\n if (itemIds.length === 0) return\r\n const modelIdMap: OBC.ModelIdMap = { [modelId]: new Set(itemIds) }\r\n await drawing.addProjectionFromItems(modelIdMap, {\r\n layers: { visible: VISIBLE_LAYER, hidden: HIDDEN_LAYER },\r\n })\r\n}\r\n\r\n/**\r\n * Project items grouped by IFC class into per-class drawing layers. Each\r\n * class gets its own visible layer with a default color (cut classes black,\r\n * everything else mid-gray); the hidden side of every class shares the\r\n * standard `HIDDEN_LAYER`.\r\n *\r\n * Returns metadata used by the sidebar UI (visibility toggles + color\r\n * pickers) and the future DXF export. Skipping classes whose projection\r\n * fails — one broken class shouldn't strand the rest of the drawing.\r\n */\r\nexport async function addItemsProjectionByClass(\r\n drawing: OBC.TechnicalDrawing,\r\n modelId: string,\r\n itemIdsByClass: Map<string, number[]>,\r\n onClassDone?: (className: string) => void,\r\n): Promise<DrawingLayerInfo[]> {\r\n const layers: DrawingLayerInfo[] = []\r\n for (const [className, ids] of itemIdsByClass) {\r\n if (ids.length === 0) continue\r\n const color = defaultLayerColor(className)\r\n if (!drawing.layers.has(className)) {\r\n drawing.layers.create(className, {\r\n material: new THREE.LineBasicMaterial({ color }),\r\n })\r\n }\r\n const modelIdMap: OBC.ModelIdMap = { [modelId]: new Set(ids) }\r\n try {\r\n await drawing.addProjectionFromItems(modelIdMap, {\r\n layers: { visible: className, hidden: HIDDEN_LAYER },\r\n })\r\n } catch (error) {\r\n console.warn(\r\n `[drawingProjection] projection for ${className} failed:`,\r\n error,\r\n )\r\n continue\r\n }\r\n layers.push({\r\n className,\r\n layerName: className,\r\n visible: true,\r\n color,\r\n itemCount: ids.length,\r\n })\r\n onClassDone?.(className)\r\n }\r\n return layers\r\n}\r\n\r\n/**\r\n * Group a model's geometric item ids by IFC class. Optional `idFilter`\r\n * narrows the result to a specific subset (e.g. items in a single storey).\r\n */\r\nexport async function getItemIdsByClass(\r\n model: any,\r\n idFilter?: Set<number>,\r\n): Promise<Map<string, number[]>> {\r\n const all = (await model.getItemsOfCategories([/^IFC/])) as Record<\r\n string,\r\n number[]\r\n >\r\n const result = new Map<string, number[]>()\r\n for (const [className, ids] of Object.entries(all)) {\r\n const filtered = idFilter ? ids.filter((id) => idFilter.has(id)) : ids\r\n if (filtered.length > 0) result.set(className, filtered)\r\n }\r\n // Walls, columns, slabs, curtain-walls render first so they appear early\r\n // during progressive projection; everything else follows.\r\n return sortClassesByPriority(result)\r\n}\r\n\r\n/**\r\n * Project items into per-IFC-class drawing layers using a SINGLE\r\n * EdgeProjector pass. The visibility culler then sees the union of all\r\n * meshes and classifies each edge against the full scene — so a wall in\r\n * front of a chair correctly hides the chair's edges, even though they\r\n * end up on different layers.\r\n *\r\n * Use this for elevation drawings, where the entire building depth is\r\n * visible. {@link addItemsProjectionByClass} stays appropriate for\r\n * floorplans, where the section clip already limits depth and the per-\r\n * class path is faster.\r\n *\r\n * Hidden edges are intentionally discarded — the elevation should only\r\n * show the lines of objects immediately visible to the camera.\r\n */\r\nexport async function addItemsProjectionByClassOccluded(\r\n drawing: OBC.TechnicalDrawing,\r\n components: OBC.Components,\r\n modelId: string,\r\n itemIdsByClass: Map<string, number[]>,\r\n): Promise<DrawingLayerInfo[]> {\r\n const world = components.get(CurrentWorld).world\r\n if (!world) return []\r\n\r\n // Build flat id set + reverse map (localId → className) so we can bin the\r\n // resulting line segments by their source class.\r\n const allIds = new Set<number>()\r\n const idToClass = new Map<number, string>()\r\n for (const [className, ids] of itemIdsByClass) {\r\n for (const id of ids) {\r\n allIds.add(id)\r\n idToClass.set(id, className)\r\n }\r\n }\r\n if (allIds.size === 0) return []\r\n\r\n const projector = components.get(OBC.EdgeProjector)\r\n ;(projector as any).generator.useWebGPU = false\r\n\r\n // Mirror the projection-direction + near/far plane setup that\r\n // `TechnicalDrawing.addProjectionFromItems` uses internally — see\r\n // node_modules/@thatopen/components/dist/index.mjs::addProjectionFromItems.\r\n const savedDir = projector.projectionDirection.clone()\r\n const savedNear = projector.nearPlane\r\n const savedFar = projector.farPlane\r\n let result: OBC.EdgeProjectionResult\r\n try {\r\n drawing.three.updateWorldMatrix(true, false)\r\n const projDir = new THREE.Vector3(0, -1, 0)\r\n .transformDirection(drawing.three.matrixWorld)\r\n .normalize()\r\n projector.projectionDirection.copy(projDir)\r\n const rotMat = new THREE.Matrix4().makeRotationFromQuaternion(\r\n new THREE.Quaternion().setFromUnitVectors(\r\n projDir,\r\n new THREE.Vector3(0, -1, 0),\r\n ),\r\n )\r\n const planeY = new THREE.Vector3()\r\n .setFromMatrixPosition(drawing.three.matrixWorld)\r\n .applyMatrix4(rotMat).y\r\n projector.farPlane = planeY\r\n projector.nearPlane = planeY - drawing.far\r\n\r\n const modelIdMap: OBC.ModelIdMap = { [modelId]: allIds }\r\n result = await projector.get(modelIdMap, world)\r\n } finally {\r\n projector.projectionDirection.copy(savedDir)\r\n projector.nearPlane = savedNear\r\n projector.farPlane = savedFar\r\n }\r\n\r\n // Pre-create empty layers so the panel UI lists every class even if its\r\n // edges all ended up occluded (count = 0 for hidden classes).\r\n for (const className of itemIdsByClass.keys()) {\r\n if (!drawing.layers.has(className)) {\r\n drawing.layers.create(className, {\r\n material: new THREE.LineBasicMaterial({\r\n color: defaultLayerColor(className),\r\n }),\r\n })\r\n }\r\n }\r\n\r\n return splitVisibleByClass(drawing, result, idToClass, itemIdsByClass)\r\n}\r\n\r\n/** Walk the per-vertex `group` attribute of `result.visible`, look up the\r\n * IFC class of the source item, and emit one `LineSegments` per class\r\n * (transformed into drawing-local space and assigned to its layer). */\r\nfunction splitVisibleByClass(\r\n drawing: OBC.TechnicalDrawing,\r\n result: OBC.EdgeProjectionResult,\r\n idToClass: Map<number, string>,\r\n itemIdsByClass: Map<string, number[]>,\r\n): DrawingLayerInfo[] {\r\n const visibleGeom = result.visible\r\n const positionsAttr = visibleGeom.getAttribute('position') as\r\n | THREE.BufferAttribute\r\n | undefined\r\n const groupAttr = visibleGeom.getAttribute('group') as\r\n | THREE.BufferAttribute\r\n | undefined\r\n if (!positionsAttr) return []\r\n\r\n const buf = new Map<string, number[]>()\r\n const items = new Map<string, Set<number>>()\r\n for (const className of itemIdsByClass.keys()) {\r\n buf.set(className, [])\r\n items.set(className, new Set())\r\n }\r\n\r\n if (!groupAttr) return [] // No group info — can't bin.\r\n\r\n const positionArr = positionsAttr.array as Float32Array\r\n const groupArr = groupAttr.array as ArrayLike<number>\r\n const vertexCount = positionsAttr.count\r\n\r\n // Each line segment = 2 consecutive vertices that share a group index\r\n // (see ProjectedEdgeCollector::toLineGeometry in OBC's bundle).\r\n for (let i = 0; i < vertexCount; i += 2) {\r\n const groupIndex = Number(groupArr[i])\r\n const groupInfo = result.groups[groupIndex]\r\n if (!groupInfo) continue\r\n const className = idToClass.get(groupInfo.localId)\r\n if (!className) continue\r\n const verts = buf.get(className)\r\n if (!verts) continue\r\n const start = i * 3\r\n verts.push(\r\n positionArr[start],\r\n positionArr[start + 1],\r\n positionArr[start + 2],\r\n positionArr[start + 3],\r\n positionArr[start + 4],\r\n positionArr[start + 5],\r\n )\r\n items.get(className)!.add(groupInfo.localId)\r\n }\r\n\r\n const layers: DrawingLayerInfo[] = []\r\n for (const [className, verts] of buf) {\r\n if (verts.length === 0) continue\r\n const geom = new THREE.BufferGeometry()\r\n geom.setAttribute(\r\n 'position',\r\n new THREE.Float32BufferAttribute(new Float32Array(verts), 3),\r\n )\r\n // Wrap in LineSegments at world origin so toDrawingSpace transforms the\r\n // (already world-space) positions into the drawing's local XZ plane.\r\n const sourceLine = new THREE.LineSegments(geom)\r\n const projected = OBC.TechnicalDrawing.toDrawingSpace(sourceLine, drawing)\r\n drawing.addProjectionLines(projected, className)\r\n layers.push({\r\n className,\r\n layerName: className,\r\n visible: true,\r\n color: defaultLayerColor(className),\r\n itemCount: items.get(className)!.size,\r\n })\r\n }\r\n return layers\r\n}\r\n\r\nexport function disposeDrawing(\r\n components: OBC.Components,\r\n drawing: OBC.TechnicalDrawing | null,\r\n) {\r\n if (!drawing) return\r\n try {\r\n const techDrawings = components.get(OBC.TechnicalDrawings)\r\n techDrawings.list.delete(drawing.uuid)\r\n } catch {\r\n // best-effort\r\n }\r\n}\r\n\r\nexport const DOOR_SWING_LAYER = 'Door Swings'\r\nconst DOOR_SWING_COLOR = 0x666666\r\nconst DOOR_SWING_SEGMENTS = 16\r\nconst DOOR_STOREY_Y_TOLERANCE = 0.6\r\n\r\n/**\r\n * Add a quarter-circle swing arc for every IFCDOOR in `idFilter` whose\r\n * bbox sits at the active storey's elevation. Returns a `DrawingLayerInfo`\r\n * for the new `Door Swings` layer (or null if no doors qualified), so the\r\n * caller can append it to the sidebar's toggleable layer list.\r\n *\r\n * The arc radius matches the door's widest horizontal dimension;\r\n * orientation is inferred from the bbox — the larger horizontal extent\r\n * is the door width direction, the smaller is wall thickness.\r\n *\r\n * Best-effort: missing bbox or implausibly-sized doors are skipped silently.\r\n */\r\nexport async function addDoorSwingsToDrawing(\r\n drawing: OBC.TechnicalDrawing,\r\n model: any,\r\n idFilter: Set<number> | null,\r\n storeyY: number,\r\n): Promise<DrawingLayerInfo | null> {\r\n const doorMap = (await model.getItemsOfCategories([/IFCDOOR/])) as Record<\r\n string,\r\n number[]\r\n >\r\n let doorIds = Object.values(doorMap).flat() as number[]\r\n if (idFilter) doorIds = doorIds.filter((id) => idFilter.has(id))\r\n if (doorIds.length === 0) return null\r\n\r\n // Fetch boxes (world-space AABB, used for size + Y filter) and geometry\r\n // (per-item transform, used to recover REAL orientation — bboxes can't,\r\n // which is why doors in curved walls or at non-axis-aligned angles get\r\n // mis-oriented swings).\r\n const boxes: THREE.Box3[] = await model.getBoxes(doorIds)\r\n if (!boxes || boxes.length === 0) return null\r\n const geomDataPerDoor = await model.getItemsGeometry(doorIds)\r\n\r\n if (!drawing.layers.has(DOOR_SWING_LAYER)) {\r\n drawing.layers.create(DOOR_SWING_LAYER, {\r\n material: new THREE.LineBasicMaterial({ color: DOOR_SWING_COLOR }),\r\n })\r\n }\r\n\r\n const modelMatrix = model.object?.matrixWorld as THREE.Matrix4 | undefined\r\n const verts: number[] = []\r\n let drawnCount = 0\r\n for (let i = 0; i < boxes.length; i++) {\r\n const box = boxes[i]\r\n if (!box || box.isEmpty()) continue\r\n // `model.getBoxes` already applies `model.object.matrixWorld` internally\r\n // (BoxManager.getAllBoxes in @thatopen/fragments). Don't double-transform.\r\n const worldBox = box\r\n // Storey-Y filter: a door's bottom should sit at the active storey's\r\n // elevation. Filters out doors that leak through from upper storeys.\r\n if (Math.abs(worldBox.min.y - storeyY) > DOOR_STOREY_Y_TOLERANCE) continue\r\n const size = new THREE.Vector3()\r\n worldBox.getSize(size)\r\n // Tighter sanity range — a typical leaf door is 0.7-1.2 m; >2.5 m is\r\n // almost certainly a stacked / double-swing / wall-segment bbox.\r\n const bboxWidth = Math.max(size.x, size.z)\r\n if (bboxWidth < 0.6 || bboxWidth > 2.5) continue\r\n const center = new THREE.Vector3()\r\n worldBox.getCenter(center)\r\n\r\n // Recover the door's actual orientation from its geometry transform.\r\n // `geomData.transform` is the local-to-model matrix; combine with\r\n // `model.object.matrixWorld` (which `getBoxes` already applied to the\r\n // bbox) to get the world-space transform. The first column of that\r\n // matrix is the door's local +X axis in world space — for IFC doors\r\n // that's the width direction along the wall.\r\n const itemMeshes = geomDataPerDoor?.[i]\r\n const localTransform: THREE.Matrix4 | undefined = itemMeshes?.[0]?.transform\r\n let widthDir: THREE.Vector3\r\n let swingDir: THREE.Vector3\r\n if (localTransform) {\r\n const worldTransform = new THREE.Matrix4()\r\n if (modelMatrix) worldTransform.copy(modelMatrix)\r\n worldTransform.multiply(localTransform)\r\n // Local +X in world space, projected to the horizontal plane.\r\n widthDir = new THREE.Vector3()\r\n .setFromMatrixColumn(worldTransform, 0)\r\n .setY(0)\r\n if (widthDir.lengthSq() < 1e-6) {\r\n // Degenerate — door's local X points straight up. Fall back to bbox.\r\n widthDir = size.x >= size.z\r\n ? new THREE.Vector3(1, 0, 0)\r\n : new THREE.Vector3(0, 0, 1)\r\n } else {\r\n widthDir.normalize()\r\n }\r\n // Swing direction = 90° rotation of width in the horizontal plane.\r\n swingDir = new THREE.Vector3(-widthDir.z, 0, widthDir.x)\r\n } else {\r\n // No transform available — fall back to the original bbox heuristic\r\n // (correct for axis-aligned doors, wrong for angled ones).\r\n const widthAlongX = size.x >= size.z\r\n widthDir = widthAlongX\r\n ? new THREE.Vector3(1, 0, 0)\r\n : new THREE.Vector3(0, 0, 1)\r\n swingDir = widthAlongX\r\n ? new THREE.Vector3(0, 0, 1)\r\n : new THREE.Vector3(1, 0, 0)\r\n }\r\n\r\n // Door width = bbox extent projected onto widthDir. Use abs since the\r\n // signed projection of (size.x, size.z) along widthDir can be negative.\r\n const width = Math.abs(size.x * widthDir.x) + Math.abs(size.z * widthDir.z)\r\n if (width < 0.6 || width > 2.5) continue\r\n\r\n // Hinge sits at one end of the door. Step backward along widthDir by\r\n // half the width from the center.\r\n const hinge = new THREE.Vector3()\r\n .copy(center)\r\n .addScaledVector(widthDir, -width / 2)\r\n\r\n // Build quarter-arc from angle 0 (closed-door end) → π/2 (perpendicular).\r\n // `prev` MUST reset per door so segments don't leak between doors.\r\n let prev: THREE.Vector3 | null = null\r\n for (let s = 0; s <= DOOR_SWING_SEGMENTS; s++) {\r\n const t = (s / DOOR_SWING_SEGMENTS) * (Math.PI / 2)\r\n const point = new THREE.Vector3()\r\n .copy(hinge)\r\n .addScaledVector(widthDir, Math.cos(t) * width)\r\n .addScaledVector(swingDir, Math.sin(t) * width)\r\n if (prev) {\r\n verts.push(prev.x, prev.y, prev.z, point.x, point.y, point.z)\r\n }\r\n prev = point\r\n }\r\n // Straight edge from hinge to swing endpoint (the open-door line).\r\n const open = new THREE.Vector3()\r\n .copy(hinge)\r\n .addScaledVector(swingDir, width)\r\n verts.push(hinge.x, hinge.y, hinge.z, open.x, open.y, open.z)\r\n drawnCount++\r\n }\r\n\r\n if (verts.length === 0) return null\r\n\r\n const geometry = new THREE.BufferGeometry()\r\n geometry.setAttribute(\r\n 'position',\r\n new THREE.Float32BufferAttribute(new Float32Array(verts), 3),\r\n )\r\n const sourceLine = new THREE.LineSegments(geometry)\r\n const projected = OBC.TechnicalDrawing.toDrawingSpace(sourceLine, drawing)\r\n drawing.addProjectionLines(projected, DOOR_SWING_LAYER)\r\n return {\r\n className: DOOR_SWING_LAYER,\r\n layerName: DOOR_SWING_LAYER,\r\n visible: true,\r\n color: DOOR_SWING_COLOR,\r\n itemCount: drawnCount,\r\n displayKey: 'DrawingLayers.doorSwings',\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/drawingProjection.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as OBC from '@thatopen/components'\r\nimport * as OBF from '@thatopen/components-front'\r\nimport * as THREE from 'three'\r\n\r\nimport { CurrentWorld } from '../CurrentWorld'\r\n\r\nimport {\r\n defaultLayerColor,\r\n sortClassesByPriority,\r\n} from './drawingLayers'\r\n\r\nimport type {\r\n DrawingLayerInfo} from './drawingLayers';\r\n\r\nexport const FONT_URL =\r\n 'https://thatopen.github.io/engine_components/resources/fonts/PlusJakartaSans-Medium.ttf'\r\n\r\nexport const VISIBLE_LAYER = 'Visible'\r\nexport const HIDDEN_LAYER = 'Hidden'\r\nexport const ANNOTATIONS_LAYER = 'Annotations'\r\n\r\nexport interface DrawingViewportConfig {\r\n left: number\r\n right: number\r\n top: number\r\n bottom: number\r\n scale?: number\r\n name?: string\r\n}\r\n\r\nexport interface DrawingConfig {\r\n /** Direction the drawing's \"camera\" looks. Top-down floorplan: (0,-1,0).\r\n * North elevation: (0,0,-1). Etc. */\r\n orientation: THREE.Vector3\r\n /** World position of the drawing plane. */\r\n position: THREE.Vector3\r\n /** Depth captured from the plane along the orientation. */\r\n far: number\r\n viewport: DrawingViewportConfig\r\n}\r\n\r\n/**\r\n * Lazy, idempotent setup of `OBF.DrawingEditor` (font + source world).\r\n * Call before any drawing-projection work.\r\n */\r\nexport class DrawingEditorReady {\r\n private _fontLoaded = false\r\n private _editorSourceSet = false\r\n\r\n constructor(private components: OBC.Components) {}\r\n\r\n async ensure() {\r\n const editor = this.components.get(OBF.DrawingEditor)\r\n\r\n if (!this._fontLoaded) {\r\n try {\r\n await editor.fonts.load(FONT_URL)\r\n } catch (error) {\r\n console.warn('[drawingProjection] Font load failed:', error)\r\n }\r\n this._fontLoaded = true\r\n }\r\n\r\n if (!this._editorSourceSet) {\r\n const sourceWorld = this.components.get(CurrentWorld).world\r\n if (sourceWorld) {\r\n editor.setSource(sourceWorld)\r\n this._editorSourceSet = true\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** Create a new TechnicalDrawing pre-configured with the standard\r\n * visible/hidden/annotations layers + viewport. Caller still needs to\r\n * add projection items (`addProjectionFromItems`). */\r\nexport function createDrawing(\r\n components: OBC.Components,\r\n config: DrawingConfig,\r\n): OBC.TechnicalDrawing | null {\r\n const sourceWorld = components.get(CurrentWorld).world\r\n if (!sourceWorld) return null\r\n\r\n const techDrawings = components.get(OBC.TechnicalDrawings)\r\n const drawing = techDrawings.create(sourceWorld)\r\n drawing.orientTo(config.orientation.clone())\r\n drawing.three.position.copy(config.position)\r\n drawing.three.visible = false\r\n drawing.far = config.far\r\n\r\n drawing.layers.create(VISIBLE_LAYER, {\r\n material: new THREE.LineBasicMaterial({ color: 0x000000 }),\r\n })\r\n drawing.layers.create(HIDDEN_LAYER, {\r\n material: new THREE.LineDashedMaterial({\r\n color: 0x888888,\r\n dashSize: 0.2,\r\n gapSize: 0.1,\r\n }),\r\n visible: false,\r\n } as any)\r\n drawing.layers.create(ANNOTATIONS_LAYER, {\r\n material: new THREE.LineBasicMaterial({ color: 0x000000 }),\r\n })\r\n drawing.activeLayer = ANNOTATIONS_LAYER\r\n\r\n drawing.viewports.create({\r\n left: config.viewport.left,\r\n right: config.viewport.right,\r\n top: config.viewport.top,\r\n bottom: config.viewport.bottom,\r\n scale: config.viewport.scale ?? 100,\r\n name: config.viewport.name ?? 'Drawing',\r\n })\r\n\r\n return drawing\r\n}\r\n\r\n/** Force ProjectionGenerator off the WebGPU path (it silently returns 0\r\n * edges when WebGPU is unavailable in the browser, which @thatopen\r\n * components 3.4 hits). Idempotent. */\r\nexport function disableProjectorWebGPU(components: OBC.Components) {\r\n const projector = components.get(OBC.EdgeProjector)\r\n ;(projector as any).generator.useWebGPU = false\r\n}\r\n\r\n/** Patch a model's `getItemsGeometry` to give every entry a unique\r\n * representationId. EdgeProjector at index.mjs:11228 uses\r\n * `!geomData.representationId` to validate, so id=0 is incorrectly\r\n * skipped — and the fragments worker for our models returns 0 for every\r\n * entry. Idempotent per model via a flag on the model itself. */\r\nexport function patchModelGeometryRepresentationIds(model: any) {\r\n if (model._floorplanGeometryPatched) return\r\n const original = model.getItemsGeometry.bind(model)\r\n let counter = 1\r\n model.getItemsGeometry = async (ids: number[]) => {\r\n const data = await original(ids)\r\n if (data && typeof data === 'object') {\r\n const arrays = Array.isArray(data) ? data : Object.values(data)\r\n for (const arr of arrays) {\r\n if (!Array.isArray(arr)) continue\r\n for (const g of arr) {\r\n if (\r\n g &&\r\n (g.representationId === 0 ||\r\n g.representationId == null ||\r\n g.representationId === '')\r\n ) {\r\n g.representationId = `cdt-rep-${counter++}`\r\n }\r\n }\r\n }\r\n }\r\n return data\r\n }\r\n model._floorplanGeometryPatched = true\r\n}\r\n\r\n/** Add the projection lines for the given item ids to a drawing. Lays\r\n * them into the standard visible/hidden layers. */\r\nexport async function addItemsProjection(\r\n drawing: OBC.TechnicalDrawing,\r\n modelId: string,\r\n itemIds: number[],\r\n): Promise<void> {\r\n if (itemIds.length === 0) return\r\n const modelIdMap: OBC.ModelIdMap = { [modelId]: new Set(itemIds) }\r\n await drawing.addProjectionFromItems(modelIdMap, {\r\n layers: { visible: VISIBLE_LAYER, hidden: HIDDEN_LAYER },\r\n })\r\n}\r\n\r\n/**\r\n * Project items grouped by IFC class into per-class drawing layers. Each\r\n * class gets its own visible layer with a default color (cut classes black,\r\n * everything else mid-gray); the hidden side of every class shares the\r\n * standard `HIDDEN_LAYER`.\r\n *\r\n * Returns metadata used by the sidebar UI (visibility toggles + color\r\n * pickers) and the future DXF export. Skipping classes whose projection\r\n * fails — one broken class shouldn't strand the rest of the drawing.\r\n */\r\nexport async function addItemsProjectionByClass(\r\n drawing: OBC.TechnicalDrawing,\r\n modelId: string,\r\n itemIdsByClass: Map<string, number[]>,\r\n onClassDone?: (className: string) => void,\r\n): Promise<DrawingLayerInfo[]> {\r\n const layers: DrawingLayerInfo[] = []\r\n for (const [className, ids] of itemIdsByClass) {\r\n if (ids.length === 0) continue\r\n const color = defaultLayerColor(className)\r\n if (!drawing.layers.has(className)) {\r\n drawing.layers.create(className, {\r\n material: new THREE.LineBasicMaterial({ color }),\r\n })\r\n }\r\n const modelIdMap: OBC.ModelIdMap = { [modelId]: new Set(ids) }\r\n try {\r\n await drawing.addProjectionFromItems(modelIdMap, {\r\n layers: { visible: className, hidden: HIDDEN_LAYER },\r\n })\r\n } catch (error) {\r\n console.warn(\r\n `[drawingProjection] projection for ${className} failed:`,\r\n error,\r\n )\r\n continue\r\n }\r\n layers.push({\r\n className,\r\n layerName: className,\r\n visible: true,\r\n color,\r\n itemCount: ids.length,\r\n })\r\n onClassDone?.(className)\r\n }\r\n return layers\r\n}\r\n\r\n/**\r\n * Group a model's geometric item ids by IFC class. Optional `idFilter`\r\n * narrows the result to a specific subset (e.g. items in a single storey).\r\n */\r\nexport async function getItemIdsByClass(\r\n model: any,\r\n idFilter?: Set<number>,\r\n): Promise<Map<string, number[]>> {\r\n const all = (await model.getItemsOfCategories([/^IFC/])) as Record<\r\n string,\r\n number[]\r\n >\r\n const result = new Map<string, number[]>()\r\n for (const [className, ids] of Object.entries(all)) {\r\n const filtered = idFilter ? ids.filter((id) => idFilter.has(id)) : ids\r\n if (filtered.length > 0) result.set(className, filtered)\r\n }\r\n // Walls, columns, slabs, curtain-walls render first so they appear early\r\n // during progressive projection; everything else follows.\r\n return sortClassesByPriority(result)\r\n}\r\n\r\n/**\r\n * Project items into per-IFC-class drawing layers using a SINGLE\r\n * EdgeProjector pass. The visibility culler then sees the union of all\r\n * meshes and classifies each edge against the full scene — so a wall in\r\n * front of a chair correctly hides the chair's edges, even though they\r\n * end up on different layers.\r\n *\r\n * Use this for elevation drawings, where the entire building depth is\r\n * visible. {@link addItemsProjectionByClass} stays appropriate for\r\n * floorplans, where the section clip already limits depth and the per-\r\n * class path is faster.\r\n *\r\n * Hidden edges are intentionally discarded — the elevation should only\r\n * show the lines of objects immediately visible to the camera.\r\n */\r\nexport async function addItemsProjectionByClassOccluded(\r\n drawing: OBC.TechnicalDrawing,\r\n components: OBC.Components,\r\n modelId: string,\r\n itemIdsByClass: Map<string, number[]>,\r\n): Promise<DrawingLayerInfo[]> {\r\n const world = components.get(CurrentWorld).world\r\n if (!world) return []\r\n\r\n // Build flat id set + reverse map (localId → className) so we can bin the\r\n // resulting line segments by their source class.\r\n const allIds = new Set<number>()\r\n const idToClass = new Map<number, string>()\r\n for (const [className, ids] of itemIdsByClass) {\r\n for (const id of ids) {\r\n allIds.add(id)\r\n idToClass.set(id, className)\r\n }\r\n }\r\n if (allIds.size === 0) return []\r\n\r\n const projector = components.get(OBC.EdgeProjector)\r\n ;(projector as any).generator.useWebGPU = false\r\n\r\n // Mirror the projection-direction + near/far plane setup that\r\n // `TechnicalDrawing.addProjectionFromItems` uses internally — see\r\n // node_modules/@thatopen/components/dist/index.mjs::addProjectionFromItems.\r\n const savedDir = projector.projectionDirection.clone()\r\n const savedNear = projector.nearPlane\r\n const savedFar = projector.farPlane\r\n let result: OBC.EdgeProjectionResult\r\n try {\r\n drawing.three.updateWorldMatrix(true, false)\r\n const projDir = new THREE.Vector3(0, -1, 0)\r\n .transformDirection(drawing.three.matrixWorld)\r\n .normalize()\r\n projector.projectionDirection.copy(projDir)\r\n const rotMat = new THREE.Matrix4().makeRotationFromQuaternion(\r\n new THREE.Quaternion().setFromUnitVectors(\r\n projDir,\r\n new THREE.Vector3(0, -1, 0),\r\n ),\r\n )\r\n const planeY = new THREE.Vector3()\r\n .setFromMatrixPosition(drawing.three.matrixWorld)\r\n .applyMatrix4(rotMat).y\r\n projector.farPlane = planeY\r\n projector.nearPlane = planeY - drawing.far\r\n\r\n const modelIdMap: OBC.ModelIdMap = { [modelId]: allIds }\r\n result = await projector.get(modelIdMap, world)\r\n } finally {\r\n projector.projectionDirection.copy(savedDir)\r\n projector.nearPlane = savedNear\r\n projector.farPlane = savedFar\r\n }\r\n\r\n // Pre-create empty layers so the panel UI lists every class even if its\r\n // edges all ended up occluded (count = 0 for hidden classes).\r\n for (const className of itemIdsByClass.keys()) {\r\n if (!drawing.layers.has(className)) {\r\n drawing.layers.create(className, {\r\n material: new THREE.LineBasicMaterial({\r\n color: defaultLayerColor(className),\r\n }),\r\n })\r\n }\r\n }\r\n\r\n return splitVisibleByClass(drawing, result, idToClass, itemIdsByClass)\r\n}\r\n\r\n/** Walk the per-vertex `group` attribute of `result.visible`, look up the\r\n * IFC class of the source item, and emit one `LineSegments` per class\r\n * (transformed into drawing-local space and assigned to its layer). */\r\nfunction splitVisibleByClass(\r\n drawing: OBC.TechnicalDrawing,\r\n result: OBC.EdgeProjectionResult,\r\n idToClass: Map<number, string>,\r\n itemIdsByClass: Map<string, number[]>,\r\n): DrawingLayerInfo[] {\r\n const visibleGeom = result.visible\r\n const positionsAttr = visibleGeom.getAttribute('position') as\r\n | THREE.BufferAttribute\r\n | undefined\r\n const groupAttr = visibleGeom.getAttribute('group') as\r\n | THREE.BufferAttribute\r\n | undefined\r\n if (!positionsAttr) return []\r\n\r\n const buf = new Map<string, number[]>()\r\n const items = new Map<string, Set<number>>()\r\n for (const className of itemIdsByClass.keys()) {\r\n buf.set(className, [])\r\n items.set(className, new Set())\r\n }\r\n\r\n if (!groupAttr) return [] // No group info — can't bin.\r\n\r\n const positionArr = positionsAttr.array as Float32Array\r\n const groupArr = groupAttr.array as ArrayLike<number>\r\n const vertexCount = positionsAttr.count\r\n\r\n // Each line segment = 2 consecutive vertices that share a group index\r\n // (see ProjectedEdgeCollector::toLineGeometry in OBC's bundle).\r\n for (let i = 0; i < vertexCount; i += 2) {\r\n const groupIndex = Number(groupArr[i])\r\n const groupInfo = result.groups[groupIndex]\r\n if (!groupInfo) continue\r\n const className = idToClass.get(groupInfo.localId)\r\n if (!className) continue\r\n const verts = buf.get(className)\r\n if (!verts) continue\r\n const start = i * 3\r\n verts.push(\r\n positionArr[start],\r\n positionArr[start + 1],\r\n positionArr[start + 2],\r\n positionArr[start + 3],\r\n positionArr[start + 4],\r\n positionArr[start + 5],\r\n )\r\n items.get(className)!.add(groupInfo.localId)\r\n }\r\n\r\n const layers: DrawingLayerInfo[] = []\r\n for (const [className, verts] of buf) {\r\n if (verts.length === 0) continue\r\n const geom = new THREE.BufferGeometry()\r\n geom.setAttribute(\r\n 'position',\r\n new THREE.Float32BufferAttribute(new Float32Array(verts), 3),\r\n )\r\n // Wrap in LineSegments at world origin so toDrawingSpace transforms the\r\n // (already world-space) positions into the drawing's local XZ plane.\r\n const sourceLine = new THREE.LineSegments(geom)\r\n const projected = OBC.TechnicalDrawing.toDrawingSpace(sourceLine, drawing)\r\n drawing.addProjectionLines(projected, className)\r\n layers.push({\r\n className,\r\n layerName: className,\r\n visible: true,\r\n color: defaultLayerColor(className),\r\n itemCount: items.get(className)!.size,\r\n })\r\n }\r\n return layers\r\n}\r\n\r\nexport function disposeDrawing(\r\n components: OBC.Components,\r\n drawing: OBC.TechnicalDrawing | null,\r\n) {\r\n if (!drawing) return\r\n try {\r\n const techDrawings = components.get(OBC.TechnicalDrawings)\r\n techDrawings.list.delete(drawing.uuid)\r\n } catch {\r\n // best-effort\r\n }\r\n}\r\n\r\nexport const DOOR_SWING_LAYER = 'Door Swings'\r\nconst DOOR_SWING_COLOR = 0x666666\r\nconst DOOR_SWING_SEGMENTS = 16\r\nconst DOOR_STOREY_Y_TOLERANCE = 0.6\r\n\r\n/**\r\n * Add a quarter-circle swing arc for every IFCDOOR in `idFilter` whose\r\n * bbox sits at the active storey's elevation. Returns a `DrawingLayerInfo`\r\n * for the new `Door Swings` layer (or null if no doors qualified), so the\r\n * caller can append it to the sidebar's toggleable layer list.\r\n *\r\n * The arc radius matches the door's widest horizontal dimension;\r\n * orientation is inferred from the bbox — the larger horizontal extent\r\n * is the door width direction, the smaller is wall thickness.\r\n *\r\n * Best-effort: missing bbox or implausibly-sized doors are skipped silently.\r\n */\r\nexport async function addDoorSwingsToDrawing(\r\n drawing: OBC.TechnicalDrawing,\r\n model: any,\r\n idFilter: Set<number> | null,\r\n storeyY: number,\r\n): Promise<DrawingLayerInfo | null> {\r\n const doorMap = (await model.getItemsOfCategories([/IFCDOOR/])) as Record<\r\n string,\r\n number[]\r\n >\r\n let doorIds = Object.values(doorMap).flat() as number[]\r\n if (idFilter) doorIds = doorIds.filter((id) => idFilter.has(id))\r\n if (doorIds.length === 0) return null\r\n\r\n // Fetch boxes (world-space AABB, used for size + Y filter) and geometry\r\n // (per-item transform, used to recover REAL orientation — bboxes can't,\r\n // which is why doors in curved walls or at non-axis-aligned angles get\r\n // mis-oriented swings).\r\n const boxes: THREE.Box3[] = await model.getBoxes(doorIds)\r\n if (!boxes || boxes.length === 0) return null\r\n const geomDataPerDoor = await model.getItemsGeometry(doorIds)\r\n\r\n if (!drawing.layers.has(DOOR_SWING_LAYER)) {\r\n drawing.layers.create(DOOR_SWING_LAYER, {\r\n material: new THREE.LineBasicMaterial({ color: DOOR_SWING_COLOR }),\r\n })\r\n }\r\n\r\n const modelMatrix = model.object?.matrixWorld as THREE.Matrix4 | undefined\r\n const verts: number[] = []\r\n let drawnCount = 0\r\n for (let i = 0; i < boxes.length; i++) {\r\n const box = boxes[i]\r\n if (!box || box.isEmpty()) continue\r\n // `model.getBoxes` already applies `model.object.matrixWorld` internally\r\n // (BoxManager.getAllBoxes in @thatopen/fragments). Don't double-transform.\r\n const worldBox = box\r\n // Storey-Y filter: a door's bottom should sit at the active storey's\r\n // elevation. Filters out doors that leak through from upper storeys.\r\n if (Math.abs(worldBox.min.y - storeyY) > DOOR_STOREY_Y_TOLERANCE) continue\r\n const size = new THREE.Vector3()\r\n worldBox.getSize(size)\r\n // Tighter sanity range — a typical leaf door is 0.7-1.2 m; >2.5 m is\r\n // almost certainly a stacked / double-swing / wall-segment bbox.\r\n const bboxWidth = Math.max(size.x, size.z)\r\n if (bboxWidth < 0.6 || bboxWidth > 2.5) continue\r\n const center = new THREE.Vector3()\r\n worldBox.getCenter(center)\r\n\r\n // Recover the door's actual orientation from its geometry transform.\r\n // `geomData.transform` is the local-to-model matrix; combine with\r\n // `model.object.matrixWorld` (which `getBoxes` already applied to the\r\n // bbox) to get the world-space transform. The first column of that\r\n // matrix is the door's local +X axis in world space — for IFC doors\r\n // that's the width direction along the wall.\r\n const itemMeshes = geomDataPerDoor?.[i]\r\n const localTransform: THREE.Matrix4 | undefined = itemMeshes?.[0]?.transform\r\n let widthDir: THREE.Vector3\r\n let swingDir: THREE.Vector3\r\n if (localTransform) {\r\n const worldTransform = new THREE.Matrix4()\r\n if (modelMatrix) worldTransform.copy(modelMatrix)\r\n worldTransform.multiply(localTransform)\r\n // Local +X in world space, projected to the horizontal plane.\r\n widthDir = new THREE.Vector3()\r\n .setFromMatrixColumn(worldTransform, 0)\r\n .setY(0)\r\n if (widthDir.lengthSq() < 1e-6) {\r\n // Degenerate — door's local X points straight up. Fall back to bbox.\r\n widthDir = size.x >= size.z\r\n ? new THREE.Vector3(1, 0, 0)\r\n : new THREE.Vector3(0, 0, 1)\r\n } else {\r\n widthDir.normalize()\r\n }\r\n // Swing direction = 90° rotation of width in the horizontal plane.\r\n swingDir = new THREE.Vector3(-widthDir.z, 0, widthDir.x)\r\n } else {\r\n // No transform available — fall back to the original bbox heuristic\r\n // (correct for axis-aligned doors, wrong for angled ones).\r\n const widthAlongX = size.x >= size.z\r\n widthDir = widthAlongX\r\n ? new THREE.Vector3(1, 0, 0)\r\n : new THREE.Vector3(0, 0, 1)\r\n swingDir = widthAlongX\r\n ? new THREE.Vector3(0, 0, 1)\r\n : new THREE.Vector3(1, 0, 0)\r\n }\r\n\r\n // Door width = bbox extent projected onto widthDir. Use abs since the\r\n // signed projection of (size.x, size.z) along widthDir can be negative.\r\n const width = Math.abs(size.x * widthDir.x) + Math.abs(size.z * widthDir.z)\r\n if (width < 0.6 || width > 2.5) continue\r\n\r\n // Hinge sits at one end of the door. Step backward along widthDir by\r\n // half the width from the center.\r\n const hinge = new THREE.Vector3()\r\n .copy(center)\r\n .addScaledVector(widthDir, -width / 2)\r\n\r\n // Build quarter-arc from angle 0 (closed-door end) → π/2 (perpendicular).\r\n // `prev` MUST reset per door so segments don't leak between doors.\r\n let prev: THREE.Vector3 | null = null\r\n for (let s = 0; s <= DOOR_SWING_SEGMENTS; s++) {\r\n const t = (s / DOOR_SWING_SEGMENTS) * (Math.PI / 2)\r\n const point = new THREE.Vector3()\r\n .copy(hinge)\r\n .addScaledVector(widthDir, Math.cos(t) * width)\r\n .addScaledVector(swingDir, Math.sin(t) * width)\r\n if (prev) {\r\n verts.push(prev.x, prev.y, prev.z, point.x, point.y, point.z)\r\n }\r\n prev = point\r\n }\r\n // Straight edge from hinge to swing endpoint (the open-door line).\r\n const open = new THREE.Vector3()\r\n .copy(hinge)\r\n .addScaledVector(swingDir, width)\r\n verts.push(hinge.x, hinge.y, hinge.z, open.x, open.y, open.z)\r\n drawnCount++\r\n }\r\n\r\n if (verts.length === 0) return null\r\n\r\n const geometry = new THREE.BufferGeometry()\r\n geometry.setAttribute(\r\n 'position',\r\n new THREE.Float32BufferAttribute(new Float32Array(verts), 3),\r\n )\r\n const sourceLine = new THREE.LineSegments(geometry)\r\n const projected = OBC.TechnicalDrawing.toDrawingSpace(sourceLine, drawing)\r\n drawing.addProjectionLines(projected, DOOR_SWING_LAYER)\r\n return {\r\n className: DOOR_SWING_LAYER,\r\n layerName: DOOR_SWING_LAYER,\r\n visible: true,\r\n color: DOOR_SWING_COLOR,\r\n itemCount: drawnCount,\r\n displayKey: 'DrawingLayers.doorSwings',\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useBuildingName.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/lib/useBuildingName.ts"],"names":[],"mappings":"AAMA;;;;;;;;;GASG;AACH,wBAAgB,eAAe,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAmB7D"}
1
+ {"version":3,"file":"useBuildingName.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/lib/useBuildingName.ts"],"names":[],"mappings":"AAOA;;;;;;;;;GASG;AACH,wBAAgB,eAAe,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAmB7D"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/useBuildingName.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport { BimContext } from '../../../../../store'\r\n\r\n/**\r\n * Hook returning a function that resolves the building/file display name\r\n * for a given `modelId`. The model's loaded file lives in either\r\n * `bimState.bim.buildingModel.bimFile` (single-model viewer) or\r\n * `bimState.bim.bimModelsAddedToMap[]` (multi-model). We fall back to the\r\n * raw modelId so the caller never gets `null`.\r\n *\r\n * The returned name is stripped of its file extension (\".frag\", \".ifc\",\r\n * etc.) so it can be safely composed into a download filename.\r\n */\r\nexport function useBuildingName(): (modelId: string) => string {\r\n const { state: bimState } = React.useContext(BimContext)\r\n const { buildingModel, bimModelsAddedToMap } = bimState.bim\r\n\r\n return React.useCallback(\r\n (modelId: string) => {\r\n const idStr = String(modelId)\r\n const fromMap = bimModelsAddedToMap.find(\r\n (m) => String(m.bimFile.id) === idStr,\r\n )\r\n if (fromMap) return stripExtension(fromMap.bimFile.name)\r\n const single = buildingModel.bimFile\r\n if (single && String(single.id) === idStr) {\r\n return stripExtension(single.name)\r\n }\r\n return idStr\r\n },\r\n [buildingModel, bimModelsAddedToMap],\r\n )\r\n}\r\n\r\nfunction stripExtension(name: string): string {\r\n const dot = name.lastIndexOf('.')\r\n if (dot <= 0) return name\r\n return name.slice(0, dot)\r\n}\r\n"],"mappings":"AAGA,YAAY,WAAW;AACvB,SAAS,kBAAkB;AAYpB,SAAS,kBAA+C;AAC7D,QAAM,EAAE,OAAO,SAAS,IAAI,MAAM,WAAW,UAAU;AACvD,QAAM,EAAE,eAAe,oBAAoB,IAAI,SAAS;AAExD,SAAO,MAAM;AAAA,IACX,CAAC,YAAoB;AACnB,YAAM,QAAQ,OAAO,OAAO;AAC5B,YAAM,UAAU,oBAAoB;AAAA,QAClC,CAAC,MAAM,OAAO,EAAE,QAAQ,EAAE,MAAM;AAAA,MAClC;AACA,UAAI,QAAS,QAAO,eAAe,QAAQ,QAAQ,IAAI;AACvD,YAAM,SAAS,cAAc;AAC7B,UAAI,UAAU,OAAO,OAAO,EAAE,MAAM,OAAO;AACzC,eAAO,eAAe,OAAO,IAAI;AAAA,MACnC;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC,eAAe,mBAAmB;AAAA,EACrC;AACF;AAEA,SAAS,eAAe,MAAsB;AAC5C,QAAM,MAAM,KAAK,YAAY,GAAG;AAChC,MAAI,OAAO,EAAG,QAAO;AACrB,SAAO,KAAK,MAAM,GAAG,GAAG;AAC1B;","names":[]}
1
+ {"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/useBuildingName.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\n\r\nimport { BimContext } from '../../../../../store'\r\n\r\n/**\r\n * Hook returning a function that resolves the building/file display name\r\n * for a given `modelId`. The model's loaded file lives in either\r\n * `bimState.bim.buildingModel.bimFile` (single-model viewer) or\r\n * `bimState.bim.bimModelsAddedToMap[]` (multi-model). We fall back to the\r\n * raw modelId so the caller never gets `null`.\r\n *\r\n * The returned name is stripped of its file extension (\".frag\", \".ifc\",\r\n * etc.) so it can be safely composed into a download filename.\r\n */\r\nexport function useBuildingName(): (modelId: string) => string {\r\n const { state: bimState } = React.useContext(BimContext)\r\n const { buildingModel, bimModelsAddedToMap } = bimState.bim\r\n\r\n return React.useCallback(\r\n (modelId: string) => {\r\n const idStr = String(modelId)\r\n const fromMap = bimModelsAddedToMap.find(\r\n (m) => String(m.bimFile.id) === idStr,\r\n )\r\n if (fromMap) return stripExtension(fromMap.bimFile.name)\r\n const single = buildingModel.bimFile\r\n if (single && String(single.id) === idStr) {\r\n return stripExtension(single.name)\r\n }\r\n return idStr\r\n },\r\n [buildingModel, bimModelsAddedToMap],\r\n )\r\n}\r\n\r\nfunction stripExtension(name: string): string {\r\n const dot = name.lastIndexOf('.')\r\n if (dot <= 0) return name\r\n return name.slice(0, dot)\r\n}\r\n"],"mappings":"AAGA,YAAY,WAAW;AAEvB,SAAS,kBAAkB;AAYpB,SAAS,kBAA+C;AAC7D,QAAM,EAAE,OAAO,SAAS,IAAI,MAAM,WAAW,UAAU;AACvD,QAAM,EAAE,eAAe,oBAAoB,IAAI,SAAS;AAExD,SAAO,MAAM;AAAA,IACX,CAAC,YAAoB;AACnB,YAAM,QAAQ,OAAO,OAAO;AAC5B,YAAM,UAAU,oBAAoB;AAAA,QAClC,CAAC,MAAM,OAAO,EAAE,QAAQ,EAAE,MAAM;AAAA,MAClC;AACA,UAAI,QAAS,QAAO,eAAe,QAAQ,QAAQ,IAAI;AACvD,YAAM,SAAS,cAAc;AAC7B,UAAI,UAAU,OAAO,OAAO,EAAE,MAAM,OAAO;AACzC,eAAO,eAAe,OAAO,IAAI;AAAA,MACnC;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC,eAAe,mBAAmB;AAAA,EACrC;AACF;AAEA,SAAS,eAAe,MAAsB;AAC5C,QAAM,MAAM,KAAK,YAAY,GAAG;AAChC,MAAI,OAAO,EAAG,QAAO;AACrB,SAAO,KAAK,MAAM,GAAG,GAAG;AAC1B;","names":[]}
@@ -1,5 +1,5 @@
1
- import * as React from "react";
2
1
  import { useTranslations } from "next-intl";
2
+ import * as React from "react";
3
3
  function useFriendlyIfcClassName() {
4
4
  const tLayers = useTranslations("DrawingLayers");
5
5
  return React.useCallback(
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\n\r\n/**\r\n * Hook returning a function that maps a layer class name to a display label.\r\n * IFC class names (IFCWALL, IFCSLAB, …) are returned verbatim per-spec.\r\n * Special non-IFC layer keys (e.g. \"Door Swings\") are looked up in the\r\n * DrawingLayers i18n namespace so they get localized.\r\n */\r\nexport function useFriendlyIfcClassName(): (className: string) => string {\r\n const tLayers = useTranslations('DrawingLayers')\r\n\r\n return React.useCallback(\r\n (className: string) => {\r\n if (className.startsWith('IFC')) return className\r\n // The Fill/Cut group rows arrive fully qualified (\"DrawingLayers.cut\").\r\n // Strip the namespace prefix so the lookup lands on the bare key (\"cut\")\r\n // instead of resolving the dotted path as nested keys (which misses).\r\n const key = className.startsWith('DrawingLayers.')\r\n ? className.slice('DrawingLayers.'.length)\r\n : className\r\n return tLayers.has(key) ? tLayers(key) : className\r\n },\r\n [tLayers],\r\n )\r\n}\r\n"],"mappings":"AAGA,YAAY,WAAW;AACvB,SAAS,uBAAuB;AAQzB,SAAS,0BAAyD;AACvE,QAAM,UAAU,gBAAgB,eAAe;AAE/C,SAAO,MAAM;AAAA,IACX,CAAC,cAAsB;AACrB,UAAI,UAAU,WAAW,KAAK,EAAG,QAAO;AAIxC,YAAM,MAAM,UAAU,WAAW,gBAAgB,IAC7C,UAAU,MAAM,iBAAiB,MAAM,IACvC;AACJ,aAAO,QAAQ,IAAI,GAAG,IAAI,QAAQ,GAAG,IAAI;AAAA,IAC3C;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport { useTranslations } from 'next-intl'\r\nimport * as React from 'react'\r\n\r\n/**\r\n * Hook returning a function that maps a layer class name to a display label.\r\n * IFC class names (IFCWALL, IFCSLAB, …) are returned verbatim per-spec.\r\n * Special non-IFC layer keys (e.g. \"Door Swings\") are looked up in the\r\n * DrawingLayers i18n namespace so they get localized.\r\n */\r\nexport function useFriendlyIfcClassName(): (className: string) => string {\r\n const tLayers = useTranslations('DrawingLayers')\r\n\r\n return React.useCallback(\r\n (className: string) => {\r\n if (className.startsWith('IFC')) return className\r\n // The Fill/Cut group rows arrive fully qualified (\"DrawingLayers.cut\").\r\n // Strip the namespace prefix so the lookup lands on the bare key (\"cut\")\r\n // instead of resolving the dotted path as nested keys (which misses).\r\n const key = className.startsWith('DrawingLayers.')\r\n ? className.slice('DrawingLayers.'.length)\r\n : className\r\n return tLayers.has(key) ? tLayers(key) : className\r\n },\r\n [tLayers],\r\n )\r\n}\r\n"],"mappings":"AAGA,SAAS,uBAAuB;AAChC,YAAY,WAAW;AAQhB,SAAS,0BAAyD;AACvE,QAAM,UAAU,gBAAgB,eAAe;AAE/C,SAAO,MAAM;AAAA,IACX,CAAC,cAAsB;AACrB,UAAI,UAAU,WAAW,KAAK,EAAG,QAAO;AAIxC,YAAM,MAAM,UAAU,WAAW,gBAAgB,IAC7C,UAAU,MAAM,iBAAiB,MAAM,IACvC;AACJ,aAAO,QAAQ,IAAI,GAAG,IAAI,QAAQ,GAAG,IAAI;AAAA,IAC3C;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAY9B,UAAU,sBAAsB;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CAC7C;AAuCD,wBAAgB,cAAc,CAAC,EAAE,IAAY,EAAE,kBAAkB,EAAE,EAAE,sBAAsB,qBAsX1F"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAe9B,UAAU,sBAAsB;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CAC7C;AAuCD,wBAAgB,cAAc,CAAC,EAAE,IAAY,EAAE,kBAAkB,EAAE,EAAE,sBAAsB,qBAsX1F"}
@@ -3,13 +3,13 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { BimContext, ToolsContext } from "../../../../../store";
5
5
  import { Highlighter } from "../Highlighter";
6
- import { PropertiesMenuHeader } from "./src/PropertiesMenuHeader";
6
+ import { IDSManager } from "../IDSManager";
7
+ import { IDSLegend } from "../IDSManager/src/IDSLegend";
7
8
  import { ElementList } from "./src/ElementList";
9
+ import { PropertiesMenuHeader } from "./src/PropertiesMenuHeader";
8
10
  import { PropertyGroup } from "./src/PropertyGroup";
9
- import { formatPropertyValue } from "./src/utils";
10
11
  import { useElementProperties } from "./src/useElementProperties";
11
- import { IDSManager } from "../IDSManager";
12
- import { IDSLegend } from "../IDSManager/src/IDSLegend";
12
+ import { formatPropertyValue } from "./src/utils";
13
13
  function useElementNames(bimComponents) {
14
14
  const { fetchElementProperties } = useElementProperties(bimComponents);
15
15
  const getElementName = React.useCallback(async (elementId) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/index.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport { BimContext, ToolsContext } from '../../../../../store'\r\nimport { Highlighter } from '../Highlighter'\r\nimport { PropertiesMenuHeader } from './src/PropertiesMenuHeader'\r\nimport { ElementList } from './src/ElementList'\r\nimport { PropertyGroup } from './src/PropertyGroup'\r\nimport { formatPropertyValue } from './src/utils'\r\nimport type { PropertyGroup as PropertyGroupType } from './src/utils'\r\nimport { useElementProperties } from './src/useElementProperties'\r\nimport { IDSManager } from '../IDSManager'\r\nimport { IDSLegend } from '../IDSManager/src/IDSLegend'\r\n\r\ninterface PropertiesSideBarProps {\r\n open?: boolean\r\n onOpenChangeAction?: (open: boolean) => void\r\n}\r\n\r\n// Hook to get element names for multiple elements\r\nfunction useElementNames(bimComponents: any) {\r\n const { fetchElementProperties } = useElementProperties(bimComponents)\r\n\r\n const getElementName = React.useCallback(async (elementId: number): Promise<string> => {\r\n try {\r\n const { elementName } = await fetchElementProperties(elementId)\r\n return elementName || `Element ${elementId}`\r\n }\r\n catch (error) {\r\n console.error('Error fetching element name:', error)\r\n return `Element ${elementId}`\r\n }\r\n }, [fetchElementProperties])\r\n\r\n const getElementNames = React.useCallback(async (elementIds: number[]): Promise<Record<number, string>> => {\r\n const names: Record<number, string> = {}\r\n\r\n // Fetch names in parallel for better performance\r\n const namePromises = elementIds.map(async (id) => {\r\n const name = await getElementName(id)\r\n return { id, name }\r\n })\r\n\r\n const results = await Promise.allSettled(namePromises)\r\n for (const result of results) {\r\n if (result.status === 'fulfilled') {\r\n names[result.value.id] = result.value.name\r\n }\r\n }\r\n\r\n return names\r\n }, [getElementName])\r\n\r\n return { getElementName, getElementNames }\r\n}\r\n\r\nexport function PropertiesMenu({ open = false, onOpenChangeAction }: PropertiesSideBarProps) {\r\n const { state: bimState } = React.useContext(BimContext)\r\n const { bimComponents } = bimState.bim\r\n const { state: toolsState } = React.useContext(ToolsContext)\r\n const { currentToolId } = toolsState.tools\r\n\r\n const { fetchElementProperties } = useElementProperties(bimComponents)\r\n const { getElementNames } = useElementNames(bimComponents)\r\n const [selectedElementIds, setSelectedElementIds] = React.useState<number[]>([])\r\n const [currentElementId, setCurrentElementId] = React.useState<number | null>(null)\r\n const [currentElementName, setCurrentElementName] = React.useState<string | null>(null)\r\n const [propertyGroups, setPropertyGroups] = React.useState<PropertyGroupType[]>([])\r\n const [expandedGroups, setExpandedGroups] = React.useState<Set<string>>(new Set(['identity-data']))\r\n const [loading, setLoading] = React.useState(false)\r\n const [internalOpen, setInternalOpen] = React.useState(false)\r\n const [elementNames, setElementNames] = React.useState<Record<number, string>>({})\r\n const [hasEverSelectedElement, setHasEverSelectedElement] = React.useState(false)\r\n const [isExiting, setIsExiting] = React.useState(false)\r\n const [idsTestResults, setIdsTestResults] = React.useState<{ passed: number; failed: number } | null>(null)\r\n const [idsEnabled, setIdsEnabled] = React.useState(false)\r\n const [currentElementIdsStatus, setCurrentElementIdsStatus] = React.useState<'pass' | 'fail' | null>(null)\r\n const [idsTitle, setIdsTitle] = React.useState<string>('IDS Verification')\r\n const [idsDescription, setIdsDescription] = React.useState<string>('')\r\n const [idsLegendHeight, setIdsLegendHeight] = React.useState<number>(0)\r\n\r\n // Ref to prevent circular calls between React and ClickHandler\r\n const isInternalCloseRef = React.useRef(false)\r\n\r\n // Use internal state if no external control is provided\r\n const isOpen = onOpenChangeAction ? open : internalOpen\r\n const handleOpenChange = onOpenChangeAction || setInternalOpen\r\n\r\n // Function to toggle group expansion\r\n const toggleGroup = (groupId: string) => {\r\n setExpandedGroups((prev) => {\r\n const newSet = new Set(prev)\r\n if (newSet.has(groupId)) {\r\n newSet.delete(groupId)\r\n }\r\n else {\r\n newSet.add(groupId)\r\n }\r\n return newSet\r\n })\r\n }\r\n\r\n // Function to fetch properties for the current element\r\n const loadElementProperties = React.useCallback(async (localId: number) => {\r\n setLoading(true)\r\n try {\r\n const { groups, elementName } = await fetchElementProperties(localId)\r\n setPropertyGroups(groups)\r\n setCurrentElementName(elementName)\r\n // Reset expanded groups to defaults when element changes\r\n setExpandedGroups(new Set(['identity-data']))\r\n }\r\n catch (error) {\r\n console.error('Error fetching element properties:', error)\r\n setPropertyGroups([])\r\n setCurrentElementName(null)\r\n }\r\n finally {\r\n setLoading(false)\r\n }\r\n }, [fetchElementProperties])\r\n\r\n // Handle closing the properties panel\r\n const handleClose = React.useCallback(() => {\r\n if (!isOpen) {\r\n // If not open, close immediately without animation\r\n setSelectedElementIds([])\r\n setCurrentElementId(null)\r\n setCurrentElementName(null)\r\n setElementNames({})\r\n setHasEverSelectedElement(false)\r\n isInternalCloseRef.current = false\r\n handleOpenChange(false)\r\n return\r\n }\r\n\r\n setIsExiting(true)\r\n // Delay the actual close to allow animation to complete\r\n setTimeout(() => {\r\n setSelectedElementIds([])\r\n setCurrentElementId(null)\r\n setCurrentElementName(null)\r\n setElementNames({})\r\n setHasEverSelectedElement(false)\r\n isInternalCloseRef.current = false\r\n setIsExiting(false)\r\n handleOpenChange(false)\r\n }, 300) // Match animation duration\r\n }, [isOpen, handleOpenChange])\r\n\r\n // Handle manual close (e.g., when user clicks close button)\r\n const handleManualClose = React.useCallback(() => {\r\n isInternalCloseRef.current = true\r\n const highlighter = bimComponents?.get(Highlighter)\r\n if (highlighter) {\r\n highlighter.clearSelection()\r\n }\r\n // Call handleClose directly after clearing selection\r\n handleClose()\r\n }, [bimComponents, handleClose])\r\n\r\n const handleSelectionCleared = React.useCallback(() => {\r\n // Only call handleClose if this is not an internal close operation\r\n if (!isInternalCloseRef.current) {\r\n handleClose()\r\n }\r\n }, [handleClose])\r\n\r\n // Handle selecting a specific element from the list\r\n const handleElementSelect = (elementId: string) => {\r\n const id = Number.parseInt(elementId)\r\n setCurrentElementId(id)\r\n loadElementProperties(id)\r\n }\r\n\r\n // Memoize event handlers to prevent infinite loops\r\n const handleElementsSelected = React.useCallback((elementIds: number[]) => {\r\n setSelectedElementIds(elementIds)\r\n if (elementIds.length > 0) {\r\n setCurrentElementId(elementIds[0])\r\n setHasEverSelectedElement(true)\r\n // Only open properties panel if no tool is currently active\r\n if (currentToolId === null) {\r\n handleOpenChange(true)\r\n }\r\n }\r\n else {\r\n // No elements selected - close the panel\r\n if (hasEverSelectedElement && currentToolId === null) {\r\n handleClose()\r\n }\r\n // If no element has ever been selected or tool is active, do nothing (don't open panel)\r\n }\r\n }, [currentToolId, hasEverSelectedElement, handleOpenChange, handleClose])\r\n\r\n // Handler to close IDS verification\r\n const handleIDSClose = React.useCallback(async () => {\r\n if (!bimComponents) return\r\n try {\r\n const idsManager = bimComponents.get(IDSManager)\r\n await idsManager.reset()\r\n } catch (error) {\r\n console.error('Error closing IDS:', error)\r\n }\r\n }, [bimComponents])\r\n\r\n // Set up IDS Manager listener\r\n React.useEffect(() => {\r\n if (!bimComponents) return\r\n\r\n try {\r\n const idsManager = bimComponents.get(IDSManager)\r\n \r\n const handleIDSTest = ({ totalPassed, totalFailed, title, description }: { totalPassed: number; totalFailed: number; title?: string; description?: string }) => {\r\n setIdsTestResults({ passed: totalPassed, failed: totalFailed })\r\n setIdsTitle(title || 'IDS Verification')\r\n setIdsDescription(description || '')\r\n setIdsEnabled(true)\r\n }\r\n\r\n const handleIDSReset = () => {\r\n setIdsTestResults(null)\r\n setIdsEnabled(false)\r\n setCurrentElementIdsStatus(null)\r\n setIdsTitle('IDS Verification')\r\n setIdsDescription('')\r\n }\r\n\r\n idsManager.onTest.add(handleIDSTest)\r\n idsManager.onReset.add(handleIDSReset)\r\n\r\n // Check if IDS is currently enabled and has results\r\n if (idsManager.enabled) {\r\n setIdsEnabled(true)\r\n // Try to get existing results\r\n const pass = idsManager.pass\r\n const fail = idsManager.fail\r\n if (pass && fail) {\r\n const totalPassed = Object.values(pass).reduce((total, set) => total + set.size, 0)\r\n const totalFailed = Object.values(fail).reduce((total, set) => total + set.size, 0)\r\n if (totalPassed > 0 || totalFailed > 0) {\r\n setIdsTestResults({ passed: totalPassed, failed: totalFailed })\r\n }\r\n }\r\n }\r\n\r\n return () => {\r\n idsManager.onTest.remove(handleIDSTest)\r\n idsManager.onReset.remove(handleIDSReset)\r\n }\r\n } catch (error) {\r\n // IDSManager might not be initialized\r\n return\r\n }\r\n }, [bimComponents])\r\n\r\n // Set up ClickHandler event listener\r\n React.useEffect(() => {\r\n if (!bimComponents) return\r\n\r\n const highlighter = bimComponents.get(Highlighter)\r\n\r\n // Subscribe to the event\r\n highlighter.onElementsSelected.add(handleElementsSelected)\r\n highlighter.onSelectionCleared.add(handleSelectionCleared)\r\n\r\n // Get the currently selected elements if any\r\n const currentlySelected = highlighter.selectedElement\r\n if (currentlySelected && currentlySelected.length > 0 && currentToolId === null) {\r\n setSelectedElementIds(currentlySelected)\r\n setCurrentElementId(currentlySelected[0])\r\n setHasEverSelectedElement(true)\r\n handleOpenChange(true)\r\n }\r\n\r\n // Cleanup on unmount\r\n return () => {\r\n highlighter.onElementsSelected.remove(handleElementsSelected)\r\n highlighter.onSelectionCleared.remove(handleSelectionCleared)\r\n }\r\n }, [bimComponents, handleElementsSelected, handleSelectionCleared, currentToolId, handleOpenChange])\r\n // Fetch properties when currentElementId changes\r\n React.useEffect(() => {\r\n if (currentElementId === null) {\r\n setPropertyGroups([])\r\n setCurrentElementName(null)\r\n setExpandedGroups(new Set())\r\n setCurrentElementIdsStatus(null)\r\n }\r\n else {\r\n loadElementProperties(currentElementId)\r\n \r\n // Check if current element passed or failed IDS test\r\n if (bimComponents && idsEnabled) {\r\n try {\r\n const idsManager = bimComponents.get(IDSManager)\r\n const passMap = idsManager.pass\r\n const failMap = idsManager.fail\r\n \r\n let elementStatus: 'pass' | 'fail' | null = null\r\n \r\n // Check if element is in pass map\r\n for (const [modelId, expressIds] of Object.entries(passMap || {})) {\r\n if (expressIds.has(currentElementId)) {\r\n elementStatus = 'pass'\r\n break\r\n }\r\n }\r\n \r\n // Check if element is in fail map (only if not already found in pass)\r\n if (!elementStatus) {\r\n for (const [modelId, expressIds] of Object.entries(failMap || {})) {\r\n if (expressIds.has(currentElementId)) {\r\n elementStatus = 'fail'\r\n break\r\n }\r\n }\r\n }\r\n \r\n setCurrentElementIdsStatus(elementStatus)\r\n } catch (error) {\r\n setCurrentElementIdsStatus(null)\r\n }\r\n } else {\r\n setCurrentElementIdsStatus(null)\r\n }\r\n }\r\n }, [currentElementId, loadElementProperties, bimComponents, idsEnabled])\r\n\r\n // Close properties panel when a tool becomes active\r\n React.useEffect(() => {\r\n if (currentToolId !== null && isOpen) {\r\n handleOpenChange(false)\r\n }\r\n }, [currentToolId, isOpen, handleOpenChange])\r\n\r\n // Fetch element names when selectedElementIds changes\r\n React.useEffect(() => {\r\n if (selectedElementIds.length > 1) {\r\n getElementNames(selectedElementIds).then(setElementNames)\r\n }\r\n else {\r\n setElementNames({})\r\n }\r\n }, [selectedElementIds, getElementNames])\r\n\r\n // Calculate bottom position for properties panel when IDS is visible\r\n const panelGap = 8 // Gap between panels in pixels (0.5rem)\r\n const propertiesPanelBottom = React.useMemo(() => {\r\n return idsEnabled && idsTestResults && idsLegendHeight > 0\r\n ? `${idsLegendHeight + panelGap + 8}px` // IDS height + gap + margin\r\n : '0.5rem'\r\n }, [idsEnabled, idsTestResults, idsLegendHeight])\r\n\r\n // Handler for IDS legend height changes\r\n const handleIDSHeightChange = React.useCallback((height: number) => {\r\n setIdsLegendHeight(height)\r\n }, [])\r\n\r\n // Render IDS legend component\r\n const idsLegendComponent = React.useMemo(() => {\r\n if (!idsEnabled || !idsTestResults) return null\r\n \r\n return (\r\n <IDSLegend \r\n idsTestResults={idsTestResults} \r\n title={idsTitle}\r\n description={idsDescription}\r\n onClose={handleIDSClose}\r\n onHeightChange={handleIDSHeightChange}\r\n />\r\n )\r\n }, [idsEnabled, idsTestResults, idsTitle, idsDescription, handleIDSClose, handleIDSHeightChange])\r\n\r\n // Don't render properties panel if not open, exiting, or when a tool is active\r\n const propertiesPanelComponent = (isOpen || isExiting) && currentToolId === null && (\r\n <div\r\n className={`fixed right-2 top-2 w-80 z-50 rounded-md bg-background/95 backdrop-blur-sm border shadow-lg pointer-events-auto ${\r\n isExiting\r\n ? 'animate-out slide-out-to-right duration-300'\r\n : 'animate-in slide-in-from-right duration-300'\r\n }`}\r\n style={{\r\n bottom: propertiesPanelBottom,\r\n minWidth: '300px',\r\n resize: 'both',\r\n overflow: 'hidden',\r\n }}\r\n >\r\n <div className=\"flex flex-col h-full p-4 pr-1 \">\r\n <PropertiesMenuHeader\r\n elementName={currentElementName}\r\n onCloseAction={handleManualClose}\r\n idsStatus={currentElementIdsStatus}\r\n />\r\n <div className=\"flex-1 overflow-y-auto space-y-4\">{selectedElementIds.length > 0 && !loading && (\r\n <>\r\n <ElementList\r\n selectedElementIds={selectedElementIds}\r\n currentElementId={currentElementId}\r\n onElementSelectAction={handleElementSelect}\r\n elementNames={elementNames}\r\n />\r\n\r\n {propertyGroups.length > 0 && (\r\n <div className=\"space-y-1\">\r\n {propertyGroups.map(group => (\r\n <PropertyGroup\r\n key={group.id}\r\n group={group}\r\n isExpanded={expandedGroups.has(group.id)}\r\n onToggleAction={toggleGroup}\r\n formatPropertyValueAction={formatPropertyValue}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n\r\n return (\r\n <>\r\n {propertiesPanelComponent}\r\n {idsLegendComponent}\r\n </>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/index.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\n\r\nimport { BimContext, ToolsContext } from '../../../../../store'\r\nimport { Highlighter } from '../Highlighter'\r\nimport { IDSManager } from '../IDSManager'\r\nimport { IDSLegend } from '../IDSManager/src/IDSLegend'\r\n\r\nimport { ElementList } from './src/ElementList'\r\nimport { PropertiesMenuHeader } from './src/PropertiesMenuHeader'\r\nimport { PropertyGroup } from './src/PropertyGroup'\r\nimport { useElementProperties } from './src/useElementProperties'\r\nimport { formatPropertyValue } from './src/utils'\r\n\r\nimport type { PropertyGroup as PropertyGroupType } from './src/utils'\r\n\r\ninterface PropertiesSideBarProps {\r\n open?: boolean\r\n onOpenChangeAction?: (open: boolean) => void\r\n}\r\n\r\n// Hook to get element names for multiple elements\r\nfunction useElementNames(bimComponents: any) {\r\n const { fetchElementProperties } = useElementProperties(bimComponents)\r\n\r\n const getElementName = React.useCallback(async (elementId: number): Promise<string> => {\r\n try {\r\n const { elementName } = await fetchElementProperties(elementId)\r\n return elementName || `Element ${elementId}`\r\n }\r\n catch (error) {\r\n console.error('Error fetching element name:', error)\r\n return `Element ${elementId}`\r\n }\r\n }, [fetchElementProperties])\r\n\r\n const getElementNames = React.useCallback(async (elementIds: number[]): Promise<Record<number, string>> => {\r\n const names: Record<number, string> = {}\r\n\r\n // Fetch names in parallel for better performance\r\n const namePromises = elementIds.map(async (id) => {\r\n const name = await getElementName(id)\r\n return { id, name }\r\n })\r\n\r\n const results = await Promise.allSettled(namePromises)\r\n for (const result of results) {\r\n if (result.status === 'fulfilled') {\r\n names[result.value.id] = result.value.name\r\n }\r\n }\r\n\r\n return names\r\n }, [getElementName])\r\n\r\n return { getElementName, getElementNames }\r\n}\r\n\r\nexport function PropertiesMenu({ open = false, onOpenChangeAction }: PropertiesSideBarProps) {\r\n const { state: bimState } = React.useContext(BimContext)\r\n const { bimComponents } = bimState.bim\r\n const { state: toolsState } = React.useContext(ToolsContext)\r\n const { currentToolId } = toolsState.tools\r\n\r\n const { fetchElementProperties } = useElementProperties(bimComponents)\r\n const { getElementNames } = useElementNames(bimComponents)\r\n const [selectedElementIds, setSelectedElementIds] = React.useState<number[]>([])\r\n const [currentElementId, setCurrentElementId] = React.useState<number | null>(null)\r\n const [currentElementName, setCurrentElementName] = React.useState<string | null>(null)\r\n const [propertyGroups, setPropertyGroups] = React.useState<PropertyGroupType[]>([])\r\n const [expandedGroups, setExpandedGroups] = React.useState<Set<string>>(new Set(['identity-data']))\r\n const [loading, setLoading] = React.useState(false)\r\n const [internalOpen, setInternalOpen] = React.useState(false)\r\n const [elementNames, setElementNames] = React.useState<Record<number, string>>({})\r\n const [hasEverSelectedElement, setHasEverSelectedElement] = React.useState(false)\r\n const [isExiting, setIsExiting] = React.useState(false)\r\n const [idsTestResults, setIdsTestResults] = React.useState<{ passed: number; failed: number } | null>(null)\r\n const [idsEnabled, setIdsEnabled] = React.useState(false)\r\n const [currentElementIdsStatus, setCurrentElementIdsStatus] = React.useState<'pass' | 'fail' | null>(null)\r\n const [idsTitle, setIdsTitle] = React.useState<string>('IDS Verification')\r\n const [idsDescription, setIdsDescription] = React.useState<string>('')\r\n const [idsLegendHeight, setIdsLegendHeight] = React.useState<number>(0)\r\n\r\n // Ref to prevent circular calls between React and ClickHandler\r\n const isInternalCloseRef = React.useRef(false)\r\n\r\n // Use internal state if no external control is provided\r\n const isOpen = onOpenChangeAction ? open : internalOpen\r\n const handleOpenChange = onOpenChangeAction || setInternalOpen\r\n\r\n // Function to toggle group expansion\r\n const toggleGroup = (groupId: string) => {\r\n setExpandedGroups((prev) => {\r\n const newSet = new Set(prev)\r\n if (newSet.has(groupId)) {\r\n newSet.delete(groupId)\r\n }\r\n else {\r\n newSet.add(groupId)\r\n }\r\n return newSet\r\n })\r\n }\r\n\r\n // Function to fetch properties for the current element\r\n const loadElementProperties = React.useCallback(async (localId: number) => {\r\n setLoading(true)\r\n try {\r\n const { groups, elementName } = await fetchElementProperties(localId)\r\n setPropertyGroups(groups)\r\n setCurrentElementName(elementName)\r\n // Reset expanded groups to defaults when element changes\r\n setExpandedGroups(new Set(['identity-data']))\r\n }\r\n catch (error) {\r\n console.error('Error fetching element properties:', error)\r\n setPropertyGroups([])\r\n setCurrentElementName(null)\r\n }\r\n finally {\r\n setLoading(false)\r\n }\r\n }, [fetchElementProperties])\r\n\r\n // Handle closing the properties panel\r\n const handleClose = React.useCallback(() => {\r\n if (!isOpen) {\r\n // If not open, close immediately without animation\r\n setSelectedElementIds([])\r\n setCurrentElementId(null)\r\n setCurrentElementName(null)\r\n setElementNames({})\r\n setHasEverSelectedElement(false)\r\n isInternalCloseRef.current = false\r\n handleOpenChange(false)\r\n return\r\n }\r\n\r\n setIsExiting(true)\r\n // Delay the actual close to allow animation to complete\r\n setTimeout(() => {\r\n setSelectedElementIds([])\r\n setCurrentElementId(null)\r\n setCurrentElementName(null)\r\n setElementNames({})\r\n setHasEverSelectedElement(false)\r\n isInternalCloseRef.current = false\r\n setIsExiting(false)\r\n handleOpenChange(false)\r\n }, 300) // Match animation duration\r\n }, [isOpen, handleOpenChange])\r\n\r\n // Handle manual close (e.g., when user clicks close button)\r\n const handleManualClose = React.useCallback(() => {\r\n isInternalCloseRef.current = true\r\n const highlighter = bimComponents?.get(Highlighter)\r\n if (highlighter) {\r\n highlighter.clearSelection()\r\n }\r\n // Call handleClose directly after clearing selection\r\n handleClose()\r\n }, [bimComponents, handleClose])\r\n\r\n const handleSelectionCleared = React.useCallback(() => {\r\n // Only call handleClose if this is not an internal close operation\r\n if (!isInternalCloseRef.current) {\r\n handleClose()\r\n }\r\n }, [handleClose])\r\n\r\n // Handle selecting a specific element from the list\r\n const handleElementSelect = (elementId: string) => {\r\n const id = Number.parseInt(elementId)\r\n setCurrentElementId(id)\r\n loadElementProperties(id)\r\n }\r\n\r\n // Memoize event handlers to prevent infinite loops\r\n const handleElementsSelected = React.useCallback((elementIds: number[]) => {\r\n setSelectedElementIds(elementIds)\r\n if (elementIds.length > 0) {\r\n setCurrentElementId(elementIds[0])\r\n setHasEverSelectedElement(true)\r\n // Only open properties panel if no tool is currently active\r\n if (currentToolId === null) {\r\n handleOpenChange(true)\r\n }\r\n }\r\n else {\r\n // No elements selected - close the panel\r\n if (hasEverSelectedElement && currentToolId === null) {\r\n handleClose()\r\n }\r\n // If no element has ever been selected or tool is active, do nothing (don't open panel)\r\n }\r\n }, [currentToolId, hasEverSelectedElement, handleOpenChange, handleClose])\r\n\r\n // Handler to close IDS verification\r\n const handleIDSClose = React.useCallback(async () => {\r\n if (!bimComponents) return\r\n try {\r\n const idsManager = bimComponents.get(IDSManager)\r\n await idsManager.reset()\r\n } catch (error) {\r\n console.error('Error closing IDS:', error)\r\n }\r\n }, [bimComponents])\r\n\r\n // Set up IDS Manager listener\r\n React.useEffect(() => {\r\n if (!bimComponents) return\r\n\r\n try {\r\n const idsManager = bimComponents.get(IDSManager)\r\n\r\n const handleIDSTest = ({ totalPassed, totalFailed, title, description }: { totalPassed: number; totalFailed: number; title?: string; description?: string }) => {\r\n setIdsTestResults({ passed: totalPassed, failed: totalFailed })\r\n setIdsTitle(title || 'IDS Verification')\r\n setIdsDescription(description || '')\r\n setIdsEnabled(true)\r\n }\r\n\r\n const handleIDSReset = () => {\r\n setIdsTestResults(null)\r\n setIdsEnabled(false)\r\n setCurrentElementIdsStatus(null)\r\n setIdsTitle('IDS Verification')\r\n setIdsDescription('')\r\n }\r\n\r\n idsManager.onTest.add(handleIDSTest)\r\n idsManager.onReset.add(handleIDSReset)\r\n\r\n // Check if IDS is currently enabled and has results\r\n if (idsManager.enabled) {\r\n setIdsEnabled(true)\r\n // Try to get existing results\r\n const pass = idsManager.pass\r\n const fail = idsManager.fail\r\n if (pass && fail) {\r\n const totalPassed = Object.values(pass).reduce((total, set) => total + set.size, 0)\r\n const totalFailed = Object.values(fail).reduce((total, set) => total + set.size, 0)\r\n if (totalPassed > 0 || totalFailed > 0) {\r\n setIdsTestResults({ passed: totalPassed, failed: totalFailed })\r\n }\r\n }\r\n }\r\n\r\n return () => {\r\n idsManager.onTest.remove(handleIDSTest)\r\n idsManager.onReset.remove(handleIDSReset)\r\n }\r\n } catch (error) {\r\n // IDSManager might not be initialized\r\n return\r\n }\r\n }, [bimComponents])\r\n\r\n // Set up ClickHandler event listener\r\n React.useEffect(() => {\r\n if (!bimComponents) return\r\n\r\n const highlighter = bimComponents.get(Highlighter)\r\n\r\n // Subscribe to the event\r\n highlighter.onElementsSelected.add(handleElementsSelected)\r\n highlighter.onSelectionCleared.add(handleSelectionCleared)\r\n\r\n // Get the currently selected elements if any\r\n const currentlySelected = highlighter.selectedElement\r\n if (currentlySelected && currentlySelected.length > 0 && currentToolId === null) {\r\n setSelectedElementIds(currentlySelected)\r\n setCurrentElementId(currentlySelected[0])\r\n setHasEverSelectedElement(true)\r\n handleOpenChange(true)\r\n }\r\n\r\n // Cleanup on unmount\r\n return () => {\r\n highlighter.onElementsSelected.remove(handleElementsSelected)\r\n highlighter.onSelectionCleared.remove(handleSelectionCleared)\r\n }\r\n }, [bimComponents, handleElementsSelected, handleSelectionCleared, currentToolId, handleOpenChange])\r\n // Fetch properties when currentElementId changes\r\n React.useEffect(() => {\r\n if (currentElementId === null) {\r\n setPropertyGroups([])\r\n setCurrentElementName(null)\r\n setExpandedGroups(new Set())\r\n setCurrentElementIdsStatus(null)\r\n }\r\n else {\r\n loadElementProperties(currentElementId)\r\n\r\n // Check if current element passed or failed IDS test\r\n if (bimComponents && idsEnabled) {\r\n try {\r\n const idsManager = bimComponents.get(IDSManager)\r\n const passMap = idsManager.pass\r\n const failMap = idsManager.fail\r\n\r\n let elementStatus: 'pass' | 'fail' | null = null\r\n\r\n // Check if element is in pass map\r\n for (const [modelId, expressIds] of Object.entries(passMap || {})) {\r\n if (expressIds.has(currentElementId)) {\r\n elementStatus = 'pass'\r\n break\r\n }\r\n }\r\n\r\n // Check if element is in fail map (only if not already found in pass)\r\n if (!elementStatus) {\r\n for (const [modelId, expressIds] of Object.entries(failMap || {})) {\r\n if (expressIds.has(currentElementId)) {\r\n elementStatus = 'fail'\r\n break\r\n }\r\n }\r\n }\r\n\r\n setCurrentElementIdsStatus(elementStatus)\r\n } catch (error) {\r\n setCurrentElementIdsStatus(null)\r\n }\r\n } else {\r\n setCurrentElementIdsStatus(null)\r\n }\r\n }\r\n }, [currentElementId, loadElementProperties, bimComponents, idsEnabled])\r\n\r\n // Close properties panel when a tool becomes active\r\n React.useEffect(() => {\r\n if (currentToolId !== null && isOpen) {\r\n handleOpenChange(false)\r\n }\r\n }, [currentToolId, isOpen, handleOpenChange])\r\n\r\n // Fetch element names when selectedElementIds changes\r\n React.useEffect(() => {\r\n if (selectedElementIds.length > 1) {\r\n getElementNames(selectedElementIds).then(setElementNames)\r\n }\r\n else {\r\n setElementNames({})\r\n }\r\n }, [selectedElementIds, getElementNames])\r\n\r\n // Calculate bottom position for properties panel when IDS is visible\r\n const panelGap = 8 // Gap between panels in pixels (0.5rem)\r\n const propertiesPanelBottom = React.useMemo(() => {\r\n return idsEnabled && idsTestResults && idsLegendHeight > 0\r\n ? `${idsLegendHeight + panelGap + 8}px` // IDS height + gap + margin\r\n : '0.5rem'\r\n }, [idsEnabled, idsTestResults, idsLegendHeight])\r\n\r\n // Handler for IDS legend height changes\r\n const handleIDSHeightChange = React.useCallback((height: number) => {\r\n setIdsLegendHeight(height)\r\n }, [])\r\n\r\n // Render IDS legend component\r\n const idsLegendComponent = React.useMemo(() => {\r\n if (!idsEnabled || !idsTestResults) return null\r\n\r\n return (\r\n <IDSLegend\r\n idsTestResults={idsTestResults}\r\n title={idsTitle}\r\n description={idsDescription}\r\n onClose={handleIDSClose}\r\n onHeightChange={handleIDSHeightChange}\r\n />\r\n )\r\n }, [idsEnabled, idsTestResults, idsTitle, idsDescription, handleIDSClose, handleIDSHeightChange])\r\n\r\n // Don't render properties panel if not open, exiting, or when a tool is active\r\n const propertiesPanelComponent = (isOpen || isExiting) && currentToolId === null && (\r\n <div\r\n className={`fixed right-2 top-2 w-80 z-50 rounded-md bg-background/95 backdrop-blur-sm border shadow-lg pointer-events-auto ${\r\n isExiting\r\n ? 'animate-out slide-out-to-right duration-300'\r\n : 'animate-in slide-in-from-right duration-300'\r\n }`}\r\n style={{\r\n bottom: propertiesPanelBottom,\r\n minWidth: '300px',\r\n resize: 'both',\r\n overflow: 'hidden',\r\n }}\r\n >\r\n <div className=\"flex flex-col h-full p-4 pr-1 \">\r\n <PropertiesMenuHeader\r\n elementName={currentElementName}\r\n onCloseAction={handleManualClose}\r\n idsStatus={currentElementIdsStatus}\r\n />\r\n <div className=\"flex-1 overflow-y-auto space-y-4\">{selectedElementIds.length > 0 && !loading && (\r\n <>\r\n <ElementList\r\n selectedElementIds={selectedElementIds}\r\n currentElementId={currentElementId}\r\n onElementSelectAction={handleElementSelect}\r\n elementNames={elementNames}\r\n />\r\n\r\n {propertyGroups.length > 0 && (\r\n <div className=\"space-y-1\">\r\n {propertyGroups.map(group => (\r\n <PropertyGroup\r\n key={group.id}\r\n group={group}\r\n isExpanded={expandedGroups.has(group.id)}\r\n onToggleAction={toggleGroup}\r\n formatPropertyValueAction={formatPropertyValue}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n\r\n return (\r\n <>\r\n {propertiesPanelComponent}\r\n {idsLegendComponent}\r\n </>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ElementList.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/ElementList.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,UAAU,gBAAgB;IACxB,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC;AAED,wBAAgB,WAAW,CAAC,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,YAAiB,EAAE,EAAE,gBAAgB,qBAgD/H"}
1
+ {"version":3,"file":"ElementList.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/ElementList.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,UAAU,gBAAgB;IACxB,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC;AAED,wBAAgB,WAAW,CAAC,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,YAAiB,EAAE,EAAE,gBAAgB,qBAgD/H"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { useTranslations } from "next-intl";
4
3
  import * as LR from "lucide-react";
4
+ import { useTranslations } from "next-intl";
5
5
  import { Badge } from "../../../../../ui/Badge";
6
6
  import { Separator } from "../../../../../ui/Separator";
7
7
  function ElementList({ selectedElementIds, currentElementId, onElementSelectAction, elementNames = {} }) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/ElementList.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\nimport * as LR from 'lucide-react'\r\nimport { Badge } from '../../../../../ui/Badge'\r\nimport { Separator } from '../../../../../ui/Separator'\r\n\r\ninterface ElementListProps {\r\n selectedElementIds: number[]\r\n currentElementId: number | null\r\n onElementSelectAction: (elementId: string) => void\r\n elementNames?: Record<number, string>\r\n}\r\n\r\nexport function ElementList({ selectedElementIds, currentElementId, onElementSelectAction, elementNames = {} }: ElementListProps) {\r\n // Translation\r\n const t = useTranslations('ElementList')\r\n\r\n if (selectedElementIds.length <= 1) return null\r\n\r\n return (\r\n <div className=\"space-y-3 pr-2\">\r\n <div className=\"flex items-center gap-2\">\r\n <LR.Layers className=\"h-4 w-4\" />\r\n <span className=\"text-sm font-medium\">\r\n {t('selectedElements')}\r\n {' '}\r\n (\r\n {selectedElementIds.length}\r\n )\r\n </span>\r\n </div>\r\n\r\n <div className=\"space-y-2 max-h-32 overflow-y-auto\">\r\n {selectedElementIds.map(elementId => (\r\n <div\r\n key={elementId}\r\n className={`flex items-center justify-between p-2 rounded-md cursor-pointer transition-colors ${\r\n currentElementId === elementId\r\n ? 'bg-primary/10 border border-primary'\r\n : 'bg-muted/50 hover:bg-muted'\r\n }`}\r\n onClick={() => onElementSelectAction(elementId.toString())}\r\n >\r\n <span className=\"text-sm font-medium\">\r\n {elementNames[elementId] || `Element ${elementId}`}\r\n </span>\r\n <div className=\"flex items-center gap-2\">\r\n <Badge variant=\"outline\" className=\"text-xs\">\r\n {elementId}\r\n </Badge>\r\n {currentElementId === elementId && (\r\n <LR.Eye className=\"h-3 w-3 text-primary\" />\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n\r\n <Separator className=\"my-4\" />\r\n </div>\r\n )\r\n}\r\n"],"mappings":";AA2BQ,cACA,YADA;AArBR,SAAS,uBAAuB;AAChC,YAAY,QAAQ;AACpB,SAAS,aAAa;AACtB,SAAS,iBAAiB;AASnB,SAAS,YAAY,EAAE,oBAAoB,kBAAkB,uBAAuB,eAAe,CAAC,EAAE,GAAqB;AAEhI,QAAM,IAAI,gBAAgB,aAAa;AAEvC,MAAI,mBAAmB,UAAU,EAAG,QAAO;AAE3C,SACE,qBAAC,SAAI,WAAU,kBACb;AAAA,yBAAC,SAAI,WAAU,2BACb;AAAA,0BAAC,GAAG,QAAH,EAAU,WAAU,WAAU;AAAA,MAC/B,qBAAC,UAAK,WAAU,uBACb;AAAA,UAAE,kBAAkB;AAAA,QACpB;AAAA,QAAI;AAAA,QAEJ,mBAAmB;AAAA,QAAO;AAAA,SAE7B;AAAA,OACF;AAAA,IAEA,oBAAC,SAAI,WAAU,sCACZ,6BAAmB,IAAI,eACtB;AAAA,MAAC;AAAA;AAAA,QAEC,WAAW,qFACT,qBAAqB,YACjB,wCACA,4BACN;AAAA,QACA,SAAS,MAAM,sBAAsB,UAAU,SAAS,CAAC;AAAA,QAEzD;AAAA,8BAAC,UAAK,WAAU,uBACb,uBAAa,SAAS,KAAK,WAAW,SAAS,IAClD;AAAA,UACA,qBAAC,SAAI,WAAU,2BACb;AAAA,gCAAC,SAAM,SAAQ,WAAU,WAAU,WAChC,qBACH;AAAA,YACC,qBAAqB,aACpB,oBAAC,GAAG,KAAH,EAAO,WAAU,wBAAuB;AAAA,aAE7C;AAAA;AAAA;AAAA,MAlBK;AAAA,IAmBP,CACD,GACH;AAAA,IAEA,oBAAC,aAAU,WAAU,QAAO;AAAA,KAC9B;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/ElementList.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as LR from 'lucide-react'\r\nimport { useTranslations } from 'next-intl'\r\nimport * as React from 'react'\r\n\r\nimport { Badge } from '../../../../../ui/Badge'\r\nimport { Separator } from '../../../../../ui/Separator'\r\n\r\ninterface ElementListProps {\r\n selectedElementIds: number[]\r\n currentElementId: number | null\r\n onElementSelectAction: (elementId: string) => void\r\n elementNames?: Record<number, string>\r\n}\r\n\r\nexport function ElementList({ selectedElementIds, currentElementId, onElementSelectAction, elementNames = {} }: ElementListProps) {\r\n // Translation\r\n const t = useTranslations('ElementList')\r\n\r\n if (selectedElementIds.length <= 1) return null\r\n\r\n return (\r\n <div className=\"space-y-3 pr-2\">\r\n <div className=\"flex items-center gap-2\">\r\n <LR.Layers className=\"h-4 w-4\" />\r\n <span className=\"text-sm font-medium\">\r\n {t('selectedElements')}\r\n {' '}\r\n (\r\n {selectedElementIds.length}\r\n )\r\n </span>\r\n </div>\r\n\r\n <div className=\"space-y-2 max-h-32 overflow-y-auto\">\r\n {selectedElementIds.map(elementId => (\r\n <div\r\n key={elementId}\r\n className={`flex items-center justify-between p-2 rounded-md cursor-pointer transition-colors ${\r\n currentElementId === elementId\r\n ? 'bg-primary/10 border border-primary'\r\n : 'bg-muted/50 hover:bg-muted'\r\n }`}\r\n onClick={() => onElementSelectAction(elementId.toString())}\r\n >\r\n <span className=\"text-sm font-medium\">\r\n {elementNames[elementId] || `Element ${elementId}`}\r\n </span>\r\n <div className=\"flex items-center gap-2\">\r\n <Badge variant=\"outline\" className=\"text-xs\">\r\n {elementId}\r\n </Badge>\r\n {currentElementId === elementId && (\r\n <LR.Eye className=\"h-3 w-3 text-primary\" />\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n\r\n <Separator className=\"my-4\" />\r\n </div>\r\n )\r\n}\r\n"],"mappings":";AA4BQ,cACA,YADA;AAvBR,YAAY,QAAQ;AACpB,SAAS,uBAAuB;AAGhC,SAAS,aAAa;AACtB,SAAS,iBAAiB;AASnB,SAAS,YAAY,EAAE,oBAAoB,kBAAkB,uBAAuB,eAAe,CAAC,EAAE,GAAqB;AAEhI,QAAM,IAAI,gBAAgB,aAAa;AAEvC,MAAI,mBAAmB,UAAU,EAAG,QAAO;AAE3C,SACE,qBAAC,SAAI,WAAU,kBACb;AAAA,yBAAC,SAAI,WAAU,2BACb;AAAA,0BAAC,GAAG,QAAH,EAAU,WAAU,WAAU;AAAA,MAC/B,qBAAC,UAAK,WAAU,uBACb;AAAA,UAAE,kBAAkB;AAAA,QACpB;AAAA,QAAI;AAAA,QAEJ,mBAAmB;AAAA,QAAO;AAAA,SAE7B;AAAA,OACF;AAAA,IAEA,oBAAC,SAAI,WAAU,sCACZ,6BAAmB,IAAI,eACtB;AAAA,MAAC;AAAA;AAAA,QAEC,WAAW,qFACT,qBAAqB,YACjB,wCACA,4BACN;AAAA,QACA,SAAS,MAAM,sBAAsB,UAAU,SAAS,CAAC;AAAA,QAEzD;AAAA,8BAAC,UAAK,WAAU,uBACb,uBAAa,SAAS,KAAK,WAAW,SAAS,IAClD;AAAA,UACA,qBAAC,SAAI,WAAU,2BACb;AAAA,gCAAC,SAAM,SAAQ,WAAU,WAAU,WAChC,qBACH;AAAA,YACC,qBAAqB,aACpB,oBAAC,GAAG,KAAH,EAAO,WAAU,wBAAuB;AAAA,aAE7C;AAAA;AAAA;AAAA,MAlBK;AAAA,IAmBP,CACD,GACH;AAAA,IAEA,oBAAC,aAAU,WAAU,QAAO;AAAA,KAC9B;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"PropertiesMenuHeader.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/PropertiesMenuHeader.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,UAAU,kBAAkB;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;CACnC;AAED,wBAAgB,oBAAoB,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,kBAAkB,qBA4CjG"}
1
+ {"version":3,"file":"PropertiesMenuHeader.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/PropertiesMenuHeader.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,UAAU,kBAAkB;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;CACnC;AAED,wBAAgB,oBAAoB,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,kBAAkB,qBA4CjG"}
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { useTranslations } from "next-intl";
4
3
  import * as LR from "lucide-react";
5
- import { Button } from "../../../../../ui/Button";
4
+ import { useTranslations } from "next-intl";
6
5
  import { Badge } from "../../../../../ui/Badge";
6
+ import { Button } from "../../../../../ui/Button";
7
7
  function PropertiesMenuHeader({ elementName, onCloseAction, idsStatus }) {
8
8
  const t = useTranslations("PropertiesMenuHeader");
9
9
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-start w-full z-50 pointer-events-auto border-b pb-3 mb-4", children: [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/PropertiesMenuHeader.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\nimport * as LR from 'lucide-react'\r\nimport { Button } from '../../../../../ui/Button'\r\nimport { Badge } from '../../../../../ui/Badge'\r\n\r\ninterface SidebarHeaderProps {\r\n elementName: string | null\r\n onCloseAction: () => void\r\n idsStatus?: 'pass' | 'fail' | null\r\n}\r\n\r\nexport function PropertiesMenuHeader({ elementName, onCloseAction, idsStatus }: SidebarHeaderProps) {\r\n // Translation\r\n const t = useTranslations('PropertiesMenuHeader')\r\n\r\n return (\r\n <div className=\"flex flex-col items-start w-full z-50 pointer-events-auto border-b pb-3 mb-4\">\r\n <div className=\"flex items-center justify-between w-full pr-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <Button\r\n onClick={onCloseAction}\r\n className=\"group/sidebar-trigger opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n >\r\n <LR.PanelRightClose className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">{t('closeButton')}</span>\r\n </Button>\r\n <h2 className=\"text-base font-semibold\">{t('header')}</h2>\r\n </div>\r\n {idsStatus && (\r\n <Badge \r\n variant=\"secondary\" \r\n className={`${\r\n idsStatus === 'pass' \r\n ? 'bg-green-100 dark:bg-green-900/40 text-green-700 dark:text-green-300 border-green-200 dark:border-green-800' \r\n : 'bg-red-100 dark:bg-red-900/40 text-red-700 dark:text-red-300 border-red-200 dark:border-red-800'\r\n } flex items-center gap-1.5`}\r\n >\r\n {idsStatus === 'pass' ? (\r\n <LR.Check className=\"h-3 w-3\" />\r\n ) : (\r\n <LR.X className=\"h-3 w-3\" />\r\n )}\r\n IDS {idsStatus === 'pass' ? t('pass') : t('fail')}\r\n </Badge>\r\n )}\r\n </div>\r\n {elementName && (\r\n <span className=\"text-xs text-muted-foreground font-normal truncate mt-2 ml-1\">\r\n {elementName}\r\n </span>\r\n )}\r\n </div>\r\n )\r\n}\r\n"],"mappings":";AAyBU,SAME,KANF;AAnBV,SAAS,uBAAuB;AAChC,YAAY,QAAQ;AACpB,SAAS,cAAc;AACvB,SAAS,aAAa;AAQf,SAAS,qBAAqB,EAAE,aAAa,eAAe,UAAU,GAAuB;AAElG,QAAM,IAAI,gBAAgB,sBAAsB;AAEhD,SACE,qBAAC,SAAI,WAAU,gFACb;AAAA,yBAAC,SAAI,WAAU,iDACb;AAAA,2BAAC,SAAI,WAAU,2BACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS;AAAA,YACT,WAAU;AAAA,YACV,SAAQ;AAAA,YACR,MAAK;AAAA,YAEL;AAAA,kCAAC,GAAG,iBAAH,EAAmB,WAAU,WAAU;AAAA,cACxC,oBAAC,UAAK,WAAU,WAAW,YAAE,aAAa,GAAE;AAAA;AAAA;AAAA,QAC9C;AAAA,QACA,oBAAC,QAAG,WAAU,2BAA2B,YAAE,QAAQ,GAAE;AAAA,SACvD;AAAA,MACC,aACC;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,WAAW,GACT,cAAc,SACV,gHACA,iGACN;AAAA,UAEC;AAAA,0BAAc,SACb,oBAAC,GAAG,OAAH,EAAS,WAAU,WAAU,IAE9B,oBAAC,GAAG,GAAH,EAAK,WAAU,WAAU;AAAA,YAC1B;AAAA,YACG,cAAc,SAAS,EAAE,MAAM,IAAI,EAAE,MAAM;AAAA;AAAA;AAAA,MAClD;AAAA,OAEJ;AAAA,IACC,eACC,oBAAC,UAAK,WAAU,gEACb,uBACH;AAAA,KAEJ;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/PropertiesMenuHeader.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as LR from 'lucide-react'\r\nimport { useTranslations } from 'next-intl'\r\nimport * as React from 'react'\r\n\r\nimport { Badge } from '../../../../../ui/Badge'\r\nimport { Button } from '../../../../../ui/Button'\r\n\r\ninterface SidebarHeaderProps {\r\n elementName: string | null\r\n onCloseAction: () => void\r\n idsStatus?: 'pass' | 'fail' | null\r\n}\r\n\r\nexport function PropertiesMenuHeader({ elementName, onCloseAction, idsStatus }: SidebarHeaderProps) {\r\n // Translation\r\n const t = useTranslations('PropertiesMenuHeader')\r\n\r\n return (\r\n <div className=\"flex flex-col items-start w-full z-50 pointer-events-auto border-b pb-3 mb-4\">\r\n <div className=\"flex items-center justify-between w-full pr-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <Button\r\n onClick={onCloseAction}\r\n className=\"group/sidebar-trigger opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n >\r\n <LR.PanelRightClose className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">{t('closeButton')}</span>\r\n </Button>\r\n <h2 className=\"text-base font-semibold\">{t('header')}</h2>\r\n </div>\r\n {idsStatus && (\r\n <Badge\r\n variant=\"secondary\"\r\n className={`${\r\n idsStatus === 'pass'\r\n ? 'bg-green-100 dark:bg-green-900/40 text-green-700 dark:text-green-300 border-green-200 dark:border-green-800'\r\n : 'bg-red-100 dark:bg-red-900/40 text-red-700 dark:text-red-300 border-red-200 dark:border-red-800'\r\n } flex items-center gap-1.5`}\r\n >\r\n {idsStatus === 'pass' ? (\r\n <LR.Check className=\"h-3 w-3\" />\r\n ) : (\r\n <LR.X className=\"h-3 w-3\" />\r\n )}\r\n IDS {idsStatus === 'pass' ? t('pass') : t('fail')}\r\n </Badge>\r\n )}\r\n </div>\r\n {elementName && (\r\n <span className=\"text-xs text-muted-foreground font-normal truncate mt-2 ml-1\">\r\n {elementName}\r\n </span>\r\n )}\r\n </div>\r\n )\r\n}\r\n"],"mappings":";AA0BU,SAME,KANF;AArBV,YAAY,QAAQ;AACpB,SAAS,uBAAuB;AAGhC,SAAS,aAAa;AACtB,SAAS,cAAc;AAQhB,SAAS,qBAAqB,EAAE,aAAa,eAAe,UAAU,GAAuB;AAElG,QAAM,IAAI,gBAAgB,sBAAsB;AAEhD,SACE,qBAAC,SAAI,WAAU,gFACb;AAAA,yBAAC,SAAI,WAAU,iDACb;AAAA,2BAAC,SAAI,WAAU,2BACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS;AAAA,YACT,WAAU;AAAA,YACV,SAAQ;AAAA,YACR,MAAK;AAAA,YAEL;AAAA,kCAAC,GAAG,iBAAH,EAAmB,WAAU,WAAU;AAAA,cACxC,oBAAC,UAAK,WAAU,WAAW,YAAE,aAAa,GAAE;AAAA;AAAA;AAAA,QAC9C;AAAA,QACA,oBAAC,QAAG,WAAU,2BAA2B,YAAE,QAAQ,GAAE;AAAA,SACvD;AAAA,MACC,aACC;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,WAAW,GACT,cAAc,SACV,gHACA,iGACN;AAAA,UAEC;AAAA,0BAAc,SACb,oBAAC,GAAG,OAAH,EAAS,WAAU,WAAU,IAE9B,oBAAC,GAAG,GAAH,EAAK,WAAU,WAAU;AAAA,YAC1B;AAAA,YACG,cAAc,SAAS,EAAE,MAAM,IAAI,EAAE,MAAM;AAAA;AAAA;AAAA,MAClD;AAAA,OAEJ;AAAA,IACC,eACC,oBAAC,UAAK,WAAU,gEACb,uBACH;AAAA,KAEJ;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyGroup.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/PropertyGroup.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;CACvC;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;IACrB,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,EAAE,EAAE,MAAM,CAAA;CACX;AAED,UAAU,kBAAkB;IAC1B,KAAK,EAAE,aAAa,CAAA;IACpB,UAAU,EAAE,OAAO,CAAA;IACnB,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,yBAAyB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAChF;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,yBAAyB,EAAE,EAAE,kBAAkB,qBAsCjH"}
1
+ {"version":3,"file":"PropertyGroup.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/PropertyGroup.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;CACvC;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;IACrB,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,EAAE,EAAE,MAAM,CAAA;CACX;AAED,UAAU,kBAAkB;IAC1B,KAAK,EAAE,aAAa,CAAA;IACpB,UAAU,EAAE,OAAO,CAAA;IACnB,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,yBAAyB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAChF;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,yBAAyB,EAAE,EAAE,kBAAkB,qBAsCjH"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/PropertyGroup.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport * as LR from 'lucide-react'\r\nimport { Badge } from '../../../../../ui/Badge'\r\nimport { Separator } from '../../../../../ui/Separator'\r\n\r\ninterface ElementProperty {\r\n name: string\r\n value: string | number\r\n type?: 'string' | 'number' | 'boolean'\r\n}\r\n\r\ninterface PropertyGroup {\r\n name: string\r\n icon: React.ReactNode\r\n properties: ElementProperty[]\r\n defaultOpen?: boolean\r\n id: string\r\n}\r\n\r\ninterface PropertyGroupProps {\r\n group: PropertyGroup\r\n isExpanded: boolean\r\n onToggleAction: (groupId: string) => void\r\n formatPropertyValueAction: (value: string | number, groupId?: string) => string\r\n}\r\n\r\nexport function PropertyGroup({ group, isExpanded, onToggleAction, formatPropertyValueAction }: PropertyGroupProps) {\r\n return (\r\n <div className=\"space-y-2 p-3\">\r\n <button\r\n onClick={() => onToggleAction(group.id)}\r\n className=\"flex items-center justify-between w-full pr-2 text-left hover:bg-muted/50 rounded-md transition-colors\"\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n {group.icon}\r\n <span className=\"text-sm font-medium\">{group.name}</span>\r\n <Badge variant=\"outline\" className=\"text-xs\">\r\n {group.properties.length}\r\n </Badge>\r\n </div>\r\n <LR.ChevronDown\r\n className={`h-4 w-4 transition-transform ${isExpanded ? 'rotate-180' : ''}`}\r\n />\r\n </button>\r\n\r\n {isExpanded && (\r\n <div className=\"pl-6 space-y-1\">\r\n {group.properties.map((property, propIndex) => (\r\n <div key={propIndex} className=\"flex flex-wrap items-start gap-x-2 py-1 text-xs\">\r\n <span className=\"text-muted-foreground font-medium flex-shrink-0\">\r\n {property.name}\r\n :\r\n </span>\r\n <span className=\"font-mono text-foreground break-words min-w-0 text-right ml-auto\">\r\n {formatPropertyValueAction(property.value, group.id)}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n <Separator className=\"my-3\" />\r\n </div>\r\n )\r\n}\r\n"],"mappings":";AAsCQ,SAEE,KAFF;AAhCR,YAAY,QAAQ;AACpB,SAAS,aAAa;AACtB,SAAS,iBAAiB;AAuBnB,SAAS,cAAc,EAAE,OAAO,YAAY,gBAAgB,0BAA0B,GAAuB;AAClH,SACE,qBAAC,SAAI,WAAU,iBACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM,eAAe,MAAM,EAAE;AAAA,QACtC,WAAU;AAAA,QAEV;AAAA,+BAAC,SAAI,WAAU,2BACZ;AAAA,kBAAM;AAAA,YACP,oBAAC,UAAK,WAAU,uBAAuB,gBAAM,MAAK;AAAA,YAClD,oBAAC,SAAM,SAAQ,WAAU,WAAU,WAChC,gBAAM,WAAW,QACpB;AAAA,aACF;AAAA,UACA;AAAA,YAAC,GAAG;AAAA,YAAH;AAAA,cACC,WAAW,gCAAgC,aAAa,eAAe,EAAE;AAAA;AAAA,UAC3E;AAAA;AAAA;AAAA,IACF;AAAA,IAEC,cACC,oBAAC,SAAI,WAAU,kBACZ,gBAAM,WAAW,IAAI,CAAC,UAAU,cAC/B,qBAAC,SAAoB,WAAU,mDAC7B;AAAA,2BAAC,UAAK,WAAU,mDACb;AAAA,iBAAS;AAAA,QAAK;AAAA,SAEjB;AAAA,MACA,oBAAC,UAAK,WAAU,oEACb,oCAA0B,SAAS,OAAO,MAAM,EAAE,GACrD;AAAA,SAPQ,SAQV,CACD,GACH;AAAA,IAGF,oBAAC,aAAU,WAAU,QAAO;AAAA,KAC9B;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/PropertyGroup.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as LR from 'lucide-react'\r\nimport * as React from 'react'\r\n\r\nimport { Badge } from '../../../../../ui/Badge'\r\nimport { Separator } from '../../../../../ui/Separator'\r\n\r\ninterface ElementProperty {\r\n name: string\r\n value: string | number\r\n type?: 'string' | 'number' | 'boolean'\r\n}\r\n\r\ninterface PropertyGroup {\r\n name: string\r\n icon: React.ReactNode\r\n properties: ElementProperty[]\r\n defaultOpen?: boolean\r\n id: string\r\n}\r\n\r\ninterface PropertyGroupProps {\r\n group: PropertyGroup\r\n isExpanded: boolean\r\n onToggleAction: (groupId: string) => void\r\n formatPropertyValueAction: (value: string | number, groupId?: string) => string\r\n}\r\n\r\nexport function PropertyGroup({ group, isExpanded, onToggleAction, formatPropertyValueAction }: PropertyGroupProps) {\r\n return (\r\n <div className=\"space-y-2 p-3\">\r\n <button\r\n onClick={() => onToggleAction(group.id)}\r\n className=\"flex items-center justify-between w-full pr-2 text-left hover:bg-muted/50 rounded-md transition-colors\"\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n {group.icon}\r\n <span className=\"text-sm font-medium\">{group.name}</span>\r\n <Badge variant=\"outline\" className=\"text-xs\">\r\n {group.properties.length}\r\n </Badge>\r\n </div>\r\n <LR.ChevronDown\r\n className={`h-4 w-4 transition-transform ${isExpanded ? 'rotate-180' : ''}`}\r\n />\r\n </button>\r\n\r\n {isExpanded && (\r\n <div className=\"pl-6 space-y-1\">\r\n {group.properties.map((property, propIndex) => (\r\n <div key={propIndex} className=\"flex flex-wrap items-start gap-x-2 py-1 text-xs\">\r\n <span className=\"text-muted-foreground font-medium flex-shrink-0\">\r\n {property.name}\r\n :\r\n </span>\r\n <span className=\"font-mono text-foreground break-words min-w-0 text-right ml-auto\">\r\n {formatPropertyValueAction(property.value, group.id)}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n <Separator className=\"my-3\" />\r\n </div>\r\n )\r\n}\r\n"],"mappings":";AAuCQ,SAEE,KAFF;AAlCR,YAAY,QAAQ;AAGpB,SAAS,aAAa;AACtB,SAAS,iBAAiB;AAuBnB,SAAS,cAAc,EAAE,OAAO,YAAY,gBAAgB,0BAA0B,GAAuB;AAClH,SACE,qBAAC,SAAI,WAAU,iBACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM,eAAe,MAAM,EAAE;AAAA,QACtC,WAAU;AAAA,QAEV;AAAA,+BAAC,SAAI,WAAU,2BACZ;AAAA,kBAAM;AAAA,YACP,oBAAC,UAAK,WAAU,uBAAuB,gBAAM,MAAK;AAAA,YAClD,oBAAC,SAAM,SAAQ,WAAU,WAAU,WAChC,gBAAM,WAAW,QACpB;AAAA,aACF;AAAA,UACA;AAAA,YAAC,GAAG;AAAA,YAAH;AAAA,cACC,WAAW,gCAAgC,aAAa,eAAe,EAAE;AAAA;AAAA,UAC3E;AAAA;AAAA;AAAA,IACF;AAAA,IAEC,cACC,oBAAC,SAAI,WAAU,kBACZ,gBAAM,WAAW,IAAI,CAAC,UAAU,cAC/B,qBAAC,SAAoB,WAAU,mDAC7B;AAAA,2BAAC,UAAK,WAAU,mDACb;AAAA,iBAAS;AAAA,QAAK;AAAA,SAEjB;AAAA,MACA,oBAAC,UAAK,WAAU,oEACb,oCAA0B,SAAS,OAAO,MAAM,EAAE,GACrD;AAAA,SAPQ,SAQV,CACD,GACH;AAAA,IAGF,oBAAC,aAAU,WAAU,QAAO;AAAA,KAC9B;AAEJ;","names":[]}
@@ -1,4 +1,4 @@
1
- import { PropertyGroup } from './utils';
1
+ import type { PropertyGroup } from './utils';
2
2
  export declare function useElementProperties(bimComponents: any): {
3
3
  fetchElementProperties: (localId: number) => Promise<{
4
4
  groups: PropertyGroup[];
@@ -1 +1 @@
1
- {"version":3,"file":"useElementProperties.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAmB,aAAa,EAAmB,MAAM,SAAS,CAAA;AAGzE,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,GAAG;sCAiFY,MAAM,KAAG,OAAO,CAAC;QAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;EAyG3I"}
1
+ {"version":3,"file":"useElementProperties.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAmB,aAAa,EAAC,MAAM,SAAS,CAAC;AAI7D,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,GAAG;sCAiFY,MAAM,KAAG,OAAO,CAAC;QAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;EAyG3I"}
@@ -18,10 +18,10 @@ var __spreadValues = (a, b) => {
18
18
  return a;
19
19
  };
20
20
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
- import * as React from "react";
22
21
  import * as OBC from "@thatopen/components";
23
- import { analyzeProperty } from "./utils";
24
22
  import { useTranslations } from "next-intl";
23
+ import * as React from "react";
24
+ import { analyzeProperty } from "./utils";
25
25
  function useElementProperties(bimComponents) {
26
26
  const getElementAttributes = React.useCallback(async (localId, attributes) => {
27
27
  var _a, _b;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport * as OBC from '@thatopen/components'\r\nimport { ElementProperty, PropertyGroup, analyzeProperty } from './utils'\r\nimport { useTranslations } from 'next-intl'\r\n\r\nexport function useElementProperties(bimComponents: any) {\r\n // Function to get element attributes using ThatOpen API\r\n const getElementAttributes = React.useCallback(async (localId: number, attributes?: string[]) => {\r\n if (!bimComponents) return null\r\n\r\n const fragments = bimComponents.get(OBC.FragmentsManager)\r\n if (!fragments?.core?.models?.list) return null\r\n const models = [...fragments.core.models.list.values()]; for (const model of models) {\r\n try {\r\n const [data] = await (model as any).getItemsData([localId], {\r\n attributesDefault: !attributes,\r\n attributes,\r\n })\r\n\r\n if (data) return data\r\n }\r\n catch {\r\n continue\r\n }\r\n }\r\n\r\n return null\r\n }, [bimComponents])\r\n\r\n // Function to get element property sets using ThatOpen API\r\n const getElementPropertySets = React.useCallback(async (localId: number) => {\r\n if (!bimComponents) return null\r\n\r\n const fragments = bimComponents.get(OBC.FragmentsManager)\r\n if (!fragments?.core?.models?.list) return null\r\n const models = [...fragments.core.models.list.values()]; for (const model of models) {\r\n try {\r\n const [data] = await (model as any).getItemsData([localId], {\r\n attributesDefault: false,\r\n attributes: ['Name', 'NominalValue'],\r\n relations: {\r\n IsDefinedBy: { attributes: true, relations: true },\r\n DefinesOcurrence: { attributes: false, relations: false },\r\n },\r\n })\r\n\r\n if (data?.IsDefinedBy) {\r\n return data.IsDefinedBy\r\n }\r\n }\r\n catch {\r\n continue\r\n }\r\n }\r\n\r\n return null\r\n }, [bimComponents])\r\n\r\n // Function to format property sets into a more usable format\r\n const formatPropertySets = React.useCallback((rawPsets: any[]) => {\r\n const result: Record<string, Record<string, any>> = {}\r\n\r\n for (const [_, pset] of rawPsets.entries()) {\r\n const { Name: psetName, HasProperties } = pset\r\n if (!('value' in psetName && Array.isArray(HasProperties))) continue\r\n\r\n const props: Record<string, any> = {}\r\n for (const [_, prop] of HasProperties.entries()) {\r\n const { Name, NominalValue } = prop\r\n if (!('value' in Name && 'value' in NominalValue)) continue\r\n\r\n const name = Name.value\r\n const nominalValue = NominalValue.value\r\n if (!(name && nominalValue !== undefined)) continue\r\n\r\n props[name] = nominalValue\r\n }\r\n\r\n result[psetName.value] = props\r\n }\r\n\r\n return result\r\n }, [])\r\n\r\n // Function to fetch element properties from ThatOpen model\r\n const t = useTranslations('analyzeProperty')\r\n const fetchElementProperties = React.useCallback(async (localId: number): Promise<{ groups: PropertyGroup[], elementName: string | null }> => {\r\n try {\r\n const allProperties: ElementProperty[] = []\r\n\r\n // Add local ID for reference\r\n allProperties.push({\r\n name: 'LocalId',\r\n value: localId,\r\n type: 'number',\r\n })\r\n\r\n // Get basic attributes\r\n const attributes = await getElementAttributes(localId)\r\n if (attributes) {\r\n for (const [key, attr] of Object.entries(attributes)) {\r\n if (attr && typeof attr === 'object' && 'value' in attr && (attr as any).value !== undefined && (attr as any).value !== null) {\r\n allProperties.push({\r\n name: key,\r\n value: (attr as any).value as string | number,\r\n type: typeof (attr as any).value as 'string' | 'number',\r\n })\r\n }\r\n }\r\n }\r\n\r\n // Get property sets\r\n const rawPsets = await getElementPropertySets(localId)\r\n if (rawPsets && Array.isArray(rawPsets)) {\r\n const formattedPsets = formatPropertySets(rawPsets)\r\n\r\n for (const [psetName, psetProps] of Object.entries(formattedPsets)) {\r\n for (const [propName, propValue] of Object.entries(psetProps)) {\r\n allProperties.push({\r\n name: `${psetName}.${propName}`,\r\n value: propValue,\r\n type: typeof propValue as 'string' | 'number',\r\n })\r\n }\r\n }\r\n }\r\n\r\n // Group properties dynamically\r\n const groupMap = new Map<string, {\r\n id: string\r\n name: string\r\n icon: React.ReactNode\r\n properties: ElementProperty[]\r\n defaultOpen: boolean\r\n }>()\r\n\r\n for (const property of allProperties) {\r\n const { cleanName, groupId, groupName, icon } = analyzeProperty(property.name, property.value, t)\r\n\r\n if (!groupMap.has(groupId)) {\r\n groupMap.set(groupId, {\r\n id: groupId,\r\n name: groupName,\r\n icon: icon,\r\n properties: [],\r\n defaultOpen: ['identity-data'].includes(groupId),\r\n })\r\n }\r\n\r\n const group = groupMap.get(groupId)!\r\n const isDuplicate = group.properties.some(existingProp =>\r\n existingProp.name === cleanName && existingProp.value === property.value,\r\n )\r\n\r\n if (!isDuplicate) {\r\n group.properties.push({ ...property, name: cleanName })\r\n }\r\n }\r\n\r\n // Convert to array and sort groups by priority\r\n const groupPriority: Record<string, number> = {\r\n 'identity-data': 1,\r\n 'dimensions': 2,\r\n 'materials': 3,\r\n 'geometry': 4,\r\n 'constraints': 5,\r\n 'phasing': 6,\r\n }\r\n\r\n const groups = [...groupMap.values()].sort((a, b) => {\r\n const priorityA = groupPriority[a.id] || 999\r\n const priorityB = groupPriority[b.id] || 999\r\n return priorityA - priorityB || a.name.localeCompare(b.name)\r\n })\r\n\r\n // Extract element name from properties\r\n const nameProperty = allProperties.find(prop =>\r\n prop.name.toLowerCase() === 'name'\r\n || prop.name.toLowerCase().includes('name'),\r\n )\r\n const elementName = nameProperty ? String(nameProperty.value) : null\r\n\r\n return { groups, elementName }\r\n }\r\n catch (error) {\r\n console.error('Error fetching element properties:', error)\r\n return { groups: [], elementName: null }\r\n }\r\n }, [getElementAttributes, getElementPropertySets, formatPropertySets, t])\r\n\r\n return { fetchElementProperties }\r\n}\r\n"],"mappings":"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","names":["_"]}
1
+ {"version":3,"sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as OBC from '@thatopen/components'\r\nimport { useTranslations } from 'next-intl'\r\nimport * as React from 'react'\r\n\r\nimport { analyzeProperty } from './utils'\r\n\r\nimport type { ElementProperty, PropertyGroup} from './utils';\r\n\r\n\r\n\r\nexport function useElementProperties(bimComponents: any) {\r\n // Function to get element attributes using ThatOpen API\r\n const getElementAttributes = React.useCallback(async (localId: number, attributes?: string[]) => {\r\n if (!bimComponents) return null\r\n\r\n const fragments = bimComponents.get(OBC.FragmentsManager)\r\n if (!fragments?.core?.models?.list) return null\r\n const models = [...fragments.core.models.list.values()]; for (const model of models) {\r\n try {\r\n const [data] = await (model as any).getItemsData([localId], {\r\n attributesDefault: !attributes,\r\n attributes,\r\n })\r\n\r\n if (data) return data\r\n }\r\n catch {\r\n continue\r\n }\r\n }\r\n\r\n return null\r\n }, [bimComponents])\r\n\r\n // Function to get element property sets using ThatOpen API\r\n const getElementPropertySets = React.useCallback(async (localId: number) => {\r\n if (!bimComponents) return null\r\n\r\n const fragments = bimComponents.get(OBC.FragmentsManager)\r\n if (!fragments?.core?.models?.list) return null\r\n const models = [...fragments.core.models.list.values()]; for (const model of models) {\r\n try {\r\n const [data] = await (model as any).getItemsData([localId], {\r\n attributesDefault: false,\r\n attributes: ['Name', 'NominalValue'],\r\n relations: {\r\n IsDefinedBy: { attributes: true, relations: true },\r\n DefinesOcurrence: { attributes: false, relations: false },\r\n },\r\n })\r\n\r\n if (data?.IsDefinedBy) {\r\n return data.IsDefinedBy\r\n }\r\n }\r\n catch {\r\n continue\r\n }\r\n }\r\n\r\n return null\r\n }, [bimComponents])\r\n\r\n // Function to format property sets into a more usable format\r\n const formatPropertySets = React.useCallback((rawPsets: any[]) => {\r\n const result: Record<string, Record<string, any>> = {}\r\n\r\n for (const [_, pset] of rawPsets.entries()) {\r\n const { Name: psetName, HasProperties } = pset\r\n if (!('value' in psetName && Array.isArray(HasProperties))) continue\r\n\r\n const props: Record<string, any> = {}\r\n for (const [_, prop] of HasProperties.entries()) {\r\n const { Name, NominalValue } = prop\r\n if (!('value' in Name && 'value' in NominalValue)) continue\r\n\r\n const name = Name.value\r\n const nominalValue = NominalValue.value\r\n if (!(name && nominalValue !== undefined)) continue\r\n\r\n props[name] = nominalValue\r\n }\r\n\r\n result[psetName.value] = props\r\n }\r\n\r\n return result\r\n }, [])\r\n\r\n // Function to fetch element properties from ThatOpen model\r\n const t = useTranslations('analyzeProperty')\r\n const fetchElementProperties = React.useCallback(async (localId: number): Promise<{ groups: PropertyGroup[], elementName: string | null }> => {\r\n try {\r\n const allProperties: ElementProperty[] = []\r\n\r\n // Add local ID for reference\r\n allProperties.push({\r\n name: 'LocalId',\r\n value: localId,\r\n type: 'number',\r\n })\r\n\r\n // Get basic attributes\r\n const attributes = await getElementAttributes(localId)\r\n if (attributes) {\r\n for (const [key, attr] of Object.entries(attributes)) {\r\n if (attr && typeof attr === 'object' && 'value' in attr && (attr as any).value !== undefined && (attr as any).value !== null) {\r\n allProperties.push({\r\n name: key,\r\n value: (attr as any).value as string | number,\r\n type: typeof (attr as any).value as 'string' | 'number',\r\n })\r\n }\r\n }\r\n }\r\n\r\n // Get property sets\r\n const rawPsets = await getElementPropertySets(localId)\r\n if (rawPsets && Array.isArray(rawPsets)) {\r\n const formattedPsets = formatPropertySets(rawPsets)\r\n\r\n for (const [psetName, psetProps] of Object.entries(formattedPsets)) {\r\n for (const [propName, propValue] of Object.entries(psetProps)) {\r\n allProperties.push({\r\n name: `${psetName}.${propName}`,\r\n value: propValue,\r\n type: typeof propValue as 'string' | 'number',\r\n })\r\n }\r\n }\r\n }\r\n\r\n // Group properties dynamically\r\n const groupMap = new Map<string, {\r\n id: string\r\n name: string\r\n icon: React.ReactNode\r\n properties: ElementProperty[]\r\n defaultOpen: boolean\r\n }>()\r\n\r\n for (const property of allProperties) {\r\n const { cleanName, groupId, groupName, icon } = analyzeProperty(property.name, property.value, t)\r\n\r\n if (!groupMap.has(groupId)) {\r\n groupMap.set(groupId, {\r\n id: groupId,\r\n name: groupName,\r\n icon: icon,\r\n properties: [],\r\n defaultOpen: ['identity-data'].includes(groupId),\r\n })\r\n }\r\n\r\n const group = groupMap.get(groupId)!\r\n const isDuplicate = group.properties.some(existingProp =>\r\n existingProp.name === cleanName && existingProp.value === property.value,\r\n )\r\n\r\n if (!isDuplicate) {\r\n group.properties.push({ ...property, name: cleanName })\r\n }\r\n }\r\n\r\n // Convert to array and sort groups by priority\r\n const groupPriority: Record<string, number> = {\r\n 'identity-data': 1,\r\n 'dimensions': 2,\r\n 'materials': 3,\r\n 'geometry': 4,\r\n 'constraints': 5,\r\n 'phasing': 6,\r\n }\r\n\r\n const groups = [...groupMap.values()].sort((a, b) => {\r\n const priorityA = groupPriority[a.id] || 999\r\n const priorityB = groupPriority[b.id] || 999\r\n return priorityA - priorityB || a.name.localeCompare(b.name)\r\n })\r\n\r\n // Extract element name from properties\r\n const nameProperty = allProperties.find(prop =>\r\n prop.name.toLowerCase() === 'name'\r\n || prop.name.toLowerCase().includes('name'),\r\n )\r\n const elementName = nameProperty ? String(nameProperty.value) : null\r\n\r\n return { groups, elementName }\r\n }\r\n catch (error) {\r\n console.error('Error fetching element properties:', error)\r\n return { groups: [], elementName: null }\r\n }\r\n }, [getElementAttributes, getElementPropertySets, formatPropertySets, t])\r\n\r\n return { fetchElementProperties }\r\n}\r\n"],"mappings":"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","names":["_"]}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/utils.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;CACvC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;IACrB,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,EAAE,EAAE,MAAM,CAAA;CACX;AAGD,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,GAAG,MAAM,EAAE,UAAU,MAAM,KAAG,MAgB9E,CAAA;AAGD,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAChB,OAAO,MAAM,GAAG,MAAM,EACtB,IAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAiB;;;;;CA+DtC,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/utils.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;CACvC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;IACrB,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,EAAE,EAAE,MAAM,CAAA;CACX;AAGD,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,GAAG,MAAM,EAAE,UAAU,MAAM,KAAG,MAgB9E,CAAA;AAGD,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAChB,OAAO,MAAM,GAAG,MAAM,EACtB,IAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAiB;;;;;CA+DtC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/utils.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport * as LR from 'lucide-react'\r\n\r\nexport interface ElementProperty {\r\n name: string\r\n value: string | number\r\n type?: 'string' | 'number' | 'boolean'\r\n}\r\n\r\nexport interface PropertyGroup {\r\n name: string\r\n icon: React.ReactNode\r\n properties: ElementProperty[]\r\n defaultOpen?: boolean\r\n id: string\r\n}\r\n\r\n// Function to format property values\r\nexport const formatPropertyValue = (value: string | number, groupId?: string): string => {\r\n if (typeof value === 'number') {\r\n if (groupId === 'dimensions') {\r\n return value.toFixed(2)\r\n }\r\n return value % 1 === 0 ? value.toString() : value.toString()\r\n }\r\n\r\n const numValue = Number.parseFloat(value as string)\r\n if (!isNaN(numValue) && isFinite(numValue)) {\r\n if (groupId === 'dimensions') {\r\n return numValue.toFixed(2)\r\n }\r\n return numValue % 1 === 0 ? numValue.toString() : numValue.toString()\r\n }\r\n return value as string\r\n}\r\n\r\n// Function to analyze property and determine group\r\nexport const analyzeProperty = (\r\n fullName: string,\r\n value: string | number,\r\n t: (key: string) => string = (k) => k,\r\n) => {\r\n let cleanName = fullName\r\n let groupId = 'other'\r\n let groupName = t('other')\r\n let icon = <LR.HelpCircle className=\"h-4 w-4\" />\r\n\r\n // Extract clean name\r\n if (fullName.includes('.')) {\r\n const [, ...rest] = fullName.split('.')\r\n cleanName = rest.join('.')\r\n }\r\n\r\n if (cleanName.startsWith('_')) {\r\n cleanName = cleanName.slice(1)\r\n cleanName = cleanName.replaceAll(/\\b\\w/g, char => char.toUpperCase())\r\n cleanName = cleanName.replaceAll(/\\s+(.)/g, (_, char) => char.toUpperCase())\r\n }\r\n\r\n const cleanNameLower = cleanName.toLowerCase()\r\n const fullNameLower = fullName.toLowerCase()\r\n\r\n // Determine group based on property name\r\n if (['name', 'globalid', 'tag', 'localid', 'id', 'guid', 'ifcguid', 'type', 'category', 'objecttype', 'description', 'predefinedtype', 'class'].some(term =>\r\n cleanNameLower.includes(term) || fullNameLower.includes(term))) {\r\n groupId = 'identity-data'\r\n groupName = t('identity')\r\n icon = <LR.User2 className=\"h-4 w-4\" />\r\n }\r\n else if (['length', 'width', 'height', 'area', 'volume', 'thickness', 'radius', 'diameter', 'size', 'dimension'].some(dim =>\r\n cleanNameLower.includes(dim) || fullNameLower.includes(dim))) {\r\n groupId = 'dimensions'\r\n groupName = t('dimensions')\r\n icon = <LR.Ruler className=\"h-4 w-4\" />\r\n }\r\n else if (['material'].some(term => cleanNameLower.includes(term) || fullNameLower.includes(term))) {\r\n groupId = 'materials'\r\n groupName = t('materials')\r\n icon = <LR.Palette className=\"h-4 w-4\" />\r\n }\r\n else if (['geom', 'shape'].some(term => cleanNameLower.includes(term) || fullNameLower.includes(term))) {\r\n groupId = 'geometry'\r\n groupName = t('geometry')\r\n icon = <LR.Box className=\"h-4 w-4\" />\r\n }\r\n else if (['constraint', 'limit'].some(term => cleanNameLower.includes(term) || fullNameLower.includes(term))) {\r\n groupId = 'constraints'\r\n groupName = t('constraints')\r\n icon = <LR.Lock className=\"h-4 w-4\" />\r\n }\r\n else if (['createdby', 'creationdate', 'lastmodifiedby', 'lastmodifyingdate', 'phase', 'status'].some(term =>\r\n cleanNameLower.includes(term) || fullNameLower.includes(term))) {\r\n groupId = 'phasing'\r\n groupName = t('phasing')\r\n icon = <LR.Clock className=\"h-4 w-4\" />\r\n }\r\n else if (fullNameLower.startsWith('pset_')) {\r\n groupId = 'property-sets'\r\n groupName = t('propertySets')\r\n icon = <LR.ListChecks className=\"h-4 w-4\" />\r\n }\r\n\r\n return { cleanName, groupId, groupName, icon }\r\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/utils.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as LR from 'lucide-react'\r\nimport * as React from 'react'\r\n\r\nexport interface ElementProperty {\r\n name: string\r\n value: string | number\r\n type?: 'string' | 'number' | 'boolean'\r\n}\r\n\r\nexport interface PropertyGroup {\r\n name: string\r\n icon: React.ReactNode\r\n properties: ElementProperty[]\r\n defaultOpen?: boolean\r\n id: string\r\n}\r\n\r\n// Function to format property values\r\nexport const formatPropertyValue = (value: string | number, groupId?: string): string => {\r\n if (typeof value === 'number') {\r\n if (groupId === 'dimensions') {\r\n return value.toFixed(2)\r\n }\r\n return value % 1 === 0 ? value.toString() : value.toString()\r\n }\r\n\r\n const numValue = Number.parseFloat(value as string)\r\n if (!isNaN(numValue) && isFinite(numValue)) {\r\n if (groupId === 'dimensions') {\r\n return numValue.toFixed(2)\r\n }\r\n return numValue % 1 === 0 ? numValue.toString() : numValue.toString()\r\n }\r\n return value as string\r\n}\r\n\r\n// Function to analyze property and determine group\r\nexport const analyzeProperty = (\r\n fullName: string,\r\n value: string | number,\r\n t: (key: string) => string = (k) => k,\r\n) => {\r\n let cleanName = fullName\r\n let groupId = 'other'\r\n let groupName = t('other')\r\n let icon = <LR.HelpCircle className=\"h-4 w-4\" />\r\n\r\n // Extract clean name\r\n if (fullName.includes('.')) {\r\n const [, ...rest] = fullName.split('.')\r\n cleanName = rest.join('.')\r\n }\r\n\r\n if (cleanName.startsWith('_')) {\r\n cleanName = cleanName.slice(1)\r\n cleanName = cleanName.replaceAll(/\\b\\w/g, char => char.toUpperCase())\r\n cleanName = cleanName.replaceAll(/\\s+(.)/g, (_, char) => char.toUpperCase())\r\n }\r\n\r\n const cleanNameLower = cleanName.toLowerCase()\r\n const fullNameLower = fullName.toLowerCase()\r\n\r\n // Determine group based on property name\r\n if (['name', 'globalid', 'tag', 'localid', 'id', 'guid', 'ifcguid', 'type', 'category', 'objecttype', 'description', 'predefinedtype', 'class'].some(term =>\r\n cleanNameLower.includes(term) || fullNameLower.includes(term))) {\r\n groupId = 'identity-data'\r\n groupName = t('identity')\r\n icon = <LR.User2 className=\"h-4 w-4\" />\r\n }\r\n else if (['length', 'width', 'height', 'area', 'volume', 'thickness', 'radius', 'diameter', 'size', 'dimension'].some(dim =>\r\n cleanNameLower.includes(dim) || fullNameLower.includes(dim))) {\r\n groupId = 'dimensions'\r\n groupName = t('dimensions')\r\n icon = <LR.Ruler className=\"h-4 w-4\" />\r\n }\r\n else if (['material'].some(term => cleanNameLower.includes(term) || fullNameLower.includes(term))) {\r\n groupId = 'materials'\r\n groupName = t('materials')\r\n icon = <LR.Palette className=\"h-4 w-4\" />\r\n }\r\n else if (['geom', 'shape'].some(term => cleanNameLower.includes(term) || fullNameLower.includes(term))) {\r\n groupId = 'geometry'\r\n groupName = t('geometry')\r\n icon = <LR.Box className=\"h-4 w-4\" />\r\n }\r\n else if (['constraint', 'limit'].some(term => cleanNameLower.includes(term) || fullNameLower.includes(term))) {\r\n groupId = 'constraints'\r\n groupName = t('constraints')\r\n icon = <LR.Lock className=\"h-4 w-4\" />\r\n }\r\n else if (['createdby', 'creationdate', 'lastmodifiedby', 'lastmodifyingdate', 'phase', 'status'].some(term =>\r\n cleanNameLower.includes(term) || fullNameLower.includes(term))) {\r\n groupId = 'phasing'\r\n groupName = t('phasing')\r\n icon = <LR.Clock className=\"h-4 w-4\" />\r\n }\r\n else if (fullNameLower.startsWith('pset_')) {\r\n groupId = 'property-sets'\r\n groupName = t('propertySets')\r\n icon = <LR.ListChecks className=\"h-4 w-4\" />\r\n }\r\n\r\n return { cleanName, groupId, groupName, icon }\r\n}\r\n"],"mappings":"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","names":[]}