@collabdt/core 0.3.0 → 0.3.2
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/AppSidebarContent.d.ts +1 -1
- package/dist/core/components/AppSidebarContent.d.ts.map +1 -1
- package/dist/core/components/AppSidebarContent.js +9 -9
- package/dist/core/components/AppSidebarContent.js.map +1 -1
- package/dist/core/components/ConfirmDialog.js.map +1 -1
- package/dist/core/components/DataTableSkeleton.d.ts.map +1 -1
- package/dist/core/components/DataTableSkeleton.js.map +1 -1
- package/dist/core/components/LanguageSwitch.d.ts.map +1 -1
- package/dist/core/components/LanguageSwitch.js +4 -4
- package/dist/core/components/LanguageSwitch.js.map +1 -1
- package/dist/core/components/Logo.js +1 -1
- package/dist/core/components/Logo.js.map +1 -1
- package/dist/core/components/Toolbar.d.ts +1 -1
- package/dist/core/components/Toolbar.d.ts.map +1 -1
- package/dist/core/components/Toolbar.js +1 -1
- package/dist/core/components/Toolbar.js.map +1 -1
- package/dist/core/components/ToolbarBody.d.ts +1 -1
- package/dist/core/components/ToolbarBody.d.ts.map +1 -1
- package/dist/core/components/ToolbarBody.js +1 -1
- package/dist/core/components/ToolbarBody.js.map +1 -1
- package/dist/core/components/ToolbarSubmenu.d.ts +1 -1
- package/dist/core/components/ToolbarSubmenu.d.ts.map +1 -1
- package/dist/core/components/ToolbarSubmenu.js +2 -2
- package/dist/core/components/ToolbarSubmenu.js.map +1 -1
- package/dist/core/components/TopNavigationBar.d.ts.map +1 -1
- package/dist/core/components/TopNavigationBar.js +5 -5
- package/dist/core/components/TopNavigationBar.js.map +1 -1
- package/dist/core/components/authentication/AuthPage.d.ts.map +1 -1
- package/dist/core/components/authentication/AuthPage.js +5 -5
- package/dist/core/components/authentication/AuthPage.js.map +1 -1
- package/dist/core/components/authentication/ForgotPassword.d.ts.map +1 -1
- package/dist/core/components/authentication/ForgotPassword.js +3 -4
- package/dist/core/components/authentication/ForgotPassword.js.map +1 -1
- package/dist/core/components/authentication/Signin.d.ts.map +1 -1
- package/dist/core/components/authentication/Signin.js +5 -5
- package/dist/core/components/authentication/Signin.js.map +1 -1
- package/dist/core/components/authentication/Signup.d.ts.map +1 -1
- package/dist/core/components/authentication/Signup.js +7 -7
- package/dist/core/components/authentication/Signup.js.map +1 -1
- package/dist/core/components/instance-not-found/index.d.ts.map +1 -1
- package/dist/core/components/instance-not-found/index.js +4 -4
- package/dist/core/components/instance-not-found/index.js.map +1 -1
- package/dist/core/components/instance-not-found/src/OrganizationNotFoundSection.d.ts.map +1 -1
- package/dist/core/components/instance-not-found/src/OrganizationNotFoundSection.js +3 -3
- package/dist/core/components/instance-not-found/src/OrganizationNotFoundSection.js.map +1 -1
- package/dist/core/components/organizationConfig/index.d.ts.map +1 -1
- package/dist/core/components/organizationConfig/index.js +4 -4
- package/dist/core/components/organizationConfig/index.js.map +1 -1
- package/dist/core/components/organizationConfig/src/organizationConfigContent.js +2 -2
- package/dist/core/components/organizationConfig/src/organizationConfigContent.js.map +1 -1
- package/dist/core/components/settings/index.d.ts.map +1 -1
- package/dist/core/components/settings/index.js +2 -2
- package/dist/core/components/settings/index.js.map +1 -1
- package/dist/core/components/settings/src/AccountSettingsPanel.d.ts.map +1 -1
- package/dist/core/components/settings/src/AccountSettingsPanel.js +8 -8
- package/dist/core/components/settings/src/AccountSettingsPanel.js.map +1 -1
- package/dist/core/components/settings/src/ChangePassword.d.ts.map +1 -1
- package/dist/core/components/settings/src/ChangePassword.js +5 -5
- package/dist/core/components/settings/src/ChangePassword.js.map +1 -1
- package/dist/core/components/settings/src/OrganizationSettingsPanel.d.ts.map +1 -1
- package/dist/core/components/settings/src/OrganizationSettingsPanel.js +7 -7
- package/dist/core/components/settings/src/OrganizationSettingsPanel.js.map +1 -1
- package/dist/core/components/settings/src/SettingsContent.d.ts.map +1 -1
- package/dist/core/components/settings/src/SettingsContent.js +1 -1
- package/dist/core/components/settings/src/SettingsContent.js.map +1 -1
- package/dist/core/components/settings/src/SettingsSidebar.d.ts.map +1 -1
- package/dist/core/components/settings/src/SettingsSidebar.js +3 -3
- package/dist/core/components/settings/src/SettingsSidebar.js.map +1 -1
- package/dist/core/components/settings/src/UsersSettingsPanel.js +1 -1
- package/dist/core/components/settings/src/UsersSettingsPanel.js.map +1 -1
- package/dist/core/components/support/BugReportDialog.d.ts.map +1 -1
- package/dist/core/components/support/BugReportDialog.js +8 -8
- package/dist/core/components/support/BugReportDialog.js.map +1 -1
- package/dist/core/components/support/FeatureRequestDialog.d.ts.map +1 -1
- package/dist/core/components/support/FeatureRequestDialog.js +6 -6
- package/dist/core/components/support/FeatureRequestDialog.js.map +1 -1
- package/dist/core/components/support/SupportMenu.d.ts.map +1 -1
- package/dist/core/components/support/SupportMenu.js +1 -1
- package/dist/core/components/support/SupportMenu.js.map +1 -1
- package/dist/core/components/ui/Accordion.d.ts +1 -1
- package/dist/core/components/ui/Accordion.d.ts.map +1 -1
- package/dist/core/components/ui/Accordion.js +1 -1
- package/dist/core/components/ui/Accordion.js.map +1 -1
- package/dist/core/components/ui/AddItemDialog.d.ts.map +1 -1
- package/dist/core/components/ui/AddItemDialog.js +1 -1
- package/dist/core/components/ui/AddItemDialog.js.map +1 -1
- package/dist/core/components/ui/AlertDialog.d.ts +1 -1
- package/dist/core/components/ui/AlertDialog.d.ts.map +1 -1
- package/dist/core/components/ui/AlertDialog.js +1 -1
- package/dist/core/components/ui/AlertDialog.js.map +1 -1
- package/dist/core/components/ui/AnimatedBackground.js +1 -1
- package/dist/core/components/ui/AnimatedBackground.js.map +1 -1
- package/dist/core/components/ui/AppSidebar.d.ts.map +1 -1
- package/dist/core/components/ui/AppSidebar.js +7 -7
- package/dist/core/components/ui/AppSidebar.js.map +1 -1
- package/dist/core/components/ui/Avatar.d.ts +1 -1
- package/dist/core/components/ui/Avatar.d.ts.map +1 -1
- package/dist/core/components/ui/Avatar.js +1 -1
- package/dist/core/components/ui/Avatar.js.map +1 -1
- package/dist/core/components/ui/Badge.d.ts.map +1 -1
- package/dist/core/components/ui/Badge.js.map +1 -1
- package/dist/core/components/ui/Breadcrumb.d.ts.map +1 -1
- package/dist/core/components/ui/Breadcrumb.js +2 -2
- package/dist/core/components/ui/Breadcrumb.js.map +1 -1
- package/dist/core/components/ui/Button.d.ts.map +1 -1
- package/dist/core/components/ui/Button.js +1 -1
- package/dist/core/components/ui/Button.js.map +1 -1
- package/dist/core/components/ui/Calendar.d.ts +2 -1
- package/dist/core/components/ui/Calendar.d.ts.map +1 -1
- package/dist/core/components/ui/Calendar.js +1 -1
- package/dist/core/components/ui/Calendar.js.map +1 -1
- package/dist/core/components/ui/Checkbox.d.ts +1 -1
- package/dist/core/components/ui/Checkbox.d.ts.map +1 -1
- package/dist/core/components/ui/Checkbox.js +1 -1
- package/dist/core/components/ui/Checkbox.js.map +1 -1
- package/dist/core/components/ui/CollapsibleSection.d.ts.map +1 -1
- package/dist/core/components/ui/CollapsibleSection.js +2 -2
- package/dist/core/components/ui/CollapsibleSection.js.map +1 -1
- package/dist/core/components/ui/Command.d.ts +8 -8
- package/dist/core/components/ui/Command.d.ts.map +1 -1
- package/dist/core/components/ui/Command.js +1 -1
- package/dist/core/components/ui/Command.js.map +1 -1
- package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts +13 -3
- package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts.map +1 -1
- package/dist/core/components/ui/Comments/CollapsibleCommentItem.js +144 -146
- 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 +97 -26
- package/dist/core/components/ui/Comments/Comment.js.map +1 -1
- package/dist/core/components/ui/Comments/CommentActionButtons.d.ts +34 -0
- package/dist/core/components/ui/Comments/CommentActionButtons.d.ts.map +1 -0
- package/dist/core/components/ui/Comments/CommentActionButtons.js +106 -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 +11 -8
- 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 +89 -45
- package/dist/core/components/ui/Comments/CommentsSection.js.map +1 -1
- package/dist/core/components/ui/Comments/commentUtils.d.ts +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/Countdown.d.ts.map +1 -1
- package/dist/core/components/ui/Countdown.js +1 -1
- package/dist/core/components/ui/Countdown.js.map +1 -1
- package/dist/core/components/ui/DataTable.d.ts +1 -1
- package/dist/core/components/ui/DataTable.d.ts.map +1 -1
- package/dist/core/components/ui/DataTable.js +17 -17
- package/dist/core/components/ui/DataTable.js.map +1 -1
- package/dist/core/components/ui/DatePicker.d.ts.map +1 -1
- package/dist/core/components/ui/DatePicker.js +2 -2
- package/dist/core/components/ui/DatePicker.js.map +1 -1
- package/dist/core/components/ui/DescriptionList.d.ts.map +1 -1
- package/dist/core/components/ui/DescriptionList.js +2 -2
- package/dist/core/components/ui/DescriptionList.js.map +1 -1
- package/dist/core/components/ui/Dialog.d.ts +1 -1
- package/dist/core/components/ui/Dialog.d.ts.map +1 -1
- package/dist/core/components/ui/Dialog.js +1 -1
- package/dist/core/components/ui/Dialog.js.map +1 -1
- package/dist/core/components/ui/DropdownMenu.d.ts +1 -1
- package/dist/core/components/ui/DropdownMenu.d.ts.map +1 -1
- package/dist/core/components/ui/DropdownMenu.js +1 -1
- package/dist/core/components/ui/DropdownMenu.js.map +1 -1
- package/dist/core/components/ui/ExportData.d.ts +2 -2
- package/dist/core/components/ui/ExportData.d.ts.map +1 -1
- package/dist/core/components/ui/ExportData.js +5 -5
- package/dist/core/components/ui/ExportData.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/FileItemComponent.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/FileItemComponent.js +3 -3
- package/dist/core/components/ui/FilesManager/src/FileItemComponent.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/FileMarker.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/FileMarker.js +2 -2
- package/dist/core/components/ui/FilesManager/src/FileMarker.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/ViewerContextMenu.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/ViewerContextMenu.js +1 -1
- package/dist/core/components/ui/FilesManager/src/ViewerContextMenu.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/downloadUtils.d.ts +1 -1
- package/dist/core/components/ui/FilesManager/src/downloadUtils.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/downloadUtils.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useCommonFileUpload.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileActions.d.ts +2 -2
- package/dist/core/components/ui/FilesManager/src/useFileActions.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileActions.js +2 -2
- package/dist/core/components/ui/FilesManager/src/useFileActions.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileDeleteHandler.js +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileDeleteHandler.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.js +3 -3
- package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.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/GenericTool.d.ts +1 -1
- package/dist/core/components/ui/GenericTool.d.ts.map +1 -1
- package/dist/core/components/ui/GenericTool.js +2 -2
- package/dist/core/components/ui/GenericTool.js.map +1 -1
- package/dist/core/components/ui/Icons/FloorPlanIcon.js +1 -1
- package/dist/core/components/ui/Icons/FloorPlanIcon.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/InfoSidebar/Header.d.ts.map +1 -1
- package/dist/core/components/ui/InfoSidebar/Header.js +4 -4
- package/dist/core/components/ui/InfoSidebar/Header.js.map +1 -1
- package/dist/core/components/ui/InfoSidebar/index.d.ts +1 -1
- package/dist/core/components/ui/InfoSidebar/index.d.ts.map +1 -1
- package/dist/core/components/ui/InfoSidebar/index.js +1 -1
- package/dist/core/components/ui/InfoSidebar/index.js.map +1 -1
- package/dist/core/components/ui/Label.d.ts +1 -1
- package/dist/core/components/ui/Label.d.ts.map +1 -1
- package/dist/core/components/ui/Label.js +1 -1
- package/dist/core/components/ui/Label.js.map +1 -1
- package/dist/core/components/ui/LanguageToggle.d.ts +1 -1
- package/dist/core/components/ui/LanguageToggle.d.ts.map +1 -1
- package/dist/core/components/ui/LanguageToggle.js +1 -1
- package/dist/core/components/ui/LanguageToggle.js.map +1 -1
- package/dist/core/components/ui/Menubar.d.ts +1 -1
- package/dist/core/components/ui/Menubar.d.ts.map +1 -1
- package/dist/core/components/ui/Menubar.js +1 -1
- package/dist/core/components/ui/Menubar.js.map +1 -1
- package/dist/core/components/ui/NavUser.js +7 -7
- package/dist/core/components/ui/NavUser.js.map +1 -1
- package/dist/core/components/ui/Navbar.d.ts.map +1 -1
- package/dist/core/components/ui/Navbar.js +2 -2
- package/dist/core/components/ui/Navbar.js.map +1 -1
- package/dist/core/components/ui/Popover.d.ts +1 -1
- package/dist/core/components/ui/Popover.d.ts.map +1 -1
- package/dist/core/components/ui/Popover.js +1 -1
- package/dist/core/components/ui/Popover.js.map +1 -1
- package/dist/core/components/ui/Progress.d.ts +1 -1
- package/dist/core/components/ui/Progress.d.ts.map +1 -1
- package/dist/core/components/ui/Progress.js +1 -1
- package/dist/core/components/ui/Progress.js.map +1 -1
- package/dist/core/components/ui/ScrollArea.d.ts +1 -1
- package/dist/core/components/ui/ScrollArea.d.ts.map +1 -1
- package/dist/core/components/ui/ScrollArea.js +1 -1
- package/dist/core/components/ui/ScrollArea.js.map +1 -1
- package/dist/core/components/ui/SearchInput.d.ts.map +1 -1
- package/dist/core/components/ui/SearchInput.js +2 -2
- package/dist/core/components/ui/SearchInput.js.map +1 -1
- package/dist/core/components/ui/Select.d.ts +1 -1
- package/dist/core/components/ui/Select.d.ts.map +1 -1
- package/dist/core/components/ui/Select.js +3 -3
- package/dist/core/components/ui/Select.js.map +1 -1
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts +1 -1
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js +10 -10
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js.map +1 -1
- package/dist/core/components/ui/Sensors/Sensor.d.ts +2 -1
- package/dist/core/components/ui/Sensors/Sensor.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/Sensor.js +3 -3
- package/dist/core/components/ui/Sensors/Sensor.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorChart.d.ts +1 -1
- package/dist/core/components/ui/Sensors/SensorChart.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/SensorChart.js +1 -1
- package/dist/core/components/ui/Sensors/SensorChart.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorInput.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/SensorInput.js +9 -10
- package/dist/core/components/ui/Sensors/SensorInput.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorTagsSection.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/SensorTagsSection.js +3 -3
- package/dist/core/components/ui/Sensors/SensorTagsSection.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorsSection.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/SensorsSection.js +7 -9
- package/dist/core/components/ui/Sensors/SensorsSection.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorsSectionSkeleton.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/SensorsSectionSkeleton.js.map +1 -1
- package/dist/core/components/ui/Sensors/sensorUtils.d.ts +1 -1
- package/dist/core/components/ui/Sensors/sensorUtils.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/sensorUtils.js.map +1 -1
- package/dist/core/components/ui/Separator.d.ts +1 -1
- package/dist/core/components/ui/Separator.d.ts.map +1 -1
- package/dist/core/components/ui/Separator.js +1 -1
- package/dist/core/components/ui/Separator.js.map +1 -1
- package/dist/core/components/ui/SettingsButton.d.ts.map +1 -1
- package/dist/core/components/ui/SettingsButton.js +4 -4
- package/dist/core/components/ui/SettingsButton.js.map +1 -1
- package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.d.ts +1 -1
- package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.d.ts.map +1 -1
- package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.js +14 -14
- package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.js.map +1 -1
- package/dist/core/components/ui/Sheet.d.ts +1 -1
- package/dist/core/components/ui/Sheet.d.ts.map +1 -1
- package/dist/core/components/ui/Sheet.js +1 -1
- package/dist/core/components/ui/Sheet.js.map +1 -1
- package/dist/core/components/ui/Sidebar.d.ts +1 -1
- package/dist/core/components/ui/Sidebar.d.ts.map +1 -1
- package/dist/core/components/ui/Sidebar.js +33 -10
- package/dist/core/components/ui/Sidebar.js.map +1 -1
- package/dist/core/components/ui/Slider.d.ts +1 -1
- package/dist/core/components/ui/Slider.d.ts.map +1 -1
- package/dist/core/components/ui/Slider.js +1 -1
- package/dist/core/components/ui/Slider.js.map +1 -1
- package/dist/core/components/ui/Switch.d.ts +1 -1
- package/dist/core/components/ui/Switch.d.ts.map +1 -1
- package/dist/core/components/ui/Switch.js +1 -1
- package/dist/core/components/ui/Switch.js.map +1 -1
- package/dist/core/components/ui/Tabs.d.ts +1 -1
- package/dist/core/components/ui/Tabs.d.ts.map +1 -1
- package/dist/core/components/ui/Tabs.js +1 -1
- package/dist/core/components/ui/Tabs.js.map +1 -1
- package/dist/core/components/ui/Toggle.d.ts +1 -1
- package/dist/core/components/ui/Toggle.d.ts.map +1 -1
- package/dist/core/components/ui/Toggle.js +1 -1
- package/dist/core/components/ui/Toggle.js.map +1 -1
- package/dist/core/components/ui/ToggleGroup.d.ts +1 -1
- package/dist/core/components/ui/ToggleGroup.d.ts.map +1 -1
- package/dist/core/components/ui/ToggleGroup.js +1 -1
- package/dist/core/components/ui/ToggleGroup.js.map +1 -1
- package/dist/core/components/ui/ToolbarButton.d.ts +1 -1
- package/dist/core/components/ui/ToolbarButton.d.ts.map +1 -1
- package/dist/core/components/ui/ToolbarButton.js +1 -2
- package/dist/core/components/ui/ToolbarButton.js.map +1 -1
- package/dist/core/components/ui/Tooltip.d.ts +1 -1
- package/dist/core/components/ui/Tooltip.d.ts.map +1 -1
- package/dist/core/components/ui/Tooltip.js +1 -1
- package/dist/core/components/ui/Tooltip.js.map +1 -1
- package/dist/core/components/ui/UserAvatar.d.ts.map +1 -1
- package/dist/core/components/ui/UserAvatar.js +1 -1
- package/dist/core/components/ui/UserAvatar.js.map +1 -1
- package/dist/core/components/ui/downloadUtils.d.ts.map +1 -1
- package/dist/core/components/ui/downloadUtils.js.map +1 -1
- package/dist/core/components/ui/stats.d.ts.map +1 -1
- package/dist/core/components/ui/stats.js.map +1 -1
- package/dist/core/components/ui/uploadFile.js +1 -1
- package/dist/core/components/ui/uploadFile.js.map +1 -1
- package/dist/core/components/viewers/Data/DataMenu.d.ts +1 -1
- package/dist/core/components/viewers/Data/DataMenu.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/DataMenu.js +11 -11
- package/dist/core/components/viewers/Data/DataMenu.js.map +1 -1
- package/dist/core/components/viewers/Data/FilterButtons.d.ts +1 -1
- package/dist/core/components/viewers/Data/FilterButtons.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/FilterButtons.js +7 -7
- package/dist/core/components/viewers/Data/FilterButtons.js.map +1 -1
- package/dist/core/components/viewers/Data/HeaderButtons.d.ts +1 -1
- package/dist/core/components/viewers/Data/HeaderButtons.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/HeaderButtons.js +9 -9
- package/dist/core/components/viewers/Data/HeaderButtons.js.map +1 -1
- package/dist/core/components/viewers/Data/MoreOptions.d.ts +1 -1
- package/dist/core/components/viewers/Data/MoreOptions.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/MoreOptions.js +16 -16
- package/dist/core/components/viewers/Data/MoreOptions.js.map +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/Filters.d.ts +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/Filters.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/Filters.js +2 -2
- package/dist/core/components/viewers/Data/advancedFilter/Filters.js.map +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.d.ts +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.js +6 -8
- package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.js.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.js +3 -3
- package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.js.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/BuildingDetails.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/BuildingDetails.js +10 -10
- package/dist/core/components/viewers/Data/buildingDetails/BuildingDetails.js.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/BuildingsMoreOptions.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/BuildingsMoreOptions.js +11 -11
- package/dist/core/components/viewers/Data/buildingDetails/BuildingsMoreOptions.js.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.js +10 -10
- package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.js.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.js.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/buildingSchemaTemplate.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/buildingSchemaTemplate.js.map +1 -1
- package/dist/core/components/viewers/Data/details/AttachedFiles.d.ts +1 -1
- package/dist/core/components/viewers/Data/details/AttachedFiles.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/AttachedFiles.js +3 -3
- package/dist/core/components/viewers/Data/details/AttachedFiles.js.map +1 -1
- package/dist/core/components/viewers/Data/details/DetailActions.d.ts +1 -1
- package/dist/core/components/viewers/Data/details/DetailActions.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/DetailActions.js +2 -2
- package/dist/core/components/viewers/Data/details/DetailActions.js.map +1 -1
- package/dist/core/components/viewers/Data/details/DetailHeader.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/DetailHeader.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 +4 -14
- package/dist/core/components/viewers/Data/details/EnergySourcesGrid.js.map +1 -1
- package/dist/core/components/viewers/Data/details/FieldValue.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/FieldValue.js +2 -2
- package/dist/core/components/viewers/Data/details/FieldValue.js.map +1 -1
- package/dist/core/components/viewers/Data/details/FileUpload.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/FileUpload.js +2 -2
- package/dist/core/components/viewers/Data/details/FileUpload.js.map +1 -1
- package/dist/core/components/viewers/Data/details/FilterFiles.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/FilterFiles.js +2 -2
- package/dist/core/components/viewers/Data/details/FilterFiles.js.map +1 -1
- package/dist/core/components/viewers/Data/details/TabSidebar.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/TabSidebar.js +3 -3
- package/dist/core/components/viewers/Data/details/TabSidebar.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 +3 -4
- package/dist/core/components/viewers/Data/files/DatatableFileAdder.js.map +1 -1
- package/dist/core/components/viewers/Data/files/FileDetails.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/files/FileDetails.js +8 -8
- package/dist/core/components/viewers/Data/files/FileDetails.js.map +1 -1
- package/dist/core/components/viewers/Data/files/FileMoreOptions.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/files/FileMoreOptions.js +8 -8
- package/dist/core/components/viewers/Data/files/FileMoreOptions.js.map +1 -1
- package/dist/core/components/viewers/Data/files/FilePreview.d.ts +1 -1
- package/dist/core/components/viewers/Data/files/FilePreview.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/files/FilePreview.js +1 -1
- package/dist/core/components/viewers/Data/files/FilePreview.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/infrastructureDetails/AddInfrastructure.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/infrastructureDetails/AddInfrastructure.js +3 -3
- package/dist/core/components/viewers/Data/infrastructureDetails/AddInfrastructure.js.map +1 -1
- package/dist/core/components/viewers/Data/infrastructureDetails/FieldRenderer.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/infrastructureDetails/FieldRenderer.js +2 -2
- package/dist/core/components/viewers/Data/infrastructureDetails/FieldRenderer.js.map +1 -1
- package/dist/core/components/viewers/Data/infrastructureDetails/InfrastructureDetails.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/infrastructureDetails/InfrastructureDetails.js +6 -6
- package/dist/core/components/viewers/Data/infrastructureDetails/InfrastructureDetails.js.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/AddSite.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/AddSite.js +5 -5
- package/dist/core/components/viewers/Data/siteDetails/AddSite.js.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js +10 -10
- package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/FieldRenderer.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/FieldRenderer.js +9 -9
- package/dist/core/components/viewers/Data/siteDetails/FieldRenderer.js.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/SiteDetails.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/SiteDetails.js +11 -11
- package/dist/core/components/viewers/Data/siteDetails/SiteDetails.js.map +1 -1
- package/dist/core/components/viewers/Data/userDetails/AddUser.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/userDetails/AddUser.js +3 -3
- package/dist/core/components/viewers/Data/userDetails/AddUser.js.map +1 -1
- package/dist/core/components/viewers/Data/userDetails/UserDetails.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/userDetails/UserDetails.js +12 -12
- package/dist/core/components/viewers/Data/userDetails/UserDetails.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 +12 -13
- package/dist/core/components/viewers/Data/userDetails/UserMoreOptions.js.map +1 -1
- package/dist/core/components/viewers/Data/utils/Columns.d.ts +2 -2
- package/dist/core/components/viewers/Data/utils/Columns.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/utils/Columns.js +7 -7
- package/dist/core/components/viewers/Data/utils/Columns.js.map +1 -1
- package/dist/core/components/viewers/Data/utils/Headers.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/utils/Headers.js.map +1 -1
- package/dist/core/components/viewers/Data/utils/csvUtils.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/Data/utils/positionParser.js.map +1 -1
- package/dist/core/components/viewers/Data/utils/useViewerData.d.ts +2 -2
- package/dist/core/components/viewers/Data/utils/useViewerData.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/utils/useViewerData.js.map +1 -1
- package/dist/core/components/viewers/Viewer.d.ts +1 -1
- package/dist/core/components/viewers/Viewer.d.ts.map +1 -1
- package/dist/core/components/viewers/Viewer.js +6 -6
- package/dist/core/components/viewers/Viewer.js.map +1 -1
- package/dist/core/components/viewers/bim/BimToolbar.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/BimToolbar.js +1 -1
- package/dist/core/components/viewers/bim/BimToolbar.js.map +1 -1
- package/dist/core/components/viewers/bim/BimViewer.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/BimViewer.js +7 -7
- package/dist/core/components/viewers/bim/BimViewer.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BCFTopicsManager.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BCFTopicsManager.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BIMManager/index.d.ts +2 -2
- package/dist/core/components/viewers/bim/src/BIMManager/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BIMManager/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimLoadingState/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimLoadingState/index.js +9 -9
- package/dist/core/components/viewers/bim/src/BimLoadingState/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimMeasurements/LenghtMeasurement.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimMeasurements/LenghtMeasurement.js +1 -1
- package/dist/core/components/viewers/bim/src/BimMeasurements/LenghtMeasurement.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/index.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/index.js +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CollapsibleTopicItem.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CollapsibleTopicItem.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CollapsibleTopicItem.js +5 -5
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CollapsibleTopicItem.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CreateTopicDialog.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CreateTopicDialog.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CreateTopicDialog.js +9 -9
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CreateTopicDialog.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 +6 -9
- 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/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/index.js +4 -4
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.d.ts +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 +11 -17
- 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 +10 -18
- 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/LayersTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/index.js +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/ElevationsSection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/ElevationsSection.js +2 -2
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/ElevationsSection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/SpatialStructureSection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/SpatialStructureSection.js +6 -6
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/SpatialStructureSection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.d.ts +1 -1
- 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.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/index.js +2 -2
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.js +5 -5
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/LightingManagement.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/LightingManagement.js +3 -3
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/LightingManagement.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.js +3 -3
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.js +4 -4
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.d.ts +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 +5 -4
- package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/index.js +5 -5
- package/dist/core/components/viewers/bim/src/BimSidebar/src/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/CameraProjection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/CameraProjection.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 +1 -2
- package/dist/core/components/viewers/bim/src/ClippingPlane.js.map +1 -1
- package/dist/core/components/viewers/bim/src/Cursor.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/Cursor.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/Cursor.js.map +1 -1
- package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/DXFLoader/index.js +1 -1
- package/dist/core/components/viewers/bim/src/DXFLoader/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/index.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/index.js +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/src/ElevationProjector.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/src/ElevationProjector.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/src/ElevationProjector.js.map +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/src/types.d.ts +4 -4
- package/dist/core/components/viewers/bim/src/ElevationsTool/src/types.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/src/types.js.map +1 -1
- package/dist/core/components/viewers/bim/src/FitCamera.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/FitCamera.js +1 -1
- package/dist/core/components/viewers/bim/src/FitCamera.js.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts +3 -3
- package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/index.js +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/FloorplanRenderer.d.ts +3 -3
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/FloorplanRenderer.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/FloorplanRenderer.js.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/StoreyProjector.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/StoreyProjector.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/StoreyProjector.js.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/types.d.ts +2 -2
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/types.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/types.js.map +1 -1
- package/dist/core/components/viewers/bim/src/GhostMode.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/GhostMode.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/GhostMode.js.map +1 -1
- package/dist/core/components/viewers/bim/src/Highlighter/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/Highlighter/index.js +1 -1
- package/dist/core/components/viewers/bim/src/Highlighter/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/IDSManager/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/IDSManager/index.js +3 -3
- package/dist/core/components/viewers/bim/src/IDSManager/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/IDSManager/src/IDSLegend.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/IDSManager/src/IDSLegend.js +2 -2
- package/dist/core/components/viewers/bim/src/IDSManager/src/IDSLegend.js.map +1 -1
- package/dist/core/components/viewers/bim/src/LoadIfcAsFragments.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/LoadIfcAsFragments.js.map +1 -1
- package/dist/core/components/viewers/bim/src/LoadModels.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/LoadModels.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/LoadModels.js +1 -1
- package/dist/core/components/viewers/bim/src/LoadModels.js.map +1 -1
- package/dist/core/components/viewers/bim/src/ModelManager/index.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/ModelManager/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/ModelManager/index.js +4 -4
- package/dist/core/components/viewers/bim/src/ModelManager/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/SimpleBimViewer.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/SimpleBimViewer.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/SimpleBimViewer.js +8 -8
- package/dist/core/components/viewers/bim/src/SimpleBimViewer.js.map +1 -1
- package/dist/core/components/viewers/bim/src/SpatialStructure.js.map +1 -1
- package/dist/core/components/viewers/bim/src/ViewportGizmo.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/ViewportGizmo.js +2 -2
- package/dist/core/components/viewers/bim/src/ViewportGizmo.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/CameraController.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/lib/CameraController.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/CameraController.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/ChromeController.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/lib/ChromeController.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/ChromeController.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/ClipController.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/lib/ClipController.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/ClipController.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/GridController.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/GridController.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.js +1 -1
- package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/ViewSectionList.d.ts +2 -2
- package/dist/core/components/viewers/bim/src/lib/ViewSectionList.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/ViewSectionList.js +1 -1
- package/dist/core/components/viewers/bim/src/lib/ViewSectionList.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/drawingProjection.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/lib/drawingProjection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/drawingProjection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/useBuildingName.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/useBuildingName.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js +1 -1
- package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/index.js +4 -4
- package/dist/core/components/viewers/bim/src/propertiesMenu/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/ElementList.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/ElementList.js +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/ElementList.js.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertiesMenuHeader.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertiesMenuHeader.js +2 -2
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertiesMenuHeader.js.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertyGroup.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertyGroup.js.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.js +2 -2
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.js.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/utils.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/utils.js.map +1 -1
- 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 +9 -9
- package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js +2 -2
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddFile.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddFile.js +2 -2
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddFile.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddSensor.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddSensor.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddSensor.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddToBimToolbar.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddToBimToolbar.js +3 -3
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddToBimToolbar.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 +23 -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 +108 -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 +2 -2
- 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.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts +5 -5
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js +2 -2
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.js +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.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 +24 -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 +27 -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/renderCSS2DMarkers.d.ts +1 -1
- 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 +3 -3
- 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.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.js +244 -63
- 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/useFilePlacement.d.ts +2 -2
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js +4 -4
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js.map +1 -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 +6 -6
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/BIMSearchTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/BIMSearchTool.js +2 -2
- package/dist/core/components/viewers/bim/src/tools/BIMSearchTool.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.d.ts +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 +6 -10
- 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 +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 +3 -4
- package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/FitCameraTool.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/FitCameraTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/FitCameraTool.js +2 -2
- package/dist/core/components/viewers/bim/src/tools/FitCameraTool.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/InspectBimTool.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/InspectBimTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/InspectBimTool.js +4 -4
- package/dist/core/components/viewers/bim/src/tools/InspectBimTool.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/bimToolbar.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/bimToolbar.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/bimToolbar.js +4 -4
- package/dist/core/components/viewers/bim/src/tools/bimToolbar.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/measureBimTool.d.ts +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 +6 -7
- package/dist/core/components/viewers/bim/src/tools/measureBimTool.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/selectionBimTool.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/selectionBimTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/selectionBimTool.js +5 -5
- package/dist/core/components/viewers/bim/src/tools/selectionBimTool.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/shareBimTool.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/shareBimTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/shareBimTool.js.map +1 -1
- package/dist/core/components/viewers/bim/utils/GizmoController.d.ts +1 -1
- package/dist/core/components/viewers/bim/utils/GizmoController.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/utils/GizmoController.js.map +1 -1
- package/dist/core/components/viewers/bim/utils/setCameraLookAt.d.ts +1 -1
- package/dist/core/components/viewers/bim/utils/setCameraLookAt.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/utils/setCameraLookAt.js.map +1 -1
- package/dist/core/components/viewers/map/MapViewer.d.ts +1 -1
- package/dist/core/components/viewers/map/MapViewer.d.ts.map +1 -1
- package/dist/core/components/viewers/map/MapViewer.js +7 -7
- package/dist/core/components/viewers/map/MapViewer.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/AddPortalDialog.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/AddPortalDialog.js +4 -4
- package/dist/core/components/viewers/map/datasets/AddPortalDialog.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetDetails.d.ts +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetDetails.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetDetails.js +4 -4
- package/dist/core/components/viewers/map/datasets/DatasetDetails.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetManager/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetManager/index.js +13 -13
- package/dist/core/components/viewers/map/datasets/DatasetManager/index.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetManager/src/FieldsTable.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetManager/src/FieldsTable.js +2 -2
- package/dist/core/components/viewers/map/datasets/DatasetManager/src/FieldsTable.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetSkeleton.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetSkeleton.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/Filters.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/Filters.js +2 -2
- package/dist/core/components/viewers/map/datasets/Filters.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/NestedFilter.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/NestedFilter.js +1 -1
- package/dist/core/components/viewers/map/datasets/NestedFilter.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/RowActions.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/RowActions.js +3 -3
- package/dist/core/components/viewers/map/datasets/RowActions.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/data.d.ts +1 -1
- package/dist/core/components/viewers/map/datasets/data.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/data.js +2 -2
- package/dist/core/components/viewers/map/datasets/data.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/index.d.ts +1 -1
- package/dist/core/components/viewers/map/datasets/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/index.js +11 -11
- package/dist/core/components/viewers/map/datasets/index.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.d.ts +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 +13 -16
- package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/cache.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/ckanDatasets.d.ts +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 +3 -6
- package/dist/core/components/viewers/map/datasets/src/ckanDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/localDatasets.d.ts +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 +3 -6
- package/dist/core/components/viewers/map/datasets/src/localDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/minioDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/minioDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.d.ts +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 +1 -12
- package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts +1 -1
- package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/publishedTiles.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/socrataDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/socrataDatasets.js +1 -1
- package/dist/core/components/viewers/map/datasets/src/socrataDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/urlSources.d.ts +1 -12
- package/dist/core/components/viewers/map/datasets/src/urlSources.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/urlSources.js +1 -1
- package/dist/core/components/viewers/map/datasets/src/urlSources.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/useDatasetsForPortals.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/useDatasetsForPortals.js +1 -1
- package/dist/core/components/viewers/map/datasets/src/useDatasetsForPortals.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/useFastDatasetCache.d.ts +1 -1
- package/dist/core/components/viewers/map/datasets/src/useFastDatasetCache.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/useFastDatasetCache.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/utils.d.ts +1 -1
- package/dist/core/components/viewers/map/datasets/utils.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/utils.js.map +1 -1
- package/dist/core/components/viewers/map/legends/MapLegendHost.d.ts.map +1 -1
- package/dist/core/components/viewers/map/legends/MapLegendHost.js +3 -3
- package/dist/core/components/viewers/map/legends/MapLegendHost.js.map +1 -1
- package/dist/core/components/viewers/map/src/Geocoder.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/Geocoder.js +8 -8
- package/dist/core/components/viewers/map/src/Geocoder.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/index.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/index.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/index.js +3 -3
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.d.ts +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 +11 -11
- 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 +23 -56
- 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 +4 -5
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/OpenDataFeaturePopover.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/PopoverSkeleton.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/PopoverSkeleton.js +2 -2
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/PopoverSkeleton.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/index.js +5 -5
- package/dist/core/components/viewers/map/src/MapLayers/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js +5 -5
- package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/index.js +4 -4
- package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/src/databaseBuildings.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/src/databaseBuildings.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/src/databaseBuildings.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 +182 -61
- package/dist/core/components/viewers/map/src/MapLayers/src/CommentLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/EditPosition.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/EditPosition.js +3 -3
- package/dist/core/components/viewers/map/src/MapLayers/src/EditPosition.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.js +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileIcon.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileIcon.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.js +3 -3
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.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 +4 -3
- 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/FileLayer/components/MapFileMarker.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileMarker.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/index.js +6 -6
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/openFileInPopUpWindow.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/openFileInPopUpWindow.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/openFileInPopUpWindow.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js +3 -3
- package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/PlaceOnMap.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/PlaceOnMap.js +3 -3
- package/dist/core/components/viewers/map/src/MapLayers/src/PlaceOnMap.js.map +1 -1
- 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 +11 -14
- package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.js +2 -2
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.js +4 -4
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/index.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/siteGeometry.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/siteGeometry.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/useShowSitesOnMap.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/useShowSitesOnMap.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.d.ts +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 +5 -4
- package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/index.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/index.js +4 -4
- package/dist/core/components/viewers/map/src/MapSidebar/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/CommunicationTab/index.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/CommunicationTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/CommunicationTab/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/index.js +2 -2
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.d.ts +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 +5 -6
- 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 +6 -10
- 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/LayersTab/index.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.js +4 -4
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AppliedDatasetsSection.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AppliedDatasetsSection.js +4 -4
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AppliedDatasetsSection.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AvailableDatasetsSection.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AvailableDatasetsSection.js +2 -2
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AvailableDatasetsSection.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.d.ts +1 -1
- 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.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.js +3 -3
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapCustomization.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapCustomization.js +3 -3
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapCustomization.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapProjection.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapProjection.js +3 -3
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapProjection.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js +3 -3
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js.map +1 -1
- package/dist/core/components/viewers/map/src/SimpleMap.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/SimpleMap.js +1 -1
- package/dist/core/components/viewers/map/src/SimpleMap.js.map +1 -1
- package/dist/core/components/viewers/map/src/compare/AddItem.d.ts +1 -1
- package/dist/core/components/viewers/map/src/compare/AddItem.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/compare/AddItem.js +6 -6
- package/dist/core/components/viewers/map/src/compare/AddItem.js.map +1 -1
- package/dist/core/components/viewers/map/src/compare/CompareDialog.d.ts +2 -2
- package/dist/core/components/viewers/map/src/compare/CompareDialog.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/compare/CompareDialog.js +5 -5
- package/dist/core/components/viewers/map/src/compare/CompareDialog.js.map +1 -1
- package/dist/core/components/viewers/map/src/compare/index.d.ts +1 -1
- package/dist/core/components/viewers/map/src/compare/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/compare/index.js +6 -6
- package/dist/core/components/viewers/map/src/compare/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.js +3 -3
- package/dist/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/FileAdder.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/FileAdder.js +5 -5
- package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/FileAdder.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/src/tools/AddTools/AddSite/AssociateBuildingsDialog.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.js +3 -3
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.js +7 -7
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/persistSite.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/persistSite.js +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/persistSite.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.d.ts +2 -2
- package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.js +8 -8
- package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/DatasetMapTool.d.ts +2 -2
- package/dist/core/components/viewers/map/src/tools/DatasetMapTool.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/DatasetMapTool.js +1 -1
- package/dist/core/components/viewers/map/src/tools/DatasetMapTool.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/mapTools.d.ts +2 -2
- package/dist/core/components/viewers/map/src/tools/mapTools.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/mapTools.js +4 -4
- package/dist/core/components/viewers/map/src/tools/mapTools.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/measureMapTool.d.ts +1 -1
- package/dist/core/components/viewers/map/src/tools/measureMapTool.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/measureMapTool.js +3 -3
- package/dist/core/components/viewers/map/src/tools/measureMapTool.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/shareMapTool.d.ts +1 -1
- package/dist/core/components/viewers/map/src/tools/shareMapTool.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/shareMapTool.js.map +1 -1
- package/dist/core/components/viewers/map/utils/ClusterManager.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/ClusterManager.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/ClusterManager.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/MarkerManager.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/MarkerManager.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/MarkerManager.js.map +1 -1
- package/dist/core/components/viewers/map/utils/extractCoordinates.js.map +1 -1
- package/dist/core/components/viewers/map/utils/fitBuildingsBounds.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/fitBuildingsBounds.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/fitBuildingsBounds.js.map +1 -1
- package/dist/core/components/viewers/map/utils/flyToEach.d.ts +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/geocoder.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/geocoder.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoder.js +1 -1
- package/dist/core/components/viewers/map/utils/geocoder.js.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/adapters.js.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/index.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/index.js +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/index.js.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/osm.js +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/osm.js.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/pelias.js.map +1 -1
- package/dist/core/components/viewers/map/utils/getOsmIdFromMartin.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/getOsmIdFromMartin.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/getOsmIdFromMartin.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/pointcloud/PointCloudToolbar.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/PointCloudToolbar.js +1 -1
- package/dist/core/components/viewers/pointcloud/PointCloudToolbar.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/PointCloudViewer.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/PointCloudViewer.js +5 -5
- package/dist/core/components/viewers/pointcloud/PointCloudViewer.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.js +7 -7
- package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.js +15 -15
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.js +3 -3
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/TabSelector.d.ts +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/TabSelector.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/TabSelector.js +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/TabSelector.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.js +2 -2
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js +3 -3
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.d.ts +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js +4 -4
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.d.ts +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.js +5 -5
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/index.js +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/index.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/CameraSettings.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/CameraSettings.js +3 -3
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/CameraSettings.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/GridManagement.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/GridManagement.js +4 -4
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/GridManagement.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/PerformanceSettings.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/PerformanceSettings.js +10 -10
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/PerformanceSettings.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/ViewportGizmo.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/ClippingTools/ClippingTool.d.ts +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/ClippingTools/ClippingTool.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/ClippingTools/ClippingTool.js +3 -3
- package/dist/core/components/viewers/pointcloud/src/tools/ClippingTools/ClippingTool.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/FitToScreen.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/FitToScreen.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AngleMeasurement.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AngleMeasurement.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AreaMeasurement.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AreaMeasurement.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/LineMeasurement.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/LineMeasurement.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/MeasurePointCloudTool.d.ts +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/MeasurePointCloudTool.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/MeasurePointCloudTool.js +6 -6
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/MeasurePointCloudTool.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PCSearchTool.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PCSearchTool.js +2 -2
- package/dist/core/components/viewers/pointcloud/src/tools/PCSearchTool.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js +2 -2
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PerformanceSettingTools.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PerformanceSettingTools.js +3 -3
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PerformanceSettingTools.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PointBudgetTool.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PointBudgetTool.js +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PointBudgetTool.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/ShowOctreeBoxTool.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/ShowOctreeBoxTool.js +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/ShowOctreeBoxTool.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/SplatQualitySelection.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/SplatQualitySelection.js +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/SplatQualitySelection.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/SetCameraOption.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/SetCameraOption.js +4 -4
- package/dist/core/components/viewers/pointcloud/src/tools/SetCameraOption.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/index.d.ts +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/index.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/index.js +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/index.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/pointcloudToolbarTools.d.ts +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/pointcloudToolbarTools.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/pointcloudToolbarTools.js +2 -2
- package/dist/core/components/viewers/pointcloud/src/tools/pointcloudToolbarTools.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/utils/restoreCameraFromUrl.d.ts +1 -1
- package/dist/core/components/viewers/pointcloud/utils/restoreCameraFromUrl.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/utils/restoreCameraFromUrl.js.map +1 -1
- package/dist/core/hooks/buildings/createBuildingHooks.d.ts +1 -1
- package/dist/core/hooks/buildings/createBuildingHooks.d.ts.map +1 -1
- package/dist/core/hooks/buildings/createBuildingHooks.js.map +1 -1
- 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 +12 -1
- package/dist/core/hooks/comments/createCommentHooks.d.ts.map +1 -1
- package/dist/core/hooks/comments/createCommentHooks.js +31 -2
- package/dist/core/hooks/comments/createCommentHooks.js.map +1 -1
- package/dist/core/hooks/files/createFileHooks.d.ts +1 -1
- package/dist/core/hooks/files/createFileHooks.d.ts.map +1 -1
- package/dist/core/hooks/files/createFileHooks.js.map +1 -1
- package/dist/core/hooks/files/files.d.ts.map +1 -1
- package/dist/core/hooks/files/files.js +1 -2
- package/dist/core/hooks/files/files.js.map +1 -1
- package/dist/core/hooks/infrastructures/createInfrastructureHooks.d.ts +1 -1
- package/dist/core/hooks/infrastructures/createInfrastructureHooks.d.ts.map +1 -1
- package/dist/core/hooks/infrastructures/createInfrastructureHooks.js.map +1 -1
- package/dist/core/hooks/openDataPortals/createOpenDataPortalHooks.d.ts +1 -1
- package/dist/core/hooks/openDataPortals/createOpenDataPortalHooks.d.ts.map +1 -1
- package/dist/core/hooks/openDataPortals/createOpenDataPortalHooks.js.map +1 -1
- package/dist/core/hooks/organizations/createOrganizationHooks.d.ts +1 -1
- package/dist/core/hooks/organizations/createOrganizationHooks.d.ts.map +1 -1
- package/dist/core/hooks/organizations/createOrganizationHooks.js.map +1 -1
- package/dist/core/hooks/provider.d.ts +5 -5
- package/dist/core/hooks/provider.d.ts.map +1 -1
- package/dist/core/hooks/provider.js +4 -4
- package/dist/core/hooks/provider.js.map +1 -1
- package/dist/core/hooks/sensorTypes/createSensorTypeHooks.d.ts +1 -1
- package/dist/core/hooks/sensorTypes/createSensorTypeHooks.d.ts.map +1 -1
- package/dist/core/hooks/sensorTypes/createSensorTypeHooks.js.map +1 -1
- package/dist/core/hooks/sensors/createSensorHooks.d.ts +1 -1
- package/dist/core/hooks/sensors/createSensorHooks.d.ts.map +1 -1
- package/dist/core/hooks/sensors/createSensorHooks.js +1 -1
- package/dist/core/hooks/sensors/createSensorHooks.js.map +1 -1
- package/dist/core/hooks/sites/createSiteHooks.d.ts +1 -1
- package/dist/core/hooks/sites/createSiteHooks.d.ts.map +1 -1
- package/dist/core/hooks/sites/createSiteHooks.js.map +1 -1
- package/dist/core/hooks/sites/sites.d.ts.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/hooks/useCaptureScreenshot.d.ts.map +1 -1
- package/dist/core/hooks/useCaptureScreenshot.js.map +1 -1
- package/dist/core/hooks/useCurrentViewerPosition.d.ts.map +1 -1
- package/dist/core/hooks/useCurrentViewerPosition.js +1 -1
- package/dist/core/hooks/useCurrentViewerPosition.js.map +1 -1
- package/dist/core/hooks/useGeocodingRuntimeConfig.d.ts +1 -1
- package/dist/core/hooks/useGeocodingRuntimeConfig.d.ts.map +1 -1
- package/dist/core/hooks/useGeocodingRuntimeConfig.js.map +1 -1
- package/dist/core/hooks/useShareUrl.d.ts.map +1 -1
- package/dist/core/hooks/useShareUrl.js +1 -1
- package/dist/core/hooks/useShareUrl.js.map +1 -1
- package/dist/core/hooks/users/createUserHooks.d.ts +1 -1
- package/dist/core/hooks/users/createUserHooks.d.ts.map +1 -1
- package/dist/core/hooks/users/createUserHooks.js.map +1 -1
- package/dist/core/i18n/index.js +1 -1
- package/dist/core/i18n/index.js.map +1 -1
- package/dist/core/i18n/messages/en.json +1877 -1872
- package/dist/core/i18n/messages/es.json +1875 -1870
- package/dist/core/i18n/messages/fr.json +1875 -1870
- package/dist/core/plugins/host/context.d.ts +1 -1
- package/dist/core/plugins/host/context.d.ts.map +1 -1
- package/dist/core/plugins/host/context.js.map +1 -1
- package/dist/core/plugins/host/host.d.ts +1 -1
- package/dist/core/plugins/host/host.d.ts.map +1 -1
- package/dist/core/plugins/host/host.js.map +1 -1
- package/dist/core/plugins/host/provider.d.ts.map +1 -1
- package/dist/core/plugins/host/provider.js +2 -2
- package/dist/core/plugins/host/provider.js.map +1 -1
- package/dist/core/store/AppConfig/context.d.ts +1 -1
- package/dist/core/store/AppConfig/context.d.ts.map +1 -1
- package/dist/core/store/AppConfig/context.js.map +1 -1
- package/dist/core/store/AppConfig/reducer.d.ts +2 -2
- package/dist/core/store/AppConfig/reducer.d.ts.map +1 -1
- package/dist/core/store/AppConfig/reducer.js.map +1 -1
- package/dist/core/store/BIM/context.d.ts +1 -1
- package/dist/core/store/BIM/context.d.ts.map +1 -1
- package/dist/core/store/BIM/context.js.map +1 -1
- package/dist/core/store/BIM/reducer.d.ts +3 -3
- package/dist/core/store/BIM/reducer.d.ts.map +1 -1
- package/dist/core/store/BIM/reducer.js.map +1 -1
- package/dist/core/store/Buildings/context.d.ts +1 -1
- package/dist/core/store/Buildings/context.d.ts.map +1 -1
- package/dist/core/store/Buildings/context.js.map +1 -1
- package/dist/core/store/Buildings/reducer.d.ts +2 -2
- package/dist/core/store/Buildings/reducer.d.ts.map +1 -1
- package/dist/core/store/Buildings/reducer.js.map +1 -1
- package/dist/core/store/CombineProviders.d.ts.map +1 -1
- package/dist/core/store/CombineProviders.js +7 -7
- package/dist/core/store/CombineProviders.js.map +1 -1
- package/dist/core/store/Content/context.d.ts +1 -1
- package/dist/core/store/Content/context.d.ts.map +1 -1
- package/dist/core/store/Content/context.js.map +1 -1
- package/dist/core/store/Datasets/context.d.ts +1 -1
- package/dist/core/store/Datasets/context.d.ts.map +1 -1
- package/dist/core/store/Datasets/context.js.map +1 -1
- package/dist/core/store/Datasets/reducer.d.ts +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/context.d.ts +1 -1
- package/dist/core/store/Files/context.d.ts.map +1 -1
- package/dist/core/store/Files/context.js.map +1 -1
- package/dist/core/store/Files/reducer.d.ts +3 -3
- package/dist/core/store/Files/reducer.d.ts.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/Map/context.d.ts +1 -1
- package/dist/core/store/Map/context.d.ts.map +1 -1
- package/dist/core/store/Map/context.js +1 -1
- package/dist/core/store/Map/context.js.map +1 -1
- package/dist/core/store/Map/reducer.d.ts +6 -5
- package/dist/core/store/Map/reducer.d.ts.map +1 -1
- package/dist/core/store/Map/reducer.js.map +1 -1
- package/dist/core/store/MapSites/context.d.ts +1 -1
- package/dist/core/store/MapSites/context.d.ts.map +1 -1
- package/dist/core/store/MapSites/context.js.map +1 -1
- package/dist/core/store/MapSites/reducer.d.ts +1 -1
- package/dist/core/store/MapSites/reducer.d.ts.map +1 -1
- package/dist/core/store/MapSites/reducer.js.map +1 -1
- package/dist/core/store/Menus/context.d.ts +1 -1
- package/dist/core/store/Menus/context.d.ts.map +1 -1
- package/dist/core/store/Menus/context.js +6 -3
- package/dist/core/store/Menus/context.js.map +1 -1
- package/dist/core/store/Menus/reducer.d.ts +21 -1
- package/dist/core/store/Menus/reducer.d.ts.map +1 -1
- package/dist/core/store/Menus/reducer.js +21 -3
- package/dist/core/store/Menus/reducer.js.map +1 -1
- package/dist/core/store/Permissions/context.d.ts +1 -1
- package/dist/core/store/Permissions/context.d.ts.map +1 -1
- package/dist/core/store/Permissions/context.js +2 -2
- package/dist/core/store/Permissions/context.js.map +1 -1
- package/dist/core/store/PointCloud/context.d.ts +1 -1
- package/dist/core/store/PointCloud/context.d.ts.map +1 -1
- package/dist/core/store/PointCloud/context.js.map +1 -1
- package/dist/core/store/PointCloud/reducer.d.ts +1 -1
- package/dist/core/store/PointCloud/reducer.d.ts.map +1 -1
- package/dist/core/store/PointCloud/reducer.js.map +1 -1
- package/dist/core/store/Tools/context.d.ts +1 -1
- package/dist/core/store/Tools/context.d.ts.map +1 -1
- package/dist/core/store/Tools/context.js.map +1 -1
- package/dist/core/store/Tools/reducer.d.ts +1 -1
- package/dist/core/store/Tools/reducer.d.ts.map +1 -1
- package/dist/core/store/Tools/reducer.js.map +1 -1
- package/dist/core/styles/globals.css +17 -16
- package/dist/core/styles/tailwindMerge.d.ts +1 -1
- package/dist/core/styles/tailwindMerge.d.ts.map +1 -1
- package/dist/core/styles/tailwindMerge.js.map +1 -1
- package/dist/core/types/datasetTypes.d.ts +2 -2
- package/dist/core/types/datasetTypes.d.ts.map +1 -1
- package/dist/core/types/dbTypes.d.ts +1 -1
- package/dist/core/types/dbTypes.d.ts.map +1 -1
- package/dist/core/types/dbTypes.js.map +1 -1
- package/dist/core/types/files.d.ts +2 -2
- package/dist/core/types/files.d.ts.map +1 -1
- package/dist/core/types/global.d.ts +3 -3
- package/dist/core/types/global.d.ts.map +1 -1
- package/dist/core/types/global.js.map +1 -1
- package/dist/core/types/map.d.ts +2 -2
- package/dist/core/types/map.d.ts.map +1 -1
- package/dist/core/types/tools.d.ts +3 -3
- package/dist/core/types/tools.d.ts.map +1 -1
- package/dist/core/types/users.d.ts +2 -2
- package/dist/core/types/users.d.ts.map +1 -1
- package/dist/core/utils/getFileIcon.d.ts +1 -1
- package/dist/core/utils/getFileIcon.d.ts.map +1 -1
- package/dist/core/utils/getFileIcon.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/roles.d.ts.map +1 -1
- package/dist/core/utils/roles.js.map +1 -1
- package/dist/core/utils/timeUtils.js.map +1 -1
- package/dist/core/utils/utils.d.ts +1 -1
- package/dist/core/utils/utils.d.ts.map +1 -1
- package/dist/core/utils/utils.js.map +1 -1
- package/package.json +8 -2
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import * as
|
|
3
|
+
import * as LR from "lucide-react";
|
|
4
4
|
import { useTranslations } from "next-intl";
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import { useSites } from "../../../../../hooks/sites/sites";
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import { Button, Input } from "../../../../../components/ui/";
|
|
8
7
|
import {
|
|
9
8
|
DropdownMenu,
|
|
10
9
|
DropdownMenuContent,
|
|
11
10
|
DropdownMenuItem,
|
|
12
11
|
DropdownMenuTrigger
|
|
13
12
|
} from "../../../../../components/ui/DropdownMenu";
|
|
14
|
-
import {
|
|
15
|
-
import
|
|
13
|
+
import { useBuildings } from "../../../../../hooks/buildings/buildings";
|
|
14
|
+
import { useSites } from "../../../../../hooks/sites/sites";
|
|
15
|
+
import { usePermissions } from "../../../../../store";
|
|
16
16
|
function AddItem({ handleAddBuilding, handleAddSite, isComparingSites = false, icon, className, variant }) {
|
|
17
17
|
const t = useTranslations("AddItem");
|
|
18
18
|
const { ability } = usePermissions();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/core/components/viewers/map/src/compare/AddItem.tsx"],"sourcesContent":["\"use client\"\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\n// Dependencies\r\nimport * as React from \"react\";\r\nimport { useTranslations } from 'next-intl'\r\nimport { usePermissions } from '../../../../../store'\r\nimport { useBuildings } from '../../../../../hooks/buildings/buildings'\r\nimport { useSites } from '../../../../../hooks/sites/sites'\r\n\r\n// Data\r\n\r\n\r\n// Shadcn Components\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n} from '../../../../../components/ui/DropdownMenu'\r\nimport { Button, Input } from '../../../../../components/ui/'\r\n\r\n// Icons\r\nimport * as LR from 'lucide-react'\r\nimport { Building, Site } from '../../../../../types/dbTypes';\r\n\r\ninterface AddItemProps {\r\n handleAddBuilding: (building: Building) => void\r\n handleAddSite?: (site: Site) => void\r\n isComparingSites?: boolean\r\n icon?: React.ReactNode\r\n className?: string\r\n variant?: 'secondary' | 'ghost'\r\n}\r\n\r\nexport default function AddItem({ handleAddBuilding, handleAddSite, isComparingSites = false, icon, className, variant }: AddItemProps) {\r\n // Translation\r\n const t = useTranslations('AddItem')\r\n\r\n // Permissions\r\n const { ability } = usePermissions()\r\n\r\n const [searchTerm, setSearchTerm] = React.useState('')\r\n\r\n const { buildings, isLoading: buildingsLoading, isError: buildingsError } = useBuildings()\r\n const { sites, isLoading: sitesLoading, isError: sitesError } = useSites()\r\n\r\n const filteredData = searchTerm.trim() === ''\r\n ? [] // Return empty array when search is empty\r\n : (isComparingSites\r\n ? sites\r\n .filter((site) => {\r\n // Check if any of the fields match\r\n return site.siteName?.toLowerCase().includes(searchTerm.toLowerCase())\r\n || site.siteAddress?.toLowerCase().includes(searchTerm.toLowerCase())\r\n })\r\n .sort((a, b) => {\r\n // Sort by relevance (name > address)\r\n const aNameMatch = a.siteName?.toLowerCase().includes(searchTerm.toLowerCase())\r\n const bNameMatch = b.siteName?.toLowerCase().includes(searchTerm.toLowerCase())\r\n\r\n if (aNameMatch && !bNameMatch) return -1\r\n if (!aNameMatch && bNameMatch) return 1\r\n\r\n const aAddressMatch = a.siteAddress?.toLowerCase().includes(searchTerm.toLowerCase())\r\n const bAddressMatch = b.siteAddress?.toLowerCase().includes(searchTerm.toLowerCase())\r\n\r\n if (aAddressMatch && !bAddressMatch) return -1\r\n if (!aAddressMatch && bAddressMatch) return 1\r\n\r\n return 0\r\n })\r\n .slice(0, 3) // Limit to 3 results\r\n : buildings\r\n .filter((building) => {\r\n // Check if any of the fields match\r\n return building.buildingName?.toLowerCase().includes(searchTerm.toLowerCase())\r\n || building.buildingAddress?.toLowerCase().includes(searchTerm.toLowerCase())\r\n })\r\n .sort((a, b) => {\r\n // Sort by relevance (name > address > site)\r\n const aNameMatch = a.buildingName?.toLowerCase().includes(searchTerm.toLowerCase())\r\n const bNameMatch = b.buildingName?.toLowerCase().includes(searchTerm.toLowerCase())\r\n\r\n if (aNameMatch && !bNameMatch) return -1\r\n if (!aNameMatch && bNameMatch) return 1\r\n\r\n const aAddressMatch = a.buildingAddress?.toLowerCase().includes(searchTerm.toLowerCase())\r\n const bAddressMatch = b.buildingAddress?.toLowerCase().includes(searchTerm.toLowerCase())\r\n\r\n if (aAddressMatch && !bAddressMatch) return -1\r\n if (!aAddressMatch && bAddressMatch) return 1\r\n\r\n return 0\r\n })\r\n .slice(0, 3)) // Limit to 3 results\r\n\r\n return (\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n variant={variant}\r\n className={`dropdown-menu-trigger ${className}`}\r\n onClick={e => e.stopPropagation()}\r\n disabled={buildings && !ability.can('read', 'Building') || sites && !ability.can('read', 'Site')}\r\n >\r\n {icon || <LR.PlusCircle className=\"!w-5 !h-5\" />}\r\n {t('add')}\r\n {' '}\r\n {isComparingSites ? t('siteCap') : t('buildingCap')}\r\n </Button>\r\n </DropdownMenuTrigger>\r\n\r\n <DropdownMenuContent align=\"end\" side=\"top\">\r\n\r\n {/* Search for building */}\r\n <div className=\"relative\">\r\n <LR.Search className=\"absolute left-3 top-2.5 h-4 w-4 text-muted-foreground\" />\r\n <Input\r\n placeholder={`${t('searchPlaceholder')} ${isComparingSites ? t('site') : t('building')}`}\r\n className=\"pl-8 w-[250px]\"\r\n value={searchTerm}\r\n autoFocus\r\n onChange={e => setSearchTerm(e.target.value)}\r\n onKeyDown={(e) => {\r\n e.stopPropagation() // This disables Randix UI's default behavior for dropdown menu navigation\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Search results */}\r\n\r\n {filteredData.length > 0 ? (\r\n // When we have results, map through them\r\n filteredData.map((item, index) => (\r\n <DropdownMenuItem\r\n key={index}\r\n onClick={(e) => {\r\n e.stopPropagation()\r\n // function to add item to compare\r\n if (isComparingSites && handleAddSite) {\r\n handleAddSite(item as Site)\r\n }\r\n else {\r\n handleAddBuilding(item as Building)\r\n }\r\n setSearchTerm('')\r\n }}\r\n tabIndex={0}\r\n >\r\n <div className=\"flex flex-col\">\r\n <span className=\"flex items-center\">\r\n {isComparingSites ? (item as Site).siteName : (item as Building).buildingName}\r\n </span>\r\n {(isComparingSites ? (item as Site).siteAddress : (item as Building).buildingAddress) && (\r\n <span className={`${(isComparingSites ? (item as Site).siteName : (item as Building).buildingName) ? 'text-muted-foreground' : 'text-foreground'} `}>\r\n {isComparingSites ? (item as Site).siteAddress : (item as Building).buildingAddress}\r\n </span>\r\n )}\r\n </div>\r\n </DropdownMenuItem>\r\n ))\r\n ) : (\r\n // When no results but user has typed something\r\n searchTerm.trim() !== '' && (\r\n <DropdownMenuItem disabled>\r\n <span className=\"text-muted-foreground\">{t('noneFound')}</span>\r\n </DropdownMenuItem>\r\n )\r\n )}\r\n\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n )\r\n}"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/core/components/viewers/map/src/compare/AddItem.tsx"],"sourcesContent":["\"use client\"\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\n// Dependencies\r\nimport * as LR from 'lucide-react'\r\nimport { useTranslations } from 'next-intl'\r\nimport * as React from \"react\";\r\n\r\nimport { Button, Input } from '../../../../../components/ui/'\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n} from '../../../../../components/ui/DropdownMenu'\r\nimport { useBuildings } from '../../../../../hooks/buildings/buildings'\r\nimport { useSites } from '../../../../../hooks/sites/sites'\r\nimport { usePermissions } from '../../../../../store'\r\n\r\n// Data\r\n\r\n\r\n// Shadcn Components\r\n\r\n// Icons\r\n\r\nimport type { Building, Site } from '../../../../../types/dbTypes';\r\n\r\ninterface AddItemProps {\r\n handleAddBuilding: (building: Building) => void\r\n handleAddSite?: (site: Site) => void\r\n isComparingSites?: boolean\r\n icon?: React.ReactNode\r\n className?: string\r\n variant?: 'secondary' | 'ghost'\r\n}\r\n\r\nexport default function AddItem({ handleAddBuilding, handleAddSite, isComparingSites = false, icon, className, variant }: AddItemProps) {\r\n // Translation\r\n const t = useTranslations('AddItem')\r\n\r\n // Permissions\r\n const { ability } = usePermissions()\r\n\r\n const [searchTerm, setSearchTerm] = React.useState('')\r\n\r\n const { buildings, isLoading: buildingsLoading, isError: buildingsError } = useBuildings()\r\n const { sites, isLoading: sitesLoading, isError: sitesError } = useSites()\r\n\r\n const filteredData = searchTerm.trim() === ''\r\n ? [] // Return empty array when search is empty\r\n : (isComparingSites\r\n ? sites\r\n .filter((site) => {\r\n // Check if any of the fields match\r\n return site.siteName?.toLowerCase().includes(searchTerm.toLowerCase())\r\n || site.siteAddress?.toLowerCase().includes(searchTerm.toLowerCase())\r\n })\r\n .sort((a, b) => {\r\n // Sort by relevance (name > address)\r\n const aNameMatch = a.siteName?.toLowerCase().includes(searchTerm.toLowerCase())\r\n const bNameMatch = b.siteName?.toLowerCase().includes(searchTerm.toLowerCase())\r\n\r\n if (aNameMatch && !bNameMatch) return -1\r\n if (!aNameMatch && bNameMatch) return 1\r\n\r\n const aAddressMatch = a.siteAddress?.toLowerCase().includes(searchTerm.toLowerCase())\r\n const bAddressMatch = b.siteAddress?.toLowerCase().includes(searchTerm.toLowerCase())\r\n\r\n if (aAddressMatch && !bAddressMatch) return -1\r\n if (!aAddressMatch && bAddressMatch) return 1\r\n\r\n return 0\r\n })\r\n .slice(0, 3) // Limit to 3 results\r\n : buildings\r\n .filter((building) => {\r\n // Check if any of the fields match\r\n return building.buildingName?.toLowerCase().includes(searchTerm.toLowerCase())\r\n || building.buildingAddress?.toLowerCase().includes(searchTerm.toLowerCase())\r\n })\r\n .sort((a, b) => {\r\n // Sort by relevance (name > address > site)\r\n const aNameMatch = a.buildingName?.toLowerCase().includes(searchTerm.toLowerCase())\r\n const bNameMatch = b.buildingName?.toLowerCase().includes(searchTerm.toLowerCase())\r\n\r\n if (aNameMatch && !bNameMatch) return -1\r\n if (!aNameMatch && bNameMatch) return 1\r\n\r\n const aAddressMatch = a.buildingAddress?.toLowerCase().includes(searchTerm.toLowerCase())\r\n const bAddressMatch = b.buildingAddress?.toLowerCase().includes(searchTerm.toLowerCase())\r\n\r\n if (aAddressMatch && !bAddressMatch) return -1\r\n if (!aAddressMatch && bAddressMatch) return 1\r\n\r\n return 0\r\n })\r\n .slice(0, 3)) // Limit to 3 results\r\n\r\n return (\r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <Button\r\n variant={variant}\r\n className={`dropdown-menu-trigger ${className}`}\r\n onClick={e => e.stopPropagation()}\r\n disabled={buildings && !ability.can('read', 'Building') || sites && !ability.can('read', 'Site')}\r\n >\r\n {icon || <LR.PlusCircle className=\"!w-5 !h-5\" />}\r\n {t('add')}\r\n {' '}\r\n {isComparingSites ? t('siteCap') : t('buildingCap')}\r\n </Button>\r\n </DropdownMenuTrigger>\r\n\r\n <DropdownMenuContent align=\"end\" side=\"top\">\r\n\r\n {/* Search for building */}\r\n <div className=\"relative\">\r\n <LR.Search className=\"absolute left-3 top-2.5 h-4 w-4 text-muted-foreground\" />\r\n <Input\r\n placeholder={`${t('searchPlaceholder')} ${isComparingSites ? t('site') : t('building')}`}\r\n className=\"pl-8 w-[250px]\"\r\n value={searchTerm}\r\n autoFocus\r\n onChange={e => setSearchTerm(e.target.value)}\r\n onKeyDown={(e) => {\r\n e.stopPropagation() // This disables Randix UI's default behavior for dropdown menu navigation\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Search results */}\r\n\r\n {filteredData.length > 0 ? (\r\n // When we have results, map through them\r\n filteredData.map((item, index) => (\r\n <DropdownMenuItem\r\n key={index}\r\n onClick={(e) => {\r\n e.stopPropagation()\r\n // function to add item to compare\r\n if (isComparingSites && handleAddSite) {\r\n handleAddSite(item as Site)\r\n }\r\n else {\r\n handleAddBuilding(item as Building)\r\n }\r\n setSearchTerm('')\r\n }}\r\n tabIndex={0}\r\n >\r\n <div className=\"flex flex-col\">\r\n <span className=\"flex items-center\">\r\n {isComparingSites ? (item as Site).siteName : (item as Building).buildingName}\r\n </span>\r\n {(isComparingSites ? (item as Site).siteAddress : (item as Building).buildingAddress) && (\r\n <span className={`${(isComparingSites ? (item as Site).siteName : (item as Building).buildingName) ? 'text-muted-foreground' : 'text-foreground'} `}>\r\n {isComparingSites ? (item as Site).siteAddress : (item as Building).buildingAddress}\r\n </span>\r\n )}\r\n </div>\r\n </DropdownMenuItem>\r\n ))\r\n ) : (\r\n // When no results but user has typed something\r\n searchTerm.trim() !== '' && (\r\n <DropdownMenuItem disabled>\r\n <span className=\"text-muted-foreground\">{t('noneFound')}</span>\r\n </DropdownMenuItem>\r\n )\r\n )}\r\n\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n )\r\n}"],"mappings":";AAwGQ,SAMW,KANX;AAlGR,YAAY,QAAQ;AACpB,SAAS,uBAAuB;AAChC,YAAY,WAAW;AAEvB,SAAS,QAAQ,aAAa;AAC9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,oBAAoB;AAC7B,SAAS,gBAAgB;AACzB,SAAS,sBAAsB;AAoBhB,SAAR,QAAyB,EAAE,mBAAmB,eAAe,mBAAmB,OAAO,MAAM,WAAW,QAAQ,GAAiB;AAEtI,QAAM,IAAI,gBAAgB,SAAS;AAGnC,QAAM,EAAE,QAAQ,IAAI,eAAe;AAEnC,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM,SAAS,EAAE;AAErD,QAAM,EAAE,WAAW,WAAW,kBAAkB,SAAS,eAAe,IAAI,aAAa;AACzF,QAAM,EAAE,OAAO,WAAW,cAAc,SAAS,WAAW,IAAI,SAAS;AAEzE,QAAM,eAAe,WAAW,KAAK,MAAM,KACvC,CAAC,IACA,mBACG,MACG,OAAO,CAAC,SAAS;AAvD9B;AAyDc,aAAO,UAAK,aAAL,mBAAe,cAAc,SAAS,WAAW,YAAY,SAC/D,UAAK,gBAAL,mBAAkB,cAAc,SAAS,WAAW,YAAY;AAAA,EACvE,CAAC,EACA,KAAK,CAAC,GAAG,MAAM;AA5D5B;AA8Dc,UAAM,cAAa,OAAE,aAAF,mBAAY,cAAc,SAAS,WAAW,YAAY;AAC7E,UAAM,cAAa,OAAE,aAAF,mBAAY,cAAc,SAAS,WAAW,YAAY;AAE7E,QAAI,cAAc,CAAC,WAAY,QAAO;AACtC,QAAI,CAAC,cAAc,WAAY,QAAO;AAEtC,UAAM,iBAAgB,OAAE,gBAAF,mBAAe,cAAc,SAAS,WAAW,YAAY;AACnF,UAAM,iBAAgB,OAAE,gBAAF,mBAAe,cAAc,SAAS,WAAW,YAAY;AAEnF,QAAI,iBAAiB,CAAC,cAAe,QAAO;AAC5C,QAAI,CAAC,iBAAiB,cAAe,QAAO;AAE5C,WAAO;AAAA,EACT,CAAC,EACA,MAAM,GAAG,CAAC,IACb,UACG,OAAO,CAAC,aAAa;AA9ElC;AAgFc,aAAO,cAAS,iBAAT,mBAAuB,cAAc,SAAS,WAAW,YAAY,SACvE,cAAS,oBAAT,mBAA0B,cAAc,SAAS,WAAW,YAAY;AAAA,EAC/E,CAAC,EACA,KAAK,CAAC,GAAG,MAAM;AAnF5B;AAqFc,UAAM,cAAa,OAAE,iBAAF,mBAAgB,cAAc,SAAS,WAAW,YAAY;AACjF,UAAM,cAAa,OAAE,iBAAF,mBAAgB,cAAc,SAAS,WAAW,YAAY;AAEjF,QAAI,cAAc,CAAC,WAAY,QAAO;AACtC,QAAI,CAAC,cAAc,WAAY,QAAO;AAEtC,UAAM,iBAAgB,OAAE,oBAAF,mBAAmB,cAAc,SAAS,WAAW,YAAY;AACvF,UAAM,iBAAgB,OAAE,oBAAF,mBAAmB,cAAc,SAAS,WAAW,YAAY;AAEvF,QAAI,iBAAiB,CAAC,cAAe,QAAO;AAC5C,QAAI,CAAC,iBAAiB,cAAe,QAAO;AAE5C,WAAO;AAAA,EACT,CAAC,EACA,MAAM,GAAG,CAAC;AAErB,SACE,qBAAC,gBACC;AAAA,wBAAC,uBAAoB,SAAO,MAC1B;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW,yBAAyB,SAAS;AAAA,QAC7C,SAAS,OAAK,EAAE,gBAAgB;AAAA,QAChC,UAAU,aAAa,CAAC,QAAQ,IAAI,QAAQ,UAAU,KAAK,SAAS,CAAC,QAAQ,IAAI,QAAQ,MAAM;AAAA,QAE9F;AAAA,kBAAQ,oBAAC,GAAG,YAAH,EAAc,WAAU,aAAY;AAAA,UAC7C,EAAE,KAAK;AAAA,UACP;AAAA,UACA,mBAAmB,EAAE,SAAS,IAAI,EAAE,aAAa;AAAA;AAAA;AAAA,IACpD,GACF;AAAA,IAEA,qBAAC,uBAAoB,OAAM,OAAM,MAAK,OAGpC;AAAA,2BAAC,SAAI,WAAU,YACb;AAAA,4BAAC,GAAG,QAAH,EAAU,WAAU,yDAAwD;AAAA,QAC7E;AAAA,UAAC;AAAA;AAAA,YACC,aAAa,GAAG,EAAE,mBAAmB,CAAC,IAAI,mBAAmB,EAAE,MAAM,IAAI,EAAE,UAAU,CAAC;AAAA,YACtF,WAAU;AAAA,YACV,OAAO;AAAA,YACP,WAAS;AAAA,YACT,UAAU,OAAK,cAAc,EAAE,OAAO,KAAK;AAAA,YAC3C,WAAW,CAAC,MAAM;AAChB,gBAAE,gBAAgB;AAAA,YACpB;AAAA;AAAA,QACF;AAAA,SACF;AAAA,MAIC,aAAa,SAAS;AAAA;AAAA,QAErB,aAAa,IAAI,CAAC,MAAM,UACtB;AAAA,UAAC;AAAA;AAAA,YAEC,SAAS,CAAC,MAAM;AACd,gBAAE,gBAAgB;AAElB,kBAAI,oBAAoB,eAAe;AACrC,8BAAc,IAAY;AAAA,cAC5B,OACK;AACH,kCAAkB,IAAgB;AAAA,cACpC;AACA,4BAAc,EAAE;AAAA,YAClB;AAAA,YACA,UAAU;AAAA,YAEV,+BAAC,SAAI,WAAU,iBACb;AAAA,kCAAC,UAAK,WAAU,qBACb,6BAAoB,KAAc,WAAY,KAAkB,cACnE;AAAA,eACE,mBAAoB,KAAc,cAAe,KAAkB,oBACnE,oBAAC,UAAK,WAAW,IAAI,mBAAoB,KAAc,WAAY,KAAkB,gBAAgB,0BAA0B,iBAAiB,KAC7I,6BAAoB,KAAc,cAAe,KAAkB,iBACtE;AAAA,eAEJ;AAAA;AAAA,UAvBK;AAAA,QAwBP,CACD;AAAA;AAAA;AAAA,QAGD,WAAW,KAAK,MAAM,MACpB,oBAAC,oBAAiB,UAAQ,MACxB,8BAAC,UAAK,WAAU,yBAAyB,YAAE,WAAW,GAAE,GAC1D;AAAA;AAAA,OAIN;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { CompareItem } from '../../../../../store';
|
|
3
|
-
import { Building, Site } from '../../../../../types/dbTypes';
|
|
2
|
+
import type { CompareItem } from '../../../../../store';
|
|
3
|
+
import type { Building, Site } from '../../../../../types/dbTypes';
|
|
4
4
|
type CompareDialogProps = {
|
|
5
5
|
toggleOpen: () => void;
|
|
6
6
|
compareItems: CompareItem[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompareDialog.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/src/compare/CompareDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CompareDialog.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/src/compare/CompareDialog.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,OAAO,CAAA;AA4BzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAA;AAElE,KAAK,kBAAkB,GAAG;IACxB,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,YAAY,EAAE,WAAW,EAAE,CAAA;IAC3B,eAAe,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,CAAA;IAC/C,iBAAiB,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC/C,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;CACrC,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa,EAAE,EAAE,kBAAkB,qBAuPxI"}
|
|
@@ -20,10 +20,8 @@ var __spreadValues = (a, b) => {
|
|
|
20
20
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
21
21
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
22
22
|
import * as LR from "lucide-react";
|
|
23
|
-
import React from "react";
|
|
24
23
|
import { useTranslations } from "next-intl";
|
|
25
|
-
import
|
|
26
|
-
import { useBuildingHeaders, useSiteHeaders } from "../../../Data/utils/Headers";
|
|
24
|
+
import React from "react";
|
|
27
25
|
import { Button, ExportData, ColorCircle } from "../../../../../components/ui/";
|
|
28
26
|
import {
|
|
29
27
|
Dialog,
|
|
@@ -34,12 +32,14 @@ import {
|
|
|
34
32
|
DialogTitle,
|
|
35
33
|
DialogTrigger
|
|
36
34
|
} from "../../../../../components/ui/Dialog";
|
|
35
|
+
import { MapContext, useBuildingsContext } from "../../../../../store";
|
|
36
|
+
import { useBuildingHeaders, useSiteHeaders } from "../../../Data/utils/Headers";
|
|
37
|
+
import { fitBuildingsBounds } from "../../utils/fitBuildingsBounds";
|
|
38
|
+
import { stringToColour } from "../../utils/stringToColour";
|
|
37
39
|
import AddItem from "./AddItem";
|
|
38
40
|
import {
|
|
39
41
|
DescriptionListItem
|
|
40
42
|
} from "./description-list";
|
|
41
|
-
import { fitBuildingsBounds } from "../../utils/fitBuildingsBounds";
|
|
42
|
-
import { stringToColour } from "../../utils/stringToColour";
|
|
43
43
|
function CompareDialog({ toggleOpen, compareItems, setCompareItems, handleAddBuilding, handleAddSite }) {
|
|
44
44
|
const t = useTranslations("CompareDialog");
|
|
45
45
|
const { comparing, setComparing } = useBuildingsContext();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/core/components/viewers/map/src/compare/CompareDialog.tsx"],"sourcesContent":["\"use client\"\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\n// Icons\r\nimport * as LR from 'lucide-react'\r\nimport React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\n\r\n// Dependencies\r\n\r\n\r\nimport { MapContext, useBuildingsContext, CompareItem } from '../../../../../store'\r\nimport { useBuildingHeaders, useSiteHeaders } from '../../../Data/utils/Headers'\r\nimport { Button, ExportData, ColorCircle } from '../../../../../components/ui/'\r\n// Shadcn components\r\nimport {\r\n Dialog,\r\n DialogClose,\r\n DialogContent,\r\n DialogDescription,\r\n DialogHeader,\r\n DialogTitle,\r\n DialogTrigger,\r\n} from '../../../../../components/ui/Dialog'\r\n\r\n// Custom Components\r\nimport AddItem from './AddItem'\r\nimport {\r\n DescriptionListItem,\r\n} from './description-list'\r\nimport { fitBuildingsBounds } from '../../utils/fitBuildingsBounds'\r\nimport { stringToColour } from '../../utils/stringToColour'\r\nimport { Building, Site } from '../../../../../types/dbTypes'\r\n\r\ntype CompareDialogProps = {\r\n toggleOpen: () => void\r\n compareItems: CompareItem[]\r\n setCompareItems: (items: CompareItem[]) => void\r\n handleAddBuilding: (building: Building) => void\r\n handleAddSite?: (site: Site) => void\r\n}\r\n\r\nexport default function CompareDialog({ toggleOpen, compareItems, setCompareItems, handleAddBuilding, handleAddSite }: CompareDialogProps) {\r\n // Translation\r\n const t = useTranslations('CompareDialog')\r\n\r\n const { comparing, setComparing } = useBuildingsContext()\r\n const { state: mapState } = React.useContext(MapContext)\r\n const { map } = mapState.map\r\n const [dialogOpen, setDialogOpen] = React.useState(false)\r\n\r\n // Determine if we're comparing buildings or sites\r\n const isComparingSites = compareItems.some(item =>\r\n item.siteName !== undefined || item.siteAddress !== undefined,\r\n )\r\n\r\n // Choose the appropriate headers\r\n const headers = isComparingSites ? useSiteHeaders() : useBuildingHeaders()\r\n const excludedKeys = new Set([\r\n 'id',\r\n 'buildingId',\r\n 'siteId',\r\n 'organizationIds',\r\n 'buildingOwnerIds',\r\n 'buildingName', // Shown in header\r\n 'buildingAddress', // Shown in header\r\n 'siteName', // Shown in header\r\n 'siteAddress', // Shown in header\r\n ])\r\n\r\n const removeBuilding = (index: number) => {\r\n const updatedBuildings = [...compareItems]\r\n updatedBuildings.splice(index, 1)\r\n setCompareItems(updatedBuildings)\r\n }\r\n\r\n const onCloseDialog = () => {\r\n setDialogOpen(false)\r\n // Call the parent's toggleOpen to reset comparing state and clear items\r\n toggleOpen()\r\n }\r\n\r\n const onCompare = () => {\r\n setDialogOpen(true)\r\n if (map) {\r\n // Filter items that have building coordinates\r\n const buildingsWithCoords = compareItems.filter(item =>\r\n item.buildingLongitude != null && item.buildingLatitude != null,\r\n )\r\n if (buildingsWithCoords.length > 0) {\r\n const buildings: Building[] = buildingsWithCoords.map(item => ({\r\n ...item,\r\n id: parseInt(item.id),\r\n buildingEmail: item.buildingEmail || '',\r\n buildingPhoneNumber: item.buildingPhoneNumber || '',\r\n buildingAddress: item.buildingAddress || '',\r\n buildingStreetNumber: item.buildingStreetNumber || '',\r\n buildingStreetName: item.buildingStreetName || '',\r\n buildingStreetType: item.buildingStreetType || '',\r\n buildingStreetDirection: item.buildingStreetDirection || '',\r\n } as Building))\r\n fitBuildingsBounds(buildings, map)\r\n }\r\n }\r\n }\r\n\r\n // Render properties organized by header sections\r\n const renderComparisonContent = () => {\r\n if (compareItems.length === 0)\r\n return null\r\n\r\n return headers.map((section, sectionIndex) => (\r\n <div key={sectionIndex} className=\"mb-6\">\r\n {/* Section Title */}\r\n <div className=\"grid grid-cols-1 md:grid-cols-12 gap-x-6 gap-y-0 border-b border-border\">\r\n <div className=\"col-span-12 py-3 px-2\">\r\n <h3 className=\"text-lg font-semibold text-foreground\">{section.title}</h3>\r\n </div>\r\n </div>\r\n\r\n {/* Properties in this section */}\r\n {section.subsections.map((subsection, subsectionIndex) =>\r\n subsection.fields\r\n .filter(field => !excludedKeys.has(field.property))\r\n .map((field, fieldIndex) => (\r\n <DescriptionListItem key={`${subsectionIndex}-${fieldIndex}`} label={field.label as string}>\r\n <div className=\"grid grid-cols-1 grid-flow-col auto-cols-fr\">\r\n {compareItems.map((item, itemIndex) => (\r\n <div key={itemIndex} className={`py-3 px-2 relative pointer-events-none ${itemIndex === 1 ? 'md:bg-[#f9f9fa]' : ''}`}>\r\n <div\r\n className={`pointer-events-none ${itemIndex === 1 ? `bg-[#f9f9fa] md:bg-transparent absolute h-full w-full top-0 left-0 origin-bottom scale-y-[2] -z-10` : ''}`}\r\n >\r\n </div>\r\n <span className=\"text-sm text-muted-foreground break-words\">\r\n {(() => {\r\n const value = item[field.property]\r\n if (value === null\r\n || value === undefined\r\n || value === 'null'\r\n || value === ''\r\n || (Array.isArray(value) && value.length === 0)) {\r\n return <span className=\"italic\">---</span>\r\n }\r\n\r\n // Handle arrays by joining with commas\r\n if (Array.isArray(value)) {\r\n return value.join(', ')\r\n }\r\n\r\n if (value === true) return 'Yes'\r\n if (value === false) return 'No'\r\n\r\n // Handle other objects\r\n return typeof value === 'object'\r\n ? JSON.stringify(value)\r\n : String(value)\r\n })()}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n </DescriptionListItem>\r\n )),\r\n )}\r\n </div>\r\n ))\r\n }\r\n\r\n return (\r\n <>\r\n <Dialog\r\n open={dialogOpen}\r\n onOpenChange={(open) => {\r\n setDialogOpen(open)\r\n // When dialog closes, reset everything\r\n if (!open) {\r\n toggleOpen()\r\n }\r\n }}\r\n >\r\n <DialogTrigger asChild>\r\n <Button onClick={onCompare}>\r\n {t('compareNow')}\r\n </Button>\r\n </DialogTrigger>\r\n <DialogContent className=\"w-screen h-screen max-w-screen sm:h-auto sm:max-w-[95vw] xl:max-w-[1200px] pb-0\" closeClass=\"hidden\">\r\n <DialogHeader className=\"flex flex-row justify-between items-center\">\r\n {/* Title & Description */}\r\n <div className=\"flex flex-col gap-1.5\">\r\n <DialogTitle>{t('compare')}</DialogTitle>\r\n <DialogDescription>\r\n {t('description1')}\r\n {' '}\r\n {isComparingSites ? t('sites') : t('buildings')}\r\n {' '}\r\n {t('description2')}\r\n </DialogDescription>\r\n </div>\r\n {/* Export & Add buttons */}\r\n <div className=\"flex flex-row gap-2.5 h-full !m-0\">\r\n <ExportData\r\n data={\r\n isComparingSites\r\n ? compareItems.map(item => ({\r\n ...item,\r\n id: Number(item.id),\r\n })) as Site[]\r\n : compareItems.map(item => ({\r\n ...item,\r\n id: Number(item.id),\r\n })) as Building[]\r\n }\r\n variant=\"secondary\"\r\n type={isComparingSites ? \"site\" : \"building\"}\r\n />\r\n {/* Add buildings */}\r\n {compareItems.length < 3 && (\r\n <AddItem\r\n handleAddBuilding={handleAddBuilding}\r\n handleAddSite={handleAddSite}\r\n isComparingSites={isComparingSites}\r\n icon={<LR.GitCompare />}\r\n variant=\"secondary\"\r\n />\r\n )}\r\n\r\n <DialogClose onClick={onCloseDialog} asChild>\r\n <Button\r\n variant=\"ghost\"\r\n className=\"h-9 w-9 rounded-xl text-muted-foreground hover:bg-transparent focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-background focus:ring-primary\"\r\n >\r\n <LR.X className=\"!h-6 !w-6\" />\r\n </Button>\r\n </DialogClose>\r\n </div>\r\n </DialogHeader>\r\n\r\n {/* Compare Layout */}\r\n <div className=\"max-h-[60vh] overflow-y-auto\">\r\n <div className=\"flex flex-col w-full\">\r\n {/* Building headers row */}\r\n <div className=\"grid grid-cols-1 md:grid-cols-12 gap-x-6 gap-y-0 border-y border-border sticky top-0 z-10 bg-background\">\r\n <div className=\"col-span-4 py-0 px-2 text-sm font-semibold text-foreground sticky left-0 bg-background\">\r\n {/* Empty space for property labels column */}\r\n </div>\r\n <div className=\"col-span-8 p-0\">\r\n <div className=\"grid grid-cols-1 grid-flow-col auto-cols-fr h-full\">\r\n {compareItems.map((item, index) => (\r\n <div key={index} className={`flex flex-row justify-between py-3 px-2 ${index === 1 ? 'bg-[#f9f9fa]' : 'bg-background'}`}>\r\n {/* text */}\r\n <div className=\"flex-1\">\r\n <h3 className=\"text-xl text-card-foreground break-words top-4\">\r\n <ColorCircle color={stringToColour(\r\n item.buildingName || item.buildingAddress\r\n || item.siteName || item.siteAddress || t('unknown'),\r\n )}\r\n />\r\n {item.buildingName || item.buildingAddress\r\n || item.siteName || item.siteAddress || t('unknown')}\r\n </h3>\r\n <p className=\"text-xs text-muted-foreground break-words\">\r\n {(item.buildingName && item.buildingAddress)\r\n || (item.siteName && item.siteAddress)}\r\n </p>\r\n </div>\r\n\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent ml-2\"\r\n onClick={() => removeBuilding(index)}\r\n >\r\n <LR.CircleMinus className=\"\" />\r\n </Button>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Render comparison content organized by sections */}\r\n {renderComparisonContent()}\r\n </div>\r\n </div>\r\n\r\n </DialogContent>\r\n </Dialog>\r\n </>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/core/components/viewers/map/src/compare/CompareDialog.tsx"],"sourcesContent":["\"use client\"\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\n// Icons\r\nimport * as LR from 'lucide-react'\r\nimport { useTranslations } from 'next-intl'\r\nimport React from 'react'\r\n\r\n// Dependencies\r\n\r\n\r\nimport { Button, ExportData, ColorCircle } from '../../../../../components/ui/'\r\nimport {\r\n Dialog,\r\n DialogClose,\r\n DialogContent,\r\n DialogDescription,\r\n DialogHeader,\r\n DialogTitle,\r\n DialogTrigger,\r\n} from '../../../../../components/ui/Dialog'\r\nimport { MapContext, useBuildingsContext } from '../../../../../store'\r\nimport { useBuildingHeaders, useSiteHeaders } from '../../../Data/utils/Headers'\r\n// Shadcn components\r\n\r\n// Custom Components\r\nimport { fitBuildingsBounds } from '../../utils/fitBuildingsBounds'\r\nimport { stringToColour } from '../../utils/stringToColour'\r\n\r\nimport AddItem from './AddItem'\r\nimport {\r\n DescriptionListItem,\r\n} from './description-list'\r\n\r\nimport type { CompareItem } from '../../../../../store';\r\nimport type { Building, Site } from '../../../../../types/dbTypes'\r\n\r\ntype CompareDialogProps = {\r\n toggleOpen: () => void\r\n compareItems: CompareItem[]\r\n setCompareItems: (items: CompareItem[]) => void\r\n handleAddBuilding: (building: Building) => void\r\n handleAddSite?: (site: Site) => void\r\n}\r\n\r\nexport default function CompareDialog({ toggleOpen, compareItems, setCompareItems, handleAddBuilding, handleAddSite }: CompareDialogProps) {\r\n // Translation\r\n const t = useTranslations('CompareDialog')\r\n\r\n const { comparing, setComparing } = useBuildingsContext()\r\n const { state: mapState } = React.useContext(MapContext)\r\n const { map } = mapState.map\r\n const [dialogOpen, setDialogOpen] = React.useState(false)\r\n\r\n // Determine if we're comparing buildings or sites\r\n const isComparingSites = compareItems.some(item =>\r\n item.siteName !== undefined || item.siteAddress !== undefined,\r\n )\r\n\r\n // Choose the appropriate headers\r\n const headers = isComparingSites ? useSiteHeaders() : useBuildingHeaders()\r\n const excludedKeys = new Set([\r\n 'id',\r\n 'buildingId',\r\n 'siteId',\r\n 'organizationIds',\r\n 'buildingOwnerIds',\r\n 'buildingName', // Shown in header\r\n 'buildingAddress', // Shown in header\r\n 'siteName', // Shown in header\r\n 'siteAddress', // Shown in header\r\n ])\r\n\r\n const removeBuilding = (index: number) => {\r\n const updatedBuildings = [...compareItems]\r\n updatedBuildings.splice(index, 1)\r\n setCompareItems(updatedBuildings)\r\n }\r\n\r\n const onCloseDialog = () => {\r\n setDialogOpen(false)\r\n // Call the parent's toggleOpen to reset comparing state and clear items\r\n toggleOpen()\r\n }\r\n\r\n const onCompare = () => {\r\n setDialogOpen(true)\r\n if (map) {\r\n // Filter items that have building coordinates\r\n const buildingsWithCoords = compareItems.filter(item =>\r\n item.buildingLongitude != null && item.buildingLatitude != null,\r\n )\r\n if (buildingsWithCoords.length > 0) {\r\n const buildings: Building[] = buildingsWithCoords.map(item => ({\r\n ...item,\r\n id: parseInt(item.id),\r\n buildingEmail: item.buildingEmail || '',\r\n buildingPhoneNumber: item.buildingPhoneNumber || '',\r\n buildingAddress: item.buildingAddress || '',\r\n buildingStreetNumber: item.buildingStreetNumber || '',\r\n buildingStreetName: item.buildingStreetName || '',\r\n buildingStreetType: item.buildingStreetType || '',\r\n buildingStreetDirection: item.buildingStreetDirection || '',\r\n } as Building))\r\n fitBuildingsBounds(buildings, map)\r\n }\r\n }\r\n }\r\n\r\n // Render properties organized by header sections\r\n const renderComparisonContent = () => {\r\n if (compareItems.length === 0)\r\n return null\r\n\r\n return headers.map((section, sectionIndex) => (\r\n <div key={sectionIndex} className=\"mb-6\">\r\n {/* Section Title */}\r\n <div className=\"grid grid-cols-1 md:grid-cols-12 gap-x-6 gap-y-0 border-b border-border\">\r\n <div className=\"col-span-12 py-3 px-2\">\r\n <h3 className=\"text-lg font-semibold text-foreground\">{section.title}</h3>\r\n </div>\r\n </div>\r\n\r\n {/* Properties in this section */}\r\n {section.subsections.map((subsection, subsectionIndex) =>\r\n subsection.fields\r\n .filter(field => !excludedKeys.has(field.property))\r\n .map((field, fieldIndex) => (\r\n <DescriptionListItem key={`${subsectionIndex}-${fieldIndex}`} label={field.label as string}>\r\n <div className=\"grid grid-cols-1 grid-flow-col auto-cols-fr\">\r\n {compareItems.map((item, itemIndex) => (\r\n <div key={itemIndex} className={`py-3 px-2 relative pointer-events-none ${itemIndex === 1 ? 'md:bg-[#f9f9fa]' : ''}`}>\r\n <div\r\n className={`pointer-events-none ${itemIndex === 1 ? `bg-[#f9f9fa] md:bg-transparent absolute h-full w-full top-0 left-0 origin-bottom scale-y-[2] -z-10` : ''}`}\r\n >\r\n </div>\r\n <span className=\"text-sm text-muted-foreground break-words\">\r\n {(() => {\r\n const value = item[field.property]\r\n if (value === null\r\n || value === undefined\r\n || value === 'null'\r\n || value === ''\r\n || (Array.isArray(value) && value.length === 0)) {\r\n return <span className=\"italic\">---</span>\r\n }\r\n\r\n // Handle arrays by joining with commas\r\n if (Array.isArray(value)) {\r\n return value.join(', ')\r\n }\r\n\r\n if (value === true) return 'Yes'\r\n if (value === false) return 'No'\r\n\r\n // Handle other objects\r\n return typeof value === 'object'\r\n ? JSON.stringify(value)\r\n : String(value)\r\n })()}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n </DescriptionListItem>\r\n )),\r\n )}\r\n </div>\r\n ))\r\n }\r\n\r\n return (\r\n <>\r\n <Dialog\r\n open={dialogOpen}\r\n onOpenChange={(open) => {\r\n setDialogOpen(open)\r\n // When dialog closes, reset everything\r\n if (!open) {\r\n toggleOpen()\r\n }\r\n }}\r\n >\r\n <DialogTrigger asChild>\r\n <Button onClick={onCompare}>\r\n {t('compareNow')}\r\n </Button>\r\n </DialogTrigger>\r\n <DialogContent className=\"w-screen h-screen max-w-screen sm:h-auto sm:max-w-[95vw] xl:max-w-[1200px] pb-0\" closeClass=\"hidden\">\r\n <DialogHeader className=\"flex flex-row justify-between items-center\">\r\n {/* Title & Description */}\r\n <div className=\"flex flex-col gap-1.5\">\r\n <DialogTitle>{t('compare')}</DialogTitle>\r\n <DialogDescription>\r\n {t('description1')}\r\n {' '}\r\n {isComparingSites ? t('sites') : t('buildings')}\r\n {' '}\r\n {t('description2')}\r\n </DialogDescription>\r\n </div>\r\n {/* Export & Add buttons */}\r\n <div className=\"flex flex-row gap-2.5 h-full !m-0\">\r\n <ExportData\r\n data={\r\n isComparingSites\r\n ? compareItems.map(item => ({\r\n ...item,\r\n id: Number(item.id),\r\n })) as Site[]\r\n : compareItems.map(item => ({\r\n ...item,\r\n id: Number(item.id),\r\n })) as Building[]\r\n }\r\n variant=\"secondary\"\r\n type={isComparingSites ? \"site\" : \"building\"}\r\n />\r\n {/* Add buildings */}\r\n {compareItems.length < 3 && (\r\n <AddItem\r\n handleAddBuilding={handleAddBuilding}\r\n handleAddSite={handleAddSite}\r\n isComparingSites={isComparingSites}\r\n icon={<LR.GitCompare />}\r\n variant=\"secondary\"\r\n />\r\n )}\r\n\r\n <DialogClose onClick={onCloseDialog} asChild>\r\n <Button\r\n variant=\"ghost\"\r\n className=\"h-9 w-9 rounded-xl text-muted-foreground hover:bg-transparent focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-background focus:ring-primary\"\r\n >\r\n <LR.X className=\"!h-6 !w-6\" />\r\n </Button>\r\n </DialogClose>\r\n </div>\r\n </DialogHeader>\r\n\r\n {/* Compare Layout */}\r\n <div className=\"max-h-[60vh] overflow-y-auto\">\r\n <div className=\"flex flex-col w-full\">\r\n {/* Building headers row */}\r\n <div className=\"grid grid-cols-1 md:grid-cols-12 gap-x-6 gap-y-0 border-y border-border sticky top-0 z-10 bg-background\">\r\n <div className=\"col-span-4 py-0 px-2 text-sm font-semibold text-foreground sticky left-0 bg-background\">\r\n {/* Empty space for property labels column */}\r\n </div>\r\n <div className=\"col-span-8 p-0\">\r\n <div className=\"grid grid-cols-1 grid-flow-col auto-cols-fr h-full\">\r\n {compareItems.map((item, index) => (\r\n <div key={index} className={`flex flex-row justify-between py-3 px-2 ${index === 1 ? 'bg-[#f9f9fa]' : 'bg-background'}`}>\r\n {/* text */}\r\n <div className=\"flex-1\">\r\n <h3 className=\"text-xl text-card-foreground break-words top-4\">\r\n <ColorCircle color={stringToColour(\r\n item.buildingName || item.buildingAddress\r\n || item.siteName || item.siteAddress || t('unknown'),\r\n )}\r\n />\r\n {item.buildingName || item.buildingAddress\r\n || item.siteName || item.siteAddress || t('unknown')}\r\n </h3>\r\n <p className=\"text-xs text-muted-foreground break-words\">\r\n {(item.buildingName && item.buildingAddress)\r\n || (item.siteName && item.siteAddress)}\r\n </p>\r\n </div>\r\n\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent ml-2\"\r\n onClick={() => removeBuilding(index)}\r\n >\r\n <LR.CircleMinus className=\"\" />\r\n </Button>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Render comparison content organized by sections */}\r\n {renderComparisonContent()}\r\n </div>\r\n </div>\r\n\r\n </DialogContent>\r\n </Dialog>\r\n </>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import type { Building } from '../../../../../types/dbTypes';
|
|
2
3
|
import type { Tool } from '../../../../../types/tools';
|
|
3
|
-
import { Building } from '../../../../../types/dbTypes';
|
|
4
4
|
type CompareProps = {
|
|
5
5
|
tool: Tool;
|
|
6
6
|
building?: Building;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/src/compare/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/src/compare/index.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA4B9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AAEtD,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,YAAY,qBA0K/D"}
|
|
@@ -20,10 +20,8 @@ var __spreadValues = (a, b) => {
|
|
|
20
20
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
21
21
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
22
22
|
import * as LR from "lucide-react";
|
|
23
|
-
import * as React from "react";
|
|
24
23
|
import { useTranslations } from "next-intl";
|
|
25
|
-
import
|
|
26
|
-
import { MapContext, useBuildingsContext } from "../../../../../store";
|
|
24
|
+
import * as React from "react";
|
|
27
25
|
import { Button } from "../../../../../components/ui/Button";
|
|
28
26
|
import {
|
|
29
27
|
Card,
|
|
@@ -32,11 +30,13 @@ import {
|
|
|
32
30
|
CardHeader,
|
|
33
31
|
CardTitle
|
|
34
32
|
} from "../../../../../components/ui/Card";
|
|
35
|
-
import
|
|
36
|
-
import
|
|
33
|
+
import ColorCircle from "../../../../../components/ui/ColorCircle";
|
|
34
|
+
import { usePermissions } from "../../../../../store";
|
|
35
|
+
import { MapContext, useBuildingsContext } from "../../../../../store";
|
|
37
36
|
import { MarkerManager } from "../../utils/MarkerManager";
|
|
38
37
|
import { stringToColour } from "../../utils/stringToColour";
|
|
39
|
-
import
|
|
38
|
+
import AddBuildings from "./AddItem";
|
|
39
|
+
import CompareDialog from "./CompareDialog";
|
|
40
40
|
function Compare({ tool, building }) {
|
|
41
41
|
const t = useTranslations("Compare");
|
|
42
42
|
const { ability } = usePermissions();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/core/components/viewers/map/src/compare/index.tsx"],"sourcesContent":["\"use client\"\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\n// Icons\r\nimport * as LR from 'lucide-react'\r\n// Dependencies\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\nimport { usePermissions } from '../../../../../store'\r\n\r\nimport type { Tool } from '../../../../../types/tools'\r\n// Data\r\n\r\n\r\nimport { MapContext, useBuildingsContext } from '../../../../../store'\r\nimport { Button } from '../../../../../components/ui/Button'\r\n// Shadcn Components\r\nimport {\r\n Card,\r\n CardContent,\r\n CardDescription,\r\n CardFooter,\r\n CardHeader,\r\n CardTitle,\r\n} from '../../../../../components/ui/Card'\r\n\r\n\r\n// Custom Components\r\nimport AddBuildings from './AddItem'\r\nimport CompareDialog from './CompareDialog'\r\nimport { MarkerManager } from '../../utils/MarkerManager'\r\nimport { stringToColour } from '../../utils/stringToColour'\r\nimport ColorCircle from '../../../../../components/ui/ColorCircle'\r\nimport { Building } from '../../../../../types/dbTypes'\r\n\r\ntype CompareProps = {\r\n tool: Tool\r\n building?: Building\r\n}\r\n\r\nexport default function Compare({ tool, building }: CompareProps) {\r\n // Translation\r\n const t = useTranslations('Compare')\r\n // Permissions\r\n const { ability } = usePermissions()\r\n\r\n const { state: mapState } = React.useContext(MapContext)\r\n const { map } = mapState.map\r\n\r\n const { compareItems, setCompareItems, comparing, setComparing } = useBuildingsContext()\r\n\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n\r\n const toggleOpen = () => {\r\n setIsOpen(!isOpen)\r\n }\r\n\r\n const onCloseDialog = () => {\r\n setComparing(false)\r\n }\r\n\r\n const handleClearAll = () => {\r\n setComparing(false)\r\n setCompareItems([])\r\n }\r\n\r\n const markerManager = new MarkerManager()\r\n\r\n // This useEffect was causing issues with building marker click events, removing for now\r\n\r\n // Effect to handle building prop if provided\r\n React.useEffect(() => {\r\n\r\n if (!map) return;\r\n\r\n if (building && !compareItems.some(b => b.id === String(building.id))) {\r\n setCompareItems([...compareItems, { ...building, id: String(building.id) }]);\r\n\r\n if (!comparing) return\r\n markerManager.create(\r\n [building.buildingLongitude, building.buildingLatitude],\r\n map,\r\n {\r\n allowMultiple: true, layerColor: stringToColour(building.buildingName || building.buildingAddress)\r\n }\r\n );\r\n }\r\n\r\n }, [building, compareItems, map, comparing]);\r\n\r\n const handleAddBuilding = (building: Building) => {\r\n // Convert building to compareItem format with string ID\r\n const compareItem = { ...building, id: String(building.id) }\r\n setCompareItems([...compareItems, compareItem])\r\n markerManager.create(\r\n [building.buildingLongitude, building.buildingLatitude],\r\n map,\r\n {\r\n allowMultiple: true,\r\n layerColor: stringToColour(building.buildingName || building.buildingAddress),\r\n },\r\n )\r\n }\r\n\r\n const cardAnimationClasses = `pointer-events-auto fixed left-1/2 transform -translate-x-1/2 bottom-0 transition-all duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 ${isOpen ? '' : 'opacity-0 pointer-events-none'}`\r\n\r\n // Close dialog and reset compareItems on Escape key\r\n React.useEffect(() => {\r\n const handleEsc = (event: KeyboardEvent) => {\r\n if (event.key === 'Escape') {\r\n setIsOpen(false)\r\n setComparing(false)\r\n }\r\n }\r\n window.addEventListener('keydown', handleEsc)\r\n return () => window.removeEventListener('keydown', handleEsc)\r\n }, [setComparing])\r\n\r\n return (\r\n <>\r\n <Button\r\n size=\"icon\"\r\n variant=\"ghost\"\r\n className=\"flex justify-center items-center h-9 w-9 pointer-events-auto\"\r\n onClick={toggleOpen}\r\n title={tool.title}\r\n disabled={!ability.can('read', 'Building')}\r\n >\r\n <LR.Columns3 />\r\n </Button>\r\n\r\n <Card className={`${cardAnimationClasses} z-20 w-[80vw] max-w-[900px]`} data-state={isOpen ? 'open' : 'closed'}>\r\n <CardHeader className=\"flex flex-row justify-between items-center py-0\">\r\n <CardTitle>\r\n {t('compareBuildings')}\r\n </CardTitle>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n onClick={toggleOpen}\r\n className=\"opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\"\r\n >\r\n <span className=\"sr-only\">{t('close')}</span>\r\n <LR.X size={18} />\r\n </Button>\r\n </CardHeader>\r\n\r\n <CardContent className=\"p-0\">\r\n <div className=\"flex flex-row p-6 gap-8 items-center border-2 border-dashed border-[#E3E1E4] border-opacity-50 bg-[#E3E1E4] bg-opacity-10 rounded-xl\">\r\n {/* Building cards */}\r\n <div className=\"flex flex-row gap-2 items-stretch justify-center min-h-20\">\r\n\r\n {/* map over selected buildings and populate with building card */}\r\n {compareItems.map((item, index) => (\r\n <Card key={index} className=\"flex flex-col relative\">\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"absolute top-2 right-2 opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent h-6 w-6\"\r\n onClick={() => {\r\n const updatedItems = [...compareItems]\r\n updatedItems.splice(index, 1)\r\n setCompareItems(updatedItems)\r\n }}\r\n >\r\n <LR.CircleMinus className=\"h-4 w-4\" />\r\n </Button>\r\n <CardHeader className=\"flex flex-col justify-center\">\r\n <div className=\"flex items-center mb-2\">\r\n <ColorCircle color={stringToColour(item.buildingName || item.buildingAddress || item.siteName || item.siteAddress)} />\r\n <CardTitle>\r\n {item.buildingName || item.buildingAddress || item.siteName || item.siteAddress}\r\n </CardTitle>\r\n </div>\r\n <CardDescription>\r\n {(item.buildingName && item.buildingAddress) || (item.siteName && item.siteAddress)}\r\n </CardDescription>\r\n </CardHeader>\r\n </Card>\r\n ))}\r\n\r\n {/* Add building button */}\r\n {compareItems.length < 3 && (\r\n <Card className=\"flex flex-col\">\r\n <CardHeader className=\"text-muted-foreground flex-1 flex justify-center items-center p-0\">\r\n <AddBuildings handleAddBuilding={handleAddBuilding} className=\"w-full h-full rounded-xl\" variant=\"ghost\" />\r\n </CardHeader>\r\n </Card>\r\n )}\r\n\r\n </div>\r\n\r\n {/* Compare Button */}\r\n <div className=\"flex flex-col gap-2\">\r\n <CompareDialog\r\n toggleOpen={onCloseDialog}\r\n compareItems={compareItems}\r\n setCompareItems={setCompareItems}\r\n handleAddBuilding={handleAddBuilding}\r\n />\r\n <Button variant=\"outline\" onClick={handleClearAll} disabled={compareItems.length === 0}>\r\n {t('clearAll')}\r\n </Button>\r\n </div>\r\n </div>\r\n </CardContent>\r\n\r\n </Card>\r\n </>\r\n )\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAyHI,mBASI,KAQE,YAjBN;AAnHJ,YAAY,QAAQ;AAEpB,YAAY,WAAW;AACvB,SAAS,uBAAuB;AAChC,SAAS,sBAAsB;AAM/B,SAAS,YAAY,2BAA2B;AAChD,SAAS,cAAc;AAEvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,OACK;AAIP,OAAO,kBAAkB;AACzB,OAAO,mBAAmB;AAC1B,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB;AAC/B,OAAO,iBAAiB;AAQT,SAAR,QAAyB,EAAE,MAAM,SAAS,GAAiB;AAEhE,QAAM,IAAI,gBAAgB,SAAS;AAEnC,QAAM,EAAE,QAAQ,IAAI,eAAe;AAEnC,QAAM,EAAE,OAAO,SAAS,IAAI,MAAM,WAAW,UAAU;AACvD,QAAM,EAAE,IAAI,IAAI,SAAS;AAEzB,QAAM,EAAE,cAAc,iBAAiB,WAAW,aAAa,IAAI,oBAAoB;AAEvF,QAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAS,KAAK;AAEhD,QAAM,aAAa,MAAM;AACvB,cAAU,CAAC,MAAM;AAAA,EACnB;AAEA,QAAM,gBAAgB,MAAM;AAC1B,iBAAa,KAAK;AAAA,EACpB;AAEA,QAAM,iBAAiB,MAAM;AAC3B,iBAAa,KAAK;AAClB,oBAAgB,CAAC,CAAC;AAAA,EACpB;AAEA,QAAM,gBAAgB,IAAI,cAAc;AAKxC,QAAM,UAAU,MAAM;AAEpB,QAAI,CAAC,IAAK;AAEV,QAAI,YAAY,CAAC,aAAa,KAAK,OAAK,EAAE,OAAO,OAAO,SAAS,EAAE,CAAC,GAAG;AACrE,sBAAgB,CAAC,GAAG,cAAc,iCAAK,WAAL,EAAe,IAAI,OAAO,SAAS,EAAE,EAAE,EAAC,CAAC;AAE3E,UAAI,CAAC,UAAW;AAChB,oBAAc;AAAA,QACZ,CAAC,SAAS,mBAAmB,SAAS,gBAAgB;AAAA,QACtD;AAAA,QACA;AAAA,UACE,eAAe;AAAA,UAAM,YAAY,eAAe,SAAS,gBAAgB,SAAS,eAAe;AAAA,QACnG;AAAA,MACF;AAAA,IACF;AAAA,EAEF,GAAG,CAAC,UAAU,cAAc,KAAK,SAAS,CAAC;AAE3C,QAAM,oBAAoB,CAACA,cAAuB;AAEhD,UAAM,cAAc,iCAAKA,YAAL,EAAe,IAAI,OAAOA,UAAS,EAAE,EAAE;AAC3D,oBAAgB,CAAC,GAAG,cAAc,WAAW,CAAC;AAC9C,kBAAc;AAAA,MACZ,CAACA,UAAS,mBAAmBA,UAAS,gBAAgB;AAAA,MACtD;AAAA,MACA;AAAA,QACE,eAAe;AAAA,QACf,YAAY,eAAeA,UAAS,gBAAgBA,UAAS,eAAe;AAAA,MAC9E;AAAA,IACF;AAAA,EACF;AAEA,QAAM,uBAAuB,2RAA2R,SAAS,KAAK,+BAA+B;AAGrW,QAAM,UAAU,MAAM;AACpB,UAAM,YAAY,CAAC,UAAyB;AAC1C,UAAI,MAAM,QAAQ,UAAU;AAC1B,kBAAU,KAAK;AACf,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AACA,WAAO,iBAAiB,WAAW,SAAS;AAC5C,WAAO,MAAM,OAAO,oBAAoB,WAAW,SAAS;AAAA,EAC9D,GAAG,CAAC,YAAY,CAAC;AAEjB,SACE,iCACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,WAAU;AAAA,QACV,SAAS;AAAA,QACT,OAAO,KAAK;AAAA,QACZ,UAAU,CAAC,QAAQ,IAAI,QAAQ,UAAU;AAAA,QAEzC,8BAAC,GAAG,UAAH,EAAY;AAAA;AAAA,IACf;AAAA,IAEA,qBAAC,QAAK,WAAW,GAAG,oBAAoB,gCAAgC,cAAY,SAAS,SAAS,UACpG;AAAA,2BAAC,cAAW,WAAU,mDACpB;AAAA,4BAAC,aACE,YAAE,kBAAkB,GACvB;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,SAAS;AAAA,YACT,WAAU;AAAA,YAEV;AAAA,kCAAC,UAAK,WAAU,WAAW,YAAE,OAAO,GAAE;AAAA,cACtC,oBAAC,GAAG,GAAH,EAAK,MAAM,IAAI;AAAA;AAAA;AAAA,QAClB;AAAA,SACF;AAAA,MAEA,oBAAC,eAAY,WAAU,OACrB,+BAAC,SAAI,WAAU,wIAEb;AAAA,6BAAC,SAAI,WAAU,6DAGZ;AAAA,uBAAa,IAAI,CAAC,MAAM,UACvB,qBAAC,QAAiB,WAAU,0BAC1B;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,SAAS,MAAM;AACb,wBAAM,eAAe,CAAC,GAAG,YAAY;AACrC,+BAAa,OAAO,OAAO,CAAC;AAC5B,kCAAgB,YAAY;AAAA,gBAC9B;AAAA,gBAEA,8BAAC,GAAG,aAAH,EAAe,WAAU,WAAU;AAAA;AAAA,YACtC;AAAA,YACA,qBAAC,cAAW,WAAU,gCACpB;AAAA,mCAAC,SAAI,WAAU,0BACb;AAAA,oCAAC,eAAY,OAAO,eAAe,KAAK,gBAAgB,KAAK,mBAAmB,KAAK,YAAY,KAAK,WAAW,GAAG;AAAA,gBACpH,oBAAC,aACE,eAAK,gBAAgB,KAAK,mBAAmB,KAAK,YAAY,KAAK,aACtE;AAAA,iBACF;AAAA,cACA,oBAAC,mBACG,eAAK,gBAAgB,KAAK,mBAAqB,KAAK,YAAY,KAAK,aACzE;AAAA,eACF;AAAA,eAvBS,KAwBX,CACD;AAAA,UAGA,aAAa,SAAS,KACrB,oBAAC,QAAK,WAAU,iBACd,8BAAC,cAAW,WAAU,qEACpB,8BAAC,gBAAa,mBAAsC,WAAU,4BAA2B,SAAQ,SAAQ,GAC3G,GACF;AAAA,WAGJ;AAAA,QAGA,qBAAC,SAAI,WAAU,uBACb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,YAAY;AAAA,cACZ;AAAA,cACA;AAAA,cACA;AAAA;AAAA,UACF;AAAA,UACA,oBAAC,UAAO,SAAQ,WAAU,SAAS,gBAAgB,UAAU,aAAa,WAAW,GAClF,YAAE,UAAU,GACf;AAAA,WACF;AAAA,SACF,GACF;AAAA,OAEF;AAAA,KACF;AAEJ;","names":["building"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/core/components/viewers/map/src/compare/index.tsx"],"sourcesContent":["\"use client\"\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\n// Icons\r\nimport * as LR from 'lucide-react'\r\n// Dependencies\r\nimport { useTranslations } from 'next-intl'\r\nimport * as React from 'react'\r\n\r\nimport { Button } from '../../../../../components/ui/Button'\r\nimport {\r\n Card,\r\n CardContent,\r\n CardDescription,\r\n CardFooter,\r\n CardHeader,\r\n CardTitle,\r\n} from '../../../../../components/ui/Card'\r\nimport ColorCircle from '../../../../../components/ui/ColorCircle'\r\nimport { usePermissions } from '../../../../../store'\r\n\r\n// Data\r\n\r\n\r\nimport { MapContext, useBuildingsContext } from '../../../../../store'\r\n// Shadcn Components\r\n\r\n\r\n// Custom Components\r\nimport { MarkerManager } from '../../utils/MarkerManager'\r\nimport { stringToColour } from '../../utils/stringToColour'\r\n\r\nimport AddBuildings from './AddItem'\r\nimport CompareDialog from './CompareDialog'\r\n\r\nimport type { Building } from '../../../../../types/dbTypes'\r\nimport type { Tool } from '../../../../../types/tools'\r\n\r\ntype CompareProps = {\r\n tool: Tool\r\n building?: Building\r\n}\r\n\r\nexport default function Compare({ tool, building }: CompareProps) {\r\n // Translation\r\n const t = useTranslations('Compare')\r\n // Permissions\r\n const { ability } = usePermissions()\r\n\r\n const { state: mapState } = React.useContext(MapContext)\r\n const { map } = mapState.map\r\n\r\n const { compareItems, setCompareItems, comparing, setComparing } = useBuildingsContext()\r\n\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n\r\n const toggleOpen = () => {\r\n setIsOpen(!isOpen)\r\n }\r\n\r\n const onCloseDialog = () => {\r\n setComparing(false)\r\n }\r\n\r\n const handleClearAll = () => {\r\n setComparing(false)\r\n setCompareItems([])\r\n }\r\n\r\n const markerManager = new MarkerManager()\r\n\r\n // This useEffect was causing issues with building marker click events, removing for now\r\n\r\n // Effect to handle building prop if provided\r\n React.useEffect(() => {\r\n\r\n if (!map) return;\r\n\r\n if (building && !compareItems.some(b => b.id === String(building.id))) {\r\n setCompareItems([...compareItems, { ...building, id: String(building.id) }]);\r\n\r\n if (!comparing) return\r\n markerManager.create(\r\n [building.buildingLongitude, building.buildingLatitude],\r\n map,\r\n {\r\n allowMultiple: true, layerColor: stringToColour(building.buildingName || building.buildingAddress)\r\n }\r\n );\r\n }\r\n\r\n }, [building, compareItems, map, comparing]);\r\n\r\n const handleAddBuilding = (building: Building) => {\r\n // Convert building to compareItem format with string ID\r\n const compareItem = { ...building, id: String(building.id) }\r\n setCompareItems([...compareItems, compareItem])\r\n markerManager.create(\r\n [building.buildingLongitude, building.buildingLatitude],\r\n map,\r\n {\r\n allowMultiple: true,\r\n layerColor: stringToColour(building.buildingName || building.buildingAddress),\r\n },\r\n )\r\n }\r\n\r\n const cardAnimationClasses = `pointer-events-auto fixed left-1/2 transform -translate-x-1/2 bottom-0 transition-all duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 ${isOpen ? '' : 'opacity-0 pointer-events-none'}`\r\n\r\n // Close dialog and reset compareItems on Escape key\r\n React.useEffect(() => {\r\n const handleEsc = (event: KeyboardEvent) => {\r\n if (event.key === 'Escape') {\r\n setIsOpen(false)\r\n setComparing(false)\r\n }\r\n }\r\n window.addEventListener('keydown', handleEsc)\r\n return () => window.removeEventListener('keydown', handleEsc)\r\n }, [setComparing])\r\n\r\n return (\r\n <>\r\n <Button\r\n size=\"icon\"\r\n variant=\"ghost\"\r\n className=\"flex justify-center items-center h-9 w-9 pointer-events-auto\"\r\n onClick={toggleOpen}\r\n title={tool.title}\r\n disabled={!ability.can('read', 'Building')}\r\n >\r\n <LR.Columns3 />\r\n </Button>\r\n\r\n <Card className={`${cardAnimationClasses} z-20 w-[80vw] max-w-[900px]`} data-state={isOpen ? 'open' : 'closed'}>\r\n <CardHeader className=\"flex flex-row justify-between items-center py-0\">\r\n <CardTitle>\r\n {t('compareBuildings')}\r\n </CardTitle>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n onClick={toggleOpen}\r\n className=\"opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent\"\r\n >\r\n <span className=\"sr-only\">{t('close')}</span>\r\n <LR.X size={18} />\r\n </Button>\r\n </CardHeader>\r\n\r\n <CardContent className=\"p-0\">\r\n <div className=\"flex flex-row p-6 gap-8 items-center border-2 border-dashed border-[#E3E1E4] border-opacity-50 bg-[#E3E1E4] bg-opacity-10 rounded-xl\">\r\n {/* Building cards */}\r\n <div className=\"flex flex-row gap-2 items-stretch justify-center min-h-20\">\r\n\r\n {/* map over selected buildings and populate with building card */}\r\n {compareItems.map((item, index) => (\r\n <Card key={index} className=\"flex flex-col relative\">\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"absolute top-2 right-2 opacity-70 hover:opacity-100 transition-opacity duration-200 hover:bg-transparent h-6 w-6\"\r\n onClick={() => {\r\n const updatedItems = [...compareItems]\r\n updatedItems.splice(index, 1)\r\n setCompareItems(updatedItems)\r\n }}\r\n >\r\n <LR.CircleMinus className=\"h-4 w-4\" />\r\n </Button>\r\n <CardHeader className=\"flex flex-col justify-center\">\r\n <div className=\"flex items-center mb-2\">\r\n <ColorCircle color={stringToColour(item.buildingName || item.buildingAddress || item.siteName || item.siteAddress)} />\r\n <CardTitle>\r\n {item.buildingName || item.buildingAddress || item.siteName || item.siteAddress}\r\n </CardTitle>\r\n </div>\r\n <CardDescription>\r\n {(item.buildingName && item.buildingAddress) || (item.siteName && item.siteAddress)}\r\n </CardDescription>\r\n </CardHeader>\r\n </Card>\r\n ))}\r\n\r\n {/* Add building button */}\r\n {compareItems.length < 3 && (\r\n <Card className=\"flex flex-col\">\r\n <CardHeader className=\"text-muted-foreground flex-1 flex justify-center items-center p-0\">\r\n <AddBuildings handleAddBuilding={handleAddBuilding} className=\"w-full h-full rounded-xl\" variant=\"ghost\" />\r\n </CardHeader>\r\n </Card>\r\n )}\r\n\r\n </div>\r\n\r\n {/* Compare Button */}\r\n <div className=\"flex flex-col gap-2\">\r\n <CompareDialog\r\n toggleOpen={onCloseDialog}\r\n compareItems={compareItems}\r\n setCompareItems={setCompareItems}\r\n handleAddBuilding={handleAddBuilding}\r\n />\r\n <Button variant=\"outline\" onClick={handleClearAll} disabled={compareItems.length === 0}>\r\n {t('clearAll')}\r\n </Button>\r\n </div>\r\n </div>\r\n </CardContent>\r\n\r\n </Card>\r\n </>\r\n )\r\n}\r\n"],"mappings":"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","names":["building"]}
|
package/dist/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatasetAdder.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DatasetAdder.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAsD9B,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,YAAY,GAAI,aAAa,iBAAiB,sBAwR1D,CAAA"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import * as React from "react";
|
|
4
3
|
import { Upload } from "lucide-react";
|
|
4
|
+
import * as React from "react";
|
|
5
5
|
import { DatasetsContext, MapContext } from "../../../../../../../store";
|
|
6
|
-
import { Button, Input } from "../../../../../../ui/";
|
|
7
|
-
import { layerColorByName } from "../../../../utils/stringToColour";
|
|
8
6
|
import { DatasetGroup } from "../../../../../../../types/dbTypes";
|
|
7
|
+
import { Button, Input } from "../../../../../../ui/";
|
|
9
8
|
import { parseGeoJSON } from "../../../../datasets/src/geojsonFile";
|
|
10
9
|
import {
|
|
11
10
|
addWmsToMap,
|
|
@@ -14,6 +13,7 @@ import {
|
|
|
14
13
|
loadVectorUrl,
|
|
15
14
|
nameFromUrl
|
|
16
15
|
} from "../../../../datasets/src/urlSources";
|
|
16
|
+
import { layerColorByName } from "../../../../utils/stringToColour";
|
|
17
17
|
import { uploadToPresignedUrl } from "../AddFile/utils/uploadToPresignedURLS";
|
|
18
18
|
const DATASETS_BUCKET = "pointclouds-demo";
|
|
19
19
|
const DEFAULT_LAYER_STYLES = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../../src/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.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 { Upload } from 'lucide-react'\r\n\r\nimport { DatasetsContext, MapContext } from '../../../../../../../store'\r\nimport { Button, Input } from '../../../../../../ui/'\r\nimport { layerColorByName } from '../../../../utils/stringToColour'\r\nimport { DatasetGroup } from '../../../../../../../types/dbTypes'\r\nimport type { Dataset } from '../../../../../../../types/datasetTypes'\r\nimport { parseGeoJSON, type GeoJSONSummary } from '../../../../datasets/src/geojsonFile'\r\nimport {\r\n addWmsToMap,\r\n detectSourceType,\r\n extractWmsLayers,\r\n loadVectorUrl,\r\n nameFromUrl,\r\n type UrlSourceType,\r\n} from '../../../../datasets/src/urlSources'\r\nimport { uploadToPresignedUrl } from '../AddFile/utils/uploadToPresignedURLS'\r\n\r\n/** Bucket uploaded org datasets land in (orgId prefix added server-side). */\r\nconst DATASETS_BUCKET = 'pointclouds-demo'\r\n\r\n/** Default per-geometry paint, persisted so reload hydration can restyle. */\r\nconst DEFAULT_LAYER_STYLES = {\r\n lineLayerStyle: { 'line-color': '#0d9488', 'line-width': 4 },\r\n pointLayerStyle: { 'circle-color': '#0d9488', 'circle-radius': 8 },\r\n polygonLayerStyle: { 'fill-color': '#0d9488', 'fill-opacity': 0.8 },\r\n}\r\n\r\ntype PersistGeometry = 'points' | 'lines' | 'polygons'\r\n\r\n/** Pick the dominant geometry family for the persisted File row's layerType hint. */\r\nfunction dominantGeometry(summary: GeoJSONSummary): PersistGeometry {\r\n let points = 0\r\n let lines = 0\r\n let polygons = 0\r\n for (const [type, count] of Object.entries(summary.geometryTypes)) {\r\n if (type.includes('Point')) points += count\r\n else if (type.includes('LineString')) lines += count\r\n else if (type.includes('Polygon')) polygons += count\r\n }\r\n if (polygons >= lines && polygons >= points) return 'polygons'\r\n if (lines >= points) return 'lines'\r\n return 'points'\r\n}\r\n\r\ninterface Loaded {\r\n sourceName: string\r\n featureCollection: GeoJSON.FeatureCollection\r\n summary: GeoJSONSummary\r\n /** Present only for file sources — enables MinIO persistence on add. */\r\n file?: File\r\n}\r\n\r\ninterface DatasetAdderProps {\r\n onClose?: () => void\r\n}\r\n\r\n/**\r\n * Add a dataset to the map — from a dropped/picked GeoJSON file, or from a\r\n * pasted URL (GeoJSON, ArcGIS Feature Service, or WMS).\r\n *\r\n * Vector sources (file / GeoJSON URL / ArcGIS) are parsed client-side and\r\n * registered into DatasetsContext; the existing OpenDataLayers renderer draws\r\n * them. WMS is a raster overlay added straight to the map.\r\n *\r\n * File uploads are additionally persisted: the raw GeoJSON is uploaded to MinIO\r\n * and a File row is created so the dataset re-hydrates on the next load (via\r\n * minioDatasets.ts). URL/WMS imports are session-only — there is no file to\r\n * persist.\r\n */\r\nexport const DatasetAdder = ({ onClose }: DatasetAdderProps) => {\r\n const { dispatch: datasetDispatch } = React.useContext(DatasetsContext)\r\n const { state: mapState } = React.useContext(MapContext)\r\n const map = mapState.map.map\r\n\r\n const [loaded, setLoaded] = React.useState<Loaded | null>(null)\r\n const [error, setError] = React.useState<string | null>(null)\r\n const [dragActive, setDragActive] = React.useState(false)\r\n\r\n const [url, setUrl] = React.useState('')\r\n const [urlType, setUrlType] = React.useState<UrlSourceType>('geojson')\r\n const [wmsLayers, setWmsLayers] = React.useState('')\r\n const [busy, setBusy] = React.useState(false)\r\n const [saving, setSaving] = React.useState(false)\r\n\r\n const handleFile = React.useCallback(async (file: File) => {\r\n setError(null)\r\n try {\r\n const { featureCollection, summary } = parseGeoJSON(await file.text())\r\n setLoaded({ sourceName: file.name, featureCollection, summary, file })\r\n }\r\n catch (e) {\r\n setLoaded(null)\r\n setError(e instanceof Error ? e.message : 'Failed to read file')\r\n }\r\n }, [])\r\n\r\n const onDrop = React.useCallback((e: React.DragEvent) => {\r\n e.preventDefault()\r\n setDragActive(false)\r\n const file = e.dataTransfer.files?.[0]\r\n if (file) void handleFile(file)\r\n }, [handleFile])\r\n\r\n const handleUrlChange = (value: string) => {\r\n setUrl(value)\r\n if (!value.trim()) return\r\n const detected = detectSourceType(value)\r\n setUrlType(detected)\r\n if (detected === 'wms') {\r\n const layers = extractWmsLayers(value)\r\n if (layers) setWmsLayers(layers)\r\n }\r\n }\r\n\r\n const loadFromUrl = React.useCallback(async () => {\r\n const trimmed = url.trim()\r\n if (!trimmed) return\r\n setError(null)\r\n setBusy(true)\r\n try {\r\n const { featureCollection, summary } = await loadVectorUrl(\r\n trimmed,\r\n urlType === 'arcgis' ? 'arcgis' : 'geojson',\r\n )\r\n setLoaded({ sourceName: nameFromUrl(trimmed), featureCollection, summary })\r\n }\r\n catch (e) {\r\n setLoaded(null)\r\n setError(e instanceof Error ? e.message : 'Failed to load URL')\r\n }\r\n finally {\r\n setBusy(false)\r\n }\r\n }, [url, urlType])\r\n\r\n const addWms = React.useCallback(() => {\r\n const trimmed = url.trim()\r\n if (!map) { setError('Open the Map viewer first.'); return }\r\n if (!trimmed || !wmsLayers.trim()) { setError('A WMS URL and layer name are required.'); return }\r\n try {\r\n addWmsToMap(map, trimmed, wmsLayers.trim())\r\n onClose?.()\r\n }\r\n catch (e) {\r\n setError(e instanceof Error ? e.message : 'Failed to add WMS layer')\r\n }\r\n }, [map, url, wmsLayers, onClose])\r\n\r\n /**\r\n * Upload the dropped/picked file to MinIO and create a File row so the\r\n * dataset survives a reload. Best-effort: a failure leaves the dataset\r\n * session-only rather than blocking the add.\r\n */\r\n const persistFile = React.useCallback(async (file: File, geometry: PersistGeometry) => {\r\n const assetId = `${crypto.randomUUID()}.geojson`\r\n const presignedRes = await fetch(\r\n `/api/presigned-url-upload?asset=${encodeURIComponent(assetId)}&bucket=${DATASETS_BUCKET}`,\r\n )\r\n if (!presignedRes.ok) throw new Error(`presigned URL failed: ${presignedRes.status}`)\r\n const { presignedUrl } = await presignedRes.json()\r\n await uploadToPresignedUrl(presignedUrl, file)\r\n\r\n const fileRow = {\r\n type: 'map-file',\r\n name: file.name,\r\n assetId,\r\n mimeType: 'application/geo+json',\r\n extension: 'geojson',\r\n sizeBytes: file.size,\r\n tag: 'organizational-dataset',\r\n isVisible: true,\r\n description: JSON.stringify({\r\n bucket: DATASETS_BUCKET,\r\n geometryType: geometry,\r\n layerStyles: DEFAULT_LAYER_STYLES,\r\n }),\r\n }\r\n const fileRes = await fetch('/api/files/create', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(fileRow),\r\n })\r\n if (!fileRes.ok) {\r\n console.warn(`DatasetAdder: File row create returned ${fileRes.status}; dataset will be session-only`)\r\n }\r\n }, [])\r\n\r\n const addToMap = React.useCallback(async () => {\r\n if (!loaded) return\r\n const name = loaded.sourceName.replace(/\\.(geo)?json$/i, '') || loaded.sourceName\r\n const featureCollection = loaded.featureCollection\r\n\r\n // File sources persist to MinIO; URL/WMS imports are session-only.\r\n if (loaded.file) {\r\n setSaving(true)\r\n try {\r\n await persistFile(loaded.file, dominantGeometry(loaded.summary))\r\n }\r\n catch (e) {\r\n console.warn('DatasetAdder: MinIO persistence failed; dataset will be session-only', e)\r\n }\r\n finally {\r\n setSaving(false)\r\n }\r\n }\r\n\r\n const dataset: Dataset = {\r\n id: `local-${Date.now()}`,\r\n name,\r\n type: 'Organizational',\r\n publisher: loaded.file ? 'Organizational' : 'Local / URL',\r\n license: 'Unknown',\r\n contact: '',\r\n description: `Imported: ${loaded.sourceName}`,\r\n countrySubdivision: '',\r\n municipality: '',\r\n clickable: true,\r\n visible: true,\r\n properties: {},\r\n getFeatures: async () => featureCollection,\r\n getFields: async () => [],\r\n dataManagementSystem: 'other',\r\n datasetType: 'GeoJSON',\r\n group: DatasetGroup.Organizational,\r\n layerColor: layerColorByName(name),\r\n }\r\n\r\n datasetDispatch({ type: 'ADD_DATASET', payload: { dataset } })\r\n datasetDispatch({ type: 'ADD_DATASET_TO_MAP', payload: { dataset } })\r\n\r\n const bbox = loaded.summary.bbox\r\n if (map && bbox) {\r\n map.fitBounds([[bbox[0], bbox[1]], [bbox[2], bbox[3]]], { padding: 48, duration: 800 })\r\n }\r\n\r\n setLoaded(null)\r\n setError(null)\r\n onClose?.()\r\n }, [loaded, map, datasetDispatch, persistFile, onClose])\r\n\r\n return (\r\n <div className=\"flex flex-col gap-3 mt-2\">\r\n {!loaded && (\r\n <>\r\n <div\r\n onDragOver={(e) => { e.preventDefault(); setDragActive(true) }}\r\n onDragLeave={() => setDragActive(false)}\r\n onDrop={onDrop}\r\n className={`rounded-md border-2 border-dashed p-6 text-center text-sm transition-colors ${\r\n dragActive ? 'border-primary bg-primary/5' : 'border-muted-foreground/30'\r\n }`}\r\n >\r\n <Upload className=\"mx-auto mb-2 text-muted-foreground\" size={24} />\r\n <p className=\"text-muted-foreground\">Drag & drop a GeoJSON file here</p>\r\n <label className=\"mt-2 inline-block cursor-pointer text-primary underline\">\r\n or browse\r\n <input\r\n type=\"file\"\r\n accept=\".geojson,.json,application/geo+json,application/json\"\r\n className=\"hidden\"\r\n onChange={(e) => {\r\n const file = e.target.files?.[0]\r\n if (file) void handleFile(file)\r\n }}\r\n />\r\n </label>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\r\n <span className=\"h-px flex-1 bg-border\" />\r\n or paste a URL\r\n <span className=\"h-px flex-1 bg-border\" />\r\n </div>\r\n\r\n <div className=\"flex flex-col gap-2\">\r\n <Input\r\n placeholder=\"https://… (GeoJSON, ArcGIS FeatureServer, or WMS)\"\r\n value={url}\r\n onChange={(e) => handleUrlChange(e.target.value)}\r\n />\r\n <div className=\"flex items-center gap-2\">\r\n <select\r\n className=\"border border-input rounded p-1 text-sm bg-background\"\r\n value={urlType}\r\n onChange={(e) => setUrlType(e.target.value as UrlSourceType)}\r\n >\r\n <option value=\"geojson\">GeoJSON</option>\r\n <option value=\"arcgis\">ArcGIS Feature Service</option>\r\n <option value=\"wms\">WMS</option>\r\n </select>\r\n\r\n {urlType === 'wms'\r\n ? (\r\n <>\r\n <Input\r\n placeholder=\"WMS layer name(s)\"\r\n value={wmsLayers}\r\n onChange={(e) => setWmsLayers(e.target.value)}\r\n />\r\n <Button onClick={addWms} disabled={!url.trim() || !wmsLayers.trim()}>\r\n Add WMS\r\n </Button>\r\n </>\r\n )\r\n : (\r\n <Button onClick={() => void loadFromUrl()} disabled={!url.trim() || busy}>\r\n {busy ? 'Loading…' : 'Load'}\r\n </Button>\r\n )}\r\n </div>\r\n {urlType === 'wms' && (\r\n <p className=\"text-xs text-muted-foreground\">\r\n WMS is added as a raster overlay (not a dataset) — it won’t appear in “view datasets”.\r\n </p>\r\n )}\r\n </div>\r\n\r\n {error && <p className=\"text-sm text-red-600\">{error}</p>}\r\n </>\r\n )}\r\n\r\n {loaded && (\r\n <div className=\"flex flex-col gap-2 text-sm\">\r\n <p className=\"font-medium break-all\">{loaded.sourceName}</p>\r\n <ul className=\"text-xs space-y-1 text-muted-foreground\">\r\n <li><strong>Features:</strong> {loaded.summary.featureCount}</li>\r\n <li>\r\n <strong>Geometry:</strong>{' '}\r\n {Object.entries(loaded.summary.geometryTypes)\r\n .map(([type, count]) => `${type} (${count})`)\r\n .join(', ') || '—'}\r\n </li>\r\n <li>\r\n <strong>Properties:</strong>{' '}\r\n {loaded.summary.propertyKeys.join(', ') || '—'}\r\n </li>\r\n </ul>\r\n <div className=\"flex gap-2\">\r\n <Button onClick={() => void addToMap()} disabled={saving}>\r\n {saving ? 'Saving…' : 'Add to map'}\r\n </Button>\r\n <Button variant=\"ghost\" disabled={saving} onClick={() => { setLoaded(null); setError(null) }}>\r\n Choose another\r\n </Button>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../src/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.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 { Upload } from 'lucide-react'\r\nimport * as React from 'react'\r\n\r\nimport { DatasetsContext, MapContext } from '../../../../../../../store'\r\nimport { DatasetGroup } from '../../../../../../../types/dbTypes'\r\nimport { Button, Input } from '../../../../../../ui/'\r\nimport { parseGeoJSON, type GeoJSONSummary } from '../../../../datasets/src/geojsonFile'\r\nimport {\r\n addWmsToMap,\r\n detectSourceType,\r\n extractWmsLayers,\r\n loadVectorUrl,\r\n nameFromUrl,\r\n type UrlSourceType,\r\n} from '../../../../datasets/src/urlSources'\r\nimport { layerColorByName } from '../../../../utils/stringToColour'\r\nimport { uploadToPresignedUrl } from '../AddFile/utils/uploadToPresignedURLS'\r\n\r\nimport type { Dataset } from '../../../../../../../types/datasetTypes'\r\n\r\n/** Bucket uploaded org datasets land in (orgId prefix added server-side). */\r\nconst DATASETS_BUCKET = 'pointclouds-demo'\r\n\r\n/** Default per-geometry paint, persisted so reload hydration can restyle. */\r\nconst DEFAULT_LAYER_STYLES = {\r\n lineLayerStyle: { 'line-color': '#0d9488', 'line-width': 4 },\r\n pointLayerStyle: { 'circle-color': '#0d9488', 'circle-radius': 8 },\r\n polygonLayerStyle: { 'fill-color': '#0d9488', 'fill-opacity': 0.8 },\r\n}\r\n\r\ntype PersistGeometry = 'points' | 'lines' | 'polygons'\r\n\r\n/** Pick the dominant geometry family for the persisted File row's layerType hint. */\r\nfunction dominantGeometry(summary: GeoJSONSummary): PersistGeometry {\r\n let points = 0\r\n let lines = 0\r\n let polygons = 0\r\n for (const [type, count] of Object.entries(summary.geometryTypes)) {\r\n if (type.includes('Point')) points += count\r\n else if (type.includes('LineString')) lines += count\r\n else if (type.includes('Polygon')) polygons += count\r\n }\r\n if (polygons >= lines && polygons >= points) return 'polygons'\r\n if (lines >= points) return 'lines'\r\n return 'points'\r\n}\r\n\r\ninterface Loaded {\r\n sourceName: string\r\n featureCollection: GeoJSON.FeatureCollection\r\n summary: GeoJSONSummary\r\n /** Present only for file sources — enables MinIO persistence on add. */\r\n file?: File\r\n}\r\n\r\ninterface DatasetAdderProps {\r\n onClose?: () => void\r\n}\r\n\r\n/**\r\n * Add a dataset to the map — from a dropped/picked GeoJSON file, or from a\r\n * pasted URL (GeoJSON, ArcGIS Feature Service, or WMS).\r\n *\r\n * Vector sources (file / GeoJSON URL / ArcGIS) are parsed client-side and\r\n * registered into DatasetsContext; the existing OpenDataLayers renderer draws\r\n * them. WMS is a raster overlay added straight to the map.\r\n *\r\n * File uploads are additionally persisted: the raw GeoJSON is uploaded to MinIO\r\n * and a File row is created so the dataset re-hydrates on the next load (via\r\n * minioDatasets.ts). URL/WMS imports are session-only — there is no file to\r\n * persist.\r\n */\r\nexport const DatasetAdder = ({ onClose }: DatasetAdderProps) => {\r\n const { dispatch: datasetDispatch } = React.useContext(DatasetsContext)\r\n const { state: mapState } = React.useContext(MapContext)\r\n const map = mapState.map.map\r\n\r\n const [loaded, setLoaded] = React.useState<Loaded | null>(null)\r\n const [error, setError] = React.useState<string | null>(null)\r\n const [dragActive, setDragActive] = React.useState(false)\r\n\r\n const [url, setUrl] = React.useState('')\r\n const [urlType, setUrlType] = React.useState<UrlSourceType>('geojson')\r\n const [wmsLayers, setWmsLayers] = React.useState('')\r\n const [busy, setBusy] = React.useState(false)\r\n const [saving, setSaving] = React.useState(false)\r\n\r\n const handleFile = React.useCallback(async (file: File) => {\r\n setError(null)\r\n try {\r\n const { featureCollection, summary } = parseGeoJSON(await file.text())\r\n setLoaded({ sourceName: file.name, featureCollection, summary, file })\r\n }\r\n catch (e) {\r\n setLoaded(null)\r\n setError(e instanceof Error ? e.message : 'Failed to read file')\r\n }\r\n }, [])\r\n\r\n const onDrop = React.useCallback((e: React.DragEvent) => {\r\n e.preventDefault()\r\n setDragActive(false)\r\n const file = e.dataTransfer.files?.[0]\r\n if (file) void handleFile(file)\r\n }, [handleFile])\r\n\r\n const handleUrlChange = (value: string) => {\r\n setUrl(value)\r\n if (!value.trim()) return\r\n const detected = detectSourceType(value)\r\n setUrlType(detected)\r\n if (detected === 'wms') {\r\n const layers = extractWmsLayers(value)\r\n if (layers) setWmsLayers(layers)\r\n }\r\n }\r\n\r\n const loadFromUrl = React.useCallback(async () => {\r\n const trimmed = url.trim()\r\n if (!trimmed) return\r\n setError(null)\r\n setBusy(true)\r\n try {\r\n const { featureCollection, summary } = await loadVectorUrl(\r\n trimmed,\r\n urlType === 'arcgis' ? 'arcgis' : 'geojson',\r\n )\r\n setLoaded({ sourceName: nameFromUrl(trimmed), featureCollection, summary })\r\n }\r\n catch (e) {\r\n setLoaded(null)\r\n setError(e instanceof Error ? e.message : 'Failed to load URL')\r\n }\r\n finally {\r\n setBusy(false)\r\n }\r\n }, [url, urlType])\r\n\r\n const addWms = React.useCallback(() => {\r\n const trimmed = url.trim()\r\n if (!map) { setError('Open the Map viewer first.'); return }\r\n if (!trimmed || !wmsLayers.trim()) { setError('A WMS URL and layer name are required.'); return }\r\n try {\r\n addWmsToMap(map, trimmed, wmsLayers.trim())\r\n onClose?.()\r\n }\r\n catch (e) {\r\n setError(e instanceof Error ? e.message : 'Failed to add WMS layer')\r\n }\r\n }, [map, url, wmsLayers, onClose])\r\n\r\n /**\r\n * Upload the dropped/picked file to MinIO and create a File row so the\r\n * dataset survives a reload. Best-effort: a failure leaves the dataset\r\n * session-only rather than blocking the add.\r\n */\r\n const persistFile = React.useCallback(async (file: File, geometry: PersistGeometry) => {\r\n const assetId = `${crypto.randomUUID()}.geojson`\r\n const presignedRes = await fetch(\r\n `/api/presigned-url-upload?asset=${encodeURIComponent(assetId)}&bucket=${DATASETS_BUCKET}`,\r\n )\r\n if (!presignedRes.ok) throw new Error(`presigned URL failed: ${presignedRes.status}`)\r\n const { presignedUrl } = await presignedRes.json()\r\n await uploadToPresignedUrl(presignedUrl, file)\r\n\r\n const fileRow = {\r\n type: 'map-file',\r\n name: file.name,\r\n assetId,\r\n mimeType: 'application/geo+json',\r\n extension: 'geojson',\r\n sizeBytes: file.size,\r\n tag: 'organizational-dataset',\r\n isVisible: true,\r\n description: JSON.stringify({\r\n bucket: DATASETS_BUCKET,\r\n geometryType: geometry,\r\n layerStyles: DEFAULT_LAYER_STYLES,\r\n }),\r\n }\r\n const fileRes = await fetch('/api/files/create', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(fileRow),\r\n })\r\n if (!fileRes.ok) {\r\n console.warn(`DatasetAdder: File row create returned ${fileRes.status}; dataset will be session-only`)\r\n }\r\n }, [])\r\n\r\n const addToMap = React.useCallback(async () => {\r\n if (!loaded) return\r\n const name = loaded.sourceName.replace(/\\.(geo)?json$/i, '') || loaded.sourceName\r\n const featureCollection = loaded.featureCollection\r\n\r\n // File sources persist to MinIO; URL/WMS imports are session-only.\r\n if (loaded.file) {\r\n setSaving(true)\r\n try {\r\n await persistFile(loaded.file, dominantGeometry(loaded.summary))\r\n }\r\n catch (e) {\r\n console.warn('DatasetAdder: MinIO persistence failed; dataset will be session-only', e)\r\n }\r\n finally {\r\n setSaving(false)\r\n }\r\n }\r\n\r\n const dataset: Dataset = {\r\n id: `local-${Date.now()}`,\r\n name,\r\n type: 'Organizational',\r\n publisher: loaded.file ? 'Organizational' : 'Local / URL',\r\n license: 'Unknown',\r\n contact: '',\r\n description: `Imported: ${loaded.sourceName}`,\r\n countrySubdivision: '',\r\n municipality: '',\r\n clickable: true,\r\n visible: true,\r\n properties: {},\r\n getFeatures: async () => featureCollection,\r\n getFields: async () => [],\r\n dataManagementSystem: 'other',\r\n datasetType: 'GeoJSON',\r\n group: DatasetGroup.Organizational,\r\n layerColor: layerColorByName(name),\r\n }\r\n\r\n datasetDispatch({ type: 'ADD_DATASET', payload: { dataset } })\r\n datasetDispatch({ type: 'ADD_DATASET_TO_MAP', payload: { dataset } })\r\n\r\n const bbox = loaded.summary.bbox\r\n if (map && bbox) {\r\n map.fitBounds([[bbox[0], bbox[1]], [bbox[2], bbox[3]]], { padding: 48, duration: 800 })\r\n }\r\n\r\n setLoaded(null)\r\n setError(null)\r\n onClose?.()\r\n }, [loaded, map, datasetDispatch, persistFile, onClose])\r\n\r\n return (\r\n <div className=\"flex flex-col gap-3 mt-2\">\r\n {!loaded && (\r\n <>\r\n <div\r\n onDragOver={(e) => { e.preventDefault(); setDragActive(true) }}\r\n onDragLeave={() => setDragActive(false)}\r\n onDrop={onDrop}\r\n className={`rounded-md border-2 border-dashed p-6 text-center text-sm transition-colors ${\r\n dragActive ? 'border-primary bg-primary/5' : 'border-muted-foreground/30'\r\n }`}\r\n >\r\n <Upload className=\"mx-auto mb-2 text-muted-foreground\" size={24} />\r\n <p className=\"text-muted-foreground\">Drag & drop a GeoJSON file here</p>\r\n <label className=\"mt-2 inline-block cursor-pointer text-primary underline\">\r\n or browse\r\n <input\r\n type=\"file\"\r\n accept=\".geojson,.json,application/geo+json,application/json\"\r\n className=\"hidden\"\r\n onChange={(e) => {\r\n const file = e.target.files?.[0]\r\n if (file) void handleFile(file)\r\n }}\r\n />\r\n </label>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\r\n <span className=\"h-px flex-1 bg-border\" />\r\n or paste a URL\r\n <span className=\"h-px flex-1 bg-border\" />\r\n </div>\r\n\r\n <div className=\"flex flex-col gap-2\">\r\n <Input\r\n placeholder=\"https://… (GeoJSON, ArcGIS FeatureServer, or WMS)\"\r\n value={url}\r\n onChange={(e) => handleUrlChange(e.target.value)}\r\n />\r\n <div className=\"flex items-center gap-2\">\r\n <select\r\n className=\"border border-input rounded p-1 text-sm bg-background\"\r\n value={urlType}\r\n onChange={(e) => setUrlType(e.target.value as UrlSourceType)}\r\n >\r\n <option value=\"geojson\">GeoJSON</option>\r\n <option value=\"arcgis\">ArcGIS Feature Service</option>\r\n <option value=\"wms\">WMS</option>\r\n </select>\r\n\r\n {urlType === 'wms'\r\n ? (\r\n <>\r\n <Input\r\n placeholder=\"WMS layer name(s)\"\r\n value={wmsLayers}\r\n onChange={(e) => setWmsLayers(e.target.value)}\r\n />\r\n <Button onClick={addWms} disabled={!url.trim() || !wmsLayers.trim()}>\r\n Add WMS\r\n </Button>\r\n </>\r\n )\r\n : (\r\n <Button onClick={() => void loadFromUrl()} disabled={!url.trim() || busy}>\r\n {busy ? 'Loading…' : 'Load'}\r\n </Button>\r\n )}\r\n </div>\r\n {urlType === 'wms' && (\r\n <p className=\"text-xs text-muted-foreground\">\r\n WMS is added as a raster overlay (not a dataset) — it won’t appear in “view datasets”.\r\n </p>\r\n )}\r\n </div>\r\n\r\n {error && <p className=\"text-sm text-red-600\">{error}</p>}\r\n </>\r\n )}\r\n\r\n {loaded && (\r\n <div className=\"flex flex-col gap-2 text-sm\">\r\n <p className=\"font-medium break-all\">{loaded.sourceName}</p>\r\n <ul className=\"text-xs space-y-1 text-muted-foreground\">\r\n <li><strong>Features:</strong> {loaded.summary.featureCount}</li>\r\n <li>\r\n <strong>Geometry:</strong>{' '}\r\n {Object.entries(loaded.summary.geometryTypes)\r\n .map(([type, count]) => `${type} (${count})`)\r\n .join(', ') || '—'}\r\n </li>\r\n <li>\r\n <strong>Properties:</strong>{' '}\r\n {loaded.summary.propertyKeys.join(', ') || '—'}\r\n </li>\r\n </ul>\r\n <div className=\"flex gap-2\">\r\n <Button onClick={() => void addToMap()} disabled={saving}>\r\n {saving ? 'Saving…' : 'Add to map'}\r\n </Button>\r\n <Button variant=\"ghost\" disabled={saving} onClick={() => { setLoaded(null); setError(null) }}>\r\n Choose another\r\n </Button>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileAdder.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/map/src/tools/AddTools/AddFile/FileAdder.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FileAdder.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/map/src/tools/AddTools/AddFile/FileAdder.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAe9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAS9C,KAAK,cAAc,GAAG;IACpB,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAA;IAClE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,qHAY7B,oBAAoB,sBAkDtB,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,qBAAqB,cAAc,sBA+N5D,CAAA"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import * as React from "react";
|
|
4
3
|
import * as LR from "lucide-react";
|
|
5
4
|
import maplibregl from "maplibre-gl";
|
|
6
|
-
import ReactDOM from "react-dom/client";
|
|
7
|
-
import { mutate } from "swr";
|
|
8
5
|
import { useTranslations } from "next-intl";
|
|
6
|
+
import * as React from "react";
|
|
7
|
+
import ReactDOM from "react-dom/client";
|
|
9
8
|
import { toast } from "sonner";
|
|
9
|
+
import { mutate } from "swr";
|
|
10
10
|
import { MapContext, FilesContext } from "../../../../../../../store";
|
|
11
|
-
import { uploadFileWithProgress } from "./utils/uploadToPresignedURLS";
|
|
12
11
|
import { acceptedFiles, isAcceptedFileType } from "../../../../../../../utils/acceptedFiles";
|
|
12
|
+
import { cn } from "../../../../../../../utils/utils";
|
|
13
13
|
import { AddItemDialog } from "../../../../../../ui/AddItemDialog";
|
|
14
14
|
import { Input } from "../../../../../../ui/Input";
|
|
15
|
-
import { cn } from "../../../../../../../utils/utils";
|
|
16
15
|
import MapFileMarker from "../../../MapLayers/src/FileLayer/components/MapFileMarker";
|
|
16
|
+
import { uploadFileWithProgress } from "./utils/uploadToPresignedURLS";
|
|
17
17
|
function getFileExtension(file) {
|
|
18
18
|
if (!(file == null ? void 0 : file.name)) return "";
|
|
19
19
|
const parts = file.name.split(".");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../../src/core/components/viewers/map/src/tools/AddTools/AddFile/FileAdder.tsx"],"sourcesContent":["\"use client\"\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from \"react\"\r\nimport * as LR from 'lucide-react'\r\nimport type { LucideIcon } from 'lucide-react'\r\nimport maplibregl from 'maplibre-gl'\r\nimport ReactDOM from 'react-dom/client'\r\nimport { mutate } from 'swr'\r\nimport { useTranslations } from 'next-intl'\r\nimport { toast } from 'sonner'\r\n\r\nimport { MapContext, FilesContext } from '../../../../../../../store'\r\nimport { CursorType } from '../../../../../../../types/global'\r\nimport { uploadFileWithProgress } from './utils/uploadToPresignedURLS'\r\nimport { acceptedFiles, isAcceptedFileType } from '../../../../../../../utils/acceptedFiles'\r\nimport { AddItemDialog } from '../../../../../../ui/AddItemDialog'\r\nimport { Input } from '../../../../../../ui/Input'\r\nimport { cn } from '../../../../../../../utils/utils'\r\nimport MapFileMarker from '../../../MapLayers/src/FileLayer/components/MapFileMarker'\r\n\r\nfunction getFileExtension(file: File): string {\r\n if (!file?.name) return ''\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\ntype FileAdderProps = {\r\n isOpen: boolean\r\n onClose: () => void\r\n}\r\n\r\ntype FileAdderDialogProps = {\r\n isOpen: boolean\r\n onClose: () => void\r\n title: string\r\n icon: LucideIcon\r\n accept: string\r\n onFileSelect: (event: React.ChangeEvent<HTMLInputElement>) => void\r\n onFileDrop?: (file: File) => void\r\n disabled?: boolean\r\n dropZoneTitle: string\r\n dropZoneSubtext: string\r\n hide?: boolean\r\n}\r\n\r\nexport const FileAdderDialog = ({\r\n isOpen,\r\n onClose,\r\n title,\r\n icon,\r\n accept,\r\n onFileSelect,\r\n onFileDrop,\r\n disabled,\r\n dropZoneTitle,\r\n dropZoneSubtext,\r\n hide,\r\n}: FileAdderDialogProps) => {\r\n const fileInputRef = React.useRef<HTMLInputElement>(null)\r\n const [isDragging, setIsDragging] = React.useState(false)\r\n\r\n const handleDrop = (e: React.DragEvent) => {\r\n e.preventDefault()\r\n setIsDragging(false)\r\n const file = e.dataTransfer.files[0]\r\n if (file) onFileDrop?.(file)\r\n }\r\n\r\n if (hide) return null\r\n\r\n return (\r\n <AddItemDialog\r\n open={isOpen}\r\n onOpenChange={open => !open && onClose()}\r\n title={title}\r\n icon={icon}\r\n >\r\n <div className=\"flex flex-col gap-3\">\r\n <div\r\n onDrop={handleDrop}\r\n onDragOver={e => { e.preventDefault(); setIsDragging(true) }}\r\n onDragLeave={() => setIsDragging(false)}\r\n onDragEnd={() => setIsDragging(false)}\r\n onClick={() => fileInputRef.current?.click()}\r\n className={cn(\r\n 'border-2 border-dashed rounded-lg p-8 text-center cursor-pointer transition-colors select-none',\r\n isDragging\r\n ? 'border-primary bg-primary/5'\r\n : 'border-muted-foreground/25 hover:border-primary/50 hover:bg-muted/30',\r\n )}\r\n >\r\n <LR.Upload className=\"mx-auto mb-3 text-muted-foreground\" size={28} />\r\n <p className=\"text-sm font-medium\">{dropZoneTitle}</p>\r\n <p className=\"text-xs text-muted-foreground mt-1\">{dropZoneSubtext}</p>\r\n </div>\r\n\r\n <Input\r\n ref={fileInputRef}\r\n type=\"file\"\r\n accept={accept}\r\n className=\"hidden\"\r\n onChange={onFileSelect}\r\n disabled={disabled}\r\n />\r\n </div>\r\n </AddItemDialog>\r\n )\r\n}\r\n\r\nexport const FileAdder = ({ isOpen, onClose }: FileAdderProps) => {\r\n const t = useTranslations('FileAdder')\r\n\r\n const { state: mapState } = React.useContext(MapContext)\r\n const { map } = mapState.map\r\n const { dispatch: fileDispatch } = React.useContext(FilesContext)\r\n\r\n const [selectedFile, setSelectedFile] = React.useState<File | null>(null)\r\n const [isUploading, setIsUploading] = React.useState(false)\r\n\r\n // Reset state when tool is closed from outside\r\n React.useEffect(() => {\r\n if (!isOpen) {\r\n setSelectedFile(null)\r\n setIsUploading(false)\r\n }\r\n }, [isOpen])\r\n\r\n const setCursor = (cursor: CursorType) => {\r\n if (map) {\r\n if (map.getCanvas().style.cursor === cursor) return\r\n map.getCanvas().style.cursor = cursor\r\n }\r\n }\r\n\r\n function addTemporaryFileIcon(\r\n map: maplibregl.Map,\r\n file: File,\r\n lng: number,\r\n lat: number,\r\n ): maplibregl.Marker {\r\n const markerEl = document.createElement('div')\r\n markerEl.style.width = '24px'\r\n markerEl.style.height = '24px'\r\n markerEl.style.display = 'flex'\r\n markerEl.style.alignItems = 'center'\r\n markerEl.style.justifyContent = 'center'\r\n\r\n const iconEl = MapFileMarker({ mimeType: file.type, extension: 'uploading' })\r\n const iconContainer = document.createElement('div')\r\n const root = ReactDOM.createRoot(iconContainer)\r\n root.render(iconEl)\r\n markerEl.append(iconContainer)\r\n\r\n return new maplibregl.Marker({ element: markerEl, draggable: false })\r\n .setLngLat([lng, lat])\r\n .addTo(map)\r\n }\r\n\r\n // Show instruction toast when file is selected and dismiss when deselected\r\n React.useEffect(() => {\r\n if (!selectedFile) {\r\n toast.dismiss('place-file-toast')\r\n return\r\n }\r\n toast.info(`${t('placeOnMapToast')}: \"${selectedFile.name}\"`, {\r\n id: 'place-file-toast',\r\n duration: Infinity,\r\n })\r\n return () => {\r\n toast.dismiss('place-file-toast')\r\n }\r\n }, [selectedFile])\r\n\r\n // Escape cancels placement\r\n React.useEffect(() => {\r\n if (!selectedFile || isUploading) return\r\n const onKey = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n setSelectedFile(null)\r\n setCursor('')\r\n onClose()\r\n }\r\n }\r\n window.addEventListener('keydown', onKey)\r\n return () => window.removeEventListener('keydown', onKey)\r\n }, [selectedFile, isUploading])\r\n\r\n // Map double-click handler for placement\r\n React.useEffect(() => {\r\n const dblclickHandler = async (e: maplibregl.MapMouseEvent): Promise<void> => {\r\n if (!selectedFile) return\r\n if (isUploading) return\r\n\r\n setIsUploading(true)\r\n setCursor(null)\r\n toast.dismiss('place-file-toast')\r\n\r\n const lng = e.lngLat.lng\r\n const lat = e.lngLat.lat\r\n const elevation = 0\r\n\r\n const temporaryFileIcon = addTemporaryFileIcon(map, selectedFile, lng, lat)\r\n const toastId = toast.loading(`${t('uploading')} \"${selectedFile.name}\"...`)\r\n\r\n try {\r\n const fileId = crypto.randomUUID()\r\n\r\n const response = await fetch(`/api/presigned-url-upload?asset=${fileId}`)\r\n if (!response.ok) throw new Error('Failed to fetch presigned URL')\r\n const { presignedUrl } = await response.json()\r\n\r\n await uploadFileWithProgress(presignedUrl, selectedFile, () => {})\r\n\r\n const newFile = {\r\n type: 'map-file',\r\n url: '',\r\n name: selectedFile.name?.trim() || 'file name',\r\n mimeType: selectedFile.type,\r\n extension: getFileExtension(selectedFile),\r\n sizeBytes: selectedFile.size,\r\n uploadedAt: new Date(),\r\n description: '',\r\n isVisible: true,\r\n lat,\r\n lng,\r\n elevation,\r\n assetId: fileId,\r\n }\r\n\r\n const metadataResponse = await fetch('/api/files/create', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(newFile),\r\n })\r\n\r\n if (!metadataResponse.ok) {\r\n throw new Error(`Failed to upload file metadata: ${metadataResponse.statusText}`)\r\n }\r\n\r\n const { newFile: createdFile } = await metadataResponse.json()\r\n\r\n // Fetch with presigned URL so 3D models can load immediately\r\n let fileToAdd = createdFile\r\n try {\r\n const fileUrlRes = await fetch(`/api/files/${createdFile.id}`)\r\n if (fileUrlRes.ok) {\r\n const { file: fileWithUrl } = await fileUrlRes.json()\r\n if (fileWithUrl) fileToAdd = fileWithUrl\r\n }\r\n }\r\n catch { /* fall back to createdFile without presigned URL */ }\r\n\r\n fileDispatch({ type: 'ADD_FILE', payload: { file: fileToAdd } })\r\n fileDispatch({ type: 'ADD_TO_MAP', payload: { id: createdFile.id } })\r\n\r\n toast.success(t('uploadSuccess'), { id: toastId })\r\n mutate(['files'])\r\n onClose()\r\n }\r\n catch (error) {\r\n toast.error(error instanceof Error ? error.message : t('uploadError'), { id: toastId })\r\n setIsUploading(false)\r\n setSelectedFile(null)\r\n }\r\n finally {\r\n temporaryFileIcon.remove()\r\n }\r\n }\r\n\r\n const mouseMoveCrosshairHandler = () => setCursor('crosshair')\r\n\r\n if (!map) return\r\n\r\n if (selectedFile && !isUploading) {\r\n setCursor('crosshair')\r\n map.on('mousemove', mouseMoveCrosshairHandler)\r\n map.on('dblclick', dblclickHandler)\r\n }\r\n else {\r\n map.off('mousemove', mouseMoveCrosshairHandler)\r\n map.off('dblclick', dblclickHandler)\r\n }\r\n\r\n if (selectedFile) {\r\n return () => {\r\n setCursor('')\r\n map.off('mousemove', mouseMoveCrosshairHandler)\r\n map.off('dblclick', dblclickHandler)\r\n }\r\n }\r\n }, [selectedFile, isUploading, map])\r\n\r\n // Prevent page navigation while uploading\r\n React.useEffect(() => {\r\n const handleBeforeUnload = (e: BeforeUnloadEvent) => {\r\n if (isUploading) { e.preventDefault(); e.returnValue = '' }\r\n }\r\n window.addEventListener('beforeunload', handleBeforeUnload)\r\n return () => window.removeEventListener('beforeunload', handleBeforeUnload)\r\n }, [isUploading])\r\n\r\n const processFile = (file: File) => {\r\n if (!isAcceptedFileType(file)) {\r\n toast.error('Unsupported file type. Please select a safe BIM/GIS format.')\r\n return\r\n }\r\n setSelectedFile(file)\r\n }\r\n\r\n const handleFileSelect = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n const selected = event.target.files?.[0]\r\n if (!selected) { toast.warning(t('noFileSelected')); return }\r\n processFile(selected)\r\n }\r\n\r\n // When a file is selected (or uploading), dialog closes but component stays mounted\r\n if (selectedFile) return null\r\n\r\n return (\r\n <FileAdderDialog\r\n isOpen={isOpen}\r\n onClose={onClose}\r\n title={t('title')}\r\n icon={LR.FilePlus}\r\n accept={acceptedFiles}\r\n onFileSelect={handleFileSelect}\r\n onFileDrop={processFile}\r\n disabled={isUploading}\r\n dropZoneTitle={t('dropZoneTitle')}\r\n dropZoneSubtext={t('dropZoneSubtext')}\r\n />\r\n )\r\n}\r\n"],"mappings":"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","names":["map","e"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../src/core/components/viewers/map/src/tools/AddTools/AddFile/FileAdder.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 maplibregl from 'maplibre-gl'\r\nimport { useTranslations } from 'next-intl'\r\nimport * as React from \"react\"\r\nimport ReactDOM from 'react-dom/client'\r\nimport { toast } from 'sonner'\r\nimport { mutate } from 'swr'\r\n\r\nimport { MapContext, FilesContext } from '../../../../../../../store'\r\nimport { acceptedFiles, isAcceptedFileType } from '../../../../../../../utils/acceptedFiles'\r\nimport { cn } from '../../../../../../../utils/utils'\r\nimport { AddItemDialog } from '../../../../../../ui/AddItemDialog'\r\nimport { Input } from '../../../../../../ui/Input'\r\nimport MapFileMarker from '../../../MapLayers/src/FileLayer/components/MapFileMarker'\r\n\r\nimport { uploadFileWithProgress } from './utils/uploadToPresignedURLS'\r\n\r\nimport type { CursorType } from '../../../../../../../types/global'\r\nimport type { LucideIcon } from 'lucide-react'\r\n\r\nfunction getFileExtension(file: File): string {\r\n if (!file?.name) return ''\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\ntype FileAdderProps = {\r\n isOpen: boolean\r\n onClose: () => void\r\n}\r\n\r\ntype FileAdderDialogProps = {\r\n isOpen: boolean\r\n onClose: () => void\r\n title: string\r\n icon: LucideIcon\r\n accept: string\r\n onFileSelect: (event: React.ChangeEvent<HTMLInputElement>) => void\r\n onFileDrop?: (file: File) => void\r\n disabled?: boolean\r\n dropZoneTitle: string\r\n dropZoneSubtext: string\r\n hide?: boolean\r\n}\r\n\r\nexport const FileAdderDialog = ({\r\n isOpen,\r\n onClose,\r\n title,\r\n icon,\r\n accept,\r\n onFileSelect,\r\n onFileDrop,\r\n disabled,\r\n dropZoneTitle,\r\n dropZoneSubtext,\r\n hide,\r\n}: FileAdderDialogProps) => {\r\n const fileInputRef = React.useRef<HTMLInputElement>(null)\r\n const [isDragging, setIsDragging] = React.useState(false)\r\n\r\n const handleDrop = (e: React.DragEvent) => {\r\n e.preventDefault()\r\n setIsDragging(false)\r\n const file = e.dataTransfer.files[0]\r\n if (file) onFileDrop?.(file)\r\n }\r\n\r\n if (hide) return null\r\n\r\n return (\r\n <AddItemDialog\r\n open={isOpen}\r\n onOpenChange={open => !open && onClose()}\r\n title={title}\r\n icon={icon}\r\n >\r\n <div className=\"flex flex-col gap-3\">\r\n <div\r\n onDrop={handleDrop}\r\n onDragOver={e => { e.preventDefault(); setIsDragging(true) }}\r\n onDragLeave={() => setIsDragging(false)}\r\n onDragEnd={() => setIsDragging(false)}\r\n onClick={() => fileInputRef.current?.click()}\r\n className={cn(\r\n 'border-2 border-dashed rounded-lg p-8 text-center cursor-pointer transition-colors select-none',\r\n isDragging\r\n ? 'border-primary bg-primary/5'\r\n : 'border-muted-foreground/25 hover:border-primary/50 hover:bg-muted/30',\r\n )}\r\n >\r\n <LR.Upload className=\"mx-auto mb-3 text-muted-foreground\" size={28} />\r\n <p className=\"text-sm font-medium\">{dropZoneTitle}</p>\r\n <p className=\"text-xs text-muted-foreground mt-1\">{dropZoneSubtext}</p>\r\n </div>\r\n\r\n <Input\r\n ref={fileInputRef}\r\n type=\"file\"\r\n accept={accept}\r\n className=\"hidden\"\r\n onChange={onFileSelect}\r\n disabled={disabled}\r\n />\r\n </div>\r\n </AddItemDialog>\r\n )\r\n}\r\n\r\nexport const FileAdder = ({ isOpen, onClose }: FileAdderProps) => {\r\n const t = useTranslations('FileAdder')\r\n\r\n const { state: mapState } = React.useContext(MapContext)\r\n const { map } = mapState.map\r\n const { dispatch: fileDispatch } = React.useContext(FilesContext)\r\n\r\n const [selectedFile, setSelectedFile] = React.useState<File | null>(null)\r\n const [isUploading, setIsUploading] = React.useState(false)\r\n\r\n // Reset state when tool is closed from outside\r\n React.useEffect(() => {\r\n if (!isOpen) {\r\n setSelectedFile(null)\r\n setIsUploading(false)\r\n }\r\n }, [isOpen])\r\n\r\n const setCursor = (cursor: CursorType) => {\r\n if (map) {\r\n if (map.getCanvas().style.cursor === cursor) return\r\n map.getCanvas().style.cursor = cursor\r\n }\r\n }\r\n\r\n function addTemporaryFileIcon(\r\n map: maplibregl.Map,\r\n file: File,\r\n lng: number,\r\n lat: number,\r\n ): maplibregl.Marker {\r\n const markerEl = document.createElement('div')\r\n markerEl.style.width = '24px'\r\n markerEl.style.height = '24px'\r\n markerEl.style.display = 'flex'\r\n markerEl.style.alignItems = 'center'\r\n markerEl.style.justifyContent = 'center'\r\n\r\n const iconEl = MapFileMarker({ mimeType: file.type, extension: 'uploading' })\r\n const iconContainer = document.createElement('div')\r\n const root = ReactDOM.createRoot(iconContainer)\r\n root.render(iconEl)\r\n markerEl.append(iconContainer)\r\n\r\n return new maplibregl.Marker({ element: markerEl, draggable: false })\r\n .setLngLat([lng, lat])\r\n .addTo(map)\r\n }\r\n\r\n // Show instruction toast when file is selected and dismiss when deselected\r\n React.useEffect(() => {\r\n if (!selectedFile) {\r\n toast.dismiss('place-file-toast')\r\n return\r\n }\r\n toast.info(`${t('placeOnMapToast')}: \"${selectedFile.name}\"`, {\r\n id: 'place-file-toast',\r\n duration: Infinity,\r\n })\r\n return () => {\r\n toast.dismiss('place-file-toast')\r\n }\r\n }, [selectedFile])\r\n\r\n // Escape cancels placement\r\n React.useEffect(() => {\r\n if (!selectedFile || isUploading) return\r\n const onKey = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n setSelectedFile(null)\r\n setCursor('')\r\n onClose()\r\n }\r\n }\r\n window.addEventListener('keydown', onKey)\r\n return () => window.removeEventListener('keydown', onKey)\r\n }, [selectedFile, isUploading])\r\n\r\n // Map double-click handler for placement\r\n React.useEffect(() => {\r\n const dblclickHandler = async (e: maplibregl.MapMouseEvent): Promise<void> => {\r\n if (!selectedFile) return\r\n if (isUploading) return\r\n\r\n setIsUploading(true)\r\n setCursor(null)\r\n toast.dismiss('place-file-toast')\r\n\r\n const lng = e.lngLat.lng\r\n const lat = e.lngLat.lat\r\n const elevation = 0\r\n\r\n const temporaryFileIcon = addTemporaryFileIcon(map, selectedFile, lng, lat)\r\n const toastId = toast.loading(`${t('uploading')} \"${selectedFile.name}\"...`)\r\n\r\n try {\r\n const fileId = crypto.randomUUID()\r\n\r\n const response = await fetch(`/api/presigned-url-upload?asset=${fileId}`)\r\n if (!response.ok) throw new Error('Failed to fetch presigned URL')\r\n const { presignedUrl } = await response.json()\r\n\r\n await uploadFileWithProgress(presignedUrl, selectedFile, () => {})\r\n\r\n const newFile = {\r\n type: 'map-file',\r\n url: '',\r\n name: selectedFile.name?.trim() || 'file name',\r\n mimeType: selectedFile.type,\r\n extension: getFileExtension(selectedFile),\r\n sizeBytes: selectedFile.size,\r\n uploadedAt: new Date(),\r\n description: '',\r\n isVisible: true,\r\n lat,\r\n lng,\r\n elevation,\r\n assetId: fileId,\r\n }\r\n\r\n const metadataResponse = await fetch('/api/files/create', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(newFile),\r\n })\r\n\r\n if (!metadataResponse.ok) {\r\n throw new Error(`Failed to upload file metadata: ${metadataResponse.statusText}`)\r\n }\r\n\r\n const { newFile: createdFile } = await metadataResponse.json()\r\n\r\n // Fetch with presigned URL so 3D models can load immediately\r\n let fileToAdd = createdFile\r\n try {\r\n const fileUrlRes = await fetch(`/api/files/${createdFile.id}`)\r\n if (fileUrlRes.ok) {\r\n const { file: fileWithUrl } = await fileUrlRes.json()\r\n if (fileWithUrl) fileToAdd = fileWithUrl\r\n }\r\n }\r\n catch { /* fall back to createdFile without presigned URL */ }\r\n\r\n fileDispatch({ type: 'ADD_FILE', payload: { file: fileToAdd } })\r\n fileDispatch({ type: 'ADD_TO_MAP', payload: { id: createdFile.id } })\r\n\r\n toast.success(t('uploadSuccess'), { id: toastId })\r\n mutate(['files'])\r\n onClose()\r\n }\r\n catch (error) {\r\n toast.error(error instanceof Error ? error.message : t('uploadError'), { id: toastId })\r\n setIsUploading(false)\r\n setSelectedFile(null)\r\n }\r\n finally {\r\n temporaryFileIcon.remove()\r\n }\r\n }\r\n\r\n const mouseMoveCrosshairHandler = () => setCursor('crosshair')\r\n\r\n if (!map) return\r\n\r\n if (selectedFile && !isUploading) {\r\n setCursor('crosshair')\r\n map.on('mousemove', mouseMoveCrosshairHandler)\r\n map.on('dblclick', dblclickHandler)\r\n }\r\n else {\r\n map.off('mousemove', mouseMoveCrosshairHandler)\r\n map.off('dblclick', dblclickHandler)\r\n }\r\n\r\n if (selectedFile) {\r\n return () => {\r\n setCursor('')\r\n map.off('mousemove', mouseMoveCrosshairHandler)\r\n map.off('dblclick', dblclickHandler)\r\n }\r\n }\r\n }, [selectedFile, isUploading, map])\r\n\r\n // Prevent page navigation while uploading\r\n React.useEffect(() => {\r\n const handleBeforeUnload = (e: BeforeUnloadEvent) => {\r\n if (isUploading) { e.preventDefault(); e.returnValue = '' }\r\n }\r\n window.addEventListener('beforeunload', handleBeforeUnload)\r\n return () => window.removeEventListener('beforeunload', handleBeforeUnload)\r\n }, [isUploading])\r\n\r\n const processFile = (file: File) => {\r\n if (!isAcceptedFileType(file)) {\r\n toast.error('Unsupported file type. Please select a safe BIM/GIS format.')\r\n return\r\n }\r\n setSelectedFile(file)\r\n }\r\n\r\n const handleFileSelect = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n const selected = event.target.files?.[0]\r\n if (!selected) { toast.warning(t('noFileSelected')); return }\r\n processFile(selected)\r\n }\r\n\r\n // When a file is selected (or uploading), dialog closes but component stays mounted\r\n if (selectedFile) return null\r\n\r\n return (\r\n <FileAdderDialog\r\n isOpen={isOpen}\r\n onClose={onClose}\r\n title={t('title')}\r\n icon={LR.FilePlus}\r\n accept={acceptedFiles}\r\n onFileSelect={handleFileSelect}\r\n onFileDrop={processFile}\r\n disabled={isUploading}\r\n dropZoneTitle={t('dropZoneTitle')}\r\n dropZoneSubtext={t('dropZoneSubtext')}\r\n />\r\n )\r\n}\r\n"],"mappings":"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","names":["map","e"]}
|