@collabdt/core 0.0.56 → 0.2.0

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 (319) hide show
  1. package/README.md +4 -26
  2. package/dist/core/components/AppSidebarContent.d.ts +2 -1
  3. package/dist/core/components/AppSidebarContent.d.ts.map +1 -1
  4. package/dist/core/components/AppSidebarContent.js +10 -7
  5. package/dist/core/components/AppSidebarContent.js.map +1 -1
  6. package/dist/core/components/Toolbar.d.ts +7 -1
  7. package/dist/core/components/Toolbar.d.ts.map +1 -1
  8. package/dist/core/components/Toolbar.js +3 -3
  9. package/dist/core/components/Toolbar.js.map +1 -1
  10. package/dist/core/components/TopNavigationBar.d.ts +6 -1
  11. package/dist/core/components/TopNavigationBar.d.ts.map +1 -1
  12. package/dist/core/components/TopNavigationBar.js +2 -2
  13. package/dist/core/components/TopNavigationBar.js.map +1 -1
  14. package/dist/core/components/authentication/AuthPage.d.ts +2 -1
  15. package/dist/core/components/authentication/AuthPage.d.ts.map +1 -1
  16. package/dist/core/components/authentication/AuthPage.js +3 -5
  17. package/dist/core/components/authentication/AuthPage.js.map +1 -1
  18. package/dist/core/components/authentication/Signin.d.ts +2 -1
  19. package/dist/core/components/authentication/Signin.d.ts.map +1 -1
  20. package/dist/core/components/authentication/Signin.js +2 -2
  21. package/dist/core/components/authentication/Signin.js.map +1 -1
  22. package/dist/core/components/organizationConfig/src/organizationConfigContent.d.ts.map +1 -1
  23. package/dist/core/components/organizationConfig/src/organizationConfigContent.js +109 -36
  24. package/dist/core/components/organizationConfig/src/organizationConfigContent.js.map +1 -1
  25. package/dist/core/components/settings/index.d.ts +3 -1
  26. package/dist/core/components/settings/index.d.ts.map +1 -1
  27. package/dist/core/components/settings/index.js +2 -2
  28. package/dist/core/components/settings/index.js.map +1 -1
  29. package/dist/core/components/settings/src/AccountSettingsPanel.d.ts.map +1 -1
  30. package/dist/core/components/settings/src/AccountSettingsPanel.js +9 -2
  31. package/dist/core/components/settings/src/AccountSettingsPanel.js.map +1 -1
  32. package/dist/core/components/settings/src/OrganizationSettingsPanel.d.ts +5 -1
  33. package/dist/core/components/settings/src/OrganizationSettingsPanel.d.ts.map +1 -1
  34. package/dist/core/components/settings/src/OrganizationSettingsPanel.js +7 -5
  35. package/dist/core/components/settings/src/OrganizationSettingsPanel.js.map +1 -1
  36. package/dist/core/components/settings/src/SettingsContent.d.ts +2 -1
  37. package/dist/core/components/settings/src/SettingsContent.d.ts.map +1 -1
  38. package/dist/core/components/settings/src/SettingsContent.js +2 -2
  39. package/dist/core/components/settings/src/SettingsContent.js.map +1 -1
  40. package/dist/core/components/support/BugReportDialog.d.ts +3 -2
  41. package/dist/core/components/support/BugReportDialog.d.ts.map +1 -1
  42. package/dist/core/components/support/BugReportDialog.js +103 -25
  43. package/dist/core/components/support/BugReportDialog.js.map +1 -1
  44. package/dist/core/components/support/FeatureRequestDialog.d.ts +3 -1
  45. package/dist/core/components/support/FeatureRequestDialog.d.ts.map +1 -1
  46. package/dist/core/components/support/FeatureRequestDialog.js +39 -4
  47. package/dist/core/components/support/FeatureRequestDialog.js.map +1 -1
  48. package/dist/core/components/support/SupportMenu.d.ts.map +1 -1
  49. package/dist/core/components/support/SupportMenu.js +1 -4
  50. package/dist/core/components/support/SupportMenu.js.map +1 -1
  51. package/dist/core/components/ui/AnimatedBackground.d.ts +2 -1
  52. package/dist/core/components/ui/AnimatedBackground.d.ts.map +1 -1
  53. package/dist/core/components/ui/AnimatedBackground.js +2 -5
  54. package/dist/core/components/ui/AnimatedBackground.js.map +1 -1
  55. package/dist/core/components/ui/InfoSidebar/Container.d.ts +3 -1
  56. package/dist/core/components/ui/InfoSidebar/Container.d.ts.map +1 -1
  57. package/dist/core/components/ui/InfoSidebar/Container.js +4 -2
  58. package/dist/core/components/ui/InfoSidebar/Container.js.map +1 -1
  59. package/dist/core/components/ui/InfoSidebar/Header.d.ts +3 -2
  60. package/dist/core/components/ui/InfoSidebar/Header.d.ts.map +1 -1
  61. package/dist/core/components/ui/InfoSidebar/Header.js +5 -6
  62. package/dist/core/components/ui/InfoSidebar/Header.js.map +1 -1
  63. package/dist/core/components/ui/InfoSidebar/index.d.ts +7 -1
  64. package/dist/core/components/ui/InfoSidebar/index.d.ts.map +1 -1
  65. package/dist/core/components/ui/InfoSidebar/index.js +4 -4
  66. package/dist/core/components/ui/InfoSidebar/index.js.map +1 -1
  67. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts +2 -1
  68. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts.map +1 -1
  69. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js +3 -4
  70. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js.map +1 -1
  71. package/dist/core/components/ui/Sensors/SensorsSection.d.ts +3 -1
  72. package/dist/core/components/ui/Sensors/SensorsSection.d.ts.map +1 -1
  73. package/dist/core/components/ui/Sensors/SensorsSection.js +3 -1
  74. package/dist/core/components/ui/Sensors/SensorsSection.js.map +1 -1
  75. package/dist/core/components/ui/Sidebar.d.ts +8 -0
  76. package/dist/core/components/ui/Sidebar.d.ts.map +1 -1
  77. package/dist/core/components/ui/Sidebar.js +21 -7
  78. package/dist/core/components/ui/Sidebar.js.map +1 -1
  79. package/dist/core/components/ui/ToolbarButton.js +18 -1
  80. package/dist/core/components/ui/ToolbarButton.js.map +1 -1
  81. package/dist/core/components/viewers/Data/DataMenu.d.ts +5 -1
  82. package/dist/core/components/viewers/Data/DataMenu.d.ts.map +1 -1
  83. package/dist/core/components/viewers/Data/DataMenu.js +15 -4
  84. package/dist/core/components/viewers/Data/DataMenu.js.map +1 -1
  85. package/dist/core/components/viewers/Data/HeaderButtons.d.ts +3 -1
  86. package/dist/core/components/viewers/Data/HeaderButtons.d.ts.map +1 -1
  87. package/dist/core/components/viewers/Data/HeaderButtons.js +11 -14
  88. package/dist/core/components/viewers/Data/HeaderButtons.js.map +1 -1
  89. package/dist/core/components/viewers/Data/MoreOptions.d.ts.map +1 -1
  90. package/dist/core/components/viewers/Data/MoreOptions.js +14 -27
  91. package/dist/core/components/viewers/Data/MoreOptions.js.map +1 -1
  92. package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.d.ts +3 -1
  93. package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.d.ts.map +1 -1
  94. package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.js +4 -2
  95. package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.js.map +1 -1
  96. package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.d.ts.map +1 -1
  97. package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.js +13 -18
  98. package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.js.map +1 -1
  99. package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.d.ts +3 -1
  100. package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.d.ts.map +1 -1
  101. package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.js +3 -1
  102. package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.js.map +1 -1
  103. package/dist/core/components/viewers/Data/details/DetailHeader.d.ts +2 -1
  104. package/dist/core/components/viewers/Data/details/DetailHeader.d.ts.map +1 -1
  105. package/dist/core/components/viewers/Data/details/DetailHeader.js +3 -5
  106. package/dist/core/components/viewers/Data/details/DetailHeader.js.map +1 -1
  107. package/dist/core/components/viewers/Data/details/FieldValue.d.ts.map +1 -1
  108. package/dist/core/components/viewers/Data/details/FieldValue.js +13 -3
  109. package/dist/core/components/viewers/Data/details/FieldValue.js.map +1 -1
  110. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.d.ts +2 -0
  111. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.d.ts.map +1 -1
  112. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js +84 -3
  113. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js.map +1 -1
  114. package/dist/core/components/viewers/Data/siteDetails/SiteDetails.d.ts.map +1 -1
  115. package/dist/core/components/viewers/Data/siteDetails/SiteDetails.js +23 -2
  116. package/dist/core/components/viewers/Data/siteDetails/SiteDetails.js.map +1 -1
  117. package/dist/core/components/viewers/Viewer.d.ts +7 -1
  118. package/dist/core/components/viewers/Viewer.d.ts.map +1 -1
  119. package/dist/core/components/viewers/Viewer.js +6 -6
  120. package/dist/core/components/viewers/Viewer.js.map +1 -1
  121. package/dist/core/components/viewers/bim/BimToolbar.d.ts +3 -1
  122. package/dist/core/components/viewers/bim/BimToolbar.d.ts.map +1 -1
  123. package/dist/core/components/viewers/bim/BimToolbar.js +2 -2
  124. package/dist/core/components/viewers/bim/BimToolbar.js.map +1 -1
  125. package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.d.ts +3 -1
  126. package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.d.ts.map +1 -1
  127. package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.js +2 -2
  128. package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.js.map +1 -1
  129. package/dist/core/components/viewers/bim/src/BimSidebar/src/index.d.ts +5 -1
  130. package/dist/core/components/viewers/bim/src/BimSidebar/src/index.d.ts.map +1 -1
  131. package/dist/core/components/viewers/bim/src/BimSidebar/src/index.js +3 -2
  132. package/dist/core/components/viewers/bim/src/BimSidebar/src/index.js.map +1 -1
  133. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.d.ts +3 -1
  134. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.d.ts.map +1 -1
  135. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js +2 -2
  136. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js.map +1 -1
  137. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.d.ts +1 -1
  138. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.d.ts.map +1 -1
  139. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.js +3 -5
  140. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.js.map +1 -1
  141. package/dist/core/components/viewers/bim/src/tools/bimToolbar.d.ts +3 -1
  142. package/dist/core/components/viewers/bim/src/tools/bimToolbar.d.ts.map +1 -1
  143. package/dist/core/components/viewers/bim/src/tools/bimToolbar.js +4 -2
  144. package/dist/core/components/viewers/bim/src/tools/bimToolbar.js.map +1 -1
  145. package/dist/core/components/viewers/map/MapViewer.d.ts +3 -1
  146. package/dist/core/components/viewers/map/MapViewer.d.ts.map +1 -1
  147. package/dist/core/components/viewers/map/MapViewer.js +2 -2
  148. package/dist/core/components/viewers/map/MapViewer.js.map +1 -1
  149. package/dist/core/components/viewers/map/datasets/RowActions.d.ts +2 -1
  150. package/dist/core/components/viewers/map/datasets/RowActions.d.ts.map +1 -1
  151. package/dist/core/components/viewers/map/datasets/RowActions.js +5 -6
  152. package/dist/core/components/viewers/map/datasets/RowActions.js.map +1 -1
  153. package/dist/core/components/viewers/map/datasets/index.d.ts +5 -1
  154. package/dist/core/components/viewers/map/datasets/index.d.ts.map +1 -1
  155. package/dist/core/components/viewers/map/datasets/index.js +15 -16
  156. package/dist/core/components/viewers/map/datasets/index.js.map +1 -1
  157. package/dist/core/components/viewers/map/src/Geocoder.d.ts +3 -1
  158. package/dist/core/components/viewers/map/src/Geocoder.d.ts.map +1 -1
  159. package/dist/core/components/viewers/map/src/Geocoder.js +5 -1
  160. package/dist/core/components/viewers/map/src/Geocoder.js.map +1 -1
  161. package/dist/core/components/viewers/map/src/MapLayers/index.d.ts +6 -1
  162. package/dist/core/components/viewers/map/src/MapLayers/index.d.ts.map +1 -1
  163. package/dist/core/components/viewers/map/src/MapLayers/index.js +5 -3
  164. package/dist/core/components/viewers/map/src/MapLayers/index.js.map +1 -1
  165. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.d.ts +5 -1
  166. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.d.ts.map +1 -1
  167. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js +6 -10
  168. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js.map +1 -1
  169. package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.d.ts +3 -1
  170. package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.d.ts.map +1 -1
  171. package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.js +4 -6
  172. package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.js.map +1 -1
  173. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.d.ts +19 -0
  174. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.d.ts.map +1 -0
  175. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.js +163 -0
  176. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.js.map +1 -0
  177. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.d.ts +3 -0
  178. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.d.ts.map +1 -0
  179. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.js +310 -0
  180. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.js.map +1 -0
  181. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/siteGeometry.d.ts +30 -0
  182. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/siteGeometry.d.ts.map +1 -0
  183. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/siteGeometry.js +122 -0
  184. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/siteGeometry.js.map +1 -0
  185. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/useShowSitesOnMap.d.ts +13 -0
  186. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/useShowSitesOnMap.d.ts.map +1 -0
  187. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/useShowSitesOnMap.js +58 -0
  188. package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/useShowSitesOnMap.js.map +1 -0
  189. package/dist/core/components/viewers/map/src/MapSidebar/index.d.ts +6 -1
  190. package/dist/core/components/viewers/map/src/MapSidebar/index.d.ts.map +1 -1
  191. package/dist/core/components/viewers/map/src/MapSidebar/index.js +5 -4
  192. package/dist/core/components/viewers/map/src/MapSidebar/index.js.map +1 -1
  193. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.d.ts +5 -1
  194. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.d.ts.map +1 -1
  195. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.js +5 -8
  196. package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.js.map +1 -1
  197. package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.d.ts +3 -1
  198. package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.d.ts.map +1 -1
  199. package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.js +2 -2
  200. package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.js.map +1 -1
  201. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.d.ts +3 -1
  202. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.d.ts.map +1 -1
  203. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.js +2 -2
  204. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.js.map +1 -1
  205. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.d.ts +3 -1
  206. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.d.ts.map +1 -1
  207. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.js +4 -7
  208. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.js.map +1 -1
  209. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.d.ts.map +1 -1
  210. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js +8 -8
  211. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js.map +1 -1
  212. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.d.ts +18 -0
  213. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.d.ts.map +1 -0
  214. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.js +102 -0
  215. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.js.map +1 -0
  216. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.d.ts.map +1 -1
  217. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.js +243 -176
  218. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.js.map +1 -1
  219. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/persistSite.d.ts +24 -0
  220. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/persistSite.d.ts.map +1 -0
  221. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/persistSite.js +46 -0
  222. package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/persistSite.js.map +1 -0
  223. package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.d.ts +8 -1
  224. package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.d.ts.map +1 -1
  225. package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.js +8 -3
  226. package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.js.map +1 -1
  227. package/dist/core/components/viewers/map/src/tools/DatasetMapTool.d.ts +11 -1
  228. package/dist/core/components/viewers/map/src/tools/DatasetMapTool.d.ts.map +1 -1
  229. package/dist/core/components/viewers/map/src/tools/DatasetMapTool.js +5 -3
  230. package/dist/core/components/viewers/map/src/tools/DatasetMapTool.js.map +1 -1
  231. package/dist/core/components/viewers/map/src/tools/mapTools.d.ts +10 -1
  232. package/dist/core/components/viewers/map/src/tools/mapTools.d.ts.map +1 -1
  233. package/dist/core/components/viewers/map/src/tools/mapTools.js +5 -3
  234. package/dist/core/components/viewers/map/src/tools/mapTools.js.map +1 -1
  235. package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.d.ts +1 -0
  236. package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.d.ts.map +1 -1
  237. package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.js +1 -0
  238. package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.js.map +1 -1
  239. package/dist/core/components/viewers/map/utils/geocoding/config.d.ts +14 -5
  240. package/dist/core/components/viewers/map/utils/geocoding/config.d.ts.map +1 -1
  241. package/dist/core/components/viewers/map/utils/geocoding/config.js +22 -11
  242. package/dist/core/components/viewers/map/utils/geocoding/config.js.map +1 -1
  243. package/dist/core/components/viewers/map/utils/geocoding/index.d.ts.map +1 -1
  244. package/dist/core/components/viewers/map/utils/geocoding/index.js +2 -2
  245. package/dist/core/components/viewers/map/utils/geocoding/index.js.map +1 -1
  246. package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts.map +1 -1
  247. package/dist/core/components/viewers/map/utils/geocoding/osm.js +5 -4
  248. package/dist/core/components/viewers/map/utils/geocoding/osm.js.map +1 -1
  249. package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts.map +1 -1
  250. package/dist/core/components/viewers/map/utils/geocoding/pelias.js +7 -5
  251. package/dist/core/components/viewers/map/utils/geocoding/pelias.js.map +1 -1
  252. package/dist/core/components/viewers/pointcloud/PointCloudViewer.d.ts +3 -1
  253. package/dist/core/components/viewers/pointcloud/PointCloudViewer.d.ts.map +1 -1
  254. package/dist/core/components/viewers/pointcloud/PointCloudViewer.js +11 -14
  255. package/dist/core/components/viewers/pointcloud/PointCloudViewer.js.map +1 -1
  256. package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.d.ts +3 -1
  257. package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.d.ts.map +1 -1
  258. package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.js +37 -52
  259. package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.js.map +1 -1
  260. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.d.ts +3 -1
  261. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.d.ts.map +1 -1
  262. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.js +5 -3
  263. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.js.map +1 -1
  264. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.d.ts +2 -1
  265. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.d.ts.map +1 -1
  266. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.js +5 -6
  267. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.js.map +1 -1
  268. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.d.ts +2 -1
  269. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.d.ts.map +1 -1
  270. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.js +15 -9
  271. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.js.map +1 -1
  272. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.d.ts +5 -1
  273. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.d.ts.map +1 -1
  274. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.js +3 -2
  275. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.js.map +1 -1
  276. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.d.ts +3 -1
  277. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.d.ts.map +1 -1
  278. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js +2 -2
  279. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js.map +1 -1
  280. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.d.ts +2 -1
  281. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.d.ts.map +1 -1
  282. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.js +12 -23
  283. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.js.map +1 -1
  284. package/dist/core/hooks/sites/createSiteHooks.d.ts.map +1 -1
  285. package/dist/core/hooks/sites/createSiteHooks.js +0 -1
  286. package/dist/core/hooks/sites/createSiteHooks.js.map +1 -1
  287. package/dist/core/hooks/useCaptureScreenshot.d.ts +2 -0
  288. package/dist/core/hooks/useCaptureScreenshot.d.ts.map +1 -0
  289. package/dist/core/hooks/useCaptureScreenshot.js +110 -0
  290. package/dist/core/hooks/useCaptureScreenshot.js.map +1 -0
  291. package/dist/core/hooks/useGeocodingRuntimeConfig.d.ts +3 -0
  292. package/dist/core/hooks/useGeocodingRuntimeConfig.d.ts.map +1 -0
  293. package/dist/core/hooks/useGeocodingRuntimeConfig.js +17 -0
  294. package/dist/core/hooks/useGeocodingRuntimeConfig.js.map +1 -0
  295. package/dist/core/store/AppConfig/context.d.ts +5 -0
  296. package/dist/core/store/AppConfig/context.d.ts.map +1 -1
  297. package/dist/core/store/AppConfig/context.js.map +1 -1
  298. package/dist/core/store/CombineProviders.d.ts +6 -1
  299. package/dist/core/store/CombineProviders.d.ts.map +1 -1
  300. package/dist/core/store/CombineProviders.js +6 -3
  301. package/dist/core/store/CombineProviders.js.map +1 -1
  302. package/dist/core/store/MapSites/context.d.ts +16 -0
  303. package/dist/core/store/MapSites/context.d.ts.map +1 -0
  304. package/dist/core/store/MapSites/context.js +29 -0
  305. package/dist/core/store/MapSites/context.js.map +1 -0
  306. package/dist/core/store/MapSites/reducer.d.ts +52 -0
  307. package/dist/core/store/MapSites/reducer.d.ts.map +1 -0
  308. package/dist/core/store/MapSites/reducer.js +70 -0
  309. package/dist/core/store/MapSites/reducer.js.map +1 -0
  310. package/dist/core/store/index.d.ts +1 -0
  311. package/dist/core/store/index.d.ts.map +1 -1
  312. package/dist/core/store/index.js +1 -0
  313. package/dist/core/store/index.js.map +1 -1
  314. package/dist/core/types/tools.d.ts +2 -1
  315. package/dist/core/types/tools.d.ts.map +1 -1
  316. package/dist/core/utils/imageUtils.d.ts.map +1 -1
  317. package/dist/core/utils/imageUtils.js +2 -1
  318. package/dist/core/utils/imageUtils.js.map +1 -1
  319. package/package.json +1 -1
