@collabdt/core 0.0.51 → 0.0.54

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 (1000) 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.map +1 -1
  38. package/dist/core/components/index.js.map +1 -1
  39. package/dist/core/components/instance-not-found/index.d.ts.map +1 -1
  40. package/dist/core/components/instance-not-found/index.js.map +1 -1
  41. package/dist/core/components/instance-not-found/src/OrganizationNotFoundSection.d.ts.map +1 -1
  42. package/dist/core/components/instance-not-found/src/OrganizationNotFoundSection.js.map +1 -1
  43. package/dist/core/components/organizationConfig/index.d.ts.map +1 -1
  44. package/dist/core/components/organizationConfig/index.js.map +1 -1
  45. package/dist/core/components/organizationConfig/src/organizationConfigContent.d.ts.map +1 -1
  46. package/dist/core/components/organizationConfig/src/organizationConfigContent.js.map +1 -1
  47. package/dist/core/components/settings/index.d.ts.map +1 -1
  48. package/dist/core/components/settings/index.js.map +1 -1
  49. package/dist/core/components/settings/src/AccountSettingsPanel.d.ts.map +1 -1
  50. package/dist/core/components/settings/src/AccountSettingsPanel.js.map +1 -1
  51. package/dist/core/components/settings/src/ChangePassword.d.ts.map +1 -1
  52. package/dist/core/components/settings/src/ChangePassword.js.map +1 -1
  53. package/dist/core/components/settings/src/OrganizationSettingsPanel.d.ts.map +1 -1
  54. package/dist/core/components/settings/src/OrganizationSettingsPanel.js.map +1 -1
  55. package/dist/core/components/settings/src/OrganizationSkeleton.d.ts.map +1 -1
  56. package/dist/core/components/settings/src/OrganizationSkeleton.js.map +1 -1
  57. package/dist/core/components/settings/src/SettingsContent.d.ts.map +1 -1
  58. package/dist/core/components/settings/src/SettingsContent.js.map +1 -1
  59. package/dist/core/components/settings/src/SettingsHeader.d.ts.map +1 -1
  60. package/dist/core/components/settings/src/SettingsHeader.js.map +1 -1
  61. package/dist/core/components/settings/src/SettingsSidebar.d.ts.map +1 -1
  62. package/dist/core/components/settings/src/SettingsSidebar.js.map +1 -1
  63. package/dist/core/components/settings/src/SettingsSkeleton.d.ts.map +1 -1
  64. package/dist/core/components/settings/src/SettingsSkeleton.js.map +1 -1
  65. package/dist/core/components/settings/src/UsersSettingsPanel.d.ts.map +1 -1
  66. package/dist/core/components/settings/src/UsersSettingsPanel.js.map +1 -1
  67. package/dist/core/components/settings/src/types.d.ts.map +1 -1
  68. package/dist/core/components/ui/Accordion.d.ts.map +1 -1
  69. package/dist/core/components/ui/Accordion.js.map +1 -1
  70. package/dist/core/components/ui/AddItemDialog.d.ts.map +1 -1
  71. package/dist/core/components/ui/AddItemDialog.js.map +1 -1
  72. package/dist/core/components/ui/AlertDialog.d.ts.map +1 -1
  73. package/dist/core/components/ui/AlertDialog.js.map +1 -1
  74. package/dist/core/components/ui/AnimatedBackground.d.ts.map +1 -1
  75. package/dist/core/components/ui/AnimatedBackground.js.map +1 -1
  76. package/dist/core/components/ui/AppSidebar.d.ts.map +1 -1
  77. package/dist/core/components/ui/AppSidebar.js.map +1 -1
  78. package/dist/core/components/ui/Avatar.d.ts.map +1 -1
  79. package/dist/core/components/ui/Avatar.js.map +1 -1
  80. package/dist/core/components/ui/Badge.d.ts.map +1 -1
  81. package/dist/core/components/ui/Badge.js.map +1 -1
  82. package/dist/core/components/ui/Breadcrumb.d.ts.map +1 -1
  83. package/dist/core/components/ui/Breadcrumb.js.map +1 -1
  84. package/dist/core/components/ui/Button.d.ts.map +1 -1
  85. package/dist/core/components/ui/Button.js.map +1 -1
  86. package/dist/core/components/ui/Calendar.d.ts.map +1 -1
  87. package/dist/core/components/ui/Calendar.js.map +1 -1
  88. package/dist/core/components/ui/Card.d.ts.map +1 -1
  89. package/dist/core/components/ui/Card.js.map +1 -1
  90. package/dist/core/components/ui/Checkbox.d.ts.map +1 -1
  91. package/dist/core/components/ui/Checkbox.js.map +1 -1
  92. package/dist/core/components/ui/CollapsibleSection.d.ts.map +1 -1
  93. package/dist/core/components/ui/CollapsibleSection.js.map +1 -1
  94. package/dist/core/components/ui/ColorCircle.d.ts.map +1 -1
  95. package/dist/core/components/ui/ColorCircle.js.map +1 -1
  96. package/dist/core/components/ui/Command.d.ts.map +1 -1
  97. package/dist/core/components/ui/Command.js.map +1 -1
  98. package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts.map +1 -1
  99. package/dist/core/components/ui/Comments/CollapsibleCommentItem.js.map +1 -1
  100. package/dist/core/components/ui/Comments/Comment.d.ts.map +1 -1
  101. package/dist/core/components/ui/Comments/Comment.js.map +1 -1
  102. package/dist/core/components/ui/Comments/CommentInput.d.ts.map +1 -1
  103. package/dist/core/components/ui/Comments/CommentInput.js.map +1 -1
  104. package/dist/core/components/ui/Comments/CommentsSection.d.ts.map +1 -1
  105. package/dist/core/components/ui/Comments/CommentsSection.js.map +1 -1
  106. package/dist/core/components/ui/Comments/commentUtils.d.ts.map +1 -1
  107. package/dist/core/components/ui/Comments/commentUtils.js.map +1 -1
  108. package/dist/core/components/ui/Countdown.d.ts.map +1 -1
  109. package/dist/core/components/ui/Countdown.js.map +1 -1
  110. package/dist/core/components/ui/DataTable.d.ts.map +1 -1
  111. package/dist/core/components/ui/DataTable.js.map +1 -1
  112. package/dist/core/components/ui/DatePicker.d.ts.map +1 -1
  113. package/dist/core/components/ui/DatePicker.js.map +1 -1
  114. package/dist/core/components/ui/DescriptionList.d.ts.map +1 -1
  115. package/dist/core/components/ui/DescriptionList.js.map +1 -1
  116. package/dist/core/components/ui/Dialog.d.ts.map +1 -1
  117. package/dist/core/components/ui/Dialog.js.map +1 -1
  118. package/dist/core/components/ui/DropdownMenu.d.ts.map +1 -1
  119. package/dist/core/components/ui/DropdownMenu.js.map +1 -1
  120. package/dist/core/components/ui/ExportData.d.ts.map +1 -1
  121. package/dist/core/components/ui/ExportData.js.map +1 -1
  122. package/dist/core/components/ui/FilesManager/index.d.ts.map +1 -1
  123. package/dist/core/components/ui/FilesManager/index.js.map +1 -1
  124. package/dist/core/components/ui/FilesManager/src/FileItemComponent.d.ts.map +1 -1
  125. package/dist/core/components/ui/FilesManager/src/FileItemComponent.js.map +1 -1
  126. package/dist/core/components/ui/FilesManager/src/FileMarker.d.ts.map +1 -1
  127. package/dist/core/components/ui/FilesManager/src/FileMarker.js.map +1 -1
  128. package/dist/core/components/ui/FilesManager/src/ViewerContextMenu.d.ts.map +1 -1
  129. package/dist/core/components/ui/FilesManager/src/ViewerContextMenu.js.map +1 -1
  130. package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.d.ts.map +1 -1
  131. package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.js.map +1 -1
  132. package/dist/core/components/ui/FilesManager/src/downloadUtils.d.ts.map +1 -1
  133. package/dist/core/components/ui/FilesManager/src/downloadUtils.js.map +1 -1
  134. package/dist/core/components/ui/FilesManager/src/useCommonFileUpload.d.ts.map +1 -1
  135. package/dist/core/components/ui/FilesManager/src/useCommonFileUpload.js.map +1 -1
  136. package/dist/core/components/ui/FilesManager/src/useFileActions.d.ts.map +1 -1
  137. package/dist/core/components/ui/FilesManager/src/useFileActions.js.map +1 -1
  138. package/dist/core/components/ui/FilesManager/src/useFileDeleteHandler.d.ts.map +1 -1
  139. package/dist/core/components/ui/FilesManager/src/useFileDeleteHandler.js.map +1 -1
  140. package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.d.ts.map +1 -1
  141. package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.js.map +1 -1
  142. package/dist/core/components/ui/FilesManager/src/useFileUploadWithProgress.d.ts.map +1 -1
  143. package/dist/core/components/ui/FilesManager/src/useFileUploadWithProgress.js.map +1 -1
  144. package/dist/core/components/ui/Footer.d.ts.map +1 -1
  145. package/dist/core/components/ui/Footer.js.map +1 -1
  146. package/dist/core/components/ui/GenericTool.d.ts.map +1 -1
  147. package/dist/core/components/ui/GenericTool.js.map +1 -1
  148. package/dist/core/components/ui/Icons/BcfIcon.d.ts.map +1 -1
  149. package/dist/core/components/ui/Icons/BcfIcon.js.map +1 -1
  150. package/dist/core/components/ui/Icons/CdtIcon.d.ts.map +1 -1
  151. package/dist/core/components/ui/Icons/CdtIcon.js.map +1 -1
  152. package/dist/core/components/ui/Icons/FloorPlanIcon.d.ts.map +1 -1
  153. package/dist/core/components/ui/Icons/FloorPlanIcon.js.map +1 -1
  154. package/dist/core/components/ui/Icons/GoogleIcon.d.ts.map +1 -1
  155. package/dist/core/components/ui/Icons/GoogleIcon.js.map +1 -1
  156. package/dist/core/components/ui/Icons/IdsIcon.d.ts.map +1 -1
  157. package/dist/core/components/ui/Icons/IdsIcon.js.map +1 -1
  158. package/dist/core/components/ui/Icons/IfcIcon.d.ts.map +1 -1
  159. package/dist/core/components/ui/Icons/IfcIcon.js.map +1 -1
  160. package/dist/core/components/ui/Icons/index.d.ts.map +1 -1
  161. package/dist/core/components/ui/Icons/index.js.map +1 -1
  162. package/dist/core/components/ui/InfoSidebar/Container.d.ts.map +1 -1
  163. package/dist/core/components/ui/InfoSidebar/Container.js.map +1 -1
  164. package/dist/core/components/ui/InfoSidebar/Header.d.ts.map +1 -1
  165. package/dist/core/components/ui/InfoSidebar/Header.js.map +1 -1
  166. package/dist/core/components/ui/InfoSidebar/index.d.ts.map +1 -1
  167. package/dist/core/components/ui/InfoSidebar/index.js.map +1 -1
  168. package/dist/core/components/ui/Input.d.ts.map +1 -1
  169. package/dist/core/components/ui/Input.js.map +1 -1
  170. package/dist/core/components/ui/Label.d.ts.map +1 -1
  171. package/dist/core/components/ui/Label.js.map +1 -1
  172. package/dist/core/components/ui/LanguageToggle.d.ts.map +1 -1
  173. package/dist/core/components/ui/LanguageToggle.js.map +1 -1
  174. package/dist/core/components/ui/LoadingSpinner.d.ts.map +1 -1
  175. package/dist/core/components/ui/LoadingSpinner.js.map +1 -1
  176. package/dist/core/components/ui/Menubar.d.ts.map +1 -1
  177. package/dist/core/components/ui/Menubar.js.map +1 -1
  178. package/dist/core/components/ui/NavUser.d.ts.map +1 -1
  179. package/dist/core/components/ui/NavUser.js.map +1 -1
  180. package/dist/core/components/ui/Navbar.d.ts.map +1 -1
  181. package/dist/core/components/ui/Navbar.js.map +1 -1
  182. package/dist/core/components/ui/Popover.d.ts.map +1 -1
  183. package/dist/core/components/ui/Popover.js.map +1 -1
  184. package/dist/core/components/ui/Progress.d.ts.map +1 -1
  185. package/dist/core/components/ui/Progress.js.map +1 -1
  186. package/dist/core/components/ui/ScrollArea.d.ts.map +1 -1
  187. package/dist/core/components/ui/ScrollArea.js.map +1 -1
  188. package/dist/core/components/ui/SearchInput.d.ts.map +1 -1
  189. package/dist/core/components/ui/SearchInput.js.map +1 -1
  190. package/dist/core/components/ui/Select.d.ts.map +1 -1
  191. package/dist/core/components/ui/Select.js.map +1 -1
  192. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts.map +1 -1
  193. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js.map +1 -1
  194. package/dist/core/components/ui/Sensors/Sensor.d.ts.map +1 -1
  195. package/dist/core/components/ui/Sensors/Sensor.js.map +1 -1
  196. package/dist/core/components/ui/Sensors/SensorChart.d.ts.map +1 -1
  197. package/dist/core/components/ui/Sensors/SensorChart.js.map +1 -1
  198. package/dist/core/components/ui/Sensors/SensorInput.d.ts.map +1 -1
  199. package/dist/core/components/ui/Sensors/SensorInput.js.map +1 -1
  200. package/dist/core/components/ui/Sensors/SensorTagsSection.d.ts.map +1 -1
  201. package/dist/core/components/ui/Sensors/SensorTagsSection.js.map +1 -1
  202. package/dist/core/components/ui/Sensors/SensorsSection.d.ts.map +1 -1
  203. package/dist/core/components/ui/Sensors/SensorsSection.js.map +1 -1
  204. package/dist/core/components/ui/Sensors/SensorsSectionSkeleton.d.ts.map +1 -1
  205. package/dist/core/components/ui/Sensors/SensorsSectionSkeleton.js.map +1 -1
  206. package/dist/core/components/ui/Sensors/sensorUtils.d.ts.map +1 -1
  207. package/dist/core/components/ui/Sensors/sensorUtils.js.map +1 -1
  208. package/dist/core/components/ui/Separator.d.ts.map +1 -1
  209. package/dist/core/components/ui/Separator.js.map +1 -1
  210. package/dist/core/components/ui/SettingsButton.d.ts.map +1 -1
  211. package/dist/core/components/ui/SettingsButton.js.map +1 -1
  212. package/dist/core/components/ui/ShareFeature/QRCodeWithLink.d.ts.map +1 -1
  213. package/dist/core/components/ui/ShareFeature/QRCodeWithLink.js.map +1 -1
  214. package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.d.ts.map +1 -1
  215. package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.js.map +1 -1
  216. package/dist/core/components/ui/ShareFeature/index.d.ts.map +1 -1
  217. package/dist/core/components/ui/ShareFeature/index.js.map +1 -1
  218. package/dist/core/components/ui/Sheet.d.ts.map +1 -1
  219. package/dist/core/components/ui/Sheet.js.map +1 -1
  220. package/dist/core/components/ui/Sidebar.d.ts.map +1 -1
  221. package/dist/core/components/ui/Sidebar.js.map +1 -1
  222. package/dist/core/components/ui/Skeleton.d.ts.map +1 -1
  223. package/dist/core/components/ui/Skeleton.js.map +1 -1
  224. package/dist/core/components/ui/Slider.d.ts.map +1 -1
  225. package/dist/core/components/ui/Slider.js.map +1 -1
  226. package/dist/core/components/ui/Sonner.d.ts.map +1 -1
  227. package/dist/core/components/ui/Sonner.js.map +1 -1
  228. package/dist/core/components/ui/Switch.d.ts.map +1 -1
  229. package/dist/core/components/ui/Switch.js.map +1 -1
  230. package/dist/core/components/ui/Table.d.ts.map +1 -1
  231. package/dist/core/components/ui/Table.js.map +1 -1
  232. package/dist/core/components/ui/Tabs.d.ts.map +1 -1
  233. package/dist/core/components/ui/Tabs.js.map +1 -1
  234. package/dist/core/components/ui/Textarea.d.ts.map +1 -1
  235. package/dist/core/components/ui/Textarea.js.map +1 -1
  236. package/dist/core/components/ui/Toggle.d.ts.map +1 -1
  237. package/dist/core/components/ui/Toggle.js.map +1 -1
  238. package/dist/core/components/ui/ToggleGroup.d.ts.map +1 -1
  239. package/dist/core/components/ui/ToggleGroup.js.map +1 -1
  240. package/dist/core/components/ui/ToolbarButton.d.ts.map +1 -1
  241. package/dist/core/components/ui/ToolbarButton.js.map +1 -1
  242. package/dist/core/components/ui/Tooltip.d.ts.map +1 -1
  243. package/dist/core/components/ui/Tooltip.js.map +1 -1
  244. package/dist/core/components/ui/UserAvatar.d.ts.map +1 -1
  245. package/dist/core/components/ui/UserAvatar.js.map +1 -1
  246. package/dist/core/components/ui/chart.d.ts.map +1 -1
  247. package/dist/core/components/ui/chart.js.map +1 -1
  248. package/dist/core/components/ui/downloadUtils.d.ts.map +1 -1
  249. package/dist/core/components/ui/downloadUtils.js.map +1 -1
  250. package/dist/core/components/ui/index.d.ts.map +1 -1
  251. package/dist/core/components/ui/index.js.map +1 -1
  252. package/dist/core/components/ui/openPopupWindow.d.ts.map +1 -1
  253. package/dist/core/components/ui/openPopupWindow.js.map +1 -1
  254. package/dist/core/components/ui/openPopupWindowLCA.d.ts.map +1 -1
  255. package/dist/core/components/ui/openPopupWindowLCA.js.map +1 -1
  256. package/dist/core/components/ui/stats.d.ts.map +1 -1
  257. package/dist/core/components/ui/stats.js.map +1 -1
  258. package/dist/core/components/ui/uploadFile.d.ts.map +1 -1
  259. package/dist/core/components/ui/uploadFile.js.map +1 -1
  260. package/dist/core/components/viewers/Data/DataMenu.d.ts.map +1 -1
  261. package/dist/core/components/viewers/Data/DataMenu.js.map +1 -1
  262. package/dist/core/components/viewers/Data/FilterButtons.d.ts.map +1 -1
  263. package/dist/core/components/viewers/Data/FilterButtons.js.map +1 -1
  264. package/dist/core/components/viewers/Data/HeaderButtons.d.ts.map +1 -1
  265. package/dist/core/components/viewers/Data/HeaderButtons.js.map +1 -1
  266. package/dist/core/components/viewers/Data/MoreOptions.d.ts.map +1 -1
  267. package/dist/core/components/viewers/Data/MoreOptions.js.map +1 -1
  268. package/dist/core/components/viewers/Data/advancedFilter/Filters.d.ts.map +1 -1
  269. package/dist/core/components/viewers/Data/advancedFilter/Filters.js.map +1 -1
  270. package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.d.ts.map +1 -1
  271. package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.js.map +1 -1
  272. package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.d.ts.map +1 -1
  273. package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.js.map +1 -1
  274. package/dist/core/components/viewers/Data/buildingDetails/BuildingDetails.d.ts.map +1 -1
  275. package/dist/core/components/viewers/Data/buildingDetails/BuildingDetails.js.map +1 -1
  276. package/dist/core/components/viewers/Data/buildingDetails/BuildingsMoreOptions.d.ts.map +1 -1
  277. package/dist/core/components/viewers/Data/buildingDetails/BuildingsMoreOptions.js.map +1 -1
  278. package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.d.ts.map +1 -1
  279. package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.js.map +1 -1
  280. package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.d.ts.map +1 -1
  281. package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.js.map +1 -1
  282. package/dist/core/components/viewers/Data/buildingDetails/buildingSchemaTemplate.d.ts.map +1 -1
  283. package/dist/core/components/viewers/Data/buildingDetails/buildingSchemaTemplate.js.map +1 -1
  284. package/dist/core/components/viewers/Data/details/AttachedFiles.d.ts.map +1 -1
  285. package/dist/core/components/viewers/Data/details/AttachedFiles.js.map +1 -1
  286. package/dist/core/components/viewers/Data/details/CheckboxGroup.d.ts.map +1 -1
  287. package/dist/core/components/viewers/Data/details/CheckboxGroup.js.map +1 -1
  288. package/dist/core/components/viewers/Data/details/DetailActions.d.ts.map +1 -1
  289. package/dist/core/components/viewers/Data/details/DetailActions.js.map +1 -1
  290. package/dist/core/components/viewers/Data/details/DetailHeader.d.ts.map +1 -1
  291. package/dist/core/components/viewers/Data/details/DetailHeader.js.map +1 -1
  292. package/dist/core/components/viewers/Data/details/EnergySourcesGrid.d.ts.map +1 -1
  293. package/dist/core/components/viewers/Data/details/EnergySourcesGrid.js.map +1 -1
  294. package/dist/core/components/viewers/Data/details/FieldValue.d.ts.map +1 -1
  295. package/dist/core/components/viewers/Data/details/FieldValue.js.map +1 -1
  296. package/dist/core/components/viewers/Data/details/FileUpload.d.ts.map +1 -1
  297. package/dist/core/components/viewers/Data/details/FileUpload.js.map +1 -1
  298. package/dist/core/components/viewers/Data/details/FilterFiles.d.ts.map +1 -1
  299. package/dist/core/components/viewers/Data/details/FilterFiles.js.map +1 -1
  300. package/dist/core/components/viewers/Data/details/TabSidebar.d.ts.map +1 -1
  301. package/dist/core/components/viewers/Data/details/TabSidebar.js.map +1 -1
  302. package/dist/core/components/viewers/Data/details/UnitsGrid.d.ts.map +1 -1
  303. package/dist/core/components/viewers/Data/details/UnitsGrid.js.map +1 -1
  304. package/dist/core/components/viewers/Data/details/getAttachmentFileName.d.ts.map +1 -1
  305. package/dist/core/components/viewers/Data/details/getAttachmentFileName.js.map +1 -1
  306. package/dist/core/components/viewers/Data/files/DatatableFileAdder.d.ts.map +1 -1
  307. package/dist/core/components/viewers/Data/files/DatatableFileAdder.js.map +1 -1
  308. package/dist/core/components/viewers/Data/files/FileDetails.d.ts.map +1 -1
  309. package/dist/core/components/viewers/Data/files/FileDetails.js.map +1 -1
  310. package/dist/core/components/viewers/Data/files/FileMoreOptions.d.ts.map +1 -1
  311. package/dist/core/components/viewers/Data/files/FileMoreOptions.js.map +1 -1
  312. package/dist/core/components/viewers/Data/files/FilePreview.d.ts.map +1 -1
  313. package/dist/core/components/viewers/Data/files/FilePreview.js.map +1 -1
  314. package/dist/core/components/viewers/Data/files/utils/fuzzySearch.d.ts.map +1 -1
  315. package/dist/core/components/viewers/Data/files/utils/fuzzySearch.js.map +1 -1
  316. package/dist/core/components/viewers/Data/infrastructureDetails/AddInfrastructure.d.ts.map +1 -1
  317. package/dist/core/components/viewers/Data/infrastructureDetails/AddInfrastructure.js.map +1 -1
  318. package/dist/core/components/viewers/Data/infrastructureDetails/FieldRenderer.d.ts.map +1 -1
  319. package/dist/core/components/viewers/Data/infrastructureDetails/FieldRenderer.js.map +1 -1
  320. package/dist/core/components/viewers/Data/infrastructureDetails/InfrastructureDetails.d.ts.map +1 -1
  321. package/dist/core/components/viewers/Data/infrastructureDetails/InfrastructureDetails.js.map +1 -1
  322. package/dist/core/components/viewers/Data/siteDetails/AddSite.d.ts.map +1 -1
  323. package/dist/core/components/viewers/Data/siteDetails/AddSite.js.map +1 -1
  324. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.d.ts.map +1 -1
  325. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js.map +1 -1
  326. package/dist/core/components/viewers/Data/siteDetails/FieldRenderer.d.ts.map +1 -1
  327. package/dist/core/components/viewers/Data/siteDetails/FieldRenderer.js.map +1 -1
  328. package/dist/core/components/viewers/Data/siteDetails/SiteDetails.d.ts.map +1 -1
  329. package/dist/core/components/viewers/Data/siteDetails/SiteDetails.js.map +1 -1
  330. package/dist/core/components/viewers/Data/userDetails/AddUser.d.ts.map +1 -1
  331. package/dist/core/components/viewers/Data/userDetails/AddUser.js.map +1 -1
  332. package/dist/core/components/viewers/Data/userDetails/UserDetails.d.ts.map +1 -1
  333. package/dist/core/components/viewers/Data/userDetails/UserDetails.js.map +1 -1
  334. package/dist/core/components/viewers/Data/userDetails/UserMoreOptions.d.ts.map +1 -1
  335. package/dist/core/components/viewers/Data/userDetails/UserMoreOptions.js.map +1 -1
  336. package/dist/core/components/viewers/Data/utils/Columns.d.ts.map +1 -1
  337. package/dist/core/components/viewers/Data/utils/Columns.js.map +1 -1
  338. package/dist/core/components/viewers/Data/utils/Headers.d.ts.map +1 -1
  339. package/dist/core/components/viewers/Data/utils/Headers.js.map +1 -1
  340. package/dist/core/components/viewers/Data/utils/convertDate.d.ts.map +1 -1
  341. package/dist/core/components/viewers/Data/utils/convertDate.js.map +1 -1
  342. package/dist/core/components/viewers/Data/utils/csvUtils.d.ts.map +1 -1
  343. package/dist/core/components/viewers/Data/utils/csvUtils.js.map +1 -1
  344. package/dist/core/components/viewers/Data/utils/filterHelper.d.ts.map +1 -1
  345. package/dist/core/components/viewers/Data/utils/filterHelper.js.map +1 -1
  346. package/dist/core/components/viewers/Data/utils/positionParser.d.ts.map +1 -1
  347. package/dist/core/components/viewers/Data/utils/positionParser.js.map +1 -1
  348. package/dist/core/components/viewers/Data/utils/useViewerData.d.ts.map +1 -1
  349. package/dist/core/components/viewers/Data/utils/useViewerData.js.map +1 -1
  350. package/dist/core/components/viewers/Data/utils/viewerConfig.d.ts.map +1 -1
  351. package/dist/core/components/viewers/Data/utils/viewerConfig.js.map +1 -1
  352. package/dist/core/components/viewers/Viewer.d.ts.map +1 -1
  353. package/dist/core/components/viewers/Viewer.js.map +1 -1
  354. package/dist/core/components/viewers/bim/BimToolbar.d.ts.map +1 -1
  355. package/dist/core/components/viewers/bim/BimToolbar.js.map +1 -1
  356. package/dist/core/components/viewers/bim/BimViewer.d.ts.map +1 -1
  357. package/dist/core/components/viewers/bim/BimViewer.js.map +1 -1
  358. package/dist/core/components/viewers/bim/src/BCFTopicsManager.d.ts.map +1 -1
  359. package/dist/core/components/viewers/bim/src/BCFTopicsManager.js.map +1 -1
  360. package/dist/core/components/viewers/bim/src/BIMManager/index.d.ts.map +1 -1
  361. package/dist/core/components/viewers/bim/src/BIMManager/index.js.map +1 -1
  362. package/dist/core/components/viewers/bim/src/BimLoadingState/index.d.ts.map +1 -1
  363. package/dist/core/components/viewers/bim/src/BimLoadingState/index.js.map +1 -1
  364. package/dist/core/components/viewers/bim/src/BimMeasurements/LenghtMeasurement.d.ts.map +1 -1
  365. package/dist/core/components/viewers/bim/src/BimMeasurements/LenghtMeasurement.js.map +1 -1
  366. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/index.d.ts.map +1 -1
  367. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/index.js.map +1 -1
  368. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CollapsibleTopicItem.d.ts.map +1 -1
  369. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CollapsibleTopicItem.js.map +1 -1
  370. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CreateTopicDialog.d.ts.map +1 -1
  371. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CreateTopicDialog.js.map +1 -1
  372. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/TopicsSection.d.ts.map +1 -1
  373. package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/TopicsSection.js.map +1 -1
  374. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/index.d.ts.map +1 -1
  375. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/index.js.map +1 -1
  376. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  377. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  378. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
  379. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
  380. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/index.d.ts.map +1 -1
  381. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/index.js.map +1 -1
  382. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/ElevationsSection.d.ts.map +1 -1
  383. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/ElevationsSection.js.map +1 -1
  384. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.d.ts.map +1 -1
  385. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js.map +1 -1
  386. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/SpatialStructureSection.d.ts.map +1 -1
  387. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/SpatialStructureSection.js.map +1 -1
  388. package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.d.ts.map +1 -1
  389. package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.js.map +1 -1
  390. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/index.d.ts.map +1 -1
  391. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/index.js.map +1 -1
  392. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.d.ts.map +1 -1
  393. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.js.map +1 -1
  394. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/LightingManagement.d.ts.map +1 -1
  395. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/LightingManagement.js.map +1 -1
  396. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.d.ts.map +1 -1
  397. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.js.map +1 -1
  398. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.d.ts.map +1 -1
  399. package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.js.map +1 -1
  400. package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.d.ts.map +1 -1
  401. package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.js.map +1 -1
  402. package/dist/core/components/viewers/bim/src/BimSidebar/src/index.d.ts.map +1 -1
  403. package/dist/core/components/viewers/bim/src/BimSidebar/src/index.js.map +1 -1
  404. package/dist/core/components/viewers/bim/src/CameraProjection.d.ts.map +1 -1
  405. package/dist/core/components/viewers/bim/src/CameraProjection.js.map +1 -1
  406. package/dist/core/components/viewers/bim/src/ClippingPlane.d.ts.map +1 -1
  407. package/dist/core/components/viewers/bim/src/ClippingPlane.js.map +1 -1
  408. package/dist/core/components/viewers/bim/src/CurrentCamera.d.ts.map +1 -1
  409. package/dist/core/components/viewers/bim/src/CurrentCamera.js.map +1 -1
  410. package/dist/core/components/viewers/bim/src/CurrentWorld.d.ts.map +1 -1
  411. package/dist/core/components/viewers/bim/src/CurrentWorld.js.map +1 -1
  412. package/dist/core/components/viewers/bim/src/Cursor.d.ts.map +1 -1
  413. package/dist/core/components/viewers/bim/src/Cursor.js.map +1 -1
  414. package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts.map +1 -1
  415. package/dist/core/components/viewers/bim/src/DXFLoader/index.js.map +1 -1
  416. package/dist/core/components/viewers/bim/src/ElevationsTool/index.d.ts.map +1 -1
  417. package/dist/core/components/viewers/bim/src/ElevationsTool/index.js.map +1 -1
  418. package/dist/core/components/viewers/bim/src/ElevationsTool/src/ElevationProjector.d.ts.map +1 -1
  419. package/dist/core/components/viewers/bim/src/ElevationsTool/src/ElevationProjector.js.map +1 -1
  420. package/dist/core/components/viewers/bim/src/ElevationsTool/src/types.d.ts.map +1 -1
  421. package/dist/core/components/viewers/bim/src/ElevationsTool/src/types.js.map +1 -1
  422. package/dist/core/components/viewers/bim/src/FitCamera.d.ts.map +1 -1
  423. package/dist/core/components/viewers/bim/src/FitCamera.js.map +1 -1
  424. package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts.map +1 -1
  425. package/dist/core/components/viewers/bim/src/FloorplanTool/index.js.map +1 -1
  426. package/dist/core/components/viewers/bim/src/FloorplanTool/src/FloorplanRenderer.d.ts.map +1 -1
  427. package/dist/core/components/viewers/bim/src/FloorplanTool/src/FloorplanRenderer.js.map +1 -1
  428. package/dist/core/components/viewers/bim/src/FloorplanTool/src/StoreyProjector.d.ts.map +1 -1
  429. package/dist/core/components/viewers/bim/src/FloorplanTool/src/StoreyProjector.js.map +1 -1
  430. package/dist/core/components/viewers/bim/src/FloorplanTool/src/types.d.ts.map +1 -1
  431. package/dist/core/components/viewers/bim/src/FloorplanTool/src/types.js.map +1 -1
  432. package/dist/core/components/viewers/bim/src/FloorplanTool/src/utils.d.ts.map +1 -1
  433. package/dist/core/components/viewers/bim/src/FloorplanTool/src/utils.js.map +1 -1
  434. package/dist/core/components/viewers/bim/src/GhostMode.d.ts.map +1 -1
  435. package/dist/core/components/viewers/bim/src/GhostMode.js.map +1 -1
  436. package/dist/core/components/viewers/bim/src/Highlighter/index.d.ts.map +1 -1
  437. package/dist/core/components/viewers/bim/src/Highlighter/index.js.map +1 -1
  438. package/dist/core/components/viewers/bim/src/IDSManager/index.d.ts.map +1 -1
  439. package/dist/core/components/viewers/bim/src/IDSManager/index.js.map +1 -1
  440. package/dist/core/components/viewers/bim/src/IDSManager/src/IDSLegend.d.ts.map +1 -1
  441. package/dist/core/components/viewers/bim/src/IDSManager/src/IDSLegend.js.map +1 -1
  442. package/dist/core/components/viewers/bim/src/IfcToFragments.d.ts.map +1 -1
  443. package/dist/core/components/viewers/bim/src/IfcToFragments.js.map +1 -1
  444. package/dist/core/components/viewers/bim/src/LoadIfcAsFragments.d.ts.map +1 -1
  445. package/dist/core/components/viewers/bim/src/LoadIfcAsFragments.js.map +1 -1
  446. package/dist/core/components/viewers/bim/src/LoadModels.d.ts.map +1 -1
  447. package/dist/core/components/viewers/bim/src/LoadModels.js.map +1 -1
  448. package/dist/core/components/viewers/bim/src/ModelManager/index.d.ts.map +1 -1
  449. package/dist/core/components/viewers/bim/src/ModelManager/index.js.map +1 -1
  450. package/dist/core/components/viewers/bim/src/SimpleBimViewer.d.ts.map +1 -1
  451. package/dist/core/components/viewers/bim/src/SimpleBimViewer.js.map +1 -1
  452. package/dist/core/components/viewers/bim/src/SpatialStructure.d.ts.map +1 -1
  453. package/dist/core/components/viewers/bim/src/SpatialStructure.js.map +1 -1
  454. package/dist/core/components/viewers/bim/src/ViewportGizmo.d.ts.map +1 -1
  455. package/dist/core/components/viewers/bim/src/ViewportGizmo.js.map +1 -1
  456. package/dist/core/components/viewers/bim/src/lib/CameraController.d.ts.map +1 -1
  457. package/dist/core/components/viewers/bim/src/lib/CameraController.js.map +1 -1
  458. package/dist/core/components/viewers/bim/src/lib/CategoryHighlighter.d.ts.map +1 -1
  459. package/dist/core/components/viewers/bim/src/lib/CategoryHighlighter.js.map +1 -1
  460. package/dist/core/components/viewers/bim/src/lib/ChromeController.d.ts.map +1 -1
  461. package/dist/core/components/viewers/bim/src/lib/ChromeController.js.map +1 -1
  462. package/dist/core/components/viewers/bim/src/lib/ClipController.d.ts.map +1 -1
  463. package/dist/core/components/viewers/bim/src/lib/ClipController.js.map +1 -1
  464. package/dist/core/components/viewers/bim/src/lib/GridController.d.ts.map +1 -1
  465. package/dist/core/components/viewers/bim/src/lib/GridController.js.map +1 -1
  466. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.d.ts.map +1 -1
  467. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.js.map +1 -1
  468. package/dist/core/components/viewers/bim/src/lib/ViewModeCoordinator.d.ts.map +1 -1
  469. package/dist/core/components/viewers/bim/src/lib/ViewModeCoordinator.js.map +1 -1
  470. package/dist/core/components/viewers/bim/src/lib/ViewSectionList.d.ts.map +1 -1
  471. package/dist/core/components/viewers/bim/src/lib/ViewSectionList.js.map +1 -1
  472. package/dist/core/components/viewers/bim/src/lib/drawingLayers.d.ts.map +1 -1
  473. package/dist/core/components/viewers/bim/src/lib/drawingLayers.js.map +1 -1
  474. package/dist/core/components/viewers/bim/src/lib/drawingProjection.d.ts.map +1 -1
  475. package/dist/core/components/viewers/bim/src/lib/drawingProjection.js.map +1 -1
  476. package/dist/core/components/viewers/bim/src/lib/exportDrawingToDxf.d.ts.map +1 -1
  477. package/dist/core/components/viewers/bim/src/lib/exportDrawingToDxf.js.map +1 -1
  478. package/dist/core/components/viewers/bim/src/lib/safeRun.d.ts.map +1 -1
  479. package/dist/core/components/viewers/bim/src/lib/safeRun.js.map +1 -1
  480. package/dist/core/components/viewers/bim/src/lib/useBuildingName.d.ts.map +1 -1
  481. package/dist/core/components/viewers/bim/src/lib/useBuildingName.js.map +1 -1
  482. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.d.ts.map +1 -1
  483. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js.map +1 -1
  484. package/dist/core/components/viewers/bim/src/lib/viewSection.d.ts.map +1 -1
  485. package/dist/core/components/viewers/bim/src/lib/viewSection.js.map +1 -1
  486. package/dist/core/components/viewers/bim/src/propertiesMenu/index.d.ts.map +1 -1
  487. package/dist/core/components/viewers/bim/src/propertiesMenu/index.js.map +1 -1
  488. package/dist/core/components/viewers/bim/src/propertiesMenu/src/ElementList.d.ts.map +1 -1
  489. package/dist/core/components/viewers/bim/src/propertiesMenu/src/ElementList.js.map +1 -1
  490. package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertiesMenuHeader.d.ts.map +1 -1
  491. package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertiesMenuHeader.js.map +1 -1
  492. package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertyGroup.d.ts.map +1 -1
  493. package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertyGroup.js.map +1 -1
  494. package/dist/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.d.ts.map +1 -1
  495. package/dist/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.js.map +1 -1
  496. package/dist/core/components/viewers/bim/src/propertiesMenu/src/utils.d.ts.map +1 -1
  497. package/dist/core/components/viewers/bim/src/propertiesMenu/src/utils.js.map +1 -1
  498. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.d.ts.map +1 -1
  499. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js.map +1 -1
  500. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts.map +1 -1
  501. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js.map +1 -1
  502. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddFile.d.ts.map +1 -1
  503. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddFile.js.map +1 -1
  504. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddSensor.d.ts.map +1 -1
  505. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddSensor.js.map +1 -1
  506. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddToBimToolbar.d.ts.map +1 -1
  507. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddToBimToolbar.js.map +1 -1
  508. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.d.ts.map +1 -1
  509. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.js.map +1 -1
  510. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.d.ts.map +1 -1
  511. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js.map +1 -1
  512. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts.map +1 -1
  513. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.js.map +1 -1
  514. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.d.ts.map +1 -1
  515. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js.map +1 -1
  516. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.d.ts.map +1 -1
  517. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.js.map +1 -1
  518. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/index.d.ts.map +1 -1
  519. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/index.js.map +1 -1
  520. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/markerUtils.d.ts.map +1 -1
  521. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/markerUtils.js.map +1 -1
  522. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.d.ts.map +1 -1
  523. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.js.map +1 -1
  524. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.d.ts.map +1 -1
  525. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.js.map +1 -1
  526. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.d.ts.map +1 -1
  527. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js.map +1 -1
  528. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.d.ts.map +1 -1
  529. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.js.map +1 -1
  530. package/dist/core/components/viewers/bim/src/tools/BIMSearchTool.d.ts.map +1 -1
  531. package/dist/core/components/viewers/bim/src/tools/BIMSearchTool.js.map +1 -1
  532. package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.d.ts.map +1 -1
  533. package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.js.map +1 -1
  534. package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.d.ts.map +1 -1
  535. package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.js.map +1 -1
  536. package/dist/core/components/viewers/bim/src/tools/FitCameraTool.d.ts.map +1 -1
  537. package/dist/core/components/viewers/bim/src/tools/FitCameraTool.js.map +1 -1
  538. package/dist/core/components/viewers/bim/src/tools/InspectBimTool.d.ts.map +1 -1
  539. package/dist/core/components/viewers/bim/src/tools/InspectBimTool.js.map +1 -1
  540. package/dist/core/components/viewers/bim/src/tools/bimToolbar.d.ts.map +1 -1
  541. package/dist/core/components/viewers/bim/src/tools/bimToolbar.js.map +1 -1
  542. package/dist/core/components/viewers/bim/src/tools/measureBimTool.d.ts.map +1 -1
  543. package/dist/core/components/viewers/bim/src/tools/measureBimTool.js.map +1 -1
  544. package/dist/core/components/viewers/bim/src/tools/selectionBimTool.d.ts.map +1 -1
  545. package/dist/core/components/viewers/bim/src/tools/selectionBimTool.js.map +1 -1
  546. package/dist/core/components/viewers/bim/src/tools/shareBimTool.d.ts.map +1 -1
  547. package/dist/core/components/viewers/bim/src/tools/shareBimTool.js.map +1 -1
  548. package/dist/core/components/viewers/bim/utils/GizmoController.d.ts.map +1 -1
  549. package/dist/core/components/viewers/bim/utils/GizmoController.js.map +1 -1
  550. package/dist/core/components/viewers/bim/utils/setCameraLookAt.d.ts.map +1 -1
  551. package/dist/core/components/viewers/bim/utils/setCameraLookAt.js.map +1 -1
  552. package/dist/core/components/viewers/index.d.ts.map +1 -1
  553. package/dist/core/components/viewers/index.js.map +1 -1
  554. package/dist/core/components/viewers/map/MapViewer.d.ts.map +1 -1
  555. package/dist/core/components/viewers/map/MapViewer.js.map +1 -1
  556. package/dist/core/components/viewers/map/datasets/AddPortalDialog.d.ts.map +1 -1
  557. package/dist/core/components/viewers/map/datasets/AddPortalDialog.js.map +1 -1
  558. package/dist/core/components/viewers/map/datasets/DatasetDetails.d.ts.map +1 -1
  559. package/dist/core/components/viewers/map/datasets/DatasetDetails.js.map +1 -1
  560. package/dist/core/components/viewers/map/datasets/DatasetManager/index.d.ts.map +1 -1
  561. package/dist/core/components/viewers/map/datasets/DatasetManager/index.js.map +1 -1
  562. package/dist/core/components/viewers/map/datasets/DatasetManager/src/FieldsTable.d.ts.map +1 -1
  563. package/dist/core/components/viewers/map/datasets/DatasetManager/src/FieldsTable.js.map +1 -1
  564. package/dist/core/components/viewers/map/datasets/DatasetSkeleton.d.ts.map +1 -1
  565. package/dist/core/components/viewers/map/datasets/DatasetSkeleton.js.map +1 -1
  566. package/dist/core/components/viewers/map/datasets/Filters.d.ts.map +1 -1
  567. package/dist/core/components/viewers/map/datasets/Filters.js.map +1 -1
  568. package/dist/core/components/viewers/map/datasets/NestedFilter.d.ts.map +1 -1
  569. package/dist/core/components/viewers/map/datasets/NestedFilter.js.map +1 -1
  570. package/dist/core/components/viewers/map/datasets/RowActions.d.ts.map +1 -1
  571. package/dist/core/components/viewers/map/datasets/RowActions.js.map +1 -1
  572. package/dist/core/components/viewers/map/datasets/data.d.ts.map +1 -1
  573. package/dist/core/components/viewers/map/datasets/data.js.map +1 -1
  574. package/dist/core/components/viewers/map/datasets/index.d.ts.map +1 -1
  575. package/dist/core/components/viewers/map/datasets/index.js.map +1 -1
  576. package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.d.ts.map +1 -1
  577. package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.js.map +1 -1
  578. package/dist/core/components/viewers/map/datasets/src/arcgisFetch.d.ts.map +1 -1
  579. package/dist/core/components/viewers/map/datasets/src/arcgisFetch.js.map +1 -1
  580. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.d.ts.map +1 -1
  581. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.js.map +1 -1
  582. package/dist/core/components/viewers/map/datasets/src/cache.d.ts.map +1 -1
  583. package/dist/core/components/viewers/map/datasets/src/cache.js.map +1 -1
  584. package/dist/core/components/viewers/map/datasets/src/ckanDatasets.d.ts.map +1 -1
  585. package/dist/core/components/viewers/map/datasets/src/ckanDatasets.js.map +1 -1
  586. package/dist/core/components/viewers/map/datasets/src/geojsonFile.d.ts.map +1 -1
  587. package/dist/core/components/viewers/map/datasets/src/geojsonFile.js.map +1 -1
  588. package/dist/core/components/viewers/map/datasets/src/localDatasets.d.ts.map +1 -1
  589. package/dist/core/components/viewers/map/datasets/src/localDatasets.js.map +1 -1
  590. package/dist/core/components/viewers/map/datasets/src/minioDatasets.d.ts.map +1 -1
  591. package/dist/core/components/viewers/map/datasets/src/minioDatasets.js.map +1 -1
  592. package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.d.ts.map +1 -1
  593. package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.js.map +1 -1
  594. package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts.map +1 -1
  595. package/dist/core/components/viewers/map/datasets/src/publishedTiles.js.map +1 -1
  596. package/dist/core/components/viewers/map/datasets/src/socrataDatasets.d.ts.map +1 -1
  597. package/dist/core/components/viewers/map/datasets/src/socrataDatasets.js.map +1 -1
  598. package/dist/core/components/viewers/map/datasets/src/urlSources.d.ts.map +1 -1
  599. package/dist/core/components/viewers/map/datasets/src/urlSources.js.map +1 -1
  600. package/dist/core/components/viewers/map/datasets/src/useDatasetsForPortals.d.ts.map +1 -1
  601. package/dist/core/components/viewers/map/datasets/src/useDatasetsForPortals.js.map +1 -1
  602. package/dist/core/components/viewers/map/datasets/src/useFastDatasetCache.d.ts.map +1 -1
  603. package/dist/core/components/viewers/map/datasets/src/useFastDatasetCache.js.map +1 -1
  604. package/dist/core/components/viewers/map/datasets/src/wmsTime.d.ts +0 -8
  605. package/dist/core/components/viewers/map/datasets/src/wmsTime.d.ts.map +1 -1
  606. package/dist/core/components/viewers/map/datasets/src/wmsTime.js.map +1 -1
  607. package/dist/core/components/viewers/map/datasets/utils.d.ts.map +1 -1
  608. package/dist/core/components/viewers/map/datasets/utils.js.map +1 -1
  609. package/dist/core/components/viewers/map/legends/MapLegendHost.d.ts.map +1 -1
  610. package/dist/core/components/viewers/map/legends/MapLegendHost.js.map +1 -1
  611. package/dist/core/components/viewers/map/src/Geocoder.d.ts.map +1 -1
  612. package/dist/core/components/viewers/map/src/Geocoder.js.map +1 -1
  613. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/index.d.ts.map +1 -1
  614. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/index.js.map +1 -1
  615. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/index.d.ts.map +1 -1
  616. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/index.js.map +1 -1
  617. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.d.ts.map +1 -1
  618. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.js.map +1 -1
  619. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.d.ts.map +1 -1
  620. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js.map +1 -1
  621. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/OpenDataFeaturePopover.d.ts.map +1 -1
  622. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/OpenDataFeaturePopover.js.map +1 -1
  623. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/PopoverSkeleton.d.ts.map +1 -1
  624. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/PopoverSkeleton.js.map +1 -1
  625. package/dist/core/components/viewers/map/src/MapLayers/index.d.ts.map +1 -1
  626. package/dist/core/components/viewers/map/src/MapLayers/index.js.map +1 -1
  627. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.d.ts.map +1 -1
  628. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js.map +1 -1
  629. package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/index.d.ts.map +1 -1
  630. package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/index.js.map +1 -1
  631. package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/src/databaseBuildings.d.ts.map +1 -1
  632. package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/src/databaseBuildings.js.map +1 -1
  633. package/dist/core/components/viewers/map/src/MapLayers/src/CommentLayer/index.d.ts.map +1 -1
  634. package/dist/core/components/viewers/map/src/MapLayers/src/CommentLayer/index.js.map +1 -1
  635. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.d.ts.map +1 -1
  636. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.js.map +1 -1
  637. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.d.ts.map +1 -1
  638. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js.map +1 -1
  639. package/dist/core/components/viewers/map/src/MapLayers/src/EditPosition.d.ts.map +1 -1
  640. package/dist/core/components/viewers/map/src/MapLayers/src/EditPosition.js.map +1 -1
  641. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.d.ts.map +1 -1
  642. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.js.map +1 -1
  643. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileIcon.d.ts.map +1 -1
  644. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileIcon.js.map +1 -1
  645. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.d.ts.map +1 -1
  646. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.js.map +1 -1
  647. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.d.ts.map +1 -1
  648. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.js.map +1 -1
  649. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileMarker.d.ts.map +1 -1
  650. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileMarker.js.map +1 -1
  651. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/index.d.ts.map +1 -1
  652. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/index.js.map +1 -1
  653. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.d.ts.map +1 -1
  654. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.js.map +1 -1
  655. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/openFileInPopUpWindow.d.ts.map +1 -1
  656. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/openFileInPopUpWindow.js.map +1 -1
  657. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.d.ts.map +1 -1
  658. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.js.map +1 -1
  659. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.d.ts.map +1 -1
  660. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js.map +1 -1
  661. package/dist/core/components/viewers/map/src/MapLayers/src/PlaceOnMap.d.ts.map +1 -1
  662. package/dist/core/components/viewers/map/src/MapLayers/src/PlaceOnMap.js.map +1 -1
  663. package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.d.ts.map +1 -1
  664. package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.js.map +1 -1
  665. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/index.d.ts.map +1 -1
  666. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/index.js.map +1 -1
  667. package/dist/core/components/viewers/map/src/MapLayers/src/disposeThreeScene.d.ts.map +1 -1
  668. package/dist/core/components/viewers/map/src/MapLayers/src/disposeThreeScene.js.map +1 -1
  669. package/dist/core/components/viewers/map/src/MapLayers/src/mapLayersUtils.d.ts.map +1 -1
  670. package/dist/core/components/viewers/map/src/MapLayers/src/mapLayersUtils.js.map +1 -1
  671. package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.d.ts.map +1 -1
  672. package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.js.map +1 -1
  673. package/dist/core/components/viewers/map/src/MapSidebar/index.d.ts.map +1 -1
  674. package/dist/core/components/viewers/map/src/MapSidebar/index.js.map +1 -1
  675. package/dist/core/components/viewers/map/src/MapSidebar/src/CommunicationTab/index.d.ts.map +1 -1
  676. package/dist/core/components/viewers/map/src/MapSidebar/src/CommunicationTab/index.js.map +1 -1
  677. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/index.d.ts.map +1 -1
  678. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/index.js.map +1 -1
  679. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  680. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  681. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
  682. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
  683. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.d.ts.map +1 -1
  684. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.js.map +1 -1
  685. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AppliedDatasetsSection.d.ts.map +1 -1
  686. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AppliedDatasetsSection.js.map +1 -1
  687. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AvailableDatasetsSection.d.ts.map +1 -1
  688. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AvailableDatasetsSection.js.map +1 -1
  689. package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.d.ts.map +1 -1
  690. package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.js.map +1 -1
  691. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.d.ts.map +1 -1
  692. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.js.map +1 -1
  693. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.d.ts.map +1 -1
  694. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.js.map +1 -1
  695. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapCustomization.d.ts.map +1 -1
  696. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapCustomization.js.map +1 -1
  697. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapProjection.d.ts.map +1 -1
  698. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapProjection.js.map +1 -1
  699. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.d.ts.map +1 -1
  700. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js.map +1 -1
  701. package/dist/core/components/viewers/map/src/SimpleMap.d.ts.map +1 -1
  702. package/dist/core/components/viewers/map/src/SimpleMap.js.map +1 -1
  703. package/dist/core/components/viewers/map/src/compare/AddItem.d.ts.map +1 -1
  704. package/dist/core/components/viewers/map/src/compare/AddItem.js.map +1 -1
  705. package/dist/core/components/viewers/map/src/compare/CompareDialog.d.ts.map +1 -1
  706. package/dist/core/components/viewers/map/src/compare/CompareDialog.js.map +1 -1
  707. package/dist/core/components/viewers/map/src/compare/description-list.d.ts.map +1 -1
  708. package/dist/core/components/viewers/map/src/compare/description-list.js.map +1 -1
  709. package/dist/core/components/viewers/map/src/compare/index.d.ts.map +1 -1
  710. package/dist/core/components/viewers/map/src/compare/index.js.map +1 -1
  711. package/dist/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.d.ts.map +1 -1
  712. package/dist/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.js.map +1 -1
  713. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/FileAdder.d.ts.map +1 -1
  714. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/FileAdder.js.map +1 -1
  715. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/ProgressBar.d.ts.map +1 -1
  716. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/ProgressBar.js.map +1 -1
  717. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/utils/uploadToPresignedURLS.d.ts.map +1 -1
  718. package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/utils/uploadToPresignedURLS.js.map +1 -1
  719. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.d.ts.map +1 -1
  720. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.js.map +1 -1
  721. package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.d.ts.map +1 -1
  722. package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.js.map +1 -1
  723. package/dist/core/components/viewers/map/src/tools/DatasetMapTool.d.ts.map +1 -1
  724. package/dist/core/components/viewers/map/src/tools/DatasetMapTool.js.map +1 -1
  725. package/dist/core/components/viewers/map/src/tools/mapTools.d.ts.map +1 -1
  726. package/dist/core/components/viewers/map/src/tools/mapTools.js.map +1 -1
  727. package/dist/core/components/viewers/map/src/tools/measureMapTool.d.ts.map +1 -1
  728. package/dist/core/components/viewers/map/src/tools/measureMapTool.js.map +1 -1
  729. package/dist/core/components/viewers/map/src/tools/shareMapTool.d.ts.map +1 -1
  730. package/dist/core/components/viewers/map/src/tools/shareMapTool.js.map +1 -1
  731. package/dist/core/components/viewers/map/utils/ClusterManager.d.ts.map +1 -1
  732. package/dist/core/components/viewers/map/utils/ClusterManager.js.map +1 -1
  733. package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.d.ts.map +1 -1
  734. package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.js.map +1 -1
  735. package/dist/core/components/viewers/map/utils/MapEventManager/MapHoverManager.d.ts.map +1 -1
  736. package/dist/core/components/viewers/map/utils/MapEventManager/MapHoverManager.js.map +1 -1
  737. package/dist/core/components/viewers/map/utils/MarkerManager.d.ts.map +1 -1
  738. package/dist/core/components/viewers/map/utils/MarkerManager.js.map +1 -1
  739. package/dist/core/components/viewers/map/utils/dateName.d.ts.map +1 -1
  740. package/dist/core/components/viewers/map/utils/dateName.js.map +1 -1
  741. package/dist/core/components/viewers/map/utils/extractCoordinates.d.ts.map +1 -1
  742. package/dist/core/components/viewers/map/utils/extractCoordinates.js.map +1 -1
  743. package/dist/core/components/viewers/map/utils/fitBuildingsBounds.d.ts.map +1 -1
  744. package/dist/core/components/viewers/map/utils/fitBuildingsBounds.js.map +1 -1
  745. package/dist/core/components/viewers/map/utils/fitGeojsonBounds.d.ts.map +1 -1
  746. package/dist/core/components/viewers/map/utils/fitGeojsonBounds.js.map +1 -1
  747. package/dist/core/components/viewers/map/utils/flyToEach.d.ts.map +1 -1
  748. package/dist/core/components/viewers/map/utils/flyToEach.js.map +1 -1
  749. package/dist/core/components/viewers/map/utils/geocoder.d.ts.map +1 -1
  750. package/dist/core/components/viewers/map/utils/geocoder.js.map +1 -1
  751. package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts.map +1 -1
  752. package/dist/core/components/viewers/map/utils/geocoding/adapters.js.map +1 -1
  753. package/dist/core/components/viewers/map/utils/geocoding/config.d.ts.map +1 -1
  754. package/dist/core/components/viewers/map/utils/geocoding/config.js.map +1 -1
  755. package/dist/core/components/viewers/map/utils/geocoding/index.d.ts.map +1 -1
  756. package/dist/core/components/viewers/map/utils/geocoding/index.js.map +1 -1
  757. package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts.map +1 -1
  758. package/dist/core/components/viewers/map/utils/geocoding/osm.js.map +1 -1
  759. package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts.map +1 -1
  760. package/dist/core/components/viewers/map/utils/geocoding/pelias.js.map +1 -1
  761. package/dist/core/components/viewers/map/utils/getOsmIdFromMartin.d.ts.map +1 -1
  762. package/dist/core/components/viewers/map/utils/getOsmIdFromMartin.js.map +1 -1
  763. package/dist/core/components/viewers/map/utils/getOsmIdbyCoordinates.d.ts.map +1 -1
  764. package/dist/core/components/viewers/map/utils/getOsmIdbyCoordinates.js.map +1 -1
  765. package/dist/core/components/viewers/map/utils/mapStyleCatalog.d.ts.map +1 -1
  766. package/dist/core/components/viewers/map/utils/mapStyleCatalog.js.map +1 -1
  767. package/dist/core/components/viewers/map/utils/stringToColour.d.ts.map +1 -1
  768. package/dist/core/components/viewers/map/utils/stringToColour.js.map +1 -1
  769. package/dist/core/components/viewers/map/utils/toggleBimToMap.d.ts.map +1 -1
  770. package/dist/core/components/viewers/map/utils/toggleBimToMap.js.map +1 -1
  771. package/dist/core/components/viewers/map/utils/updateBuildingOsmId.d.ts.map +1 -1
  772. package/dist/core/components/viewers/map/utils/updateBuildingOsmId.js.map +1 -1
  773. package/dist/core/components/viewers/map/utils/validateBounds.d.ts.map +1 -1
  774. package/dist/core/components/viewers/map/utils/validateBounds.js.map +1 -1
  775. package/dist/core/components/viewers/pointcloud/PointCloudToolbar.d.ts.map +1 -1
  776. package/dist/core/components/viewers/pointcloud/PointCloudToolbar.js.map +1 -1
  777. package/dist/core/components/viewers/pointcloud/PointCloudViewer.d.ts.map +1 -1
  778. package/dist/core/components/viewers/pointcloud/PointCloudViewer.js.map +1 -1
  779. package/dist/core/components/viewers/pointcloud/define.d.ts.map +1 -1
  780. package/dist/core/components/viewers/pointcloud/define.js.map +1 -1
  781. package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.d.ts.map +1 -1
  782. package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.js.map +1 -1
  783. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.d.ts.map +1 -1
  784. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.js.map +1 -1
  785. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.d.ts.map +1 -1
  786. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.js.map +1 -1
  787. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.d.ts.map +1 -1
  788. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.js.map +1 -1
  789. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/TabSelector.d.ts.map +1 -1
  790. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/TabSelector.js.map +1 -1
  791. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.d.ts.map +1 -1
  792. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.js.map +1 -1
  793. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.d.ts.map +1 -1
  794. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js.map +1 -1
  795. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  796. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  797. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.d.ts.map +1 -1
  798. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.js.map +1 -1
  799. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/index.d.ts.map +1 -1
  800. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/index.js.map +1 -1
  801. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/CameraSettings.d.ts.map +1 -1
  802. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/CameraSettings.js.map +1 -1
  803. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/GridManagement.d.ts.map +1 -1
  804. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/GridManagement.js.map +1 -1
  805. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/PerformanceSettings.d.ts.map +1 -1
  806. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/PerformanceSettings.js.map +1 -1
  807. package/dist/core/components/viewers/pointcloud/src/ViewportGizmo.d.ts.map +1 -1
  808. package/dist/core/components/viewers/pointcloud/src/ViewportGizmo.js.map +1 -1
  809. package/dist/core/components/viewers/pointcloud/src/tools/ClippingTools/ClippingTool.d.ts.map +1 -1
  810. package/dist/core/components/viewers/pointcloud/src/tools/ClippingTools/ClippingTool.js.map +1 -1
  811. package/dist/core/components/viewers/pointcloud/src/tools/FitToScreen.d.ts.map +1 -1
  812. package/dist/core/components/viewers/pointcloud/src/tools/FitToScreen.js.map +1 -1
  813. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AngleMeasurement.d.ts.map +1 -1
  814. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AngleMeasurement.js.map +1 -1
  815. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AreaMeasurement.d.ts.map +1 -1
  816. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AreaMeasurement.js.map +1 -1
  817. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/LineMeasurement.d.ts.map +1 -1
  818. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/LineMeasurement.js.map +1 -1
  819. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/MeasurePointCloudTool.d.ts.map +1 -1
  820. package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/MeasurePointCloudTool.js.map +1 -1
  821. package/dist/core/components/viewers/pointcloud/src/tools/PCSearchTool.d.ts.map +1 -1
  822. package/dist/core/components/viewers/pointcloud/src/tools/PCSearchTool.js.map +1 -1
  823. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.d.ts.map +1 -1
  824. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js.map +1 -1
  825. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PerformanceSettingTools.d.ts.map +1 -1
  826. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PerformanceSettingTools.js.map +1 -1
  827. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PointBudgetTool.d.ts.map +1 -1
  828. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PointBudgetTool.js.map +1 -1
  829. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/ShowOctreeBoxTool.d.ts.map +1 -1
  830. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/ShowOctreeBoxTool.js.map +1 -1
  831. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/SplatQualitySelection.d.ts.map +1 -1
  832. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/SplatQualitySelection.js.map +1 -1
  833. package/dist/core/components/viewers/pointcloud/src/tools/SetCameraOption.d.ts.map +1 -1
  834. package/dist/core/components/viewers/pointcloud/src/tools/SetCameraOption.js.map +1 -1
  835. package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/index.d.ts.map +1 -1
  836. package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/index.js.map +1 -1
  837. package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/src/getCameraPosition.d.ts.map +1 -1
  838. package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/src/getCameraPosition.js.map +1 -1
  839. package/dist/core/components/viewers/pointcloud/src/tools/index.d.ts.map +1 -1
  840. package/dist/core/components/viewers/pointcloud/src/tools/index.js.map +1 -1
  841. package/dist/core/components/viewers/pointcloud/src/tools/pointcloudToolbarTools.d.ts.map +1 -1
  842. package/dist/core/components/viewers/pointcloud/src/tools/pointcloudToolbarTools.js.map +1 -1
  843. package/dist/core/components/viewers/pointcloud/utils/potreeLoader.d.ts.map +1 -1
  844. package/dist/core/components/viewers/pointcloud/utils/potreeLoader.js.map +1 -1
  845. package/dist/core/components/viewers/pointcloud/utils/restoreCameraFromUrl.d.ts.map +1 -1
  846. package/dist/core/components/viewers/pointcloud/utils/restoreCameraFromUrl.js.map +1 -1
  847. package/dist/core/components/viewers/useCoordinateSystem.d.ts.map +1 -1
  848. package/dist/core/components/viewers/useCoordinateSystem.js.map +1 -1
  849. package/dist/core/hooks/buildings/buildings.d.ts.map +1 -1
  850. package/dist/core/hooks/buildings/buildings.js.map +1 -1
  851. package/dist/core/hooks/buildings/createBuildingHooks.d.ts.map +1 -1
  852. package/dist/core/hooks/buildings/createBuildingHooks.js.map +1 -1
  853. package/dist/core/hooks/comments/comments.d.ts.map +1 -1
  854. package/dist/core/hooks/comments/comments.js.map +1 -1
  855. package/dist/core/hooks/comments/createCommentHooks.d.ts.map +1 -1
  856. package/dist/core/hooks/comments/createCommentHooks.js.map +1 -1
  857. package/dist/core/hooks/files/createFileHooks.d.ts.map +1 -1
  858. package/dist/core/hooks/files/createFileHooks.js.map +1 -1
  859. package/dist/core/hooks/files/files.d.ts.map +1 -1
  860. package/dist/core/hooks/files/files.js.map +1 -1
  861. package/dist/core/hooks/index.d.ts.map +1 -1
  862. package/dist/core/hooks/index.js.map +1 -1
  863. package/dist/core/hooks/infrastructures/createInfrastructureHooks.d.ts.map +1 -1
  864. package/dist/core/hooks/infrastructures/createInfrastructureHooks.js.map +1 -1
  865. package/dist/core/hooks/infrastructures/infrastructures.d.ts.map +1 -1
  866. package/dist/core/hooks/infrastructures/infrastructures.js.map +1 -1
  867. package/dist/core/hooks/openDataPortals/createOpenDataPortalHooks.d.ts.map +1 -1
  868. package/dist/core/hooks/openDataPortals/createOpenDataPortalHooks.js.map +1 -1
  869. package/dist/core/hooks/openDataPortals/openDataPortals.d.ts.map +1 -1
  870. package/dist/core/hooks/openDataPortals/openDataPortals.js.map +1 -1
  871. package/dist/core/hooks/organizations/createOrganizationHooks.d.ts.map +1 -1
  872. package/dist/core/hooks/organizations/createOrganizationHooks.js.map +1 -1
  873. package/dist/core/hooks/organizations/organizations.d.ts.map +1 -1
  874. package/dist/core/hooks/organizations/organizations.js.map +1 -1
  875. package/dist/core/hooks/ports/apiAdapter.d.ts.map +1 -1
  876. package/dist/core/hooks/provider.d.ts.map +1 -1
  877. package/dist/core/hooks/provider.js.map +1 -1
  878. package/dist/core/hooks/sensorTypes/createSensorTypeHooks.d.ts.map +1 -1
  879. package/dist/core/hooks/sensorTypes/createSensorTypeHooks.js.map +1 -1
  880. package/dist/core/hooks/sensorTypes/sensorTypes.d.ts.map +1 -1
  881. package/dist/core/hooks/sensorTypes/sensorTypes.js.map +1 -1
  882. package/dist/core/hooks/sensors/createSensorHooks.d.ts.map +1 -1
  883. package/dist/core/hooks/sensors/createSensorHooks.js.map +1 -1
  884. package/dist/core/hooks/sensors/sensors.d.ts.map +1 -1
  885. package/dist/core/hooks/sensors/sensors.js.map +1 -1
  886. package/dist/core/hooks/sites/createSiteHooks.d.ts.map +1 -1
  887. package/dist/core/hooks/sites/createSiteHooks.js.map +1 -1
  888. package/dist/core/hooks/sites/sites.d.ts.map +1 -1
  889. package/dist/core/hooks/sites/sites.js.map +1 -1
  890. package/dist/core/hooks/ui/use-mobile.d.ts.map +1 -1
  891. package/dist/core/hooks/ui/use-mobile.js.map +1 -1
  892. package/dist/core/hooks/users/createUserHooks.d.ts.map +1 -1
  893. package/dist/core/hooks/users/createUserHooks.js.map +1 -1
  894. package/dist/core/hooks/users/users.d.ts.map +1 -1
  895. package/dist/core/hooks/users/users.js.map +1 -1
  896. package/dist/core/index.d.ts.map +1 -1
  897. package/dist/core/index.js.map +1 -1
  898. package/dist/core/plugins/host/context.d.ts.map +1 -1
  899. package/dist/core/plugins/host/context.js.map +1 -1
  900. package/dist/core/plugins/host/errors.d.ts.map +1 -1
  901. package/dist/core/plugins/host/errors.js.map +1 -1
  902. package/dist/core/plugins/host/host.d.ts.map +1 -1
  903. package/dist/core/plugins/host/host.js.map +1 -1
  904. package/dist/core/plugins/host/provider.d.ts.map +1 -1
  905. package/dist/core/plugins/host/provider.js.map +1 -1
  906. package/dist/core/plugins/host/registry.d.ts.map +1 -1
  907. package/dist/core/plugins/host/registry.js.map +1 -1
  908. package/dist/core/plugins/installed.d.ts.map +1 -1
  909. package/dist/core/plugins/installed.js.map +1 -1
  910. package/dist/core/plugins/sdk/components.d.ts.map +1 -1
  911. package/dist/core/plugins/sdk/components.js.map +1 -1
  912. package/dist/core/plugins/sdk/index.d.ts.map +1 -1
  913. package/dist/core/plugins/sdk/index.js.map +1 -1
  914. package/dist/core/plugins/sdk/types.d.ts.map +1 -1
  915. package/dist/core/plugins/sdk/types.js.map +1 -1
  916. package/dist/core/store/ActionMap.d.ts.map +1 -1
  917. package/dist/core/store/AppConfig/context.d.ts.map +1 -1
  918. package/dist/core/store/AppConfig/context.js.map +1 -1
  919. package/dist/core/store/AppConfig/reducer.d.ts.map +1 -1
  920. package/dist/core/store/AppConfig/reducer.js.map +1 -1
  921. package/dist/core/store/BIM/context.d.ts.map +1 -1
  922. package/dist/core/store/BIM/context.js.map +1 -1
  923. package/dist/core/store/BIM/reducer.d.ts.map +1 -1
  924. package/dist/core/store/BIM/reducer.js.map +1 -1
  925. package/dist/core/store/Buildings/context.d.ts.map +1 -1
  926. package/dist/core/store/Buildings/context.js.map +1 -1
  927. package/dist/core/store/Buildings/reducer.d.ts.map +1 -1
  928. package/dist/core/store/Buildings/reducer.js.map +1 -1
  929. package/dist/core/store/CombineProviders.d.ts.map +1 -1
  930. package/dist/core/store/CombineProviders.js.map +1 -1
  931. package/dist/core/store/Content/context.d.ts.map +1 -1
  932. package/dist/core/store/Content/context.js.map +1 -1
  933. package/dist/core/store/Datasets/context.d.ts.map +1 -1
  934. package/dist/core/store/Datasets/context.js.map +1 -1
  935. package/dist/core/store/Datasets/reducer.d.ts.map +1 -1
  936. package/dist/core/store/Datasets/reducer.js.map +1 -1
  937. package/dist/core/store/Files/context.d.ts.map +1 -1
  938. package/dist/core/store/Files/context.js.map +1 -1
  939. package/dist/core/store/Files/reducer.d.ts.map +1 -1
  940. package/dist/core/store/Files/reducer.js.map +1 -1
  941. package/dist/core/store/Map/context.d.ts.map +1 -1
  942. package/dist/core/store/Map/context.js.map +1 -1
  943. package/dist/core/store/Map/reducer.d.ts.map +1 -1
  944. package/dist/core/store/Map/reducer.js.map +1 -1
  945. package/dist/core/store/Menus/context.d.ts.map +1 -1
  946. package/dist/core/store/Menus/context.js.map +1 -1
  947. package/dist/core/store/Menus/reducer.d.ts.map +1 -1
  948. package/dist/core/store/Menus/reducer.js.map +1 -1
  949. package/dist/core/store/Permissions/context.d.ts.map +1 -1
  950. package/dist/core/store/Permissions/context.js.map +1 -1
  951. package/dist/core/store/PointCloud/context.d.ts.map +1 -1
  952. package/dist/core/store/PointCloud/context.js.map +1 -1
  953. package/dist/core/store/PointCloud/reducer.d.ts.map +1 -1
  954. package/dist/core/store/PointCloud/reducer.js.map +1 -1
  955. package/dist/core/store/Tools/context.d.ts.map +1 -1
  956. package/dist/core/store/Tools/context.js.map +1 -1
  957. package/dist/core/store/Tools/reducer.d.ts.map +1 -1
  958. package/dist/core/store/Tools/reducer.js.map +1 -1
  959. package/dist/core/store/index.d.ts.map +1 -1
  960. package/dist/core/store/index.js.map +1 -1
  961. package/dist/core/styles/tailwindMerge.d.ts.map +1 -1
  962. package/dist/core/styles/tailwindMerge.js.map +1 -1
  963. package/dist/core/types/bim.d.ts.map +1 -1
  964. package/dist/core/types/datasetTypes.d.ts.map +1 -1
  965. package/dist/core/types/dbTypes.d.ts.map +1 -1
  966. package/dist/core/types/dbTypes.js.map +1 -1
  967. package/dist/core/types/files.d.ts.map +1 -1
  968. package/dist/core/types/global.d.ts.map +1 -1
  969. package/dist/core/types/global.js.map +1 -1
  970. package/dist/core/types/index.d.ts.map +1 -1
  971. package/dist/core/types/index.js.map +1 -1
  972. package/dist/core/types/map.d.ts.map +1 -1
  973. package/dist/core/types/martinTypes.d.ts.map +1 -1
  974. package/dist/core/types/martinTypes.js.map +1 -1
  975. package/dist/core/types/next-auth.d.ts.map +1 -1
  976. package/dist/core/types/tools.d.ts.map +1 -1
  977. package/dist/core/types/users.d.ts.map +1 -1
  978. package/dist/core/utils/acceptedFiles.d.ts.map +1 -1
  979. package/dist/core/utils/acceptedFiles.js.map +1 -1
  980. package/dist/core/utils/errorHandler.d.ts.map +1 -1
  981. package/dist/core/utils/errorHandler.js.map +1 -1
  982. package/dist/core/utils/getFileIcon.d.ts.map +1 -1
  983. package/dist/core/utils/getFileIcon.js.map +1 -1
  984. package/dist/core/utils/imageUtils.d.ts.map +1 -1
  985. package/dist/core/utils/imageUtils.js.map +1 -1
  986. package/dist/core/utils/index.d.ts.map +1 -1
  987. package/dist/core/utils/index.js.map +1 -1
  988. package/dist/core/utils/markerUtils.d.ts.map +1 -1
  989. package/dist/core/utils/markerUtils.js.map +1 -1
  990. package/dist/core/utils/memcache.d.ts.map +1 -1
  991. package/dist/core/utils/memcache.js.map +1 -1
  992. package/dist/core/utils/roles.d.ts.map +1 -1
  993. package/dist/core/utils/roles.js.map +1 -1
  994. package/dist/core/utils/timeUtils.d.ts.map +1 -1
  995. package/dist/core/utils/timeUtils.js.map +1 -1
  996. package/dist/core/utils/utils.d.ts.map +1 -1
  997. package/dist/core/utils/utils.js.map +1 -1
  998. package/dist/index.d.ts.map +1 -1
  999. package/dist/index.js.map +1 -1
  1000. package/package.json +6 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/core/components/viewers/map/datasets/DatasetDetails.tsx"],"sourcesContent":["\"use client\"\r\n\r\n// Shadcn Components\r\nimport { DescriptionListItem } from '../../../../components/ui/DescriptionList'\r\nimport { Button, Badge, Separator } from '../../../../components/ui/'\r\nimport { Card, CardContent } from '../../../../components/ui/Card'\r\nimport * as LR from 'lucide-react'\r\nimport type { Dataset } from '../../../../types/datasetTypes'\r\nimport Link from 'next/link'\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\nimport { useFastDatasetCache } from './src/useFastDatasetCache'\r\n\r\ninterface DatasetDetailsProps {\r\n selectedDataset?: Dataset\r\n}\r\n\r\nexport default function DatasetDetails({ selectedDataset }: DatasetDetailsProps) {\r\n // Translation\r\n const t = useTranslations('DatasetDetails')\r\n\r\n const [featuresData, setFeaturesData] = React.useState<any>(null)\r\n const [featuresLoading, setFeaturesLoading] = React.useState(false)\r\n const { getFromCache } = useFastDatasetCache()\r\n\r\n React.useEffect(() => {\r\n let isMounted = true\r\n \r\n if (!selectedDataset) {\r\n setFeaturesData(null)\r\n return\r\n }\r\n\r\n setFeaturesLoading(true)\r\n \r\n getFromCache(selectedDataset).then((data) => {\r\n if (isMounted) {\r\n setFeaturesData(data)\r\n }\r\n }).catch(err => {\r\n console.error('Failed to load dataset features:', err)\r\n if (isMounted) setFeaturesData(null)\r\n }).finally(() => {\r\n if (isMounted) setFeaturesLoading(false)\r\n })\r\n\r\n return () => { isMounted = false }\r\n }, [selectedDataset, getFromCache])\r\n\r\n // console.log(\"Features Data:\", featuresData);\r\n\r\n return (\r\n <div className=\"flex flex-col p-6 sm:h-[718px] overflow-y-auto max-h-[80vh]\">\r\n {/* 2 column headers */}\r\n <div className=\"grid grid-cols-1 gap-3 md:gap-6 py-3 border-t border-border\">\r\n <DescriptionListItem label=\"Url\">\r\n <Link\r\n href={selectedDataset.url}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"underline text-blue-600\"\r\n >\r\n {selectedDataset.url}\r\n </Link>\r\n </DescriptionListItem>\r\n </div>\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3 md:gap-6 py-3 border-t border-border\">\r\n <DescriptionListItem label={t('publisherLabel')}>\r\n {selectedDataset.publisher || t('noPublisher')}\r\n </DescriptionListItem>\r\n <Separator className=\"md:hidden\" />\r\n <DescriptionListItem label={t('licenseLabel')}>\r\n {selectedDataset.license\r\n ? (\r\n getLicense(selectedDataset.license)\r\n )\r\n : t('noLicense')}\r\n </DescriptionListItem>\r\n </div>\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3 md:gap-6 py-3 border-t border-border\">\r\n <DescriptionListItem label={t('email')} className={`${selectedDataset.contact ? 'underline' : ''}`}>\r\n {selectedDataset.contact || t('noEmail')}\r\n </DescriptionListItem>\r\n <Separator className=\"md:hidden\" />\r\n <DescriptionListItem label={t('typeLabel')}>\r\n {selectedDataset.type}\r\n </DescriptionListItem>\r\n </div>\r\n\r\n {(selectedDataset.dateReleased || selectedDataset.dateUpdated) && (\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3 md:gap-6 py-3 border-t border-border\">\r\n <DescriptionListItem label={t('dateReleasedLabel')}>\r\n {formatDate(selectedDataset.dateReleased) || t('noDateReleased')}\r\n </DescriptionListItem>\r\n <Separator className=\"md:hidden\" />\r\n <DescriptionListItem label={t('dateUpdatedLabel')}>\r\n {formatDate(selectedDataset.dateUpdated) || t('noDateUpdated')}\r\n </DescriptionListItem>\r\n </div>\r\n )}\r\n\r\n {featuresData && featuresData.editingInfo && (\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3 md:gap-6 py-3 border-t border-border\">\r\n <DescriptionListItem label={t('lastEditDateLabel')}>\r\n {featuresLoading\r\n ? t('loading')\r\n : (featuresData?.editingInfo?.lastEditDate\r\n ? formatDate(featuresData.editingInfo.lastEditDate)\r\n : t('unknown'))}\r\n </DescriptionListItem>\r\n <Separator className=\"md:hidden\" />\r\n <DescriptionListItem label={t('dataLastEditDateLabel')}>\r\n {featuresLoading\r\n ? t('loading')\r\n : (featuresData?.editingInfo?.dataLastEditDate\r\n ? formatDate(featuresData.editingInfo.dataLastEditDate)\r\n : t('unknown'))}\r\n </DescriptionListItem>\r\n </div>\r\n )}\r\n\r\n {/* Full width headers */}\r\n <div className=\"grid grid-cols-1 gap-3 md:gap-6 py-3 border-t border-border\">\r\n <DescriptionListItem label={t('keywordsLabel')} className=\"flex gap-2\">\r\n {selectedDataset.keywords && selectedDataset.keywords.length > 0\r\n ? (\r\n selectedDataset.keywords.map((keyword, index) => (\r\n <Badge className=\"max-h-10 flex cursor-pointer items-start max-w-[120px] truncate\" title={keyword} key={index}>\r\n {keyword}\r\n </Badge>\r\n ))\r\n )\r\n : (\r\n <Badge>\r\n Keyword\r\n </Badge>\r\n )}\r\n </DescriptionListItem>\r\n </div>\r\n <div className=\"grid grid-cols-1 gap-3 md:gap-6 py-3 border-t border-border\">\r\n <DescriptionListItem label={t('descriptionLabel')}>\r\n {selectedDataset.description || t('noDescription')}\r\n </DescriptionListItem>\r\n </div>\r\n\r\n {/* Files */}\r\n {selectedDataset.files && selectedDataset.files.length > 0 && (\r\n <div className=\"grid grid-cols-1 gap-3 md:gap-6 py-3 border-t border-border\">\r\n <DescriptionListItem label=\"Data and Resources\">\r\n <div className=\"flex flex-col md:flex-row gap-2 md:gap-6 w-full\">\r\n <Card className=\"w-full\">\r\n <CardContent className=\"p-4 md:p-6 flex items-center gap-3\">\r\n <LR.File className=\"w-4 h-4 text-foreground shrink-0\" />\r\n <div className=\"flex items-center justify-between w-full\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-sm font-semibold text-card-foreground underline\">\r\n Placeholder\r\n </span>\r\n </div>\r\n <Button variant=\"outline\" className=\"hidden md:!flex\">\r\n Explore\r\n </Button>\r\n <Button\r\n variant=\"outline\"\r\n size=\"icon\"\r\n className=\"md:hidden\"\r\n >\r\n <LR.Download />\r\n </Button>\r\n </div>\r\n </CardContent>\r\n </Card>\r\n </div>\r\n </DescriptionListItem>\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nfunction formatDate(dateString: string): string {\r\n if (!dateString) return 'Unknown'\r\n // Parse ISO string and format as YYYY-MM-DD\r\n const date = new Date(dateString)\r\n if (isNaN(date.getTime())) return dateString\r\n return date.toISOString().slice(0, 10)\r\n}\r\n\r\nfunction getLicense(license: string) {\r\n // Extract URL from HTML or use as is\r\n const htmlRegex = /<a[^>]+href=['\"]([^'\"]+)['\"][^>]*>(.*?)<\\/a>/i\r\n const match = htmlRegex.exec(license)\r\n if (match) {\r\n return (\r\n <a\r\n href={match[1]}\r\n target=\"_blank\"\r\n rel=\"nofollow ugc noopener noreferrer\"\r\n className=\"underline text-blue-600\"\r\n >\r\n {match[2] || match[1]}\r\n </a>\r\n )\r\n }\r\n // If it's a plain URL string\r\n const urlRegex = /^https?:\\/\\/[^\\s]+$/i\r\n if (urlRegex.test(license)) {\r\n return (\r\n <a\r\n href={license}\r\n target=\"_blank\"\r\n rel=\"nofollow ugc noopener noreferrer\"\r\n className=\"underline text-blue-600\"\r\n >\r\n {license}\r\n </a>\r\n )\r\n }\r\n // Otherwise, just show as text\r\n return license\r\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/core/components/viewers/map/datasets/DatasetDetails.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\n// Shadcn Components\r\nimport { DescriptionListItem } from '../../../../components/ui/DescriptionList'\r\nimport { Button, Badge, Separator } from '../../../../components/ui/'\r\nimport { Card, CardContent } from '../../../../components/ui/Card'\r\nimport * as LR from 'lucide-react'\r\nimport type { Dataset } from '../../../../types/datasetTypes'\r\nimport Link from 'next/link'\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\nimport { useFastDatasetCache } from './src/useFastDatasetCache'\r\n\r\ninterface DatasetDetailsProps {\r\n selectedDataset?: Dataset\r\n}\r\n\r\nexport default function DatasetDetails({ selectedDataset }: DatasetDetailsProps) {\r\n // Translation\r\n const t = useTranslations('DatasetDetails')\r\n\r\n const [featuresData, setFeaturesData] = React.useState<any>(null)\r\n const [featuresLoading, setFeaturesLoading] = React.useState(false)\r\n const { getFromCache } = useFastDatasetCache()\r\n\r\n React.useEffect(() => {\r\n let isMounted = true\r\n \r\n if (!selectedDataset) {\r\n setFeaturesData(null)\r\n return\r\n }\r\n\r\n setFeaturesLoading(true)\r\n \r\n getFromCache(selectedDataset).then((data) => {\r\n if (isMounted) {\r\n setFeaturesData(data)\r\n }\r\n }).catch(err => {\r\n console.error('Failed to load dataset features:', err)\r\n if (isMounted) setFeaturesData(null)\r\n }).finally(() => {\r\n if (isMounted) setFeaturesLoading(false)\r\n })\r\n\r\n return () => { isMounted = false }\r\n }, [selectedDataset, getFromCache])\r\n\r\n // console.log(\"Features Data:\", featuresData);\r\n\r\n return (\r\n <div className=\"flex flex-col p-6 sm:h-[718px] overflow-y-auto max-h-[80vh]\">\r\n {/* 2 column headers */}\r\n <div className=\"grid grid-cols-1 gap-3 md:gap-6 py-3 border-t border-border\">\r\n <DescriptionListItem label=\"Url\">\r\n <Link\r\n href={selectedDataset.url}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"underline text-blue-600\"\r\n >\r\n {selectedDataset.url}\r\n </Link>\r\n </DescriptionListItem>\r\n </div>\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3 md:gap-6 py-3 border-t border-border\">\r\n <DescriptionListItem label={t('publisherLabel')}>\r\n {selectedDataset.publisher || t('noPublisher')}\r\n </DescriptionListItem>\r\n <Separator className=\"md:hidden\" />\r\n <DescriptionListItem label={t('licenseLabel')}>\r\n {selectedDataset.license\r\n ? (\r\n getLicense(selectedDataset.license)\r\n )\r\n : t('noLicense')}\r\n </DescriptionListItem>\r\n </div>\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3 md:gap-6 py-3 border-t border-border\">\r\n <DescriptionListItem label={t('email')} className={`${selectedDataset.contact ? 'underline' : ''}`}>\r\n {selectedDataset.contact || t('noEmail')}\r\n </DescriptionListItem>\r\n <Separator className=\"md:hidden\" />\r\n <DescriptionListItem label={t('typeLabel')}>\r\n {selectedDataset.type}\r\n </DescriptionListItem>\r\n </div>\r\n\r\n {(selectedDataset.dateReleased || selectedDataset.dateUpdated) && (\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3 md:gap-6 py-3 border-t border-border\">\r\n <DescriptionListItem label={t('dateReleasedLabel')}>\r\n {formatDate(selectedDataset.dateReleased) || t('noDateReleased')}\r\n </DescriptionListItem>\r\n <Separator className=\"md:hidden\" />\r\n <DescriptionListItem label={t('dateUpdatedLabel')}>\r\n {formatDate(selectedDataset.dateUpdated) || t('noDateUpdated')}\r\n </DescriptionListItem>\r\n </div>\r\n )}\r\n\r\n {featuresData && featuresData.editingInfo && (\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3 md:gap-6 py-3 border-t border-border\">\r\n <DescriptionListItem label={t('lastEditDateLabel')}>\r\n {featuresLoading\r\n ? t('loading')\r\n : (featuresData?.editingInfo?.lastEditDate\r\n ? formatDate(featuresData.editingInfo.lastEditDate)\r\n : t('unknown'))}\r\n </DescriptionListItem>\r\n <Separator className=\"md:hidden\" />\r\n <DescriptionListItem label={t('dataLastEditDateLabel')}>\r\n {featuresLoading\r\n ? t('loading')\r\n : (featuresData?.editingInfo?.dataLastEditDate\r\n ? formatDate(featuresData.editingInfo.dataLastEditDate)\r\n : t('unknown'))}\r\n </DescriptionListItem>\r\n </div>\r\n )}\r\n\r\n {/* Full width headers */}\r\n <div className=\"grid grid-cols-1 gap-3 md:gap-6 py-3 border-t border-border\">\r\n <DescriptionListItem label={t('keywordsLabel')} className=\"flex gap-2\">\r\n {selectedDataset.keywords && selectedDataset.keywords.length > 0\r\n ? (\r\n selectedDataset.keywords.map((keyword, index) => (\r\n <Badge className=\"max-h-10 flex cursor-pointer items-start max-w-[120px] truncate\" title={keyword} key={index}>\r\n {keyword}\r\n </Badge>\r\n ))\r\n )\r\n : (\r\n <Badge>\r\n Keyword\r\n </Badge>\r\n )}\r\n </DescriptionListItem>\r\n </div>\r\n <div className=\"grid grid-cols-1 gap-3 md:gap-6 py-3 border-t border-border\">\r\n <DescriptionListItem label={t('descriptionLabel')}>\r\n {selectedDataset.description || t('noDescription')}\r\n </DescriptionListItem>\r\n </div>\r\n\r\n {/* Files */}\r\n {selectedDataset.files && selectedDataset.files.length > 0 && (\r\n <div className=\"grid grid-cols-1 gap-3 md:gap-6 py-3 border-t border-border\">\r\n <DescriptionListItem label=\"Data and Resources\">\r\n <div className=\"flex flex-col md:flex-row gap-2 md:gap-6 w-full\">\r\n <Card className=\"w-full\">\r\n <CardContent className=\"p-4 md:p-6 flex items-center gap-3\">\r\n <LR.File className=\"w-4 h-4 text-foreground shrink-0\" />\r\n <div className=\"flex items-center justify-between w-full\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-sm font-semibold text-card-foreground underline\">\r\n Placeholder\r\n </span>\r\n </div>\r\n <Button variant=\"outline\" className=\"hidden md:!flex\">\r\n Explore\r\n </Button>\r\n <Button\r\n variant=\"outline\"\r\n size=\"icon\"\r\n className=\"md:hidden\"\r\n >\r\n <LR.Download />\r\n </Button>\r\n </div>\r\n </CardContent>\r\n </Card>\r\n </div>\r\n </DescriptionListItem>\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nfunction formatDate(dateString: string): string {\r\n if (!dateString) return 'Unknown'\r\n // Parse ISO string and format as YYYY-MM-DD\r\n const date = new Date(dateString)\r\n if (isNaN(date.getTime())) return dateString\r\n return date.toISOString().slice(0, 10)\r\n}\r\n\r\nfunction getLicense(license: string) {\r\n // Extract URL from HTML or use as is\r\n const htmlRegex = /<a[^>]+href=['\"]([^'\"]+)['\"][^>]*>(.*?)<\\/a>/i\r\n const match = htmlRegex.exec(license)\r\n if (match) {\r\n return (\r\n <a\r\n href={match[1]}\r\n target=\"_blank\"\r\n rel=\"nofollow ugc noopener noreferrer\"\r\n className=\"underline text-blue-600\"\r\n >\r\n {match[2] || match[1]}\r\n </a>\r\n )\r\n }\r\n // If it's a plain URL string\r\n const urlRegex = /^https?:\\/\\/[^\\s]+$/i\r\n if (urlRegex.test(license)) {\r\n return (\r\n <a\r\n href={license}\r\n target=\"_blank\"\r\n rel=\"nofollow ugc noopener noreferrer\"\r\n className=\"underline text-blue-600\"\r\n >\r\n {license}\r\n </a>\r\n )\r\n }\r\n // Otherwise, just show as text\r\n return license\r\n}\r\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/datasets/DatasetManager/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAmI9B,MAAM,CAAC,OAAO,UAAU,kBAAkB,sBA+LzC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/datasets/DatasetManager/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAmI9B,MAAM,CAAC,OAAO,UAAU,kBAAkB,sBA+LzC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/core/components/viewers/map/datasets/DatasetManager/index.tsx"],"sourcesContent":["\"use client\"\r\n\r\n// Dependencies\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\nimport { MapContext, DatasetsContext } from '../../../../../store'\r\nimport { Command, Menubar, Badge, Button, Switch } from '../../../../../components/ui/'\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableRow,\r\n} from '../../../../../components/ui/Table'\r\nimport { FieldsTable } from './src/FieldsTable'\r\nimport * as LR from 'lucide-react'\r\nimport type { Dataset, BuildingDataset as RawBuildingDataset } from '../../../../../types/datasetTypes'\r\nimport { ClusterManager } from '../../utils/ClusterManager'\r\nimport {\r\n DndContext,\r\n closestCenter,\r\n KeyboardSensor,\r\n PointerSensor,\r\n useSensor,\r\n useSensors,\r\n DragEndEvent,\r\n} from '@dnd-kit/core'\r\nimport {\r\n arrayMove,\r\n SortableContext,\r\n sortableKeyboardCoordinates,\r\n verticalListSortingStrategy,\r\n} from '@dnd-kit/sortable'\r\nimport {\r\n useSortable,\r\n} from '@dnd-kit/sortable'\r\nimport { CSS } from '@dnd-kit/utilities'\r\nimport { useSidebar } from '../../../../ui/Sidebar'\r\n\r\ntype BuildingDataset = RawBuildingDataset & Dataset\r\n\r\n// Type guard to check if dataset is a building dataset\r\nconst isBuildingDataset = (dataset: Dataset): dataset is BuildingDataset =>\r\n dataset.type === 'buildings' && 'data' in dataset\r\n\r\ninterface SortableTableRowProps {\r\n dataset: Dataset\r\n onToggleDataset: (dataset: Dataset) => void\r\n openDatasetDetails: (datasetName: string) => void\r\n expandedDatasets: Set<string>\r\n}\r\n\r\nconst SortableTableRow: React.FC<SortableTableRowProps> = ({\r\n dataset,\r\n onToggleDataset,\r\n openDatasetDetails,\r\n expandedDatasets,\r\n}) => {\r\n const {\r\n attributes,\r\n listeners,\r\n setNodeRef,\r\n transform,\r\n transition,\r\n isDragging,\r\n } = useSortable({ id: dataset.name })\r\n\r\n const style = {\r\n transform: CSS.Transform.toString(transform),\r\n transition,\r\n opacity: isDragging ? 0.5 : 1,\r\n }\r\n\r\n // Raster (WMS) layers are server-rendered images with no fields and a server-fixed\r\n // colour ramp, so the field-styling table + colour swatch are meaningless — hide them.\r\n const isRaster = dataset.datasetType === 'WMS' || dataset.type === 'WMS'\r\n\r\n return (\r\n <>\r\n <TableRow ref={setNodeRef} style={style} className=\"hover:bg-muted/50\">\r\n <TableCell>\r\n <div className=\"flex items-center gap-2\">\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"cursor-grab active:cursor-grabbing\"\r\n {...attributes}\r\n {...listeners}\r\n >\r\n <LR.GripVertical className=\"h-4 w-4\" />\r\n </Button>\r\n <Switch\r\n checked={dataset.visible !== false}\r\n onCheckedChange={() => onToggleDataset(dataset)}\r\n className=\"shrink-0\"\r\n style={dataset.visible === false || isRaster ? {} : { backgroundColor: dataset.layerColor.color }}\r\n />\r\n </div>\r\n </TableCell>\r\n <TableCell className=\"font-medium\">\r\n {dataset.name.replaceAll('_', ' ')}\r\n {dataset.total && (\r\n <Badge variant=\"outline\" className=\"ml-2 text-xs\">\r\n {dataset.total}\r\n </Badge>\r\n )}\r\n </TableCell>\r\n <TableCell>\r\n {!isRaster && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n onClick={() => openDatasetDetails(dataset.name)}\r\n className=\"shrink-0\"\r\n >\r\n <LR.ChevronDown\r\n className={`h-4 w-4 transition-transform duration-200 ${expandedDatasets.has(dataset.name) ? 'rotate-180' : ''}`}\r\n />\r\n </Button>\r\n )}\r\n </TableCell>\r\n </TableRow>\r\n {!isRaster && expandedDatasets.has(dataset.name) && (\r\n <TableRow>\r\n <TableCell colSpan={4} className=\"p-0 pb-1\">\r\n <FieldsTable\r\n dataset={dataset}\r\n />\r\n </TableCell>\r\n </TableRow>\r\n )}\r\n </>\r\n )\r\n}\r\n\r\nexport default function DatasetManagerMenu() {\r\n // Translation\r\n const t = useTranslations('DatasetManagerMenu')\r\n\r\n const { state: mapState, dispatch: mapDispatch } = React.useContext(MapContext)\r\n const { map } = mapState.map\r\n\r\n const { state: datasetState, dispatch: datasetDispatch } = React.useContext(DatasetsContext)\r\n const { addedDatasets } = datasetState.datasets\r\n\r\n const [open, setOpen] = React.useState(false)\r\n const [menuOpen, setMenuOpen] = React.useState(false)\r\n const [expandedDatasets, setExpandedDatasets] = React.useState<Set<string>>(new Set())\r\n\r\n const sensors = useSensors(\r\n useSensor(PointerSensor),\r\n useSensor(KeyboardSensor, {\r\n coordinateGetter: sortableKeyboardCoordinates,\r\n })\r\n )\r\n\r\n const sortedDatasets = React.useMemo(() => {\r\n const datasetsWithOrder = addedDatasets.map((dataset, index) => ({\r\n ...dataset,\r\n order: dataset.order !== undefined ? dataset.order : addedDatasets.length - 1 - index,\r\n }))\r\n\r\n return datasetsWithOrder.sort((a, b) => (b.order ?? 0) - (a.order ?? 0))\r\n }, [addedDatasets])\r\n\r\n React.useEffect(() => {\r\n if (!map || !addedDatasets) return\r\n\r\n const clusterManager = new ClusterManager(map)\r\n\r\n const sortedDatasets = [...addedDatasets].sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\r\n\r\n for (const dataset of sortedDatasets) {\r\n if (isBuildingDataset(dataset)) {\r\n if (dataset.visible === false) {\r\n clusterManager.remove(dataset.name)\r\n }\r\n else {\r\n clusterManager.create(dataset)\r\n clusterManager.toggleVisibility(dataset.name, true)\r\n }\r\n }\r\n }\r\n }, [map, addedDatasets])\r\n\r\n // Remove clusters for datasets no longer present\r\n const previousNamesRef = React.useRef<Set<string>>(new Set())\r\n\r\n React.useEffect(() => {\r\n if (!map) return\r\n const clusterManager = new ClusterManager(map)\r\n const currentNames = new Set(\r\n addedDatasets.filter(isBuildingDataset).map(ds => ds.name),\r\n )\r\n const removedNames = [...previousNamesRef.current].filter(\r\n name => !currentNames.has(name),\r\n )\r\n for (const datasetName of removedNames) {\r\n clusterManager.remove(datasetName)\r\n }\r\n previousNamesRef.current = currentNames\r\n }, [map, addedDatasets])\r\n\r\n const onToggle = () => setOpen(!open)\r\n\r\n const onToggleDataset = (dataset: Dataset) => {\r\n const datasetId = dataset.id;\r\n datasetDispatch({ type: 'TOGGLE_DATASET_VISIBILITY', payload: { datasetId } })\r\n }\r\n\r\n const toggleDatasetExpansion = (datasetName: string) => {\r\n setExpandedDatasets((prev) => {\r\n const newSet = new Set(prev)\r\n newSet.has(datasetName) ? newSet.delete(datasetName) : newSet.add(datasetName)\r\n return newSet\r\n })\r\n }\r\n\r\n const handleDragEnd = (event: DragEndEvent) => {\r\n const { active, over } = event\r\n\r\n if (over && active.id !== over.id) {\r\n const displayOrder = [...sortedDatasets]\r\n\r\n const oldIndex = displayOrder.findIndex(dataset => dataset.name === active.id)\r\n const newIndex = displayOrder.findIndex(dataset => dataset.name === over.id)\r\n\r\n const reorderedDisplay = arrayMove(displayOrder, oldIndex, newIndex)\r\n const maxOrder = reorderedDisplay.length - 1\r\n const reorderedDatasets = reorderedDisplay.map((dataset, index) => ({\r\n ...dataset,\r\n order: maxOrder - index,\r\n }))\r\n\r\n datasetDispatch({\r\n type: 'REORDER_DATASETS',\r\n payload: { reorderedDatasets }\r\n })\r\n }\r\n }\r\n\r\n const openAnimation = `\r\n pointer-events-auto \r\n transform \r\n transition-all \r\n duration-200\r\n data-[state=open]:animate-in \r\n data-[state=closed]:animate-out \r\n data-[state=closed]:fade-out-0 \r\n data-[state=open]:fade-in-0 \r\n data-[state=closed]:zoom-out-95 \r\n data-[state=open]:zoom-in-95\r\n `\r\n\r\n React.useEffect(() => {\r\n setMenuOpen(addedDatasets.length > 0)\r\n }, [addedDatasets.length])\r\n\r\n const openDatasetDetails = (datasetName: string) => {\r\n toggleDatasetExpansion(datasetName)\r\n }\r\n\r\n const {openInfo} = useSidebar()\r\n\r\n return (\r\n <>\r\n {!openInfo && addedDatasets.length > 0 && (\r\n <div data-state={menuOpen ? 'open' : 'closed'} className={openAnimation}>\r\n <Menubar className=\"pointer-events-auto w-96 h-auto\">\r\n <Command>\r\n <div>\r\n <div className={`flex items-center justify-between gap-3 ${open ? 'p-3' : 'pl-1 py-0'}`}>\r\n <div className=\"flex items-center gap-2\">\r\n <Badge>{addedDatasets.length}</Badge>\r\n <div className=\"text-sm font-medium\">\r\n {t('appliedLayer')}\r\n {addedDatasets.length === 1 ? '' : 's'}\r\n </div>\r\n </div>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n onClick={onToggle}\r\n className=\"opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\"\r\n >\r\n <LR.ChevronUp\r\n size={14}\r\n className={`transition-transform duration-200 ${open ? 'rotate-180' : ''}`}\r\n />\r\n </Button>\r\n </div>\r\n {open && (\r\n <div className=\"max-h-[40vh] overflow-y-auto\">\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={handleDragEnd}\r\n >\r\n <SortableContext\r\n items={sortedDatasets.map(dataset => dataset.name)}\r\n strategy={verticalListSortingStrategy}\r\n >\r\n <Table>\r\n <TableBody>\r\n {sortedDatasets.map((dataset) => (\r\n <SortableTableRow\r\n key={dataset.name}\r\n dataset={dataset}\r\n onToggleDataset={onToggleDataset}\r\n openDatasetDetails={openDatasetDetails}\r\n expandedDatasets={expandedDatasets}\r\n />\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </SortableContext>\r\n </DndContext>\r\n </div>\r\n )}\r\n </div>\r\n </Command>\r\n </Menubar>\r\n </div>\r\n )}\r\n </>\r\n )\r\n}\r\n"],"mappings":"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","names":["sortedDatasets"]}
