@collabdt/core 0.3.1 → 0.3.3
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.
- package/dist/core/components/authentication/ForgotPassword.d.ts.map +1 -1
- package/dist/core/components/authentication/ForgotPassword.js +0 -1
- package/dist/core/components/authentication/ForgotPassword.js.map +1 -1
- package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts +12 -2
- package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts.map +1 -1
- package/dist/core/components/ui/Comments/CollapsibleCommentItem.js +137 -139
- package/dist/core/components/ui/Comments/CollapsibleCommentItem.js.map +1 -1
- package/dist/core/components/ui/Comments/Comment.d.ts +18 -1
- package/dist/core/components/ui/Comments/Comment.d.ts.map +1 -1
- package/dist/core/components/ui/Comments/Comment.js +94 -23
- package/dist/core/components/ui/Comments/Comment.js.map +1 -1
- package/dist/core/components/ui/Comments/CommentActionButtons.d.ts +38 -0
- package/dist/core/components/ui/Comments/CommentActionButtons.d.ts.map +1 -0
- package/dist/core/components/ui/Comments/CommentActionButtons.js +134 -0
- package/dist/core/components/ui/Comments/CommentActionButtons.js.map +1 -0
- package/dist/core/components/ui/Comments/CommentInput.d.ts.map +1 -1
- package/dist/core/components/ui/Comments/CommentInput.js +5 -2
- package/dist/core/components/ui/Comments/CommentInput.js.map +1 -1
- package/dist/core/components/ui/Comments/CommentsSection.d.ts.map +1 -1
- package/dist/core/components/ui/Comments/CommentsSection.js +86 -42
- package/dist/core/components/ui/Comments/CommentsSection.js.map +1 -1
- package/dist/core/components/ui/Comments/commentUtils.d.ts.map +1 -1
- package/dist/core/components/ui/Comments/commentUtils.js +2 -1
- package/dist/core/components/ui/Comments/commentUtils.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileUploadWithProgress.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileUploadWithProgress.js +0 -1
- package/dist/core/components/ui/FilesManager/src/useFileUploadWithProgress.js.map +1 -1
- package/dist/core/components/ui/InfoSidebar/Container.d.ts.map +1 -1
- package/dist/core/components/ui/InfoSidebar/Container.js +16 -12
- package/dist/core/components/ui/InfoSidebar/Container.js.map +1 -1
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts +1 -2
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js +66 -94
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js.map +1 -1
- package/dist/core/components/ui/Sensors/Sensor.d.ts +16 -3
- package/dist/core/components/ui/Sensors/Sensor.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/Sensor.js +76 -37
- package/dist/core/components/ui/Sensors/Sensor.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorChart.d.ts +12 -2
- package/dist/core/components/ui/Sensors/SensorChart.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/SensorChart.js +49 -12
- package/dist/core/components/ui/Sensors/SensorChart.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorDetailDialog.d.ts +9 -0
- package/dist/core/components/ui/Sensors/SensorDetailDialog.d.ts.map +1 -0
- package/dist/core/components/ui/Sensors/SensorDetailDialog.js +128 -0
- package/dist/core/components/ui/Sensors/SensorDetailDialog.js.map +1 -0
- package/dist/core/components/ui/Sensors/SensorInput.d.ts +6 -1
- package/dist/core/components/ui/Sensors/SensorInput.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/SensorInput.js +94 -9
- package/dist/core/components/ui/Sensors/SensorInput.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorTagsSection.d.ts +3 -1
- package/dist/core/components/ui/Sensors/SensorTagsSection.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/SensorTagsSection.js +4 -1
- package/dist/core/components/ui/Sensors/SensorTagsSection.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorsSection.d.ts +1 -3
- package/dist/core/components/ui/Sensors/SensorsSection.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/SensorsSection.js +33 -10
- package/dist/core/components/ui/Sensors/SensorsSection.js.map +1 -1
- package/dist/core/components/ui/Sensors/TimeZoneSelect.d.ts +7 -0
- package/dist/core/components/ui/Sensors/TimeZoneSelect.d.ts.map +1 -0
- package/dist/core/components/ui/Sensors/TimeZoneSelect.js +56 -0
- package/dist/core/components/ui/Sensors/TimeZoneSelect.js.map +1 -0
- package/dist/core/components/ui/Sensors/sensorData.d.ts +42 -0
- package/dist/core/components/ui/Sensors/sensorData.d.ts.map +1 -0
- package/dist/core/components/ui/Sensors/sensorData.js +118 -0
- package/dist/core/components/ui/Sensors/sensorData.js.map +1 -0
- package/dist/core/components/ui/Sensors/sensorRange.d.ts +24 -0
- package/dist/core/components/ui/Sensors/sensorRange.d.ts.map +1 -0
- package/dist/core/components/ui/Sensors/sensorRange.js +34 -0
- package/dist/core/components/ui/Sensors/sensorRange.js.map +1 -0
- package/dist/core/components/ui/Sensors/useSensorSeries.d.ts +15 -0
- package/dist/core/components/ui/Sensors/useSensorSeries.d.ts.map +1 -0
- package/dist/core/components/ui/Sensors/useSensorSeries.js +63 -0
- package/dist/core/components/ui/Sensors/useSensorSeries.js.map +1 -0
- package/dist/core/components/ui/Sidebar.d.ts.map +1 -1
- package/dist/core/components/ui/Sidebar.js +27 -4
- package/dist/core/components/ui/Sidebar.js.map +1 -1
- package/dist/core/components/ui/ToolbarButton.d.ts.map +1 -1
- package/dist/core/components/ui/ToolbarButton.js +0 -1
- package/dist/core/components/ui/ToolbarButton.js.map +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.js +0 -2
- package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.js.map +1 -1
- package/dist/core/components/viewers/Data/details/EnergySourcesGrid.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/EnergySourcesGrid.js +0 -10
- package/dist/core/components/viewers/Data/details/EnergySourcesGrid.js.map +1 -1
- package/dist/core/components/viewers/Data/files/DatatableFileAdder.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/files/DatatableFileAdder.js +0 -1
- package/dist/core/components/viewers/Data/files/DatatableFileAdder.js.map +1 -1
- package/dist/core/components/viewers/Data/files/utils/fuzzySearch.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/files/utils/fuzzySearch.js +0 -1
- package/dist/core/components/viewers/Data/files/utils/fuzzySearch.js.map +1 -1
- package/dist/core/components/viewers/Data/userDetails/UserMoreOptions.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/userDetails/UserMoreOptions.js +0 -1
- package/dist/core/components/viewers/Data/userDetails/UserMoreOptions.js.map +1 -1
- package/dist/core/components/viewers/Data/utils/filterHelper.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/utils/filterHelper.js +0 -2
- package/dist/core/components/viewers/Data/utils/filterHelper.js.map +1 -1
- package/dist/core/components/viewers/Viewer.js +1 -1
- package/dist/core/components/viewers/Viewer.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/TopicsSection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/TopicsSection.js +0 -3
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/TopicsSection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js +1 -7
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.js +1 -9
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.d.ts +1 -3
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.js +2 -2
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.js +4 -3
- package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/index.js +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/ClippingPlane.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/ClippingPlane.js +0 -1
- package/dist/core/components/viewers/bim/src/ClippingPlane.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/index.d.ts +1 -2
- package/dist/core/components/viewers/bim/src/tools/AddToBim/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js +25 -2
- package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.d.ts +16 -10
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.js +26 -6
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimCommentCluster.d.ts +2 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimCommentCluster.d.ts.map +1 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimCommentCluster.js +5 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimCommentCluster.js.map +1 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.d.ts +8 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js +15 -3
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/clusterMarkersByScreenSpace.d.ts +44 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/clusterMarkersByScreenSpace.d.ts.map +1 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/clusterMarkersByScreenSpace.js +77 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/clusterMarkersByScreenSpace.js.map +1 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentCameraUtils.d.ts +3 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentCameraUtils.d.ts.map +1 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentCameraUtils.js +5 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentCameraUtils.js.map +1 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentMarkerConfig.d.ts +33 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentMarkerConfig.d.ts.map +1 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentMarkerConfig.js +90 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentMarkerConfig.js.map +1 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.js +2 -2
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.d.ts +7 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.js +50 -73
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.d.ts +7 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.js +39 -11
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.js +1 -5
- package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.js +0 -1
- package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/measureBimTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/measureBimTool.js +1 -2
- package/dist/core/components/viewers/bim/src/tools/measureBimTool.js.map +1 -1
- package/dist/core/components/viewers/map/MapViewer.d.ts +1 -2
- package/dist/core/components/viewers/map/MapViewer.d.ts.map +1 -1
- package/dist/core/components/viewers/map/MapViewer.js +2 -2
- package/dist/core/components/viewers/map/MapViewer.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.js +11 -14
- package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/ckanDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/ckanDatasets.js +2 -5
- package/dist/core/components/viewers/map/datasets/src/ckanDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/localDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/localDatasets.js +0 -3
- package/dist/core/components/viewers/map/datasets/src/localDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.js +0 -11
- package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.js +0 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js +0 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/OpenDataFeaturePopover.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/OpenDataFeaturePopover.js +0 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/OpenDataFeaturePopover.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/index.d.ts +1 -2
- package/dist/core/components/viewers/map/src/MapLayers/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/index.js +2 -2
- package/dist/core/components/viewers/map/src/MapLayers/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/CommentLayer/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/CommentLayer/index.js +174 -53
- package/dist/core/components/viewers/map/src/MapLayers/src/CommentLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.js +2 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.d.ts +1 -3
- package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.js +74 -42
- package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.js +4 -3
- package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/index.js +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.js +0 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.js +1 -5
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.d.ts +1 -3
- package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.js +2 -2
- package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/utils/uploadToPresignedURLS.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/utils/uploadToPresignedURLS.js +1 -3
- package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/utils/uploadToPresignedURLS.js.map +1 -1
- package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.js +0 -1
- package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.js.map +1 -1
- package/dist/core/components/viewers/map/utils/flyToEach.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/flyToEach.js +0 -1
- package/dist/core/components/viewers/map/utils/flyToEach.js.map +1 -1
- package/dist/core/components/viewers/map/utils/getOsmIdbyCoordinates.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/getOsmIdbyCoordinates.js +0 -2
- package/dist/core/components/viewers/map/utils/getOsmIdbyCoordinates.js.map +1 -1
- package/dist/core/components/viewers/shared/markers/BimMarkerCluster.d.ts +19 -0
- package/dist/core/components/viewers/shared/markers/BimMarkerCluster.d.ts.map +1 -0
- package/dist/core/components/viewers/shared/markers/BimMarkerCluster.js +108 -0
- package/dist/core/components/viewers/shared/markers/BimMarkerCluster.js.map +1 -0
- package/dist/core/components/viewers/shared/markers/computeMarkerLookAt.d.ts +24 -0
- package/dist/core/components/viewers/shared/markers/computeMarkerLookAt.d.ts.map +1 -0
- package/dist/core/components/viewers/shared/markers/computeMarkerLookAt.js +27 -0
- package/dist/core/components/viewers/shared/markers/computeMarkerLookAt.js.map +1 -0
- package/dist/core/components/viewers/shared/markers/types.d.ts +66 -0
- package/dist/core/components/viewers/shared/markers/types.d.ts.map +1 -0
- package/dist/core/components/viewers/shared/markers/types.js +1 -0
- package/dist/core/components/viewers/shared/markers/types.js.map +1 -0
- package/dist/core/components/viewers/shared/markers/useMarkerLayerBim.d.ts +22 -0
- package/dist/core/components/viewers/shared/markers/useMarkerLayerBim.d.ts.map +1 -0
- package/dist/core/components/viewers/shared/markers/useMarkerLayerBim.js +233 -0
- package/dist/core/components/viewers/shared/markers/useMarkerLayerBim.js.map +1 -0
- package/dist/core/hooks/comments/comments.d.ts +11 -0
- package/dist/core/hooks/comments/comments.d.ts.map +1 -1
- package/dist/core/hooks/comments/comments.js +3 -1
- package/dist/core/hooks/comments/comments.js.map +1 -1
- package/dist/core/hooks/comments/createCommentHooks.d.ts +11 -0
- package/dist/core/hooks/comments/createCommentHooks.d.ts.map +1 -1
- package/dist/core/hooks/comments/createCommentHooks.js +30 -1
- package/dist/core/hooks/comments/createCommentHooks.js.map +1 -1
- package/dist/core/hooks/files/files.d.ts.map +1 -1
- package/dist/core/hooks/files/files.js +0 -1
- package/dist/core/hooks/files/files.js.map +1 -1
- package/dist/core/hooks/ui/useResizableSidebarWidth.d.ts +30 -0
- package/dist/core/hooks/ui/useResizableSidebarWidth.d.ts.map +1 -0
- package/dist/core/hooks/ui/useResizableSidebarWidth.js +75 -0
- package/dist/core/hooks/ui/useResizableSidebarWidth.js.map +1 -0
- package/dist/core/i18n/messages/en.json +10 -1
- package/dist/core/i18n/messages/es.json +11 -2
- package/dist/core/i18n/messages/fr.json +11 -2
- package/dist/core/store/AppConfig/context.d.ts.map +1 -1
- package/dist/core/store/AppConfig/context.js +4 -1
- package/dist/core/store/AppConfig/context.js.map +1 -1
- package/dist/core/store/AppConfig/reducer.d.ts +10 -0
- package/dist/core/store/AppConfig/reducer.d.ts.map +1 -1
- package/dist/core/store/AppConfig/reducer.js +10 -0
- package/dist/core/store/AppConfig/reducer.js.map +1 -1
- package/dist/core/store/Datasets/reducer.d.ts.map +1 -1
- package/dist/core/store/Datasets/reducer.js +0 -2
- package/dist/core/store/Datasets/reducer.js.map +1 -1
- package/dist/core/store/Files/reducer.js +0 -1
- package/dist/core/store/Files/reducer.js.map +1 -1
- package/dist/core/store/Menus/context.d.ts.map +1 -1
- package/dist/core/store/Menus/context.js +8 -2
- package/dist/core/store/Menus/context.js.map +1 -1
- package/dist/core/store/Menus/reducer.d.ts +65 -1
- package/dist/core/store/Menus/reducer.d.ts.map +1 -1
- package/dist/core/store/Menus/reducer.js +39 -3
- package/dist/core/store/Menus/reducer.js.map +1 -1
- package/dist/core/utils/markerUtils.d.ts +10 -0
- package/dist/core/utils/markerUtils.d.ts.map +1 -1
- package/dist/core/utils/markerUtils.js +9 -1
- package/dist/core/utils/markerUtils.js.map +1 -1
- package/dist/core/utils/memcache.d.ts.map +1 -1
- package/dist/core/utils/memcache.js +0 -7
- package/dist/core/utils/memcache.js.map +1 -1
- package/dist/core/utils/timeUtils.d.ts +24 -1
- package/dist/core/utils/timeUtils.d.ts.map +1 -1
- package/dist/core/utils/timeUtils.js +52 -3
- package/dist/core/utils/timeUtils.js.map +1 -1
- package/package.json +4 -1
|
@@ -1,27 +1,38 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as LR from "lucide-react";
|
|
4
|
+
import { useSession } from "next-auth/react";
|
|
4
5
|
import { useTranslations } from "next-intl";
|
|
5
6
|
import * as React from "react";
|
|
6
7
|
import { toast } from "sonner";
|
|
7
|
-
import { useComment, useComments } from "../../../hooks/comments/comments";
|
|
8
|
+
import { useComment, useComments, useCreateComment, useDeleteComments } from "../../../hooks/comments/comments";
|
|
8
9
|
import { BuildingsContext, MenusContext, ToolsContext, usePermissions } from "../../../store";
|
|
9
10
|
import { CollapsibleSection } from "../CollapsibleSection";
|
|
10
11
|
import { SearchInput } from "../SearchInput";
|
|
11
12
|
import { CollapsibleCommentItem } from "./CollapsibleCommentItem";
|
|
12
13
|
function CommentsSection() {
|
|
13
|
-
var _a, _b;
|
|
14
|
+
var _a, _b, _c, _d;
|
|
14
15
|
const t = useTranslations("CommentsSection");
|
|
15
16
|
const { ability } = usePermissions();
|
|
16
17
|
const { dispatch: toolsDispatch } = React.useContext(ToolsContext);
|
|
17
18
|
const { state: menusState, dispatch: menusDispatch } = React.useContext(MenusContext);
|
|
18
|
-
const { currentViewer, commentsVisibleInViewer } = menusState.menus;
|
|
19
|
+
const { currentViewer, commentsVisibleInViewer, focusedCommentId, pendingCommentAction } = menusState.menus;
|
|
20
|
+
const focusComment = React.useCallback((commentId) => {
|
|
21
|
+
menusDispatch({ type: "SHOW_COMMENTS_IN_VIEWER", payload: { viewer: currentViewer } });
|
|
22
|
+
menusDispatch({ type: "SET_FOCUSED_COMMENT_ID", payload: { commentId } });
|
|
23
|
+
}, [menusDispatch, currentViewer]);
|
|
24
|
+
React.useEffect(() => {
|
|
25
|
+
if (pendingCommentAction) menusDispatch({ type: "CLEAR_PENDING_COMMENT_ACTION" });
|
|
26
|
+
}, [pendingCommentAction == null ? void 0 : pendingCommentAction.requestId, menusDispatch]);
|
|
19
27
|
const { comments } = useComments();
|
|
20
28
|
const { state: buildingsState } = React.useContext(BuildingsContext);
|
|
21
29
|
const buildingId = ((_b = (_a = buildingsState == null ? void 0 : buildingsState.buildings) == null ? void 0 : _a.building) == null ? void 0 : _b.id) || -1;
|
|
22
|
-
const
|
|
30
|
+
const user = (_c = useSession().data) == null ? void 0 : _c.user;
|
|
31
|
+
const { createComment } = useCreateComment();
|
|
32
|
+
const [commentToEdit, setCommentToEdit] = React.useState(null);
|
|
23
33
|
const [searchQuery, setSearchQuery] = React.useState("");
|
|
24
|
-
const {
|
|
34
|
+
const { updateComment } = useComment((_d = commentToEdit == null ? void 0 : commentToEdit.id) != null ? _d : null);
|
|
35
|
+
const { deleteComments } = useDeleteComments();
|
|
25
36
|
const handleAddComment = React.useCallback(() => {
|
|
26
37
|
if (!currentViewer) return;
|
|
27
38
|
toolsDispatch({
|
|
@@ -33,46 +44,72 @@ function CommentsSection() {
|
|
|
33
44
|
}, [toolsDispatch, currentViewer]);
|
|
34
45
|
const handleCommentAction = React.useCallback((action, id) => {
|
|
35
46
|
switch (action) {
|
|
36
|
-
case "
|
|
37
|
-
console.log(`View comment ${id}`);
|
|
38
|
-
break;
|
|
39
|
-
case "edit":
|
|
40
|
-
console.log(`Edit comment ${id}`);
|
|
41
|
-
break;
|
|
42
|
-
case "delete":
|
|
47
|
+
case "delete": {
|
|
43
48
|
toast.success(t("commentDeleted"));
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
case "reply":
|
|
47
|
-
console.log(`Reply to comment ${id}`);
|
|
49
|
+
const replyIds = comments.filter((c) => c.replyToId === id).map((c) => c.id);
|
|
50
|
+
void deleteComments({ ids: [id, ...replyIds] });
|
|
48
51
|
break;
|
|
52
|
+
}
|
|
53
|
+
// 'view', 'edit' and 'reply' are handled inline by CollapsibleCommentItem
|
|
54
|
+
// (edit -> onEdit, reply -> onReply)
|
|
49
55
|
default:
|
|
50
56
|
break;
|
|
51
57
|
}
|
|
52
|
-
}, [t]);
|
|
58
|
+
}, [t, comments, deleteComments]);
|
|
53
59
|
React.useEffect(() => {
|
|
54
|
-
if (
|
|
55
|
-
|
|
56
|
-
|
|
60
|
+
if (commentToEdit !== null) {
|
|
61
|
+
void updateComment({ text: commentToEdit.text });
|
|
62
|
+
setCommentToEdit(null);
|
|
57
63
|
}
|
|
58
|
-
}, [
|
|
59
|
-
const
|
|
60
|
-
|
|
64
|
+
}, [commentToEdit, updateComment]);
|
|
65
|
+
const handleEdit = React.useCallback((id, text) => {
|
|
66
|
+
setCommentToEdit({ id, text });
|
|
61
67
|
}, []);
|
|
68
|
+
const handleReply = React.useCallback((parent, replyText) => {
|
|
69
|
+
var _a2;
|
|
70
|
+
if (!replyText.trim() || !user) return;
|
|
71
|
+
void createComment({
|
|
72
|
+
commentData: {
|
|
73
|
+
text: replyText,
|
|
74
|
+
authorId: Number(user.id),
|
|
75
|
+
organizationId: user.organizationId,
|
|
76
|
+
viewer: parent.viewer,
|
|
77
|
+
buildingId: parent.buildingId,
|
|
78
|
+
// Flat threading: a reply to a reply attaches to the top-level parent
|
|
79
|
+
replyToId: (_a2 = parent.replyToId) != null ? _a2 : parent.id,
|
|
80
|
+
visible: true
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}, [createComment, user]);
|
|
62
84
|
const handleFileUpload = React.useCallback((commentId, files) => {
|
|
63
|
-
console.log(`Upload files for comment ${commentId}:`, Array.from(files).map((f) => f.name));
|
|
64
85
|
}, []);
|
|
65
86
|
const currentComments = comments.filter((comment) => currentViewer === comment.viewer && (!comment.buildingId || comment.buildingId === buildingId));
|
|
87
|
+
const repliesByParent = React.useMemo(() => {
|
|
88
|
+
var _a2;
|
|
89
|
+
const map = /* @__PURE__ */ new Map();
|
|
90
|
+
for (const comment of currentComments) {
|
|
91
|
+
if (comment.replyToId != null) {
|
|
92
|
+
const list = (_a2 = map.get(comment.replyToId)) != null ? _a2 : [];
|
|
93
|
+
list.push(comment);
|
|
94
|
+
map.set(comment.replyToId, list);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return map;
|
|
98
|
+
}, [currentComments]);
|
|
99
|
+
const topLevelComments = React.useMemo(
|
|
100
|
+
() => currentComments.filter((comment) => comment.replyToId == null),
|
|
101
|
+
[currentComments]
|
|
102
|
+
);
|
|
66
103
|
const filteredComments = React.useMemo(() => {
|
|
67
|
-
if (!searchQuery.trim()) return
|
|
104
|
+
if (!searchQuery.trim()) return topLevelComments;
|
|
68
105
|
const query = searchQuery.toLowerCase();
|
|
69
|
-
return
|
|
106
|
+
return topLevelComments.filter(
|
|
70
107
|
(comment) => {
|
|
71
108
|
var _a2;
|
|
72
109
|
return (_a2 = comment.text) == null ? void 0 : _a2.toLowerCase().includes(query);
|
|
73
110
|
}
|
|
74
111
|
);
|
|
75
|
-
}, [
|
|
112
|
+
}, [topLevelComments, searchQuery]);
|
|
76
113
|
const commentsVisible = commentsVisibleInViewer.includes(currentViewer);
|
|
77
114
|
const toggleCommentsVisibility = React.useCallback(() => {
|
|
78
115
|
menusDispatch({
|
|
@@ -104,21 +141,28 @@ function CommentsSection() {
|
|
|
104
141
|
checked: commentsVisible,
|
|
105
142
|
onCheckedChange: toggleCommentsVisibility
|
|
106
143
|
},
|
|
107
|
-
children: /* @__PURE__ */ jsx("div", { className: "space-y-2 mx-2 pr-2", children: filteredComments.map((comment) =>
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
144
|
+
children: /* @__PURE__ */ jsx("div", { className: "space-y-2 mx-2 pr-2 pb-2", children: filteredComments.map((comment) => {
|
|
145
|
+
var _a2;
|
|
146
|
+
return /* @__PURE__ */ jsx(
|
|
147
|
+
CollapsibleCommentItem,
|
|
148
|
+
{
|
|
149
|
+
comment,
|
|
150
|
+
onAction: handleCommentAction,
|
|
151
|
+
onReply: handleReply,
|
|
152
|
+
onEdit: handleEdit,
|
|
153
|
+
onFileUpload: handleFileUpload,
|
|
154
|
+
replies: (_a2 = repliesByParent.get(comment.id)) != null ? _a2 : [],
|
|
155
|
+
attachments: [],
|
|
156
|
+
isVisible: commentsVisible,
|
|
157
|
+
focused: focusedCommentId === comment.id,
|
|
158
|
+
onFocus: () => focusComment(comment.id),
|
|
159
|
+
pendingAction: pendingCommentAction != null ? pendingCommentAction : void 0,
|
|
160
|
+
onMouseEnter: () => menusDispatch({ type: "SET_CURRENT_COMMENT_ID", payload: { commentId: comment.id } }),
|
|
161
|
+
onMouseLeave: () => menusDispatch({ type: "SET_CURRENT_COMMENT_ID", payload: { commentId: null } })
|
|
162
|
+
},
|
|
163
|
+
comment.id
|
|
164
|
+
);
|
|
165
|
+
}) })
|
|
122
166
|
}
|
|
123
167
|
)
|
|
124
168
|
] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/core/components/ui/Comments/CommentsSection.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as LR from 'lucide-react'\r\nimport { useTranslations } from 'next-intl'\r\nimport * as React from 'react'\r\nimport { toast } from 'sonner'\r\n\r\nimport { useComment, useComments } from '../../../hooks/comments/comments';\r\nimport { BuildingsContext, MenusContext, ToolsContext, usePermissions } from '../../../store'\r\nimport { CollapsibleSection } from '../CollapsibleSection'\r\nimport { SearchInput } from '../SearchInput'\r\n\r\n\r\nimport { CollapsibleCommentItem } from './CollapsibleCommentItem'\r\n\r\n\r\n\r\ntype CommentAction = 'view' | 'edit' | 'delete' | 'reply'\r\n\r\nexport function CommentsSection() {\r\n // Translation\r\n const t = useTranslations('CommentsSection')\r\n // Permissions\r\n const { ability } = usePermissions()\r\n\r\n const { dispatch: toolsDispatch } = React.useContext(ToolsContext)\r\n const { state: menusState, dispatch: menusDispatch } = React.useContext(MenusContext)\r\n const { currentViewer, commentsVisibleInViewer } = menusState.menus\r\n\r\n const {comments} = useComments()\r\n const {state: buildingsState} = React.useContext(BuildingsContext)\r\n const buildingId = buildingsState?.buildings?.building?.id || -1\r\n\r\n const [commentToDelete, setCommentToDelete] = React.useState<number | null>(null)\r\n const [searchQuery, setSearchQuery] = React.useState('')\r\n const { deleteComment } = useComment(commentToDelete)\r\n\r\n const handleAddComment = React.useCallback(() => {\r\n if (!currentViewer) return\r\n toolsDispatch({\r\n type: 'SET-TOOL',\r\n payload: {\r\n currentToolId:\r\n currentViewer === 'bim'\r\n ? 'bim-add-comment'\r\n : currentViewer === 'map'\r\n ? 'map-add-comment'\r\n : undefined,\r\n },\r\n })\r\n }, [toolsDispatch, currentViewer])\r\n\r\n const handleCommentAction = React.useCallback((action: CommentAction, id: number) => {\r\n switch (action) {\r\n case 'view':\r\n console.log(`View comment ${id}`)\r\n break\r\n case 'edit':\r\n console.log(`Edit comment ${id}`)\r\n break\r\n case 'delete':\r\n toast.success(t('commentDeleted'))\r\n setCommentToDelete(id)\r\n break\r\n case 'reply':\r\n console.log(`Reply to comment ${id}`)\r\n break\r\n default:\r\n break\r\n }\r\n }, [t])\r\n\r\n // Trigger deletion when commentToDelete changes\r\n React.useEffect(() => {\r\n if (commentToDelete !== null) {\r\n deleteComment()\r\n setCommentToDelete(null)\r\n }\r\n }, [commentToDelete, deleteComment])\r\n\r\n const handleReply = React.useCallback((id: number, replyText: string) => {\r\n console.log(`Reply to ${id}: ${replyText}`)\r\n // TODO: Implement reply functionality\r\n }, [])\r\n\r\n const handleFileUpload = React.useCallback((commentId: number, files: FileList) => {\r\n console.log(`Upload files for comment ${commentId}:`, Array.from(files).map(f => f.name))\r\n // TODO: Implement file upload functionality\r\n }, [])\r\n\r\n const currentComments = comments.filter((comment) => currentViewer === comment.viewer && (!comment.buildingId || comment.buildingId === buildingId))\r\n\r\n // Filter comments based on search query\r\n const filteredComments = React.useMemo(() => {\r\n if (!searchQuery.trim()) return currentComments\r\n\r\n const query = searchQuery.toLowerCase()\r\n return currentComments.filter((comment) =>\r\n comment.text?.toLowerCase().includes(query)\r\n )\r\n }, [currentComments, searchQuery])\r\n\r\n const commentsVisible = commentsVisibleInViewer.includes(currentViewer)\r\n\r\n const toggleCommentsVisibility = React.useCallback(() => {\r\n menusDispatch({\r\n type: commentsVisible ? 'HIDE_COMMENTS_IN_VIEWER' : 'SHOW_COMMENTS_IN_VIEWER',\r\n payload: {\r\n viewer: currentViewer,\r\n },\r\n })\r\n }, [currentViewer, commentsVisible, menusDispatch])\r\n\r\n return (\r\n <div className=\"flex-1 flex flex-col space-y-4 overflow-hidden\">\r\n <div className=\"px-4\">\r\n <SearchInput\r\n placeholder={t('searchComments')}\r\n value={searchQuery}\r\n onChange={e => setSearchQuery(e.target.value)}\r\n />\r\n </div>\r\n <CollapsibleSection\r\n title={t('commentsTitle')}\r\n icon={LR.MessageCircle}\r\n className=\"overflow-y-auto\"\r\n itemCount={filteredComments.length}\r\n onAddItem={handleAddComment}\r\n addItemTitle={t('addCommentTitle')}\r\n switchVariant={{\r\n checked: commentsVisible,\r\n onCheckedChange: toggleCommentsVisibility,\r\n }}\r\n >\r\n <div className=\"space-y-2 mx-2 pr-2\">\r\n {filteredComments.map((comment) => (\r\n <CollapsibleCommentItem\r\n key={comment.id}\r\n comment={comment}\r\n onAction={handleCommentAction}\r\n onReply={handleReply}\r\n onFileUpload={handleFileUpload}\r\n replies={[]}\r\n attachments={[]}\r\n isVisible={commentsVisible}\r\n onMouseEnter={() => menusDispatch({ type: 'SET_CURRENT_COMMENT_ID', payload: { commentId: comment.id } })}\r\n onMouseLeave={() => menusDispatch({ type: 'SET_CURRENT_COMMENT_ID', payload: { commentId: null } })}\r\n />\r\n ))}\r\n </div>\r\n </CollapsibleSection>\r\n </div>\r\n )\r\n}\r\n"],"mappings":"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","names":["_a"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/core/components/ui/Comments/CommentsSection.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as LR from 'lucide-react'\r\nimport { useSession } from 'next-auth/react'\r\nimport { useTranslations } from 'next-intl'\r\nimport * as React from 'react'\r\nimport { toast } from 'sonner'\r\n\r\nimport { useComment, useComments, useCreateComment, useDeleteComments } from '../../../hooks/comments/comments';\r\nimport { BuildingsContext, MenusContext, ToolsContext, usePermissions } from '../../../store'\r\nimport { CollapsibleSection } from '../CollapsibleSection'\r\nimport { SearchInput } from '../SearchInput'\r\n\r\n\r\nimport { CollapsibleCommentItem } from './CollapsibleCommentItem'\r\n\r\nimport type { Comment } from '../../../types/dbTypes'\r\n\r\n\r\n\r\ntype CommentAction = 'view' | 'edit' | 'delete' | 'reply'\r\n\r\nexport function CommentsSection() {\r\n // Translation\r\n const t = useTranslations('CommentsSection')\r\n // Permissions\r\n const { ability } = usePermissions()\r\n\r\n const { dispatch: toolsDispatch } = React.useContext(ToolsContext)\r\n const { state: menusState, dispatch: menusDispatch } = React.useContext(MenusContext)\r\n const { currentViewer, commentsVisibleInViewer, focusedCommentId, pendingCommentAction } = menusState.menus\r\n\r\n const focusComment = React.useCallback((commentId: number) => {\r\n // Ensure comments are visible in the active viewer so the zoom target is actually rendered.\r\n menusDispatch({ type: 'SHOW_COMMENTS_IN_VIEWER', payload: { viewer: currentViewer } })\r\n menusDispatch({ type: 'SET_FOCUSED_COMMENT_ID', payload: { commentId } })\r\n }, [menusDispatch, currentViewer])\r\n\r\n // A pending action (open editor/reply from a marker) is one-shot: child items consume it\r\n // on their mount/update effect (children run before this parent effect), then we clear it so\r\n // it does not re-fire when the sidebar remounts.\r\n React.useEffect(() => {\r\n if (pendingCommentAction) menusDispatch({ type: 'CLEAR_PENDING_COMMENT_ACTION' })\r\n }, [pendingCommentAction?.requestId, menusDispatch])\r\n\r\n const {comments} = useComments()\r\n const {state: buildingsState} = React.useContext(BuildingsContext)\r\n const buildingId = buildingsState?.buildings?.building?.id || -1\r\n\r\n const user = useSession().data?.user\r\n const { createComment } = useCreateComment()\r\n\r\n const [commentToEdit, setCommentToEdit] = React.useState<{ id: number; text: string } | null>(null)\r\n const [searchQuery, setSearchQuery] = React.useState('')\r\n const { updateComment } = useComment(commentToEdit?.id ?? null)\r\n const { deleteComments } = useDeleteComments()\r\n\r\n const handleAddComment = React.useCallback(() => {\r\n if (!currentViewer) return\r\n toolsDispatch({\r\n type: 'SET-TOOL',\r\n payload: {\r\n currentToolId:\r\n currentViewer === 'bim'\r\n ? 'bim-add-comment'\r\n : currentViewer === 'map'\r\n ? 'map-add-comment'\r\n : undefined,\r\n },\r\n })\r\n }, [toolsDispatch, currentViewer])\r\n\r\n const handleCommentAction = React.useCallback((action: CommentAction, id: number) => {\r\n switch (action) {\r\n case 'delete': {\r\n toast.success(t('commentDeleted'))\r\n // Cascade: delete the comment together with its replies (DB does not cascade).\r\n const replyIds = comments.filter((c) => c.replyToId === id).map((c) => c.id)\r\n void deleteComments({ ids: [id, ...replyIds] })\r\n break\r\n }\r\n // 'view', 'edit' and 'reply' are handled inline by CollapsibleCommentItem\r\n // (edit -> onEdit, reply -> onReply)\r\n default:\r\n break\r\n }\r\n }, [t, comments, deleteComments])\r\n\r\n // Trigger edit when commentToEdit changes\r\n React.useEffect(() => {\r\n if (commentToEdit !== null) {\r\n void updateComment({ text: commentToEdit.text })\r\n setCommentToEdit(null)\r\n }\r\n }, [commentToEdit, updateComment])\r\n\r\n const handleEdit = React.useCallback((id: number, text: string) => {\r\n setCommentToEdit({ id, text })\r\n }, [])\r\n\r\n const handleReply = React.useCallback((parent: Comment, replyText: string) => {\r\n if (!replyText.trim() || !user) return\r\n void createComment({\r\n commentData: {\r\n text: replyText,\r\n authorId: Number(user.id),\r\n organizationId: user.organizationId,\r\n viewer: parent.viewer,\r\n buildingId: parent.buildingId,\r\n // Flat threading: a reply to a reply attaches to the top-level parent\r\n replyToId: parent.replyToId ?? parent.id,\r\n visible: true,\r\n },\r\n })\r\n }, [createComment, user])\r\n\r\n const handleFileUpload = React.useCallback((commentId: number, files: FileList) => {\r\n // ⚠️ Comment file upload not implemented (files are discarded)\r\n }, [])\r\n\r\n const currentComments = comments.filter((comment) => currentViewer === comment.viewer && (!comment.buildingId || comment.buildingId === buildingId))\r\n\r\n // Group replies under their parent (flat, single level)\r\n const repliesByParent = React.useMemo(() => {\r\n const map = new Map<number, Comment[]>()\r\n for (const comment of currentComments) {\r\n if (comment.replyToId != null) {\r\n const list = map.get(comment.replyToId) ?? []\r\n list.push(comment)\r\n map.set(comment.replyToId, list)\r\n }\r\n }\r\n return map\r\n }, [currentComments])\r\n\r\n // Top-level comments only (replies are nested under their parent)\r\n const topLevelComments = React.useMemo(\r\n () => currentComments.filter((comment) => comment.replyToId == null),\r\n [currentComments]\r\n )\r\n\r\n // Filter comments based on search query\r\n const filteredComments = React.useMemo(() => {\r\n if (!searchQuery.trim()) return topLevelComments\r\n\r\n const query = searchQuery.toLowerCase()\r\n return topLevelComments.filter((comment) =>\r\n comment.text?.toLowerCase().includes(query)\r\n )\r\n }, [topLevelComments, searchQuery])\r\n\r\n const commentsVisible = commentsVisibleInViewer.includes(currentViewer)\r\n\r\n const toggleCommentsVisibility = React.useCallback(() => {\r\n menusDispatch({\r\n type: commentsVisible ? 'HIDE_COMMENTS_IN_VIEWER' : 'SHOW_COMMENTS_IN_VIEWER',\r\n payload: {\r\n viewer: currentViewer,\r\n },\r\n })\r\n }, [currentViewer, commentsVisible, menusDispatch])\r\n\r\n return (\r\n <div className=\"flex-1 flex flex-col space-y-4 overflow-hidden\">\r\n <div className=\"px-4\">\r\n <SearchInput\r\n placeholder={t('searchComments')}\r\n value={searchQuery}\r\n onChange={e => setSearchQuery(e.target.value)}\r\n />\r\n </div>\r\n <CollapsibleSection\r\n title={t('commentsTitle')}\r\n icon={LR.MessageCircle}\r\n className=\"overflow-y-auto\"\r\n itemCount={filteredComments.length}\r\n onAddItem={handleAddComment}\r\n addItemTitle={t('addCommentTitle')}\r\n switchVariant={{\r\n checked: commentsVisible,\r\n onCheckedChange: toggleCommentsVisibility,\r\n }}\r\n >\r\n <div className=\"space-y-2 mx-2 pr-2 pb-2\">\r\n {filteredComments.map((comment) => (\r\n <CollapsibleCommentItem\r\n key={comment.id}\r\n comment={comment}\r\n onAction={handleCommentAction}\r\n onReply={handleReply}\r\n onEdit={handleEdit}\r\n onFileUpload={handleFileUpload}\r\n replies={repliesByParent.get(comment.id) ?? []}\r\n attachments={[]}\r\n isVisible={commentsVisible}\r\n focused={focusedCommentId === comment.id}\r\n onFocus={() => focusComment(comment.id)}\r\n pendingAction={pendingCommentAction ?? undefined}\r\n onMouseEnter={() => menusDispatch({ type: 'SET_CURRENT_COMMENT_ID', payload: { commentId: comment.id } })}\r\n onMouseLeave={() => menusDispatch({ type: 'SET_CURRENT_COMMENT_ID', payload: { commentId: null } })}\r\n />\r\n ))}\r\n </div>\r\n </CollapsibleSection>\r\n </div>\r\n )\r\n}\r\n"],"mappings":"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","names":["_a"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commentUtils.d.ts","sourceRoot":"","sources":["../../../../../src/core/components/ui/Comments/commentUtils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAErD,KAAK,kBAAkB,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GACrE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,GACxD;IAAE,GAAG,CAAC,EAAE,IAAI,CAAA;CAAE,CAAA;AAGlB,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"commentUtils.d.ts","sourceRoot":"","sources":["../../../../../src/core/components/ui/Comments/commentUtils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAErD,KAAK,kBAAkB,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GACrE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,GACxD;IAAE,GAAG,CAAC,EAAE,IAAI,CAAA;CAAE,CAAA;AAGlB,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBzE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/core/components/ui/Comments/commentUtils.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport type { Comment } from '../../../types/dbTypes'\r\n\r\ntype BuildCommentParams = Omit<Comment, 'id' | 'createdAt' | 'updatedAt'>\r\n & Partial<Pick<Comment, 'id' | 'createdAt' | 'updatedAt'>>\r\n & { now?: Date }\r\n\r\n\r\nexport function buildComment(params: BuildCommentParams): Partial<Comment> {\r\n const now = params.now ?? new Date()\r\n\r\n return {\r\n visible: true,\r\n authorId: params.authorId,\r\n organizationId: params.organizationId,\r\n image: params.image,\r\n text: params.text,\r\n longitude: params.longitude,\r\n latitude: params.latitude,\r\n elevation: params.elevation,\r\n x: params.x,\r\n y: params.y,\r\n z: params.z,\r\n viewer: params.viewer,\r\n buildingId: params.buildingId\r\n }\r\n}\r\n"],"mappings":"AAUO,SAAS,aAAa,QAA8C;AAV3E;AAWE,QAAM,OAAM,YAAO,QAAP,YAAc,oBAAI,KAAK;AAEnC,SAAO;AAAA,IACL,SAAS;AAAA,IACT,UAAU,OAAO;AAAA,IACjB,gBAAgB,OAAO;AAAA,IACvB,OAAO,OAAO;AAAA,IACd,MAAM,OAAO;AAAA,IACb,WAAW,OAAO;AAAA,IAClB,UAAU,OAAO;AAAA,IACjB,WAAW,OAAO;AAAA,IAClB,GAAG,OAAO;AAAA,IACV,GAAG,OAAO;AAAA,IACV,GAAG,OAAO;AAAA,IACV,QAAQ,OAAO;AAAA,IACf,YAAY,OAAO;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../../../../src/core/components/ui/Comments/commentUtils.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport type { Comment } from '../../../types/dbTypes'\r\n\r\ntype BuildCommentParams = Omit<Comment, 'id' | 'createdAt' | 'updatedAt'>\r\n & Partial<Pick<Comment, 'id' | 'createdAt' | 'updatedAt'>>\r\n & { now?: Date }\r\n\r\n\r\nexport function buildComment(params: BuildCommentParams): Partial<Comment> {\r\n const now = params.now ?? new Date()\r\n\r\n return {\r\n visible: true,\r\n authorId: params.authorId,\r\n organizationId: params.organizationId,\r\n image: params.image,\r\n text: params.text,\r\n longitude: params.longitude,\r\n latitude: params.latitude,\r\n elevation: params.elevation,\r\n x: params.x,\r\n y: params.y,\r\n z: params.z,\r\n viewer: params.viewer,\r\n buildingId: params.buildingId,\r\n replyToId: params.replyToId\r\n }\r\n}\r\n"],"mappings":"AAUO,SAAS,aAAa,QAA8C;AAV3E;AAWE,QAAM,OAAM,YAAO,QAAP,YAAc,oBAAI,KAAK;AAEnC,SAAO;AAAA,IACL,SAAS;AAAA,IACT,UAAU,OAAO;AAAA,IACjB,gBAAgB,OAAO;AAAA,IACvB,OAAO,OAAO;AAAA,IACd,MAAM,OAAO;AAAA,IACb,WAAW,OAAO;AAAA,IAClB,UAAU,OAAO;AAAA,IACjB,WAAW,OAAO;AAAA,IAClB,GAAG,OAAO;AAAA,IACV,GAAG,OAAO;AAAA,IACV,GAAG,OAAO;AAAA,IACV,QAAQ,OAAO;AAAA,IACf,YAAY,OAAO;AAAA,IACnB,WAAW,OAAO;AAAA,EACpB;AACF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFileUploadWithProgress.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/ui/FilesManager/src/useFileUploadWithProgress.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,8BAA8B;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,yBAAyB,CAAC,EACxC,iBAAuB,EACvB,eAAe,EACf,aAAa,EACd,GAAE,8BAAmC;;6BASoB,IAAI;;
|
|
1
|
+
{"version":3,"file":"useFileUploadWithProgress.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/ui/FilesManager/src/useFileUploadWithProgress.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,8BAA8B;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,yBAAyB,CAAC,EACxC,iBAAuB,EACvB,eAAe,EACf,aAAa,EACd,GAAE,8BAAmC;;6BASoB,IAAI;;EAkG7D"}
|
|
@@ -54,7 +54,6 @@ function useFileUploadWithProgress({
|
|
|
54
54
|
if (!metadataResponse.ok) {
|
|
55
55
|
throw new Error(`Failed to upload file: ${metadataResponse.statusText}`);
|
|
56
56
|
}
|
|
57
|
-
console.log("File successfully uploaded to API");
|
|
58
57
|
mutate(["files"]);
|
|
59
58
|
onUploadSuccess == null ? void 0 : onUploadSuccess();
|
|
60
59
|
} catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/ui/FilesManager/src/useFileUploadWithProgress.ts"],"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 { mutate } from 'swr'\r\n\r\nimport { uploadFileWithProgress } from '../../../viewers/map/src/tools/AddTools/AddFile/utils/uploadToPresignedURLS'\r\n\r\nfunction getFileExtension(file: File): string {\r\n const parts = file.name.split('.')\r\n if (parts.length <= 1) return ''\r\n return parts.pop()!.toLowerCase()\r\n}\r\n\r\nexport interface UseFileUploadWithProgressProps {\r\n acceptedFileTypes?: string\r\n onUploadSuccess?: () => void\r\n onUploadError?: (error: Error) => void\r\n}\r\n\r\nexport interface UploadState {\r\n uploading: boolean\r\n progress: number\r\n}\r\n\r\nexport function useFileUploadWithProgress({\r\n acceptedFileTypes = '*',\r\n onUploadSuccess,\r\n onUploadError\r\n}: UseFileUploadWithProgressProps = {}) {\r\n\r\n const [uploadState, setUploadState] = React.useState<UploadState>({\r\n uploading: false,\r\n progress: 0\r\n })\r\n\r\n const inputRef = React.useRef<HTMLInputElement | null>(null)\r\n\r\n const handleFileUpload = React.useCallback(async (file: File) => {\r\n setUploadState({ uploading: true, progress: 0 })\r\n\r\n try {\r\n // Generate a unique fileID for minio\r\n const fileId = crypto.randomUUID()\r\n\r\n // Get presigned upload URL for bucket\r\n const response = await fetch(`/api/presigned-url-upload?asset=${fileId}`)\r\n if (!response.ok) {\r\n throw new Error('Failed to fetch presigned URL')\r\n }\r\n const { presignedUrl } = await response.json()\r\n\r\n // Upload file to bucket with progress tracking\r\n await uploadFileWithProgress(presignedUrl, file,\r\n (progress: number) => {\r\n setUploadState({ uploading: true, progress })\r\n },\r\n )\r\n\r\n // Create a new file object with the unique id\r\n const newFile = {\r\n type: 'system',\r\n name: file.name,\r\n url: '',\r\n mimeType: file.type,\r\n extension: getFileExtension(file),\r\n sizeBytes: file.size,\r\n uploadedAt: new Date(),\r\n description: '',\r\n assetId: fileId,\r\n }\r\n\r\n // Upload metadata to API\r\n const metadataResponse = await fetch('/api/files/create', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(newFile),\r\n })\r\n\r\n if (!metadataResponse.ok) {\r\n throw new Error(`Failed to upload file: ${metadataResponse.statusText}`)\r\n }\r\n\r\n
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/ui/FilesManager/src/useFileUploadWithProgress.ts"],"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 { mutate } from 'swr'\r\n\r\nimport { uploadFileWithProgress } from '../../../viewers/map/src/tools/AddTools/AddFile/utils/uploadToPresignedURLS'\r\n\r\nfunction getFileExtension(file: File): string {\r\n const parts = file.name.split('.')\r\n if (parts.length <= 1) return ''\r\n return parts.pop()!.toLowerCase()\r\n}\r\n\r\nexport interface UseFileUploadWithProgressProps {\r\n acceptedFileTypes?: string\r\n onUploadSuccess?: () => void\r\n onUploadError?: (error: Error) => void\r\n}\r\n\r\nexport interface UploadState {\r\n uploading: boolean\r\n progress: number\r\n}\r\n\r\nexport function useFileUploadWithProgress({\r\n acceptedFileTypes = '*',\r\n onUploadSuccess,\r\n onUploadError\r\n}: UseFileUploadWithProgressProps = {}) {\r\n\r\n const [uploadState, setUploadState] = React.useState<UploadState>({\r\n uploading: false,\r\n progress: 0\r\n })\r\n\r\n const inputRef = React.useRef<HTMLInputElement | null>(null)\r\n\r\n const handleFileUpload = React.useCallback(async (file: File) => {\r\n setUploadState({ uploading: true, progress: 0 })\r\n\r\n try {\r\n // Generate a unique fileID for minio\r\n const fileId = crypto.randomUUID()\r\n\r\n // Get presigned upload URL for bucket\r\n const response = await fetch(`/api/presigned-url-upload?asset=${fileId}`)\r\n if (!response.ok) {\r\n throw new Error('Failed to fetch presigned URL')\r\n }\r\n const { presignedUrl } = await response.json()\r\n\r\n // Upload file to bucket with progress tracking\r\n await uploadFileWithProgress(presignedUrl, file,\r\n (progress: number) => {\r\n setUploadState({ uploading: true, progress })\r\n },\r\n )\r\n\r\n // Create a new file object with the unique id\r\n const newFile = {\r\n type: 'system',\r\n name: file.name,\r\n url: '',\r\n mimeType: file.type,\r\n extension: getFileExtension(file),\r\n sizeBytes: file.size,\r\n uploadedAt: new Date(),\r\n description: '',\r\n assetId: fileId,\r\n }\r\n\r\n // Upload metadata to API\r\n const metadataResponse = await fetch('/api/files/create', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(newFile),\r\n })\r\n\r\n if (!metadataResponse.ok) {\r\n throw new Error(`Failed to upload file: ${metadataResponse.statusText}`)\r\n }\r\n\r\n // Revalidate files list\r\n mutate(['files'])\r\n\r\n onUploadSuccess?.()\r\n } catch (error) {\r\n console.error('Error uploading file:', error)\r\n onUploadError?.(error as Error)\r\n } finally {\r\n setUploadState({ uploading: false, progress: 0 })\r\n }\r\n }, [onUploadSuccess, onUploadError])\r\n\r\n const handleAddFile = React.useCallback(() => {\r\n if (uploadState.uploading) return\r\n\r\n // Create or use existing file input element\r\n if (!inputRef.current) {\r\n const input = document.createElement('input')\r\n input.type = 'file'\r\n input.accept = acceptedFileTypes\r\n input.style.display = 'none'\r\n\r\n input.addEventListener('change', async (e) => {\r\n const file = (e.target as HTMLInputElement).files?.[0]\r\n if (!file) return\r\n await handleFileUpload(file)\r\n })\r\n\r\n inputRef.current = input\r\n document.body.appendChild(input)\r\n } else {\r\n inputRef.current.accept = acceptedFileTypes\r\n }\r\n\r\n inputRef.current.click()\r\n }, [acceptedFileTypes, handleFileUpload, uploadState.uploading])\r\n\r\n // Cleanup on unmount\r\n React.useEffect(() => {\r\n return () => {\r\n if (inputRef.current && document.body.contains(inputRef.current)) {\r\n document.body.removeChild(inputRef.current)\r\n }\r\n }\r\n }, [])\r\n\r\n return {\r\n handleAddFile,\r\n handleFileUpload,\r\n uploadState\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../../../../src/core/components/ui/InfoSidebar/Container.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAQ9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAE1D,UAAU,gBAAgB;IACxB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B;AAED,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,WAAW,EACX,YAAY,GACb,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../../../../src/core/components/ui/InfoSidebar/Container.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAQ9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAE1D,UAAU,gBAAgB;IACxB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B;AAED,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,WAAW,EACX,YAAY,GACb,EAAE,gBAAgB,qBAwBlB"}
|
|
@@ -11,18 +11,22 @@ function InfoSidebarContainer({
|
|
|
11
11
|
const { state: buildingState } = React.useContext(BuildingsContext);
|
|
12
12
|
const { building: currentBuilding } = buildingState.buildings;
|
|
13
13
|
const [loadingBuildingInfo] = React.useState(false);
|
|
14
|
-
return
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
14
|
+
return (
|
|
15
|
+
// Fills the InfoSidebar overlay wrapper (Sidebar.tsx), which owns the resizable width.
|
|
16
|
+
// pr-2 keeps a consistent right gutter so content never sits flush against the edge/handle.
|
|
17
|
+
/* @__PURE__ */ jsxs("div", { className: "w-full flex flex-col h-full min-h-0 bg-background border-r border-border pr-2", children: [
|
|
18
|
+
/* @__PURE__ */ jsx(
|
|
19
|
+
Header,
|
|
20
|
+
{
|
|
21
|
+
currentBuilding,
|
|
22
|
+
loadingBuildingInfo,
|
|
23
|
+
organization
|
|
24
|
+
}
|
|
25
|
+
),
|
|
26
|
+
tabSelector,
|
|
27
|
+
children
|
|
28
|
+
] })
|
|
29
|
+
);
|
|
26
30
|
}
|
|
27
31
|
export {
|
|
28
32
|
InfoSidebarContainer
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/core/components/ui/InfoSidebar/Container.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\n\r\n// Icons\r\nimport { BuildingsContext } from '../../../store'\r\n\r\n// New structured components\r\nimport { Header } from './Header'\r\n\r\nimport type { Organization } from '../../../types/dbTypes'\r\n\r\ninterface InfoSidebarProps {\r\n children?: React.ReactNode\r\n tabSelector?: React.ReactNode\r\n organization?: Organization\r\n}\r\n\r\nexport function InfoSidebarContainer({\r\n children,\r\n tabSelector,\r\n organization,\r\n}: InfoSidebarProps) {\r\n const { state: buildingState } = React.useContext(BuildingsContext);\r\n const { building: currentBuilding } = buildingState.buildings;\r\n\r\n // State\r\n const [loadingBuildingInfo] = React.useState(false)\r\n\r\n return (\r\n <div className=\"w-full
|
|
1
|
+
{"version":3,"sources":["../../../../../src/core/components/ui/InfoSidebar/Container.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\n\r\n// Icons\r\nimport { BuildingsContext } from '../../../store'\r\n\r\n// New structured components\r\nimport { Header } from './Header'\r\n\r\nimport type { Organization } from '../../../types/dbTypes'\r\n\r\ninterface InfoSidebarProps {\r\n children?: React.ReactNode\r\n tabSelector?: React.ReactNode\r\n organization?: Organization\r\n}\r\n\r\nexport function InfoSidebarContainer({\r\n children,\r\n tabSelector,\r\n organization,\r\n}: InfoSidebarProps) {\r\n const { state: buildingState } = React.useContext(BuildingsContext);\r\n const { building: currentBuilding } = buildingState.buildings;\r\n\r\n // State\r\n const [loadingBuildingInfo] = React.useState(false)\r\n\r\n return (\r\n // Fills the InfoSidebar overlay wrapper (Sidebar.tsx), which owns the resizable width.\r\n // pr-2 keeps a consistent right gutter so content never sits flush against the edge/handle.\r\n <div className=\"w-full flex flex-col h-full min-h-0 bg-background border-r border-border pr-2\">\r\n <Header\r\n currentBuilding={currentBuilding}\r\n loadingBuildingInfo={loadingBuildingInfo}\r\n organization={organization}\r\n />\r\n\r\n {/* Tab Selector */}\r\n {tabSelector}\r\n\r\n {/* Tab Content */}\r\n {children}\r\n </div>\r\n )\r\n}\r\n"],"mappings":";AAmCI,SACE,KADF;AA9BJ,YAAY,WAAW;AAGvB,SAAS,wBAAwB;AAGjC,SAAS,cAAc;AAUhB,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,EAAE,OAAO,cAAc,IAAI,MAAM,WAAW,gBAAgB;AAClE,QAAM,EAAE,UAAU,gBAAgB,IAAI,cAAc;AAGpD,QAAM,CAAC,mBAAmB,IAAI,MAAM,SAAS,KAAK;AAElD;AAAA;AAAA;AAAA,IAGE,qBAAC,SAAI,WAAU,iFACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACF;AAAA,MAGC;AAAA,MAGE;AAAA,OACL;AAAA;AAEJ;","names":[]}
|
|
@@ -9,8 +9,7 @@ interface CollapsibleSensorItemProps {
|
|
|
9
9
|
isVisible?: boolean;
|
|
10
10
|
onMouseEnter?: () => void;
|
|
11
11
|
onMouseLeave?: () => void;
|
|
12
|
-
minioBaseUrl?: string;
|
|
13
12
|
}
|
|
14
|
-
export declare function CollapsibleSensorItem({ sensor, sensorType, onAction, depth, isVisible, onMouseEnter, onMouseLeave,
|
|
13
|
+
export declare function CollapsibleSensorItem({ sensor, sensorType, onAction, depth, isVisible, onMouseEnter, onMouseLeave, }: CollapsibleSensorItemProps): React.JSX.Element;
|
|
15
14
|
export {};
|
|
16
15
|
//# sourceMappingURL=CollapsibleSensorItem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CollapsibleSensorItem.d.ts","sourceRoot":"","sources":["../../../../../src/core/components/ui/Sensors/CollapsibleSensorItem.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CollapsibleSensorItem.d.ts","sourceRoot":"","sources":["../../../../../src/core/components/ui/Sensors/CollapsibleSensorItem.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAmB9B,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAGhE,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;AAExD,UAAU,0BAA0B;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;IACtB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACrD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;CAC1B;AAED,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,UAAU,EACV,QAAQ,EACR,KAAS,EACT,SAAgB,EAChB,YAAY,EACZ,YAAY,GACb,EAAE,0BAA0B,qBAyL5B"}
|