@collabdt/core 0.0.50 → 0.0.53

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 (1008) hide show
  1. package/NOTICE +1021 -0
  2. package/README.md +32 -4
  3. package/dist/core/components/AppSidebarContent.d.ts.map +1 -1
  4. package/dist/core/components/AppSidebarContent.js.map +1 -1
  5. package/dist/core/components/ConfirmDialog.d.ts.map +1 -1
  6. package/dist/core/components/ConfirmDialog.js.map +1 -1
  7. package/dist/core/components/DataTableSkeleton.d.ts.map +1 -1
  8. package/dist/core/components/DataTableSkeleton.js.map +1 -1
  9. package/dist/core/components/LanguageSwitch.d.ts.map +1 -1
  10. package/dist/core/components/LanguageSwitch.js.map +1 -1
  11. package/dist/core/components/Logo.d.ts.map +1 -1
  12. package/dist/core/components/Logo.js.map +1 -1
  13. package/dist/core/components/Toolbar.d.ts.map +1 -1
  14. package/dist/core/components/Toolbar.js.map +1 -1
  15. package/dist/core/components/ToolbarBody.d.ts.map +1 -1
  16. package/dist/core/components/ToolbarBody.js.map +1 -1
  17. package/dist/core/components/ToolbarSubmenu.d.ts.map +1 -1
  18. package/dist/core/components/ToolbarSubmenu.js.map +1 -1
  19. package/dist/core/components/TopNavigationBar.d.ts.map +1 -1
  20. package/dist/core/components/TopNavigationBar.js.map +1 -1
  21. package/dist/core/components/authentication/AuthPage.d.ts.map +1 -1
  22. package/dist/core/components/authentication/AuthPage.js.map +1 -1
  23. package/dist/core/components/authentication/ForgotPassword.d.ts.map +1 -1
  24. package/dist/core/components/authentication/ForgotPassword.js.map +1 -1
  25. package/dist/core/components/authentication/PasswordError.d.ts.map +1 -1
  26. package/dist/core/components/authentication/PasswordError.js.map +1 -1
  27. package/dist/core/components/authentication/Signin.d.ts.map +1 -1
  28. package/dist/core/components/authentication/Signin.js.map +1 -1
  29. package/dist/core/components/authentication/SigninEmail.d.ts.map +1 -1
  30. package/dist/core/components/authentication/SigninEmail.js.map +1 -1
  31. package/dist/core/components/authentication/Signup.d.ts.map +1 -1
  32. package/dist/core/components/authentication/Signup.js.map +1 -1
  33. package/dist/core/components/authentication/VerifyEmail.d.ts.map +1 -1
  34. package/dist/core/components/authentication/VerifyEmail.js.map +1 -1
  35. package/dist/core/components/authentication/index.d.ts.map +1 -1
  36. package/dist/core/components/authentication/index.js.map +1 -1
  37. package/dist/core/components/index.d.ts +1 -0
  38. package/dist/core/components/index.d.ts.map +1 -1
  39. package/dist/core/components/index.js +1 -0
  40. package/dist/core/components/index.js.map +1 -1
  41. package/dist/core/components/instance-not-found/index.d.ts.map +1 -1
  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.map +1 -1
  45. package/dist/core/components/organizationConfig/index.d.ts +2 -0
  46. package/dist/core/components/organizationConfig/index.d.ts.map +1 -0
  47. package/dist/core/components/organizationConfig/index.js +66 -0
  48. package/dist/core/components/organizationConfig/index.js.map +1 -0
  49. package/dist/core/components/organizationConfig/src/organizationConfigContent.d.ts +2 -0
  50. package/dist/core/components/organizationConfig/src/organizationConfigContent.d.ts.map +1 -0
  51. package/dist/core/components/organizationConfig/src/organizationConfigContent.js +229 -0
  52. package/dist/core/components/organizationConfig/src/organizationConfigContent.js.map +1 -0
  53. package/dist/core/components/settings/index.d.ts.map +1 -1
  54. package/dist/core/components/settings/index.js.map +1 -1
  55. package/dist/core/components/settings/src/AccountSettingsPanel.d.ts.map +1 -1
  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.map +1 -1
  59. package/dist/core/components/settings/src/OrganizationSettingsPanel.d.ts.map +1 -1
  60. package/dist/core/components/settings/src/OrganizationSettingsPanel.js.map +1 -1
  61. package/dist/core/components/settings/src/OrganizationSkeleton.d.ts.map +1 -1
  62. package/dist/core/components/settings/src/OrganizationSkeleton.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.map +1 -1
  65. package/dist/core/components/settings/src/SettingsHeader.d.ts.map +1 -1
  66. package/dist/core/components/settings/src/SettingsHeader.js.map +1 -1
  67. package/dist/core/components/settings/src/SettingsSidebar.d.ts.map +1 -1
  68. package/dist/core/components/settings/src/SettingsSidebar.js.map +1 -1
  69. package/dist/core/components/settings/src/SettingsSkeleton.d.ts.map +1 -1
  70. package/dist/core/components/settings/src/SettingsSkeleton.js.map +1 -1
  71. package/dist/core/components/settings/src/UsersSettingsPanel.d.ts.map +1 -1
  72. package/dist/core/components/settings/src/UsersSettingsPanel.js.map +1 -1
  73. package/dist/core/components/settings/src/types.d.ts.map +1 -1
  74. package/dist/core/components/ui/Accordion.d.ts.map +1 -1
  75. package/dist/core/components/ui/Accordion.js.map +1 -1
  76. package/dist/core/components/ui/AddItemDialog.d.ts.map +1 -1
  77. package/dist/core/components/ui/AddItemDialog.js.map +1 -1
  78. package/dist/core/components/ui/AlertDialog.d.ts.map +1 -1
  79. package/dist/core/components/ui/AlertDialog.js.map +1 -1
  80. package/dist/core/components/ui/AnimatedBackground.d.ts.map +1 -1
  81. package/dist/core/components/ui/AnimatedBackground.js.map +1 -1
  82. package/dist/core/components/ui/AppSidebar.d.ts.map +1 -1
  83. package/dist/core/components/ui/AppSidebar.js +30 -15
  84. package/dist/core/components/ui/AppSidebar.js.map +1 -1
  85. package/dist/core/components/ui/Avatar.d.ts.map +1 -1
  86. package/dist/core/components/ui/Avatar.js.map +1 -1
  87. package/dist/core/components/ui/Badge.d.ts.map +1 -1
  88. package/dist/core/components/ui/Badge.js.map +1 -1
  89. package/dist/core/components/ui/Breadcrumb.d.ts.map +1 -1
  90. package/dist/core/components/ui/Breadcrumb.js.map +1 -1
  91. package/dist/core/components/ui/Button.d.ts.map +1 -1
  92. package/dist/core/components/ui/Button.js.map +1 -1
  93. package/dist/core/components/ui/Calendar.d.ts.map +1 -1
  94. package/dist/core/components/ui/Calendar.js.map +1 -1
  95. package/dist/core/components/ui/Card.d.ts.map +1 -1
  96. package/dist/core/components/ui/Card.js.map +1 -1
  97. package/dist/core/components/ui/Checkbox.d.ts.map +1 -1
  98. package/dist/core/components/ui/Checkbox.js.map +1 -1
  99. package/dist/core/components/ui/CollapsibleSection.d.ts.map +1 -1
  100. package/dist/core/components/ui/CollapsibleSection.js.map +1 -1
  101. package/dist/core/components/ui/ColorCircle.d.ts.map +1 -1
  102. package/dist/core/components/ui/ColorCircle.js.map +1 -1
  103. package/dist/core/components/ui/Command.d.ts.map +1 -1
  104. package/dist/core/components/ui/Command.js.map +1 -1
  105. package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts.map +1 -1
  106. package/dist/core/components/ui/Comments/CollapsibleCommentItem.js.map +1 -1
  107. package/dist/core/components/ui/Comments/Comment.d.ts.map +1 -1
  108. package/dist/core/components/ui/Comments/Comment.js.map +1 -1
  109. package/dist/core/components/ui/Comments/CommentInput.d.ts.map +1 -1
  110. package/dist/core/components/ui/Comments/CommentInput.js.map +1 -1
  111. package/dist/core/components/ui/Comments/CommentsSection.d.ts.map +1 -1
  112. package/dist/core/components/ui/Comments/CommentsSection.js.map +1 -1
  113. package/dist/core/components/ui/Comments/commentUtils.d.ts.map +1 -1
  114. package/dist/core/components/ui/Comments/commentUtils.js.map +1 -1
  115. package/dist/core/components/ui/Countdown.d.ts.map +1 -1
  116. package/dist/core/components/ui/Countdown.js.map +1 -1
  117. package/dist/core/components/ui/DataTable.d.ts.map +1 -1
  118. package/dist/core/components/ui/DataTable.js.map +1 -1
  119. package/dist/core/components/ui/DatePicker.d.ts.map +1 -1
  120. package/dist/core/components/ui/DatePicker.js.map +1 -1
  121. package/dist/core/components/ui/DescriptionList.d.ts.map +1 -1
  122. package/dist/core/components/ui/DescriptionList.js.map +1 -1
  123. package/dist/core/components/ui/Dialog.d.ts.map +1 -1
  124. package/dist/core/components/ui/Dialog.js.map +1 -1
  125. package/dist/core/components/ui/DropdownMenu.d.ts.map +1 -1
  126. package/dist/core/components/ui/DropdownMenu.js.map +1 -1
  127. package/dist/core/components/ui/ExportData.d.ts.map +1 -1
  128. package/dist/core/components/ui/ExportData.js.map +1 -1
  129. package/dist/core/components/ui/FilesManager/index.d.ts.map +1 -1
  130. package/dist/core/components/ui/FilesManager/index.js.map +1 -1
  131. package/dist/core/components/ui/FilesManager/src/FileItemComponent.d.ts.map +1 -1
  132. package/dist/core/components/ui/FilesManager/src/FileItemComponent.js.map +1 -1
  133. package/dist/core/components/ui/FilesManager/src/FileMarker.d.ts.map +1 -1
  134. package/dist/core/components/ui/FilesManager/src/FileMarker.js.map +1 -1
  135. package/dist/core/components/ui/FilesManager/src/ViewerContextMenu.d.ts.map +1 -1
  136. package/dist/core/components/ui/FilesManager/src/ViewerContextMenu.js.map +1 -1
  137. package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.d.ts.map +1 -1
  138. package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.js.map +1 -1
  139. package/dist/core/components/ui/FilesManager/src/downloadUtils.d.ts.map +1 -1
  140. package/dist/core/components/ui/FilesManager/src/downloadUtils.js.map +1 -1
  141. package/dist/core/components/ui/FilesManager/src/useCommonFileUpload.d.ts.map +1 -1
  142. package/dist/core/components/ui/FilesManager/src/useCommonFileUpload.js.map +1 -1
  143. package/dist/core/components/ui/FilesManager/src/useFileActions.d.ts.map +1 -1
  144. package/dist/core/components/ui/FilesManager/src/useFileActions.js.map +1 -1
  145. package/dist/core/components/ui/FilesManager/src/useFileDeleteHandler.d.ts.map +1 -1
  146. package/dist/core/components/ui/FilesManager/src/useFileDeleteHandler.js.map +1 -1
  147. package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.d.ts.map +1 -1
  148. package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.js.map +1 -1
  149. package/dist/core/components/ui/FilesManager/src/useFileUploadWithProgress.d.ts.map +1 -1
  150. package/dist/core/components/ui/FilesManager/src/useFileUploadWithProgress.js.map +1 -1
  151. package/dist/core/components/ui/Footer.d.ts.map +1 -1
  152. package/dist/core/components/ui/Footer.js.map +1 -1
  153. package/dist/core/components/ui/GenericTool.d.ts.map +1 -1
  154. package/dist/core/components/ui/GenericTool.js.map +1 -1
  155. package/dist/core/components/ui/Icons/BcfIcon.d.ts.map +1 -1
  156. package/dist/core/components/ui/Icons/BcfIcon.js.map +1 -1
  157. package/dist/core/components/ui/Icons/CdtIcon.d.ts.map +1 -1
  158. package/dist/core/components/ui/Icons/CdtIcon.js.map +1 -1
  159. package/dist/core/components/ui/Icons/FloorPlanIcon.d.ts.map +1 -1
  160. package/dist/core/components/ui/Icons/FloorPlanIcon.js.map +1 -1
  161. package/dist/core/components/ui/Icons/GoogleIcon.d.ts.map +1 -1
  162. package/dist/core/components/ui/Icons/GoogleIcon.js.map +1 -1
  163. package/dist/core/components/ui/Icons/IdsIcon.d.ts.map +1 -1
  164. package/dist/core/components/ui/Icons/IdsIcon.js.map +1 -1
  165. package/dist/core/components/ui/Icons/IfcIcon.d.ts.map +1 -1
  166. package/dist/core/components/ui/Icons/IfcIcon.js.map +1 -1
  167. package/dist/core/components/ui/Icons/index.d.ts.map +1 -1
  168. package/dist/core/components/ui/Icons/index.js.map +1 -1
  169. package/dist/core/components/ui/InfoSidebar/Container.d.ts.map +1 -1
  170. package/dist/core/components/ui/InfoSidebar/Container.js.map +1 -1
  171. package/dist/core/components/ui/InfoSidebar/Header.d.ts.map +1 -1
  172. package/dist/core/components/ui/InfoSidebar/Header.js.map +1 -1
  173. package/dist/core/components/ui/InfoSidebar/index.d.ts.map +1 -1
  174. package/dist/core/components/ui/InfoSidebar/index.js.map +1 -1
  175. package/dist/core/components/ui/Input.d.ts.map +1 -1
  176. package/dist/core/components/ui/Input.js.map +1 -1
  177. package/dist/core/components/ui/Label.d.ts.map +1 -1
  178. package/dist/core/components/ui/Label.js.map +1 -1
  179. package/dist/core/components/ui/LanguageToggle.d.ts.map +1 -1
  180. package/dist/core/components/ui/LanguageToggle.js.map +1 -1
  181. package/dist/core/components/ui/LoadingSpinner.d.ts.map +1 -1
  182. package/dist/core/components/ui/LoadingSpinner.js.map +1 -1
  183. package/dist/core/components/ui/Menubar.d.ts.map +1 -1
  184. package/dist/core/components/ui/Menubar.js.map +1 -1
  185. package/dist/core/components/ui/NavUser.d.ts.map +1 -1
  186. package/dist/core/components/ui/NavUser.js.map +1 -1
  187. package/dist/core/components/ui/Navbar.d.ts.map +1 -1
  188. package/dist/core/components/ui/Navbar.js.map +1 -1
  189. package/dist/core/components/ui/Popover.d.ts.map +1 -1
  190. package/dist/core/components/ui/Popover.js.map +1 -1
  191. package/dist/core/components/ui/Progress.d.ts.map +1 -1
  192. package/dist/core/components/ui/Progress.js.map +1 -1
  193. package/dist/core/components/ui/ScrollArea.d.ts.map +1 -1
  194. package/dist/core/components/ui/ScrollArea.js.map +1 -1
  195. package/dist/core/components/ui/SearchInput.d.ts.map +1 -1
  196. package/dist/core/components/ui/SearchInput.js.map +1 -1
  197. package/dist/core/components/ui/Select.d.ts.map +1 -1
  198. package/dist/core/components/ui/Select.js.map +1 -1
  199. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts.map +1 -1
  200. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js.map +1 -1
  201. package/dist/core/components/ui/Sensors/Sensor.d.ts.map +1 -1
  202. package/dist/core/components/ui/Sensors/Sensor.js.map +1 -1
  203. package/dist/core/components/ui/Sensors/SensorChart.d.ts.map +1 -1
  204. package/dist/core/components/ui/Sensors/SensorChart.js.map +1 -1
  205. package/dist/core/components/ui/Sensors/SensorInput.d.ts.map +1 -1
  206. package/dist/core/components/ui/Sensors/SensorInput.js.map +1 -1
  207. package/dist/core/components/ui/Sensors/SensorTagsSection.d.ts.map +1 -1
  208. package/dist/core/components/ui/Sensors/SensorTagsSection.js.map +1 -1
  209. package/dist/core/components/ui/Sensors/SensorsSection.d.ts.map +1 -1
  210. package/dist/core/components/ui/Sensors/SensorsSection.js.map +1 -1
  211. package/dist/core/components/ui/Sensors/SensorsSectionSkeleton.d.ts.map +1 -1
  212. package/dist/core/components/ui/Sensors/SensorsSectionSkeleton.js.map +1 -1
  213. package/dist/core/components/ui/Sensors/sensorUtils.d.ts.map +1 -1
  214. package/dist/core/components/ui/Sensors/sensorUtils.js.map +1 -1
  215. package/dist/core/components/ui/Separator.d.ts.map +1 -1
  216. package/dist/core/components/ui/Separator.js.map +1 -1
  217. package/dist/core/components/ui/SettingsButton.d.ts.map +1 -1
  218. package/dist/core/components/ui/SettingsButton.js.map +1 -1
  219. package/dist/core/components/ui/ShareFeature/QRCodeWithLink.d.ts.map +1 -1
  220. package/dist/core/components/ui/ShareFeature/QRCodeWithLink.js.map +1 -1
  221. package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.d.ts.map +1 -1
  222. package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.js.map +1 -1
  223. package/dist/core/components/ui/ShareFeature/index.d.ts.map +1 -1
  224. package/dist/core/components/ui/ShareFeature/index.js.map +1 -1
  225. package/dist/core/components/ui/Sheet.d.ts.map +1 -1
  226. package/dist/core/components/ui/Sheet.js.map +1 -1
  227. package/dist/core/components/ui/Sidebar.d.ts.map +1 -1
  228. package/dist/core/components/ui/Sidebar.js.map +1 -1
  229. package/dist/core/components/ui/Skeleton.d.ts.map +1 -1
  230. package/dist/core/components/ui/Skeleton.js.map +1 -1
  231. package/dist/core/components/ui/Slider.d.ts.map +1 -1
  232. package/dist/core/components/ui/Slider.js.map +1 -1
  233. package/dist/core/components/ui/Sonner.d.ts.map +1 -1
  234. package/dist/core/components/ui/Sonner.js.map +1 -1
  235. package/dist/core/components/ui/Switch.d.ts.map +1 -1
  236. package/dist/core/components/ui/Switch.js.map +1 -1
  237. package/dist/core/components/ui/Table.d.ts.map +1 -1
  238. package/dist/core/components/ui/Table.js.map +1 -1
  239. package/dist/core/components/ui/Tabs.d.ts.map +1 -1
  240. package/dist/core/components/ui/Tabs.js.map +1 -1
  241. package/dist/core/components/ui/Textarea.d.ts.map +1 -1
  242. package/dist/core/components/ui/Textarea.js.map +1 -1
  243. package/dist/core/components/ui/Toggle.d.ts.map +1 -1
  244. package/dist/core/components/ui/Toggle.js.map +1 -1
  245. package/dist/core/components/ui/ToggleGroup.d.ts.map +1 -1
  246. package/dist/core/components/ui/ToggleGroup.js.map +1 -1
  247. package/dist/core/components/ui/ToolbarButton.d.ts.map +1 -1
  248. package/dist/core/components/ui/ToolbarButton.js.map +1 -1
  249. package/dist/core/components/ui/Tooltip.d.ts.map +1 -1
  250. package/dist/core/components/ui/Tooltip.js.map +1 -1
  251. package/dist/core/components/ui/UserAvatar.d.ts.map +1 -1
  252. package/dist/core/components/ui/UserAvatar.js.map +1 -1
  253. package/dist/core/components/ui/chart.d.ts.map +1 -1
  254. package/dist/core/components/ui/chart.js.map +1 -1
  255. package/dist/core/components/ui/downloadUtils.d.ts.map +1 -1
  256. package/dist/core/components/ui/downloadUtils.js.map +1 -1
  257. package/dist/core/components/ui/index.d.ts.map +1 -1
  258. package/dist/core/components/ui/index.js.map +1 -1
  259. package/dist/core/components/ui/openPopupWindow.d.ts.map +1 -1
  260. package/dist/core/components/ui/openPopupWindow.js.map +1 -1
  261. package/dist/core/components/ui/openPopupWindowLCA.d.ts.map +1 -1
  262. package/dist/core/components/ui/openPopupWindowLCA.js.map +1 -1
  263. package/dist/core/components/ui/stats.d.ts.map +1 -1
  264. package/dist/core/components/ui/stats.js.map +1 -1
  265. package/dist/core/components/ui/uploadFile.d.ts.map +1 -1
  266. package/dist/core/components/ui/uploadFile.js.map +1 -1
  267. package/dist/core/components/viewers/Data/DataMenu.d.ts.map +1 -1
  268. package/dist/core/components/viewers/Data/DataMenu.js.map +1 -1
  269. package/dist/core/components/viewers/Data/FilterButtons.d.ts.map +1 -1
  270. package/dist/core/components/viewers/Data/FilterButtons.js.map +1 -1
  271. package/dist/core/components/viewers/Data/HeaderButtons.d.ts.map +1 -1
  272. package/dist/core/components/viewers/Data/HeaderButtons.js.map +1 -1
  273. package/dist/core/components/viewers/Data/MoreOptions.d.ts.map +1 -1
  274. package/dist/core/components/viewers/Data/MoreOptions.js.map +1 -1
  275. package/dist/core/components/viewers/Data/advancedFilter/Filters.d.ts.map +1 -1
  276. package/dist/core/components/viewers/Data/advancedFilter/Filters.js.map +1 -1
  277. package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.d.ts.map +1 -1
  278. package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.js.map +1 -1
  279. package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.d.ts.map +1 -1
  280. package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.js.map +1 -1
  281. package/dist/core/components/viewers/Data/buildingDetails/BuildingDetails.d.ts.map +1 -1
  282. package/dist/core/components/viewers/Data/buildingDetails/BuildingDetails.js.map +1 -1
  283. package/dist/core/components/viewers/Data/buildingDetails/BuildingsMoreOptions.d.ts.map +1 -1
  284. package/dist/core/components/viewers/Data/buildingDetails/BuildingsMoreOptions.js.map +1 -1
  285. package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.d.ts.map +1 -1
  286. package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.js.map +1 -1
  287. package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.d.ts.map +1 -1
  288. package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.js.map +1 -1
  289. package/dist/core/components/viewers/Data/buildingDetails/buildingSchemaTemplate.d.ts.map +1 -1
  290. package/dist/core/components/viewers/Data/buildingDetails/buildingSchemaTemplate.js.map +1 -1
  291. package/dist/core/components/viewers/Data/details/AttachedFiles.d.ts.map +1 -1
  292. package/dist/core/components/viewers/Data/details/AttachedFiles.js.map +1 -1
  293. package/dist/core/components/viewers/Data/details/CheckboxGroup.d.ts.map +1 -1
  294. package/dist/core/components/viewers/Data/details/CheckboxGroup.js.map +1 -1
  295. package/dist/core/components/viewers/Data/details/DetailActions.d.ts.map +1 -1
  296. package/dist/core/components/viewers/Data/details/DetailActions.js.map +1 -1
  297. package/dist/core/components/viewers/Data/details/DetailHeader.d.ts.map +1 -1
  298. package/dist/core/components/viewers/Data/details/DetailHeader.js.map +1 -1
  299. package/dist/core/components/viewers/Data/details/EnergySourcesGrid.d.ts.map +1 -1
  300. package/dist/core/components/viewers/Data/details/EnergySourcesGrid.js.map +1 -1
  301. package/dist/core/components/viewers/Data/details/FieldValue.d.ts.map +1 -1
  302. package/dist/core/components/viewers/Data/details/FieldValue.js.map +1 -1
  303. package/dist/core/components/viewers/Data/details/FileUpload.d.ts.map +1 -1
  304. package/dist/core/components/viewers/Data/details/FileUpload.js.map +1 -1
  305. package/dist/core/components/viewers/Data/details/FilterFiles.d.ts.map +1 -1
  306. package/dist/core/components/viewers/Data/details/FilterFiles.js.map +1 -1
  307. package/dist/core/components/viewers/Data/details/TabSidebar.d.ts.map +1 -1
  308. package/dist/core/components/viewers/Data/details/TabSidebar.js.map +1 -1
  309. package/dist/core/components/viewers/Data/details/UnitsGrid.d.ts.map +1 -1
  310. package/dist/core/components/viewers/Data/details/UnitsGrid.js.map +1 -1
  311. package/dist/core/components/viewers/Data/details/getAttachmentFileName.d.ts.map +1 -1
  312. package/dist/core/components/viewers/Data/details/getAttachmentFileName.js.map +1 -1
  313. package/dist/core/components/viewers/Data/files/DatatableFileAdder.d.ts.map +1 -1
  314. package/dist/core/components/viewers/Data/files/DatatableFileAdder.js +3 -0
  315. package/dist/core/components/viewers/Data/files/DatatableFileAdder.js.map +1 -1
  316. package/dist/core/components/viewers/Data/files/FileDetails.d.ts.map +1 -1
  317. package/dist/core/components/viewers/Data/files/FileDetails.js.map +1 -1
  318. package/dist/core/components/viewers/Data/files/FileMoreOptions.d.ts.map +1 -1
  319. package/dist/core/components/viewers/Data/files/FileMoreOptions.js.map +1 -1
  320. package/dist/core/components/viewers/Data/files/FilePreview.d.ts.map +1 -1
  321. package/dist/core/components/viewers/Data/files/FilePreview.js.map +1 -1
  322. package/dist/core/components/viewers/Data/files/utils/fuzzySearch.d.ts.map +1 -1
  323. package/dist/core/components/viewers/Data/files/utils/fuzzySearch.js.map +1 -1
  324. package/dist/core/components/viewers/Data/infrastructureDetails/AddInfrastructure.d.ts.map +1 -1
  325. package/dist/core/components/viewers/Data/infrastructureDetails/AddInfrastructure.js.map +1 -1
  326. package/dist/core/components/viewers/Data/infrastructureDetails/FieldRenderer.d.ts.map +1 -1
  327. package/dist/core/components/viewers/Data/infrastructureDetails/FieldRenderer.js.map +1 -1
  328. package/dist/core/components/viewers/Data/infrastructureDetails/InfrastructureDetails.d.ts.map +1 -1
  329. package/dist/core/components/viewers/Data/infrastructureDetails/InfrastructureDetails.js.map +1 -1
  330. package/dist/core/components/viewers/Data/siteDetails/AddSite.d.ts.map +1 -1
  331. package/dist/core/components/viewers/Data/siteDetails/AddSite.js.map +1 -1
  332. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.d.ts.map +1 -1
  333. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js.map +1 -1
  334. package/dist/core/components/viewers/Data/siteDetails/FieldRenderer.d.ts.map +1 -1
  335. package/dist/core/components/viewers/Data/siteDetails/FieldRenderer.js.map +1 -1
  336. package/dist/core/components/viewers/Data/siteDetails/SiteDetails.d.ts.map +1 -1
  337. package/dist/core/components/viewers/Data/siteDetails/SiteDetails.js.map +1 -1
  338. package/dist/core/components/viewers/Data/userDetails/AddUser.d.ts.map +1 -1
  339. package/dist/core/components/viewers/Data/userDetails/AddUser.js.map +1 -1
  340. package/dist/core/components/viewers/Data/userDetails/UserDetails.d.ts.map +1 -1
  341. package/dist/core/components/viewers/Data/userDetails/UserDetails.js.map +1 -1
  342. package/dist/core/components/viewers/Data/userDetails/UserMoreOptions.d.ts.map +1 -1
  343. package/dist/core/components/viewers/Data/userDetails/UserMoreOptions.js.map +1 -1
  344. package/dist/core/components/viewers/Data/utils/Columns.d.ts.map +1 -1
  345. package/dist/core/components/viewers/Data/utils/Columns.js.map +1 -1
  346. package/dist/core/components/viewers/Data/utils/Headers.d.ts.map +1 -1
  347. package/dist/core/components/viewers/Data/utils/Headers.js.map +1 -1
  348. package/dist/core/components/viewers/Data/utils/convertDate.d.ts.map +1 -1
  349. package/dist/core/components/viewers/Data/utils/convertDate.js.map +1 -1
  350. package/dist/core/components/viewers/Data/utils/csvUtils.d.ts.map +1 -1
  351. package/dist/core/components/viewers/Data/utils/csvUtils.js.map +1 -1
  352. package/dist/core/components/viewers/Data/utils/filterHelper.d.ts.map +1 -1
  353. package/dist/core/components/viewers/Data/utils/filterHelper.js.map +1 -1
  354. package/dist/core/components/viewers/Data/utils/positionParser.d.ts.map +1 -1
  355. package/dist/core/components/viewers/Data/utils/positionParser.js.map +1 -1
  356. package/dist/core/components/viewers/Data/utils/useViewerData.d.ts.map +1 -1
  357. package/dist/core/components/viewers/Data/utils/useViewerData.js.map +1 -1
  358. package/dist/core/components/viewers/Data/utils/viewerConfig.d.ts.map +1 -1
  359. package/dist/core/components/viewers/Data/utils/viewerConfig.js.map +1 -1
  360. package/dist/core/components/viewers/Viewer.d.ts.map +1 -1
  361. package/dist/core/components/viewers/Viewer.js.map +1 -1
  362. package/dist/core/components/viewers/bim/BimToolbar.d.ts.map +1 -1
  363. package/dist/core/components/viewers/bim/BimToolbar.js.map +1 -1
  364. package/dist/core/components/viewers/bim/BimViewer.d.ts.map +1 -1
  365. package/dist/core/components/viewers/bim/BimViewer.js.map +1 -1
  366. package/dist/core/components/viewers/bim/src/BCFTopicsManager.d.ts.map +1 -1
  367. package/dist/core/components/viewers/bim/src/BCFTopicsManager.js.map +1 -1
  368. package/dist/core/components/viewers/bim/src/BIMManager/index.d.ts.map +1 -1
  369. package/dist/core/components/viewers/bim/src/BIMManager/index.js.map +1 -1
  370. package/dist/core/components/viewers/bim/src/BimLoadingState/index.d.ts.map +1 -1
  371. package/dist/core/components/viewers/bim/src/BimLoadingState/index.js.map +1 -1
  372. package/dist/core/components/viewers/bim/src/BimMeasurements/LenghtMeasurement.d.ts.map +1 -1
  373. package/dist/core/components/viewers/bim/src/BimMeasurements/LenghtMeasurement.js.map +1 -1
  374. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/index.d.ts.map +1 -1
  375. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/index.js.map +1 -1
  376. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CollapsibleTopicItem.d.ts.map +1 -1
  377. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CollapsibleTopicItem.js.map +1 -1
  378. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CreateTopicDialog.d.ts.map +1 -1
  379. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CreateTopicDialog.js.map +1 -1
  380. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/TopicsSection.d.ts.map +1 -1
  381. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/TopicsSection.js.map +1 -1
  382. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/index.d.ts.map +1 -1
  383. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/index.js.map +1 -1
  384. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  385. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  386. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
  387. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
  388. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/index.d.ts.map +1 -1
  389. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/index.js.map +1 -1
  390. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/ElevationsSection.d.ts.map +1 -1
  391. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/ElevationsSection.js.map +1 -1
  392. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.d.ts.map +1 -1
  393. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js.map +1 -1
  394. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/SpatialStructureSection.d.ts.map +1 -1
  395. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/SpatialStructureSection.js.map +1 -1
  396. package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.d.ts.map +1 -1
  397. package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.js.map +1 -1
  398. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/index.d.ts.map +1 -1
  399. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/index.js.map +1 -1
  400. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.d.ts.map +1 -1
  401. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.js.map +1 -1
  402. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/LightingManagement.d.ts.map +1 -1
  403. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/LightingManagement.js.map +1 -1
  404. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.d.ts.map +1 -1
  405. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.js.map +1 -1
  406. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.d.ts.map +1 -1
  407. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.js.map +1 -1
  408. package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.d.ts.map +1 -1
  409. package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.js.map +1 -1
  410. package/dist/core/components/viewers/bim/src/BimSidebar/src/index.d.ts.map +1 -1
  411. package/dist/core/components/viewers/bim/src/BimSidebar/src/index.js.map +1 -1
  412. package/dist/core/components/viewers/bim/src/CameraProjection.d.ts.map +1 -1
  413. package/dist/core/components/viewers/bim/src/CameraProjection.js.map +1 -1
  414. package/dist/core/components/viewers/bim/src/ClippingPlane.d.ts.map +1 -1
  415. package/dist/core/components/viewers/bim/src/ClippingPlane.js.map +1 -1
  416. package/dist/core/components/viewers/bim/src/CurrentCamera.d.ts.map +1 -1
  417. package/dist/core/components/viewers/bim/src/CurrentCamera.js.map +1 -1
  418. package/dist/core/components/viewers/bim/src/CurrentWorld.d.ts.map +1 -1
  419. package/dist/core/components/viewers/bim/src/CurrentWorld.js.map +1 -1
  420. package/dist/core/components/viewers/bim/src/Cursor.d.ts.map +1 -1
  421. package/dist/core/components/viewers/bim/src/Cursor.js.map +1 -1
  422. package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts.map +1 -1
  423. package/dist/core/components/viewers/bim/src/DXFLoader/index.js.map +1 -1
  424. package/dist/core/components/viewers/bim/src/ElevationsTool/index.d.ts.map +1 -1
  425. package/dist/core/components/viewers/bim/src/ElevationsTool/index.js.map +1 -1
  426. package/dist/core/components/viewers/bim/src/ElevationsTool/src/ElevationProjector.d.ts.map +1 -1
  427. package/dist/core/components/viewers/bim/src/ElevationsTool/src/ElevationProjector.js.map +1 -1
  428. package/dist/core/components/viewers/bim/src/ElevationsTool/src/types.d.ts.map +1 -1
  429. package/dist/core/components/viewers/bim/src/ElevationsTool/src/types.js.map +1 -1
  430. package/dist/core/components/viewers/bim/src/FitCamera.d.ts.map +1 -1
  431. package/dist/core/components/viewers/bim/src/FitCamera.js.map +1 -1
  432. package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts.map +1 -1
  433. package/dist/core/components/viewers/bim/src/FloorplanTool/index.js.map +1 -1
  434. package/dist/core/components/viewers/bim/src/FloorplanTool/src/FloorplanRenderer.d.ts.map +1 -1
  435. package/dist/core/components/viewers/bim/src/FloorplanTool/src/FloorplanRenderer.js.map +1 -1
  436. package/dist/core/components/viewers/bim/src/FloorplanTool/src/StoreyProjector.d.ts.map +1 -1
  437. package/dist/core/components/viewers/bim/src/FloorplanTool/src/StoreyProjector.js.map +1 -1
  438. package/dist/core/components/viewers/bim/src/FloorplanTool/src/types.d.ts.map +1 -1
  439. package/dist/core/components/viewers/bim/src/FloorplanTool/src/types.js.map +1 -1
  440. package/dist/core/components/viewers/bim/src/FloorplanTool/src/utils.d.ts.map +1 -1
  441. package/dist/core/components/viewers/bim/src/FloorplanTool/src/utils.js.map +1 -1
  442. package/dist/core/components/viewers/bim/src/GhostMode.d.ts.map +1 -1
  443. package/dist/core/components/viewers/bim/src/GhostMode.js.map +1 -1
  444. package/dist/core/components/viewers/bim/src/Highlighter/index.d.ts.map +1 -1
  445. package/dist/core/components/viewers/bim/src/Highlighter/index.js.map +1 -1
  446. package/dist/core/components/viewers/bim/src/IDSManager/index.d.ts.map +1 -1
  447. package/dist/core/components/viewers/bim/src/IDSManager/index.js.map +1 -1
  448. package/dist/core/components/viewers/bim/src/IDSManager/src/IDSLegend.d.ts.map +1 -1
  449. package/dist/core/components/viewers/bim/src/IDSManager/src/IDSLegend.js.map +1 -1
  450. package/dist/core/components/viewers/bim/src/IfcToFragments.d.ts.map +1 -1
  451. package/dist/core/components/viewers/bim/src/IfcToFragments.js.map +1 -1
  452. package/dist/core/components/viewers/bim/src/LoadIfcAsFragments.d.ts.map +1 -1
  453. package/dist/core/components/viewers/bim/src/LoadIfcAsFragments.js.map +1 -1
  454. package/dist/core/components/viewers/bim/src/LoadModels.d.ts.map +1 -1
  455. package/dist/core/components/viewers/bim/src/LoadModels.js.map +1 -1
  456. package/dist/core/components/viewers/bim/src/ModelManager/index.d.ts.map +1 -1
  457. package/dist/core/components/viewers/bim/src/ModelManager/index.js.map +1 -1
  458. package/dist/core/components/viewers/bim/src/SimpleBimViewer.d.ts.map +1 -1
  459. package/dist/core/components/viewers/bim/src/SimpleBimViewer.js.map +1 -1
  460. package/dist/core/components/viewers/bim/src/SpatialStructure.d.ts.map +1 -1
  461. package/dist/core/components/viewers/bim/src/SpatialStructure.js.map +1 -1
  462. package/dist/core/components/viewers/bim/src/ViewportGizmo.d.ts.map +1 -1
  463. package/dist/core/components/viewers/bim/src/ViewportGizmo.js.map +1 -1
  464. package/dist/core/components/viewers/bim/src/lib/CameraController.d.ts.map +1 -1
  465. package/dist/core/components/viewers/bim/src/lib/CameraController.js.map +1 -1
  466. package/dist/core/components/viewers/bim/src/lib/CategoryHighlighter.d.ts.map +1 -1
  467. package/dist/core/components/viewers/bim/src/lib/CategoryHighlighter.js.map +1 -1
  468. package/dist/core/components/viewers/bim/src/lib/ChromeController.d.ts.map +1 -1
  469. package/dist/core/components/viewers/bim/src/lib/ChromeController.js.map +1 -1
  470. package/dist/core/components/viewers/bim/src/lib/ClipController.d.ts.map +1 -1
  471. package/dist/core/components/viewers/bim/src/lib/ClipController.js.map +1 -1
  472. package/dist/core/components/viewers/bim/src/lib/GridController.d.ts.map +1 -1
  473. package/dist/core/components/viewers/bim/src/lib/GridController.js.map +1 -1
  474. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.d.ts.map +1 -1
  475. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.js.map +1 -1
  476. package/dist/core/components/viewers/bim/src/lib/ViewModeCoordinator.d.ts.map +1 -1
  477. package/dist/core/components/viewers/bim/src/lib/ViewModeCoordinator.js.map +1 -1
  478. package/dist/core/components/viewers/bim/src/lib/ViewSectionList.d.ts.map +1 -1
  479. package/dist/core/components/viewers/bim/src/lib/ViewSectionList.js.map +1 -1
  480. package/dist/core/components/viewers/bim/src/lib/drawingLayers.d.ts.map +1 -1
  481. package/dist/core/components/viewers/bim/src/lib/drawingLayers.js.map +1 -1
  482. package/dist/core/components/viewers/bim/src/lib/drawingProjection.d.ts.map +1 -1
  483. package/dist/core/components/viewers/bim/src/lib/drawingProjection.js.map +1 -1
  484. package/dist/core/components/viewers/bim/src/lib/exportDrawingToDxf.d.ts.map +1 -1
  485. package/dist/core/components/viewers/bim/src/lib/exportDrawingToDxf.js.map +1 -1
  486. package/dist/core/components/viewers/bim/src/lib/safeRun.d.ts.map +1 -1
  487. package/dist/core/components/viewers/bim/src/lib/safeRun.js.map +1 -1
  488. package/dist/core/components/viewers/bim/src/lib/useBuildingName.d.ts.map +1 -1
  489. package/dist/core/components/viewers/bim/src/lib/useBuildingName.js.map +1 -1
  490. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.d.ts.map +1 -1
  491. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js.map +1 -1
  492. package/dist/core/components/viewers/bim/src/lib/viewSection.d.ts.map +1 -1
  493. package/dist/core/components/viewers/bim/src/lib/viewSection.js.map +1 -1
  494. package/dist/core/components/viewers/bim/src/propertiesMenu/index.d.ts.map +1 -1
  495. package/dist/core/components/viewers/bim/src/propertiesMenu/index.js.map +1 -1
  496. package/dist/core/components/viewers/bim/src/propertiesMenu/src/ElementList.d.ts.map +1 -1
  497. package/dist/core/components/viewers/bim/src/propertiesMenu/src/ElementList.js.map +1 -1
  498. package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertiesMenuHeader.d.ts.map +1 -1
  499. package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertiesMenuHeader.js.map +1 -1
  500. package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertyGroup.d.ts.map +1 -1
  501. package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertyGroup.js.map +1 -1
  502. package/dist/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.d.ts.map +1 -1
  503. package/dist/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.js.map +1 -1
  504. package/dist/core/components/viewers/bim/src/propertiesMenu/src/utils.d.ts.map +1 -1
  505. package/dist/core/components/viewers/bim/src/propertiesMenu/src/utils.js.map +1 -1
  506. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.d.ts.map +1 -1
  507. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js.map +1 -1
  508. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts.map +1 -1
  509. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js.map +1 -1
  510. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddFile.d.ts.map +1 -1
  511. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddFile.js.map +1 -1
  512. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddSensor.d.ts.map +1 -1
  513. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddSensor.js.map +1 -1
  514. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddToBimToolbar.d.ts.map +1 -1
  515. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddToBimToolbar.js.map +1 -1
  516. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.d.ts.map +1 -1
  517. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.js.map +1 -1
  518. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.d.ts.map +1 -1
  519. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js.map +1 -1
  520. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts.map +1 -1
  521. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.js.map +1 -1
  522. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.d.ts.map +1 -1
  523. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js.map +1 -1
  524. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.d.ts.map +1 -1
  525. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.js.map +1 -1
  526. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/index.d.ts.map +1 -1
  527. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/index.js.map +1 -1
  528. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/markerUtils.d.ts.map +1 -1
  529. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/markerUtils.js.map +1 -1
  530. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.d.ts.map +1 -1
  531. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.js.map +1 -1
  532. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.d.ts.map +1 -1
  533. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.js.map +1 -1
  534. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.d.ts.map +1 -1
  535. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js.map +1 -1
  536. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.d.ts.map +1 -1
  537. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.js.map +1 -1
  538. package/dist/core/components/viewers/bim/src/tools/BIMSearchTool.d.ts.map +1 -1
  539. package/dist/core/components/viewers/bim/src/tools/BIMSearchTool.js.map +1 -1
  540. package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.d.ts.map +1 -1
  541. package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.js.map +1 -1
  542. package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.d.ts.map +1 -1
  543. package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.js.map +1 -1
  544. package/dist/core/components/viewers/bim/src/tools/FitCameraTool.d.ts.map +1 -1
  545. package/dist/core/components/viewers/bim/src/tools/FitCameraTool.js.map +1 -1
  546. package/dist/core/components/viewers/bim/src/tools/InspectBimTool.d.ts.map +1 -1
  547. package/dist/core/components/viewers/bim/src/tools/InspectBimTool.js.map +1 -1
  548. package/dist/core/components/viewers/bim/src/tools/bimToolbar.d.ts.map +1 -1
  549. package/dist/core/components/viewers/bim/src/tools/bimToolbar.js.map +1 -1
  550. package/dist/core/components/viewers/bim/src/tools/measureBimTool.d.ts.map +1 -1
  551. package/dist/core/components/viewers/bim/src/tools/measureBimTool.js.map +1 -1
  552. package/dist/core/components/viewers/bim/src/tools/selectionBimTool.d.ts.map +1 -1
  553. package/dist/core/components/viewers/bim/src/tools/selectionBimTool.js.map +1 -1
  554. package/dist/core/components/viewers/bim/src/tools/shareBimTool.d.ts.map +1 -1
  555. package/dist/core/components/viewers/bim/src/tools/shareBimTool.js.map +1 -1
  556. package/dist/core/components/viewers/bim/utils/GizmoController.d.ts.map +1 -1
  557. package/dist/core/components/viewers/bim/utils/GizmoController.js.map +1 -1
  558. package/dist/core/components/viewers/bim/utils/setCameraLookAt.d.ts.map +1 -1
  559. package/dist/core/components/viewers/bim/utils/setCameraLookAt.js.map +1 -1
  560. package/dist/core/components/viewers/index.d.ts.map +1 -1
  561. package/dist/core/components/viewers/index.js.map +1 -1
  562. package/dist/core/components/viewers/map/MapViewer.d.ts.map +1 -1
  563. package/dist/core/components/viewers/map/MapViewer.js.map +1 -1
  564. package/dist/core/components/viewers/map/datasets/AddPortalDialog.d.ts.map +1 -1
  565. package/dist/core/components/viewers/map/datasets/AddPortalDialog.js.map +1 -1
  566. package/dist/core/components/viewers/map/datasets/DatasetDetails.d.ts.map +1 -1
  567. package/dist/core/components/viewers/map/datasets/DatasetDetails.js.map +1 -1
  568. package/dist/core/components/viewers/map/datasets/DatasetManager/index.d.ts.map +1 -1
  569. package/dist/core/components/viewers/map/datasets/DatasetManager/index.js.map +1 -1
  570. package/dist/core/components/viewers/map/datasets/DatasetManager/src/FieldsTable.d.ts.map +1 -1
  571. package/dist/core/components/viewers/map/datasets/DatasetManager/src/FieldsTable.js.map +1 -1
  572. package/dist/core/components/viewers/map/datasets/DatasetSkeleton.d.ts.map +1 -1
  573. package/dist/core/components/viewers/map/datasets/DatasetSkeleton.js.map +1 -1
  574. package/dist/core/components/viewers/map/datasets/Filters.d.ts.map +1 -1
  575. package/dist/core/components/viewers/map/datasets/Filters.js.map +1 -1
  576. package/dist/core/components/viewers/map/datasets/NestedFilter.d.ts.map +1 -1
  577. package/dist/core/components/viewers/map/datasets/NestedFilter.js.map +1 -1
  578. package/dist/core/components/viewers/map/datasets/RowActions.d.ts.map +1 -1
  579. package/dist/core/components/viewers/map/datasets/RowActions.js.map +1 -1
  580. package/dist/core/components/viewers/map/datasets/data.d.ts.map +1 -1
  581. package/dist/core/components/viewers/map/datasets/data.js.map +1 -1
  582. package/dist/core/components/viewers/map/datasets/index.d.ts.map +1 -1
  583. package/dist/core/components/viewers/map/datasets/index.js.map +1 -1
  584. package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.d.ts.map +1 -1
  585. package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.js.map +1 -1
  586. package/dist/core/components/viewers/map/datasets/src/arcgisFetch.d.ts.map +1 -1
  587. package/dist/core/components/viewers/map/datasets/src/arcgisFetch.js.map +1 -1
  588. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.d.ts.map +1 -1
  589. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.js.map +1 -1
  590. package/dist/core/components/viewers/map/datasets/src/cache.d.ts.map +1 -1
  591. package/dist/core/components/viewers/map/datasets/src/cache.js.map +1 -1
  592. package/dist/core/components/viewers/map/datasets/src/ckanDatasets.d.ts.map +1 -1
  593. package/dist/core/components/viewers/map/datasets/src/ckanDatasets.js.map +1 -1
  594. package/dist/core/components/viewers/map/datasets/src/geojsonFile.d.ts.map +1 -1
  595. package/dist/core/components/viewers/map/datasets/src/geojsonFile.js.map +1 -1
  596. package/dist/core/components/viewers/map/datasets/src/localDatasets.d.ts.map +1 -1
  597. package/dist/core/components/viewers/map/datasets/src/localDatasets.js.map +1 -1
  598. package/dist/core/components/viewers/map/datasets/src/minioDatasets.d.ts.map +1 -1
  599. package/dist/core/components/viewers/map/datasets/src/minioDatasets.js.map +1 -1
  600. package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.d.ts.map +1 -1
  601. package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.js.map +1 -1
  602. package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts.map +1 -1
  603. package/dist/core/components/viewers/map/datasets/src/publishedTiles.js.map +1 -1
  604. package/dist/core/components/viewers/map/datasets/src/socrataDatasets.d.ts.map +1 -1
  605. package/dist/core/components/viewers/map/datasets/src/socrataDatasets.js.map +1 -1
  606. package/dist/core/components/viewers/map/datasets/src/urlSources.d.ts.map +1 -1
  607. package/dist/core/components/viewers/map/datasets/src/urlSources.js.map +1 -1
  608. package/dist/core/components/viewers/map/datasets/src/useDatasetsForPortals.d.ts.map +1 -1
  609. package/dist/core/components/viewers/map/datasets/src/useDatasetsForPortals.js.map +1 -1
  610. package/dist/core/components/viewers/map/datasets/src/useFastDatasetCache.d.ts.map +1 -1
  611. package/dist/core/components/viewers/map/datasets/src/useFastDatasetCache.js.map +1 -1
  612. package/dist/core/components/viewers/map/datasets/src/wmsTime.d.ts +0 -8
  613. package/dist/core/components/viewers/map/datasets/src/wmsTime.d.ts.map +1 -1
  614. package/dist/core/components/viewers/map/datasets/src/wmsTime.js.map +1 -1
  615. package/dist/core/components/viewers/map/datasets/utils.d.ts.map +1 -1
  616. package/dist/core/components/viewers/map/datasets/utils.js.map +1 -1
  617. package/dist/core/components/viewers/map/legends/MapLegendHost.d.ts.map +1 -1
  618. package/dist/core/components/viewers/map/legends/MapLegendHost.js.map +1 -1
  619. package/dist/core/components/viewers/map/src/Geocoder.d.ts.map +1 -1
  620. package/dist/core/components/viewers/map/src/Geocoder.js.map +1 -1
  621. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/index.d.ts.map +1 -1
  622. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/index.js.map +1 -1
  623. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/index.d.ts.map +1 -1
  624. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/index.js.map +1 -1
  625. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.d.ts.map +1 -1
  626. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.js.map +1 -1
  627. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.d.ts.map +1 -1
  628. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js.map +1 -1
  629. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/OpenDataFeaturePopover.d.ts.map +1 -1
  630. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/OpenDataFeaturePopover.js.map +1 -1
  631. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/PopoverSkeleton.d.ts.map +1 -1
  632. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/PopoverSkeleton.js.map +1 -1
  633. package/dist/core/components/viewers/map/src/MapLayers/index.d.ts.map +1 -1
  634. package/dist/core/components/viewers/map/src/MapLayers/index.js.map +1 -1
  635. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.d.ts.map +1 -1
  636. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js.map +1 -1
  637. package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/index.d.ts.map +1 -1
  638. package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/index.js.map +1 -1
  639. package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/src/databaseBuildings.d.ts.map +1 -1
  640. package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/src/databaseBuildings.js.map +1 -1
  641. package/dist/core/components/viewers/map/src/MapLayers/src/CommentLayer/index.d.ts.map +1 -1
  642. package/dist/core/components/viewers/map/src/MapLayers/src/CommentLayer/index.js.map +1 -1
  643. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.d.ts.map +1 -1
  644. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.js.map +1 -1
  645. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.d.ts.map +1 -1
  646. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js.map +1 -1
  647. package/dist/core/components/viewers/map/src/MapLayers/src/EditPosition.d.ts.map +1 -1
  648. package/dist/core/components/viewers/map/src/MapLayers/src/EditPosition.js.map +1 -1
  649. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.d.ts.map +1 -1
  650. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.js.map +1 -1
  651. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileIcon.d.ts.map +1 -1
  652. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileIcon.js.map +1 -1
  653. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.d.ts.map +1 -1
  654. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.js.map +1 -1
  655. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.d.ts.map +1 -1
  656. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.js.map +1 -1
  657. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileMarker.d.ts.map +1 -1
  658. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileMarker.js.map +1 -1
  659. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/index.d.ts.map +1 -1
  660. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/index.js.map +1 -1
  661. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.d.ts.map +1 -1
  662. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.js.map +1 -1
  663. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/openFileInPopUpWindow.d.ts.map +1 -1
  664. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/openFileInPopUpWindow.js.map +1 -1
  665. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.d.ts.map +1 -1
  666. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.js.map +1 -1
  667. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.d.ts.map +1 -1
  668. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js.map +1 -1
  669. package/dist/core/components/viewers/map/src/MapLayers/src/PlaceOnMap.d.ts.map +1 -1
  670. package/dist/core/components/viewers/map/src/MapLayers/src/PlaceOnMap.js.map +1 -1
  671. package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.d.ts.map +1 -1
  672. package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.js.map +1 -1
  673. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/index.d.ts.map +1 -1
  674. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/index.js.map +1 -1
  675. package/dist/core/components/viewers/map/src/MapLayers/src/disposeThreeScene.d.ts.map +1 -1
  676. package/dist/core/components/viewers/map/src/MapLayers/src/disposeThreeScene.js.map +1 -1
  677. package/dist/core/components/viewers/map/src/MapLayers/src/mapLayersUtils.d.ts.map +1 -1
  678. package/dist/core/components/viewers/map/src/MapLayers/src/mapLayersUtils.js.map +1 -1
  679. package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.d.ts.map +1 -1
  680. package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.js.map +1 -1
  681. package/dist/core/components/viewers/map/src/MapSidebar/index.d.ts.map +1 -1
  682. package/dist/core/components/viewers/map/src/MapSidebar/index.js.map +1 -1
  683. package/dist/core/components/viewers/map/src/MapSidebar/src/CommunicationTab/index.d.ts.map +1 -1
  684. package/dist/core/components/viewers/map/src/MapSidebar/src/CommunicationTab/index.js.map +1 -1
  685. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/index.d.ts.map +1 -1
  686. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/index.js.map +1 -1
  687. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  688. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  689. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
  690. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
  691. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.d.ts.map +1 -1
  692. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.js.map +1 -1
  693. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AppliedDatasetsSection.d.ts.map +1 -1
  694. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AppliedDatasetsSection.js.map +1 -1
  695. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AvailableDatasetsSection.d.ts.map +1 -1
  696. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AvailableDatasetsSection.js.map +1 -1
  697. package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.d.ts.map +1 -1
  698. package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.js.map +1 -1
  699. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.d.ts.map +1 -1
  700. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.js.map +1 -1
  701. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.d.ts.map +1 -1
  702. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.js.map +1 -1
  703. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapCustomization.d.ts.map +1 -1
  704. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapCustomization.js.map +1 -1
  705. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapProjection.d.ts.map +1 -1
  706. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapProjection.js.map +1 -1
  707. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.d.ts.map +1 -1
  708. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js.map +1 -1
  709. package/dist/core/components/viewers/map/src/SimpleMap.d.ts.map +1 -1
  710. package/dist/core/components/viewers/map/src/SimpleMap.js.map +1 -1
  711. package/dist/core/components/viewers/map/src/compare/AddItem.d.ts.map +1 -1
  712. package/dist/core/components/viewers/map/src/compare/AddItem.js.map +1 -1
  713. package/dist/core/components/viewers/map/src/compare/CompareDialog.d.ts.map +1 -1
  714. package/dist/core/components/viewers/map/src/compare/CompareDialog.js.map +1 -1
  715. package/dist/core/components/viewers/map/src/compare/description-list.d.ts.map +1 -1
  716. package/dist/core/components/viewers/map/src/compare/description-list.js.map +1 -1
  717. package/dist/core/components/viewers/map/src/compare/index.d.ts.map +1 -1
  718. package/dist/core/components/viewers/map/src/compare/index.js.map +1 -1
  719. package/dist/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.d.ts.map +1 -1
  720. package/dist/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.js.map +1 -1
  721. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/FileAdder.d.ts.map +1 -1
  722. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/FileAdder.js.map +1 -1
  723. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/ProgressBar.d.ts.map +1 -1
  724. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/ProgressBar.js.map +1 -1
  725. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/utils/uploadToPresignedURLS.d.ts.map +1 -1
  726. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/utils/uploadToPresignedURLS.js.map +1 -1
  727. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.d.ts.map +1 -1
  728. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.js.map +1 -1
  729. package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.d.ts.map +1 -1
  730. package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.js.map +1 -1
  731. package/dist/core/components/viewers/map/src/tools/DatasetMapTool.d.ts.map +1 -1
  732. package/dist/core/components/viewers/map/src/tools/DatasetMapTool.js.map +1 -1
  733. package/dist/core/components/viewers/map/src/tools/mapTools.d.ts.map +1 -1
  734. package/dist/core/components/viewers/map/src/tools/mapTools.js.map +1 -1
  735. package/dist/core/components/viewers/map/src/tools/measureMapTool.d.ts.map +1 -1
  736. package/dist/core/components/viewers/map/src/tools/measureMapTool.js.map +1 -1
  737. package/dist/core/components/viewers/map/src/tools/shareMapTool.d.ts.map +1 -1
  738. package/dist/core/components/viewers/map/src/tools/shareMapTool.js.map +1 -1
  739. package/dist/core/components/viewers/map/utils/ClusterManager.d.ts.map +1 -1
  740. package/dist/core/components/viewers/map/utils/ClusterManager.js.map +1 -1
  741. package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.d.ts.map +1 -1
  742. package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.js.map +1 -1
  743. package/dist/core/components/viewers/map/utils/MapEventManager/MapHoverManager.d.ts.map +1 -1
  744. package/dist/core/components/viewers/map/utils/MapEventManager/MapHoverManager.js.map +1 -1
  745. package/dist/core/components/viewers/map/utils/MarkerManager.d.ts.map +1 -1
  746. package/dist/core/components/viewers/map/utils/MarkerManager.js.map +1 -1
  747. package/dist/core/components/viewers/map/utils/dateName.d.ts.map +1 -1
  748. package/dist/core/components/viewers/map/utils/dateName.js.map +1 -1
  749. package/dist/core/components/viewers/map/utils/extractCoordinates.d.ts.map +1 -1
  750. package/dist/core/components/viewers/map/utils/extractCoordinates.js.map +1 -1
  751. package/dist/core/components/viewers/map/utils/fitBuildingsBounds.d.ts.map +1 -1
  752. package/dist/core/components/viewers/map/utils/fitBuildingsBounds.js.map +1 -1
  753. package/dist/core/components/viewers/map/utils/fitGeojsonBounds.d.ts.map +1 -1
  754. package/dist/core/components/viewers/map/utils/fitGeojsonBounds.js.map +1 -1
  755. package/dist/core/components/viewers/map/utils/flyToEach.d.ts.map +1 -1
  756. package/dist/core/components/viewers/map/utils/flyToEach.js.map +1 -1
  757. package/dist/core/components/viewers/map/utils/geocoder.d.ts.map +1 -1
  758. package/dist/core/components/viewers/map/utils/geocoder.js.map +1 -1
  759. package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts.map +1 -1
  760. package/dist/core/components/viewers/map/utils/geocoding/adapters.js.map +1 -1
  761. package/dist/core/components/viewers/map/utils/geocoding/config.d.ts.map +1 -1
  762. package/dist/core/components/viewers/map/utils/geocoding/config.js.map +1 -1
  763. package/dist/core/components/viewers/map/utils/geocoding/index.d.ts.map +1 -1
  764. package/dist/core/components/viewers/map/utils/geocoding/index.js.map +1 -1
  765. package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts.map +1 -1
  766. package/dist/core/components/viewers/map/utils/geocoding/osm.js.map +1 -1
  767. package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts.map +1 -1
  768. package/dist/core/components/viewers/map/utils/geocoding/pelias.js.map +1 -1
  769. package/dist/core/components/viewers/map/utils/getOsmIdFromMartin.d.ts.map +1 -1
  770. package/dist/core/components/viewers/map/utils/getOsmIdFromMartin.js.map +1 -1
  771. package/dist/core/components/viewers/map/utils/getOsmIdbyCoordinates.d.ts.map +1 -1
  772. package/dist/core/components/viewers/map/utils/getOsmIdbyCoordinates.js.map +1 -1
  773. package/dist/core/components/viewers/map/utils/mapStyleCatalog.d.ts.map +1 -1
  774. package/dist/core/components/viewers/map/utils/mapStyleCatalog.js.map +1 -1
  775. package/dist/core/components/viewers/map/utils/stringToColour.d.ts.map +1 -1
  776. package/dist/core/components/viewers/map/utils/stringToColour.js.map +1 -1
  777. package/dist/core/components/viewers/map/utils/toggleBimToMap.d.ts.map +1 -1
  778. package/dist/core/components/viewers/map/utils/toggleBimToMap.js.map +1 -1
  779. package/dist/core/components/viewers/map/utils/updateBuildingOsmId.d.ts.map +1 -1
  780. package/dist/core/components/viewers/map/utils/updateBuildingOsmId.js.map +1 -1
  781. package/dist/core/components/viewers/map/utils/validateBounds.d.ts.map +1 -1
  782. package/dist/core/components/viewers/map/utils/validateBounds.js.map +1 -1
  783. package/dist/core/components/viewers/pointcloud/PointCloudToolbar.d.ts.map +1 -1
  784. package/dist/core/components/viewers/pointcloud/PointCloudToolbar.js.map +1 -1
  785. package/dist/core/components/viewers/pointcloud/PointCloudViewer.d.ts.map +1 -1
  786. package/dist/core/components/viewers/pointcloud/PointCloudViewer.js.map +1 -1
  787. package/dist/core/components/viewers/pointcloud/define.d.ts.map +1 -1
  788. package/dist/core/components/viewers/pointcloud/define.js.map +1 -1
  789. package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.d.ts.map +1 -1
  790. package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.js.map +1 -1
  791. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.d.ts.map +1 -1
  792. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.js.map +1 -1
  793. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.d.ts.map +1 -1
  794. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.js.map +1 -1
  795. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.d.ts.map +1 -1
  796. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.js.map +1 -1
  797. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/TabSelector.d.ts.map +1 -1
  798. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/TabSelector.js.map +1 -1
  799. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.d.ts.map +1 -1
  800. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.js.map +1 -1
  801. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.d.ts.map +1 -1
  802. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js.map +1 -1
  803. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  804. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  805. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.d.ts.map +1 -1
  806. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.js.map +1 -1
  807. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/index.d.ts.map +1 -1
  808. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/index.js.map +1 -1
  809. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/CameraSettings.d.ts.map +1 -1
  810. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/CameraSettings.js.map +1 -1
  811. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/GridManagement.d.ts.map +1 -1
  812. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/GridManagement.js.map +1 -1
  813. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/PerformanceSettings.d.ts.map +1 -1
  814. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/PerformanceSettings.js.map +1 -1
  815. package/dist/core/components/viewers/pointcloud/src/ViewportGizmo.d.ts.map +1 -1
  816. package/dist/core/components/viewers/pointcloud/src/ViewportGizmo.js.map +1 -1
  817. package/dist/core/components/viewers/pointcloud/src/tools/ClippingTools/ClippingTool.d.ts.map +1 -1
  818. package/dist/core/components/viewers/pointcloud/src/tools/ClippingTools/ClippingTool.js.map +1 -1
  819. package/dist/core/components/viewers/pointcloud/src/tools/FitToScreen.d.ts.map +1 -1
  820. package/dist/core/components/viewers/pointcloud/src/tools/FitToScreen.js.map +1 -1
  821. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AngleMeasurement.d.ts.map +1 -1
  822. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AngleMeasurement.js.map +1 -1
  823. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AreaMeasurement.d.ts.map +1 -1
  824. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AreaMeasurement.js.map +1 -1
  825. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/LineMeasurement.d.ts.map +1 -1
  826. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/LineMeasurement.js.map +1 -1
  827. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/MeasurePointCloudTool.d.ts.map +1 -1
  828. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/MeasurePointCloudTool.js.map +1 -1
  829. package/dist/core/components/viewers/pointcloud/src/tools/PCSearchTool.d.ts.map +1 -1
  830. package/dist/core/components/viewers/pointcloud/src/tools/PCSearchTool.js.map +1 -1
  831. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.d.ts.map +1 -1
  832. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js.map +1 -1
  833. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PerformanceSettingTools.d.ts.map +1 -1
  834. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PerformanceSettingTools.js.map +1 -1
  835. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PointBudgetTool.d.ts.map +1 -1
  836. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PointBudgetTool.js.map +1 -1
  837. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/ShowOctreeBoxTool.d.ts.map +1 -1
  838. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/ShowOctreeBoxTool.js.map +1 -1
  839. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/SplatQualitySelection.d.ts.map +1 -1
  840. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/SplatQualitySelection.js.map +1 -1
  841. package/dist/core/components/viewers/pointcloud/src/tools/SetCameraOption.d.ts.map +1 -1
  842. package/dist/core/components/viewers/pointcloud/src/tools/SetCameraOption.js.map +1 -1
  843. package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/index.d.ts.map +1 -1
  844. package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/index.js.map +1 -1
  845. package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/src/getCameraPosition.d.ts.map +1 -1
  846. package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/src/getCameraPosition.js.map +1 -1
  847. package/dist/core/components/viewers/pointcloud/src/tools/index.d.ts.map +1 -1
  848. package/dist/core/components/viewers/pointcloud/src/tools/index.js.map +1 -1
  849. package/dist/core/components/viewers/pointcloud/src/tools/pointcloudToolbarTools.d.ts.map +1 -1
  850. package/dist/core/components/viewers/pointcloud/src/tools/pointcloudToolbarTools.js.map +1 -1
  851. package/dist/core/components/viewers/pointcloud/utils/potreeLoader.d.ts.map +1 -1
  852. package/dist/core/components/viewers/pointcloud/utils/potreeLoader.js.map +1 -1
  853. package/dist/core/components/viewers/pointcloud/utils/restoreCameraFromUrl.d.ts.map +1 -1
  854. package/dist/core/components/viewers/pointcloud/utils/restoreCameraFromUrl.js.map +1 -1
  855. package/dist/core/components/viewers/useCoordinateSystem.d.ts.map +1 -1
  856. package/dist/core/components/viewers/useCoordinateSystem.js.map +1 -1
  857. package/dist/core/hooks/buildings/buildings.d.ts.map +1 -1
  858. package/dist/core/hooks/buildings/buildings.js.map +1 -1
  859. package/dist/core/hooks/buildings/createBuildingHooks.d.ts.map +1 -1
  860. package/dist/core/hooks/buildings/createBuildingHooks.js.map +1 -1
  861. package/dist/core/hooks/comments/comments.d.ts.map +1 -1
  862. package/dist/core/hooks/comments/comments.js.map +1 -1
  863. package/dist/core/hooks/comments/createCommentHooks.d.ts.map +1 -1
  864. package/dist/core/hooks/comments/createCommentHooks.js.map +1 -1
  865. package/dist/core/hooks/files/createFileHooks.d.ts.map +1 -1
  866. package/dist/core/hooks/files/createFileHooks.js.map +1 -1
  867. package/dist/core/hooks/files/files.d.ts.map +1 -1
  868. package/dist/core/hooks/files/files.js.map +1 -1
  869. package/dist/core/hooks/index.d.ts.map +1 -1
  870. package/dist/core/hooks/index.js.map +1 -1
  871. package/dist/core/hooks/infrastructures/createInfrastructureHooks.d.ts.map +1 -1
  872. package/dist/core/hooks/infrastructures/createInfrastructureHooks.js.map +1 -1
  873. package/dist/core/hooks/infrastructures/infrastructures.d.ts.map +1 -1
  874. package/dist/core/hooks/infrastructures/infrastructures.js.map +1 -1
  875. package/dist/core/hooks/openDataPortals/createOpenDataPortalHooks.d.ts.map +1 -1
  876. package/dist/core/hooks/openDataPortals/createOpenDataPortalHooks.js.map +1 -1
  877. package/dist/core/hooks/openDataPortals/openDataPortals.d.ts.map +1 -1
  878. package/dist/core/hooks/openDataPortals/openDataPortals.js.map +1 -1
  879. package/dist/core/hooks/organizations/createOrganizationHooks.d.ts.map +1 -1
  880. package/dist/core/hooks/organizations/createOrganizationHooks.js.map +1 -1
  881. package/dist/core/hooks/organizations/organizations.d.ts.map +1 -1
  882. package/dist/core/hooks/organizations/organizations.js.map +1 -1
  883. package/dist/core/hooks/ports/apiAdapter.d.ts.map +1 -1
  884. package/dist/core/hooks/provider.d.ts.map +1 -1
  885. package/dist/core/hooks/provider.js.map +1 -1
  886. package/dist/core/hooks/sensorTypes/createSensorTypeHooks.d.ts.map +1 -1
  887. package/dist/core/hooks/sensorTypes/createSensorTypeHooks.js.map +1 -1
  888. package/dist/core/hooks/sensorTypes/sensorTypes.d.ts.map +1 -1
  889. package/dist/core/hooks/sensorTypes/sensorTypes.js.map +1 -1
  890. package/dist/core/hooks/sensors/createSensorHooks.d.ts.map +1 -1
  891. package/dist/core/hooks/sensors/createSensorHooks.js.map +1 -1
  892. package/dist/core/hooks/sensors/sensors.d.ts.map +1 -1
  893. package/dist/core/hooks/sensors/sensors.js.map +1 -1
  894. package/dist/core/hooks/sites/createSiteHooks.d.ts.map +1 -1
  895. package/dist/core/hooks/sites/createSiteHooks.js.map +1 -1
  896. package/dist/core/hooks/sites/sites.d.ts.map +1 -1
  897. package/dist/core/hooks/sites/sites.js.map +1 -1
  898. package/dist/core/hooks/ui/use-mobile.d.ts.map +1 -1
  899. package/dist/core/hooks/ui/use-mobile.js.map +1 -1
  900. package/dist/core/hooks/users/createUserHooks.d.ts.map +1 -1
  901. package/dist/core/hooks/users/createUserHooks.js.map +1 -1
  902. package/dist/core/hooks/users/users.d.ts.map +1 -1
  903. package/dist/core/hooks/users/users.js.map +1 -1
  904. package/dist/core/index.d.ts.map +1 -1
  905. package/dist/core/index.js.map +1 -1
  906. package/dist/core/plugins/host/context.d.ts.map +1 -1
  907. package/dist/core/plugins/host/context.js.map +1 -1
  908. package/dist/core/plugins/host/errors.d.ts.map +1 -1
  909. package/dist/core/plugins/host/errors.js.map +1 -1
  910. package/dist/core/plugins/host/host.d.ts.map +1 -1
  911. package/dist/core/plugins/host/host.js.map +1 -1
  912. package/dist/core/plugins/host/provider.d.ts.map +1 -1
  913. package/dist/core/plugins/host/provider.js.map +1 -1
  914. package/dist/core/plugins/host/registry.d.ts.map +1 -1
  915. package/dist/core/plugins/host/registry.js.map +1 -1
  916. package/dist/core/plugins/installed.d.ts.map +1 -1
  917. package/dist/core/plugins/installed.js.map +1 -1
  918. package/dist/core/plugins/sdk/components.d.ts.map +1 -1
  919. package/dist/core/plugins/sdk/components.js.map +1 -1
  920. package/dist/core/plugins/sdk/index.d.ts.map +1 -1
  921. package/dist/core/plugins/sdk/index.js.map +1 -1
  922. package/dist/core/plugins/sdk/types.d.ts.map +1 -1
  923. package/dist/core/plugins/sdk/types.js.map +1 -1
  924. package/dist/core/store/ActionMap.d.ts.map +1 -1
  925. package/dist/core/store/AppConfig/context.d.ts.map +1 -1
  926. package/dist/core/store/AppConfig/context.js.map +1 -1
  927. package/dist/core/store/AppConfig/reducer.d.ts.map +1 -1
  928. package/dist/core/store/AppConfig/reducer.js.map +1 -1
  929. package/dist/core/store/BIM/context.d.ts.map +1 -1
  930. package/dist/core/store/BIM/context.js.map +1 -1
  931. package/dist/core/store/BIM/reducer.d.ts.map +1 -1
  932. package/dist/core/store/BIM/reducer.js.map +1 -1
  933. package/dist/core/store/Buildings/context.d.ts.map +1 -1
  934. package/dist/core/store/Buildings/context.js.map +1 -1
  935. package/dist/core/store/Buildings/reducer.d.ts.map +1 -1
  936. package/dist/core/store/Buildings/reducer.js.map +1 -1
  937. package/dist/core/store/CombineProviders.d.ts.map +1 -1
  938. package/dist/core/store/CombineProviders.js.map +1 -1
  939. package/dist/core/store/Content/context.d.ts.map +1 -1
  940. package/dist/core/store/Content/context.js.map +1 -1
  941. package/dist/core/store/Datasets/context.d.ts.map +1 -1
  942. package/dist/core/store/Datasets/context.js.map +1 -1
  943. package/dist/core/store/Datasets/reducer.d.ts.map +1 -1
  944. package/dist/core/store/Datasets/reducer.js.map +1 -1
  945. package/dist/core/store/Files/context.d.ts.map +1 -1
  946. package/dist/core/store/Files/context.js.map +1 -1
  947. package/dist/core/store/Files/reducer.d.ts.map +1 -1
  948. package/dist/core/store/Files/reducer.js.map +1 -1
  949. package/dist/core/store/Map/context.d.ts.map +1 -1
  950. package/dist/core/store/Map/context.js.map +1 -1
  951. package/dist/core/store/Map/reducer.d.ts.map +1 -1
  952. package/dist/core/store/Map/reducer.js.map +1 -1
  953. package/dist/core/store/Menus/context.d.ts.map +1 -1
  954. package/dist/core/store/Menus/context.js.map +1 -1
  955. package/dist/core/store/Menus/reducer.d.ts.map +1 -1
  956. package/dist/core/store/Menus/reducer.js.map +1 -1
  957. package/dist/core/store/Permissions/context.d.ts.map +1 -1
  958. package/dist/core/store/Permissions/context.js.map +1 -1
  959. package/dist/core/store/PointCloud/context.d.ts.map +1 -1
  960. package/dist/core/store/PointCloud/context.js.map +1 -1
  961. package/dist/core/store/PointCloud/reducer.d.ts.map +1 -1
  962. package/dist/core/store/PointCloud/reducer.js.map +1 -1
  963. package/dist/core/store/Tools/context.d.ts.map +1 -1
  964. package/dist/core/store/Tools/context.js.map +1 -1
  965. package/dist/core/store/Tools/reducer.d.ts.map +1 -1
  966. package/dist/core/store/Tools/reducer.js.map +1 -1
  967. package/dist/core/store/index.d.ts.map +1 -1
  968. package/dist/core/store/index.js.map +1 -1
  969. package/dist/core/styles/tailwindMerge.d.ts.map +1 -1
  970. package/dist/core/styles/tailwindMerge.js.map +1 -1
  971. package/dist/core/types/bim.d.ts.map +1 -1
  972. package/dist/core/types/datasetTypes.d.ts.map +1 -1
  973. package/dist/core/types/dbTypes.d.ts.map +1 -1
  974. package/dist/core/types/dbTypes.js.map +1 -1
  975. package/dist/core/types/files.d.ts.map +1 -1
  976. package/dist/core/types/global.d.ts.map +1 -1
  977. package/dist/core/types/global.js.map +1 -1
  978. package/dist/core/types/index.d.ts.map +1 -1
  979. package/dist/core/types/index.js.map +1 -1
  980. package/dist/core/types/map.d.ts.map +1 -1
  981. package/dist/core/types/martinTypes.d.ts.map +1 -1
  982. package/dist/core/types/martinTypes.js.map +1 -1
  983. package/dist/core/types/next-auth.d.ts.map +1 -1
  984. package/dist/core/types/tools.d.ts.map +1 -1
  985. package/dist/core/types/users.d.ts.map +1 -1
  986. package/dist/core/utils/acceptedFiles.d.ts.map +1 -1
  987. package/dist/core/utils/acceptedFiles.js.map +1 -1
  988. package/dist/core/utils/errorHandler.d.ts.map +1 -1
  989. package/dist/core/utils/errorHandler.js.map +1 -1
  990. package/dist/core/utils/getFileIcon.d.ts.map +1 -1
  991. package/dist/core/utils/getFileIcon.js.map +1 -1
  992. package/dist/core/utils/imageUtils.d.ts.map +1 -1
  993. package/dist/core/utils/imageUtils.js.map +1 -1
  994. package/dist/core/utils/index.d.ts.map +1 -1
  995. package/dist/core/utils/index.js.map +1 -1
  996. package/dist/core/utils/markerUtils.d.ts.map +1 -1
  997. package/dist/core/utils/markerUtils.js.map +1 -1
  998. package/dist/core/utils/memcache.d.ts.map +1 -1
  999. package/dist/core/utils/memcache.js.map +1 -1
  1000. package/dist/core/utils/roles.d.ts.map +1 -1
  1001. package/dist/core/utils/roles.js.map +1 -1
  1002. package/dist/core/utils/timeUtils.d.ts.map +1 -1
  1003. package/dist/core/utils/timeUtils.js.map +1 -1
  1004. package/dist/core/utils/utils.d.ts.map +1 -1
  1005. package/dist/core/utils/utils.js.map +1 -1
  1006. package/dist/index.d.ts.map +1 -1
  1007. package/dist/index.js.map +1 -1
  1008. package/package.json +6 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileIcon.tsx"],"sourcesContent":["import * as LR from 'lucide-react'\r\nimport { LoadingSpinner } from '../../../../../../../../components/ui/LoadingSpinner'\r\n\r\ninterface FileIconProps {\r\n mimeType?: string\r\n extension?: string\r\n url?: string | null\r\n size?: number\r\n}\r\n\r\nexport default function FileIcon({ mimeType, extension, url, size }: FileIconProps) {\r\n if (extension === 'uploading') {\r\n return <LoadingSpinner />\r\n }\r\n\r\n if (mimeType?.startsWith('image/')) {\r\n if (url) {\r\n return <img src={url} width={28} height={28} alt=\"File preview\" className=\"rounded object-cover\" />\r\n }\r\n return <LR.Image size={size} />\r\n }\r\n if (mimeType?.startsWith('video/')) {\r\n return <LR.Video size={size} />\r\n }\r\n if (mimeType === 'application/pdf') {\r\n return <LR.FileText size={size} />\r\n }\r\n // if (mimeType?.startsWith('model/')) {\r\n // return <LR.Box size={size} />\r\n // }\r\n\r\n // using extension for fall back\r\n const ext = extension?.toLowerCase()\r\n switch (ext?.toLowerCase()) {\r\n // documents\r\n case 'doc':\r\n case 'docx':\r\n case 'rtf':\r\n return <LR.FileText size={size} />\r\n\r\n // spreadsheets\r\n case 'xls':\r\n case 'xlsx':\r\n case 'csv':\r\n case 'dbf':\r\n return <LR.FileSpreadsheet size={size} />\r\n\r\n // presentations\r\n case 'ppt':\r\n case 'pptx':\r\n return <LR.Presentation size={size} />\r\n\r\n // archives\r\n case 'zip':\r\n case 'rar':\r\n case '7z':\r\n return <LR.Archive size={size} />\r\n\r\n // plain text\r\n case 'txt':\r\n return <LR.FileText size={size} />\r\n\r\n // PDF\r\n case 'pdf':\r\n return <LR.FileText size={size} />\r\n\r\n // images\r\n case 'jpg':\r\n case 'jpeg':\r\n case 'png':\r\n case 'gif':\r\n case 'bmp':\r\n case 'svg':\r\n return <LR.Image size={size} />\r\n\r\n // videos\r\n case 'mp4':\r\n case 'webm':\r\n case 'mov':\r\n case 'avi':\r\n case 'mkv':\r\n return <LR.Video size={size} />\r\n\r\n // audio\r\n case 'mp3':\r\n case 'wav':\r\n case 'ogg':\r\n case 'm4a':\r\n case 'flac':\r\n return <LR.Music size={size} />\r\n\r\n // 3D models\r\n case 'glb':\r\n case 'gltf':\r\n case 'obj':\r\n case 'fbx':\r\n case 'stl':\r\n case '3ds':\r\n case 'ply':\r\n case 'ifc':\r\n case 'rvt':\r\n case 'dae':\r\n case 'dxf':\r\n case 'dwg':\r\n return <LR.Box size={size} />\r\n\r\n // GIS vectors and sidecars\r\n case 'shp':\r\n case 'shx':\r\n case 'prj':\r\n case 'cpg':\r\n case 'geojson':\r\n return <LR.Map size={size} />\r\n\r\n // energy files\r\n case 'h2k':\r\n return <LR.Zap size={size} />\r\n\r\n // points clouds\r\n case 'laz':\r\n case 'las':\r\n return <LR.Grip size={size} />\r\n\r\n // fallback\r\n default:\r\n return <LR.File size={size} />\r\n }\r\n}\r\n"],"mappings":"AAYW;AAZX,YAAY,QAAQ;AACpB,SAAS,sBAAsB;AAShB,SAAR,SAA0B,EAAE,UAAU,WAAW,KAAK,KAAK,GAAkB;AAClF,MAAI,cAAc,aAAa;AAC7B,WAAO,oBAAC,kBAAe;AAAA,EACzB;AAEA,MAAI,qCAAU,WAAW,WAAW;AAClC,QAAI,KAAK;AACP,aAAO,oBAAC,SAAI,KAAK,KAAK,OAAO,IAAI,QAAQ,IAAI,KAAI,gBAAe,WAAU,wBAAuB;AAAA,IACnG;AACA,WAAO,oBAAC,GAAG,OAAH,EAAS,MAAY;AAAA,EAC/B;AACA,MAAI,qCAAU,WAAW,WAAW;AAClC,WAAO,oBAAC,GAAG,OAAH,EAAS,MAAY;AAAA,EAC/B;AACA,MAAI,aAAa,mBAAmB;AAClC,WAAO,oBAAC,GAAG,UAAH,EAAY,MAAY;AAAA,EAClC;AAMA,QAAM,MAAM,uCAAW;AACvB,UAAQ,2BAAK,eAAe;AAAA;AAAA,IAE1B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,UAAH,EAAY,MAAY;AAAA;AAAA,IAGlC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,iBAAH,EAAmB,MAAY;AAAA;AAAA,IAGzC,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,cAAH,EAAgB,MAAY;AAAA;AAAA,IAGtC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,SAAH,EAAW,MAAY;AAAA;AAAA,IAGjC,KAAK;AACH,aAAO,oBAAC,GAAG,UAAH,EAAY,MAAY;AAAA;AAAA,IAGlC,KAAK;AACH,aAAO,oBAAC,GAAG,UAAH,EAAY,MAAY;AAAA;AAAA,IAGlC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,OAAH,EAAS,MAAY;AAAA;AAAA,IAG/B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,OAAH,EAAS,MAAY;AAAA;AAAA,IAG/B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,OAAH,EAAS,MAAY;AAAA;AAAA,IAG/B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,KAAH,EAAO,MAAY;AAAA;AAAA,IAG7B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,KAAH,EAAO,MAAY;AAAA;AAAA,IAG7B,KAAK;AACH,aAAO,oBAAC,GAAG,KAAH,EAAO,MAAY;AAAA;AAAA,IAG7B,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,MAAH,EAAQ,MAAY;AAAA;AAAA,IAG9B;AACE,aAAO,oBAAC,GAAG,MAAH,EAAQ,MAAY;AAAA,EAChC;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileIcon.tsx"],"sourcesContent":["// 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 { LoadingSpinner } from '../../../../../../../../components/ui/LoadingSpinner'\r\n\r\ninterface FileIconProps {\r\n mimeType?: string\r\n extension?: string\r\n url?: string | null\r\n size?: number\r\n}\r\n\r\nexport default function FileIcon({ mimeType, extension, url, size }: FileIconProps) {\r\n if (extension === 'uploading') {\r\n return <LoadingSpinner />\r\n }\r\n\r\n if (mimeType?.startsWith('image/')) {\r\n if (url) {\r\n return <img src={url} width={28} height={28} alt=\"File preview\" className=\"rounded object-cover\" />\r\n }\r\n return <LR.Image size={size} />\r\n }\r\n if (mimeType?.startsWith('video/')) {\r\n return <LR.Video size={size} />\r\n }\r\n if (mimeType === 'application/pdf') {\r\n return <LR.FileText size={size} />\r\n }\r\n // if (mimeType?.startsWith('model/')) {\r\n // return <LR.Box size={size} />\r\n // }\r\n\r\n // using extension for fall back\r\n const ext = extension?.toLowerCase()\r\n switch (ext?.toLowerCase()) {\r\n // documents\r\n case 'doc':\r\n case 'docx':\r\n case 'rtf':\r\n return <LR.FileText size={size} />\r\n\r\n // spreadsheets\r\n case 'xls':\r\n case 'xlsx':\r\n case 'csv':\r\n case 'dbf':\r\n return <LR.FileSpreadsheet size={size} />\r\n\r\n // presentations\r\n case 'ppt':\r\n case 'pptx':\r\n return <LR.Presentation size={size} />\r\n\r\n // archives\r\n case 'zip':\r\n case 'rar':\r\n case '7z':\r\n return <LR.Archive size={size} />\r\n\r\n // plain text\r\n case 'txt':\r\n return <LR.FileText size={size} />\r\n\r\n // PDF\r\n case 'pdf':\r\n return <LR.FileText size={size} />\r\n\r\n // images\r\n case 'jpg':\r\n case 'jpeg':\r\n case 'png':\r\n case 'gif':\r\n case 'bmp':\r\n case 'svg':\r\n return <LR.Image size={size} />\r\n\r\n // videos\r\n case 'mp4':\r\n case 'webm':\r\n case 'mov':\r\n case 'avi':\r\n case 'mkv':\r\n return <LR.Video size={size} />\r\n\r\n // audio\r\n case 'mp3':\r\n case 'wav':\r\n case 'ogg':\r\n case 'm4a':\r\n case 'flac':\r\n return <LR.Music size={size} />\r\n\r\n // 3D models\r\n case 'glb':\r\n case 'gltf':\r\n case 'obj':\r\n case 'fbx':\r\n case 'stl':\r\n case '3ds':\r\n case 'ply':\r\n case 'ifc':\r\n case 'rvt':\r\n case 'dae':\r\n case 'dxf':\r\n case 'dwg':\r\n return <LR.Box size={size} />\r\n\r\n // GIS vectors and sidecars\r\n case 'shp':\r\n case 'shx':\r\n case 'prj':\r\n case 'cpg':\r\n case 'geojson':\r\n return <LR.Map size={size} />\r\n\r\n // energy files\r\n case 'h2k':\r\n return <LR.Zap size={size} />\r\n\r\n // points clouds\r\n case 'laz':\r\n case 'las':\r\n return <LR.Grip size={size} />\r\n\r\n // fallback\r\n default:\r\n return <LR.File size={size} />\r\n }\r\n}\r\n"],"mappings":"AAeW;AAZX,YAAY,QAAQ;AACpB,SAAS,sBAAsB;AAShB,SAAR,SAA0B,EAAE,UAAU,WAAW,KAAK,KAAK,GAAkB;AAClF,MAAI,cAAc,aAAa;AAC7B,WAAO,oBAAC,kBAAe;AAAA,EACzB;AAEA,MAAI,qCAAU,WAAW,WAAW;AAClC,QAAI,KAAK;AACP,aAAO,oBAAC,SAAI,KAAK,KAAK,OAAO,IAAI,QAAQ,IAAI,KAAI,gBAAe,WAAU,wBAAuB;AAAA,IACnG;AACA,WAAO,oBAAC,GAAG,OAAH,EAAS,MAAY;AAAA,EAC/B;AACA,MAAI,qCAAU,WAAW,WAAW;AAClC,WAAO,oBAAC,GAAG,OAAH,EAAS,MAAY;AAAA,EAC/B;AACA,MAAI,aAAa,mBAAmB;AAClC,WAAO,oBAAC,GAAG,UAAH,EAAY,MAAY;AAAA,EAClC;AAMA,QAAM,MAAM,uCAAW;AACvB,UAAQ,2BAAK,eAAe;AAAA;AAAA,IAE1B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,UAAH,EAAY,MAAY;AAAA;AAAA,IAGlC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,iBAAH,EAAmB,MAAY;AAAA;AAAA,IAGzC,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,cAAH,EAAgB,MAAY;AAAA;AAAA,IAGtC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,SAAH,EAAW,MAAY;AAAA;AAAA,IAGjC,KAAK;AACH,aAAO,oBAAC,GAAG,UAAH,EAAY,MAAY;AAAA;AAAA,IAGlC,KAAK;AACH,aAAO,oBAAC,GAAG,UAAH,EAAY,MAAY;AAAA;AAAA,IAGlC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,OAAH,EAAS,MAAY;AAAA;AAAA,IAG/B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,OAAH,EAAS,MAAY;AAAA;AAAA,IAG/B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,OAAH,EAAS,MAAY;AAAA;AAAA,IAG/B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,KAAH,EAAO,MAAY;AAAA;AAAA,IAG7B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,KAAH,EAAO,MAAY;AAAA;AAAA,IAG7B,KAAK;AACH,aAAO,oBAAC,GAAG,KAAH,EAAO,MAAY;AAAA;AAAA,IAG7B,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,GAAG,MAAH,EAAQ,MAAY;AAAA;AAAA,IAG9B;AACE,aAAO,oBAAC,GAAG,MAAH,EAAQ,MAAY;AAAA,EAChC;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"FileManagerRow.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAA;AAE9D,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,YAAY,EAAE,MAAM,IAAI,CAAA;CACzB;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,OAAO,EACP,kBAAkB,EAClB,UAAU,EACV,YAAY,GACb,EAAE,mBAAmB,qBAkFrB"}
1
+ {"version":3,"file":"FileManagerRow.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAA;AAE9D,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,YAAY,EAAE,MAAM,IAAI,CAAA;CACzB;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,OAAO,EACP,kBAAkB,EAClB,UAAU,EACV,YAAY,GACb,EAAE,mBAAmB,qBAkFrB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport FileIcon from './FileIcon'\r\nimport { Button } from '../../../../../../../../components/ui/Button'\r\nimport * as LR from 'lucide-react'\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\nimport { MapContext } from '../../../../../../../../store'\r\nimport ConfirmDialog from '../../../../../../../ConfirmDialog'\r\nimport { DbFile } from '../../../../../../../../types/dbTypes'\r\n\r\ninterface FileManagerRowProps {\r\n file: DbFile\r\n isOnMap: boolean\r\n onVisibilityToggle: () => void\r\n onEditFile: () => void\r\n onRemoveFile: () => void\r\n}\r\n\r\nexport function FileManagerRow({\r\n file,\r\n isOnMap,\r\n onVisibilityToggle,\r\n onEditFile,\r\n onRemoveFile,\r\n}: FileManagerRowProps) {\r\n const [isDeleting, setIsDeleting] = React.useState(false)\r\n const [isDeleteDialogOpen, setIsDeleteDialogOpen] = React.useState(false)\r\n const { state: mapState } = React.useContext(MapContext)\r\n const t = useTranslations('FileMoreOptions')\r\n const { map } = mapState.map\r\n\r\n const handleIconClick = (file: DbFile) => {\r\n if (map == null) return\r\n let center: [number, number]\r\n if ('lng' in file.position && 'lat' in file.position) {\r\n center = [file.position.lng, file.position.lat]\r\n }\r\n else if ('x' in file.position && 'y' in file.position) {\r\n center = [Number(file.position.x), Number(file.position.y)]\r\n }\r\n else {\r\n center = [0, 0]\r\n }\r\n map.flyTo({ center, zoom: 14, speed: 10, curve: 1, maxDuration: 100, essential: true })\r\n }\r\n\r\n return (\r\n <div\r\n className={\r\n 'flex items-center p-2 gap-2 border rounded-sm text-sm cursor-pointer'\r\n + (isDeleting ? ' animate-pulse bg-yellow-50' : '')\r\n }\r\n title={file.name}\r\n >\r\n <FileIcon mimeType={file.mimeType} extension={file.extension} size={20} />\r\n\r\n <span onClick={() => handleIconClick(file)} className=\"flex-1 truncate\">{file.name}</span>\r\n\r\n <div className=\"flex gap-0\">\r\n <Button\r\n variant=\"ghost\"\r\n className=\"pointer-events-auto p-1\"\r\n size=\"sm\"\r\n onClick={onVisibilityToggle}\r\n >\r\n {isOnMap ? <LR.Eye size={14} /> : <LR.EyeOff size={14} />}\r\n </Button>\r\n <Button\r\n variant=\"ghost\"\r\n className=\"pointer-events-auto p-1\"\r\n size=\"sm\"\r\n onClick={onEditFile}\r\n >\r\n <LR.FileEdit size={14} />\r\n </Button>\r\n\r\n <Button\r\n variant=\"ghost\"\r\n className=\"pointer-events-auto p-1\"\r\n size=\"sm\"\r\n onClick={() => setIsDeleteDialogOpen(true)}\r\n >\r\n <LR.Trash2 size={14} />\r\n </Button>\r\n </div>\r\n\r\n <ConfirmDialog\r\n isOpen={isDeleteDialogOpen}\r\n isDeleting={isDeleting}\r\n onOpenChange={setIsDeleteDialogOpen}\r\n handleConfirm={async (e) => {\r\n e.preventDefault()\r\n setIsDeleting(true)\r\n try {\r\n await Promise.resolve(onRemoveFile())\r\n }\r\n finally {\r\n setIsDeleting(false)\r\n setIsDeleteDialogOpen(false)\r\n }\r\n }}\r\n itemName={file.name}\r\n dataType={t('file')}\r\n />\r\n </div>\r\n )\r\n}\r\n"],"mappings":";AAuDM,cAIA,YAJA;AArDN,OAAO,cAAc;AACrB,SAAS,cAAc;AACvB,YAAY,QAAQ;AACpB,YAAY,WAAW;AACvB,SAAS,uBAAuB;AAChC,SAAS,kBAAkB;AAC3B,OAAO,mBAAmB;AAWnB,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAwB;AACtB,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM,SAAS,KAAK;AACxD,QAAM,CAAC,oBAAoB,qBAAqB,IAAI,MAAM,SAAS,KAAK;AACxE,QAAM,EAAE,OAAO,SAAS,IAAI,MAAM,WAAW,UAAU;AACvD,QAAM,IAAI,gBAAgB,iBAAiB;AAC3C,QAAM,EAAE,IAAI,IAAI,SAAS;AAEzB,QAAM,kBAAkB,CAACA,UAAiB;AACxC,QAAI,OAAO,KAAM;AACjB,QAAI;AACJ,QAAI,SAASA,MAAK,YAAY,SAASA,MAAK,UAAU;AACpD,eAAS,CAACA,MAAK,SAAS,KAAKA,MAAK,SAAS,GAAG;AAAA,IAChD,WACS,OAAOA,MAAK,YAAY,OAAOA,MAAK,UAAU;AACrD,eAAS,CAAC,OAAOA,MAAK,SAAS,CAAC,GAAG,OAAOA,MAAK,SAAS,CAAC,CAAC;AAAA,IAC5D,OACK;AACH,eAAS,CAAC,GAAG,CAAC;AAAA,IAChB;AACA,QAAI,MAAM,EAAE,QAAQ,MAAM,IAAI,OAAO,IAAI,OAAO,GAAG,aAAa,KAAK,WAAW,KAAK,CAAC;AAAA,EACxF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WACE,0EACG,aAAa,gCAAgC;AAAA,MAElD,OAAO,KAAK;AAAA,MAEZ;AAAA,4BAAC,YAAS,UAAU,KAAK,UAAU,WAAW,KAAK,WAAW,MAAM,IAAI;AAAA,QAExE,oBAAC,UAAK,SAAS,MAAM,gBAAgB,IAAI,GAAG,WAAU,mBAAmB,eAAK,MAAK;AAAA,QAEnF,qBAAC,SAAI,WAAU,cACb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,WAAU;AAAA,cACV,MAAK;AAAA,cACL,SAAS;AAAA,cAER,oBAAU,oBAAC,GAAG,KAAH,EAAO,MAAM,IAAI,IAAK,oBAAC,GAAG,QAAH,EAAU,MAAM,IAAI;AAAA;AAAA,UACzD;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,WAAU;AAAA,cACV,MAAK;AAAA,cACL,SAAS;AAAA,cAET,8BAAC,GAAG,UAAH,EAAY,MAAM,IAAI;AAAA;AAAA,UACzB;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,WAAU;AAAA,cACV,MAAK;AAAA,cACL,SAAS,MAAM,sBAAsB,IAAI;AAAA,cAEzC,8BAAC,GAAG,QAAH,EAAU,MAAM,IAAI;AAAA;AAAA,UACvB;AAAA,WACF;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,QAAQ;AAAA,YACR;AAAA,YACA,cAAc;AAAA,YACd,eAAe,OAAO,MAAM;AAC1B,gBAAE,eAAe;AACjB,4BAAc,IAAI;AAClB,kBAAI;AACF,sBAAM,QAAQ,QAAQ,aAAa,CAAC;AAAA,cACtC,UACA;AACE,8BAAc,KAAK;AACnB,sCAAsB,KAAK;AAAA,cAC7B;AAAA,YACF;AAAA,YACA,UAAU,KAAK;AAAA,YACf,UAAU,EAAE,MAAM;AAAA;AAAA,QACpB;AAAA;AAAA;AAAA,EACF;AAEJ;","names":["file"]}
1
+ {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.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 FileIcon from './FileIcon'\r\nimport { Button } from '../../../../../../../../components/ui/Button'\r\nimport * as LR from 'lucide-react'\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\nimport { MapContext } from '../../../../../../../../store'\r\nimport ConfirmDialog from '../../../../../../../ConfirmDialog'\r\nimport { DbFile } from '../../../../../../../../types/dbTypes'\r\n\r\ninterface FileManagerRowProps {\r\n file: DbFile\r\n isOnMap: boolean\r\n onVisibilityToggle: () => void\r\n onEditFile: () => void\r\n onRemoveFile: () => void\r\n}\r\n\r\nexport function FileManagerRow({\r\n file,\r\n isOnMap,\r\n onVisibilityToggle,\r\n onEditFile,\r\n onRemoveFile,\r\n}: FileManagerRowProps) {\r\n const [isDeleting, setIsDeleting] = React.useState(false)\r\n const [isDeleteDialogOpen, setIsDeleteDialogOpen] = React.useState(false)\r\n const { state: mapState } = React.useContext(MapContext)\r\n const t = useTranslations('FileMoreOptions')\r\n const { map } = mapState.map\r\n\r\n const handleIconClick = (file: DbFile) => {\r\n if (map == null) return\r\n let center: [number, number]\r\n if ('lng' in file.position && 'lat' in file.position) {\r\n center = [file.position.lng, file.position.lat]\r\n }\r\n else if ('x' in file.position && 'y' in file.position) {\r\n center = [Number(file.position.x), Number(file.position.y)]\r\n }\r\n else {\r\n center = [0, 0]\r\n }\r\n map.flyTo({ center, zoom: 14, speed: 10, curve: 1, maxDuration: 100, essential: true })\r\n }\r\n\r\n return (\r\n <div\r\n className={\r\n 'flex items-center p-2 gap-2 border rounded-sm text-sm cursor-pointer'\r\n + (isDeleting ? ' animate-pulse bg-yellow-50' : '')\r\n }\r\n title={file.name}\r\n >\r\n <FileIcon mimeType={file.mimeType} extension={file.extension} size={20} />\r\n\r\n <span onClick={() => handleIconClick(file)} className=\"flex-1 truncate\">{file.name}</span>\r\n\r\n <div className=\"flex gap-0\">\r\n <Button\r\n variant=\"ghost\"\r\n className=\"pointer-events-auto p-1\"\r\n size=\"sm\"\r\n onClick={onVisibilityToggle}\r\n >\r\n {isOnMap ? <LR.Eye size={14} /> : <LR.EyeOff size={14} />}\r\n </Button>\r\n <Button\r\n variant=\"ghost\"\r\n className=\"pointer-events-auto p-1\"\r\n size=\"sm\"\r\n onClick={onEditFile}\r\n >\r\n <LR.FileEdit size={14} />\r\n </Button>\r\n\r\n <Button\r\n variant=\"ghost\"\r\n className=\"pointer-events-auto p-1\"\r\n size=\"sm\"\r\n onClick={() => setIsDeleteDialogOpen(true)}\r\n >\r\n <LR.Trash2 size={14} />\r\n </Button>\r\n </div>\r\n\r\n <ConfirmDialog\r\n isOpen={isDeleteDialogOpen}\r\n isDeleting={isDeleting}\r\n onOpenChange={setIsDeleteDialogOpen}\r\n handleConfirm={async (e) => {\r\n e.preventDefault()\r\n setIsDeleting(true)\r\n try {\r\n await Promise.resolve(onRemoveFile())\r\n }\r\n finally {\r\n setIsDeleting(false)\r\n setIsDeleteDialogOpen(false)\r\n }\r\n }}\r\n itemName={file.name}\r\n dataType={t('file')}\r\n />\r\n </div>\r\n )\r\n}\r\n"],"mappings":";AA0DM,cAIA,YAJA;AArDN,OAAO,cAAc;AACrB,SAAS,cAAc;AACvB,YAAY,QAAQ;AACpB,YAAY,WAAW;AACvB,SAAS,uBAAuB;AAChC,SAAS,kBAAkB;AAC3B,OAAO,mBAAmB;AAWnB,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAwB;AACtB,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM,SAAS,KAAK;AACxD,QAAM,CAAC,oBAAoB,qBAAqB,IAAI,MAAM,SAAS,KAAK;AACxE,QAAM,EAAE,OAAO,SAAS,IAAI,MAAM,WAAW,UAAU;AACvD,QAAM,IAAI,gBAAgB,iBAAiB;AAC3C,QAAM,EAAE,IAAI,IAAI,SAAS;AAEzB,QAAM,kBAAkB,CAACA,UAAiB;AACxC,QAAI,OAAO,KAAM;AACjB,QAAI;AACJ,QAAI,SAASA,MAAK,YAAY,SAASA,MAAK,UAAU;AACpD,eAAS,CAACA,MAAK,SAAS,KAAKA,MAAK,SAAS,GAAG;AAAA,IAChD,WACS,OAAOA,MAAK,YAAY,OAAOA,MAAK,UAAU;AACrD,eAAS,CAAC,OAAOA,MAAK,SAAS,CAAC,GAAG,OAAOA,MAAK,SAAS,CAAC,CAAC;AAAA,IAC5D,OACK;AACH,eAAS,CAAC,GAAG,CAAC;AAAA,IAChB;AACA,QAAI,MAAM,EAAE,QAAQ,MAAM,IAAI,OAAO,IAAI,OAAO,GAAG,aAAa,KAAK,WAAW,KAAK,CAAC;AAAA,EACxF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WACE,0EACG,aAAa,gCAAgC;AAAA,MAElD,OAAO,KAAK;AAAA,MAEZ;AAAA,4BAAC,YAAS,UAAU,KAAK,UAAU,WAAW,KAAK,WAAW,MAAM,IAAI;AAAA,QAExE,oBAAC,UAAK,SAAS,MAAM,gBAAgB,IAAI,GAAG,WAAU,mBAAmB,eAAK,MAAK;AAAA,QAEnF,qBAAC,SAAI,WAAU,cACb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,WAAU;AAAA,cACV,MAAK;AAAA,cACL,SAAS;AAAA,cAER,oBAAU,oBAAC,GAAG,KAAH,EAAO,MAAM,IAAI,IAAK,oBAAC,GAAG,QAAH,EAAU,MAAM,IAAI;AAAA;AAAA,UACzD;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,WAAU;AAAA,cACV,MAAK;AAAA,cACL,SAAS;AAAA,cAET,8BAAC,GAAG,UAAH,EAAY,MAAM,IAAI;AAAA;AAAA,UACzB;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,WAAU;AAAA,cACV,MAAK;AAAA,cACL,SAAS,MAAM,sBAAsB,IAAI;AAAA,cAEzC,8BAAC,GAAG,QAAH,EAAU,MAAM,IAAI;AAAA;AAAA,UACvB;AAAA,WACF;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,QAAQ;AAAA,YACR;AAAA,YACA,cAAc;AAAA,YACd,eAAe,OAAO,MAAM;AAC1B,gBAAE,eAAe;AACjB,4BAAc,IAAI;AAClB,kBAAI;AACF,sBAAM,QAAQ,QAAQ,aAAa,CAAC;AAAA,cACtC,UACA;AACE,8BAAc,KAAK;AACnB,sCAAsB,KAAK;AAAA,cAC7B;AAAA,YACF;AAAA,YACA,UAAU,KAAK;AAAA,YACf,UAAU,EAAE,MAAM;AAAA;AAAA,QACpB;AAAA;AAAA;AAAA,EACF;AAEJ;","names":["file"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MapFileManager.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA0B9B,KAAK,eAAe,GAAG;IACrB,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAA;CAC9B,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAAE,gBAAgB,EAAE,EAAE,eAAe,qBA0F3E"}
1
+ {"version":3,"file":"MapFileManager.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA0B9B,KAAK,eAAe,GAAG;IACrB,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAA;CAC9B,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAAE,gBAAgB,EAAE,EAAE,eAAe,qBA0F3E"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport * as React from 'react'\r\nimport { Button } from '../../../../../../../../components/ui/Button'\r\nimport { Card, CardContent, CardHeader, CardTitle } from '../../../../../../../../components/ui/Card'\r\nimport * as LR from 'lucide-react'\r\nimport { FilesContext } from '../../../../../../../../store'\r\n\r\nimport { mutate } from 'swr'\r\nimport { FileManagerRow } from './FileManagerRow'\r\nimport { DbFile } from '../../../../../../../../types/dbTypes'\r\n\r\nconst is3DModelFile = (extension?: string | null): boolean => {\r\n if (!extension) return false\r\n return ['glb', 'gltf', 'fbx', 'obj', 'collada'].includes(extension.toLowerCase())\r\n}\r\n\r\nconst isHiddenFileType = (extension?: string | null): boolean => {\r\n if (!extension) return false\r\n const ext = extension.toLowerCase()\r\n return ext === 'frag' || ext === 'ifc'\r\n}\r\n\r\nconst shouldExcludeByTag = (tag?: string | null): boolean => {\r\n if (!tag) return false\r\n return tag === 'user' || tag === 'bim-file' || tag === 'fragment-file' || tag === 'bimModel'\r\n}\r\n\r\ntype FileManagerProp = {\r\n closeFileManager?: () => void\r\n}\r\n\r\nexport default function MapFileManager({ closeFileManager }: FileManagerProp) {\r\n const { state: fileState, dispatch: fileDispatch } = React.useContext(FilesContext)\r\n const { files, mapFileIds } = fileState.files\r\n\r\n const mapFiles: DbFile[] = files.filter(file =>\r\n !is3DModelFile(file.extension) && !isHiddenFileType(file.extension) && !shouldExcludeByTag(file.tag)\r\n )\r\n\r\n const allOnMap = mapFiles.length > 0 && mapFiles.every(file => mapFileIds.includes(file.id))\r\n\r\n const toggleAll = () => {\r\n if (allOnMap) {\r\n mapFiles.forEach(file => fileDispatch({ type: 'REMOVE_FROM_MAP', payload: { id: file.id } }))\r\n }\r\n else {\r\n fileDispatch({ type: 'ADD_ALL_TO_MAP', payload: { ids: mapFiles.map(f => f.id) } })\r\n }\r\n }\r\n\r\n const handleDeleteFile = async (file: DbFile) => {\r\n try {\r\n const response = await fetch(`/api/files/${file.id}`, { method: 'DELETE' })\r\n if (response.ok) {\r\n fileDispatch({ type: 'REMOVE_FILE', payload: { id: file.id } })\r\n }\r\n mutate(['files'])\r\n }\r\n catch (error) {\r\n console.error('Error when deleting a file', error)\r\n }\r\n }\r\n\r\n return (\r\n <Card className=\"fixed bottom-12 right-[50%] translate-x-[50%] bg-background round-sm shadow-md z-10 pointer-events-auto max-w-[410px] max-h-[60vh]\">\r\n <CardHeader className=\"flex flex-row justify-between items-center pointer-events-auto py-0\">\r\n <CardTitle className=\"text-sm\">\r\n Added Files (\r\n {mapFiles.length}\r\n )\r\n </CardTitle>\r\n <div>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n onClick={toggleAll}\r\n className=\"opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\"\r\n >\r\n {allOnMap ? <LR.Eye size={18} /> : <LR.EyeOff size={18} />}\r\n </Button>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n onClick={() => closeFileManager()}\r\n className=\"opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\"\r\n >\r\n <span className=\"sr-only\">Clear</span>\r\n <LR.X size={18} />\r\n </Button>\r\n </div>\r\n </CardHeader>\r\n <CardContent>\r\n {mapFiles.length === 0\r\n ? (\r\n <div className=\"py-4 text-center text-sm text-muted-foreground\">\r\n No files added to map\r\n </div>\r\n )\r\n : (\r\n <div className=\"space-y-2 max-h-40 overflow-y-auto\">\r\n {mapFiles.map(file => (\r\n <FileManagerRow\r\n key={file.id}\r\n file={file}\r\n isOnMap={mapFileIds.includes(file.id)}\r\n onVisibilityToggle={() => {\r\n const isOnMap = mapFileIds.includes(file.id)\r\n fileDispatch({\r\n type: isOnMap ? 'REMOVE_FROM_MAP' : 'ADD_TO_MAP',\r\n payload: { id: file.id },\r\n })\r\n }}\r\n onRemoveFile={() => handleDeleteFile(file)}\r\n onEditFile={() => console.log('Editing file with id', file.id)}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </CardContent>\r\n </Card>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.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 { Button } from '../../../../../../../../components/ui/Button'\r\nimport { Card, CardContent, CardHeader, CardTitle } from '../../../../../../../../components/ui/Card'\r\nimport * as LR from 'lucide-react'\r\nimport { FilesContext } from '../../../../../../../../store'\r\n\r\nimport { mutate } from 'swr'\r\nimport { FileManagerRow } from './FileManagerRow'\r\nimport { DbFile } from '../../../../../../../../types/dbTypes'\r\n\r\nconst is3DModelFile = (extension?: string | null): boolean => {\r\n if (!extension) return false\r\n return ['glb', 'gltf', 'fbx', 'obj', 'collada'].includes(extension.toLowerCase())\r\n}\r\n\r\nconst isHiddenFileType = (extension?: string | null): boolean => {\r\n if (!extension) return false\r\n const ext = extension.toLowerCase()\r\n return ext === 'frag' || ext === 'ifc'\r\n}\r\n\r\nconst shouldExcludeByTag = (tag?: string | null): boolean => {\r\n if (!tag) return false\r\n return tag === 'user' || tag === 'bim-file' || tag === 'fragment-file' || tag === 'bimModel'\r\n}\r\n\r\ntype FileManagerProp = {\r\n closeFileManager?: () => void\r\n}\r\n\r\nexport default function MapFileManager({ closeFileManager }: FileManagerProp) {\r\n const { state: fileState, dispatch: fileDispatch } = React.useContext(FilesContext)\r\n const { files, mapFileIds } = fileState.files\r\n\r\n const mapFiles: DbFile[] = files.filter(file =>\r\n !is3DModelFile(file.extension) && !isHiddenFileType(file.extension) && !shouldExcludeByTag(file.tag)\r\n )\r\n\r\n const allOnMap = mapFiles.length > 0 && mapFiles.every(file => mapFileIds.includes(file.id))\r\n\r\n const toggleAll = () => {\r\n if (allOnMap) {\r\n mapFiles.forEach(file => fileDispatch({ type: 'REMOVE_FROM_MAP', payload: { id: file.id } }))\r\n }\r\n else {\r\n fileDispatch({ type: 'ADD_ALL_TO_MAP', payload: { ids: mapFiles.map(f => f.id) } })\r\n }\r\n }\r\n\r\n const handleDeleteFile = async (file: DbFile) => {\r\n try {\r\n const response = await fetch(`/api/files/${file.id}`, { method: 'DELETE' })\r\n if (response.ok) {\r\n fileDispatch({ type: 'REMOVE_FILE', payload: { id: file.id } })\r\n }\r\n mutate(['files'])\r\n }\r\n catch (error) {\r\n console.error('Error when deleting a file', error)\r\n }\r\n }\r\n\r\n return (\r\n <Card className=\"fixed bottom-12 right-[50%] translate-x-[50%] bg-background round-sm shadow-md z-10 pointer-events-auto max-w-[410px] max-h-[60vh]\">\r\n <CardHeader className=\"flex flex-row justify-between items-center pointer-events-auto py-0\">\r\n <CardTitle className=\"text-sm\">\r\n Added Files (\r\n {mapFiles.length}\r\n )\r\n </CardTitle>\r\n <div>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n onClick={toggleAll}\r\n className=\"opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\"\r\n >\r\n {allOnMap ? <LR.Eye size={18} /> : <LR.EyeOff size={18} />}\r\n </Button>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n onClick={() => closeFileManager()}\r\n className=\"opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\"\r\n >\r\n <span className=\"sr-only\">Clear</span>\r\n <LR.X size={18} />\r\n </Button>\r\n </div>\r\n </CardHeader>\r\n <CardContent>\r\n {mapFiles.length === 0\r\n ? (\r\n <div className=\"py-4 text-center text-sm text-muted-foreground\">\r\n No files added to map\r\n </div>\r\n )\r\n : (\r\n <div className=\"space-y-2 max-h-40 overflow-y-auto\">\r\n {mapFiles.map(file => (\r\n <FileManagerRow\r\n key={file.id}\r\n file={file}\r\n isOnMap={mapFileIds.includes(file.id)}\r\n onVisibilityToggle={() => {\r\n const isOnMap = mapFileIds.includes(file.id)\r\n fileDispatch({\r\n type: isOnMap ? 'REMOVE_FROM_MAP' : 'ADD_TO_MAP',\r\n payload: { id: file.id },\r\n })\r\n }}\r\n onRemoveFile={() => handleDeleteFile(file)}\r\n onEditFile={() => console.log('Editing file with id', file.id)}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </CardContent>\r\n </Card>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"MapFileMarker.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileMarker.tsx"],"names":[],"mappings":"AAKA,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,QAAQ,EACR,SAAS,EACT,GAAG,EACH,OAAO,EACP,SAAS,GACV,EAAE,kBAAkB,+BAYpB"}
1
+ {"version":3,"file":"MapFileMarker.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileMarker.tsx"],"names":[],"mappings":"AAQA,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,QAAQ,EACR,SAAS,EACT,GAAG,EACH,OAAO,EACP,SAAS,GACV,EAAE,kBAAkB,+BAYpB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileMarker.tsx"],"sourcesContent":["import * as LR from 'lucide-react'\r\nimport { Button } from '../../../../../../../../components/ui/Button'\r\n\r\nimport FileIcon from './FileIcon'\r\n\r\ninterface MapFileMarkerProps {\r\n mimeType: string\r\n extension?: string\r\n url?: string | null\r\n onClick?: () => void\r\n onDbClick?: () => void\r\n}\r\n\r\nexport default function MapFileMarker({\r\n mimeType,\r\n extension,\r\n url,\r\n onClick,\r\n onDbClick,\r\n}: MapFileMarkerProps) {\r\n return (\r\n <Button\r\n variant=\"outline\"\r\n size=\"default\"\r\n onClick={onClick}\r\n onDoubleClick={onDbClick}\r\n className=\"bg-white/90 w-9 h-9 rounded-[50%] hover:bg-white pointer-events-auto cursor-pointer border border-gray-200 shadow-lg p-0 text-xs font-sans flex items-center gap-2 max-w-[200px] transition-transform duration-200 ease-in-out hover:scale-105 group\"\r\n >\r\n <FileIcon mimeType={mimeType} extension={extension} url={url} size={18} />\r\n </Button>\r\n )\r\n}\r\n"],"mappings":"AA4BM;AA3BN,SAAS,cAAc;AAEvB,OAAO,cAAc;AAUN,SAAR,cAA+B;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAuB;AACrB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL;AAAA,MACA,eAAe;AAAA,MACf,WAAU;AAAA,MAEV,8BAAC,YAAS,UAAoB,WAAsB,KAAU,MAAM,IAAI;AAAA;AAAA,EAC1E;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileMarker.tsx"],"sourcesContent":["// 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 { Button } from '../../../../../../../../components/ui/Button'\r\n\r\nimport FileIcon from './FileIcon'\r\n\r\ninterface MapFileMarkerProps {\r\n mimeType: string\r\n extension?: string\r\n url?: string | null\r\n onClick?: () => void\r\n onDbClick?: () => void\r\n}\r\n\r\nexport default function MapFileMarker({\r\n mimeType,\r\n extension,\r\n url,\r\n onClick,\r\n onDbClick,\r\n}: MapFileMarkerProps) {\r\n return (\r\n <Button\r\n variant=\"outline\"\r\n size=\"default\"\r\n onClick={onClick}\r\n onDoubleClick={onDbClick}\r\n className=\"bg-white/90 w-9 h-9 rounded-[50%] hover:bg-white pointer-events-auto cursor-pointer border border-gray-200 shadow-lg p-0 text-xs font-sans flex items-center gap-2 max-w-[200px] transition-transform duration-200 ease-in-out hover:scale-105 group\"\r\n >\r\n <FileIcon mimeType={mimeType} extension={extension} url={url} size={18} />\r\n </Button>\r\n )\r\n}\r\n"],"mappings":"AA+BM;AA3BN,SAAS,cAAc;AAEvB,OAAO,cAAc;AAUN,SAAR,cAA+B;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAuB;AACrB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL;AAAA,MACA,eAAe;AAAA,MACf,WAAU;AAAA,MAEV,8BAAC,YAAS,UAAoB,WAAsB,KAAU,MAAM,IAAI;AAAA;AAAA,EAC1E;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA6D9B,eAAO,MAAM,UAAU,yBA8ItB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA6D9B,eAAO,MAAM,UAAU,yBA8ItB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/index.tsx"],"sourcesContent":["'use client'\r\nimport * as React from 'react'\r\nimport { Marker } from 'react-map-gl/maplibre'\r\nimport { FilesContext, MapContext } from '../../../../../../../store'\r\nimport MapFileMarker from './components/MapFileMarker'\r\nimport MapFileManager from './components/MapFileManager'\r\nimport { openPopupWindow } from './utils/openFileInPopUpWindow'\r\nimport { FileModelLayer } from './FileModelLayer/FileModelLayer'\r\nimport { useFile, useFiles, useDeleteFile } from '../../../../../../../hooks/files/files'\r\nimport { DbFile } from '../../../../../../../types/dbTypes'\r\nimport { EditPosition } from '../EditPosition'\r\nimport { PlaceOnMap } from '../PlaceOnMap'\r\nimport type { FileAction } from '../../../../../../../types/global'\r\nimport { downloadDbFile, ViewerContextMenu } from '../../../../../../ui/FilesManager'\r\n\r\nconst is3DModelFile = (extension?: string | null): boolean => {\r\n if (!extension) return false\r\n return ['glb', 'gltf', 'fbx', 'obj', 'collada'].includes(extension.toLowerCase())\r\n}\r\n\r\nconst isHiddenFileType = (extension?: string | null): boolean => {\r\n if (!extension) return false\r\n const ext = extension.toLowerCase()\r\n return ext === 'frag' || ext === 'ifc'\r\n}\r\n\r\nconst shouldExcludeByTag = (tag?: string | null): boolean => {\r\n if (!tag) return false\r\n return tag === 'user' || tag === 'bim-file' || tag === 'fragment-file' || tag === 'bimModel'\r\n}\r\n\r\n// ── Per-marker component — fetches its own file data via useFile(id) ──────────\r\ninterface FileMarkerItemProps {\r\n id: number\r\n editingFileId?: number\r\n onContextMenu: (e: React.MouseEvent, file: DbFile) => void\r\n}\r\n\r\nconst FileMarkerItem = React.memo(({ id, editingFileId, onContextMenu }: FileMarkerItemProps) => {\r\n const { file } = useFile(id)\r\n\r\n if (!file) return null\r\n if (file.id === editingFileId) return null\r\n if (is3DModelFile(file.extension) || isHiddenFileType(file.extension) || shouldExcludeByTag(file.tag)) return null\r\n if (!file.lat || !file.lng) return null\r\n\r\n return (\r\n <Marker latitude={file.lat} longitude={file.lng}>\r\n <div onContextMenu={e => onContextMenu(e, file)}>\r\n <MapFileMarker\r\n mimeType={file.mimeType}\r\n extension={file.extension}\r\n url={file.url}\r\n onDbClick={() => openPopupWindow(file)}\r\n />\r\n </div>\r\n </Marker>\r\n )\r\n})\r\nFileMarkerItem.displayName = 'FileMarkerItem'\r\n\r\n// ── Main layer ────────────────────────────────────────────────────────────────\r\nexport const FileLayers = () => {\r\n const { state: fileState, dispatch: fileDispatch } = React.useContext(FilesContext)\r\n const { mapFileIds, isMapFileManagerOpen, editingFile } = fileState.files\r\n const { state: mapState } = React.useContext(MapContext)\r\n const { map } = mapState.map\r\n\r\n const handleMapRepaint = React.useCallback(() => {\r\n map?.triggerRepaint()\r\n }, [map])\r\n\r\n const tempPositionsRef = React.useRef<Record<string, { lat: number; lng: number }>>({})\r\n const tempRotationsRef = React.useRef<Record<string, number>>({})\r\n const tempElevationsRef = React.useRef<Record<string, number>>({})\r\n const editingFileNameRef = React.useRef<string | null>(null)\r\n\r\n React.useEffect(() => {\r\n editingFileNameRef.current = editingFile?.name ?? null\r\n }, [editingFile])\r\n\r\n const handleExitEditFileMode = React.useCallback(() => {\r\n fileDispatch({ type: 'EDIT_FILE', payload: { file: null } })\r\n }, [fileDispatch])\r\n\r\n const handleFileSaveSuccess = React.useCallback((file: DbFile, lat: number, lng: number, elevation?: number, rotation?: number) => {\r\n fileDispatch({\r\n type: 'UPDATE_FILE_COORDS',\r\n payload: { id: file.id, lat, lng, elevation, rotation },\r\n })\r\n }, [fileDispatch])\r\n\r\n // Sync SWR files into the store (for FileModelLayer and other consumers)\r\n const { files, isLoading, isError } = useFiles()\r\n React.useEffect(() => {\r\n if (isLoading || isError) return\r\n fileDispatch({ type: 'SET_FILES', payload: { files } })\r\n }, [files, isLoading, isError])\r\n\r\n const { deleteFile } = useDeleteFile()\r\n\r\n const [contextMenu, setContextMenu] = React.useState<{ x: number; y: number; file: DbFile } | null>(null)\r\n\r\n const handleContextMenu = React.useCallback((e: React.MouseEvent, file: DbFile) => {\r\n e.preventDefault()\r\n setContextMenu({ x: e.clientX, y: e.clientY, file })\r\n }, [])\r\n\r\n const handleContextMenuAction = React.useCallback((action: FileAction, file: DbFile) => {\r\n if (action === 'view') {\r\n const isOnMap = mapFileIds.includes(file.id)\r\n fileDispatch({\r\n type: isOnMap ? 'REMOVE_FROM_MAP' : 'ADD_TO_MAP',\r\n payload: { id: file.id },\r\n })\r\n }\r\n else if (action === 'move') {\r\n fileDispatch({ type: 'EDIT_FILE', payload: { file } })\r\n }\r\n else if (action === 'download') {\r\n downloadDbFile(file)\r\n }\r\n else if (action === 'delete') {\r\n // Optimistically remove from local state, then delete from DB\r\n fileDispatch({ type: 'REMOVE_FILE', payload: { id: file.id } })\r\n deleteFile(file.id).catch(err => {\r\n // Re-add to store on failure so the UI stays consistent\r\n console.error('Failed to delete file:', err)\r\n fileDispatch({ type: 'ADD_FILE', payload: { file } })\r\n })\r\n }\r\n }, [fileDispatch, mapFileIds, deleteFile])\r\n\r\n return (\r\n <>\r\n <FileModelLayer\r\n tempPositionsRef={tempPositionsRef}\r\n editingFileNameRef={editingFileNameRef}\r\n tempRotationsRef={tempRotationsRef}\r\n tempElevationsRef={tempElevationsRef}\r\n onContextMenu={(file, x, y) => setContextMenu({ x, y, file })}\r\n />\r\n\r\n {mapFileIds.map(id => (\r\n <FileMarkerItem\r\n key={id}\r\n id={id}\r\n editingFileId={editingFile?.id}\r\n onContextMenu={handleContextMenu}\r\n />\r\n ))}\r\n\r\n {editingFile && (() => {\r\n if (editingFile.lat == null || editingFile.lng == null) {\r\n return (\r\n <PlaceOnMap\r\n file={editingFile}\r\n onPlaced={(file, lat, lng) => {\r\n fileDispatch({ type: 'UPDATE_FILE_COORDS', payload: { id: file.id, lat, lng, type: 'map-file' } })\r\n fileDispatch({ type: 'ADD_TO_MAP', payload: { id: file.id } })\r\n fileDispatch({ type: 'EDIT_FILE', payload: { file: null } })\r\n }}\r\n onCancel={handleExitEditFileMode}\r\n />\r\n )\r\n }\r\n\r\n const editing3D = is3DModelFile(editingFile.extension)\r\n return (\r\n <EditPosition\r\n file={editingFile}\r\n mode={editing3D ? '3d' : '2d'}\r\n onExitEditMode={handleExitEditFileMode}\r\n onSaveSuccess={handleFileSaveSuccess}\r\n tempPositionsRef={tempPositionsRef}\r\n tempRotationsRef={editing3D ? tempRotationsRef : undefined}\r\n tempElevationsRef={editing3D ? tempElevationsRef : undefined}\r\n onMapRepaint={handleMapRepaint}\r\n dragHandle={!editing3D ? (\r\n <MapFileMarker\r\n mimeType={editingFile.mimeType}\r\n extension={editingFile.extension}\r\n />\r\n ) : undefined}\r\n />\r\n )\r\n })()}\r\n\r\n <div className={isMapFileManagerOpen ? 'block' : 'hidden'}>\r\n <MapFileManager closeFileManager={() => fileDispatch({ type: 'HIDE_MAP_FILE_MANAGER' })} />\r\n </div>\r\n\r\n {contextMenu && (\r\n <ViewerContextMenu\r\n x={contextMenu.x}\r\n y={contextMenu.y}\r\n file={contextMenu.file}\r\n options={['view', 'move', 'download', 'delete']}\r\n onAction={handleContextMenuAction}\r\n onClose={() => setContextMenu(null)}\r\n />\r\n )}\r\n </>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/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 { Marker } from 'react-map-gl/maplibre'\r\nimport { FilesContext, MapContext } from '../../../../../../../store'\r\nimport MapFileMarker from './components/MapFileMarker'\r\nimport MapFileManager from './components/MapFileManager'\r\nimport { openPopupWindow } from './utils/openFileInPopUpWindow'\r\nimport { FileModelLayer } from './FileModelLayer/FileModelLayer'\r\nimport { useFile, useFiles, useDeleteFile } from '../../../../../../../hooks/files/files'\r\nimport { DbFile } from '../../../../../../../types/dbTypes'\r\nimport { EditPosition } from '../EditPosition'\r\nimport { PlaceOnMap } from '../PlaceOnMap'\r\nimport type { FileAction } from '../../../../../../../types/global'\r\nimport { downloadDbFile, ViewerContextMenu } from '../../../../../../ui/FilesManager'\r\n\r\nconst is3DModelFile = (extension?: string | null): boolean => {\r\n if (!extension) return false\r\n return ['glb', 'gltf', 'fbx', 'obj', 'collada'].includes(extension.toLowerCase())\r\n}\r\n\r\nconst isHiddenFileType = (extension?: string | null): boolean => {\r\n if (!extension) return false\r\n const ext = extension.toLowerCase()\r\n return ext === 'frag' || ext === 'ifc'\r\n}\r\n\r\nconst shouldExcludeByTag = (tag?: string | null): boolean => {\r\n if (!tag) return false\r\n return tag === 'user' || tag === 'bim-file' || tag === 'fragment-file' || tag === 'bimModel'\r\n}\r\n\r\n// ── Per-marker component — fetches its own file data via useFile(id) ──────────\r\ninterface FileMarkerItemProps {\r\n id: number\r\n editingFileId?: number\r\n onContextMenu: (e: React.MouseEvent, file: DbFile) => void\r\n}\r\n\r\nconst FileMarkerItem = React.memo(({ id, editingFileId, onContextMenu }: FileMarkerItemProps) => {\r\n const { file } = useFile(id)\r\n\r\n if (!file) return null\r\n if (file.id === editingFileId) return null\r\n if (is3DModelFile(file.extension) || isHiddenFileType(file.extension) || shouldExcludeByTag(file.tag)) return null\r\n if (!file.lat || !file.lng) return null\r\n\r\n return (\r\n <Marker latitude={file.lat} longitude={file.lng}>\r\n <div onContextMenu={e => onContextMenu(e, file)}>\r\n <MapFileMarker\r\n mimeType={file.mimeType}\r\n extension={file.extension}\r\n url={file.url}\r\n onDbClick={() => openPopupWindow(file)}\r\n />\r\n </div>\r\n </Marker>\r\n )\r\n})\r\nFileMarkerItem.displayName = 'FileMarkerItem'\r\n\r\n// ── Main layer ────────────────────────────────────────────────────────────────\r\nexport const FileLayers = () => {\r\n const { state: fileState, dispatch: fileDispatch } = React.useContext(FilesContext)\r\n const { mapFileIds, isMapFileManagerOpen, editingFile } = fileState.files\r\n const { state: mapState } = React.useContext(MapContext)\r\n const { map } = mapState.map\r\n\r\n const handleMapRepaint = React.useCallback(() => {\r\n map?.triggerRepaint()\r\n }, [map])\r\n\r\n const tempPositionsRef = React.useRef<Record<string, { lat: number; lng: number }>>({})\r\n const tempRotationsRef = React.useRef<Record<string, number>>({})\r\n const tempElevationsRef = React.useRef<Record<string, number>>({})\r\n const editingFileNameRef = React.useRef<string | null>(null)\r\n\r\n React.useEffect(() => {\r\n editingFileNameRef.current = editingFile?.name ?? null\r\n }, [editingFile])\r\n\r\n const handleExitEditFileMode = React.useCallback(() => {\r\n fileDispatch({ type: 'EDIT_FILE', payload: { file: null } })\r\n }, [fileDispatch])\r\n\r\n const handleFileSaveSuccess = React.useCallback((file: DbFile, lat: number, lng: number, elevation?: number, rotation?: number) => {\r\n fileDispatch({\r\n type: 'UPDATE_FILE_COORDS',\r\n payload: { id: file.id, lat, lng, elevation, rotation },\r\n })\r\n }, [fileDispatch])\r\n\r\n // Sync SWR files into the store (for FileModelLayer and other consumers)\r\n const { files, isLoading, isError } = useFiles()\r\n React.useEffect(() => {\r\n if (isLoading || isError) return\r\n fileDispatch({ type: 'SET_FILES', payload: { files } })\r\n }, [files, isLoading, isError])\r\n\r\n const { deleteFile } = useDeleteFile()\r\n\r\n const [contextMenu, setContextMenu] = React.useState<{ x: number; y: number; file: DbFile } | null>(null)\r\n\r\n const handleContextMenu = React.useCallback((e: React.MouseEvent, file: DbFile) => {\r\n e.preventDefault()\r\n setContextMenu({ x: e.clientX, y: e.clientY, file })\r\n }, [])\r\n\r\n const handleContextMenuAction = React.useCallback((action: FileAction, file: DbFile) => {\r\n if (action === 'view') {\r\n const isOnMap = mapFileIds.includes(file.id)\r\n fileDispatch({\r\n type: isOnMap ? 'REMOVE_FROM_MAP' : 'ADD_TO_MAP',\r\n payload: { id: file.id },\r\n })\r\n }\r\n else if (action === 'move') {\r\n fileDispatch({ type: 'EDIT_FILE', payload: { file } })\r\n }\r\n else if (action === 'download') {\r\n downloadDbFile(file)\r\n }\r\n else if (action === 'delete') {\r\n // Optimistically remove from local state, then delete from DB\r\n fileDispatch({ type: 'REMOVE_FILE', payload: { id: file.id } })\r\n deleteFile(file.id).catch(err => {\r\n // Re-add to store on failure so the UI stays consistent\r\n console.error('Failed to delete file:', err)\r\n fileDispatch({ type: 'ADD_FILE', payload: { file } })\r\n })\r\n }\r\n }, [fileDispatch, mapFileIds, deleteFile])\r\n\r\n return (\r\n <>\r\n <FileModelLayer\r\n tempPositionsRef={tempPositionsRef}\r\n editingFileNameRef={editingFileNameRef}\r\n tempRotationsRef={tempRotationsRef}\r\n tempElevationsRef={tempElevationsRef}\r\n onContextMenu={(file, x, y) => setContextMenu({ x, y, file })}\r\n />\r\n\r\n {mapFileIds.map(id => (\r\n <FileMarkerItem\r\n key={id}\r\n id={id}\r\n editingFileId={editingFile?.id}\r\n onContextMenu={handleContextMenu}\r\n />\r\n ))}\r\n\r\n {editingFile && (() => {\r\n if (editingFile.lat == null || editingFile.lng == null) {\r\n return (\r\n <PlaceOnMap\r\n file={editingFile}\r\n onPlaced={(file, lat, lng) => {\r\n fileDispatch({ type: 'UPDATE_FILE_COORDS', payload: { id: file.id, lat, lng, type: 'map-file' } })\r\n fileDispatch({ type: 'ADD_TO_MAP', payload: { id: file.id } })\r\n fileDispatch({ type: 'EDIT_FILE', payload: { file: null } })\r\n }}\r\n onCancel={handleExitEditFileMode}\r\n />\r\n )\r\n }\r\n\r\n const editing3D = is3DModelFile(editingFile.extension)\r\n return (\r\n <EditPosition\r\n file={editingFile}\r\n mode={editing3D ? '3d' : '2d'}\r\n onExitEditMode={handleExitEditFileMode}\r\n onSaveSuccess={handleFileSaveSuccess}\r\n tempPositionsRef={tempPositionsRef}\r\n tempRotationsRef={editing3D ? tempRotationsRef : undefined}\r\n tempElevationsRef={editing3D ? tempElevationsRef : undefined}\r\n onMapRepaint={handleMapRepaint}\r\n dragHandle={!editing3D ? (\r\n <MapFileMarker\r\n mimeType={editingFile.mimeType}\r\n extension={editingFile.extension}\r\n />\r\n ) : undefined}\r\n />\r\n )\r\n })()}\r\n\r\n <div className={isMapFileManagerOpen ? 'block' : 'hidden'}>\r\n <MapFileManager closeFileManager={() => fileDispatch({ type: 'HIDE_MAP_FILE_MANAGER' })} />\r\n </div>\r\n\r\n {contextMenu && (\r\n <ViewerContextMenu\r\n x={contextMenu.x}\r\n y={contextMenu.y}\r\n file={contextMenu.file}\r\n options={['view', 'move', 'download', 'delete']}\r\n onAction={handleContextMenuAction}\r\n onClose={() => setContextMenu(null)}\r\n />\r\n )}\r\n </>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomModelLayer.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,KAAK,GAAG,EAAE,MAAM,aAAa,CAAA;AAClF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAA;AAG9D,KAAK,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAAA;AAC5F,KAAK,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AACtE,KAAK,iBAAiB,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AACvE,KAAK,kBAAkB,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;AA8B/D,eAAO,MAAM,gBAAgB,GAC3B,WAAW,MAAM,EACjB,KAAK,GAAG,EACR,UAAU,KAAK,CAAC,aAAa,EAC7B,mBAAmB,gBAAgB,EACnC,qBAAqB,kBAAkB,EACvC,mBAAmB,gBAAgB,EACnC,oBAAoB,iBAAiB,KACpC;IAAE,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,IAAI,CAAC;IAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;CAgQ7F,CAAA"}
1
+ {"version":3,"file":"CustomModelLayer.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.ts"],"names":[],"mappings":"AAGA,OAAO,EAA8C,KAAK,GAAG,EAAE,MAAM,aAAa,CAAA;AAClF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAA;AAG9D,KAAK,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAAA;AAC5F,KAAK,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AACtE,KAAK,iBAAiB,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AACvE,KAAK,kBAAkB,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;AA8B/D,eAAO,MAAM,gBAAgB,GAC3B,WAAW,MAAM,EACjB,KAAK,GAAG,EACR,UAAU,KAAK,CAAC,aAAa,EAC7B,mBAAmB,gBAAgB,EACnC,qBAAqB,kBAAkB,EACvC,mBAAmB,gBAAgB,EACnC,oBAAoB,iBAAiB,KACpC;IAAE,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,IAAI,CAAC;IAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;CAgQ7F,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.ts"],"sourcesContent":["import { type CustomLayerInterface, type LngLatLike, type Map } from 'maplibre-gl'\r\nimport * as THREE from 'three'\r\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'\r\nimport { DbFile } from '../../../../../../../../types/dbTypes'\r\nimport { disposeThreeScene } from '../../disposeThreeScene'\r\n\r\ntype TempPositionsRef = React.MutableRefObject<Record<string, { lat: number; lng: number }>>\r\ntype TempRotationsRef = React.MutableRefObject<Record<string, number>>\r\ntype TempElevationsRef = React.MutableRefObject<Record<string, number>>\r\ntype EditingFileNameRef = React.MutableRefObject<string | null>\r\n\r\nfunction resolveModelCoordinates(file: DbFile): { lng: number, lat: number } {\r\n if (typeof file.lng === 'number' && typeof file.lat === 'number') {\r\n return { lng: file.lng, lat: file.lat }\r\n }\r\n\r\n const rawPosition = file.position as unknown\r\n if (rawPosition && typeof rawPosition === 'object') {\r\n const pos = rawPosition as { lng?: number, lat?: number }\r\n if (typeof pos.lng === 'number' && typeof pos.lat === 'number') {\r\n return { lng: pos.lng, lat: pos.lat }\r\n }\r\n }\r\n\r\n if (typeof rawPosition === 'string') {\r\n try {\r\n const parsed = JSON.parse(rawPosition) as { lng?: number, lat?: number }\r\n if (typeof parsed.lng === 'number' && typeof parsed.lat === 'number') {\r\n return { lng: parsed.lng, lat: parsed.lat }\r\n }\r\n }\r\n catch {\r\n // Ignore malformed legacy position payloads.\r\n }\r\n }\r\n\r\n return { lng: 0, lat: 0 }\r\n}\r\n\r\nexport const CustomModelLayer = (\r\n modelFile: DbFile,\r\n map: Map,\r\n renderer: THREE.WebGLRenderer,\r\n tempPositionsRef?: TempPositionsRef,\r\n editingFileNameRef?: EditingFileNameRef,\r\n tempRotationsRef?: TempRotationsRef,\r\n tempElevationsRef?: TempElevationsRef,\r\n): { cleanup: () => void, remove: () => void, hitTest: (ndcX: number, ndcY: number) => boolean } => {\r\n let components = null\r\n let customLayer: CustomLayerInterface | null = null\r\n\r\n if (!map || !modelFile) {\r\n return { cleanup: () => {}, remove: () => {}, hitTest: () => false }\r\n }\r\n\r\n // Refs into the layer's camera and scene so raycasting can read the last\r\n // rendered frame's transform without entering the render loop.\r\n let cameraRef: THREE.Camera | null = null\r\n let sceneRef: THREE.Scene | null = null\r\n\r\n // Reused temps for hitTest raycasting — avoid per-call allocation.\r\n const _hitInv = new THREE.Matrix4()\r\n const _hitNear = new THREE.Vector3()\r\n const _hitFar = new THREE.Vector3()\r\n const _hitDir = new THREE.Vector3()\r\n const _raycaster = new THREE.Raycaster()\r\n\r\n const createCustomLayer = (): CustomLayerInterface => {\r\n // Track last applied rotation so we can apply delta increments (same as BimLayer)\r\n let lastAppliedRotation = modelFile.rotation ?? 0\r\n // Layer-removed-mid-load guard + reused per-frame matrices\r\n let disposed = false\r\n const _m = new THREE.Matrix4()\r\n const _l = new THREE.Matrix4()\r\n // Render-on-demand: cache terrain elevation off the per-frame path and only\r\n // keep repainting while the camera recently moved or an animation is playing,\r\n // so an idle map with a placed model stops re-rendering instead of pinning the\r\n // main thread (this was the freeze after a flyTo to high zoom).\r\n let cachedTerrainElev = 0\r\n let lastMoveTime = performance.now()\r\n const SETTLE_MS = 1000\r\n let onMapMove: (() => void) | undefined\r\n let onMapMoveEnd: (() => void) | undefined\r\n const recomputeTerrainElev = () => {\r\n const { lng, lat } = resolveModelCoordinates(modelFile)\r\n if (!(lng === 0 && lat === 0)) {\r\n const e = map.queryTerrainElevation([lng, lat])\r\n if (e !== null && e !== undefined) cachedTerrainElev = e\r\n }\r\n }\r\n\r\n return {\r\n id: `model-${modelFile.id}`,\r\n type: 'custom',\r\n renderingMode: '3d',\r\n onAdd(map, gl) {\r\n this.camera = new THREE.Camera()\r\n this.scene = new THREE.Scene()\r\n this.renderer = renderer\r\n\r\n // Expose to closure for raycasting\r\n cameraRef = this.camera as THREE.Camera\r\n sceneRef = this.scene as THREE.Scene\r\n\r\n const scene = this.scene as THREE.Scene\r\n\r\n // Apply initial rotation\r\n if (lastAppliedRotation !== 0) {\r\n scene.rotateY(lastAppliedRotation * (Math.PI / 180))\r\n }\r\n\r\n // Lighting to match OBC library setup\r\n scene.background = null\r\n scene.fog = new THREE.Fog(0x20_29_32, 10, 200)\r\n scene.add(new THREE.AmbientLight(0xFF_FF_FF, 1))\r\n scene.add(new THREE.HemisphereLight(0xFF_FF_BB, 0x08_08_20, 0.5))\r\n\r\n const sun = new THREE.DirectionalLight(0xFF_FF_FF, 1.5)\r\n sun.position.set(0, -70, 100).normalize()\r\n sun.castShadow = true\r\n sun.shadow.mapSize.set(2048, 2048)\r\n scene.add(sun)\r\n\r\n const fill = new THREE.DirectionalLight(0xFF_FF_FF, 1)\r\n fill.position.set(0, 70, 100).normalize()\r\n scene.add(fill)\r\n\r\n this.renderer.toneMapping = THREE.ACESFilmicToneMapping\r\n this.renderer.autoClear = false\r\n this.clock = new THREE.Clock()\r\n\r\n const loader = new GLTFLoader()\r\n loader.load(\r\n modelFile.url!,\r\n (gltf) => {\r\n // Layer was removed before the async load resolved — don't attach to a\r\n // dead scene; let the gltf be GC'd (no GPU upload happened yet).\r\n if (disposed) return\r\n gltf.scene.scale.setScalar(1)\r\n\r\n if (gltf.animations && gltf.animations.length > 0) {\r\n this.mixer = new THREE.AnimationMixer(gltf.scene)\r\n for (const clip of gltf.animations) {\r\n this.mixer!.clipAction(clip).play()\r\n }\r\n }\r\n\r\n scene.add(gltf.scene)\r\n // Open the settle window so the just-loaded model paints, then idle.\r\n lastMoveTime = performance.now()\r\n recomputeTerrainElev()\r\n map.triggerRepaint()\r\n },\r\n undefined,\r\n (error) => { console.error('Error loading model:', error) },\r\n )\r\n\r\n // Track camera movement for render-on-demand: keep repainting only\r\n // during/just-after movement; refresh cached terrain elevation on settle.\r\n onMapMove = () => { lastMoveTime = performance.now() }\r\n onMapMoveEnd = () => {\r\n lastMoveTime = performance.now()\r\n recomputeTerrainElev()\r\n map.triggerRepaint()\r\n }\r\n map.on('move', onMapMove)\r\n map.on('moveend', onMapMoveEnd)\r\n },\r\n\r\n render(gl, args) {\r\n if (map.getZoom() < 15.5) return\r\n\r\n const isEditing = editingFileNameRef?.current === modelFile.name\r\n\r\n // ── Position ──────────────────────────────────────────────────────────\r\n let lng: number\r\n let lat: number\r\n if (isEditing && tempPositionsRef?.current[modelFile.name]) {\r\n const tp = tempPositionsRef.current[modelFile.name]\r\n lng = tp.lng\r\n lat = tp.lat\r\n } else {\r\n const coords = resolveModelCoordinates(modelFile)\r\n lng = coords.lng\r\n lat = coords.lat\r\n }\r\n\r\n if (lng === 0 && lat === 0) return\r\n\r\n // ── Rotation (delta-increment, same pattern as BimLayer) ──────────────\r\n const targetRotation = (isEditing && tempRotationsRef?.current[modelFile.name] !== undefined)\r\n ? tempRotationsRef.current[modelFile.name]\r\n : (modelFile.rotation ?? 0)\r\n\r\n if (targetRotation !== lastAppliedRotation) {\r\n ;(this.scene as THREE.Scene).rotateY(\r\n (targetRotation - lastAppliedRotation) * (Math.PI / 180)\r\n )\r\n lastAppliedRotation = targetRotation\r\n }\r\n\r\n // ── Elevation ─────────────────────────────────────────────────────────\r\n const fileElevation = (isEditing && tempElevationsRef?.current[modelFile.name] !== undefined)\r\n ? tempElevationsRef.current[modelFile.name]\r\n : (modelFile.elevation ?? 0)\r\n\r\n const modelOrigin = [lng, lat] as LngLatLike\r\n // Cached terrain elevation (refreshed on moveend); query live only while\r\n // editing this model's position. Keeps queryTerrainElevation off the hot\r\n // path — the per-frame query drove the high-zoom freeze.\r\n const terrainAltitude = isEditing\r\n ? (map.queryTerrainElevation([lng, lat]) ?? cachedTerrainElev)\r\n : cachedTerrainElev\r\n const altitude = terrainAltitude + fileElevation\r\n\r\n const modelMatrix = map.transform.getMatrixForModel(modelOrigin, altitude)\r\n // Reuse temps and write into the camera's own matrix — no per-frame\r\n // allocation. The previous `.scale(1,1,1)` was an identity no-op.\r\n _m.fromArray(args.defaultProjectionData.mainMatrix)\r\n _l.fromArray(modelMatrix)\r\n this.camera.projectionMatrix.multiplyMatrices(_m, _l)\r\n\r\n if (this.mixer) {\r\n this.mixer.update((this.clock as THREE.Clock).getDelta())\r\n }\r\n\r\n this.renderer.resetState()\r\n this.renderer.render(this.scene, this.camera)\r\n\r\n // Render-on-demand: keep the frame loop alive only while an animation is\r\n // playing, the camera recently moved (settle window), or this model is\r\n // being edited. Idle static model ⇒ no self-scheduled repaints ⇒ no freeze.\r\n if (this.mixer || isEditing || performance.now() - lastMoveTime < SETTLE_MS) {\r\n map.triggerRepaint()\r\n }\r\n },\r\n\r\n onRemove() {\r\n disposed = true\r\n if (onMapMove) map.off('move', onMapMove)\r\n if (onMapMoveEnd) map.off('moveend', onMapMoveEnd)\r\n // Stop + release the animation mixer so it isn't left running/holding the\r\n // scene after removal.\r\n if (this.mixer) {\r\n ;(this.mixer as THREE.AnimationMixer).stopAllAction()\r\n this.mixer = null\r\n }\r\n if (this.scene) disposeThreeScene(this.scene as THREE.Scene)\r\n cameraRef = null\r\n sceneRef = null\r\n this.renderer = null\r\n this.camera = null\r\n this.scene = null\r\n },\r\n }\r\n }\r\n\r\n /**\r\n * Raycast against this model using the last rendered frame's camera matrix.\r\n *\r\n * The camera.projectionMatrix = VP * M (view-projection × model-to-world),\r\n * so its inverse transforms clip-space → model-space, which is exactly the\r\n * coordinate system the Three.js scene lives in. We manually unproject near/far\r\n * clip-space points through that inverse to build the ray.\r\n */\r\n const hitTest = (ndcX: number, ndcY: number): boolean => {\r\n if (!cameraRef || !sceneRef) return false\r\n\r\n // Invert the combined VP*M matrix to go clip-space → model-space.\r\n // Reuses module-scope temps + a singleton raycaster.\r\n _hitInv.copy(cameraRef.projectionMatrix).invert()\r\n\r\n // Unproject near and far clip-space points into model space\r\n _hitNear.set(ndcX, ndcY, -1).applyMatrix4(_hitInv)\r\n _hitFar.set(ndcX, ndcY, 1).applyMatrix4(_hitInv)\r\n\r\n _hitDir.copy(_hitFar).sub(_hitNear).normalize()\r\n\r\n _raycaster.set(_hitNear, _hitDir)\r\n\r\n const intersects = _raycaster.intersectObjects(sceneRef.children, true)\r\n return intersects.length > 0\r\n }\r\n\r\n customLayer = createCustomLayer()\r\n\r\n if (!map.getLayer(customLayer.id)) {\r\n map.addLayer(customLayer)\r\n }\r\n\r\n const removeLayer = () => {\r\n if (customLayer && map.getLayer(customLayer.id)) {\r\n map.removeLayer(customLayer.id)\r\n }\r\n }\r\n\r\n const cleanup = () => {\r\n removeLayer()\r\n components = null\r\n customLayer = null\r\n }\r\n\r\n return { cleanup, remove: removeLayer, hitTest }\r\n}\r\n"],"mappings":"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","names":["map","_a"]}
1
+ {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport { type CustomLayerInterface, type LngLatLike, type Map } from 'maplibre-gl'\r\nimport * as THREE from 'three'\r\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'\r\nimport { DbFile } from '../../../../../../../../types/dbTypes'\r\nimport { disposeThreeScene } from '../../disposeThreeScene'\r\n\r\ntype TempPositionsRef = React.MutableRefObject<Record<string, { lat: number; lng: number }>>\r\ntype TempRotationsRef = React.MutableRefObject<Record<string, number>>\r\ntype TempElevationsRef = React.MutableRefObject<Record<string, number>>\r\ntype EditingFileNameRef = React.MutableRefObject<string | null>\r\n\r\nfunction resolveModelCoordinates(file: DbFile): { lng: number, lat: number } {\r\n if (typeof file.lng === 'number' && typeof file.lat === 'number') {\r\n return { lng: file.lng, lat: file.lat }\r\n }\r\n\r\n const rawPosition = file.position as unknown\r\n if (rawPosition && typeof rawPosition === 'object') {\r\n const pos = rawPosition as { lng?: number, lat?: number }\r\n if (typeof pos.lng === 'number' && typeof pos.lat === 'number') {\r\n return { lng: pos.lng, lat: pos.lat }\r\n }\r\n }\r\n\r\n if (typeof rawPosition === 'string') {\r\n try {\r\n const parsed = JSON.parse(rawPosition) as { lng?: number, lat?: number }\r\n if (typeof parsed.lng === 'number' && typeof parsed.lat === 'number') {\r\n return { lng: parsed.lng, lat: parsed.lat }\r\n }\r\n }\r\n catch {\r\n // Ignore malformed legacy position payloads.\r\n }\r\n }\r\n\r\n return { lng: 0, lat: 0 }\r\n}\r\n\r\nexport const CustomModelLayer = (\r\n modelFile: DbFile,\r\n map: Map,\r\n renderer: THREE.WebGLRenderer,\r\n tempPositionsRef?: TempPositionsRef,\r\n editingFileNameRef?: EditingFileNameRef,\r\n tempRotationsRef?: TempRotationsRef,\r\n tempElevationsRef?: TempElevationsRef,\r\n): { cleanup: () => void, remove: () => void, hitTest: (ndcX: number, ndcY: number) => boolean } => {\r\n let components = null\r\n let customLayer: CustomLayerInterface | null = null\r\n\r\n if (!map || !modelFile) {\r\n return { cleanup: () => {}, remove: () => {}, hitTest: () => false }\r\n }\r\n\r\n // Refs into the layer's camera and scene so raycasting can read the last\r\n // rendered frame's transform without entering the render loop.\r\n let cameraRef: THREE.Camera | null = null\r\n let sceneRef: THREE.Scene | null = null\r\n\r\n // Reused temps for hitTest raycasting — avoid per-call allocation.\r\n const _hitInv = new THREE.Matrix4()\r\n const _hitNear = new THREE.Vector3()\r\n const _hitFar = new THREE.Vector3()\r\n const _hitDir = new THREE.Vector3()\r\n const _raycaster = new THREE.Raycaster()\r\n\r\n const createCustomLayer = (): CustomLayerInterface => {\r\n // Track last applied rotation so we can apply delta increments (same as BimLayer)\r\n let lastAppliedRotation = modelFile.rotation ?? 0\r\n // Layer-removed-mid-load guard + reused per-frame matrices\r\n let disposed = false\r\n const _m = new THREE.Matrix4()\r\n const _l = new THREE.Matrix4()\r\n // Render-on-demand: cache terrain elevation off the per-frame path and only\r\n // keep repainting while the camera recently moved or an animation is playing,\r\n // so an idle map with a placed model stops re-rendering instead of pinning the\r\n // main thread (this was the freeze after a flyTo to high zoom).\r\n let cachedTerrainElev = 0\r\n let lastMoveTime = performance.now()\r\n const SETTLE_MS = 1000\r\n let onMapMove: (() => void) | undefined\r\n let onMapMoveEnd: (() => void) | undefined\r\n const recomputeTerrainElev = () => {\r\n const { lng, lat } = resolveModelCoordinates(modelFile)\r\n if (!(lng === 0 && lat === 0)) {\r\n const e = map.queryTerrainElevation([lng, lat])\r\n if (e !== null && e !== undefined) cachedTerrainElev = e\r\n }\r\n }\r\n\r\n return {\r\n id: `model-${modelFile.id}`,\r\n type: 'custom',\r\n renderingMode: '3d',\r\n onAdd(map, gl) {\r\n this.camera = new THREE.Camera()\r\n this.scene = new THREE.Scene()\r\n this.renderer = renderer\r\n\r\n // Expose to closure for raycasting\r\n cameraRef = this.camera as THREE.Camera\r\n sceneRef = this.scene as THREE.Scene\r\n\r\n const scene = this.scene as THREE.Scene\r\n\r\n // Apply initial rotation\r\n if (lastAppliedRotation !== 0) {\r\n scene.rotateY(lastAppliedRotation * (Math.PI / 180))\r\n }\r\n\r\n // Lighting to match OBC library setup\r\n scene.background = null\r\n scene.fog = new THREE.Fog(0x20_29_32, 10, 200)\r\n scene.add(new THREE.AmbientLight(0xFF_FF_FF, 1))\r\n scene.add(new THREE.HemisphereLight(0xFF_FF_BB, 0x08_08_20, 0.5))\r\n\r\n const sun = new THREE.DirectionalLight(0xFF_FF_FF, 1.5)\r\n sun.position.set(0, -70, 100).normalize()\r\n sun.castShadow = true\r\n sun.shadow.mapSize.set(2048, 2048)\r\n scene.add(sun)\r\n\r\n const fill = new THREE.DirectionalLight(0xFF_FF_FF, 1)\r\n fill.position.set(0, 70, 100).normalize()\r\n scene.add(fill)\r\n\r\n this.renderer.toneMapping = THREE.ACESFilmicToneMapping\r\n this.renderer.autoClear = false\r\n this.clock = new THREE.Clock()\r\n\r\n const loader = new GLTFLoader()\r\n loader.load(\r\n modelFile.url!,\r\n (gltf) => {\r\n // Layer was removed before the async load resolved — don't attach to a\r\n // dead scene; let the gltf be GC'd (no GPU upload happened yet).\r\n if (disposed) return\r\n gltf.scene.scale.setScalar(1)\r\n\r\n if (gltf.animations && gltf.animations.length > 0) {\r\n this.mixer = new THREE.AnimationMixer(gltf.scene)\r\n for (const clip of gltf.animations) {\r\n this.mixer!.clipAction(clip).play()\r\n }\r\n }\r\n\r\n scene.add(gltf.scene)\r\n // Open the settle window so the just-loaded model paints, then idle.\r\n lastMoveTime = performance.now()\r\n recomputeTerrainElev()\r\n map.triggerRepaint()\r\n },\r\n undefined,\r\n (error) => { console.error('Error loading model:', error) },\r\n )\r\n\r\n // Track camera movement for render-on-demand: keep repainting only\r\n // during/just-after movement; refresh cached terrain elevation on settle.\r\n onMapMove = () => { lastMoveTime = performance.now() }\r\n onMapMoveEnd = () => {\r\n lastMoveTime = performance.now()\r\n recomputeTerrainElev()\r\n map.triggerRepaint()\r\n }\r\n map.on('move', onMapMove)\r\n map.on('moveend', onMapMoveEnd)\r\n },\r\n\r\n render(gl, args) {\r\n if (map.getZoom() < 15.5) return\r\n\r\n const isEditing = editingFileNameRef?.current === modelFile.name\r\n\r\n // ── Position ──────────────────────────────────────────────────────────\r\n let lng: number\r\n let lat: number\r\n if (isEditing && tempPositionsRef?.current[modelFile.name]) {\r\n const tp = tempPositionsRef.current[modelFile.name]\r\n lng = tp.lng\r\n lat = tp.lat\r\n } else {\r\n const coords = resolveModelCoordinates(modelFile)\r\n lng = coords.lng\r\n lat = coords.lat\r\n }\r\n\r\n if (lng === 0 && lat === 0) return\r\n\r\n // ── Rotation (delta-increment, same pattern as BimLayer) ──────────────\r\n const targetRotation = (isEditing && tempRotationsRef?.current[modelFile.name] !== undefined)\r\n ? tempRotationsRef.current[modelFile.name]\r\n : (modelFile.rotation ?? 0)\r\n\r\n if (targetRotation !== lastAppliedRotation) {\r\n ;(this.scene as THREE.Scene).rotateY(\r\n (targetRotation - lastAppliedRotation) * (Math.PI / 180)\r\n )\r\n lastAppliedRotation = targetRotation\r\n }\r\n\r\n // ── Elevation ─────────────────────────────────────────────────────────\r\n const fileElevation = (isEditing && tempElevationsRef?.current[modelFile.name] !== undefined)\r\n ? tempElevationsRef.current[modelFile.name]\r\n : (modelFile.elevation ?? 0)\r\n\r\n const modelOrigin = [lng, lat] as LngLatLike\r\n // Cached terrain elevation (refreshed on moveend); query live only while\r\n // editing this model's position. Keeps queryTerrainElevation off the hot\r\n // path — the per-frame query drove the high-zoom freeze.\r\n const terrainAltitude = isEditing\r\n ? (map.queryTerrainElevation([lng, lat]) ?? cachedTerrainElev)\r\n : cachedTerrainElev\r\n const altitude = terrainAltitude + fileElevation\r\n\r\n const modelMatrix = map.transform.getMatrixForModel(modelOrigin, altitude)\r\n // Reuse temps and write into the camera's own matrix — no per-frame\r\n // allocation. The previous `.scale(1,1,1)` was an identity no-op.\r\n _m.fromArray(args.defaultProjectionData.mainMatrix)\r\n _l.fromArray(modelMatrix)\r\n this.camera.projectionMatrix.multiplyMatrices(_m, _l)\r\n\r\n if (this.mixer) {\r\n this.mixer.update((this.clock as THREE.Clock).getDelta())\r\n }\r\n\r\n this.renderer.resetState()\r\n this.renderer.render(this.scene, this.camera)\r\n\r\n // Render-on-demand: keep the frame loop alive only while an animation is\r\n // playing, the camera recently moved (settle window), or this model is\r\n // being edited. Idle static model ⇒ no self-scheduled repaints ⇒ no freeze.\r\n if (this.mixer || isEditing || performance.now() - lastMoveTime < SETTLE_MS) {\r\n map.triggerRepaint()\r\n }\r\n },\r\n\r\n onRemove() {\r\n disposed = true\r\n if (onMapMove) map.off('move', onMapMove)\r\n if (onMapMoveEnd) map.off('moveend', onMapMoveEnd)\r\n // Stop + release the animation mixer so it isn't left running/holding the\r\n // scene after removal.\r\n if (this.mixer) {\r\n ;(this.mixer as THREE.AnimationMixer).stopAllAction()\r\n this.mixer = null\r\n }\r\n if (this.scene) disposeThreeScene(this.scene as THREE.Scene)\r\n cameraRef = null\r\n sceneRef = null\r\n this.renderer = null\r\n this.camera = null\r\n this.scene = null\r\n },\r\n }\r\n }\r\n\r\n /**\r\n * Raycast against this model using the last rendered frame's camera matrix.\r\n *\r\n * The camera.projectionMatrix = VP * M (view-projection × model-to-world),\r\n * so its inverse transforms clip-space → model-space, which is exactly the\r\n * coordinate system the Three.js scene lives in. We manually unproject near/far\r\n * clip-space points through that inverse to build the ray.\r\n */\r\n const hitTest = (ndcX: number, ndcY: number): boolean => {\r\n if (!cameraRef || !sceneRef) return false\r\n\r\n // Invert the combined VP*M matrix to go clip-space → model-space.\r\n // Reuses module-scope temps + a singleton raycaster.\r\n _hitInv.copy(cameraRef.projectionMatrix).invert()\r\n\r\n // Unproject near and far clip-space points into model space\r\n _hitNear.set(ndcX, ndcY, -1).applyMatrix4(_hitInv)\r\n _hitFar.set(ndcX, ndcY, 1).applyMatrix4(_hitInv)\r\n\r\n _hitDir.copy(_hitFar).sub(_hitNear).normalize()\r\n\r\n _raycaster.set(_hitNear, _hitDir)\r\n\r\n const intersects = _raycaster.intersectObjects(sceneRef.children, true)\r\n return intersects.length > 0\r\n }\r\n\r\n customLayer = createCustomLayer()\r\n\r\n if (!map.getLayer(customLayer.id)) {\r\n map.addLayer(customLayer)\r\n }\r\n\r\n const removeLayer = () => {\r\n if (customLayer && map.getLayer(customLayer.id)) {\r\n map.removeLayer(customLayer.id)\r\n }\r\n }\r\n\r\n const cleanup = () => {\r\n removeLayer()\r\n components = null\r\n customLayer = null\r\n }\r\n\r\n return { cleanup, remove: removeLayer, hitTest }\r\n}\r\n"],"mappings":"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","names":["map","_a"]}
@@ -1 +1 @@
1
- {"version":3,"file":"openFileInPopUpWindow.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/openFileInPopUpWindow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAA;AAE9D,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,SAqH3C,CAAA"}
1
+ {"version":3,"file":"openFileInPopUpWindow.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/openFileInPopUpWindow.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAA;AAE9D,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,SAqH3C,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/openFileInPopUpWindow.ts"],"sourcesContent":["import { DbFile } from '../../../../../../../../types/dbTypes'\r\n\r\nexport const openPopupWindow = (file: DbFile) => {\r\n const width = Math.floor(screen.width * 0.8)\r\n const height = Math.floor(screen.height * 0.8)\r\n const left = Math.floor((screen.width - width) / 2)\r\n const top = Math.floor((screen.height - height) / 2)\r\n\r\n const scale = 0.9\r\n\r\n const windowFeatures = `\r\n width=${width * scale},\r\n height=${height * scale},\r\n left=${left},\r\n top=${top},\r\n resizable=yes,\r\n scrollbars=yes,\r\n status=no,\r\n location=no,\r\n toolbar=no,\r\n menubar=no\r\n `.replaceAll(/\\s/g, '')\r\n\r\n // Determine file type from MIME type and extension\r\n const getFileType = (file: DbFile): string => {\r\n // First check MIME type\r\n if (file.mimeType.startsWith('image/')) return 'image'\r\n if (file.mimeType.startsWith('video/')) return 'video'\r\n if (file.mimeType === 'application/pdf') return 'pdf'\r\n\r\n // Fall back to extension\r\n const extension = file.name.split('.').pop()?.toLowerCase()\r\n switch (extension) {\r\n case 'jpg':\r\n case 'jpeg':\r\n case 'png':\r\n case 'gif':\r\n case 'webp':\r\n case 'svg':\r\n return 'image'\r\n case 'mp4':\r\n case 'webm':\r\n case 'ogg':\r\n case 'avi':\r\n case 'mov':\r\n return 'video'\r\n case 'pdf':\r\n return 'pdf'\r\n default:\r\n return 'iframe'\r\n }\r\n }\r\n\r\n const detectedType = getFileType(file)\r\n const title = file.name || 'CDT - File Viewer'\r\n\r\n const newWindow = window.open('', '_blank', windowFeatures)\r\n\r\n if (newWindow) {\r\n let content = ''\r\n\r\n switch (detectedType) {\r\n case 'image':\r\n content = `<img src=\"${file.url}\" alt=\"${file.name}\" />`\r\n break\r\n case 'video':\r\n content = `\r\n <video controls autoplay style=\"max-width: 100%; max-height: 100%;\">\r\n <source src=\"${file.url}\" type=\"${file.mimeType || 'video/mp4'}\">\r\n Your browser does not support the video tag.\r\n </video>`\r\n break\r\n case 'pdf':\r\n content = `<iframe src=\"${file.url}\" style=\"width: 100%; height: 100%; border: none;\"></iframe>`\r\n break\r\n default:\r\n content = `<iframe src=\"${file.url}\" style=\"width: 100%; height: 100%; border: none;\"></iframe>`\r\n }\r\n\r\n newWindow.document.write(`\r\n <!DOCTYPE html>\r\n <html>\r\n <head>\r\n <title>${title}</title>\r\n <style>\r\n body, html {\r\n margin: 0;\r\n padding: 0;\r\n width: 100%;\r\n height: 100%;\r\n overflow: ${detectedType === 'pdf' ? 'hidden' : 'auto'};\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: #f5f5f5;\r\n }\r\n img {\r\n max-width: 100%;\r\n max-height: 100%;\r\n object-fit: contain;\r\n }\r\n video {\r\n max-width: 100%;\r\n max-height: 100%;\r\n }\r\n iframe {\r\n width: 100%;\r\n height: 100%;\r\n border: none;\r\n }\r\n </style>\r\n </head>\r\n <body>\r\n ${content}\r\n </body>\r\n </html>\r\n `)\r\n newWindow.document.close()\r\n }\r\n}\r\n"],"mappings":"AAEO,MAAM,kBAAkB,CAAC,SAAiB;AAC/C,QAAM,QAAQ,KAAK,MAAM,OAAO,QAAQ,GAAG;AAC3C,QAAM,SAAS,KAAK,MAAM,OAAO,SAAS,GAAG;AAC7C,QAAM,OAAO,KAAK,OAAO,OAAO,QAAQ,SAAS,CAAC;AAClD,QAAM,MAAM,KAAK,OAAO,OAAO,SAAS,UAAU,CAAC;AAEnD,QAAM,QAAQ;AAEd,QAAM,iBAAiB;AAAA,YACb,QAAQ,KAAK;AAAA,aACZ,SAAS,KAAK;AAAA,WAChB,IAAI;AAAA,UACL,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOP,WAAW,OAAO,EAAE;AAGxB,QAAM,cAAc,CAACA,UAAyB;AAxBhD;AA0BI,QAAIA,MAAK,SAAS,WAAW,QAAQ,EAAG,QAAO;AAC/C,QAAIA,MAAK,SAAS,WAAW,QAAQ,EAAG,QAAO;AAC/C,QAAIA,MAAK,aAAa,kBAAmB,QAAO;AAGhD,UAAM,aAAY,KAAAA,MAAK,KAAK,MAAM,GAAG,EAAE,IAAI,MAAzB,mBAA4B;AAC9C,YAAQ,WAAW;AAAA,MACjB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,QAAM,eAAe,YAAY,IAAI;AACrC,QAAM,QAAQ,KAAK,QAAQ;AAE3B,QAAM,YAAY,OAAO,KAAK,IAAI,UAAU,cAAc;AAE1D,MAAI,WAAW;AACb,QAAI,UAAU;AAEd,YAAQ,cAAc;AAAA,MACpB,KAAK;AACH,kBAAU,aAAa,KAAK,GAAG,UAAU,KAAK,IAAI;AAClD;AAAA,MACF,KAAK;AACH,kBAAU;AAAA;AAAA,mCAEiB,KAAK,GAAG,WAAW,KAAK,YAAY,WAAW;AAAA;AAAA;AAG1E;AAAA,MACF,KAAK;AACH,kBAAU,gBAAgB,KAAK,GAAG;AAClC;AAAA,MACF;AACE,kBAAU,gBAAgB,KAAK,GAAG;AAAA,IACtC;AAEA,cAAU,SAAS,MAAM;AAAA;AAAA;AAAA;AAAA,yBAIJ,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAOM,iBAAiB,QAAQ,WAAW,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAuB5D,OAAO;AAAA;AAAA;AAAA,SAGhB;AACL,cAAU,SAAS,MAAM;AAAA,EAC3B;AACF;","names":["file"]}
1
+ {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/openFileInPopUpWindow.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport { DbFile } from '../../../../../../../../types/dbTypes'\r\n\r\nexport const openPopupWindow = (file: DbFile) => {\r\n const width = Math.floor(screen.width * 0.8)\r\n const height = Math.floor(screen.height * 0.8)\r\n const left = Math.floor((screen.width - width) / 2)\r\n const top = Math.floor((screen.height - height) / 2)\r\n\r\n const scale = 0.9\r\n\r\n const windowFeatures = `\r\n width=${width * scale},\r\n height=${height * scale},\r\n left=${left},\r\n top=${top},\r\n resizable=yes,\r\n scrollbars=yes,\r\n status=no,\r\n location=no,\r\n toolbar=no,\r\n menubar=no\r\n `.replaceAll(/\\s/g, '')\r\n\r\n // Determine file type from MIME type and extension\r\n const getFileType = (file: DbFile): string => {\r\n // First check MIME type\r\n if (file.mimeType.startsWith('image/')) return 'image'\r\n if (file.mimeType.startsWith('video/')) return 'video'\r\n if (file.mimeType === 'application/pdf') return 'pdf'\r\n\r\n // Fall back to extension\r\n const extension = file.name.split('.').pop()?.toLowerCase()\r\n switch (extension) {\r\n case 'jpg':\r\n case 'jpeg':\r\n case 'png':\r\n case 'gif':\r\n case 'webp':\r\n case 'svg':\r\n return 'image'\r\n case 'mp4':\r\n case 'webm':\r\n case 'ogg':\r\n case 'avi':\r\n case 'mov':\r\n return 'video'\r\n case 'pdf':\r\n return 'pdf'\r\n default:\r\n return 'iframe'\r\n }\r\n }\r\n\r\n const detectedType = getFileType(file)\r\n const title = file.name || 'CDT - File Viewer'\r\n\r\n const newWindow = window.open('', '_blank', windowFeatures)\r\n\r\n if (newWindow) {\r\n let content = ''\r\n\r\n switch (detectedType) {\r\n case 'image':\r\n content = `<img src=\"${file.url}\" alt=\"${file.name}\" />`\r\n break\r\n case 'video':\r\n content = `\r\n <video controls autoplay style=\"max-width: 100%; max-height: 100%;\">\r\n <source src=\"${file.url}\" type=\"${file.mimeType || 'video/mp4'}\">\r\n Your browser does not support the video tag.\r\n </video>`\r\n break\r\n case 'pdf':\r\n content = `<iframe src=\"${file.url}\" style=\"width: 100%; height: 100%; border: none;\"></iframe>`\r\n break\r\n default:\r\n content = `<iframe src=\"${file.url}\" style=\"width: 100%; height: 100%; border: none;\"></iframe>`\r\n }\r\n\r\n newWindow.document.write(`\r\n <!DOCTYPE html>\r\n <html>\r\n <head>\r\n <title>${title}</title>\r\n <style>\r\n body, html {\r\n margin: 0;\r\n padding: 0;\r\n width: 100%;\r\n height: 100%;\r\n overflow: ${detectedType === 'pdf' ? 'hidden' : 'auto'};\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: #f5f5f5;\r\n }\r\n img {\r\n max-width: 100%;\r\n max-height: 100%;\r\n object-fit: contain;\r\n }\r\n video {\r\n max-width: 100%;\r\n max-height: 100%;\r\n }\r\n iframe {\r\n width: 100%;\r\n height: 100%;\r\n border: none;\r\n }\r\n </style>\r\n </head>\r\n <body>\r\n ${content}\r\n </body>\r\n </html>\r\n `)\r\n newWindow.document.close()\r\n }\r\n}\r\n"],"mappings":"AAKO,MAAM,kBAAkB,CAAC,SAAiB;AAC/C,QAAM,QAAQ,KAAK,MAAM,OAAO,QAAQ,GAAG;AAC3C,QAAM,SAAS,KAAK,MAAM,OAAO,SAAS,GAAG;AAC7C,QAAM,OAAO,KAAK,OAAO,OAAO,QAAQ,SAAS,CAAC;AAClD,QAAM,MAAM,KAAK,OAAO,OAAO,SAAS,UAAU,CAAC;AAEnD,QAAM,QAAQ;AAEd,QAAM,iBAAiB;AAAA,YACb,QAAQ,KAAK;AAAA,aACZ,SAAS,KAAK;AAAA,WAChB,IAAI;AAAA,UACL,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOP,WAAW,OAAO,EAAE;AAGxB,QAAM,cAAc,CAACA,UAAyB;AA3BhD;AA6BI,QAAIA,MAAK,SAAS,WAAW,QAAQ,EAAG,QAAO;AAC/C,QAAIA,MAAK,SAAS,WAAW,QAAQ,EAAG,QAAO;AAC/C,QAAIA,MAAK,aAAa,kBAAmB,QAAO;AAGhD,UAAM,aAAY,KAAAA,MAAK,KAAK,MAAM,GAAG,EAAE,IAAI,MAAzB,mBAA4B;AAC9C,YAAQ,WAAW;AAAA,MACjB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,QAAM,eAAe,YAAY,IAAI;AACrC,QAAM,QAAQ,KAAK,QAAQ;AAE3B,QAAM,YAAY,OAAO,KAAK,IAAI,UAAU,cAAc;AAE1D,MAAI,WAAW;AACb,QAAI,UAAU;AAEd,YAAQ,cAAc;AAAA,MACpB,KAAK;AACH,kBAAU,aAAa,KAAK,GAAG,UAAU,KAAK,IAAI;AAClD;AAAA,MACF,KAAK;AACH,kBAAU;AAAA;AAAA,mCAEiB,KAAK,GAAG,WAAW,KAAK,YAAY,WAAW;AAAA;AAAA;AAG1E;AAAA,MACF,KAAK;AACH,kBAAU,gBAAgB,KAAK,GAAG;AAClC;AAAA,MACF;AACE,kBAAU,gBAAgB,KAAK,GAAG;AAAA,IACtC;AAEA,cAAU,SAAS,MAAM;AAAA;AAAA;AAAA;AAAA,yBAIJ,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAOM,iBAAiB,QAAQ,WAAW,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAuB5D,OAAO;AAAA;AAAA;AAAA,SAGhB;AACL,cAAU,SAAS,MAAM;AAAA,EAC3B;AACF;","names":["file"]}
@@ -1 +1 @@
1
- {"version":3,"file":"WmsTimeControl.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,UAAU,mBAAmB;IAC3B,oDAAoD;IACpD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kEAAkE;IAClE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA0GxD,CAAC"}
1
+ {"version":3,"file":"WmsTimeControl.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,UAAU,mBAAmB;IAC3B,oDAAoD;IACpD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kEAAkE;IAClE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA0GxD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { formatFrameTime } from \"../../../../../datasets/src/wmsTime\";\r\n\r\ninterface WmsTimeControlProps {\r\n /** Ascending frame timestamps (oldest → newest). */\r\n frames: string[];\r\n /** Called with the active frame timestamp whenever it changes. */\r\n onTimeChange: (time: string) => void;\r\n /** Card title (e.g. the dataset name). */\r\n label?: string;\r\n /** Frame advance interval while playing, ms. */\r\n stepMs?: number;\r\n /** WMS GetLegendGraphic image URL; shown under the slider when it loads. */\r\n legendUrl?: string;\r\n}\r\n\r\n/**\r\n * Floating scrub + play/pause control for a WMS time dimension. Defaults to the\r\n * latest frame; play advances oldest→newest on a loop. Purely presentational —\r\n * it owns only the current index + playing state and reports the active time up.\r\n */\r\nexport const WmsTimeControl: React.FC<WmsTimeControlProps> = ({\r\n frames,\r\n onTimeChange,\r\n label,\r\n stepMs = 500,\r\n legendUrl,\r\n}) => {\r\n const [index, setIndex] = React.useState(Math.max(0, frames.length - 1));\r\n const [playing, setPlaying] = React.useState(false);\r\n const [legendOk, setLegendOk] = React.useState(true);\r\n\r\n // Reset legend visibility if the URL changes (different layer).\r\n React.useEffect(() => { setLegendOk(true); }, [legendUrl]);\r\n\r\n // Clamp + re-seat at the latest frame whenever the frame list changes.\r\n React.useEffect(() => {\r\n setIndex(Math.max(0, frames.length - 1));\r\n }, [frames.length]);\r\n\r\n // Report the active frame up whenever the index (or frame list) changes.\r\n React.useEffect(() => {\r\n const time = frames[index];\r\n if (time) onTimeChange(time);\r\n }, [index, frames, onTimeChange]);\r\n\r\n // Play loop.\r\n React.useEffect(() => {\r\n if (!playing || frames.length < 2) return;\r\n const timer = setInterval(() => {\r\n setIndex(prev => (prev + 1) % frames.length);\r\n }, stepMs);\r\n return () => clearInterval(timer);\r\n }, [playing, frames.length, stepMs]);\r\n\r\n if (frames.length === 0) return null;\r\n\r\n const activeTime = frames[index];\r\n\r\n return (\r\n <div\r\n style={{\r\n // Laid out by the bottom-left flex stack it portals into (see MapViewer),\r\n // so no absolute positioning — it sits above the legend / dataset-manager cards.\r\n background: \"#ffffff\",\r\n borderRadius: 8,\r\n boxShadow: \"0 1px 4px rgba(0,0,0,0.3)\",\r\n padding: \"10px 12px\",\r\n width: 260,\r\n font: \"13px/1.3 system-ui, sans-serif\",\r\n color: \"#1a1a1a\",\r\n pointerEvents: \"auto\",\r\n }}\r\n >\r\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, marginBottom: 6 }}>\r\n <button\r\n type=\"button\"\r\n onClick={() => setPlaying(p => !p)}\r\n aria-label={playing ? \"Pause\" : \"Play\"}\r\n style={{\r\n cursor: \"pointer\",\r\n border: \"none\",\r\n background: \"#0d9488\",\r\n color: \"#fff\",\r\n borderRadius: 4,\r\n width: 28,\r\n height: 28,\r\n fontSize: 14,\r\n lineHeight: 1,\r\n }}\r\n >\r\n {playing ? \"❚❚\" : \"▶\"}\r\n </button>\r\n <div style={{ fontWeight: 600, flex: 1, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\r\n {label ?? \"WMS time\"}\r\n </div>\r\n <div style={{ fontVariantNumeric: \"tabular-nums\", color: \"#475569\" }}>\r\n {formatFrameTime(activeTime)}\r\n </div>\r\n </div>\r\n <input\r\n type=\"range\"\r\n min={0}\r\n max={frames.length - 1}\r\n value={index}\r\n onChange={e => {\r\n setPlaying(false);\r\n setIndex(Number(e.target.value));\r\n }}\r\n style={{ width: \"100%\", display: \"block\", accentColor: \"#0d9488\" }}\r\n />\r\n {legendUrl && legendOk && (\r\n <img\r\n src={legendUrl}\r\n alt=\"Legend\"\r\n onError={() => setLegendOk(false)}\r\n style={{\r\n display: \"block\",\r\n marginTop: 8,\r\n maxWidth: \"100%\",\r\n maxHeight: 220,\r\n objectFit: \"contain\",\r\n }}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\nWmsTimeControl.displayName = \"WmsTimeControl\";\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.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 { formatFrameTime } from \"../../../../../datasets/src/wmsTime\";\r\n\r\ninterface WmsTimeControlProps {\r\n /** Ascending frame timestamps (oldest → newest). */\r\n frames: string[];\r\n /** Called with the active frame timestamp whenever it changes. */\r\n onTimeChange: (time: string) => void;\r\n /** Card title (e.g. the dataset name). */\r\n label?: string;\r\n /** Frame advance interval while playing, ms. */\r\n stepMs?: number;\r\n /** WMS GetLegendGraphic image URL; shown under the slider when it loads. */\r\n legendUrl?: string;\r\n}\r\n\r\n/**\r\n * Floating scrub + play/pause control for a WMS time dimension. Defaults to the\r\n * latest frame; play advances oldest→newest on a loop. Purely presentational —\r\n * it owns only the current index + playing state and reports the active time up.\r\n */\r\nexport const WmsTimeControl: React.FC<WmsTimeControlProps> = ({\r\n frames,\r\n onTimeChange,\r\n label,\r\n stepMs = 500,\r\n legendUrl,\r\n}) => {\r\n const [index, setIndex] = React.useState(Math.max(0, frames.length - 1));\r\n const [playing, setPlaying] = React.useState(false);\r\n const [legendOk, setLegendOk] = React.useState(true);\r\n\r\n // Reset legend visibility if the URL changes (different layer).\r\n React.useEffect(() => { setLegendOk(true); }, [legendUrl]);\r\n\r\n // Clamp + re-seat at the latest frame whenever the frame list changes.\r\n React.useEffect(() => {\r\n setIndex(Math.max(0, frames.length - 1));\r\n }, [frames.length]);\r\n\r\n // Report the active frame up whenever the index (or frame list) changes.\r\n React.useEffect(() => {\r\n const time = frames[index];\r\n if (time) onTimeChange(time);\r\n }, [index, frames, onTimeChange]);\r\n\r\n // Play loop.\r\n React.useEffect(() => {\r\n if (!playing || frames.length < 2) return;\r\n const timer = setInterval(() => {\r\n setIndex(prev => (prev + 1) % frames.length);\r\n }, stepMs);\r\n return () => clearInterval(timer);\r\n }, [playing, frames.length, stepMs]);\r\n\r\n if (frames.length === 0) return null;\r\n\r\n const activeTime = frames[index];\r\n\r\n return (\r\n <div\r\n style={{\r\n // Laid out by the bottom-left flex stack it portals into (see MapViewer),\r\n // so no absolute positioning — it sits above the legend / dataset-manager cards.\r\n background: \"#ffffff\",\r\n borderRadius: 8,\r\n boxShadow: \"0 1px 4px rgba(0,0,0,0.3)\",\r\n padding: \"10px 12px\",\r\n width: 260,\r\n font: \"13px/1.3 system-ui, sans-serif\",\r\n color: \"#1a1a1a\",\r\n pointerEvents: \"auto\",\r\n }}\r\n >\r\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, marginBottom: 6 }}>\r\n <button\r\n type=\"button\"\r\n onClick={() => setPlaying(p => !p)}\r\n aria-label={playing ? \"Pause\" : \"Play\"}\r\n style={{\r\n cursor: \"pointer\",\r\n border: \"none\",\r\n background: \"#0d9488\",\r\n color: \"#fff\",\r\n borderRadius: 4,\r\n width: 28,\r\n height: 28,\r\n fontSize: 14,\r\n lineHeight: 1,\r\n }}\r\n >\r\n {playing ? \"❚❚\" : \"▶\"}\r\n </button>\r\n <div style={{ fontWeight: 600, flex: 1, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\r\n {label ?? \"WMS time\"}\r\n </div>\r\n <div style={{ fontVariantNumeric: \"tabular-nums\", color: \"#475569\" }}>\r\n {formatFrameTime(activeTime)}\r\n </div>\r\n </div>\r\n <input\r\n type=\"range\"\r\n min={0}\r\n max={frames.length - 1}\r\n value={index}\r\n onChange={e => {\r\n setPlaying(false);\r\n setIndex(Number(e.target.value));\r\n }}\r\n style={{ width: \"100%\", display: \"block\", accentColor: \"#0d9488\" }}\r\n />\r\n {legendUrl && legendOk && (\r\n <img\r\n src={legendUrl}\r\n alt=\"Legend\"\r\n onError={() => setLegendOk(false)}\r\n style={{\r\n display: \"block\",\r\n marginTop: 8,\r\n maxWidth: \"100%\",\r\n maxHeight: 220,\r\n objectFit: \"contain\",\r\n }}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\nWmsTimeControl.displayName = \"WmsTimeControl\";\r\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA+c/B,eAAO,MAAM,cAAc,yBAqM1B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA+c/B,eAAO,MAAM,cAAc,yBAqM1B,CAAC"}