@@ -12,12 +12,20 @@ type SidebarContextProps = {
12
12
  isMobile: boolean;
13
13
  toggleMenuSidebar: () => void;
14
14
  toggleInfoSidebar: () => void;
15
+ geocodeEarthApiKey?: string;
16
+ geocoderUrl?: string;
15
17
  };
16
18
  declare function useSidebar(): SidebarContextProps;
17
19
  declare const SidebarProvider: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & {
18
20
  defaultOpen?: boolean;
19
21
  open?: boolean;
20
22
  onOpenChange?: (open: boolean) => void;
23
+ minioBaseUrl?: string;
24
+ martinBaseUrl?: string;
25
+ organization?: import("../../types/dbTypes").Organization;
26
+ pointcloudApiUrl?: string;
27
+ geocodeEarthApiKey?: string;
28
+ geocoderUrl?: string;
21
29
  }, "ref"> & React.RefAttributes<HTMLDivElement>>;
22
30
  declare const Sidebar: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & {
23
31
  side?: "left" | "right";
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../../src/core/components/ui/Sidebar.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,YAAY,EAAO,MAAM,0BAA0B,CAAA;AAe5D,OAAO,EAEL,cAAc,EAGf,MAAM,WAAW,CAAA;AAmBlB,KAAK,mBAAmB,GAAG;IACzB,YAAY,EAAE,UAAU,GAAG,WAAW,CAAA;IACtC,IAAI,EAAE,OAAO,CAAA;IACb,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACpC,UAAU,EAAE,OAAO,CAAA;IACnB,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACpC,QAAQ,EAAE,OAAO,CAAA;IACjB,iBAAiB,EAAE,MAAM,IAAI,CAAA;IAC7B,iBAAiB,EAAE,MAAM,IAAI,CAAA;CAC9B,CAAA;AAID,iBAAS,UAAU,wBAOlB;AAED,QAAA,MAAM,eAAe;kBAGH,OAAO;WACd,OAAO;mBACC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI;gDAgKnC,CAAA;AAEP,QAAA,MAAM,OAAO;WAGF,MAAM,GAAG,OAAO;cACb,SAAS,GAAG,UAAU,GAAG,OAAO;kBAC5B,WAAW,GAAG,MAAM,GAAG,MAAM;gDA8G9C,CAAA;AAGD,QAAA,MAAM,cAAc,gKAuClB,CAAA;AAGF,QAAA,MAAM,WAAW,kLA2Bf,CAAA;AAGF,QAAA,MAAM,YAAY,6JAehB,CAAA;AAGF,QAAA,MAAM,YAAY,mOAehB,CAAA;AAGF,QAAA,MAAM,aAAa,mKAYjB,CAAA;AAGF,QAAA,MAAM,aAAa,mKAYjB,CAAA;AAGF,QAAA,MAAM,gBAAgB,iOAYpB,CAAA;AAGF,QAAA,MAAM,cAAc,mKAelB,CAAA;AAGF,QAAA,MAAM,YAAY,mKAYhB,CAAA;AAGF,QAAA,MAAM,iBAAiB;cAEqB,OAAO;gDAgBjD,CAAA;AAGF,QAAA,MAAM,kBAAkB;cAEuB,OAAO;mDAkBpD,CAAA;AAGF,QAAA,MAAM,mBAAmB,mKAUvB,CAAA;AAGF,QAAA,MAAM,WAAW,yKAUf,CAAA;AAGF,QAAA,MAAM,eAAe,kKAUnB,CAAA;AAyBF,QAAA,MAAM,iBAAiB;cAGT,OAAO;eACN,OAAO;cACR,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC;;;;oHAmDjE,CAAA;AAGD,QAAA,MAAM,iBAAiB;cAGT,OAAO;kBACH,OAAO;mDAwBvB,CAAA;AAGF,QAAA,MAAM,gBAAgB,mKAkBpB,CAAA;AAGF,QAAA,MAAM,mBAAmB;eAGV,OAAO;gDAgCpB,CAAA;AAGF,QAAA,MAAM,cAAc,yKAclB,CAAA;AAGF,QAAA,MAAM,kBAAkB,kKAG6B,CAAA;AAGrD,QAAA,MAAM,oBAAoB;cAGZ,OAAO;WACV,IAAI,GAAG,IAAI;eACP,OAAO;mDAsBpB,CAAA;AAGF,OAAO,EACL,OAAO,EACP,cAAc,EACd,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,UAAU,GACX,CAAA"}
1
+ {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../../src/core/components/ui/Sidebar.tsx"],"names":[],"mappings":"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"}
@@ -80,14 +80,26 @@ const SidebarProvider = React.forwardRef(
80
80
  onOpenChange: setOpenProp,
81
81
  className,
82
82
  style,
83
- children
83
+ children,
84
+ minioBaseUrl,
85
+ martinBaseUrl,
86
+ organization,
87
+ pointcloudApiUrl,
88
+ geocodeEarthApiKey,
89
+ geocoderUrl
84
90
  } = _b, props = __objRest(_b, [
85
91
  "defaultOpen",
86
92
  "open",
87
93
  "onOpenChange",
88
94
  "className",
89
95
  "style",
90
- "children"
96
+ "children",
97
+ "minioBaseUrl",
98
+ "martinBaseUrl",
99
+ "organization",
100
+ "pointcloudApiUrl",
101
+ "geocodeEarthApiKey",
102
+ "geocoderUrl"
91
103
  ]);
92
104
  const isMobile = useIsMobile();
93
105
  const [openMobile, setOpenMobile] = React.useState(false);
@@ -155,9 +167,11 @@ const SidebarProvider = React.forwardRef(
155
167
  openInfo,
156
168
  setOpenInfo,
157
169
  toggleMenuSidebar,
158
- toggleInfoSidebar
170
+ toggleInfoSidebar,
171
+ geocodeEarthApiKey,
172
+ geocoderUrl
159
173
  }),
160
- [sidebarState, open, setOpenMenu, isMobile, openMobile, setOpenMobile, openInfo, setOpenInfo, toggleMenuSidebar, toggleInfoSidebar]
174
+ [sidebarState, open, setOpenMenu, isMobile, openMobile, setOpenMobile, openInfo, setOpenInfo, toggleMenuSidebar, toggleInfoSidebar, geocodeEarthApiKey, geocoderUrl]
161
175
  );