1
+ {"version":3,"sources":["../../../../../../../src/core/components/viewers/map/datasets/DatasetManager/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\n// Dependencies\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\nimport { MapContext, DatasetsContext } from '../../../../../store'\r\nimport { Command, Menubar, Badge, Button, Switch } from '../../../../../components/ui/'\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableRow,\r\n} from '../../../../../components/ui/Table'\r\nimport { FieldsTable } from './src/FieldsTable'\r\nimport * as LR from 'lucide-react'\r\nimport type { Dataset, BuildingDataset as RawBuildingDataset } from '../../../../../types/datasetTypes'\r\nimport { ClusterManager } from '../../utils/ClusterManager'\r\nimport {\r\n DndContext,\r\n closestCenter,\r\n KeyboardSensor,\r\n PointerSensor,\r\n useSensor,\r\n useSensors,\r\n DragEndEvent,\r\n} from '@dnd-kit/core'\r\nimport {\r\n arrayMove,\r\n SortableContext,\r\n sortableKeyboardCoordinates,\r\n verticalListSortingStrategy,\r\n} from '@dnd-kit/sortable'\r\nimport {\r\n useSortable,\r\n} from '@dnd-kit/sortable'\r\nimport { CSS } from '@dnd-kit/utilities'\r\nimport { useSidebar } from '../../../../ui/Sidebar'\r\n\r\ntype BuildingDataset = RawBuildingDataset & Dataset\r\n\r\n// Type guard to check if dataset is a building dataset\r\nconst isBuildingDataset = (dataset: Dataset): dataset is BuildingDataset =>\r\n dataset.type === 'buildings' && 'data' in dataset\r\n\r\ninterface SortableTableRowProps {\r\n dataset: Dataset\r\n onToggleDataset: (dataset: Dataset) => void\r\n openDatasetDetails: (datasetName: string) => void\r\n expandedDatasets: Set<string>\r\n}\r\n\r\nconst SortableTableRow: React.FC<SortableTableRowProps> = ({\r\n dataset,\r\n onToggleDataset,\r\n openDatasetDetails,\r\n expandedDatasets,\r\n}) => {\r\n const {\r\n attributes,\r\n listeners,\r\n setNodeRef,\r\n transform,\r\n transition,\r\n isDragging,\r\n } = useSortable({ id: dataset.name })\r\n\r\n const style = {\r\n transform: CSS.Transform.toString(transform),\r\n transition,\r\n opacity: isDragging ? 0.5 : 1,\r\n }\r\n\r\n // Raster (WMS) layers are server-rendered images with no fields and a server-fixed\r\n // colour ramp, so the field-styling table + colour swatch are meaningless — hide them.\r\n const isRaster = dataset.datasetType === 'WMS' || dataset.type === 'WMS'\r\n\r\n return (\r\n <>\r\n <TableRow ref={setNodeRef} style={style} className=\"hover:bg-muted/50\">\r\n <TableCell>\r\n <div className=\"flex items-center gap-2\">\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"cursor-grab active:cursor-grabbing\"\r\n {...attributes}\r\n {...listeners}\r\n >\r\n <LR.GripVertical className=\"h-4 w-4\" />\r\n </Button>\r\n <Switch\r\n checked={dataset.visible !== false}\r\n onCheckedChange={() => onToggleDataset(dataset)}\r\n className=\"shrink-0\"\r\n style={dataset.visible === false || isRaster ? {} : { backgroundColor: dataset.layerColor.color }}\r\n />\r\n </div>\r\n </TableCell>\r\n <TableCell className=\"font-medium\">\r\n {dataset.name.replaceAll('_', ' ')}\r\n {dataset.total && (\r\n <Badge variant=\"outline\" className=\"ml-2 text-xs\">\r\n {dataset.total}\r\n </Badge>\r\n )}\r\n </TableCell>\r\n <TableCell>\r\n {!isRaster && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n onClick={() => openDatasetDetails(dataset.name)}\r\n className=\"shrink-0\"\r\n >\r\n <LR.ChevronDown\r\n className={`h-4 w-4 transition-transform duration-200 ${expandedDatasets.has(dataset.name) ? 'rotate-180' : ''}`}\r\n />\r\n </Button>\r\n )}\r\n </TableCell>\r\n </TableRow>\r\n {!isRaster && expandedDatasets.has(dataset.name) && (\r\n <TableRow>\r\n <TableCell colSpan={4} className=\"p-0 pb-1\">\r\n <FieldsTable\r\n dataset={dataset}\r\n />\r\n </TableCell>\r\n </TableRow>\r\n )}\r\n </>\r\n )\r\n}\r\n\r\nexport default function DatasetManagerMenu() {\r\n // Translation\r\n const t = useTranslations('DatasetManagerMenu')\r\n\r\n const { state: mapState, dispatch: mapDispatch } = React.useContext(MapContext)\r\n const { map } = mapState.map\r\n\r\n const { state: datasetState, dispatch: datasetDispatch } = React.useContext(DatasetsContext)\r\n const { addedDatasets } = datasetState.datasets\r\n\r\n const [open, setOpen] = React.useState(false)\r\n const [menuOpen, setMenuOpen] = React.useState(false)\r\n const [expandedDatasets, setExpandedDatasets] = React.useState<Set<string>>(new Set())\r\n\r\n const sensors = useSensors(\r\n useSensor(PointerSensor),\r\n useSensor(KeyboardSensor, {\r\n coordinateGetter: sortableKeyboardCoordinates,\r\n })\r\n )\r\n\r\n const sortedDatasets = React.useMemo(() => {\r\n const datasetsWithOrder = addedDatasets.map((dataset, index) => ({\r\n ...dataset,\r\n order: dataset.order !== undefined ? dataset.order : addedDatasets.length - 1 - index,\r\n }))\r\n\r\n return datasetsWithOrder.sort((a, b) => (b.order ?? 0) - (a.order ?? 0))\r\n }, [addedDatasets])\r\n\r\n React.useEffect(() => {\r\n if (!map || !addedDatasets) return\r\n\r\n const clusterManager = new ClusterManager(map)\r\n\r\n const sortedDatasets = [...addedDatasets].sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\r\n\r\n for (const dataset of sortedDatasets) {\r\n if (isBuildingDataset(dataset)) {\r\n if (dataset.visible === false) {\r\n clusterManager.remove(dataset.name)\r\n }\r\n else {\r\n clusterManager.create(dataset)\r\n clusterManager.toggleVisibility(dataset.name, true)\r\n }\r\n }\r\n }\r\n }, [map, addedDatasets])\r\n\r\n // Remove clusters for datasets no longer present\r\n const previousNamesRef = React.useRef<Set<string>>(new Set())\r\n\r\n React.useEffect(() => {\r\n if (!map) return\r\n const clusterManager = new ClusterManager(map)\r\n const currentNames = new Set(\r\n addedDatasets.filter(isBuildingDataset).map(ds => ds.name),\r\n )\r\n const removedNames = [...previousNamesRef.current].filter(\r\n name => !currentNames.has(name),\r\n )\r\n for (const datasetName of removedNames) {\r\n clusterManager.remove(datasetName)\r\n }\r\n previousNamesRef.current = currentNames\r\n }, [map, addedDatasets])\r\n\r\n const onToggle = () => setOpen(!open)\r\n\r\n const onToggleDataset = (dataset: Dataset) => {\r\n const datasetId = dataset.id;\r\n datasetDispatch({ type: 'TOGGLE_DATASET_VISIBILITY', payload: { datasetId } })\r\n }\r\n\r\n const toggleDatasetExpansion = (datasetName: string) => {\r\n setExpandedDatasets((prev) => {\r\n const newSet = new Set(prev)\r\n newSet.has(datasetName) ? newSet.delete(datasetName) : newSet.add(datasetName)\r\n return newSet\r\n })\r\n }\r\n\r\n const handleDragEnd = (event: DragEndEvent) => {\r\n const { active, over } = event\r\n\r\n if (over && active.id !== over.id) {\r\n const displayOrder = [...sortedDatasets]\r\n\r\n const oldIndex = displayOrder.findIndex(dataset => dataset.name === active.id)\r\n const newIndex = displayOrder.findIndex(dataset => dataset.name === over.id)\r\n\r\n const reorderedDisplay = arrayMove(displayOrder, oldIndex, newIndex)\r\n const maxOrder = reorderedDisplay.length - 1\r\n const reorderedDatasets = reorderedDisplay.map((dataset, index) => ({\r\n ...dataset,\r\n order: maxOrder - index,\r\n }))\r\n\r\n datasetDispatch({\r\n type: 'REORDER_DATASETS',\r\n payload: { reorderedDatasets }\r\n })\r\n }\r\n }\r\n\r\n const openAnimation = `\r\n pointer-events-auto \r\n transform \r\n transition-all \r\n duration-200\r\n data-[state=open]:animate-in \r\n data-[state=closed]:animate-out \r\n data-[state=closed]:fade-out-0 \r\n data-[state=open]:fade-in-0 \r\n data-[state=closed]:zoom-out-95 \r\n data-[state=open]:zoom-in-95\r\n `\r\n\r\n React.useEffect(() => {\r\n setMenuOpen(addedDatasets.length > 0)\r\n }, [addedDatasets.length])\r\n\r\n const openDatasetDetails = (datasetName: string) => {\r\n toggleDatasetExpansion(datasetName)\r\n }\r\n\r\n const {openInfo} = useSidebar()\r\n\r\n return (\r\n <>\r\n {!openInfo && addedDatasets.length > 0 && (\r\n <div data-state={menuOpen ? 'open' : 'closed'} className={openAnimation}>\r\n <Menubar className=\"pointer-events-auto w-96 h-auto\">\r\n <Command>\r\n <div>\r\n <div className={`flex items-center justify-between gap-3 ${open ? 'p-3' : 'pl-1 py-0'}`}>\r\n <div className=\"flex items-center gap-2\">\r\n <Badge>{addedDatasets.length}</Badge>\r\n <div className=\"text-sm font-medium\">\r\n {t('appliedLayer')}\r\n {addedDatasets.length === 1 ? '' : 's'}\r\n </div>\r\n </div>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n onClick={onToggle}\r\n className=\"opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\"\r\n >\r\n <LR.ChevronUp\r\n size={14}\r\n className={`transition-transform duration-200 ${open ? 'rotate-180' : ''}`}\r\n />\r\n </Button>\r\n </div>\r\n {open && (\r\n <div className=\"max-h-[40vh] overflow-y-auto\">\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={handleDragEnd}\r\n >\r\n <SortableContext\r\n items={sortedDatasets.map(dataset => dataset.name)}\r\n strategy={verticalListSortingStrategy}\r\n >\r\n <Table>\r\n <TableBody>\r\n {sortedDatasets.map((dataset) => (\r\n <SortableTableRow\r\n key={dataset.name}\r\n dataset={dataset}\r\n onToggleDataset={onToggleDataset}\r\n openDatasetDetails={openDatasetDetails}\r\n expandedDatasets={expandedDatasets}\r\n />\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </SortableContext>\r\n </DndContext>\r\n </div>\r\n )}\r\n </div>\r\n </Command>\r\n </Menubar>\r\n </div>\r\n )}\r\n </>\r\n )\r\n}\r\n"],"mappings":"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","names":["sortedDatasets"]}
@@ -1 +1 @@
1
- {"version":3,"file":"FieldsTable.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/map/datasets/DatasetManager/src/FieldsTable.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B,OAAO,KAAK,EAAa,OAAO,EAAgB,MAAM,sCAAsC,CAAA;AAG5F,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,gBAAgB,qBA2OxD"}
1
+ {"version":3,"file":"FieldsTable.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/map/datasets/DatasetManager/src/FieldsTable.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B,OAAO,KAAK,EAAa,OAAO,EAAgB,MAAM,sCAAsC,CAAA;AAG5F,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,gBAAgB,qBA2OxD"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../src/core/components/viewers/map/datasets/DatasetManager/src/FieldsTable.tsx"],"sourcesContent":["\"use client\"\r\n\r\n// Dependencies\r\nimport * as React from 'react'\r\nimport { useTranslations, useLocale } from 'next-intl'\r\n\r\n// Shadcn components\r\nimport { Checkbox, Input, LoadingSpinner } from '../../../../../../components/ui/'\r\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../../../../../../components/ui/Table'\r\nimport { formatName } from '../../utils'\r\nimport type { ColorType, Dataset, DatasetField } from '../../../../../../types/datasetTypes'\r\nimport { DatasetsContext } from '../../../../../../store'\r\n\r\ninterface FieldsTableProps {\r\n dataset: Dataset\r\n}\r\n\r\nexport function FieldsTable({ dataset }: FieldsTableProps) {\r\n const t = useTranslations('FieldsTable')\r\n const locale = useLocale()\r\n const datasetId = dataset.id\r\n const { dispatch: datasetDispatch } = React.useContext(DatasetsContext)\r\n\r\n const [fields, setFields] = React.useState<DatasetField[]>([])\r\n const [loading, setLoading] = React.useState(false)\r\n const [fieldColors, setFieldColors] = React.useState<Record<string, { single?: string; min?: string; max?: string }>>({})\r\n const [selectedField, setSelectedField] = React.useState<string>('All features')\r\n\r\n const getEffectiveColor = (fieldName: string, colorType: 'min' | 'max' | 'single') => {\r\n const userColor = fieldColors[fieldName]?.[colorType]\r\n if (userColor) return userColor\r\n if (colorType === 'single') return dataset.layerColor.color\r\n if (colorType === 'min') return dataset.layerColor.minColor || dataset.layerColor.color\r\n if (colorType === 'max') return dataset.layerColor.maxColor || dataset.layerColor.color\r\n return '#cccccc'\r\n }\r\n\r\n const onSelectingField = (field: DatasetField) => {\r\n datasetDispatch({ type: 'SET_SELECTED_FIELD', payload: { datasetName: dataset.name, fieldName: field.name } })\r\n setSelectedField(field.name)\r\n }\r\n\r\n const debouncedDispatchRef = React.useRef<NodeJS.Timeout | null>(null)\r\n const handleColorChange = React.useCallback((fieldName: string, color: string, colorType: 'single' | 'min' | 'max') => {\r\n setFieldColors(prev => ({\r\n ...prev,\r\n [fieldName]: { ...prev[fieldName], [colorType]: color },\r\n }))\r\n if (fieldName === selectedField) {\r\n if (debouncedDispatchRef.current) clearTimeout(debouncedDispatchRef.current)\r\n debouncedDispatchRef.current = setTimeout(() => {\r\n const layerColor = {\r\n ...dataset.layerColor,\r\n ...(colorType === 'single' && { color }),\r\n ...(colorType === 'min' && { minColor: color }),\r\n ...(colorType === 'max' && { maxColor: color }),\r\n }\r\n datasetDispatch({ type: 'DATASET_COLOR', payload: { datasetId, layerColor } })\r\n datasetDispatch({ type: 'SET_FIELD_COLOR', payload: { datasetName: dataset.name, fieldName: fieldName, layerColor } })\r\n }, 200)\r\n }\r\n }, [selectedField, dataset.layerColor, datasetId, datasetDispatch])\r\n\r\n React.useEffect(() => () => { if (debouncedDispatchRef.current) clearTimeout(debouncedDispatchRef.current) }, [])\r\n\r\n const filteredFields = React.useMemo<DatasetField[]>(() => {\r\n const result: DatasetField[] = fields.filter(field => {\r\n const t = (field as any).type\r\n if (t === 'id') return false\r\n const key = field.name || 'unnamed'\r\n const lowerKey = key.toLowerCase()\r\n const coordinateKeys = ['globalid', 'latitude', 'lat', 'longitude', 'lng', 'lon', 'coordinates', 'coordina', 'x', 'y', 'z']\r\n if (coordinateKeys.includes(lowerKey)) return false\r\n const hasIdWord = /(^|[\\s_-])id($|[\\s_-])/i.test(lowerKey) || lowerKey.endsWith('id')\r\n if (hasIdWord) return false\r\n if (locale === 'En') {\r\n const fr = ['fr', 'fre', 'french']\r\n const es = ['es', 'esp', 'spanish']\r\n if (fr.some(ind => lowerKey === ind || lowerKey.endsWith(`_${ind}`) || lowerKey.startsWith(`${ind}_`))) return false\r\n if (es.some(ind => lowerKey === ind || lowerKey.endsWith(`_${ind}`) || lowerKey.startsWith(`${ind}_`))) return false\r\n } else if (locale === 'Fr') {\r\n const en = ['en', 'eng', 'engl', 'english']\r\n const es = ['es', 'esp', 'spanish']\r\n if (en.some(ind => lowerKey === ind || lowerKey.endsWith(`_${ind}`) || lowerKey.startsWith(`${ind}_`))) return false\r\n if (es.some(ind => lowerKey === ind || lowerKey.endsWith(`_${ind}`) || lowerKey.startsWith(`${ind}_`))) return false\r\n } else if (locale === 'Es') {\r\n const en = ['en', 'eng', 'engl', 'english']\r\n const fr = ['fr', 'fre', 'french']\r\n if (en.some(ind => lowerKey === ind || lowerKey.endsWith(`_${ind}`) || lowerKey.startsWith(`${ind}_`))) return false\r\n if (fr.some(ind => lowerKey === ind || lowerKey.endsWith(`_${ind}`) || lowerKey.startsWith(`${ind}_`))) return false\r\n }\r\n return true\r\n })\r\n if (!result.some(f => (f as any).name === 'All features')) {\r\n // Insert All features synthetic row with explicit colorType so it can show a single color picker\r\n result.unshift({ name: 'All features', type: 'single', colorType: 'single' } as any)\r\n }\r\n return result\r\n }, [fields, locale])\r\n\r\n // Simple categorization relying solely on pre-inferred field.type (includes 'datetime')\r\n const colorType = (field: DatasetField): 'single' | 'minMax' | 'boolean' => {\r\n const t = typeof field.type === 'string' ? field.type.toLowerCase() : field.type\r\n if (t === 'number' || t === 'datetime') return 'minMax'\r\n if (t === 'boolean') return 'boolean'\r\n return 'single'\r\n }\r\n\r\n interface RowConfig {\r\n showMinMax?: boolean\r\n showSingleColor?: boolean\r\n selectable: boolean\r\n minLabel?: string\r\n maxLabel?: string\r\n }\r\n\r\n const buildConfig = (rowCat: ColorType): RowConfig => {\r\n switch (rowCat) {\r\n case 'single': return { showSingleColor: true, selectable: true }\r\n case 'minMax': return { showMinMax: true, selectable: true, minLabel: 'min', maxLabel: 'max' }\r\n case 'boolean': return { showMinMax: true, selectable: true, minLabel: 'No', maxLabel: 'Yes' }\r\n default: return { selectable: true }\r\n }\r\n }\r\n\r\n const renderColorControls = (field: DatasetField, rowConfig: RowConfig, isSelected: boolean) => {\r\n if (!isSelected) return null\r\n if (rowConfig.showSingleColor) {\r\n return (\r\n <div className=\"flex gap-1\">\r\n <div className=\"w-5 h-5 rounded-md overflow-hidden border border-gray-300 shadow-sm\">\r\n <Input\r\n type=\"color\"\r\n value={getEffectiveColor(field.name, 'single')}\r\n onChange={e => handleColorChange(field.name, e.target.value, 'single')}\r\n className=\"w-full h-full p-0 border-0 cursor-pointer [&::-webkit-color-swatch-wrapper]:p-0 [&::-webkit-color-swatch]:border-0 [&::-webkit-color-swatch]:rounded-none\"\r\n title={t('fieldColor')}\r\n />\r\n </div>\r\n </div>\r\n )\r\n }\r\n if (rowConfig.showMinMax) {\r\n return (\r\n <div className=\"flex gap-2 items-center\">\r\n <div className=\"flex items-center gap-1\">\r\n {rowConfig.minLabel && <span className=\"text-xs text-muted-foreground\">{rowConfig.minLabel}</span>}\r\n <div className=\"w-5 h-5 rounded-sm overflow-hidden border border-gray-300 shadow-sm\">\r\n <Input\r\n type=\"color\"\r\n value={getEffectiveColor(field.name, 'min')}\r\n onChange={e => handleColorChange(field.name, e.target.value, 'min')}\r\n className=\"w-full h-full p-0 border-0 cursor-pointer [&::-webkit-color-swatch-wrapper]:p-0 [&::-webkit-color-swatch]:border-0 [&::-webkit-color-swatch]:rounded-none\"\r\n title={rowConfig.minLabel}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"flex items-center gap-1\">\r\n {rowConfig.maxLabel && <span className=\"text-xs text-muted-foreground\">{rowConfig.maxLabel}</span>}\r\n <div className=\"w-5 h-5 rounded-sm overflow-hidden border border-gray-300 shadow-sm\">\r\n <Input\r\n type=\"color\"\r\n value={getEffectiveColor(field.name, 'max')}\r\n onChange={e => handleColorChange(field.name, e.target.value, 'max')}\r\n className=\"w-full h-full p-0 border-0 cursor-pointer [&::-webkit-color-swatch-wrapper]:p-0 [&::-webkit-color-swatch]:border-0 [&::-webkit-color-swatch]:rounded-none\"\r\n title={rowConfig.maxLabel}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n return null\r\n }\r\n\r\n React.useEffect(() => {\r\n let mounted = true\r\n if (!dataset.getFields) setFields(dataset.fields || [])\r\n async function fetchFields() {\r\n setLoading(true)\r\n if (dataset && typeof dataset.getFields === 'function') {\r\n const result = await dataset.getFields()\r\n const datasetFields: DatasetField[] = result.map(f => ({\r\n name: f.name,\r\n datasetName: dataset.name,\r\n colorType: colorType(f),\r\n type: f.type,\r\n layerColor: dataset.layerColor,\r\n selected: false\r\n }))\r\n datasetDispatch({ type: 'SET_DATASET_FIELDS', payload: { datasetName: dataset.name, datasetFields } })\r\n if (mounted && Array.isArray(result)) setFields(datasetFields)\r\n }\r\n if (mounted) setLoading(false)\r\n }\r\n fetchFields()\r\n return () => { mounted = false }\r\n }, [dataset.name])\r\n\r\n React.useEffect(() => {\r\n if (selectedField === 'All features') {\r\n const allField = filteredFields.find(f => f.name === 'All features')\r\n if (allField) onSelectingField(allField as DatasetField)\r\n }\r\n }, [filteredFields, selectedField, dataset.name])\r\n\r\n return (\r\n <div className=\"mt-4\">\r\n {loading ? (\r\n <div className=\"flex items-center gap-2 py-4 justify-center\">\r\n <LoadingSpinner />\r\n <span className=\"text-sm\">{t('loadingText')}</span>\r\n </div>\r\n ) : (\r\n <Table>\r\n <TableHeader>\r\n <TableRow className=\"h-8\">\r\n <TableHead className=\"w-16 text-xs\"></TableHead>\r\n <TableHead className=\"text-xs\">{t('fieldName')}</TableHead>\r\n <TableHead className=\"text-xs\">{t('color')}</TableHead>\r\n </TableRow>\r\n </TableHeader>\r\n <TableBody>\r\n {filteredFields.map(field => {\r\n const fieldColorType = field.colorType\r\n const rowConfig = buildConfig(fieldColorType as any)\r\n // Override: only show single color picker for the synthetic 'All features' row\r\n if (fieldColorType === 'single') {\r\n rowConfig.showSingleColor = field.name === 'All features'\r\n }\r\n const isSelected = selectedField === field.name\r\n const colorControls = renderColorControls(field, rowConfig, isSelected)\r\n return (\r\n <TableRow key={field.name} className=\"h-8\">\r\n <TableCell className=\"py-2\">\r\n {rowConfig.selectable && (\r\n <Checkbox\r\n checked={isSelected}\r\n onCheckedChange={() => onSelectingField(field)}\r\n />\r\n )}\r\n </TableCell>\r\n <TableCell className=\"py-2 text-sm\">{formatName(field.name)}</TableCell>\r\n <TableCell className=\"py-2\">{colorControls}</TableCell>\r\n </TableRow>\r\n )\r\n })}\r\n </TableBody>\r\n </Table>\r\n )}\r\n </div>\r\n )\r\n}\r\n"],"mappings":"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","names":["colorType","t"]}
1
+ {"version":3,"sources":["../../../../../../../../src/core/components/viewers/map/datasets/DatasetManager/src/FieldsTable.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\n// Dependencies\r\nimport * as React from 'react'\r\nimport { useTranslations, useLocale } from 'next-intl'\r\n\r\n// Shadcn components\r\nimport { Checkbox, Input, LoadingSpinner } from '../../../../../../components/ui/'\r\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../../../../../../components/ui/Table'\r\nimport { formatName } from '../../utils'\r\nimport type { ColorType, Dataset, DatasetField } from '../../../../../../types/datasetTypes'\r\nimport { DatasetsContext } from '../../../../../../store'\r\n\r\ninterface FieldsTableProps {\r\n dataset: Dataset\r\n}\r\n\r\nexport function FieldsTable({ dataset }: FieldsTableProps) {\r\n const t = useTranslations('FieldsTable')\r\n const locale = useLocale()\r\n const datasetId = dataset.id\r\n const { dispatch: datasetDispatch } = React.useContext(DatasetsContext)\r\n\r\n const [fields, setFields] = React.useState<DatasetField[]>([])\r\n const [loading, setLoading] = React.useState(false)\r\n const [fieldColors, setFieldColors] = React.useState<Record<string, { single?: string; min?: string; max?: string }>>({})\r\n const [selectedField, setSelectedField] = React.useState<string>('All features')\r\n\r\n const getEffectiveColor = (fieldName: string, colorType: 'min' | 'max' | 'single') => {\r\n const userColor = fieldColors[fieldName]?.[colorType]\r\n if (userColor) return userColor\r\n if (colorType === 'single') return dataset.layerColor.color\r\n if (colorType === 'min') return dataset.layerColor.minColor || dataset.layerColor.color\r\n if (colorType === 'max') return dataset.layerColor.maxColor || dataset.layerColor.color\r\n return '#cccccc'\r\n }\r\n\r\n const onSelectingField = (field: DatasetField) => {\r\n datasetDispatch({ type: 'SET_SELECTED_FIELD', payload: { datasetName: dataset.name, fieldName: field.name } })\r\n setSelectedField(field.name)\r\n }\r\n\r\n const debouncedDispatchRef = React.useRef<NodeJS.Timeout | null>(null)\r\n const handleColorChange = React.useCallback((fieldName: string, color: string, colorType: 'single' | 'min' | 'max') => {\r\n setFieldColors(prev => ({\r\n ...prev,\r\n [fieldName]: { ...prev[fieldName], [colorType]: color },\r\n }))\r\n if (fieldName === selectedField) {\r\n if (debouncedDispatchRef.current) clearTimeout(debouncedDispatchRef.current)\r\n debouncedDispatchRef.current = setTimeout(() => {\r\n const layerColor = {\r\n ...dataset.layerColor,\r\n ...(colorType === 'single' && { color }),\r\n ...(colorType === 'min' && { minColor: color }),\r\n ...(colorType === 'max' && { maxColor: color }),\r\n }\r\n datasetDispatch({ type: 'DATASET_COLOR', payload: { datasetId, layerColor } })\r\n datasetDispatch({ type: 'SET_FIELD_COLOR', payload: { datasetName: dataset.name, fieldName: fieldName, layerColor } })\r\n }, 200)\r\n }\r\n }, [selectedField, dataset.layerColor, datasetId, datasetDispatch])\r\n\r\n React.useEffect(() => () => { if (debouncedDispatchRef.current) clearTimeout(debouncedDispatchRef.current) }, [])\r\n\r\n const filteredFields = React.useMemo<DatasetField[]>(() => {\r\n const result: DatasetField[] = fields.filter(field => {\r\n const t = (field as any).type\r\n if (t === 'id') return false\r\n const key = field.name || 'unnamed'\r\n const lowerKey = key.toLowerCase()\r\n const coordinateKeys = ['globalid', 'latitude', 'lat', 'longitude', 'lng', 'lon', 'coordinates', 'coordina', 'x', 'y', 'z']\r\n if (coordinateKeys.includes(lowerKey)) return false\r\n const hasIdWord = /(^|[\\s_-])id($|[\\s_-])/i.test(lowerKey) || lowerKey.endsWith('id')\r\n if (hasIdWord) return false\r\n if (locale === 'En') {\r\n const fr = ['fr', 'fre', 'french']\r\n const es = ['es', 'esp', 'spanish']\r\n if (fr.some(ind => lowerKey === ind || lowerKey.endsWith(`_${ind}`) || lowerKey.startsWith(`${ind}_`))) return false\r\n if (es.some(ind => lowerKey === ind || lowerKey.endsWith(`_${ind}`) || lowerKey.startsWith(`${ind}_`))) return false\r\n } else if (locale === 'Fr') {\r\n const en = ['en', 'eng', 'engl', 'english']\r\n const es = ['es', 'esp', 'spanish']\r\n if (en.some(ind => lowerKey === ind || lowerKey.endsWith(`_${ind}`) || lowerKey.startsWith(`${ind}_`))) return false\r\n if (es.some(ind => lowerKey === ind || lowerKey.endsWith(`_${ind}`) || lowerKey.startsWith(`${ind}_`))) return false\r\n } else if (locale === 'Es') {\r\n const en = ['en', 'eng', 'engl', 'english']\r\n const fr = ['fr', 'fre', 'french']\r\n if (en.some(ind => lowerKey === ind || lowerKey.endsWith(`_${ind}`) || lowerKey.startsWith(`${ind}_`))) return false\r\n if (fr.some(ind => lowerKey === ind || lowerKey.endsWith(`_${ind}`) || lowerKey.startsWith(`${ind}_`))) return false\r\n }\r\n return true\r\n })\r\n if (!result.some(f => (f as any).name === 'All features')) {\r\n // Insert All features synthetic row with explicit colorType so it can show a single color picker\r\n result.unshift({ name: 'All features', type: 'single', colorType: 'single' } as any)\r\n }\r\n return result\r\n }, [fields, locale])\r\n\r\n // Simple categorization relying solely on pre-inferred field.type (includes 'datetime')\r\n const colorType = (field: DatasetField): 'single' | 'minMax' | 'boolean' => {\r\n const t = typeof field.type === 'string' ? field.type.toLowerCase() : field.type\r\n if (t === 'number' || t === 'datetime') return 'minMax'\r\n if (t === 'boolean') return 'boolean'\r\n return 'single'\r\n }\r\n\r\n interface RowConfig {\r\n showMinMax?: boolean\r\n showSingleColor?: boolean\r\n selectable: boolean\r\n minLabel?: string\r\n maxLabel?: string\r\n }\r\n\r\n const buildConfig = (rowCat: ColorType): RowConfig => {\r\n switch (rowCat) {\r\n case 'single': return { showSingleColor: true, selectable: true }\r\n case 'minMax': return { showMinMax: true, selectable: true, minLabel: 'min', maxLabel: 'max' }\r\n case 'boolean': return { showMinMax: true, selectable: true, minLabel: 'No', maxLabel: 'Yes' }\r\n default: return { selectable: true }\r\n }\r\n }\r\n\r\n const renderColorControls = (field: DatasetField, rowConfig: RowConfig, isSelected: boolean) => {\r\n if (!isSelected) return null\r\n if (rowConfig.showSingleColor) {\r\n return (\r\n <div className=\"flex gap-1\">\r\n <div className=\"w-5 h-5 rounded-md overflow-hidden border border-gray-300 shadow-sm\">\r\n <Input\r\n type=\"color\"\r\n value={getEffectiveColor(field.name, 'single')}\r\n onChange={e => handleColorChange(field.name, e.target.value, 'single')}\r\n className=\"w-full h-full p-0 border-0 cursor-pointer [&::-webkit-color-swatch-wrapper]:p-0 [&::-webkit-color-swatch]:border-0 [&::-webkit-color-swatch]:rounded-none\"\r\n title={t('fieldColor')}\r\n />\r\n </div>\r\n </div>\r\n )\r\n }\r\n if (rowConfig.showMinMax) {\r\n return (\r\n <div className=\"flex gap-2 items-center\">\r\n <div className=\"flex items-center gap-1\">\r\n {rowConfig.minLabel && <span className=\"text-xs text-muted-foreground\">{rowConfig.minLabel}</span>}\r\n <div className=\"w-5 h-5 rounded-sm overflow-hidden border border-gray-300 shadow-sm\">\r\n <Input\r\n type=\"color\"\r\n value={getEffectiveColor(field.name, 'min')}\r\n onChange={e => handleColorChange(field.name, e.target.value, 'min')}\r\n className=\"w-full h-full p-0 border-0 cursor-pointer [&::-webkit-color-swatch-wrapper]:p-0 [&::-webkit-color-swatch]:border-0 [&::-webkit-color-swatch]:rounded-none\"\r\n title={rowConfig.minLabel}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"flex items-center gap-1\">\r\n {rowConfig.maxLabel && <span className=\"text-xs text-muted-foreground\">{rowConfig.maxLabel}</span>}\r\n <div className=\"w-5 h-5 rounded-sm overflow-hidden border border-gray-300 shadow-sm\">\r\n <Input\r\n type=\"color\"\r\n value={getEffectiveColor(field.name, 'max')}\r\n onChange={e => handleColorChange(field.name, e.target.value, 'max')}\r\n className=\"w-full h-full p-0 border-0 cursor-pointer [&::-webkit-color-swatch-wrapper]:p-0 [&::-webkit-color-swatch]:border-0 [&::-webkit-color-swatch]:rounded-none\"\r\n title={rowConfig.maxLabel}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n return null\r\n }\r\n\r\n React.useEffect(() => {\r\n let mounted = true\r\n if (!dataset.getFields) setFields(dataset.fields || [])\r\n async function fetchFields() {\r\n setLoading(true)\r\n if (dataset && typeof dataset.getFields === 'function') {\r\n const result = await dataset.getFields()\r\n const datasetFields: DatasetField[] = result.map(f => ({\r\n name: f.name,\r\n datasetName: dataset.name,\r\n colorType: colorType(f),\r\n type: f.type,\r\n layerColor: dataset.layerColor,\r\n selected: false\r\n }))\r\n datasetDispatch({ type: 'SET_DATASET_FIELDS', payload: { datasetName: dataset.name, datasetFields } })\r\n if (mounted && Array.isArray(result)) setFields(datasetFields)\r\n }\r\n if (mounted) setLoading(false)\r\n }\r\n fetchFields()\r\n return () => { mounted = false }\r\n }, [dataset.name])\r\n\r\n React.useEffect(() => {\r\n if (selectedField === 'All features') {\r\n const allField = filteredFields.find(f => f.name === 'All features')\r\n if (allField) onSelectingField(allField as DatasetField)\r\n }\r\n }, [filteredFields, selectedField, dataset.name])\r\n\r\n return (\r\n <div className=\"mt-4\">\r\n {loading ? (\r\n <div className=\"flex items-center gap-2 py-4 justify-center\">\r\n <LoadingSpinner />\r\n <span className=\"text-sm\">{t('loadingText')}</span>\r\n </div>\r\n ) : (\r\n <Table>\r\n <TableHeader>\r\n <TableRow className=\"h-8\">\r\n <TableHead className=\"w-16 text-xs\"></TableHead>\r\n <TableHead className=\"text-xs\">{t('fieldName')}</TableHead>\r\n <TableHead className=\"text-xs\">{t('color')}</TableHead>\r\n </TableRow>\r\n </TableHeader>\r\n <TableBody>\r\n {filteredFields.map(field => {\r\n const fieldColorType = field.colorType\r\n const rowConfig = buildConfig(fieldColorType as any)\r\n // Override: only show single color picker for the synthetic 'All features' row\r\n if (fieldColorType === 'single') {\r\n rowConfig.showSingleColor = field.name === 'All features'\r\n }\r\n const isSelected = selectedField === field.name\r\n const colorControls = renderColorControls(field, rowConfig, isSelected)\r\n return (\r\n <TableRow key={field.name} className=\"h-8\">\r\n <TableCell className=\"py-2\">\r\n {rowConfig.selectable && (\r\n <Checkbox\r\n checked={isSelected}\r\n onCheckedChange={() => onSelectingField(field)}\r\n />\r\n )}\r\n </TableCell>\r\n <TableCell className=\"py-2 text-sm\">{formatName(field.name)}</TableCell>\r\n <TableCell className=\"py-2\">{colorControls}</TableCell>\r\n </TableRow>\r\n )\r\n })}\r\n </TableBody>\r\n </Table>\r\n )}\r\n </div>\r\n )\r\n}\r\n"],"mappings":"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","names":["colorType","t"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DatasetSkeleton.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/datasets/DatasetSkeleton.tsx"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,UAAU,eAAe,gCAyEtC"}
1
+ {"version":3,"file":"DatasetSkeleton.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/datasets/DatasetSkeleton.tsx"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,UAAU,eAAe,gCAyEtC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/core/components/viewers/map/datasets/DatasetSkeleton.tsx"],"sourcesContent":["import * as LR from 'lucide-react'\r\nimport { useTranslations } from 'next-intl'\r\nimport { Skeleton } from '../../../ui/'\r\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../../../ui/Table'\r\n\r\nexport default function DatasetSkeleton() {\r\n const t = useTranslations('Datasets')\r\n\r\n return (\r\n <div className=\"flex flex-col h-full px-6\">\r\n <div className=\"flex justify-center items-center py-4\">\r\n <LR.Loader2 className=\"h-5 w-5 animate-spin mr-2\" />\r\n <span className=\"text-sm text-muted-foreground\">{t('fetchingDatasets')}</span>\r\n </div>\r\n <div className=\"flex-1 overflow-auto\">\r\n <Table>\r\n <TableHeader>\r\n <TableRow>\r\n {/* Leading cell - actions column header */}\r\n <TableHead className=\"w-10 p-2\">\r\n </TableHead>\r\n {/* Name column */}\r\n <TableHead className=\"max-w-md\">\r\n <Skeleton className=\"h-4 w-16\" />\r\n </TableHead>\r\n {/* Subdivision column */}\r\n <TableHead className=\"!hidden md:!table-cell whitespace-nowrap\">\r\n <Skeleton className=\"h-4 w-20\" />\r\n </TableHead>\r\n {/* Municipality column */}\r\n <TableHead className=\"!hidden md:!table-cell whitespace-nowrap\">\r\n <Skeleton className=\"h-4 w-24\" />\r\n </TableHead>\r\n {/* Type column */}\r\n <TableHead className=\"whitespace-nowrap\">\r\n <Skeleton className=\"h-4 w-12\" />\r\n </TableHead>\r\n {/* Trailing cell - actions */}\r\n <TableHead className=\"w-10\"></TableHead>\r\n </TableRow>\r\n </TableHeader>\r\n <TableBody>\r\n {Array.from({ length: 9 }).map((_, index) => (\r\n <TableRow key={index}>\r\n {/* Leading cell - checkbox and star */}\r\n <TableCell className=\"w-10 p-2\">\r\n <div className=\"flex items-center gap-2\">\r\n <Skeleton className=\"h-4 w-4\" /> {/* Checkbox */}\r\n <Skeleton className=\"h-4 w-4\" /> {/* Star */}\r\n </div>\r\n </TableCell>\r\n {/* Name column */}\r\n <TableCell className=\"max-w-md\">\r\n <Skeleton className=\"h-4 w-48\" />\r\n </TableCell>\r\n {/* Province column */}\r\n <TableCell className=\"!hidden md:!table-cell whitespace-nowrap\">\r\n <Skeleton className=\"h-4 w-16\" />\r\n </TableCell>\r\n {/* Municipality column */}\r\n <TableCell className=\"!hidden md:!table-cell whitespace-nowrap\">\r\n <Skeleton className=\"h-4 w-20\" />\r\n </TableCell>\r\n {/* Type column */}\r\n <TableCell className=\"whitespace-nowrap\">\r\n <Skeleton className=\"h-4 w-14\" />\r\n </TableCell>\r\n {/* Trailing cell - chevron */}\r\n <TableCell className=\"w-10 p-2\">\r\n <Skeleton className=\"h-4 w-4\" />\r\n </TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </div>\r\n </div>\r\n )\r\n}\r\n"],"mappings":"AAUM,SACE,KADF;AAVN,YAAY,QAAQ;AACpB,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AACzB,SAAS,OAAO,WAAW,WAAW,WAAW,aAAa,gBAAgB;AAE/D,SAAR,kBAAmC;AACxC,QAAM,IAAI,gBAAgB,UAAU;AAEpC,SACE,qBAAC,SAAI,WAAU,6BACb;AAAA,yBAAC,SAAI,WAAU,yCACb;AAAA,0BAAC,GAAG,SAAH,EAAW,WAAU,6BAA4B;AAAA,MAClD,oBAAC,UAAK,WAAU,iCAAiC,YAAE,kBAAkB,GAAE;AAAA,OACzE;AAAA,IACA,oBAAC,SAAI,WAAU,wBACb,+BAAC,SACC;AAAA,0BAAC,eACC,+BAAC,YAEC;AAAA,4BAAC,aAAU,WAAU,YACrB;AAAA,QAEA,oBAAC,aAAU,WAAU,YACnB,8BAAC,YAAS,WAAU,YAAW,GACjC;AAAA,QAEA,oBAAC,aAAU,WAAU,4CACnB,8BAAC,YAAS,WAAU,YAAW,GACjC;AAAA,QAEA,oBAAC,aAAU,WAAU,4CACnB,8BAAC,YAAS,WAAU,YAAW,GACjC;AAAA,QAEA,oBAAC,aAAU,WAAU,qBACnB,8BAAC,YAAS,WAAU,YAAW,GACjC;AAAA,QAEA,oBAAC,aAAU,WAAU,QAAO;AAAA,SAC9B,GACF;AAAA,MACA,oBAAC,aACE,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,UACjC,qBAAC,YAEC;AAAA,4BAAC,aAAU,WAAU,YACnB,+BAAC,SAAI,WAAU,2BACb;AAAA,8BAAC,YAAS,WAAU,WAAU;AAAA,UAAE;AAAA,UAChC,oBAAC,YAAS,WAAU,WAAU;AAAA,UAAE;AAAA,WAClC,GACF;AAAA,QAEA,oBAAC,aAAU,WAAU,YACnB,8BAAC,YAAS,WAAU,YAAW,GACjC;AAAA,QAEA,oBAAC,aAAU,WAAU,4CACnB,8BAAC,YAAS,WAAU,YAAW,GACjC;AAAA,QAEA,oBAAC,aAAU,WAAU,4CACnB,8BAAC,YAAS,WAAU,YAAW,GACjC;AAAA,QAEA,oBAAC,aAAU,WAAU,qBACnB,8BAAC,YAAS,WAAU,YAAW,GACjC;AAAA,QAEA,oBAAC,aAAU,WAAU,YACnB,8BAAC,YAAS,WAAU,WAAU,GAChC;AAAA,WA3Ba,KA4Bf,CACD,GACH;AAAA,OACF,GACF;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/core/components/viewers/map/datasets/DatasetSkeleton.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 { useTranslations } from 'next-intl'\r\nimport { Skeleton } from '../../../ui/'\r\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../../../ui/Table'\r\n\r\nexport default function DatasetSkeleton() {\r\n const t = useTranslations('Datasets')\r\n\r\n return (\r\n <div className=\"flex flex-col h-full px-6\">\r\n <div className=\"flex justify-center items-center py-4\">\r\n <LR.Loader2 className=\"h-5 w-5 animate-spin mr-2\" />\r\n <span className=\"text-sm text-muted-foreground\">{t('fetchingDatasets')}</span>\r\n </div>\r\n <div className=\"flex-1 overflow-auto\">\r\n <Table>\r\n <TableHeader>\r\n <TableRow>\r\n {/* Leading cell - actions column header */}\r\n <TableHead className=\"w-10 p-2\">\r\n </TableHead>\r\n {/* Name column */}\r\n <TableHead className=\"max-w-md\">\r\n <Skeleton className=\"h-4 w-16\" />\r\n </TableHead>\r\n {/* Subdivision column */}\r\n <TableHead className=\"!hidden md:!table-cell whitespace-nowrap\">\r\n <Skeleton className=\"h-4 w-20\" />\r\n </TableHead>\r\n {/* Municipality column */}\r\n <TableHead className=\"!hidden md:!table-cell whitespace-nowrap\">\r\n <Skeleton className=\"h-4 w-24\" />\r\n </TableHead>\r\n {/* Type column */}\r\n <TableHead className=\"whitespace-nowrap\">\r\n <Skeleton className=\"h-4 w-12\" />\r\n </TableHead>\r\n {/* Trailing cell - actions */}\r\n <TableHead className=\"w-10\"></TableHead>\r\n </TableRow>\r\n </TableHeader>\r\n <TableBody>\r\n {Array.from({ length: 9 }).map((_, index) => (\r\n <TableRow key={index}>\r\n {/* Leading cell - checkbox and star */}\r\n <TableCell className=\"w-10 p-2\">\r\n <div className=\"flex items-center gap-2\">\r\n <Skeleton className=\"h-4 w-4\" /> {/* Checkbox */}\r\n <Skeleton className=\"h-4 w-4\" /> {/* Star */}\r\n </div>\r\n </TableCell>\r\n {/* Name column */}\r\n <TableCell className=\"max-w-md\">\r\n <Skeleton className=\"h-4 w-48\" />\r\n </TableCell>\r\n {/* Province column */}\r\n <TableCell className=\"!hidden md:!table-cell whitespace-nowrap\">\r\n <Skeleton className=\"h-4 w-16\" />\r\n </TableCell>\r\n {/* Municipality column */}\r\n <TableCell className=\"!hidden md:!table-cell whitespace-nowrap\">\r\n <Skeleton className=\"h-4 w-20\" />\r\n </TableCell>\r\n {/* Type column */}\r\n <TableCell className=\"whitespace-nowrap\">\r\n <Skeleton className=\"h-4 w-14\" />\r\n </TableCell>\r\n {/* Trailing cell - chevron */}\r\n <TableCell className=\"w-10 p-2\">\r\n <Skeleton className=\"h-4 w-4\" />\r\n </TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </div>\r\n </div>\r\n )\r\n}\r\n"],"mappings":"AAaM,SACE,KADF;AAVN,YAAY,QAAQ;AACpB,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AACzB,SAAS,OAAO,WAAW,WAAW,WAAW,aAAa,gBAAgB;AAE/D,SAAR,kBAAmC;AACxC,QAAM,IAAI,gBAAgB,UAAU;AAEpC,SACE,qBAAC,SAAI,WAAU,6BACb;AAAA,yBAAC,SAAI,WAAU,yCACb;AAAA,0BAAC,GAAG,SAAH,EAAW,WAAU,6BAA4B;AAAA,MAClD,oBAAC,UAAK,WAAU,iCAAiC,YAAE,kBAAkB,GAAE;AAAA,OACzE;AAAA,IACA,oBAAC,SAAI,WAAU,wBACb,+BAAC,SACC;AAAA,0BAAC,eACC,+BAAC,YAEC;AAAA,4BAAC,aAAU,WAAU,YACrB;AAAA,QAEA,oBAAC,aAAU,WAAU,YACnB,8BAAC,YAAS,WAAU,YAAW,GACjC;AAAA,QAEA,oBAAC,aAAU,WAAU,4CACnB,8BAAC,YAAS,WAAU,YAAW,GACjC;AAAA,QAEA,oBAAC,aAAU,WAAU,4CACnB,8BAAC,YAAS,WAAU,YAAW,GACjC;AAAA,QAEA,oBAAC,aAAU,WAAU,qBACnB,8BAAC,YAAS,WAAU,YAAW,GACjC;AAAA,QAEA,oBAAC,aAAU,WAAU,QAAO;AAAA,SAC9B,GACF;AAAA,MACA,oBAAC,aACE,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,UACjC,qBAAC,YAEC;AAAA,4BAAC,aAAU,WAAU,YACnB,+BAAC,SAAI,WAAU,2BACb;AAAA,8BAAC,YAAS,WAAU,WAAU;AAAA,UAAE;AAAA,UAChC,oBAAC,YAAS,WAAU,WAAU;AAAA,UAAE;AAAA,WAClC,GACF;AAAA,QAEA,oBAAC,aAAU,WAAU,YACnB,8BAAC,YAAS,WAAU,YAAW,GACjC;AAAA,QAEA,oBAAC,aAAU,WAAU,4CACnB,8BAAC,YAAS,WAAU,YAAW,GACjC;AAAA,QAEA,oBAAC,aAAU,WAAU,4CACnB,8BAAC,YAAS,WAAU,YAAW,GACjC;AAAA,QAEA,oBAAC,aAAU,WAAU,qBACnB,8BAAC,YAAS,WAAU,YAAW,GACjC;AAAA,QAEA,oBAAC,aAAU,WAAU,YACnB,8BAAC,YAAS,WAAU,WAAU,GAChC;AAAA,WA3Ba,KA4Bf,CACD,GACH;AAAA,OACF,GACF;AAAA,KACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Filters.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/datasets/Filters.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAkB9B,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,GAAG,EAAE,CAAA;IACf,cAAc,EAAE;QACd,mBAAmB,EAAE,MAAM,EAAE,CAAA;QAC7B,cAAc,EAAE,MAAM,EAAE,CAAA;QACxB,KAAK,EAAE,MAAM,EAAE,CAAA;QACf,OAAO,EAAE,MAAM,EAAE,CAAA;KAClB,CAAA;IACD,eAAe,EAAE,CAAC,OAAO,EAAE;QAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAA;CACpI,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,EAAE,YAAY,qBA8I1F"}
1
+ {"version":3,"file":"Filters.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/datasets/Filters.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAkB9B,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,GAAG,EAAE,CAAA;IACf,cAAc,EAAE;QACd,mBAAmB,EAAE,MAAM,EAAE,CAAA;QAC7B,cAAc,EAAE,MAAM,EAAE,CAAA;QACxB,KAAK,EAAE,MAAM,EAAE,CAAA;QACf,OAAO,EAAE,MAAM,EAAE,CAAA;KAClB,CAAA;IACD,eAAe,EAAE,CAAC,OAAO,EAAE;QAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAA;CACpI,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,EAAE,YAAY,qBA8I1F"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/core/components/viewers/map/datasets/Filters.tsx"],"sourcesContent":["\"use client\"\r\n\r\n// Icons\r\nimport * as LR from 'lucide-react'\r\n// Dependencies\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\nimport { usePermissions } from '../../../../store'\r\n\r\nimport { Badge, Button } from '../../../../components/ui/'\r\n// Shadcn Components\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n DropdownMenuTrigger,\r\n} from '../../../../components/ui/DropdownMenu'\r\n\r\n// Custom Components\r\nimport NestedFilter from './NestedFilter'\r\n\r\ntype FiltersProps = {\r\n datasets: any[]\r\n appliedFilters: {\r\n countrySubdivisions: string[]\r\n municipalities: string[]\r\n types: string[]\r\n sources: string[]\r\n }\r\n onFiltersChange: (filters: { countrySubdivisions: string[], municipalities: string[], types: string[], sources: string[] }) => void\r\n}\r\n\r\nexport default function Filters({ datasets, appliedFilters, onFiltersChange }: FiltersProps) {\r\n // Translation\r\n const t = useTranslations('Filters')\r\n\r\n // Permissions\r\n const { ability } = usePermissions()\r\n\r\n // State to control which view is displayed\r\n const [content, setContent] = React.useState(true)\r\n const [label, setLabel] = React.useState('')\r\n\r\n const totalAppliedFilters = Object.values(appliedFilters).reduce((total, filterArray) => {\r\n return total + filterArray.length\r\n }, 0)\r\n\r\n const handleContent = (e: React.MouseEvent, label?: string) => {\r\n // Prevent default behavior and stop propagation\r\n e.stopPropagation()\r\n e.preventDefault()\r\n // Update content state\r\n setContent(!content)\r\n\r\n // Update label\r\n if (label) {\r\n setLabel(label)\r\n }\r\n\r\n // TODO: Update data source to propagate nested menu items\r\n }\r\n\r\n // Get unique values for each filter type from datasets\r\n const getUniqueValues = (field: string) => {\r\n const values = new Set<string>()\r\n const isSource = field === t('sourceLower')\r\n for (const dataset of datasets) {\r\n const value = isSource ? (dataset.portal?.name ?? dataset.publisher) : dataset[field]\r\n if (value && value !== '') {\r\n values.add(value)\r\n }\r\n }\r\n return [...values].sort()\r\n }\r\n\r\n const handleFilterChange = (filterType: string, selectedValues: string[]) => {\r\n const newFilters = { ...appliedFilters }\r\n\r\n switch (filterType) {\r\n case 'subdivision': {\r\n newFilters.countrySubdivisions = selectedValues\r\n\r\n break\r\n }\r\n case 'municipality': {\r\n newFilters.municipalities = selectedValues\r\n\r\n break\r\n }\r\n case 'type': {\r\n newFilters.types = selectedValues\r\n\r\n break\r\n }\r\n case 'source': {\r\n newFilters.sources = selectedValues\r\n\r\n break\r\n }\r\n // No default\r\n }\r\n\r\n onFiltersChange(newFilters)\r\n }\r\n\r\n return (\r\n <>\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n variant=\"outline\"\r\n className=\"dropdown-menu-trigger\"\r\n onClick={e => e.stopPropagation()}\r\n disabled={!ability.can('read', 'File')}\r\n >\r\n {totalAppliedFilters > 0\r\n ? <Badge variant=\"default\" className=\"\">{totalAppliedFilters}</Badge>\r\n : <LR.ListFilter />}\r\n\r\n <span>{t('filters')}</span>\r\n </Button>\r\n </DropdownMenuTrigger>\r\n\r\n {content\r\n\r\n ? (\r\n <DropdownMenuContent align=\"end\">\r\n <DropdownMenuLabel>{t('filters')}</DropdownMenuLabel>\r\n <DropdownMenuSeparator />\r\n <DropdownMenuItem\r\n onClick={(e) => { handleContent(e, t('countrySubdivisionLower')) }}\r\n >\r\n {t('countrySubdivision')}\r\n </DropdownMenuItem>\r\n <DropdownMenuItem\r\n onClick={(e) => { handleContent(e, t('municipalityLower')) }}\r\n >\r\n {t('municipality')}\r\n </DropdownMenuItem>\r\n <DropdownMenuItem\r\n onClick={(e) => { handleContent(e, t('typeLower')) }}\r\n >\r\n {t('type')}\r\n </DropdownMenuItem>\r\n <DropdownMenuItem\r\n onClick={(e) => { handleContent(e, t('sourceLower')) }}\r\n >\r\n {t('source')}\r\n </DropdownMenuItem>\r\n\r\n </DropdownMenuContent>\r\n )\r\n\r\n : (\r\n <NestedFilter\r\n label={label}\r\n handleContent={handleContent}\r\n setContent={setContent}\r\n availableValues={getUniqueValues(label)}\r\n selectedValues={\r\n label === t('countrySubdivisionLower')\r\n ? appliedFilters.countrySubdivisions\r\n : label === t('municipalityLower')\r\n ? appliedFilters.municipalities\r\n : label === t('typeLower')\r\n ? appliedFilters.types\r\n : label === t('sourceLower') ? appliedFilters.sources : []\r\n }\r\n onSelectionChange={selectedValues => handleFilterChange(label, selectedValues)}\r\n />\r\n )}\r\n </DropdownMenu>\r\n </>\r\n )\r\n}\r\n"],"mappings":"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","names":["label"]}
1
+ {"version":3,"sources":["../../../../../../src/core/components/viewers/map/datasets/Filters.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\n// Icons\r\nimport * as LR from 'lucide-react'\r\n// Dependencies\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\nimport { usePermissions } from '../../../../store'\r\n\r\nimport { Badge, Button } from '../../../../components/ui/'\r\n// Shadcn Components\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n DropdownMenuTrigger,\r\n} from '../../../../components/ui/DropdownMenu'\r\n\r\n// Custom Components\r\nimport NestedFilter from './NestedFilter'\r\n\r\ntype FiltersProps = {\r\n datasets: any[]\r\n appliedFilters: {\r\n countrySubdivisions: string[]\r\n municipalities: string[]\r\n types: string[]\r\n sources: string[]\r\n }\r\n onFiltersChange: (filters: { countrySubdivisions: string[], municipalities: string[], types: string[], sources: string[] }) => void\r\n}\r\n\r\nexport default function Filters({ datasets, appliedFilters, onFiltersChange }: FiltersProps) {\r\n // Translation\r\n const t = useTranslations('Filters')\r\n\r\n // Permissions\r\n const { ability } = usePermissions()\r\n\r\n // State to control which view is displayed\r\n const [content, setContent] = React.useState(true)\r\n const [label, setLabel] = React.useState('')\r\n\r\n const totalAppliedFilters = Object.values(appliedFilters).reduce((total, filterArray) => {\r\n return total + filterArray.length\r\n }, 0)\r\n\r\n const handleContent = (e: React.MouseEvent, label?: string) => {\r\n // Prevent default behavior and stop propagation\r\n e.stopPropagation()\r\n e.preventDefault()\r\n // Update content state\r\n setContent(!content)\r\n\r\n // Update label\r\n if (label) {\r\n setLabel(label)\r\n }\r\n\r\n // TODO: Update data source to propagate nested menu items\r\n }\r\n\r\n // Get unique values for each filter type from datasets\r\n const getUniqueValues = (field: string) => {\r\n const values = new Set<string>()\r\n const isSource = field === t('sourceLower')\r\n for (const dataset of datasets) {\r\n const value = isSource ? (dataset.portal?.name ?? dataset.publisher) : dataset[field]\r\n if (value && value !== '') {\r\n values.add(value)\r\n }\r\n }\r\n return [...values].sort()\r\n }\r\n\r\n const handleFilterChange = (filterType: string, selectedValues: string[]) => {\r\n const newFilters = { ...appliedFilters }\r\n\r\n switch (filterType) {\r\n case 'subdivision': {\r\n newFilters.countrySubdivisions = selectedValues\r\n\r\n break\r\n }\r\n case 'municipality': {\r\n newFilters.municipalities = selectedValues\r\n\r\n break\r\n }\r\n case 'type': {\r\n newFilters.types = selectedValues\r\n\r\n break\r\n }\r\n case 'source': {\r\n newFilters.sources = selectedValues\r\n\r\n break\r\n }\r\n // No default\r\n }\r\n\r\n onFiltersChange(newFilters)\r\n }\r\n\r\n return (\r\n <>\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n variant=\"outline\"\r\n className=\"dropdown-menu-trigger\"\r\n onClick={e => e.stopPropagation()}\r\n disabled={!ability.can('read', 'File')}\r\n >\r\n {totalAppliedFilters > 0\r\n ? <Badge variant=\"default\" className=\"\">{totalAppliedFilters}</Badge>\r\n : <LR.ListFilter />}\r\n\r\n <span>{t('filters')}</span>\r\n </Button>\r\n </DropdownMenuTrigger>\r\n\r\n {content\r\n\r\n ? (\r\n <DropdownMenuContent align=\"end\">\r\n <DropdownMenuLabel>{t('filters')}</DropdownMenuLabel>\r\n <DropdownMenuSeparator />\r\n <DropdownMenuItem\r\n onClick={(e) => { handleContent(e, t('countrySubdivisionLower')) }}\r\n >\r\n {t('countrySubdivision')}\r\n </DropdownMenuItem>\r\n <DropdownMenuItem\r\n onClick={(e) => { handleContent(e, t('municipalityLower')) }}\r\n >\r\n {t('municipality')}\r\n </DropdownMenuItem>\r\n <DropdownMenuItem\r\n onClick={(e) => { handleContent(e, t('typeLower')) }}\r\n >\r\n {t('type')}\r\n </DropdownMenuItem>\r\n <DropdownMenuItem\r\n onClick={(e) => { handleContent(e, t('sourceLower')) }}\r\n >\r\n {t('source')}\r\n </DropdownMenuItem>\r\n\r\n </DropdownMenuContent>\r\n )\r\n\r\n : (\r\n <NestedFilter\r\n label={label}\r\n handleContent={handleContent}\r\n setContent={setContent}\r\n availableValues={getUniqueValues(label)}\r\n selectedValues={\r\n label === t('countrySubdivisionLower')\r\n ? appliedFilters.countrySubdivisions\r\n : label === t('municipalityLower')\r\n ? appliedFilters.municipalities\r\n : label === t('typeLower')\r\n ? appliedFilters.types\r\n : label === t('sourceLower') ? appliedFilters.sources : []\r\n }\r\n onSelectionChange={selectedValues => handleFilterChange(label, selectedValues)}\r\n />\r\n )}\r\n </DropdownMenu>\r\n </>\r\n )\r\n}\r\n"],"mappings":"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","names":["label"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NestedFilter.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/datasets/NestedFilter.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;IAChD,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACpC,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,iBAAiB,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;CACtD,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,KAAK,EACL,aAAa,EACb,UAAU,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,GAClB,EAAE,iBAAiB,qBA+EnB"}
1
+ {"version":3,"file":"NestedFilter.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/datasets/NestedFilter.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;IAChD,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACpC,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,iBAAiB,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;CACtD,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,KAAK,EACL,aAAa,EACb,UAAU,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,GAClB,EAAE,iBAAiB,qBA+EnB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/core/components/viewers/map/datasets/NestedFilter.tsx"],"sourcesContent":["\"use client\"\r\n\r\n// Icons\r\nimport {\r\n ArrowLeft,\r\n Search,\r\n} from 'lucide-react'\r\n// Dependencies\r\nimport * as React from \"react\";\r\nimport { useTranslations } from 'next-intl'\r\n\r\nimport { Button, Checkbox, Input } from '../../../../components/ui/'\r\n// Shadcn Components\r\nimport {\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuSeparator,\r\n} from '../../../../components/ui/DropdownMenu'\r\n\r\ntype NestedFilterProps = {\r\n label: string\r\n handleContent: (event: React.MouseEvent) => void\r\n setContent: (value: boolean) => void\r\n availableValues: string[]\r\n selectedValues: string[]\r\n onSelectionChange: (selectedValues: string[]) => void\r\n}\r\n\r\nexport default function NestedFilter({\r\n label,\r\n handleContent,\r\n setContent,\r\n availableValues,\r\n selectedValues,\r\n onSelectionChange,\r\n}: NestedFilterProps) {\r\n // Translation\r\n const t = useTranslations('NestedFilter')\r\n\r\n const [searchTerm, setSearchTerm] = React.useState('')\r\n\r\n const handleCheckboxChange = (value: string, checked: boolean) => {\r\n let newSelectedValues\r\n\r\n newSelectedValues = checked ? [...selectedValues, value] : selectedValues.filter(v => v !== value)\r\n\r\n onSelectionChange(newSelectedValues)\r\n }\r\n\r\n // Filter available values based on search term\r\n const filteredValues = availableValues.filter(value =>\r\n value.toLowerCase().includes(searchTerm.toLowerCase()),\r\n )\r\n\r\n return (\r\n <>\r\n <DropdownMenuContent align=\"end\" onCloseAutoFocus={() => setContent(true)}>\r\n <DropdownMenuItem className=\"p-0 m-0 w-0\">\r\n <Button onClick={handleContent} variant=\"ghost\" className=\"capitalize font-semibold px-2 justify-start opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\">\r\n <ArrowLeft />\r\n {label}\r\n </Button>\r\n </DropdownMenuItem>\r\n <div className=\"my-2 relative\">\r\n <Search className=\"absolute left-3 top-2.5 h-4 w-4 text-muted-foreground\" />\r\n <Input\r\n placeholder={`${t('searchPlaceholder')} ${label}`}\r\n value={searchTerm}\r\n onChange={e => setSearchTerm(e.target.value)}\r\n className=\"pl-8 border-none shadow-none\"\r\n onKeyDown={(e) => {\r\n e.stopPropagation() // This disables Randix UI's default behavior for dropdown menu navigation\r\n }}\r\n />\r\n </div>\r\n <DropdownMenuSeparator />\r\n\r\n {filteredValues.length === 0 ? (\r\n <DropdownMenuItem disabled>\r\n {t('no')}\r\n {' '}\r\n {label}\r\n {' '}\r\n {t('valuesFound')}\r\n </DropdownMenuItem>\r\n ) : (\r\n filteredValues.map(value => (\r\n <DropdownMenuItem\r\n key={value}\r\n onSelect={(e) => {\r\n e.preventDefault()\r\n }}\r\n onClick={(e) => {\r\n e.stopPropagation()\r\n // Toggle the checkbox when clicking anywhere on the item\r\n handleCheckboxChange(value, !selectedValues.includes(value))\r\n }}\r\n >\r\n <Checkbox\r\n checked={selectedValues.includes(value)}\r\n onCheckedChange={(checked) => {\r\n handleCheckboxChange(value, checked === true)\r\n }}\r\n onClick={(e) => {\r\n e.stopPropagation()\r\n }}\r\n />\r\n {value}\r\n </DropdownMenuItem>\r\n ))\r\n )}\r\n </DropdownMenuContent>\r\n </>\r\n )\r\n}"],"mappings":";AAuDI,mBAIQ,KADF,YAHN;AApDJ;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP,YAAY,WAAW;AACvB,SAAS,uBAAuB;AAEhC,SAAS,QAAQ,UAAU,aAAa;AAExC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAWQ,SAAR,aAA8B;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsB;AAEpB,QAAM,IAAI,gBAAgB,cAAc;AAExC,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM,SAAS,EAAE;AAErD,QAAM,uBAAuB,CAAC,OAAe,YAAqB;AAChE,QAAI;AAEJ,wBAAoB,UAAU,CAAC,GAAG,gBAAgB,KAAK,IAAI,eAAe,OAAO,OAAK,MAAM,KAAK;AAEjG,sBAAkB,iBAAiB;AAAA,EACrC;AAGA,QAAM,iBAAiB,gBAAgB;AAAA,IAAO,WAC5C,MAAM,YAAY,EAAE,SAAS,WAAW,YAAY,CAAC;AAAA,EACvD;AAEA,SACE,gCACE,+BAAC,uBAAoB,OAAM,OAAM,kBAAkB,MAAM,WAAW,IAAI,GACtE;AAAA,wBAAC,oBAAiB,WAAU,eAC1B,+BAAC,UAAO,SAAS,eAAe,SAAQ,SAAQ,WAAU,iIACxD;AAAA,0BAAC,aAAU;AAAA,MACV;AAAA,OACH,GACF;AAAA,IACA,qBAAC,SAAI,WAAU,iBACb;AAAA,0BAAC,UAAO,WAAU,yDAAwD;AAAA,MAC1E;AAAA,QAAC;AAAA;AAAA,UACC,aAAa,GAAG,EAAE,mBAAmB,CAAC,IAAI,KAAK;AAAA,UAC/C,OAAO;AAAA,UACP,UAAU,OAAK,cAAc,EAAE,OAAO,KAAK;AAAA,UAC3C,WAAU;AAAA,UACV,WAAW,CAAC,MAAM;AAChB,cAAE,gBAAgB;AAAA,UACpB;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IACA,oBAAC,yBAAsB;AAAA,IAEtB,eAAe,WAAW,IACzB,qBAAC,oBAAiB,UAAQ,MACvB;AAAA,QAAE,IAAI;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA,EAAE,aAAa;AAAA,OAClB,IAEA,eAAe,IAAI,WACjB;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU,CAAC,MAAM;AACf,YAAE,eAAe;AAAA,QACnB;AAAA,QACA,SAAS,CAAC,MAAM;AACd,YAAE,gBAAgB;AAElB,+BAAqB,OAAO,CAAC,eAAe,SAAS,KAAK,CAAC;AAAA,QAC7D;AAAA,QAEA;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS,eAAe,SAAS,KAAK;AAAA,cACtC,iBAAiB,CAAC,YAAY;AAC5B,qCAAqB,OAAO,YAAY,IAAI;AAAA,cAC9C;AAAA,cACA,SAAS,CAAC,MAAM;AACd,kBAAE,gBAAgB;AAAA,cACpB;AAAA;AAAA,UACF;AAAA,UACC;AAAA;AAAA;AAAA,MAnBI;AAAA,IAoBP,CACD;AAAA,KAEL,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/core/components/viewers/map/datasets/NestedFilter.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\n// Icons\r\nimport {\r\n ArrowLeft,\r\n Search,\r\n} from 'lucide-react'\r\n// Dependencies\r\nimport * as React from \"react\";\r\nimport { useTranslations } from 'next-intl'\r\n\r\nimport { Button, Checkbox, Input } from '../../../../components/ui/'\r\n// Shadcn Components\r\nimport {\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuSeparator,\r\n} from '../../../../components/ui/DropdownMenu'\r\n\r\ntype NestedFilterProps = {\r\n label: string\r\n handleContent: (event: React.MouseEvent) => void\r\n setContent: (value: boolean) => void\r\n availableValues: string[]\r\n selectedValues: string[]\r\n onSelectionChange: (selectedValues: string[]) => void\r\n}\r\n\r\nexport default function NestedFilter({\r\n label,\r\n handleContent,\r\n setContent,\r\n availableValues,\r\n selectedValues,\r\n onSelectionChange,\r\n}: NestedFilterProps) {\r\n // Translation\r\n const t = useTranslations('NestedFilter')\r\n\r\n const [searchTerm, setSearchTerm] = React.useState('')\r\n\r\n const handleCheckboxChange = (value: string, checked: boolean) => {\r\n let newSelectedValues\r\n\r\n newSelectedValues = checked ? [...selectedValues, value] : selectedValues.filter(v => v !== value)\r\n\r\n onSelectionChange(newSelectedValues)\r\n }\r\n\r\n // Filter available values based on search term\r\n const filteredValues = availableValues.filter(value =>\r\n value.toLowerCase().includes(searchTerm.toLowerCase()),\r\n )\r\n\r\n return (\r\n <>\r\n <DropdownMenuContent align=\"end\" onCloseAutoFocus={() => setContent(true)}>\r\n <DropdownMenuItem className=\"p-0 m-0 w-0\">\r\n <Button onClick={handleContent} variant=\"ghost\" className=\"capitalize font-semibold px-2 justify-start opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\">\r\n <ArrowLeft />\r\n {label}\r\n </Button>\r\n </DropdownMenuItem>\r\n <div className=\"my-2 relative\">\r\n <Search className=\"absolute left-3 top-2.5 h-4 w-4 text-muted-foreground\" />\r\n <Input\r\n placeholder={`${t('searchPlaceholder')} ${label}`}\r\n value={searchTerm}\r\n onChange={e => setSearchTerm(e.target.value)}\r\n className=\"pl-8 border-none shadow-none\"\r\n onKeyDown={(e) => {\r\n e.stopPropagation() // This disables Randix UI's default behavior for dropdown menu navigation\r\n }}\r\n />\r\n </div>\r\n <DropdownMenuSeparator />\r\n\r\n {filteredValues.length === 0 ? (\r\n <DropdownMenuItem disabled>\r\n {t('no')}\r\n {' '}\r\n {label}\r\n {' '}\r\n {t('valuesFound')}\r\n </DropdownMenuItem>\r\n ) : (\r\n filteredValues.map(value => (\r\n <DropdownMenuItem\r\n key={value}\r\n onSelect={(e) => {\r\n e.preventDefault()\r\n }}\r\n onClick={(e) => {\r\n e.stopPropagation()\r\n // Toggle the checkbox when clicking anywhere on the item\r\n handleCheckboxChange(value, !selectedValues.includes(value))\r\n }}\r\n >\r\n <Checkbox\r\n checked={selectedValues.includes(value)}\r\n onCheckedChange={(checked) => {\r\n handleCheckboxChange(value, checked === true)\r\n }}\r\n onClick={(e) => {\r\n e.stopPropagation()\r\n }}\r\n />\r\n {value}\r\n </DropdownMenuItem>\r\n ))\r\n )}\r\n </DropdownMenuContent>\r\n </>\r\n )\r\n}"],"mappings":";AA0DI,mBAIQ,KADF,YAHN;AApDJ;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP,YAAY,WAAW;AACvB,SAAS,uBAAuB;AAEhC,SAAS,QAAQ,UAAU,aAAa;AAExC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAWQ,SAAR,aAA8B;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsB;AAEpB,QAAM,IAAI,gBAAgB,cAAc;AAExC,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM,SAAS,EAAE;AAErD,QAAM,uBAAuB,CAAC,OAAe,YAAqB;AAChE,QAAI;AAEJ,wBAAoB,UAAU,CAAC,GAAG,gBAAgB,KAAK,IAAI,eAAe,OAAO,OAAK,MAAM,KAAK;AAEjG,sBAAkB,iBAAiB;AAAA,EACrC;AAGA,QAAM,iBAAiB,gBAAgB;AAAA,IAAO,WAC5C,MAAM,YAAY,EAAE,SAAS,WAAW,YAAY,CAAC;AAAA,EACvD;AAEA,SACE,gCACE,+BAAC,uBAAoB,OAAM,OAAM,kBAAkB,MAAM,WAAW,IAAI,GACtE;AAAA,wBAAC,oBAAiB,WAAU,eAC1B,+BAAC,UAAO,SAAS,eAAe,SAAQ,SAAQ,WAAU,iIACxD;AAAA,0BAAC,aAAU;AAAA,MACV;AAAA,OACH,GACF;AAAA,IACA,qBAAC,SAAI,WAAU,iBACb;AAAA,0BAAC,UAAO,WAAU,yDAAwD;AAAA,MAC1E;AAAA,QAAC;AAAA;AAAA,UACC,aAAa,GAAG,EAAE,mBAAmB,CAAC,IAAI,KAAK;AAAA,UAC/C,OAAO;AAAA,UACP,UAAU,OAAK,cAAc,EAAE,OAAO,KAAK;AAAA,UAC3C,WAAU;AAAA,UACV,WAAW,CAAC,MAAM;AAChB,cAAE,gBAAgB;AAAA,UACpB;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IACA,oBAAC,yBAAsB;AAAA,IAEtB,eAAe,WAAW,IACzB,qBAAC,oBAAiB,UAAQ,MACvB;AAAA,QAAE,IAAI;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA,EAAE,aAAa;AAAA,OAClB,IAEA,eAAe,IAAI,WACjB;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU,CAAC,MAAM;AACf,YAAE,eAAe;AAAA,QACnB;AAAA,QACA,SAAS,CAAC,MAAM;AACd,YAAE,gBAAgB;AAElB,+BAAqB,OAAO,CAAC,eAAe,SAAS,KAAK,CAAC;AAAA,QAC7D;AAAA,QAEA;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS,eAAe,SAAS,KAAK;AAAA,cACtC,iBAAiB,CAAC,YAAY;AAC5B,qCAAqB,OAAO,YAAY,IAAI;AAAA,cAC9C;AAAA,cACA,SAAS,CAAC,MAAM;AACd,kBAAE,gBAAgB;AAAA,cACpB;AAAA;AAAA,UACF;AAAA,UACC;AAAA;AAAA;AAAA,MAnBI;AAAA,IAoBP,CACD;AAAA,KAEL,GACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"RowActions.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/datasets/RowActions.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAA;AAYzB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAG7D,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,iBAAiB,EAAE,OAAO,EAAE,CAAA;IAC5B,oBAAoB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;CACtE;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,OAAO,EACP,iBAAiB,EACjB,oBAAoB,GACrB,EAAE,eAAe,qBAoQjB"}
1
+ {"version":3,"file":"RowActions.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/datasets/RowActions.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,MAAM,OAAO,CAAA;AAYzB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAG7D,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,iBAAiB,EAAE,OAAO,EAAE,CAAA;IAC5B,oBAAoB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;CACtE;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,OAAO,EACP,iBAAiB,EACjB,oBAAoB,GACrB,EAAE,eAAe,qBAoQjB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/core/components/viewers/map/datasets/RowActions.tsx"],"sourcesContent":["\"use client\"\r\n\r\n// Dependencies\r\nimport React from 'react'\r\nimport { usePermissions } from '../../../../store'\r\n\r\n// Utility functions\r\nimport { handleFavouriteDataset } from './utils'\r\n\r\n// Shadcn Components\r\nimport { Checkbox, Button } from '../../../ui/'\r\n\r\n// Icons\r\nimport * as LR from 'lucide-react'\r\nimport { DatasetsContext } from '../../../../store'\r\nimport type { Dataset } from '../../../../types/datasetTypes'\r\nimport { buildPublishedTileDatasets } from './src/publishedTiles'\r\n\r\ninterface RowActionsProps {\r\n dataset: Dataset\r\n favouriteDatasets: Dataset[]\r\n setFavouriteDatasets: React.Dispatch<React.SetStateAction<Dataset[]>>\r\n}\r\n\r\nexport default function RowActions({\r\n dataset,\r\n favouriteDatasets,\r\n setFavouriteDatasets,\r\n}: RowActionsProps) {\r\n // Permissions\r\n const { ability } = usePermissions()\r\n\r\n\r\n const { state: datasetsState, dispatch: datasetsDispatch } = React.useContext(DatasetsContext)\r\n const { addedDatasets } = datasetsState.datasets\r\n const orgDatasets = datasetsState.datasets.datasets\r\n\r\n // const [checked, setChecked] = useState(false);\r\n\r\n // Check if this specific dataset is in favourites\r\n const isFavourite = favouriteDatasets.some(item => item.name === dataset.name)\r\n\r\n // \"Checked\" means the dataset is applied to the map. All dataset types —\r\n // including Organizational (MinIO/Martin-hydrated uploads) — toggle their\r\n // membership in addedDatasets, which is the only list OpenDataLayers renders.\r\n // (Previously Organizational datasets toggled a `visible` flag on the\r\n // available list, which nothing renders from, so they never appeared.)\r\n const checked = addedDatasets.some(d => d.name === dataset.name)\r\n\r\n const handleApplyDataset = () => {\r\n if (!dataset) {\r\n console.error('No dataset provided in RowActions')\r\n return\r\n }\r\n\r\n const isAdded = addedDatasets.some(d => d.name === dataset.name)\r\n\r\n if (isAdded) {\r\n datasetsDispatch({\r\n type: 'REMOVE_DATASET_FROM_MAP',\r\n payload: { datasetId: dataset.id },\r\n })\r\n }\r\n else {\r\n datasetsDispatch({\r\n type: 'ADD_DATASET_TO_MAP',\r\n payload: { dataset: dataset },\r\n })\r\n }\r\n }\r\n\r\n const handleFavourite = handleFavouriteDataset(dataset, favouriteDatasets, setFavouriteDatasets)\r\n\r\n const [publishing, setPublishing] = React.useState(false)\r\n const [published, setPublished] = React.useState(false)\r\n\r\n const isOrgMinio = typeof dataset.id === 'string' && dataset.id.startsWith('org-minio-')\r\n const fileId = isOrgMinio\r\n ? Number(String(dataset.id).slice('org-minio-'.length))\r\n : null\r\n\r\n const tiledMatch = typeof dataset.id === 'string'\r\n ? /^org_(\\d+)_file_(\\d+)$/.exec(dataset.id)\r\n : null\r\n // A row is \"converted\" either because it IS the org_<orgId>_file_<fileId> tile\r\n // entry (organizational tab), or because it's the original open-data dataset\r\n // stamped with the published File it resolves to (every other tab). Either way\r\n // we show the un-publish action and drive it with this fileId.\r\n const tiledFileId = tiledMatch\r\n ? Number(tiledMatch[2])\r\n : (typeof dataset.publishedFileId === 'number' ? dataset.publishedFileId : null)\r\n\r\n const [unpublishing, setUnpublishing] = React.useState(false)\r\n const [unpublished, setUnpublished] = React.useState(false)\r\n\r\n const onUnpublish = async () => {\r\n if (tiledFileId == null) return\r\n if (!window.confirm(`Un-publish \"${dataset.name}\"? The Martin table will be dropped; the original GeoJSON in MinIO is untouched.`)) return\r\n setUnpublishing(true)\r\n try {\r\n const res = await fetch('/api/datasets/publish-tiles', {\r\n method: 'DELETE',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ fileId: tiledFileId }),\r\n })\r\n if (!res.ok) {\r\n const body = await res.json().catch(() => ({}))\r\n console.error('un-publish failed', res.status, body)\r\n window.alert(`Un-publish failed: ${body?.error ?? res.status}`)\r\n return\r\n }\r\n setUnpublished(true)\r\n datasetsDispatch({ type: 'REFRESH_ORG_DATASETS' })\r\n window.alert(`Un-published. The dataset list has been refreshed.`)\r\n }\r\n finally {\r\n setUnpublishing(false)\r\n }\r\n }\r\n\r\n const onPublish = async () => {\r\n if (fileId == null || Number.isNaN(fileId)) return\r\n setPublishing(true)\r\n try {\r\n const res = await fetch('/api/datasets/publish-tiles', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ fileId }),\r\n })\r\n if (!res.ok) {\r\n const body = await res.json().catch(() => ({}))\r\n console.error('publish-tiles failed', res.status, body)\r\n window.alert(`Publish failed: ${body?.error ?? res.status}`)\r\n return\r\n }\r\n const result = await res.json()\r\n setPublished(true)\r\n\r\n // Optimistically swap the MinIO upload row for its published-tile form so the\r\n // un-publish (CloudOff) icon shows immediately. The full org refetch below\r\n // (REFRESH_ORG_DATASETS) re-samples a vector tile per dataset to detect geometry,\r\n // which can take several seconds; without this the row only flips after that lands\r\n // (or after the dialog is reopened). The refetch reconciles this swap when it finishes.\r\n const tileBaseUrl = (process.env.NEXT_PUBLIC_MARTIN_SERVER_URL ?? '').replace(/\\/+$/, '')\r\n const minioId = `org-minio-${fileId}`\r\n const [optimistic] = buildPublishedTileDatasets(\r\n [{\r\n name: dataset.name,\r\n description: JSON.stringify({ tiledTable: result.table, geometryType: result.geometryType }),\r\n }],\r\n tileBaseUrl,\r\n { countrySubdivision: dataset.countrySubdivision ?? '', municipality: dataset.municipality ?? '' } as any,\r\n )\r\n if (optimistic) {\r\n const current = orgDatasets ?? []\r\n const swapped = current.some(d => d.id === minioId)\r\n ? current.map(d => (d.id === minioId ? optimistic : d))\r\n : [...current, optimistic]\r\n datasetsDispatch({ type: 'SET_DATASETS', payload: { datasets: swapped } })\r\n // Keep the map layer in sync if this dataset was already applied.\r\n if (addedDatasets.some(d => d.id === minioId)) {\r\n datasetsDispatch({ type: 'REMOVE_DATASET_FROM_MAP', payload: { datasetId: minioId } })\r\n datasetsDispatch({ type: 'ADD_DATASET_TO_MAP', payload: { dataset: optimistic } })\r\n }\r\n }\r\n\r\n datasetsDispatch({ type: 'REFRESH_ORG_DATASETS' })\r\n window.alert(\r\n `Tiled as ${result.table}. The dataset list has been refreshed.\\n\\n`\r\n + `Features ingested: ${result.featuresIngested}, skipped: ${result.featuresSkipped}.`,\r\n )\r\n }\r\n finally {\r\n setPublishing(false)\r\n }\r\n }\r\n\r\n // Catalog (open-data-portal) GeoJSON datasets: not a MinIO upload, not an already-tiled\r\n // table, carry a portal + are typed GeoJSON. MVT catalog datasets are already tiles.\r\n const isCatalogGeoJson =\r\n !isOrgMinio\r\n && tiledFileId == null\r\n && dataset.datasetType === 'GeoJSON'\r\n && !!dataset.portal\r\n && dataset.id != null\r\n\r\n const [publishingCatalog, setPublishingCatalog] = React.useState(false)\r\n const [publishedCatalog, setPublishedCatalog] = React.useState(false)\r\n\r\n const onPublishCatalog = async () => {\r\n if (!dataset.portal || dataset.id == null) return\r\n setPublishingCatalog(true)\r\n try {\r\n const res = await fetch('/api/datasets/publish-catalog-tiles', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ portal: dataset.portal, datasetId: dataset.id }),\r\n })\r\n if (!res.ok) {\r\n const body = await res.json().catch(() => ({}))\r\n console.error('publish-catalog-tiles failed', res.status, body)\r\n window.alert(`Publish failed: ${body?.error ?? res.status}`)\r\n return\r\n }\r\n const result = await res.json()\r\n setPublishedCatalog(true)\r\n datasetsDispatch({ type: 'REFRESH_ORG_DATASETS' })\r\n window.alert(\r\n `Tiled as ${result.table}. The dataset list has been refreshed.\\n\\n`\r\n + `Features ingested: ${result.featuresIngested}, skipped: ${result.featuresSkipped}.`,\r\n )\r\n }\r\n finally {\r\n setPublishingCatalog(false)\r\n }\r\n }\r\n\r\n return (\r\n <div className=\"flex items-center\">\r\n <Button\r\n size=\"icon\"\r\n variant=\"ghost\"\r\n // onClick={handleApplyDataset}\r\n className=\" hover:bg-transparent\"\r\n disabled={!ability.can('read', 'File')}\r\n >\r\n <Checkbox\r\n checked={checked}\r\n onCheckedChange={() => {\r\n handleApplyDataset()\r\n }}\r\n className=\"opacity-70 hover:opacity-100 data-[state=checked]:opacity-100 transition-opacity duration-200\"\r\n />\r\n </Button>\r\n\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className={`opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent ${isFavourite ? 'opacity-100' : ''}`}\r\n onClick={handleFavourite}\r\n disabled={!ability.can('read', 'File')}\r\n >\r\n <LR.Star\r\n color={`${isFavourite ? 'hsl(var(--chart-5))' : 'black'} `}\r\n fill={`${isFavourite ? 'hsl(var(--chart-5))' : 'none'} `}\r\n />\r\n </Button>\r\n\r\n {isOrgMinio && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n title={published ? 'Tiled' : 'Publish as vector tiles'}\r\n className=\"opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\"\r\n onClick={onPublish}\r\n disabled={publishing || published || !ability.can('update', 'File')}\r\n >\r\n <LR.UploadCloud color={published ? 'hsl(var(--chart-2))' : 'black'} />\r\n </Button>\r\n )}\r\n\r\n {isCatalogGeoJson && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n title={publishedCatalog ? 'Tiled' : 'Publish open-data dataset as vector tiles'}\r\n className=\"opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\"\r\n onClick={onPublishCatalog}\r\n disabled={publishingCatalog || publishedCatalog || !ability.can('update', 'File')}\r\n >\r\n <LR.CloudDownload color={publishedCatalog ? 'hsl(var(--chart-2))' : 'black'} />\r\n </Button>\r\n )}\r\n\r\n {tiledFileId != null && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n title={unpublished ? 'Un-published' : 'Un-publish vector tiles'}\r\n className=\"opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\"\r\n onClick={onUnpublish}\r\n disabled={unpublishing || unpublished || !ability.can('update', 'File')}\r\n >\r\n <LR.CloudOff color={unpublished ? 'hsl(var(--chart-5))' : 'black'} />\r\n </Button>\r\n )}\r\n </div>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/core/components/viewers/map/datasets/RowActions.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\n// Dependencies\r\nimport React from 'react'\r\nimport { usePermissions } from '../../../../store'\r\n\r\n// Utility functions\r\nimport { handleFavouriteDataset } from './utils'\r\n\r\n// Shadcn Components\r\nimport { Checkbox, Button } from '../../../ui/'\r\n\r\n// Icons\r\nimport * as LR from 'lucide-react'\r\nimport { DatasetsContext } from '../../../../store'\r\nimport type { Dataset } from '../../../../types/datasetTypes'\r\nimport { buildPublishedTileDatasets } from './src/publishedTiles'\r\n\r\ninterface RowActionsProps {\r\n dataset: Dataset\r\n favouriteDatasets: Dataset[]\r\n setFavouriteDatasets: React.Dispatch<React.SetStateAction<Dataset[]>>\r\n}\r\n\r\nexport default function RowActions({\r\n dataset,\r\n favouriteDatasets,\r\n setFavouriteDatasets,\r\n}: RowActionsProps) {\r\n // Permissions\r\n const { ability } = usePermissions()\r\n\r\n\r\n const { state: datasetsState, dispatch: datasetsDispatch } = React.useContext(DatasetsContext)\r\n const { addedDatasets } = datasetsState.datasets\r\n const orgDatasets = datasetsState.datasets.datasets\r\n\r\n // const [checked, setChecked] = useState(false);\r\n\r\n // Check if this specific dataset is in favourites\r\n const isFavourite = favouriteDatasets.some(item => item.name === dataset.name)\r\n\r\n // \"Checked\" means the dataset is applied to the map. All dataset types —\r\n // including Organizational (MinIO/Martin-hydrated uploads) — toggle their\r\n // membership in addedDatasets, which is the only list OpenDataLayers renders.\r\n // (Previously Organizational datasets toggled a `visible` flag on the\r\n // available list, which nothing renders from, so they never appeared.)\r\n const checked = addedDatasets.some(d => d.name === dataset.name)\r\n\r\n const handleApplyDataset = () => {\r\n if (!dataset) {\r\n console.error('No dataset provided in RowActions')\r\n return\r\n }\r\n\r\n const isAdded = addedDatasets.some(d => d.name === dataset.name)\r\n\r\n if (isAdded) {\r\n datasetsDispatch({\r\n type: 'REMOVE_DATASET_FROM_MAP',\r\n payload: { datasetId: dataset.id },\r\n })\r\n }\r\n else {\r\n datasetsDispatch({\r\n type: 'ADD_DATASET_TO_MAP',\r\n payload: { dataset: dataset },\r\n })\r\n }\r\n }\r\n\r\n const handleFavourite = handleFavouriteDataset(dataset, favouriteDatasets, setFavouriteDatasets)\r\n\r\n const [publishing, setPublishing] = React.useState(false)\r\n const [published, setPublished] = React.useState(false)\r\n\r\n const isOrgMinio = typeof dataset.id === 'string' && dataset.id.startsWith('org-minio-')\r\n const fileId = isOrgMinio\r\n ? Number(String(dataset.id).slice('org-minio-'.length))\r\n : null\r\n\r\n const tiledMatch = typeof dataset.id === 'string'\r\n ? /^org_(\\d+)_file_(\\d+)$/.exec(dataset.id)\r\n : null\r\n // A row is \"converted\" either because it IS the org_<orgId>_file_<fileId> tile\r\n // entry (organizational tab), or because it's the original open-data dataset\r\n // stamped with the published File it resolves to (every other tab). Either way\r\n // we show the un-publish action and drive it with this fileId.\r\n const tiledFileId = tiledMatch\r\n ? Number(tiledMatch[2])\r\n : (typeof dataset.publishedFileId === 'number' ? dataset.publishedFileId : null)\r\n\r\n const [unpublishing, setUnpublishing] = React.useState(false)\r\n const [unpublished, setUnpublished] = React.useState(false)\r\n\r\n const onUnpublish = async () => {\r\n if (tiledFileId == null) return\r\n if (!window.confirm(`Un-publish \"${dataset.name}\"? The Martin table will be dropped; the original GeoJSON in MinIO is untouched.`)) return\r\n setUnpublishing(true)\r\n try {\r\n const res = await fetch('/api/datasets/publish-tiles', {\r\n method: 'DELETE',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ fileId: tiledFileId }),\r\n })\r\n if (!res.ok) {\r\n const body = await res.json().catch(() => ({}))\r\n console.error('un-publish failed', res.status, body)\r\n window.alert(`Un-publish failed: ${body?.error ?? res.status}`)\r\n return\r\n }\r\n setUnpublished(true)\r\n datasetsDispatch({ type: 'REFRESH_ORG_DATASETS' })\r\n window.alert(`Un-published. The dataset list has been refreshed.`)\r\n }\r\n finally {\r\n setUnpublishing(false)\r\n }\r\n }\r\n\r\n const onPublish = async () => {\r\n if (fileId == null || Number.isNaN(fileId)) return\r\n setPublishing(true)\r\n try {\r\n const res = await fetch('/api/datasets/publish-tiles', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ fileId }),\r\n })\r\n if (!res.ok) {\r\n const body = await res.json().catch(() => ({}))\r\n console.error('publish-tiles failed', res.status, body)\r\n window.alert(`Publish failed: ${body?.error ?? res.status}`)\r\n return\r\n }\r\n const result = await res.json()\r\n setPublished(true)\r\n\r\n // Optimistically swap the MinIO upload row for its published-tile form so the\r\n // un-publish (CloudOff) icon shows immediately. The full org refetch below\r\n // (REFRESH_ORG_DATASETS) re-samples a vector tile per dataset to detect geometry,\r\n // which can take several seconds; without this the row only flips after that lands\r\n // (or after the dialog is reopened). The refetch reconciles this swap when it finishes.\r\n const tileBaseUrl = (process.env.NEXT_PUBLIC_MARTIN_SERVER_URL ?? '').replace(/\\/+$/, '')\r\n const minioId = `org-minio-${fileId}`\r\n const [optimistic] = buildPublishedTileDatasets(\r\n [{\r\n name: dataset.name,\r\n description: JSON.stringify({ tiledTable: result.table, geometryType: result.geometryType }),\r\n }],\r\n tileBaseUrl,\r\n { countrySubdivision: dataset.countrySubdivision ?? '', municipality: dataset.municipality ?? '' } as any,\r\n )\r\n if (optimistic) {\r\n const current = orgDatasets ?? []\r\n const swapped = current.some(d => d.id === minioId)\r\n ? current.map(d => (d.id === minioId ? optimistic : d))\r\n : [...current, optimistic]\r\n datasetsDispatch({ type: 'SET_DATASETS', payload: { datasets: swapped } })\r\n // Keep the map layer in sync if this dataset was already applied.\r\n if (addedDatasets.some(d => d.id === minioId)) {\r\n datasetsDispatch({ type: 'REMOVE_DATASET_FROM_MAP', payload: { datasetId: minioId } })\r\n datasetsDispatch({ type: 'ADD_DATASET_TO_MAP', payload: { dataset: optimistic } })\r\n }\r\n }\r\n\r\n datasetsDispatch({ type: 'REFRESH_ORG_DATASETS' })\r\n window.alert(\r\n `Tiled as ${result.table}. The dataset list has been refreshed.\\n\\n`\r\n + `Features ingested: ${result.featuresIngested}, skipped: ${result.featuresSkipped}.`,\r\n )\r\n }\r\n finally {\r\n setPublishing(false)\r\n }\r\n }\r\n\r\n // Catalog (open-data-portal) GeoJSON datasets: not a MinIO upload, not an already-tiled\r\n // table, carry a portal + are typed GeoJSON. MVT catalog datasets are already tiles.\r\n const isCatalogGeoJson =\r\n !isOrgMinio\r\n && tiledFileId == null\r\n && dataset.datasetType === 'GeoJSON'\r\n && !!dataset.portal\r\n && dataset.id != null\r\n\r\n const [publishingCatalog, setPublishingCatalog] = React.useState(false)\r\n const [publishedCatalog, setPublishedCatalog] = React.useState(false)\r\n\r\n const onPublishCatalog = async () => {\r\n if (!dataset.portal || dataset.id == null) return\r\n setPublishingCatalog(true)\r\n try {\r\n const res = await fetch('/api/datasets/publish-catalog-tiles', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ portal: dataset.portal, datasetId: dataset.id }),\r\n })\r\n if (!res.ok) {\r\n const body = await res.json().catch(() => ({}))\r\n console.error('publish-catalog-tiles failed', res.status, body)\r\n window.alert(`Publish failed: ${body?.error ?? res.status}`)\r\n return\r\n }\r\n const result = await res.json()\r\n setPublishedCatalog(true)\r\n datasetsDispatch({ type: 'REFRESH_ORG_DATASETS' })\r\n window.alert(\r\n `Tiled as ${result.table}. The dataset list has been refreshed.\\n\\n`\r\n + `Features ingested: ${result.featuresIngested}, skipped: ${result.featuresSkipped}.`,\r\n )\r\n }\r\n finally {\r\n setPublishingCatalog(false)\r\n }\r\n }\r\n\r\n return (\r\n <div className=\"flex items-center\">\r\n <Button\r\n size=\"icon\"\r\n variant=\"ghost\"\r\n // onClick={handleApplyDataset}\r\n className=\" hover:bg-transparent\"\r\n disabled={!ability.can('read', 'File')}\r\n >\r\n <Checkbox\r\n checked={checked}\r\n onCheckedChange={() => {\r\n handleApplyDataset()\r\n }}\r\n className=\"opacity-70 hover:opacity-100 data-[state=checked]:opacity-100 transition-opacity duration-200\"\r\n />\r\n </Button>\r\n\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className={`opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent ${isFavourite ? 'opacity-100' : ''}`}\r\n onClick={handleFavourite}\r\n disabled={!ability.can('read', 'File')}\r\n >\r\n <LR.Star\r\n color={`${isFavourite ? 'hsl(var(--chart-5))' : 'black'} `}\r\n fill={`${isFavourite ? 'hsl(var(--chart-5))' : 'none'} `}\r\n />\r\n </Button>\r\n\r\n {isOrgMinio && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n title={published ? 'Tiled' : 'Publish as vector tiles'}\r\n className=\"opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\"\r\n onClick={onPublish}\r\n disabled={publishing || published || !ability.can('update', 'File')}\r\n >\r\n <LR.UploadCloud color={published ? 'hsl(var(--chart-2))' : 'black'} />\r\n </Button>\r\n )}\r\n\r\n {isCatalogGeoJson && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n title={publishedCatalog ? 'Tiled' : 'Publish open-data dataset as vector tiles'}\r\n className=\"opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\"\r\n onClick={onPublishCatalog}\r\n disabled={publishingCatalog || publishedCatalog || !ability.can('update', 'File')}\r\n >\r\n <LR.CloudDownload color={publishedCatalog ? 'hsl(var(--chart-2))' : 'black'} />\r\n </Button>\r\n )}\r\n\r\n {tiledFileId != null && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n title={unpublished ? 'Un-published' : 'Un-publish vector tiles'}\r\n className=\"opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\"\r\n onClick={onUnpublish}\r\n disabled={unpublishing || unpublished || !ability.can('update', 'File')}\r\n >\r\n <LR.CloudOff color={unpublished ? 'hsl(var(--chart-5))' : 'black'} />\r\n </Button>\r\n )}\r\n </div>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/datasets/data.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AASjD,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,UAAU,CAAC,KAAK,GAAG,OAAO,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,CAqGhE"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/datasets/data.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AASjD,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,UAAU,CAAC,KAAK,GAAG,OAAO,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,CAqGhE"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/core/components/viewers/map/datasets/data.tsx"],"sourcesContent":["// Dependencies\r\nimport * as React from 'react'\r\nimport type { Dataset } from '../../../../types/datasetTypes'\r\nimport { ColumnDef } from '@tanstack/react-table'\r\nimport { useTranslations } from 'next-intl'\r\n\r\n// Shadcn Components\r\nimport { Button } from '../../../../components/ui/Button'\r\n\r\nimport { ArrowUpDown, ArrowUp, ArrowDown } from 'lucide-react'\r\nimport { MapContext } from '../../../../store/Map/context'\r\n\r\nexport interface ColumnMeta {\r\n columnClasses: string\r\n}\r\n\r\nexport function useColumns<TData = Dataset>(): ColumnDef<TData>[] {\r\n // Translation\r\n const t = useTranslations('DataColumns')\r\n\r\n const { state: mapState } = React.useContext(MapContext)\r\n const countrySubdivisionsData = mapState.map.countrySubdivisionsData\r\n\r\n const getSubdivisionName = (code: string | undefined | null): string => {\r\n if (!code) return ''\r\n if (!countrySubdivisionsData) return code\r\n const exact = countrySubdivisionsData[code] as any\r\n if (exact) return (exact?.name ?? exact) || code\r\n const entry = Object.entries(countrySubdivisionsData).find(([k]) => k.endsWith(`-${code}`))\r\n if (entry) return ((entry[1] as any)?.name ?? entry[1]) || code\r\n return code\r\n }\r\n\r\n return [\r\n {\r\n accessorKey: 'name',\r\n header: ({ column }) => {\r\n const isSorted = column.getIsSorted()\r\n return (\r\n <Button\r\n variant=\"ghost\"\r\n onClick={column.getToggleSortingHandler()}\r\n className=\"hover:bg-transparent p-0\"\r\n >\r\n {t('name')}\r\n {isSorted == false && <ArrowUpDown />}\r\n {isSorted === 'desc' && <ArrowDown className=\"text-black\" />}\r\n {isSorted === 'asc' && <ArrowUp className=\"text-black\" />}\r\n </Button>\r\n )\r\n },\r\n enableSorting: true,\r\n cell: ({ getValue }) => {\r\n const value = getValue() as string\r\n return (\r\n <div className=\"max-w-md truncate\" title={value}>\r\n {value}\r\n </div>\r\n )\r\n },\r\n meta: { columnClasses: 'max-w-md' } as ColumnMeta,\r\n },\r\n {\r\n accessorKey: 'countrySubdivision',\r\n header: t('countrySubdivision'),\r\n cell: ({ getValue }) => {\r\n const code = getValue() as string\r\n const name = getSubdivisionName(code)\r\n return (\r\n <div className=\"whitespace-nowrap\" title={code}>\r\n {name}\r\n </div>\r\n )\r\n },\r\n meta: { columnClasses: '!hidden md:!table-cell whitespace-nowrap' } as ColumnMeta,\r\n },\r\n {\r\n accessorKey: 'municipality',\r\n header: t('municipality'),\r\n cell: ({ getValue }) => {\r\n const value = getValue() as string\r\n return (\r\n <div className=\"whitespace-nowrap\" title={value}>\r\n {value}\r\n </div>\r\n )\r\n },\r\n meta: { columnClasses: '!hidden md:!table-cell whitespace-nowrap' } as ColumnMeta,\r\n },\r\n {\r\n id: 'source',\r\n accessorFn: (row: any) => row?.portal?.name ?? row?.publisher ?? '',\r\n header: t('source'),\r\n cell: ({ getValue }) => {\r\n const value = (getValue() as string) || ''\r\n return (\r\n <div className=\"whitespace-nowrap max-w-[240px] truncate\" title={value}>\r\n {value}\r\n </div>\r\n )\r\n },\r\n meta: { columnClasses: '!hidden md:!table-cell whitespace-nowrap' } as ColumnMeta,\r\n },\r\n {\r\n accessorKey: 'type',\r\n header: t('type'),\r\n cell: ({ getValue }) => {\r\n const value = getValue() as string\r\n return (\r\n <div className=\"whitespace-nowrap\" title={value}>\r\n {value}\r\n </div>\r\n )\r\n },\r\n meta: { columnClasses: 'whitespace-nowrap' } as ColumnMeta,\r\n },\r\n ]\r\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/core/components/viewers/map/datasets/data.tsx"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\n// Dependencies\r\nimport * as React from 'react'\r\nimport type { Dataset } from '../../../../types/datasetTypes'\r\nimport { ColumnDef } from '@tanstack/react-table'\r\nimport { useTranslations } from 'next-intl'\r\n\r\n// Shadcn Components\r\nimport { Button } from '../../../../components/ui/Button'\r\n\r\nimport { ArrowUpDown, ArrowUp, ArrowDown } from 'lucide-react'\r\nimport { MapContext } from '../../../../store/Map/context'\r\n\r\nexport interface ColumnMeta {\r\n columnClasses: string\r\n}\r\n\r\nexport function useColumns<TData = Dataset>(): ColumnDef<TData>[] {\r\n // Translation\r\n const t = useTranslations('DataColumns')\r\n\r\n const { state: mapState } = React.useContext(MapContext)\r\n const countrySubdivisionsData = mapState.map.countrySubdivisionsData\r\n\r\n const getSubdivisionName = (code: string | undefined | null): string => {\r\n if (!code) return ''\r\n if (!countrySubdivisionsData) return code\r\n const exact = countrySubdivisionsData[code] as any\r\n if (exact) return (exact?.name ?? exact) || code\r\n const entry = Object.entries(countrySubdivisionsData).find(([k]) => k.endsWith(`-${code}`))\r\n if (entry) return ((entry[1] as any)?.name ?? entry[1]) || code\r\n return code\r\n }\r\n\r\n return [\r\n {\r\n accessorKey: 'name',\r\n header: ({ column }) => {\r\n const isSorted = column.getIsSorted()\r\n return (\r\n <Button\r\n variant=\"ghost\"\r\n onClick={column.getToggleSortingHandler()}\r\n className=\"hover:bg-transparent p-0\"\r\n >\r\n {t('name')}\r\n {isSorted == false && <ArrowUpDown />}\r\n {isSorted === 'desc' && <ArrowDown className=\"text-black\" />}\r\n {isSorted === 'asc' && <ArrowUp className=\"text-black\" />}\r\n </Button>\r\n )\r\n },\r\n enableSorting: true,\r\n cell: ({ getValue }) => {\r\n const value = getValue() as string\r\n return (\r\n <div className=\"max-w-md truncate\" title={value}>\r\n {value}\r\n </div>\r\n )\r\n },\r\n meta: { columnClasses: 'max-w-md' } as ColumnMeta,\r\n },\r\n {\r\n accessorKey: 'countrySubdivision',\r\n header: t('countrySubdivision'),\r\n cell: ({ getValue }) => {\r\n const code = getValue() as string\r\n const name = getSubdivisionName(code)\r\n return (\r\n <div className=\"whitespace-nowrap\" title={code}>\r\n {name}\r\n </div>\r\n )\r\n },\r\n meta: { columnClasses: '!hidden md:!table-cell whitespace-nowrap' } as ColumnMeta,\r\n },\r\n {\r\n accessorKey: 'municipality',\r\n header: t('municipality'),\r\n cell: ({ getValue }) => {\r\n const value = getValue() as string\r\n return (\r\n <div className=\"whitespace-nowrap\" title={value}>\r\n {value}\r\n </div>\r\n )\r\n },\r\n meta: { columnClasses: '!hidden md:!table-cell whitespace-nowrap' } as ColumnMeta,\r\n },\r\n {\r\n id: 'source',\r\n accessorFn: (row: any) => row?.portal?.name ?? row?.publisher ?? '',\r\n header: t('source'),\r\n cell: ({ getValue }) => {\r\n const value = (getValue() as string) || ''\r\n return (\r\n <div className=\"whitespace-nowrap max-w-[240px] truncate\" title={value}>\r\n {value}\r\n </div>\r\n )\r\n },\r\n meta: { columnClasses: '!hidden md:!table-cell whitespace-nowrap' } as ColumnMeta,\r\n },\r\n {\r\n accessorKey: 'type',\r\n header: t('type'),\r\n cell: ({ getValue }) => {\r\n const value = getValue() as string\r\n return (\r\n <div className=\"whitespace-nowrap\" title={value}>\r\n {value}\r\n </div>\r\n )\r\n },\r\n meta: { columnClasses: 'whitespace-nowrap' } as ColumnMeta,\r\n },\r\n ]\r\n}\r\n"],"mappings":"AA0CU,SAMwB,KANxB;AAtCV,YAAY,WAAW;AAGvB,SAAS,uBAAuB;AAGhC,SAAS,cAAc;AAEvB,SAAS,aAAa,SAAS,iBAAiB;AAChD,SAAS,kBAAkB;AAMpB,SAAS,aAAkD;AAEhE,QAAM,IAAI,gBAAgB,aAAa;AAEvC,QAAM,EAAE,OAAO,SAAS,IAAI,MAAM,WAAW,UAAU;AACvD,QAAM,0BAA0B,SAAS,IAAI;AAE7C,QAAM,qBAAqB,CAAC,SAA4C;AA1B1E;AA2BI,QAAI,CAAC,KAAM,QAAO;AAClB,QAAI,CAAC,wBAAyB,QAAO;AACrC,UAAM,QAAQ,wBAAwB,IAAI;AAC1C,QAAI,MAAO,UAAQ,oCAAO,SAAP,YAAe,UAAU;AAC5C,UAAM,QAAQ,OAAO,QAAQ,uBAAuB,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC;AAC1F,QAAI,MAAO,UAAS,iBAAM,CAAC,MAAP,mBAAkB,SAAlB,YAA0B,MAAM,CAAC,MAAM;AAC3D,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,MACE,aAAa;AAAA,MACb,QAAQ,CAAC,EAAE,OAAO,MAAM;AACtB,cAAM,WAAW,OAAO,YAAY;AACpC,eACE;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,SAAS,OAAO,wBAAwB;AAAA,YACxC,WAAU;AAAA,YAET;AAAA,gBAAE,MAAM;AAAA,cACR,YAAY,SAAS,oBAAC,eAAY;AAAA,cAClC,aAAa,UAAU,oBAAC,aAAU,WAAU,cAAa;AAAA,cACzD,aAAa,SAAS,oBAAC,WAAQ,WAAU,cAAa;AAAA;AAAA;AAAA,QACzD;AAAA,MAEJ;AAAA,MACA,eAAe;AAAA,MACf,MAAM,CAAC,EAAE,SAAS,MAAM;AACtB,cAAM,QAAQ,SAAS;AACvB,eACE,oBAAC,SAAI,WAAU,qBAAoB,OAAO,OACvC,iBACH;AAAA,MAEJ;AAAA,MACA,MAAM,EAAE,eAAe,WAAW;AAAA,IACpC;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,QAAQ,EAAE,oBAAoB;AAAA,MAC9B,MAAM,CAAC,EAAE,SAAS,MAAM;AACtB,cAAM,OAAO,SAAS;AACtB,cAAM,OAAO,mBAAmB,IAAI;AACpC,eACE,oBAAC,SAAI,WAAU,qBAAoB,OAAO,MACvC,gBACH;AAAA,MAEJ;AAAA,MACA,MAAM,EAAE,eAAe,2CAA2C;AAAA,IACpE;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,QAAQ,EAAE,cAAc;AAAA,MACxB,MAAM,CAAC,EAAE,SAAS,MAAM;AACtB,cAAM,QAAQ,SAAS;AACvB,eACE,oBAAC,SAAI,WAAU,qBAAoB,OAAO,OACvC,iBACH;AAAA,MAEJ;AAAA,MACA,MAAM,EAAE,eAAe,2CAA2C;AAAA,IACpE;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,YAAY,CAAC,QAAU;AA9F7B;AA8FgC,4DAAK,WAAL,mBAAa,SAAb,YAAqB,2BAAK,cAA1B,YAAuC;AAAA;AAAA,MACjE,QAAQ,EAAE,QAAQ;AAAA,MAClB,MAAM,CAAC,EAAE,SAAS,MAAM;AACtB,cAAM,QAAS,SAAS,KAAgB;AACxC,eACE,oBAAC,SAAI,WAAU,4CAA2C,OAAO,OAC9D,iBACH;AAAA,MAEJ;AAAA,MACA,MAAM,EAAE,eAAe,2CAA2C;AAAA,IACpE;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,QAAQ,EAAE,MAAM;AAAA,MAChB,MAAM,CAAC,EAAE,SAAS,MAAM;AACtB,cAAM,QAAQ,SAAS;AACvB,eACE,oBAAC,SAAI,WAAU,qBAAoB,OAAO,OACvC,iBACH;AAAA,MAEJ;AAAA,MACA,MAAM,EAAE,eAAe,oBAAoB;AAAA,IAC7C;AAAA,EACF;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/datasets/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAM,KAAK,MAAM,OAAO,CAAA;AAsG/B,KAAK,aAAa,GAAG;IACnB,MAAM,EAAE,OAAO,CAAA;IACf,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CACzC,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,aAAa,qBAkkB1E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/datasets/index.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAM,KAAK,MAAM,OAAO,CAAA;AAsG/B,KAAK,aAAa,GAAG;IACnB,MAAM,EAAE,OAAO,CAAA;IACf,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CACzC,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,aAAa,qBAkkB1E"}