162
176
  return /* @__PURE__ */ jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxs(
163
177
  "div",
@@ -187,7 +201,7 @@ const SidebarProvider = React.forwardRef(
187
201
  left: open ? "var(--sidebar-width)" : isMobile ? "0" : "var(--sidebar-width-icon)",
188
202
  width: "400px"
189
203
  },
190
- children: /* @__PURE__ */ jsx(InfoSidebar, {})
204
+ children: /* @__PURE__ */ jsx(InfoSidebar, { minioBaseUrl, martinBaseUrl, organization, pointcloudApiUrl })
191
205
  }
192
206
  )
193
207
  ]
@@ -303,12 +317,12 @@ const Sidebar = React.forwardRef(
303
317
  Sidebar.displayName = "Sidebar";
304
318
  const SidebarTrigger = React.forwardRef((_e, ref) => {
305
319
  var _f = _e, { className, onClick } = _f, props = __objRest(_f, ["className", "onClick"]);
306
- const { toggleMenuSidebar } = useSidebar();
320
+ const { toggleMenuSidebar, geocodeEarthApiKey, geocoderUrl } = useSidebar();
307
321
  const { state } = React.useContext(MenusContext);
308
322
  const currentViewer = state.menus.currentViewer;
309
323
  if (currentViewer === "auth") return null;
310
324
  if (currentViewer === "map" || currentViewer === "bim" || currentViewer === "pointcloud") {
311
- return /* @__PURE__ */ jsx(NavigationBar, {});
325
+ return /* @__PURE__ */ jsx(NavigationBar, { geocodeEarthApiKey, geocoderUrl });
312
326
  }
313
327
  return /* @__PURE__ */ jsxs(
314
328
  Button,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/components/ui/Sidebar.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport { Slot } from '@radix-ui/react-slot'\r\nimport { VariantProps, cva } from 'class-variance-authority'\r\nimport * as LR from 'lucide-react'\r\n\r\nimport { cn } from '../../utils/utils'\r\nimport { Button } from './Button'\r\nimport { Input } from './Input'\r\nimport { Separator } from './Separator'\r\nimport {\r\n Sheet,\r\n SheetContent,\r\n SheetDescription,\r\n SheetHeader,\r\n SheetTitle,\r\n} from './Sheet'\r\nimport { Skeleton } from './Skeleton'\r\nimport {\r\n Tooltip,\r\n TooltipContent,\r\n TooltipProvider,\r\n TooltipTrigger,\r\n} from './Tooltip'\r\nimport { useTranslations } from 'next-intl'\r\n\r\n// Menus context\r\nimport { MenusContext } from '../../store/Menus/context'\r\n\r\n// Custom components\r\nimport NavigationBar from '../TopNavigationBar'\r\nimport { InfoSidebar } from './InfoSidebar'\r\nimport { useIsMobile } from '../../hooks/ui/use-mobile'\r\n\r\n\r\nconst SIDEBAR_COOKIE_NAME = 'sidebar_state'\r\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\r\nconst SIDEBAR_WIDTH = '16rem'\r\nconst SIDEBAR_WIDTH_MOBILE = '18rem'\r\nconst SIDEBAR_WIDTH_ICON = '3rem'\r\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b'\r\n\r\ntype SidebarContextProps = {\r\n sidebarState: 'expanded' | 'collapsed'\r\n open: boolean\r\n setOpenMenu: (open: boolean) => void\r\n openMobile: boolean\r\n setOpenMobile: (open: boolean) => void\r\n openInfo: boolean\r\n setOpenInfo: (open: boolean) => void\r\n isMobile: boolean\r\n toggleMenuSidebar: () => void\r\n toggleInfoSidebar: () => void\r\n}\r\n\r\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\r\n\r\nfunction useSidebar() {\r\n const context = React.useContext(SidebarContext)\r\n if (!context) {\r\n throw new Error('useSidebar must be used within a SidebarProvider.')\r\n }\r\n\r\n return context\r\n}\r\n\r\nconst SidebarProvider = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'> & {\r\n defaultOpen?: boolean\r\n open?: boolean\r\n onOpenChange?: (open: boolean) => void\r\n }\r\n >(\r\n (\r\n {\r\n defaultOpen = false,\r\n open: openProp,\r\n onOpenChange: setOpenProp,\r\n className,\r\n style,\r\n children,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const isMobile = useIsMobile()\r\n const [openMobile, setOpenMobile] = React.useState(false)\r\n const [openInfo, setOpenInfo] = React.useState(false)\r\n\r\n // This is the internal state of the sidebar.\r\n // We use openProp and setOpenProp for control from outside the component.\r\n const [_open, _setOpen] = React.useState(defaultOpen)\r\n const open = openProp ?? _open\r\n const setOpenMenu = React.useCallback(\r\n (value: boolean | ((value: boolean) => boolean)) => {\r\n const openState = typeof value === 'function' ? value(open) : value\r\n if (setOpenProp) {\r\n setOpenProp(openState)\r\n }\r\n else {\r\n _setOpen(openState)\r\n }\r\n\r\n // This sets the cookie to keep the sidebar state.\r\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\r\n },\r\n [setOpenProp, open],\r\n )\r\n\r\n // Helper to toggle the menu sidebar.\r\n const toggleMenuSidebar = React.useCallback(() => {\r\n if (isMobile) {\r\n setOpenMobile(open => !open)\r\n }\r\n else {\r\n setOpenMenu((open) => {\r\n const newOpenState = !open\r\n // If opening menu sidebar, close info sidebar\r\n // if (newOpenState && openInfo) {\r\n // setOpenInfo(false)\r\n // }\r\n return newOpenState\r\n })\r\n }\r\n }, [isMobile, setOpenMenu, setOpenMobile, openInfo, setOpenInfo])\r\n\r\n // Helper to toggle the info sidebar.\r\n const toggleInfoSidebar = React.useCallback(() => {\r\n setOpenInfo((openInfoState) => {\r\n const newOpenInfoState = !openInfoState\r\n // If opening info sidebar, close menu sidebar\r\n if (newOpenInfoState && (isMobile ? openMobile : open)) {\r\n if (isMobile) {\r\n setOpenMobile(false)\r\n }\r\n else {\r\n setOpenMenu(false)\r\n }\r\n }\r\n return newOpenInfoState\r\n })\r\n }, [setOpenInfo, open, openMobile, isMobile, setOpenMenu, setOpenMobile])\r\n\r\n // Adds a keyboard shortcut to toggle the sidebar.\r\n React.useEffect(() => {\r\n const handleKeyDown = (event: KeyboardEvent) => {\r\n if (\r\n event.key === SIDEBAR_KEYBOARD_SHORTCUT\r\n && (event.metaKey || event.ctrlKey)\r\n ) {\r\n event.preventDefault()\r\n toggleMenuSidebar()\r\n }\r\n\r\n // Close InfoSidebar on Escape key\r\n if (event.key === 'Escape' && openInfo) {\r\n event.preventDefault()\r\n setOpenInfo(false)\r\n }\r\n }\r\n\r\n window.addEventListener('keydown', handleKeyDown)\r\n return () => window.removeEventListener('keydown', handleKeyDown)\r\n }, [toggleMenuSidebar, openInfo, setOpenInfo])\r\n\r\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\r\n // On mobile, reflect the Sheet open state; on desktop, reflect the sidebar open state.\r\n const sidebarState = (isMobile ? openMobile : open) ? 'expanded' : 'collapsed'\r\n\r\n const contextValue = React.useMemo<SidebarContextProps>(\r\n () => ({\r\n sidebarState,\r\n open,\r\n setOpenMenu,\r\n isMobile,\r\n openMobile,\r\n setOpenMobile,\r\n openInfo,\r\n setOpenInfo,\r\n toggleMenuSidebar,\r\n toggleInfoSidebar,\r\n }),\r\n [sidebarState, open, setOpenMenu, isMobile, openMobile, setOpenMobile, openInfo, setOpenInfo, toggleMenuSidebar, toggleInfoSidebar],\r\n )\r\n\r\n return (\r\n <SidebarContext.Provider value={contextValue}>\r\n <TooltipProvider delayDuration={0}>\r\n <div\r\n style={\r\n {\r\n '--sidebar-width': SIDEBAR_WIDTH,\r\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\r\n ...style,\r\n } as React.CSSProperties\r\n }\r\n className={cn(\r\n 'group/sidebar-wrapper flex min-h-svh w-full has-[[data-variant=inset]]:bg-sidebar',\r\n className,\r\n )}\r\n ref={ref}\r\n {...props}\r\n >\r\n {children}\r\n\r\n {/* InfoSidebar overlay */}\r\n\r\n <div\r\n data-state={openInfo ? 'open' : 'closed'}\r\n aria-hidden={!openInfo}\r\n className={cn(\r\n 'fixed inset-y-0 z-40 w-[410px] transition-[transform,opacity] duration-300 ease-in-out will-change-transform',\r\n openInfo\r\n ? 'translate-x-0 opacity-100'\r\n : '-translate-x-full opacity-0 pointer-events-none'\r\n )}\r\n style={{\r\n left: open\r\n ? 'var(--sidebar-width)'\r\n : (isMobile ? '0' : 'var(--sidebar-width-icon)'),\r\n width: '400px',\r\n }}\r\n >\r\n <InfoSidebar />\r\n </div>\r\n </div>\r\n </TooltipProvider>\r\n </SidebarContext.Provider>\r\n )\r\n },\r\n )\r\nSidebarProvider.displayName = 'SidebarProvider'\r\nconst Sidebar = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'> & {\r\n side?: 'left' | 'right'\r\n variant?: 'sidebar' | 'floating' | 'inset'\r\n collapsible?: 'offcanvas' | 'icon' | 'none'\r\n }\r\n>(\r\n (\r\n {\r\n side = 'left',\r\n variant = 'sidebar',\r\n collapsible = 'offcanvas',\r\n className,\r\n children,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n // Get auth state from MenusContext\r\n const { state, isAuthPage } = React.useContext(MenusContext)\r\n const { isMobile, sidebarState, openMobile, setOpenMobile } = useSidebar()\r\n\r\n // Translation\r\n const t = useTranslations('Sidebar')\r\n\r\n // Don't render sidebar at all for auth pages\r\n if (isAuthPage || state.menus.currentViewer === 'auth') {\r\n return null\r\n }\r\n\r\n if (collapsible === 'none') {\r\n return (\r\n <div\r\n className={cn(\r\n 'flex h-full w-[--sidebar-width] flex-col bg-sidebar text-sidebar-foreground',\r\n className,\r\n )}\r\n ref={ref}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n )\r\n }\r\n\r\n if (isMobile) {\r\n return (\r\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\r\n <SheetContent\r\n data-sidebar=\"sidebar\"\r\n data-mobile=\"true\"\r\n className=\"w-[--sidebar-width] bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden\"\r\n style={\r\n {\r\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\r\n } as React.CSSProperties\r\n }\r\n side={side}\r\n >\r\n <SheetHeader className=\"sr-only\">\r\n <SheetTitle>{t('title')}</SheetTitle>\r\n <SheetDescription>{t('description')}</SheetDescription>\r\n </SheetHeader>\r\n <div className=\"flex h-full w-full flex-col\">{children}</div>\r\n </SheetContent>\r\n </Sheet>\r\n )\r\n }\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className=\"group peer text-sidebar-foreground md:block\" // removed default hidden class\r\n data-state={sidebarState}\r\n data-collapsible={sidebarState === 'collapsed' ? collapsible : ''}\r\n data-variant={variant}\r\n data-side={side}\r\n >\r\n {/* This is what handles the sidebar gap on desktop */}\r\n <div\r\n className={cn(\r\n 'relative w-[--sidebar-width] bg-transparent transition-[width] duration-200 ease-linear',\r\n 'group-data-[collapsible=offcanvas]:w-0',\r\n 'group-data-[side=right]:rotate-180',\r\n variant === 'floating' || variant === 'inset'\r\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]'\r\n : 'group-data-[collapsible=icon]:w-[--sidebar-width-icon]',\r\n )}\r\n />\r\n <div\r\n className={cn(\r\n // removed default hidden class\r\n 'fixed inset-y-0 z-10 h-svh w-[--sidebar-width] transition-[left,right,width] duration-200 ease-linear md:flex',\r\n side === 'left'\r\n ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\r\n : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\r\n // Adjust the padding for floating and inset variants.\r\n variant === 'floating' || variant === 'inset'\r\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4)_+2px)]'\r\n : 'group-data-[collapsible=icon]:w-[--sidebar-width-icon] group-data-[side=left]:border-r group-data-[side=right]:border-l',\r\n className,\r\n )}\r\n {...props}\r\n >\r\n <div\r\n data-sidebar=\"sidebar\"\r\n className=\"flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow\"\r\n >\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n },\r\n)\r\nSidebar.displayName = 'Sidebar'\r\n\r\nconst SidebarTrigger = React.forwardRef<\r\n React.ElementRef<typeof Button>,\r\n React.ComponentProps<typeof Button>\r\n>(({ className, onClick, ...props }, ref) => {\r\n const { toggleMenuSidebar } = useSidebar()\r\n\r\n const { state } = React.useContext(MenusContext)\r\n const currentViewer = state.menus.currentViewer\r\n\r\n if (currentViewer === 'auth') return null\r\n\r\n // Render MenuButtons only for interactive viewers\r\n if (currentViewer === 'map' || currentViewer === 'bim' || currentViewer === 'pointcloud') {\r\n return <NavigationBar />\r\n }\r\n\r\n // Default trigger for all other content types\r\n return (\r\n <Button\r\n ref={ref}\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n data-sidebar=\"trigger\"\r\n onClick={(e) => {\r\n toggleMenuSidebar()\r\n onClick?.(e)\r\n }}\r\n\r\n className={cn(\r\n '',\r\n className,\r\n 'opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent',\r\n )}\r\n {...props}\r\n >\r\n <LR.PanelLeft />\r\n <span className=\"sr-only\">Toggle Sidebar</span>\r\n </Button>\r\n )\r\n})\r\nSidebarTrigger.displayName = 'SidebarTrigger'\r\n\r\nconst SidebarRail = React.forwardRef<\r\n HTMLButtonElement,\r\n React.ComponentProps<'button'>\r\n>(({ className, ...props }, ref) => {\r\n const { toggleMenuSidebar } = useSidebar()\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n data-sidebar=\"rail\"\r\n aria-label=\"Toggle Sidebar\"\r\n tabIndex={-1}\r\n onClick={toggleMenuSidebar}\r\n title=\"Toggle Sidebar\"\r\n className={cn(\r\n // removed default hidden class\r\n 'absolute inset-y-0 z-20 w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex',\r\n '[[data-side=left]_&]:cursor-w-resize [[data-side=right]_&]:cursor-e-resize',\r\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\r\n 'group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-sidebar',\r\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\r\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarRail.displayName = 'SidebarRail'\r\n\r\nconst SidebarInset = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'main'>\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <main\r\n ref={ref}\r\n className={cn(\r\n 'relative flex w-full flex-1 flex-col bg-background',\r\n 'md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarInset.displayName = 'SidebarInset'\r\n\r\nconst SidebarInput = React.forwardRef<\r\n React.ElementRef<typeof Input>,\r\n React.ComponentProps<typeof Input>\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <Input\r\n ref={ref}\r\n data-sidebar=\"input\"\r\n className={cn(\r\n 'h-8 w-full bg-background shadow-none focus-visible:ring-2 focus-visible:ring-sidebar-ring',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarInput.displayName = 'SidebarInput'\r\n\r\nconst SidebarHeader = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'>\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n data-sidebar=\"header\"\r\n className={cn('flex flex-col gap-2 p-2', className)}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarHeader.displayName = 'SidebarHeader'\r\n\r\nconst SidebarFooter = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'>\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n data-sidebar=\"footer\"\r\n className={cn('flex flex-col gap-2 p-2', className)}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarFooter.displayName = 'SidebarFooter'\r\n\r\nconst SidebarSeparator = React.forwardRef<\r\n React.ElementRef<typeof Separator>,\r\n React.ComponentProps<typeof Separator>\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <Separator\r\n ref={ref}\r\n data-sidebar=\"separator\"\r\n className={cn('mx-2 w-auto bg-sidebar-border', className)}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarSeparator.displayName = 'SidebarSeparator'\r\n\r\nconst SidebarContent = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'>\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n data-sidebar=\"content\"\r\n className={cn(\r\n 'flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarContent.displayName = 'SidebarContent'\r\n\r\nconst SidebarGroup = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'>\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n data-sidebar=\"group\"\r\n className={cn('relative flex w-full min-w-0 flex-col p-2', className)}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarGroup.displayName = 'SidebarGroup'\r\n\r\nconst SidebarGroupLabel = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'> & { asChild?: boolean }\r\n>(({ className, asChild = false, ...props }, ref) => {\r\n const Comp = asChild ? Slot : 'div'\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n data-sidebar=\"group-label\"\r\n className={cn(\r\n 'flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 outline-none ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\r\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarGroupLabel.displayName = 'SidebarGroupLabel'\r\n\r\nconst SidebarGroupAction = React.forwardRef<\r\n HTMLButtonElement,\r\n React.ComponentProps<'button'> & { asChild?: boolean }\r\n>(({ className, asChild = false, ...props }, ref) => {\r\n const Comp = asChild ? Slot : 'button'\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n data-sidebar=\"group-action\"\r\n className={cn(\r\n 'absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\r\n // Increases the hit area of the button on mobile.\r\n 'after:absolute after:-inset-2 after:md:hidden',\r\n 'group-data-[collapsible=icon]:hidden',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarGroupAction.displayName = 'SidebarGroupAction'\r\n\r\nconst SidebarGroupContent = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n data-sidebar=\"group-content\"\r\n className={cn('w-full text-sm', className)}\r\n {...props}\r\n />\r\n))\r\nSidebarGroupContent.displayName = 'SidebarGroupContent'\r\n\r\nconst SidebarMenu = React.forwardRef<\r\n HTMLUListElement,\r\n React.ComponentProps<'ul'>\r\n>(({ className, ...props }, ref) => (\r\n <ul\r\n ref={ref}\r\n data-sidebar=\"menu\"\r\n className={cn('flex w-full min-w-0 flex-col gap-1', className)}\r\n {...props}\r\n />\r\n))\r\nSidebarMenu.displayName = 'SidebarMenu'\r\n\r\nconst SidebarMenuItem = React.forwardRef<\r\n HTMLLIElement,\r\n React.ComponentProps<'li'>\r\n>(({ className, ...props }, ref) => (\r\n <li\r\n ref={ref}\r\n data-sidebar=\"menu-item\"\r\n className={cn('group/menu-item relative', className)}\r\n {...props}\r\n />\r\n))\r\nSidebarMenuItem.displayName = 'SidebarMenuItem'\r\n\r\nconst sidebarMenuButtonVariants = cva(\r\n 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\r\n {\r\n variants: {\r\n variant: {\r\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\r\n outline:\r\n 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\r\n },\r\n size: {\r\n default: 'h-8 text-sm',\r\n sm: 'h-7 text-xs',\r\n lg: 'h-12 text-sm group-data-[collapsible=icon]:!p-0',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n size: 'default',\r\n },\r\n },\r\n)\r\n\r\nconst SidebarMenuButton = React.forwardRef<\r\n HTMLButtonElement,\r\n React.ComponentProps<'button'> & {\r\n asChild?: boolean\r\n isActive?: boolean\r\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\r\n } & VariantProps<typeof sidebarMenuButtonVariants>\r\n>(\r\n (\r\n {\r\n asChild = false,\r\n isActive = false,\r\n variant = 'default',\r\n size = 'default',\r\n tooltip,\r\n className,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const Comp = asChild ? Slot : 'button'\r\n const { isMobile, sidebarState } = useSidebar()\r\n\r\n const button = (\r\n <Comp\r\n ref={ref}\r\n data-sidebar=\"menu-button\"\r\n data-size={size}\r\n data-active={isActive}\r\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\r\n {...props}\r\n />\r\n )\r\n\r\n if (!tooltip) {\r\n return button\r\n }\r\n\r\n if (typeof tooltip === 'string') {\r\n tooltip = {\r\n children: tooltip,\r\n }\r\n }\r\n\r\n return (\r\n <Tooltip>\r\n <TooltipTrigger asChild>{button}</TooltipTrigger>\r\n <TooltipContent\r\n side=\"right\"\r\n align=\"center\"\r\n hidden={sidebarState !== 'collapsed' || isMobile}\r\n {...tooltip}\r\n />\r\n </Tooltip>\r\n )\r\n },\r\n)\r\nSidebarMenuButton.displayName = 'SidebarMenuButton'\r\n\r\nconst SidebarMenuAction = React.forwardRef<\r\n HTMLButtonElement,\r\n React.ComponentProps<'button'> & {\r\n asChild?: boolean\r\n showOnHover?: boolean\r\n }\r\n>(({ className, asChild = false, showOnHover = false, ...props }, ref) => {\r\n const Comp = asChild ? Slot : 'button'\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n data-sidebar=\"menu-action\"\r\n className={cn(\r\n 'absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>svg]:shrink-0',\r\n // Increases the hit area of the button on mobile.\r\n 'after:absolute after:-inset-2 after:md:hidden',\r\n 'peer-data-[size=sm]/menu-button:top-1',\r\n 'peer-data-[size=default]/menu-button:top-1.5',\r\n 'peer-data-[size=lg]/menu-button:top-2.5',\r\n 'group-data-[collapsible=icon]:hidden',\r\n showOnHover\r\n && 'group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarMenuAction.displayName = 'SidebarMenuAction'\r\n\r\nconst SidebarMenuBadge = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n data-sidebar=\"menu-badge\"\r\n className={cn(\r\n 'pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground',\r\n 'peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\r\n 'peer-data-[size=sm]/menu-button:top-1',\r\n 'peer-data-[size=default]/menu-button:top-1.5',\r\n 'peer-data-[size=lg]/menu-button:top-2.5',\r\n 'group-data-[collapsible=icon]:hidden',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n))\r\nSidebarMenuBadge.displayName = 'SidebarMenuBadge'\r\n\r\nconst SidebarMenuSkeleton = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'> & {\r\n showIcon?: boolean\r\n }\r\n>(({ className, showIcon = false, ...props }, ref) => {\r\n // Random width between 50 to 90%.\r\n const width = React.useMemo(() => {\r\n return `${Math.floor(Math.random() * 40) + 50}%`\r\n }, [])\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n data-sidebar=\"menu-skeleton\"\r\n className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)}\r\n {...props}\r\n >\r\n {showIcon && (\r\n <Skeleton\r\n className=\"size-4 rounded-md\"\r\n data-sidebar=\"menu-skeleton-icon\"\r\n />\r\n )}\r\n <Skeleton\r\n className=\"h-4 max-w-[--skeleton-width] flex-1\"\r\n data-sidebar=\"menu-skeleton-text\"\r\n style={\r\n {\r\n '--skeleton-width': width,\r\n } as React.CSSProperties\r\n }\r\n />\r\n </div>\r\n )\r\n})\r\nSidebarMenuSkeleton.displayName = 'SidebarMenuSkeleton'\r\n\r\nconst SidebarMenuSub = React.forwardRef<\r\n HTMLUListElement,\r\n React.ComponentProps<'ul'>\r\n>(({ className, ...props }, ref) => (\r\n <ul\r\n ref={ref}\r\n data-sidebar=\"menu-sub\"\r\n className={cn(\r\n 'mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5',\r\n 'group-data-[collapsible=icon]:hidden',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n))\r\nSidebarMenuSub.displayName = 'SidebarMenuSub'\r\n\r\nconst SidebarMenuSubItem = React.forwardRef<\r\n HTMLLIElement,\r\n React.ComponentProps<'li'>\r\n>(({ ...props }, ref) => <li ref={ref} {...props} />)\r\nSidebarMenuSubItem.displayName = 'SidebarMenuSubItem'\r\n\r\nconst SidebarMenuSubButton = React.forwardRef<\r\n HTMLAnchorElement,\r\n React.ComponentProps<'a'> & {\r\n asChild?: boolean\r\n size?: 'sm' | 'md'\r\n isActive?: boolean\r\n }\r\n>(({ asChild = false, size = 'md', isActive, className, ...props }, ref) => {\r\n const Comp = asChild ? Slot : 'a'\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n data-sidebar=\"menu-sub-button\"\r\n data-size={size}\r\n data-active={isActive}\r\n className={cn(\r\n 'flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-none ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground',\r\n 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',\r\n size === 'sm' && 'text-xs',\r\n size === 'md' && 'text-sm',\r\n 'group-data-[collapsible=icon]:hidden',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarMenuSubButton.displayName = 'SidebarMenuSubButton'\r\n\r\nexport {\r\n Sidebar,\r\n SidebarContent,\r\n SidebarFooter,\r\n SidebarGroup,\r\n SidebarGroupAction,\r\n SidebarGroupContent,\r\n SidebarGroupLabel,\r\n SidebarHeader,\r\n SidebarInput,\r\n SidebarInset,\r\n SidebarMenu,\r\n SidebarMenuAction,\r\n SidebarMenuBadge,\r\n SidebarMenuButton,\r\n SidebarMenuItem,\r\n SidebarMenuSkeleton,\r\n SidebarMenuSub,\r\n SidebarMenuSubButton,\r\n SidebarMenuSubItem,\r\n SidebarProvider,\r\n SidebarRail,\r\n SidebarSeparator,\r\n SidebarTrigger,\r\n useSidebar,\r\n}\r\n"],"mappings":"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","names":["open"]}
1
+ {"version":3,"sources":["../../../../src/core/components/ui/Sidebar.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport { Slot } from '@radix-ui/react-slot'\r\nimport { VariantProps, cva } from 'class-variance-authority'\r\nimport * as LR from 'lucide-react'\r\n\r\nimport { cn } from '../../utils/utils'\r\nimport { Button } from './Button'\r\nimport { Input } from './Input'\r\nimport { Separator } from './Separator'\r\nimport {\r\n Sheet,\r\n SheetContent,\r\n SheetDescription,\r\n SheetHeader,\r\n SheetTitle,\r\n} from './Sheet'\r\nimport { Skeleton } from './Skeleton'\r\nimport {\r\n Tooltip,\r\n TooltipContent,\r\n TooltipProvider,\r\n TooltipTrigger,\r\n} from './Tooltip'\r\nimport { useTranslations } from 'next-intl'\r\n\r\n// Menus context\r\nimport { MenusContext } from '../../store/Menus/context'\r\n\r\n// Custom components\r\nimport NavigationBar from '../TopNavigationBar'\r\nimport { InfoSidebar } from './InfoSidebar'\r\nimport { useIsMobile } from '../../hooks/ui/use-mobile'\r\n\r\n\r\nconst SIDEBAR_COOKIE_NAME = 'sidebar_state'\r\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\r\nconst SIDEBAR_WIDTH = '16rem'\r\nconst SIDEBAR_WIDTH_MOBILE = '18rem'\r\nconst SIDEBAR_WIDTH_ICON = '3rem'\r\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b'\r\n\r\ntype SidebarContextProps = {\r\n sidebarState: 'expanded' | 'collapsed'\r\n open: boolean\r\n setOpenMenu: (open: boolean) => void\r\n openMobile: boolean\r\n setOpenMobile: (open: boolean) => void\r\n openInfo: boolean\r\n setOpenInfo: (open: boolean) => void\r\n isMobile: boolean\r\n toggleMenuSidebar: () => void\r\n toggleInfoSidebar: () => void\r\n geocodeEarthApiKey?: string\r\n geocoderUrl?: string\r\n}\r\n\r\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\r\n\r\nfunction useSidebar() {\r\n const context = React.useContext(SidebarContext)\r\n if (!context) {\r\n throw new Error('useSidebar must be used within a SidebarProvider.')\r\n }\r\n\r\n return context\r\n}\r\n\r\nconst SidebarProvider = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'> & {\r\n defaultOpen?: boolean\r\n open?: boolean\r\n onOpenChange?: (open: boolean) => void\r\n minioBaseUrl?: string\r\n martinBaseUrl?: string\r\n organization?: import('../../types/dbTypes').Organization\r\n pointcloudApiUrl?: string\r\n geocodeEarthApiKey?: string\r\n geocoderUrl?: string\r\n }\r\n >(\r\n (\r\n {\r\n defaultOpen = false,\r\n open: openProp,\r\n onOpenChange: setOpenProp,\r\n className,\r\n style,\r\n children,\r\n minioBaseUrl,\r\n martinBaseUrl,\r\n organization,\r\n pointcloudApiUrl,\r\n geocodeEarthApiKey,\r\n geocoderUrl,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const isMobile = useIsMobile()\r\n const [openMobile, setOpenMobile] = React.useState(false)\r\n const [openInfo, setOpenInfo] = React.useState(false)\r\n\r\n // This is the internal state of the sidebar.\r\n // We use openProp and setOpenProp for control from outside the component.\r\n const [_open, _setOpen] = React.useState(defaultOpen)\r\n const open = openProp ?? _open\r\n const setOpenMenu = React.useCallback(\r\n (value: boolean | ((value: boolean) => boolean)) => {\r\n const openState = typeof value === 'function' ? value(open) : value\r\n if (setOpenProp) {\r\n setOpenProp(openState)\r\n }\r\n else {\r\n _setOpen(openState)\r\n }\r\n\r\n // This sets the cookie to keep the sidebar state.\r\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\r\n },\r\n [setOpenProp, open],\r\n )\r\n\r\n // Helper to toggle the menu sidebar.\r\n const toggleMenuSidebar = React.useCallback(() => {\r\n if (isMobile) {\r\n setOpenMobile(open => !open)\r\n }\r\n else {\r\n setOpenMenu((open) => {\r\n const newOpenState = !open\r\n // If opening menu sidebar, close info sidebar\r\n // if (newOpenState && openInfo) {\r\n // setOpenInfo(false)\r\n // }\r\n return newOpenState\r\n })\r\n }\r\n }, [isMobile, setOpenMenu, setOpenMobile, openInfo, setOpenInfo])\r\n\r\n // Helper to toggle the info sidebar.\r\n const toggleInfoSidebar = React.useCallback(() => {\r\n setOpenInfo((openInfoState) => {\r\n const newOpenInfoState = !openInfoState\r\n // If opening info sidebar, close menu sidebar\r\n if (newOpenInfoState && (isMobile ? openMobile : open)) {\r\n if (isMobile) {\r\n setOpenMobile(false)\r\n }\r\n else {\r\n setOpenMenu(false)\r\n }\r\n }\r\n return newOpenInfoState\r\n })\r\n }, [setOpenInfo, open, openMobile, isMobile, setOpenMenu, setOpenMobile])\r\n\r\n // Adds a keyboard shortcut to toggle the sidebar.\r\n React.useEffect(() => {\r\n const handleKeyDown = (event: KeyboardEvent) => {\r\n if (\r\n event.key === SIDEBAR_KEYBOARD_SHORTCUT\r\n && (event.metaKey || event.ctrlKey)\r\n ) {\r\n event.preventDefault()\r\n toggleMenuSidebar()\r\n }\r\n\r\n // Close InfoSidebar on Escape key\r\n if (event.key === 'Escape' && openInfo) {\r\n event.preventDefault()\r\n setOpenInfo(false)\r\n }\r\n }\r\n\r\n window.addEventListener('keydown', handleKeyDown)\r\n return () => window.removeEventListener('keydown', handleKeyDown)\r\n }, [toggleMenuSidebar, openInfo, setOpenInfo])\r\n\r\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\r\n // On mobile, reflect the Sheet open state; on desktop, reflect the sidebar open state.\r\n const sidebarState = (isMobile ? openMobile : open) ? 'expanded' : 'collapsed'\r\n\r\n const contextValue = React.useMemo<SidebarContextProps>(\r\n () => ({\r\n sidebarState,\r\n open,\r\n setOpenMenu,\r\n isMobile,\r\n openMobile,\r\n setOpenMobile,\r\n openInfo,\r\n setOpenInfo,\r\n toggleMenuSidebar,\r\n toggleInfoSidebar,\r\n geocodeEarthApiKey,\r\n geocoderUrl,\r\n }),\r\n [sidebarState, open, setOpenMenu, isMobile, openMobile, setOpenMobile, openInfo, setOpenInfo, toggleMenuSidebar, toggleInfoSidebar, geocodeEarthApiKey, geocoderUrl],\r\n )\r\n\r\n return (\r\n <SidebarContext.Provider value={contextValue}>\r\n <TooltipProvider delayDuration={0}>\r\n <div\r\n style={\r\n {\r\n '--sidebar-width': SIDEBAR_WIDTH,\r\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\r\n ...style,\r\n } as React.CSSProperties\r\n }\r\n className={cn(\r\n 'group/sidebar-wrapper flex min-h-svh w-full has-[[data-variant=inset]]:bg-sidebar',\r\n className,\r\n )}\r\n ref={ref}\r\n {...props}\r\n >\r\n {children}\r\n\r\n {/* InfoSidebar overlay */}\r\n\r\n <div\r\n data-state={openInfo ? 'open' : 'closed'}\r\n aria-hidden={!openInfo}\r\n className={cn(\r\n 'fixed inset-y-0 z-40 w-[410px] transition-[transform,opacity] duration-300 ease-in-out will-change-transform',\r\n openInfo\r\n ? 'translate-x-0 opacity-100'\r\n : '-translate-x-full opacity-0 pointer-events-none'\r\n )}\r\n style={{\r\n left: open\r\n ? 'var(--sidebar-width)'\r\n : (isMobile ? '0' : 'var(--sidebar-width-icon)'),\r\n width: '400px',\r\n }}\r\n >\r\n <InfoSidebar minioBaseUrl={minioBaseUrl} martinBaseUrl={martinBaseUrl} organization={organization} pointcloudApiUrl={pointcloudApiUrl} />\r\n </div>\r\n </div>\r\n </TooltipProvider>\r\n </SidebarContext.Provider>\r\n )\r\n },\r\n )\r\nSidebarProvider.displayName = 'SidebarProvider'\r\nconst Sidebar = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'> & {\r\n side?: 'left' | 'right'\r\n variant?: 'sidebar' | 'floating' | 'inset'\r\n collapsible?: 'offcanvas' | 'icon' | 'none'\r\n }\r\n>(\r\n (\r\n {\r\n side = 'left',\r\n variant = 'sidebar',\r\n collapsible = 'offcanvas',\r\n className,\r\n children,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n // Get auth state from MenusContext\r\n const { state, isAuthPage } = React.useContext(MenusContext)\r\n const { isMobile, sidebarState, openMobile, setOpenMobile } = useSidebar()\r\n\r\n // Translation\r\n const t = useTranslations('Sidebar')\r\n\r\n // Don't render sidebar at all for auth pages\r\n if (isAuthPage || state.menus.currentViewer === 'auth') {\r\n return null\r\n }\r\n\r\n if (collapsible === 'none') {\r\n return (\r\n <div\r\n className={cn(\r\n 'flex h-full w-[--sidebar-width] flex-col bg-sidebar text-sidebar-foreground',\r\n className,\r\n )}\r\n ref={ref}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n )\r\n }\r\n\r\n if (isMobile) {\r\n return (\r\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\r\n <SheetContent\r\n data-sidebar=\"sidebar\"\r\n data-mobile=\"true\"\r\n className=\"w-[--sidebar-width] bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden\"\r\n style={\r\n {\r\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\r\n } as React.CSSProperties\r\n }\r\n side={side}\r\n >\r\n <SheetHeader className=\"sr-only\">\r\n <SheetTitle>{t('title')}</SheetTitle>\r\n <SheetDescription>{t('description')}</SheetDescription>\r\n </SheetHeader>\r\n <div className=\"flex h-full w-full flex-col\">{children}</div>\r\n </SheetContent>\r\n </Sheet>\r\n )\r\n }\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className=\"group peer text-sidebar-foreground md:block\" // removed default hidden class\r\n data-state={sidebarState}\r\n data-collapsible={sidebarState === 'collapsed' ? collapsible : ''}\r\n data-variant={variant}\r\n data-side={side}\r\n >\r\n {/* This is what handles the sidebar gap on desktop */}\r\n <div\r\n className={cn(\r\n 'relative w-[--sidebar-width] bg-transparent transition-[width] duration-200 ease-linear',\r\n 'group-data-[collapsible=offcanvas]:w-0',\r\n 'group-data-[side=right]:rotate-180',\r\n variant === 'floating' || variant === 'inset'\r\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]'\r\n : 'group-data-[collapsible=icon]:w-[--sidebar-width-icon]',\r\n )}\r\n />\r\n <div\r\n className={cn(\r\n // removed default hidden class\r\n 'fixed inset-y-0 z-10 h-svh w-[--sidebar-width] transition-[left,right,width] duration-200 ease-linear md:flex',\r\n side === 'left'\r\n ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\r\n : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\r\n // Adjust the padding for floating and inset variants.\r\n variant === 'floating' || variant === 'inset'\r\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4)_+2px)]'\r\n : 'group-data-[collapsible=icon]:w-[--sidebar-width-icon] group-data-[side=left]:border-r group-data-[side=right]:border-l',\r\n className,\r\n )}\r\n {...props}\r\n >\r\n <div\r\n data-sidebar=\"sidebar\"\r\n className=\"flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow\"\r\n >\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n },\r\n)\r\nSidebar.displayName = 'Sidebar'\r\n\r\nconst SidebarTrigger = React.forwardRef<\r\n React.ElementRef<typeof Button>,\r\n React.ComponentProps<typeof Button>\r\n>(({ className, onClick, ...props }, ref) => {\r\n const { toggleMenuSidebar, geocodeEarthApiKey, geocoderUrl } = useSidebar()\r\n\r\n const { state } = React.useContext(MenusContext)\r\n const currentViewer = state.menus.currentViewer\r\n\r\n if (currentViewer === 'auth') return null\r\n\r\n // Render MenuButtons only for interactive viewers\r\n if (currentViewer === 'map' || currentViewer === 'bim' || currentViewer === 'pointcloud') {\r\n return <NavigationBar geocodeEarthApiKey={geocodeEarthApiKey} geocoderUrl={geocoderUrl} />\r\n }\r\n\r\n // Default trigger for all other content types\r\n return (\r\n <Button\r\n ref={ref}\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n data-sidebar=\"trigger\"\r\n onClick={(e) => {\r\n toggleMenuSidebar()\r\n onClick?.(e)\r\n }}\r\n\r\n className={cn(\r\n '',\r\n className,\r\n 'opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent',\r\n )}\r\n {...props}\r\n >\r\n <LR.PanelLeft />\r\n <span className=\"sr-only\">Toggle Sidebar</span>\r\n </Button>\r\n )\r\n})\r\nSidebarTrigger.displayName = 'SidebarTrigger'\r\n\r\nconst SidebarRail = React.forwardRef<\r\n HTMLButtonElement,\r\n React.ComponentProps<'button'>\r\n>(({ className, ...props }, ref) => {\r\n const { toggleMenuSidebar } = useSidebar()\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n data-sidebar=\"rail\"\r\n aria-label=\"Toggle Sidebar\"\r\n tabIndex={-1}\r\n onClick={toggleMenuSidebar}\r\n title=\"Toggle Sidebar\"\r\n className={cn(\r\n // removed default hidden class\r\n 'absolute inset-y-0 z-20 w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex',\r\n '[[data-side=left]_&]:cursor-w-resize [[data-side=right]_&]:cursor-e-resize',\r\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\r\n 'group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-sidebar',\r\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\r\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarRail.displayName = 'SidebarRail'\r\n\r\nconst SidebarInset = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'main'>\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <main\r\n ref={ref}\r\n className={cn(\r\n 'relative flex w-full flex-1 flex-col bg-background',\r\n 'md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarInset.displayName = 'SidebarInset'\r\n\r\nconst SidebarInput = React.forwardRef<\r\n React.ElementRef<typeof Input>,\r\n React.ComponentProps<typeof Input>\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <Input\r\n ref={ref}\r\n data-sidebar=\"input\"\r\n className={cn(\r\n 'h-8 w-full bg-background shadow-none focus-visible:ring-2 focus-visible:ring-sidebar-ring',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarInput.displayName = 'SidebarInput'\r\n\r\nconst SidebarHeader = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'>\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n data-sidebar=\"header\"\r\n className={cn('flex flex-col gap-2 p-2', className)}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarHeader.displayName = 'SidebarHeader'\r\n\r\nconst SidebarFooter = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'>\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n data-sidebar=\"footer\"\r\n className={cn('flex flex-col gap-2 p-2', className)}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarFooter.displayName = 'SidebarFooter'\r\n\r\nconst SidebarSeparator = React.forwardRef<\r\n React.ElementRef<typeof Separator>,\r\n React.ComponentProps<typeof Separator>\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <Separator\r\n ref={ref}\r\n data-sidebar=\"separator\"\r\n className={cn('mx-2 w-auto bg-sidebar-border', className)}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarSeparator.displayName = 'SidebarSeparator'\r\n\r\nconst SidebarContent = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'>\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n data-sidebar=\"content\"\r\n className={cn(\r\n 'flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarContent.displayName = 'SidebarContent'\r\n\r\nconst SidebarGroup = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'>\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n data-sidebar=\"group\"\r\n className={cn('relative flex w-full min-w-0 flex-col p-2', className)}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarGroup.displayName = 'SidebarGroup'\r\n\r\nconst SidebarGroupLabel = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'> & { asChild?: boolean }\r\n>(({ className, asChild = false, ...props }, ref) => {\r\n const Comp = asChild ? Slot : 'div'\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n data-sidebar=\"group-label\"\r\n className={cn(\r\n 'flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 outline-none ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\r\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarGroupLabel.displayName = 'SidebarGroupLabel'\r\n\r\nconst SidebarGroupAction = React.forwardRef<\r\n HTMLButtonElement,\r\n React.ComponentProps<'button'> & { asChild?: boolean }\r\n>(({ className, asChild = false, ...props }, ref) => {\r\n const Comp = asChild ? Slot : 'button'\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n data-sidebar=\"group-action\"\r\n className={cn(\r\n 'absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\r\n // Increases the hit area of the button on mobile.\r\n 'after:absolute after:-inset-2 after:md:hidden',\r\n 'group-data-[collapsible=icon]:hidden',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarGroupAction.displayName = 'SidebarGroupAction'\r\n\r\nconst SidebarGroupContent = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n data-sidebar=\"group-content\"\r\n className={cn('w-full text-sm', className)}\r\n {...props}\r\n />\r\n))\r\nSidebarGroupContent.displayName = 'SidebarGroupContent'\r\n\r\nconst SidebarMenu = React.forwardRef<\r\n HTMLUListElement,\r\n React.ComponentProps<'ul'>\r\n>(({ className, ...props }, ref) => (\r\n <ul\r\n ref={ref}\r\n data-sidebar=\"menu\"\r\n className={cn('flex w-full min-w-0 flex-col gap-1', className)}\r\n {...props}\r\n />\r\n))\r\nSidebarMenu.displayName = 'SidebarMenu'\r\n\r\nconst SidebarMenuItem = React.forwardRef<\r\n HTMLLIElement,\r\n React.ComponentProps<'li'>\r\n>(({ className, ...props }, ref) => (\r\n <li\r\n ref={ref}\r\n data-sidebar=\"menu-item\"\r\n className={cn('group/menu-item relative', className)}\r\n {...props}\r\n />\r\n))\r\nSidebarMenuItem.displayName = 'SidebarMenuItem'\r\n\r\nconst sidebarMenuButtonVariants = cva(\r\n 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\r\n {\r\n variants: {\r\n variant: {\r\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\r\n outline:\r\n 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\r\n },\r\n size: {\r\n default: 'h-8 text-sm',\r\n sm: 'h-7 text-xs',\r\n lg: 'h-12 text-sm group-data-[collapsible=icon]:!p-0',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n size: 'default',\r\n },\r\n },\r\n)\r\n\r\nconst SidebarMenuButton = React.forwardRef<\r\n HTMLButtonElement,\r\n React.ComponentProps<'button'> & {\r\n asChild?: boolean\r\n isActive?: boolean\r\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\r\n } & VariantProps<typeof sidebarMenuButtonVariants>\r\n>(\r\n (\r\n {\r\n asChild = false,\r\n isActive = false,\r\n variant = 'default',\r\n size = 'default',\r\n tooltip,\r\n className,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const Comp = asChild ? Slot : 'button'\r\n const { isMobile, sidebarState } = useSidebar()\r\n\r\n const button = (\r\n <Comp\r\n ref={ref}\r\n data-sidebar=\"menu-button\"\r\n data-size={size}\r\n data-active={isActive}\r\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\r\n {...props}\r\n />\r\n )\r\n\r\n if (!tooltip) {\r\n return button\r\n }\r\n\r\n if (typeof tooltip === 'string') {\r\n tooltip = {\r\n children: tooltip,\r\n }\r\n }\r\n\r\n return (\r\n <Tooltip>\r\n <TooltipTrigger asChild>{button}</TooltipTrigger>\r\n <TooltipContent\r\n side=\"right\"\r\n align=\"center\"\r\n hidden={sidebarState !== 'collapsed' || isMobile}\r\n {...tooltip}\r\n />\r\n </Tooltip>\r\n )\r\n },\r\n)\r\nSidebarMenuButton.displayName = 'SidebarMenuButton'\r\n\r\nconst SidebarMenuAction = React.forwardRef<\r\n HTMLButtonElement,\r\n React.ComponentProps<'button'> & {\r\n asChild?: boolean\r\n showOnHover?: boolean\r\n }\r\n>(({ className, asChild = false, showOnHover = false, ...props }, ref) => {\r\n const Comp = asChild ? Slot : 'button'\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n data-sidebar=\"menu-action\"\r\n className={cn(\r\n 'absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>svg]:shrink-0',\r\n // Increases the hit area of the button on mobile.\r\n 'after:absolute after:-inset-2 after:md:hidden',\r\n 'peer-data-[size=sm]/menu-button:top-1',\r\n 'peer-data-[size=default]/menu-button:top-1.5',\r\n 'peer-data-[size=lg]/menu-button:top-2.5',\r\n 'group-data-[collapsible=icon]:hidden',\r\n showOnHover\r\n && 'group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarMenuAction.displayName = 'SidebarMenuAction'\r\n\r\nconst SidebarMenuBadge = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n data-sidebar=\"menu-badge\"\r\n className={cn(\r\n 'pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground',\r\n 'peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\r\n 'peer-data-[size=sm]/menu-button:top-1',\r\n 'peer-data-[size=default]/menu-button:top-1.5',\r\n 'peer-data-[size=lg]/menu-button:top-2.5',\r\n 'group-data-[collapsible=icon]:hidden',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n))\r\nSidebarMenuBadge.displayName = 'SidebarMenuBadge'\r\n\r\nconst SidebarMenuSkeleton = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentProps<'div'> & {\r\n showIcon?: boolean\r\n }\r\n>(({ className, showIcon = false, ...props }, ref) => {\r\n // Random width between 50 to 90%.\r\n const width = React.useMemo(() => {\r\n return `${Math.floor(Math.random() * 40) + 50}%`\r\n }, [])\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n data-sidebar=\"menu-skeleton\"\r\n className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)}\r\n {...props}\r\n >\r\n {showIcon && (\r\n <Skeleton\r\n className=\"size-4 rounded-md\"\r\n data-sidebar=\"menu-skeleton-icon\"\r\n />\r\n )}\r\n <Skeleton\r\n className=\"h-4 max-w-[--skeleton-width] flex-1\"\r\n data-sidebar=\"menu-skeleton-text\"\r\n style={\r\n {\r\n '--skeleton-width': width,\r\n } as React.CSSProperties\r\n }\r\n />\r\n </div>\r\n )\r\n})\r\nSidebarMenuSkeleton.displayName = 'SidebarMenuSkeleton'\r\n\r\nconst SidebarMenuSub = React.forwardRef<\r\n HTMLUListElement,\r\n React.ComponentProps<'ul'>\r\n>(({ className, ...props }, ref) => (\r\n <ul\r\n ref={ref}\r\n data-sidebar=\"menu-sub\"\r\n className={cn(\r\n 'mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5',\r\n 'group-data-[collapsible=icon]:hidden',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n))\r\nSidebarMenuSub.displayName = 'SidebarMenuSub'\r\n\r\nconst SidebarMenuSubItem = React.forwardRef<\r\n HTMLLIElement,\r\n React.ComponentProps<'li'>\r\n>(({ ...props }, ref) => <li ref={ref} {...props} />)\r\nSidebarMenuSubItem.displayName = 'SidebarMenuSubItem'\r\n\r\nconst SidebarMenuSubButton = React.forwardRef<\r\n HTMLAnchorElement,\r\n React.ComponentProps<'a'> & {\r\n asChild?: boolean\r\n size?: 'sm' | 'md'\r\n isActive?: boolean\r\n }\r\n>(({ asChild = false, size = 'md', isActive, className, ...props }, ref) => {\r\n const Comp = asChild ? Slot : 'a'\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n data-sidebar=\"menu-sub-button\"\r\n data-size={size}\r\n data-active={isActive}\r\n className={cn(\r\n 'flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-none ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground',\r\n 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',\r\n size === 'sm' && 'text-xs',\r\n size === 'md' && 'text-sm',\r\n 'group-data-[collapsible=icon]:hidden',\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nSidebarMenuSubButton.displayName = 'SidebarMenuSubButton'\r\n\r\nexport {\r\n Sidebar,\r\n SidebarContent,\r\n SidebarFooter,\r\n SidebarGroup,\r\n SidebarGroupAction,\r\n SidebarGroupContent,\r\n SidebarGroupLabel,\r\n SidebarHeader,\r\n SidebarInput,\r\n SidebarInset,\r\n SidebarMenu,\r\n SidebarMenuAction,\r\n SidebarMenuBadge,\r\n SidebarMenuButton,\r\n SidebarMenuItem,\r\n SidebarMenuSkeleton,\r\n SidebarMenuSub,\r\n SidebarMenuSubButton,\r\n SidebarMenuSubItem,\r\n SidebarProvider,\r\n SidebarRail,\r\n SidebarSeparator,\r\n SidebarTrigger,\r\n useSidebar,\r\n}\r\n"],"mappings":"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","names":["open"]}
@@ -1,15 +1,32 @@
1
1
  "use client";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
6
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
+ var __spreadValues = (a, b) => {
8
+ for (var prop in b || (b = {}))
9
+ if (__hasOwnProp.call(b, prop))
10
+ __defNormalProp(a, prop, b[prop]);
11
+ if (__getOwnPropSymbols)
12
+ for (var prop of __getOwnPropSymbols(b)) {
13
+ if (__propIsEnum.call(b, prop))
14
+ __defNormalProp(a, prop, b[prop]);
15
+ }
16
+ return a;
17
+ };
2
18
  import { jsx } from "react/jsx-runtime";
3
19
  import * as React from "react";
4
20
  import { Button } from "./Button";
5
21
  import { MapContext, MenusContext, ToolsContext } from "../../store";
6
22
  function ToolbarButton({ tool, onClick }) {
23
+ var _a;
7
24
  const { dispatch: toolsDispatch, state: toolsState } = React.useContext(ToolsContext);
8
25
  const { dispatch: menusDispatch, state: menusState } = React.useContext(MenusContext);
9
26
  const { dispatch: mapDispatch, state: mapState } = React.useContext(MapContext);
10
27
  if (tool.component) {
11
28
  const CustomComponent = tool.component;
12
- return /* @__PURE__ */ jsx(CustomComponent, { tool });
29
+ return /* @__PURE__ */ jsx(CustomComponent, __spreadValues({ tool }, (_a = tool.extraProps) != null ? _a : {}));
13
30
  }
14
31
  const setCursor = (cursor) => {
15
32
  mapDispatch({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/components/ui/ToolbarButton.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// Components\r\nimport * as React from 'react'\r\nimport { Button } from './Button'\r\nimport { MapContext, MenusContext, ToolsContext } from '../../store'\r\nimport { CursorType } from '../../types/global'\r\nimport { ToolbarToolType, Tool } from '../../types/tools'\r\n\r\ninterface Props {\r\n tool: Tool\r\n onClick?: () => void // Rename to onClick for clarity\r\n}\r\n\r\nexport default function ToolbarButton({ tool, onClick }: Props) {\r\n const { dispatch: toolsDispatch, state: toolsState }\r\n = React.useContext(ToolsContext)\r\n const { dispatch: menusDispatch, state: menusState }\r\n = React.useContext(MenusContext)\r\n const { dispatch: mapDispatch, state: mapState }\r\n = React.useContext(MapContext)\r\n\r\n // If this tool has a custom component, render that instead\r\n if (tool.component) {\r\n const CustomComponent = tool.component\r\n return <CustomComponent tool={tool} />\r\n }\r\n\r\n const setCursor = (cursor: CursorType) => {\r\n mapDispatch({\r\n type: 'SET_CURSOR',\r\n payload: { cursor },\r\n })\r\n }\r\n\r\n const setTools = (currentTool: ToolbarToolType) => {\r\n toolsDispatch({\r\n type: 'SET-TOOL',\r\n payload: { currentToolId: currentTool },\r\n })\r\n }\r\n\r\n const { currentToolId } = toolsState.tools\r\n const isActive = currentToolId === tool.id\r\n\r\n const handleToolClick = (tool: Tool) => { // Rename the internal function\r\n console.log('Tool clicked', tool)\r\n\r\n if (isActive) {\r\n // Deactivate the tool\r\n setTools(null)\r\n setCursor('')\r\n }\r\n else {\r\n // Activate the tool\r\n setTools(tool.id)\r\n setCursor(tool.cursor)\r\n }\r\n }\r\n\r\n const h = tool.height ? tool.height : '8'\r\n const w = tool.width ? tool.width : '7'\r\n\r\n return (\r\n <Button\r\n size=\"icon\"\r\n variant=\"ghost\"\r\n className={`flex justify-center items-center h-${h} w-${w} pointer-events-auto text-primary-dark ${\r\n tool.stayActive && isActive ? 'bg-primary-dark/15' : ''\r\n }`}\r\n onClick={() => {\r\n handleToolClick(tool) // Call internal logic first\r\n onClick?.() // Then call the prop if provided\r\n }}\r\n title={tool.title}\r\n >\r\n <tool.icon className=\"w-5 h-5\" />\r\n </Button>\r\n )\r\n}\r\n"],"mappings":";AA4BW;AAtBX,YAAY,WAAW;AACvB,SAAS,cAAc;AACvB,SAAS,YAAY,cAAc,oBAAoB;AASxC,SAAR,cAA+B,EAAE,MAAM,QAAQ,GAAU;AAC9D,QAAM,EAAE,UAAU,eAAe,OAAO,WAAW,IAC/C,MAAM,WAAW,YAAY;AACjC,QAAM,EAAE,UAAU,eAAe,OAAO,WAAW,IAC/C,MAAM,WAAW,YAAY;AACjC,QAAM,EAAE,UAAU,aAAa,OAAO,SAAS,IAC3C,MAAM,WAAW,UAAU;AAG/B,MAAI,KAAK,WAAW;AAClB,UAAM,kBAAkB,KAAK;AAC7B,WAAO,oBAAC,mBAAgB,MAAY;AAAA,EACtC;AAEA,QAAM,YAAY,CAAC,WAAuB;AACxC,gBAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS,EAAE,OAAO;AAAA,IACpB,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,CAAC,gBAAiC;AACjD,kBAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS,EAAE,eAAe,YAAY;AAAA,IACxC,CAAC;AAAA,EACH;AAEA,QAAM,EAAE,cAAc,IAAI,WAAW;AACrC,QAAM,WAAW,kBAAkB,KAAK;AAExC,QAAM,kBAAkB,CAACA,UAAe;AACtC,YAAQ,IAAI,gBAAgBA,KAAI;AAEhC,QAAI,UAAU;AAEZ,eAAS,IAAI;AACb,gBAAU,EAAE;AAAA,IACd,OACK;AAEH,eAASA,MAAK,EAAE;AAChB,gBAAUA,MAAK,MAAM;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,IAAI,KAAK,SAAS,KAAK,SAAS;AACtC,QAAM,IAAI,KAAK,QAAQ,KAAK,QAAQ;AAEpC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,WAAW,sCAAsC,CAAC,MAAM,CAAC,0CACvD,KAAK,cAAc,WAAW,uBAAuB,EACvD;AAAA,MACA,SAAS,MAAM;AACb,wBAAgB,IAAI;AACpB;AAAA,MACF;AAAA,MACA,OAAO,KAAK;AAAA,MAEZ,8BAAC,KAAK,MAAL,EAAU,WAAU,WAAU;AAAA;AAAA,EACjC;AAEJ;","names":["tool"]}
1
+ {"version":3,"sources":["../../../../src/core/components/ui/ToolbarButton.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// Components\r\nimport * as React from 'react'\r\nimport { Button } from './Button'\r\nimport { MapContext, MenusContext, ToolsContext } from '../../store'\r\nimport { CursorType } from '../../types/global'\r\nimport { ToolbarToolType, Tool } from '../../types/tools'\r\n\r\ninterface Props {\r\n tool: Tool\r\n onClick?: () => void // Rename to onClick for clarity\r\n}\r\n\r\nexport default function ToolbarButton({ tool, onClick }: Props) {\r\n const { dispatch: toolsDispatch, state: toolsState }\r\n = React.useContext(ToolsContext)\r\n const { dispatch: menusDispatch, state: menusState }\r\n = React.useContext(MenusContext)\r\n const { dispatch: mapDispatch, state: mapState }\r\n = React.useContext(MapContext)\r\n\r\n // If this tool has a custom component, render that instead\r\n if (tool.component) {\r\n const CustomComponent = tool.component\r\n return <CustomComponent tool={tool} {...(tool.extraProps ?? {})} />\r\n }\r\n\r\n const setCursor = (cursor: CursorType) => {\r\n mapDispatch({\r\n type: 'SET_CURSOR',\r\n payload: { cursor },\r\n })\r\n }\r\n\r\n const setTools = (currentTool: ToolbarToolType) => {\r\n toolsDispatch({\r\n type: 'SET-TOOL',\r\n payload: { currentToolId: currentTool },\r\n })\r\n }\r\n\r\n const { currentToolId } = toolsState.tools\r\n const isActive = currentToolId === tool.id\r\n\r\n const handleToolClick = (tool: Tool) => { // Rename the internal function\r\n console.log('Tool clicked', tool)\r\n\r\n if (isActive) {\r\n // Deactivate the tool\r\n setTools(null)\r\n setCursor('')\r\n }\r\n else {\r\n // Activate the tool\r\n setTools(tool.id)\r\n setCursor(tool.cursor)\r\n }\r\n }\r\n\r\n const h = tool.height ? tool.height : '8'\r\n const w = tool.width ? tool.width : '7'\r\n\r\n return (\r\n <Button\r\n size=\"icon\"\r\n variant=\"ghost\"\r\n className={`flex justify-center items-center h-${h} w-${w} pointer-events-auto text-primary-dark ${\r\n tool.stayActive && isActive ? 'bg-primary-dark/15' : ''\r\n }`}\r\n onClick={() => {\r\n handleToolClick(tool) // Call internal logic first\r\n onClick?.() // Then call the prop if provided\r\n }}\r\n title={tool.title}\r\n >\r\n <tool.icon className=\"w-5 h-5\" />\r\n </Button>\r\n )\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;AA4BW;AAtBX,YAAY,WAAW;AACvB,SAAS,cAAc;AACvB,SAAS,YAAY,cAAc,oBAAoB;AASxC,SAAR,cAA+B,EAAE,MAAM,QAAQ,GAAU;AAjBhE;AAkBE,QAAM,EAAE,UAAU,eAAe,OAAO,WAAW,IAC/C,MAAM,WAAW,YAAY;AACjC,QAAM,EAAE,UAAU,eAAe,OAAO,WAAW,IAC/C,MAAM,WAAW,YAAY;AACjC,QAAM,EAAE,UAAU,aAAa,OAAO,SAAS,IAC3C,MAAM,WAAW,UAAU;AAG/B,MAAI,KAAK,WAAW;AAClB,UAAM,kBAAkB,KAAK;AAC7B,WAAO,oBAAC,kCAAgB,SAAiB,UAAK,eAAL,YAAmB,CAAC,EAAI;AAAA,EACnE;AAEA,QAAM,YAAY,CAAC,WAAuB;AACxC,gBAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS,EAAE,OAAO;AAAA,IACpB,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,CAAC,gBAAiC;AACjD,kBAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS,EAAE,eAAe,YAAY;AAAA,IACxC,CAAC;AAAA,EACH;AAEA,QAAM,EAAE,cAAc,IAAI,WAAW;AACrC,QAAM,WAAW,kBAAkB,KAAK;AAExC,QAAM,kBAAkB,CAACA,UAAe;AACtC,YAAQ,IAAI,gBAAgBA,KAAI;AAEhC,QAAI,UAAU;AAEZ,eAAS,IAAI;AACb,gBAAU,EAAE;AAAA,IACd,OACK;AAEH,eAASA,MAAK,EAAE;AAChB,gBAAUA,MAAK,MAAM;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,IAAI,KAAK,SAAS,KAAK,SAAS;AACtC,QAAM,IAAI,KAAK,QAAQ,KAAK,QAAQ;AAEpC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,WAAW,sCAAsC,CAAC,MAAM,CAAC,0CACvD,KAAK,cAAc,WAAW,uBAAuB,EACvD;AAAA,MACA,SAAS,MAAM;AACb,wBAAgB,IAAI;AACpB;AAAA,MACF;AAAA,MACA,OAAO,KAAK;AAAA,MAEZ,8BAAC,KAAK,MAAL,EAAU,WAAU,WAAU;AAAA;AAAA,EACjC;AAEJ;","names":["tool"]}
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import type { Organization } from '../../../types/dbTypes';
2
3
  import { ViewerNames } from '../../../types';
3
4
  type DataMenuProps = {
4
5
  currentViewer: ViewerNames;
@@ -6,7 +7,10 @@ type DataMenuProps = {
6
7
  hideFrame?: boolean;
7
8
  hideTitle?: boolean;
8
9
  hideActions?: boolean;
10
+ organization?: Organization;
11
+ geocodeEarthApiKey?: string;
12
+ geocoderUrl?: string;
9
13
  };
10
- export declare function DataMenu({ currentViewer, height, hideTitle, hideActions, hideFrame }: DataMenuProps): React.JSX.Element;
14
+ export declare function DataMenu({ currentViewer, height, hideTitle, hideActions, hideFrame, organization, geocodeEarthApiKey, geocoderUrl }: DataMenuProps): React.JSX.Element;
11
15
  export {};
12
16
  //# sourceMappingURL=DataMenu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataMenu.d.ts","sourceRoot":"","sources":["../../../../../src/core/components/viewers/Data/DataMenu.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAsD9B,OAAO,EAA6B,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAKvE,KAAK,aAAa,GAAG;IACnB,aAAa,EAAE,WAAW,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,wBAAgB,QAAQ,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,aAAa,qBAijBnG"}
1
+ {"version":3,"file":"DataMenu.d.ts","sourceRoot":"","sources":["../../../../../src/core/components/viewers/Data/DataMenu.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAS9B,OAAO,KAAK,EAAwC,YAAY,EAAE,MAAM,wBAAwB,CAAA;AA6ChG,OAAO,EAA6B,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAKvE,KAAK,aAAa,GAAG;IACnB,aAAa,EAAE,WAAW,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,wBAAgB,QAAQ,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,EAAE,aAAa,qBA6jBlJ"}
@@ -56,7 +56,7 @@ import { DataTypesNames, ViewerNames } from "../../../types";
56
56
  import { useSession } from "next-auth/react";
57
57
  import InfrastructureDetails from "./infrastructureDetails/InfrastructureDetails";
58
58
  import { useCreateInfrastructure, useInfrastructures } from "../../../hooks/infrastructures/infrastructures";
59
- function DataMenu({ currentViewer, height, hideTitle, hideActions, hideFrame }) {
59
+ function DataMenu({ currentViewer, height, hideTitle, hideActions, hideFrame, organization, geocodeEarthApiKey, geocoderUrl }) {
60
60
  var _a, _b, _c;
61
61
  const t = useTranslations("DataMenu");
62
62
  const { view, setView } = useMenusContext();
@@ -116,7 +116,15 @@ function DataMenu({ currentViewer, height, hideTitle, hideActions, hideFrame })
116
116
  removeItemFromCompare
117
117
  } = useBuildingsContext();
118
118
  React.useEffect(() => {
119
- setDataType(DataTypesNames[currentViewer]);
119
+ var _a2;
120
+ const viewerToDataType = {
121
+ [ViewerNames.buildings]: DataTypesNames.building,
122
+ [ViewerNames.sites]: DataTypesNames.site,
123
+ [ViewerNames.infrastructure]: DataTypesNames.infrastructure,
124
+ [ViewerNames.files]: DataTypesNames.file,
125
+ [ViewerNames.users]: DataTypesNames.user
126
+ };
127
+ setDataType((_a2 = viewerToDataType[currentViewer]) != null ? _a2 : DataTypesNames.building);
120
128
  }, [currentViewer]);
121
129
  React.useEffect(() => {
122
130
  setComparing(false);
@@ -335,7 +343,9 @@ function DataMenu({ currentViewer, height, hideTitle, hideActions, hideFrame })
335
343
  newItemName,
336
344
  setNewItemName,
337
345
  filteredData: currentViewer === ViewerNames.buildings || currentViewer === ViewerNames.sites || currentViewer === ViewerNames.infrastructure ? filteredData : void 0,
338
- users: currentViewer === ViewerNames.users ? users : void 0
346
+ users: currentViewer === ViewerNames.users ? users : void 0,
347
+ geocodeEarthApiKey,
348
+ geocoderUrl
339
349
  }
340
350
  )
341
351
  ] })
@@ -351,7 +361,8 @@ function DataMenu({ currentViewer, height, hideTitle, hideActions, hideFrame })
351
361
  selectedSite,
352
362
  selectedInfrastructure,
353
363
  selectedFile,
354
- selectedUser
364
+ selectedUser,
365
+ countryCode: organization == null ? void 0 : organization.country
355
366
  }
356
367
  ),
357
368
  /* @__PURE__ */ jsx(