@collabdt/core 0.2.1 → 0.3.1
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 -3
- 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 +1 -1
- package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts.map +1 -1
- package/dist/core/components/ui/Comments/CollapsibleCommentItem.js +9 -9
- package/dist/core/components/ui/Comments/CollapsibleCommentItem.js.map +1 -1
- package/dist/core/components/ui/Comments/Comment.d.ts.map +1 -1
- package/dist/core/components/ui/Comments/Comment.js +4 -4
- package/dist/core/components/ui/Comments/Comment.js.map +1 -1
- package/dist/core/components/ui/Comments/CommentInput.d.ts.map +1 -1
- package/dist/core/components/ui/Comments/CommentInput.js +6 -6
- 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 +4 -4
- 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.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.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.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 -9
- 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 -7
- 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 +6 -6
- 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 -1
- 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 -6
- 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 -4
- 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 -3
- 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/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 -12
- 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/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 -6
- 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 +10 -10
- 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 +9 -9
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/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 +1 -1
- 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 -1
- 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 +1 -1
- 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.map +1 -1
- 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/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 +1 -1
- 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 +4 -4
- 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 -6
- 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 -3
- 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 +5 -5
- 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 +2 -2
- 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 +1 -1
- 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 -3
- 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 -1
- 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 -10
- 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 -55
- 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 -4
- 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 +9 -9
- 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 +2 -2
- 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 -11
- 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 +1 -1
- 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 -5
- 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 +5 -5
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/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/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/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.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/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/createCommentHooks.d.ts +1 -1
- package/dist/core/hooks/comments/createCommentHooks.d.ts.map +1 -1
- package/dist/core/hooks/comments/createCommentHooks.js +1 -1
- 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 -1
- 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/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.d.ts +8 -0
- package/dist/core/i18n/index.d.ts.map +1 -0
- package/dist/core/i18n/index.js +8 -0
- package/dist/core/i18n/index.js.map +1 -0
- package/dist/core/i18n/messages/en.json +1873 -0
- package/dist/core/i18n/messages/es.json +1870 -0
- package/dist/core/i18n/messages/fr.json +1870 -0
- 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.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.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 +2 -2
- package/dist/core/store/Menus/context.js.map +1 -1
- package/dist/core/store/Menus/reducer.d.ts +1 -1
- package/dist/core/store/Menus/reducer.d.ts.map +1 -1
- 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/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 +13 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.tsx"],"sourcesContent":["\"use client\";\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from \"react\";\r\nimport { Source, Layer, Popup } from \"react-map-gl/maplibre\";\r\nimport type { MapMouseEvent } from \"maplibre-gl\";\r\n\r\nimport { MapContext } from \"../../../../../../../../store/Map/context\";\r\nimport type { Building } from '../../../../../../../../types/dbTypes';\r\nimport { DatasetsContext } from '../../../../../../../../store';\r\nimport { MapLayerClickPriority } from \"../../../../../utils/MapEventManager/MapClickManager\";\r\nimport MapFeaturePopoverMenu from \"../../../../MapFeaturePopoverMenu\";\r\nimport { fitGeoJsonBounds } from \"../../../../../utils/fitGeojsonBounds\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { WmsTimeControl } from \"./WmsTimeControl\";\r\nimport { fetchWmsFrames, buildWmsTimeUrl, wmsLegendUrl } from \"../../../../../datasets/src/wmsTime\";\r\n\r\ninterface BuildingDataset {\r\n \"type\": \"buildings\";\r\n \"data\": Building[];\r\n \"name\": string;\r\n \"visible\"?: boolean;\r\n}\r\n\r\nconst isBuildingDataset = (dataset: any): dataset is BuildingDataset => {\r\n return dataset.type === \"buildings\" && \"data\" in dataset;\r\n};\r\n\r\nconst parseNumericValue = (value: unknown): number | null => {\r\n if (typeof value === 'number' && Number.isFinite(value)) return value;\r\n if (typeof value !== 'string') return null;\r\n const cleaned = value.replace(/[$%\\s]/g, '').replace(/,/g, '');\r\n const parsed = Number.parseFloat(cleaned);\r\n return Number.isFinite(parsed) ? parsed : null;\r\n};\r\n\r\nconst computeMinMax = (\r\n features: import('geojson').Feature[],\r\n fieldName: string,\r\n): { min: number; max: number } | null => {\r\n let min = Number.POSITIVE_INFINITY;\r\n let max = Number.NEGATIVE_INFINITY;\r\n let found = false;\r\n for (const feature of features) {\r\n const properties = (feature.properties || {}) as Record<string, unknown>;\r\n const value = parseNumericValue(properties[fieldName]);\r\n if (value === null) continue;\r\n found = true;\r\n if (value < min) min = value;\r\n if (value > max) max = value;\r\n }\r\n if (!found) return null;\r\n return { min, max: max === min ? min + 1 : max };\r\n};\r\n\r\n// ─── Per-dataset GeoJSON layer ────────────────────────────────────────\r\n// Each dataset manages its own fetch lifecycle. This means:\r\n// • datasets render PROGRESSIVELY as each one loads (no blocking)\r\n// • unmounting a dataset cancels only ITS fetch\r\n// • re-renders of one dataset never cancel fetches for another\r\n\r\ninterface GeoJsonDatasetLayerProps {\r\n dataset: any;\r\n index: number;\r\n onLayerReady: (datasetName: string, layerIds: string[]) => void;\r\n onLayerRemoved: (datasetName: string) => void;\r\n}\r\n\r\nconst GeoJsonDatasetLayer = React.memo(({ dataset, index, onLayerReady, onLayerRemoved }: GeoJsonDatasetLayerProps) => {\r\n const { state: mapState } = React.useContext(MapContext);\r\n const { map } = mapState.map;\r\n\r\n const [featureCollection, setFeatureCollection] = React.useState<import('geojson').FeatureCollection | null>(null);\r\n const fitBoundsAppliedRef = React.useRef(false);\r\n\r\n // Fetch features once when the component mounts (or dataset identity changes)\r\n React.useEffect(() => {\r\n if (!map) return;\r\n let cancelled = false;\r\n\r\n const load = async () => {\r\n try {\r\n const fetched = await dataset.getFeatures();\r\n if (cancelled) return;\r\n\r\n const fc: import('geojson').FeatureCollection =\r\n fetched?.type === 'FeatureCollection'\r\n ? fetched\r\n : { type: 'FeatureCollection', features: [] };\r\n\r\n setFeatureCollection(fc);\r\n } catch (error) {\r\n console.error(`OpenDataLayers: Error fetching features for \"${dataset.name}\":`, error);\r\n }\r\n };\r\n\r\n load();\r\n return () => { cancelled = true; };\r\n }, [map, dataset.name]);\r\n\r\n // Build the layer JSX from the loaded feature collection\r\n const layerContent = React.useMemo(() => {\r\n if (!featureCollection || featureCollection.features.length === 0) return null;\r\n\r\n const geometryType = featureCollection.features[0]?.geometry?.type;\r\n if (!geometryType) return null;\r\n\r\n // ── colour resolution ──\r\n let layerColor: any = dataset.layerColor?.color || '#0d9488';\r\n let numericFieldName: string | undefined;\r\n\r\n if (dataset.selectedFieldName) {\r\n const selectedField = dataset.fields?.find((field: any) => field.name === dataset.selectedFieldName);\r\n if (selectedField?.layerColor) {\r\n if (selectedField.colorType === 'single') {\r\n layerColor = selectedField.layerColor.color;\r\n }\r\n if (selectedField.colorType === 'minMax') {\r\n try {\r\n const fieldName = dataset.selectedFieldName;\r\n numericFieldName = `__numeric_${fieldName}`;\r\n const range = computeMinMax(featureCollection.features, fieldName);\r\n if (range) {\r\n const minColor = selectedField.layerColor.minColor || dataset.layerColor?.minColor || dataset.layerColor?.color || '#0d9488';\r\n const maxColor = selectedField.layerColor.maxColor || dataset.layerColor?.maxColor || dataset.layerColor?.color || '#0d9488';\r\n layerColor = [\r\n 'interpolate', ['linear'],\r\n ['to-number', ['get', numericFieldName], range.min],\r\n range.min, minColor,\r\n range.max, maxColor,\r\n ];\r\n }\r\n } catch (error) {\r\n console.warn('Failed to build interpolate for field', dataset.selectedFieldName, error);\r\n }\r\n }\r\n if (selectedField.colorType === 'boolean') {\r\n const minColor = selectedField.layerColor.minColor || dataset.layerColor?.minColor || dataset.layerColor?.color || '#0d9488';\r\n const maxColor = selectedField.layerColor.maxColor || dataset.layerColor?.maxColor || dataset.layerColor?.color || '#0d9488';\r\n const fieldName = dataset.selectedFieldName;\r\n layerColor = [\r\n 'case',\r\n ['any',\r\n ['==', ['get', fieldName], true],\r\n ['==', ['get', fieldName], 1],\r\n ['==', ['downcase', ['to-string', ['get', fieldName]]], 'true'],\r\n ['==', ['downcase', ['to-string', ['get', fieldName]]], 'yes'],\r\n ],\r\n maxColor,\r\n minColor,\r\n ];\r\n }\r\n }\r\n }\r\n\r\n // ── inject datasetName + numeric shadow field into each feature ──\r\n const enrichedFC: import('geojson').FeatureCollection = {\r\n ...featureCollection,\r\n features: featureCollection.features.map((feature) => {\r\n let numericVal: number | undefined;\r\n if (numericFieldName && dataset.selectedFieldName) {\r\n const v = parseNumericValue((feature.properties || {})[dataset.selectedFieldName]);\r\n if (v !== null) numericVal = v;\r\n }\r\n return {\r\n ...feature,\r\n properties: {\r\n ...feature.properties,\r\n datasetName: dataset.name,\r\n layer_color: layerColor,\r\n ...(numericFieldName && numericVal !== undefined ? { [numericFieldName]: numericVal } : {}),\r\n },\r\n };\r\n }),\r\n };\r\n\r\n // ── build layer props per geometry type ──\r\n const registeredIds: string[] = [];\r\n\r\n if (geometryType === 'Point' || geometryType === 'MultiPoint') {\r\n const paint = {\r\n 'circle-radius': 6,\r\n 'circle-color': layerColor,\r\n 'circle-opacity': 0.8,\r\n 'circle-stroke-width': 2,\r\n 'circle-stroke-color': '#ffffff',\r\n };\r\n registeredIds.push(`${dataset.name}-unclustered-point`);\r\n\r\n return {\r\n registeredIds,\r\n jsx: (\r\n <Source\r\n id={`${dataset.name}-source`}\r\n key={`${index}-${dataset.name}-source`}\r\n type=\"geojson\"\r\n data={enrichedFC}\r\n cluster={true}\r\n clusterMaxZoom={11}\r\n clusterRadius={50}\r\n >\r\n <Layer\r\n id={`${dataset.name}-clusters`}\r\n filter={['has', 'point_count']}\r\n type=\"circle\"\r\n paint={{\r\n 'circle-color': dataset.layerColor?.color || '#0d9488',\r\n 'circle-radius': ['step', ['get', 'point_count'], 20, 100, 30, 750, 40],\r\n 'circle-opacity': 0.9,\r\n }}\r\n />\r\n <Layer\r\n id={`${dataset.name}-cluster-count`}\r\n filter={['has', 'point_count']}\r\n type=\"symbol\"\r\n layout={{\r\n 'text-field': '{point_count_abbreviated}',\r\n 'text-font': ['DIN Offc Pro Medium', 'Arial Unicode MS Bold'],\r\n 'text-size': 12,\r\n }}\r\n paint={{ 'text-color': '#fff' }}\r\n />\r\n <Layer\r\n id={`${dataset.name}-unclustered-point`}\r\n filter={['!', ['has', 'point_count']]}\r\n type=\"circle\"\r\n paint={paint}\r\n />\r\n </Source>\r\n ),\r\n };\r\n }\r\n\r\n if (geometryType === 'LineString' || geometryType === 'MultiLineString') {\r\n const mainId = `${dataset.name}-line`;\r\n registeredIds.push(mainId);\r\n return {\r\n registeredIds,\r\n jsx: (\r\n <Source\r\n id={`${dataset.name}-source`}\r\n key={`${index}-${dataset.name}-source`}\r\n type=\"geojson\"\r\n data={enrichedFC}\r\n >\r\n <Layer\r\n id={mainId}\r\n type=\"line\"\r\n paint={{ 'line-color': layerColor, 'line-width': 3, 'line-opacity': 1 }}\r\n />\r\n </Source>\r\n ),\r\n };\r\n }\r\n\r\n if (geometryType === 'Polygon' || geometryType === 'MultiPolygon') {\r\n const fillId = `${dataset.name}-fill`;\r\n const outlineId = `${dataset.name}-outline`;\r\n registeredIds.push(fillId, outlineId);\r\n return {\r\n registeredIds,\r\n jsx: (\r\n <Source\r\n id={`${dataset.name}-source`}\r\n key={`${index}-${dataset.name}-source`}\r\n type=\"geojson\"\r\n data={enrichedFC}\r\n >\r\n <Layer\r\n id={fillId}\r\n type=\"fill\"\r\n paint={{ 'fill-color': layerColor, 'fill-opacity': 0.5 }}\r\n />\r\n <Layer\r\n id={outlineId}\r\n type=\"line\"\r\n paint={{ 'line-color': '#ffffff', 'line-width': 2 }}\r\n />\r\n </Source>\r\n ),\r\n };\r\n }\r\n\r\n return null;\r\n }, [featureCollection, dataset.name, dataset.layerColor, dataset.selectedFieldName, dataset.fields, index]);\r\n\r\n // Register / unregister interactive layer IDs with the parent\r\n React.useEffect(() => {\r\n if (layerContent?.registeredIds) {\r\n onLayerReady(dataset.name, layerContent.registeredIds);\r\n }\r\n return () => { onLayerRemoved(dataset.name); };\r\n }, [layerContent?.registeredIds, dataset.name, onLayerReady, onLayerRemoved]);\r\n\r\n return layerContent?.jsx ?? null;\r\n});\r\nGeoJsonDatasetLayer.displayName = 'GeoJsonDatasetLayer';\r\n\r\n\r\n// ─── Per-dataset MVT layer ────────────────────────────────────────────\r\n\r\ninterface MVTDatasetLayerProps {\r\n dataset: any;\r\n index: number;\r\n onLayerReady: (datasetName: string, layerIds: string[]) => void;\r\n onLayerRemoved: (datasetName: string) => void;\r\n}\r\n\r\nconst MVTDatasetLayer = React.memo(({ dataset, index, onLayerReady, onLayerRemoved }: MVTDatasetLayerProps) => {\r\n const tileUrl = dataset.url || dataset.information;\r\n const sourceLayer = (dataset as any)?.serviceInfo?.sourceLayer || dataset.id || dataset.name.toLowerCase().replace(/\\s+/g, '_');\r\n const layerColor = dataset.layerColor?.color || '#0d9488';\r\n const isPointLayer = dataset.layerType === 'circle' || /point/i.test(sourceLayer);\r\n const isMartinBuilding = /buildings?/i.test((dataset as any)?.serviceInfo?.sourceLayer || dataset.id || dataset.name);\r\n // Only extrude actual building layers. A polygon dataset resolves to layerType\r\n // 'fill', so keying extrusion off 'fill' alone routed every polygon (e.g. published\r\n // open-data boundaries) into the zero-height, minzoom-15.5 extrusion branch — leaving\r\n // only the outline visible. Non-building polygons fall through to the flat-fill branch.\r\n const extraIsBuilding = isMartinBuilding && !isPointLayer;\r\n\r\n const mainLayerId = isPointLayer\r\n ? `${dataset.name}-points`\r\n : extraIsBuilding\r\n ? `${dataset.name}-extrusion`\r\n : `${dataset.name}-fill`;\r\n const outlineLayerId = `${dataset.name}-outline`;\r\n\r\n // Register interactive layer IDs\r\n React.useEffect(() => {\r\n const ids = isPointLayer ? [mainLayerId] : [mainLayerId, outlineLayerId];\r\n onLayerReady(dataset.name, ids);\r\n return () => { onLayerRemoved(dataset.name); };\r\n }, [dataset.name, mainLayerId, outlineLayerId, isPointLayer, onLayerReady, onLayerRemoved]);\r\n\r\n if (!tileUrl) {\r\n console.error(`❌ OpenDataLayers: No tile URL found for MVT dataset \"${dataset.name}\"`);\r\n return null;\r\n }\r\n\r\n if (extraIsBuilding) {\r\n return (\r\n <Source id={`${dataset.name}-source`} key={`${index}-${dataset.name}-source`} type=\"vector\" tiles={[tileUrl]}>\r\n <Layer\r\n id={mainLayerId} type=\"fill-extrusion\" source-layer={sourceLayer}\r\n paint={{\r\n 'fill-extrusion-color': layerColor,\r\n 'fill-extrusion-height': ['coalesce', ['to-number', ['get', 'heightmax']], 0],\r\n 'fill-extrusion-opacity': 0.8,\r\n }}\r\n minzoom={15.5}\r\n />\r\n <Layer id={outlineLayerId} type=\"line\" source-layer={sourceLayer} paint={{ 'line-color': layerColor, 'line-width': 1, 'line-opacity': 0.8 }} />\r\n </Source>\r\n );\r\n }\r\n\r\n if (isPointLayer) {\r\n return (\r\n <Source id={`${dataset.name}-source`} key={`${index}-${dataset.name}-source`} type=\"vector\" tiles={[tileUrl]}>\r\n <Layer\r\n id={mainLayerId} type=\"circle\" source-layer={sourceLayer}\r\n paint={{ 'circle-radius': 6, 'circle-color': layerColor, 'circle-opacity': 0.8, 'circle-stroke-width': 2, 'circle-stroke-color': '#ffffff' }}\r\n />\r\n </Source>\r\n );\r\n }\r\n\r\n return (\r\n <Source id={`${dataset.name}-source`} key={`${index}-${dataset.name}-source`} type=\"vector\" tiles={[tileUrl]}>\r\n <Layer id={mainLayerId} type=\"fill\" source-layer={sourceLayer} paint={{ 'fill-color': layerColor, 'fill-opacity': 0.6 }} />\r\n {/* White outline (matches the original GeoJSON polygon style) so subdivision\r\n boundaries stay legible — a same-colour outline read as one solid blob. */}\r\n <Layer id={outlineLayerId} type=\"line\" source-layer={sourceLayer} paint={{ 'line-color': '#ffffff', 'line-width': 2 }} />\r\n </Source>\r\n );\r\n});\r\nMVTDatasetLayer.displayName = 'MVTDatasetLayer';\r\n\r\n\r\n// ─── Per-dataset WMS raster layer ─────────────────────────────────────\r\n// Live/federated WMS overlays (e.g. the GeoMet weather radar). The dataset's\r\n// `url` is a MapLibre raster tile template (GetMap with a literal\r\n// {bbox-epsg-3857}); MapLibre fetches tiles directly, so there's nothing to\r\n// parse and no features to query (raster → not interactive).\r\n\r\ninterface WMSDatasetLayerProps {\r\n dataset: any;\r\n index: number;\r\n onLayerReady: (datasetName: string, layerIds: string[]) => void;\r\n onLayerRemoved: (datasetName: string) => void;\r\n}\r\n\r\nconst WMSDatasetLayer = React.memo(({ dataset, index, onLayerReady, onLayerRemoved }: WMSDatasetLayerProps) => {\r\n const { state: mapState } = React.useContext(MapContext);\r\n const { map } = mapState.map;\r\n\r\n const tileUrl = dataset.url || dataset.information;\r\n const layerId = `${dataset.name}-wms`;\r\n const sourceId = `${dataset.name}-source`;\r\n\r\n const timeEnabled = !!dataset.timeEnabled && !!dataset.wms;\r\n const [frames, setFrames] = React.useState<string[]>([]);\r\n const [activeTime, setActiveTime] = React.useState<string | null>(null);\r\n // The bottom-left overlay stack's portal slot (MapViewer renders it). Resolved\r\n // in an effect so the node exists (post-commit) before we portal into it.\r\n const [controlSlot, setControlSlot] = React.useState<HTMLElement | null>(null);\r\n React.useEffect(() => {\r\n if (timeEnabled) setControlSlot(document.getElementById('wms-time-slot'));\r\n }, [timeEnabled]);\r\n\r\n // Register with no interactive layer ids — a raster has no queryable features.\r\n React.useEffect(() => {\r\n onLayerReady(dataset.name, []);\r\n return () => { onLayerRemoved(dataset.name); };\r\n }, [dataset.name, onLayerReady, onLayerRemoved]);\r\n\r\n // Load the WMS time extent once (time-enabled datasets only).\r\n React.useEffect(() => {\r\n if (!timeEnabled || !dataset.wms) return;\r\n let cancelled = false;\r\n fetchWmsFrames(dataset.wms.baseUrl, dataset.wms.layers)\r\n .then(f => { if (!cancelled) setFrames(f); })\r\n .catch(() => { /* fetchWmsFrames already swallows; keep static */ });\r\n return () => { cancelled = true; };\r\n }, [timeEnabled, dataset.wms?.baseUrl, dataset.wms?.layers]);\r\n\r\n // Imperatively swap the raster source's tiles per frame. The <Source tiles>\r\n // prop below never changes after mount, so there's no react-map-gl tug-of-war\r\n // and no flicker — this setTiles call is the single source of truth for TIME.\r\n React.useEffect(() => {\r\n if (!map || !activeTime || !dataset.wms) return;\r\n const src = map.getSource(sourceId) as { setTiles?: (t: string[]) => void } | undefined;\r\n if (src?.setTiles) {\r\n src.setTiles([buildWmsTimeUrl(dataset.wms.baseUrl, dataset.wms.layers, activeTime)]);\r\n }\r\n }, [map, activeTime, sourceId, dataset.wms?.baseUrl, dataset.wms?.layers]);\r\n\r\n if (!tileUrl) {\r\n console.error(`❌ OpenDataLayers: No tile URL found for WMS dataset \"${dataset.name}\"`);\r\n return null;\r\n }\r\n\r\n const showControl = timeEnabled && frames.length > 1 && map && controlSlot;\r\n\r\n return (\r\n <>\r\n <Source id={sourceId} key={`${index}-${dataset.name}-source`} type=\"raster\" tiles={[tileUrl]} tileSize={256}>\r\n <Layer id={layerId} type=\"raster\" paint={{ 'raster-opacity': 0.85 }} />\r\n </Source>\r\n {showControl && createPortal(\r\n <WmsTimeControl\r\n frames={frames}\r\n onTimeChange={setActiveTime}\r\n label={dataset.name}\r\n legendUrl={dataset.wms ? wmsLegendUrl(dataset.wms.baseUrl, dataset.wms.layers) : undefined}\r\n />,\r\n controlSlot,\r\n )}\r\n </>\r\n );\r\n});\r\nWMSDatasetLayer.displayName = 'WMSDatasetLayer';\r\n\r\n\r\n// ─── Main orchestrator ────────────────────────────────────────────────\r\n\r\nexport const OpenDataLayers = () => {\r\n const { \"state\": mapState, \"dispatch\": mapDispatch } = React.useContext(MapContext);\r\n const { map, mapClickManager } = mapState.map;\r\n\r\n const { state: datasetState } = React.useContext(DatasetsContext);\r\n const { addedDatasets } = datasetState.datasets;\r\n\r\n const [clickedFeature, setClickedFeature] = React.useState<any>(null);\r\n const [addedFeaturesPopup, setAddedFeaturesPopup] = React.useState<Array<{\r\n id: string | number;\r\n popup: React.ReactElement;\r\n }>>([]);\r\n\r\n // Track interactive layer IDs per dataset for click handling\r\n const layerIdsMapRef = React.useRef<Record<string, string[]>>({});\r\n const [allLayerNames, setAllLayerNames] = React.useState<string[]>([]);\r\n\r\n const handleLayerReady = React.useCallback((datasetName: string, layerIds: string[]) => {\r\n layerIdsMapRef.current[datasetName] = layerIds;\r\n setAllLayerNames(Object.values(layerIdsMapRef.current).flat());\r\n }, []);\r\n\r\n const handleLayerRemoved = React.useCallback((datasetName: string) => {\r\n delete layerIdsMapRef.current[datasetName];\r\n setAllLayerNames(Object.values(layerIdsMapRef.current).flat());\r\n }, []);\r\n\r\n // ── Click handling ──\r\n React.useEffect(() => {\r\n if (!map || !mapClickManager || allLayerNames.length === 0) return;\r\n\r\n const handleMapClick = (e: MapMouseEvent) => {\r\n const clicked = map.queryRenderedFeatures(e.point, { layers: allLayerNames });\r\n const localClickedFeature = clicked?.[0];\r\n\r\n if (!localClickedFeature) {\r\n setClickedFeature(null);\r\n return;\r\n }\r\n\r\n const lng = e.lngLat.lng;\r\n const lat = e.lngLat.lat;\r\n const coordinates = [lng, lat];\r\n const properties = localClickedFeature.properties || {};\r\n const _name = Object.entries(properties).find(([key]) => key.toLowerCase().includes('name'))?.[1] || undefined;\r\n\r\n let datasetNameFromFeature = properties.datasetName;\r\n if (!datasetNameFromFeature && localClickedFeature.layer) {\r\n const layerId = localClickedFeature.layer.id;\r\n const suffixes = ['-unclustered-point', '-clusters', '-cluster-count', '-outline', '-fill', '-line', '-circle', '-extrusion', '-points'];\r\n let extractedName = layerId;\r\n for (const suffix of suffixes) {\r\n if (layerId.endsWith(suffix)) {\r\n extractedName = layerId.slice(0, -suffix.length);\r\n break;\r\n }\r\n }\r\n if (extractedName === layerId && layerId.includes('-')) {\r\n extractedName = layerId.slice(0, layerId.lastIndexOf('-'));\r\n }\r\n datasetNameFromFeature = extractedName;\r\n }\r\n\r\n const featureId = properties.globalid || properties.id || `temp-${Date.now()}`;\r\n localClickedFeature.id = featureId;\r\n localClickedFeature.properties = { ...properties, coordinates, _name, datasetName: datasetNameFromFeature };\r\n setClickedFeature(localClickedFeature);\r\n };\r\n\r\n for (const layerId of allLayerNames) {\r\n mapClickManager.register(layerId, MapLayerClickPriority.OpenDataLayerClickPriority, handleMapClick);\r\n }\r\n\r\n return () => {\r\n for (const layerId of allLayerNames) {\r\n mapClickManager.unregister(layerId);\r\n }\r\n };\r\n }, [map, mapClickManager, allLayerNames]);\r\n\r\n // ── Hover cursor handling ──\r\n React.useEffect(() => {\r\n if (!map) return;\r\n\r\n const canvas = map.getCanvas();\r\n\r\n const setDefaultCursor = () => {\r\n canvas.style.cursor = 'default';\r\n };\r\n\r\n if (allLayerNames.length === 0) {\r\n setDefaultCursor();\r\n return;\r\n }\r\n\r\n const handleMouseMove = (e: MapMouseEvent) => {\r\n const hoveredFeatures = map.queryRenderedFeatures(e.point, { layers: allLayerNames });\r\n canvas.style.cursor = hoveredFeatures.length > 0 ? 'pointer' : 'default';\r\n };\r\n\r\n const handleMouseLeave = () => {\r\n setDefaultCursor();\r\n };\r\n\r\n map.on('mousemove', handleMouseMove);\r\n map.on('mouseleave', handleMouseLeave);\r\n\r\n return () => {\r\n map.off('mousemove', handleMouseMove);\r\n map.off('mouseleave', handleMouseLeave);\r\n setDefaultCursor();\r\n };\r\n }, [map, allLayerNames]);\r\n\r\n // ── Popup ──\r\n React.useEffect(() => {\r\n if (!clickedFeature || !clickedFeature.properties?.coordinates) {\r\n setAddedFeaturesPopup([]);\r\n return;\r\n }\r\n const popup = (\r\n <Popup\r\n anchor=\"bottom\"\r\n closeButton={true}\r\n closeOnClick={false}\r\n closeOnMove={false}\r\n focusAfterOpen={true}\r\n key={clickedFeature.id}\r\n latitude={clickedFeature.properties.coordinates[1]}\r\n longitude={clickedFeature.properties.coordinates[0]}\r\n >\r\n <MapFeaturePopoverMenu\r\n feature={clickedFeature}\r\n onCloseAction={() => clearClickedFeature()}\r\n />\r\n </Popup>\r\n );\r\n setAddedFeaturesPopup([{ id: clickedFeature.id as string | number, popup }]);\r\n }, [clickedFeature]);\r\n\r\n function clearClickedFeature() {\r\n mapDispatch({ type: \"SET_CLICKED_FEATURE\", payload: { clickedFeature: null } });\r\n setClickedFeature(null);\r\n }\r\n\r\n // ── Sort datasets by display order ──\r\n const sortedDatasets = React.useMemo(() => {\r\n if (!addedDatasets?.length) return [];\r\n return [...addedDatasets].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\r\n }, [addedDatasets]);\r\n\r\n return (\r\n <>\r\n {sortedDatasets.map((dataset, index) => {\r\n if (dataset.visible === false) return null;\r\n if (isBuildingDataset(dataset)) return null;\r\n\r\n if (dataset.type === 'WMS' || dataset.datasetType === 'WMS') {\r\n return (\r\n <WMSDatasetLayer\r\n key={dataset.name}\r\n dataset={dataset}\r\n index={index}\r\n onLayerReady={handleLayerReady}\r\n onLayerRemoved={handleLayerRemoved}\r\n />\r\n );\r\n }\r\n\r\n if (dataset.type === 'MVT' || dataset.datasetType === 'MVT') {\r\n return (\r\n <MVTDatasetLayer\r\n key={dataset.name}\r\n dataset={dataset}\r\n index={index}\r\n onLayerReady={handleLayerReady}\r\n onLayerRemoved={handleLayerRemoved}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <GeoJsonDatasetLayer\r\n key={dataset.name}\r\n dataset={dataset}\r\n index={index}\r\n onLayerReady={handleLayerReady}\r\n onLayerRemoved={handleLayerRemoved}\r\n />\r\n );\r\n })}\r\n\r\n {addedFeaturesPopup.map((popup) => (\r\n <React.Fragment key={popup.id}>{popup.popup}</React.Fragment>\r\n ))}\r\n </>\r\n );\r\n};\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAkMoB,SA6PZ,UApPgB,KATJ;AA7LpB,YAAY,WAAW;AACvB,SAAS,QAAQ,OAAO,aAAa;AAGrC,SAAS,kBAAkB;AAE3B,SAAS,uBAAuB;AAChC,SAAS,6BAA6B;AACtC,OAAO,2BAA2B;AAElC,SAAS,oBAAoB;AAC7B,SAAS,sBAAsB;AAC/B,SAAS,gBAAgB,iBAAiB,oBAAoB;AAS9D,MAAM,oBAAoB,CAAC,YAA6C;AACpE,SAAO,QAAQ,SAAS,eAAe,UAAU;AACrD;AAEA,MAAM,oBAAoB,CAAC,UAAkC;AACzD,MAAI,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,EAAG,QAAO;AAChE,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,UAAU,MAAM,QAAQ,WAAW,EAAE,EAAE,QAAQ,MAAM,EAAE;AAC7D,QAAM,SAAS,OAAO,WAAW,OAAO;AACxC,SAAO,OAAO,SAAS,MAAM,IAAI,SAAS;AAC9C;AAEA,MAAM,gBAAgB,CAClB,UACA,cACsC;AACtC,MAAI,MAAM,OAAO;AACjB,MAAI,MAAM,OAAO;AACjB,MAAI,QAAQ;AACZ,aAAW,WAAW,UAAU;AAC5B,UAAM,aAAc,QAAQ,cAAc,CAAC;AAC3C,UAAM,QAAQ,kBAAkB,WAAW,SAAS,CAAC;AACrD,QAAI,UAAU,KAAM;AACpB,YAAQ;AACR,QAAI,QAAQ,IAAK,OAAM;AACvB,QAAI,QAAQ,IAAK,OAAM;AAAA,EAC3B;AACA,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,EAAE,KAAK,KAAK,QAAQ,MAAM,MAAM,IAAI,IAAI;AACnD;AAeA,MAAM,sBAAsB,MAAM,KAAK,CAAC,EAAE,SAAS,OAAO,cAAc,eAAe,MAAgC;AAtEvH;AAuEI,QAAM,EAAE,OAAO,SAAS,IAAI,MAAM,WAAW,UAAU;AACvD,QAAM,EAAE,IAAI,IAAI,SAAS;AAEzB,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,MAAM,SAAqD,IAAI;AACjH,QAAM,sBAAsB,MAAM,OAAO,KAAK;AAG9C,QAAM,UAAU,MAAM;AAClB,QAAI,CAAC,IAAK;AACV,QAAI,YAAY;AAEhB,UAAM,OAAO,YAAY;AACrB,UAAI;AACA,cAAM,UAAU,MAAM,QAAQ,YAAY;AAC1C,YAAI,UAAW;AAEf,cAAM,MACF,mCAAS,UAAS,sBACZ,UACA,EAAE,MAAM,qBAAqB,UAAU,CAAC,EAAE;AAEpD,6BAAqB,EAAE;AAAA,MAC3B,SAAS,OAAO;AACZ,gBAAQ,MAAM,gDAAgD,QAAQ,IAAI,MAAM,KAAK;AAAA,MACzF;AAAA,IACJ;AAEA,SAAK;AACL,WAAO,MAAM;AAAE,kBAAY;AAAA,IAAM;AAAA,EACrC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC;AAGtB,QAAM,eAAe,MAAM,QAAQ,MAAM;AAvG7C,QAAAA,KAAA;AAwGQ,QAAI,CAAC,qBAAqB,kBAAkB,SAAS,WAAW,EAAG,QAAO;AAE1E,UAAM,gBAAe,MAAAA,MAAA,kBAAkB,SAAS,CAAC,MAA5B,gBAAAA,IAA+B,aAA/B,mBAAyC;AAC9D,QAAI,CAAC,aAAc,QAAO;AAG1B,QAAI,eAAkB,aAAQ,eAAR,mBAAoB,UAAS;AACnD,QAAI;AAEJ,QAAI,QAAQ,mBAAmB;AAC3B,YAAM,iBAAgB,aAAQ,WAAR,mBAAgB,KAAK,CAAC,UAAe,MAAM,SAAS,QAAQ;AAClF,UAAI,+CAAe,YAAY;AAC3B,YAAI,cAAc,cAAc,UAAU;AACtC,uBAAa,cAAc,WAAW;AAAA,QAC1C;AACA,YAAI,cAAc,cAAc,UAAU;AACtC,cAAI;AACA,kBAAM,YAAY,QAAQ;AAC1B,+BAAmB,aAAa,SAAS;AACzC,kBAAM,QAAQ,cAAc,kBAAkB,UAAU,SAAS;AACjE,gBAAI,OAAO;AACP,oBAAM,WAAW,cAAc,WAAW,cAAY,aAAQ,eAAR,mBAAoB,eAAY,aAAQ,eAAR,mBAAoB,UAAS;AACnH,oBAAM,WAAW,cAAc,WAAW,cAAY,aAAQ,eAAR,mBAAoB,eAAY,aAAQ,eAAR,mBAAoB,UAAS;AACnH,2BAAa;AAAA,gBACT;AAAA,gBAAe,CAAC,QAAQ;AAAA,gBACxB,CAAC,aAAa,CAAC,OAAO,gBAAgB,GAAG,MAAM,GAAG;AAAA,gBAClD,MAAM;AAAA,gBAAK;AAAA,gBACX,MAAM;AAAA,gBAAK;AAAA,cACf;AAAA,YACJ;AAAA,UACJ,SAAS,OAAO;AACZ,oBAAQ,KAAK,yCAAyC,QAAQ,mBAAmB,KAAK;AAAA,UAC1F;AAAA,QACJ;AACA,YAAI,cAAc,cAAc,WAAW;AACvC,gBAAM,WAAW,cAAc,WAAW,cAAY,aAAQ,eAAR,mBAAoB,eAAY,aAAQ,eAAR,mBAAoB,UAAS;AACnH,gBAAM,WAAW,cAAc,WAAW,cAAY,aAAQ,eAAR,mBAAoB,eAAY,aAAQ,eAAR,mBAAoB,UAAS;AACnH,gBAAM,YAAY,QAAQ;AAC1B,uBAAa;AAAA,YACT;AAAA,YACA;AAAA,cAAC;AAAA,cACG,CAAC,MAAM,CAAC,OAAO,SAAS,GAAG,IAAI;AAAA,cAC/B,CAAC,MAAM,CAAC,OAAO,SAAS,GAAG,CAAC;AAAA,cAC5B,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,SAAS,CAAC,CAAC,GAAG,MAAM;AAAA,cAC9D,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,SAAS,CAAC,CAAC,GAAG,KAAK;AAAA,YACjE;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAGA,UAAM,aAAkD,iCACjD,oBADiD;AAAA,MAEpD,UAAU,kBAAkB,SAAS,IAAI,CAAC,YAAY;AAClD,YAAI;AACJ,YAAI,oBAAoB,QAAQ,mBAAmB;AAC/C,gBAAM,IAAI,mBAAmB,QAAQ,cAAc,CAAC,GAAG,QAAQ,iBAAiB,CAAC;AACjF,cAAI,MAAM,KAAM,cAAa;AAAA,QACjC;AACA,eAAO,iCACA,UADA;AAAA,UAEH,YAAY,gDACL,QAAQ,aADH;AAAA,YAER,aAAa,QAAQ;AAAA,YACrB,aAAa;AAAA,cACT,oBAAoB,eAAe,SAAY,EAAE,CAAC,gBAAgB,GAAG,WAAW,IAAI,CAAC;AAAA,QAEjG;AAAA,MACJ,CAAC;AAAA,IACL;AAGA,UAAM,gBAA0B,CAAC;AAEjC,QAAI,iBAAiB,WAAW,iBAAiB,cAAc;AAC3D,YAAM,QAAQ;AAAA,QACV,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,QAClB,uBAAuB;AAAA,QACvB,uBAAuB;AAAA,MAC3B;AACA,oBAAc,KAAK,GAAG,QAAQ,IAAI,oBAAoB;AAEtD,aAAO;AAAA,QACH;AAAA,QACA,KACI;AAAA,UAAC;AAAA;AAAA,YACG,IAAI,GAAG,QAAQ,IAAI;AAAA,YAEnB,MAAK;AAAA,YACL,MAAM;AAAA,YACN,SAAS;AAAA,YACT,gBAAgB;AAAA,YAChB,eAAe;AAAA,YAEf;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACG,IAAI,GAAG,QAAQ,IAAI;AAAA,kBACnB,QAAQ,CAAC,OAAO,aAAa;AAAA,kBAC7B,MAAK;AAAA,kBACL,OAAO;AAAA,oBACH,kBAAgB,aAAQ,eAAR,mBAAoB,UAAS;AAAA,oBAC7C,iBAAiB,CAAC,QAAQ,CAAC,OAAO,aAAa,GAAG,IAAI,KAAK,IAAI,KAAK,EAAE;AAAA,oBACtE,kBAAkB;AAAA,kBACtB;AAAA;AAAA,cACJ;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACG,IAAI,GAAG,QAAQ,IAAI;AAAA,kBACnB,QAAQ,CAAC,OAAO,aAAa;AAAA,kBAC7B,MAAK;AAAA,kBACL,QAAQ;AAAA,oBACJ,cAAc;AAAA,oBACd,aAAa,CAAC,uBAAuB,uBAAuB;AAAA,oBAC5D,aAAa;AAAA,kBACjB;AAAA,kBACA,OAAO,EAAE,cAAc,OAAO;AAAA;AAAA,cAClC;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACG,IAAI,GAAG,QAAQ,IAAI;AAAA,kBACnB,QAAQ,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC;AAAA,kBACpC,MAAK;AAAA,kBACL;AAAA;AAAA,cACJ;AAAA;AAAA;AAAA,UAjCK,GAAG,KAAK,IAAI,QAAQ,IAAI;AAAA,QAkCjC;AAAA,MAER;AAAA,IACJ;AAEA,QAAI,iBAAiB,gBAAgB,iBAAiB,mBAAmB;AACrE,YAAM,SAAS,GAAG,QAAQ,IAAI;AAC9B,oBAAc,KAAK,MAAM;AACzB,aAAO;AAAA,QACH;AAAA,QACA,KACI;AAAA,UAAC;AAAA;AAAA,YACG,IAAI,GAAG,QAAQ,IAAI;AAAA,YAEnB,MAAK;AAAA,YACL,MAAM;AAAA,YAEN;AAAA,cAAC;AAAA;AAAA,gBACG,IAAI;AAAA,gBACJ,MAAK;AAAA,gBACL,OAAO,EAAE,cAAc,YAAY,cAAc,GAAG,gBAAgB,EAAE;AAAA;AAAA,YAC1E;AAAA;AAAA,UARK,GAAG,KAAK,IAAI,QAAQ,IAAI;AAAA,QASjC;AAAA,MAER;AAAA,IACJ;AAEA,QAAI,iBAAiB,aAAa,iBAAiB,gBAAgB;AAC/D,YAAM,SAAS,GAAG,QAAQ,IAAI;AAC9B,YAAM,YAAY,GAAG,QAAQ,IAAI;AACjC,oBAAc,KAAK,QAAQ,SAAS;AACpC,aAAO;AAAA,QACH;AAAA,QACA,KACI;AAAA,UAAC;AAAA;AAAA,YACG,IAAI,GAAG,QAAQ,IAAI;AAAA,YAEnB,MAAK;AAAA,YACL,MAAM;AAAA,YAEN;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACG,IAAI;AAAA,kBACJ,MAAK;AAAA,kBACL,OAAO,EAAE,cAAc,YAAY,gBAAgB,IAAI;AAAA;AAAA,cAC3D;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACG,IAAI;AAAA,kBACJ,MAAK;AAAA,kBACL,OAAO,EAAE,cAAc,WAAW,cAAc,EAAE;AAAA;AAAA,cACtD;AAAA;AAAA;AAAA,UAbK,GAAG,KAAK,IAAI,QAAQ,IAAI;AAAA,QAcjC;AAAA,MAER;AAAA,IACJ;AAEA,WAAO;AAAA,EACX,GAAG,CAAC,mBAAmB,QAAQ,MAAM,QAAQ,YAAY,QAAQ,mBAAmB,QAAQ,QAAQ,KAAK,CAAC;AAG1G,QAAM,UAAU,MAAM;AAClB,QAAI,6CAAc,eAAe;AAC7B,mBAAa,QAAQ,MAAM,aAAa,aAAa;AAAA,IACzD;AACA,WAAO,MAAM;AAAE,qBAAe,QAAQ,IAAI;AAAA,IAAG;AAAA,EACjD,GAAG,CAAC,6CAAc,eAAe,QAAQ,MAAM,cAAc,cAAc,CAAC;AAE5E,UAAO,kDAAc,QAAd,YAAqB;AAChC,CAAC;AACD,oBAAoB,cAAc;AAYlC,MAAM,kBAAkB,MAAM,KAAK,CAAC,EAAE,SAAS,OAAO,cAAc,eAAe,MAA4B;AAtT/G;AAuTI,QAAM,UAAU,QAAQ,OAAO,QAAQ;AACvC,QAAM,gBAAe,wCAAiB,gBAAjB,mBAA8B,gBAAe,QAAQ,MAAM,QAAQ,KAAK,YAAY,EAAE,QAAQ,QAAQ,GAAG;AAC9H,QAAM,eAAa,aAAQ,eAAR,mBAAoB,UAAS;AAChD,QAAM,eAAe,QAAQ,cAAc,YAAY,SAAS,KAAK,WAAW;AAChF,QAAM,mBAAmB,cAAc,OAAM,wCAAiB,gBAAjB,mBAA8B,gBAAe,QAAQ,MAAM,QAAQ,IAAI;AAKpH,QAAM,kBAAkB,oBAAoB,CAAC;AAE7C,QAAM,cAAc,eACd,GAAG,QAAQ,IAAI,YACf,kBACI,GAAG,QAAQ,IAAI,eACf,GAAG,QAAQ,IAAI;AACzB,QAAM,iBAAiB,GAAG,QAAQ,IAAI;AAGtC,QAAM,UAAU,MAAM;AAClB,UAAM,MAAM,eAAe,CAAC,WAAW,IAAI,CAAC,aAAa,cAAc;AACvE,iBAAa,QAAQ,MAAM,GAAG;AAC9B,WAAO,MAAM;AAAE,qBAAe,QAAQ,IAAI;AAAA,IAAG;AAAA,EACjD,GAAG,CAAC,QAAQ,MAAM,aAAa,gBAAgB,cAAc,cAAc,cAAc,CAAC;AAE1F,MAAI,CAAC,SAAS;AACV,YAAQ,MAAM,6DAAwD,QAAQ,IAAI,GAAG;AACrF,WAAO;AAAA,EACX;AAEA,MAAI,iBAAiB;AACjB,WACI,qBAAC,UAAO,IAAI,GAAG,QAAQ,IAAI,WAAmD,MAAK,UAAS,OAAO,CAAC,OAAO,GACvG;AAAA;AAAA,QAAC;AAAA;AAAA,UACG,IAAI;AAAA,UAAa,MAAK;AAAA,UAAiB,gBAAc;AAAA,UACrD,OAAO;AAAA,YACH,wBAAwB;AAAA,YACxB,yBAAyB,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,WAAW,CAAC,GAAG,CAAC;AAAA,YAC5E,0BAA0B;AAAA,UAC9B;AAAA,UACA,SAAS;AAAA;AAAA,MACb;AAAA,MACA,oBAAC,SAAM,IAAI,gBAAgB,MAAK,QAAO,gBAAc,aAAa,OAAO,EAAE,cAAc,YAAY,cAAc,GAAG,gBAAgB,IAAI,GAAG;AAAA,SAVtG,GAAG,KAAK,IAAI,QAAQ,IAAI,SAWnE;AAAA,EAER;AAEA,MAAI,cAAc;AACd,WACI,oBAAC,UAAO,IAAI,GAAG,QAAQ,IAAI,WAAmD,MAAK,UAAS,OAAO,CAAC,OAAO,GACvG;AAAA,MAAC;AAAA;AAAA,QACG,IAAI;AAAA,QAAa,MAAK;AAAA,QAAS,gBAAc;AAAA,QAC7C,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,YAAY,kBAAkB,KAAK,uBAAuB,GAAG,uBAAuB,UAAU;AAAA;AAAA,IAC/I,KAJuC,GAAG,KAAK,IAAI,QAAQ,IAAI,SAKnE;AAAA,EAER;AAEA,SACI,qBAAC,UAAO,IAAI,GAAG,QAAQ,IAAI,WAAmD,MAAK,UAAS,OAAO,CAAC,OAAO,GACvG;AAAA,wBAAC,SAAM,IAAI,aAAa,MAAK,QAAO,gBAAc,aAAa,OAAO,EAAE,cAAc,YAAY,gBAAgB,IAAI,GAAG;AAAA,IAGzH,oBAAC,SAAM,IAAI,gBAAgB,MAAK,QAAO,gBAAc,aAAa,OAAO,EAAE,cAAc,WAAW,cAAc,EAAE,GAAG;AAAA,OAJhF,GAAG,KAAK,IAAI,QAAQ,IAAI,SAKnE;AAER,CAAC;AACD,gBAAgB,cAAc;AAgB9B,MAAM,kBAAkB,MAAM,KAAK,CAAC,EAAE,SAAS,OAAO,cAAc,eAAe,MAA4B;AA1Y/G;AA2YI,QAAM,EAAE,OAAO,SAAS,IAAI,MAAM,WAAW,UAAU;AACvD,QAAM,EAAE,IAAI,IAAI,SAAS;AAEzB,QAAM,UAAU,QAAQ,OAAO,QAAQ;AACvC,QAAM,UAAU,GAAG,QAAQ,IAAI;AAC/B,QAAM,WAAW,GAAG,QAAQ,IAAI;AAEhC,QAAM,cAAc,CAAC,CAAC,QAAQ,eAAe,CAAC,CAAC,QAAQ;AACvD,QAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAmB,CAAC,CAAC;AACvD,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM,SAAwB,IAAI;AAGtE,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAA6B,IAAI;AAC7E,QAAM,UAAU,MAAM;AAClB,QAAI,YAAa,gBAAe,SAAS,eAAe,eAAe,CAAC;AAAA,EAC5E,GAAG,CAAC,WAAW,CAAC;AAGhB,QAAM,UAAU,MAAM;AAClB,iBAAa,QAAQ,MAAM,CAAC,CAAC;AAC7B,WAAO,MAAM;AAAE,qBAAe,QAAQ,IAAI;AAAA,IAAG;AAAA,EACjD,GAAG,CAAC,QAAQ,MAAM,cAAc,cAAc,CAAC;AAG/C,QAAM,UAAU,MAAM;AAClB,QAAI,CAAC,eAAe,CAAC,QAAQ,IAAK;AAClC,QAAI,YAAY;AAChB,mBAAe,QAAQ,IAAI,SAAS,QAAQ,IAAI,MAAM,EACjD,KAAK,OAAK;AAAE,UAAI,CAAC,UAAW,WAAU,CAAC;AAAA,IAAG,CAAC,EAC3C,MAAM,MAAM;AAAA,IAAqD,CAAC;AACvE,WAAO,MAAM;AAAE,kBAAY;AAAA,IAAM;AAAA,EACrC,GAAG,CAAC,cAAa,aAAQ,QAAR,mBAAa,UAAS,aAAQ,QAAR,mBAAa,MAAM,CAAC;AAK3D,QAAM,UAAU,MAAM;AAClB,QAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,IAAK;AACzC,UAAM,MAAM,IAAI,UAAU,QAAQ;AAClC,QAAI,2BAAK,UAAU;AACf,UAAI,SAAS,CAAC,gBAAgB,QAAQ,IAAI,SAAS,QAAQ,IAAI,QAAQ,UAAU,CAAC,CAAC;AAAA,IACvF;AAAA,EACJ,GAAG,CAAC,KAAK,YAAY,WAAU,aAAQ,QAAR,mBAAa,UAAS,aAAQ,QAAR,mBAAa,MAAM,CAAC;AAEzE,MAAI,CAAC,SAAS;AACV,YAAQ,MAAM,6DAAwD,QAAQ,IAAI,GAAG;AACrF,WAAO;AAAA,EACX;AAEA,QAAM,cAAc,eAAe,OAAO,SAAS,KAAK,OAAO;AAE/D,SACI,iCACI;AAAA,wBAAC,UAAO,IAAI,UAAkD,MAAK,UAAS,OAAO,CAAC,OAAO,GAAG,UAAU,KACpG,8BAAC,SAAM,IAAI,SAAS,MAAK,UAAS,OAAO,EAAE,kBAAkB,KAAK,GAAG,KAD9C,GAAG,KAAK,IAAI,QAAQ,IAAI,SAEnD;AAAA,IACC,eAAe;AAAA,MACZ;AAAA,QAAC;AAAA;AAAA,UACG;AAAA,UACA,cAAc;AAAA,UACd,OAAO,QAAQ;AAAA,UACf,WAAW,QAAQ,MAAM,aAAa,QAAQ,IAAI,SAAS,QAAQ,IAAI,MAAM,IAAI;AAAA;AAAA,MACrF;AAAA,MACA;AAAA,IACJ;AAAA,KACJ;AAER,CAAC;AACD,gBAAgB,cAAc;AAKvB,MAAM,iBAAiB,MAAM;AAChC,QAAM,EAAE,SAAS,UAAU,YAAY,YAAY,IAAI,MAAM,WAAW,UAAU;AAClF,QAAM,EAAE,KAAK,gBAAgB,IAAI,SAAS;AAE1C,QAAM,EAAE,OAAO,aAAa,IAAI,MAAM,WAAW,eAAe;AAChE,QAAM,EAAE,cAAc,IAAI,aAAa;AAEvC,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,MAAM,SAAc,IAAI;AACpE,QAAM,CAAC,oBAAoB,qBAAqB,IAAI,MAAM,SAGtD,CAAC,CAAC;AAGN,QAAM,iBAAiB,MAAM,OAAiC,CAAC,CAAC;AAChE,QAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM,SAAmB,CAAC,CAAC;AAErE,QAAM,mBAAmB,MAAM,YAAY,CAAC,aAAqB,aAAuB;AACpF,mBAAe,QAAQ,WAAW,IAAI;AACtC,qBAAiB,OAAO,OAAO,eAAe,OAAO,EAAE,KAAK,CAAC;AAAA,EACjE,GAAG,CAAC,CAAC;AAEL,QAAM,qBAAqB,MAAM,YAAY,CAAC,gBAAwB;AAClE,WAAO,eAAe,QAAQ,WAAW;AACzC,qBAAiB,OAAO,OAAO,eAAe,OAAO,EAAE,KAAK,CAAC;AAAA,EACjE,GAAG,CAAC,CAAC;AAGL,QAAM,UAAU,MAAM;AAClB,QAAI,CAAC,OAAO,CAAC,mBAAmB,cAAc,WAAW,EAAG;AAE5D,UAAM,iBAAiB,CAAC,MAAqB;AAnfrD;AAofY,YAAM,UAAU,IAAI,sBAAsB,EAAE,OAAO,EAAE,QAAQ,cAAc,CAAC;AAC5E,YAAM,sBAAsB,mCAAU;AAEtC,UAAI,CAAC,qBAAqB;AACtB,0BAAkB,IAAI;AACtB;AAAA,MACJ;AAEA,YAAM,MAAM,EAAE,OAAO;AACrB,YAAM,MAAM,EAAE,OAAO;AACrB,YAAM,cAAc,CAAC,KAAK,GAAG;AAC7B,YAAM,aAAa,oBAAoB,cAAc,CAAC;AACtD,YAAM,UAAQ,YAAO,QAAQ,UAAU,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,IAAI,YAAY,EAAE,SAAS,MAAM,CAAC,MAA7E,mBAAiF,OAAM;AAErG,UAAI,yBAAyB,WAAW;AACxC,UAAI,CAAC,0BAA0B,oBAAoB,OAAO;AACtD,cAAM,UAAU,oBAAoB,MAAM;AAC1C,cAAM,WAAW,CAAC,sBAAsB,aAAa,kBAAkB,YAAY,SAAS,SAAS,WAAW,cAAc,SAAS;AACvI,YAAI,gBAAgB;AACpB,mBAAW,UAAU,UAAU;AAC3B,cAAI,QAAQ,SAAS,MAAM,GAAG;AAC1B,4BAAgB,QAAQ,MAAM,GAAG,CAAC,OAAO,MAAM;AAC/C;AAAA,UACJ;AAAA,QACJ;AACA,YAAI,kBAAkB,WAAW,QAAQ,SAAS,GAAG,GAAG;AACpD,0BAAgB,QAAQ,MAAM,GAAG,QAAQ,YAAY,GAAG,CAAC;AAAA,QAC7D;AACA,iCAAyB;AAAA,MAC7B;AAEA,YAAM,YAAY,WAAW,YAAY,WAAW,MAAM,QAAQ,KAAK,IAAI,CAAC;AAC5E,0BAAoB,KAAK;AACzB,0BAAoB,aAAa,iCAAK,aAAL,EAAiB,aAAa,OAAO,aAAa,uBAAuB;AAC1G,wBAAkB,mBAAmB;AAAA,IACzC;AAEA,eAAW,WAAW,eAAe;AACjC,sBAAgB,SAAS,SAAS,sBAAsB,4BAA4B,cAAc;AAAA,IACtG;AAEA,WAAO,MAAM;AACT,iBAAW,WAAW,eAAe;AACjC,wBAAgB,WAAW,OAAO;AAAA,MACtC;AAAA,IACJ;AAAA,EACJ,GAAG,CAAC,KAAK,iBAAiB,aAAa,CAAC;AAGxC,QAAM,UAAU,MAAM;AAClB,QAAI,CAAC,IAAK;AAEV,UAAM,SAAS,IAAI,UAAU;AAE7B,UAAM,mBAAmB,MAAM;AAC3B,aAAO,MAAM,SAAS;AAAA,IAC1B;AAEA,QAAI,cAAc,WAAW,GAAG;AAC5B,uBAAiB;AACjB;AAAA,IACJ;AAEA,UAAM,kBAAkB,CAAC,MAAqB;AAC1C,YAAM,kBAAkB,IAAI,sBAAsB,EAAE,OAAO,EAAE,QAAQ,cAAc,CAAC;AACpF,aAAO,MAAM,SAAS,gBAAgB,SAAS,IAAI,YAAY;AAAA,IACnE;AAEA,UAAM,mBAAmB,MAAM;AAC3B,uBAAiB;AAAA,IACrB;AAEA,QAAI,GAAG,aAAa,eAAe;AACnC,QAAI,GAAG,cAAc,gBAAgB;AAErC,WAAO,MAAM;AACT,UAAI,IAAI,aAAa,eAAe;AACpC,UAAI,IAAI,cAAc,gBAAgB;AACtC,uBAAiB;AAAA,IACrB;AAAA,EACJ,GAAG,CAAC,KAAK,aAAa,CAAC;AAGvB,QAAM,UAAU,MAAM;AAvkB1B;AAwkBQ,QAAI,CAAC,kBAAkB,GAAC,oBAAe,eAAf,mBAA2B,cAAa;AAC5D,4BAAsB,CAAC,CAAC;AACxB;AAAA,IACJ;AACA,UAAM,QACF;AAAA,MAAC;AAAA;AAAA,QACG,QAAO;AAAA,QACP,aAAa;AAAA,QACb,cAAc;AAAA,QACd,aAAa;AAAA,QACb,gBAAgB;AAAA,QAEhB,UAAU,eAAe,WAAW,YAAY,CAAC;AAAA,QACjD,WAAW,eAAe,WAAW,YAAY,CAAC;AAAA,QAElD;AAAA,UAAC;AAAA;AAAA,YACG,SAAS;AAAA,YACT,eAAe,MAAM,oBAAoB;AAAA;AAAA,QAC7C;AAAA;AAAA,MAPK,eAAe;AAAA,IAQxB;AAEJ,0BAAsB,CAAC,EAAE,IAAI,eAAe,IAAuB,MAAM,CAAC,CAAC;AAAA,EAC/E,GAAG,CAAC,cAAc,CAAC;AAEnB,WAAS,sBAAsB;AAC3B,gBAAY,EAAE,MAAM,uBAAuB,SAAS,EAAE,gBAAgB,KAAK,EAAE,CAAC;AAC9E,sBAAkB,IAAI;AAAA,EAC1B;AAGA,QAAM,iBAAiB,MAAM,QAAQ,MAAM;AACvC,QAAI,EAAC,+CAAe,QAAQ,QAAO,CAAC;AACpC,WAAO,CAAC,GAAG,aAAa,EAAE,KAAK,CAAC,GAAG,MAAG;AAxmB9C;AAwmBkD,sBAAE,UAAF,YAAW,OAAM,OAAE,UAAF,YAAW;AAAA,KAAE;AAAA,EAC5E,GAAG,CAAC,aAAa,CAAC;AAElB,SACI,iCACK;AAAA,mBAAe,IAAI,CAAC,SAAS,UAAU;AACpC,UAAI,QAAQ,YAAY,MAAO,QAAO;AACtC,UAAI,kBAAkB,OAAO,EAAG,QAAO;AAEvC,UAAI,QAAQ,SAAS,SAAS,QAAQ,gBAAgB,OAAO;AACzD,eACI;AAAA,UAAC;AAAA;AAAA,YAEG;AAAA,YACA;AAAA,YACA,cAAc;AAAA,YACd,gBAAgB;AAAA;AAAA,UAJX,QAAQ;AAAA,QAKjB;AAAA,MAER;AAEA,UAAI,QAAQ,SAAS,SAAS,QAAQ,gBAAgB,OAAO;AACzD,eACI;AAAA,UAAC;AAAA;AAAA,YAEG;AAAA,YACA;AAAA,YACA,cAAc;AAAA,YACd,gBAAgB;AAAA;AAAA,UAJX,QAAQ;AAAA,QAKjB;AAAA,MAER;AAEA,aACI;AAAA,QAAC;AAAA;AAAA,UAEG;AAAA,UACA;AAAA,UACA,cAAc;AAAA,UACd,gBAAgB;AAAA;AAAA,QAJX,QAAQ;AAAA,MAKjB;AAAA,IAER,CAAC;AAAA,IAEA,mBAAmB,IAAI,CAAC,UACrB,oBAAC,MAAM,UAAN,EAA+B,gBAAM,SAAjB,MAAM,EAAiB,CAC/C;AAAA,KACL;AAER;","names":["_a"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.tsx"],"sourcesContent":["\"use client\";\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { Source, Layer, Popup } from \"react-map-gl/maplibre\";\r\n\r\n\r\nimport { DatasetsContext } from '../../../../../../../../store';\r\nimport { MapContext } from \"../../../../../../../../store/Map/context\";\r\nimport { fetchWmsFrames, buildWmsTimeUrl, wmsLegendUrl } from \"../../../../../datasets/src/wmsTime\";\r\nimport { fitGeoJsonBounds } from \"../../../../../utils/fitGeojsonBounds\";\r\nimport { MapLayerClickPriority } from \"../../../../../utils/MapEventManager/MapClickManager\";\r\nimport MapFeaturePopoverMenu from \"../../../../MapFeaturePopoverMenu\";\r\n\r\nimport { WmsTimeControl } from \"./WmsTimeControl\";\r\n\r\nimport type { Building } from '../../../../../../../../types/dbTypes';\r\nimport type { MapMouseEvent } from \"maplibre-gl\";\r\n\r\ninterface BuildingDataset {\r\n \"type\": \"buildings\";\r\n \"data\": Building[];\r\n \"name\": string;\r\n \"visible\"?: boolean;\r\n}\r\n\r\nconst isBuildingDataset = (dataset: any): dataset is BuildingDataset => {\r\n return dataset.type === \"buildings\" && \"data\" in dataset;\r\n};\r\n\r\nconst parseNumericValue = (value: unknown): number | null => {\r\n if (typeof value === 'number' && Number.isFinite(value)) return value;\r\n if (typeof value !== 'string') return null;\r\n const cleaned = value.replace(/[$%\\s]/g, '').replace(/,/g, '');\r\n const parsed = Number.parseFloat(cleaned);\r\n return Number.isFinite(parsed) ? parsed : null;\r\n};\r\n\r\nconst computeMinMax = (\r\n features: import('geojson').Feature[],\r\n fieldName: string,\r\n): { min: number; max: number } | null => {\r\n let min = Number.POSITIVE_INFINITY;\r\n let max = Number.NEGATIVE_INFINITY;\r\n let found = false;\r\n for (const feature of features) {\r\n const properties = (feature.properties || {}) as Record<string, unknown>;\r\n const value = parseNumericValue(properties[fieldName]);\r\n if (value === null) continue;\r\n found = true;\r\n if (value < min) min = value;\r\n if (value > max) max = value;\r\n }\r\n if (!found) return null;\r\n return { min, max: max === min ? min + 1 : max };\r\n};\r\n\r\n// ─── Per-dataset GeoJSON layer ────────────────────────────────────────\r\n// Each dataset manages its own fetch lifecycle. This means:\r\n// • datasets render PROGRESSIVELY as each one loads (no blocking)\r\n// • unmounting a dataset cancels only ITS fetch\r\n// • re-renders of one dataset never cancel fetches for another\r\n\r\ninterface GeoJsonDatasetLayerProps {\r\n dataset: any;\r\n index: number;\r\n onLayerReady: (datasetName: string, layerIds: string[]) => void;\r\n onLayerRemoved: (datasetName: string) => void;\r\n}\r\n\r\nconst GeoJsonDatasetLayer = React.memo(({ dataset, index, onLayerReady, onLayerRemoved }: GeoJsonDatasetLayerProps) => {\r\n const { state: mapState } = React.useContext(MapContext);\r\n const { map } = mapState.map;\r\n\r\n const [featureCollection, setFeatureCollection] = React.useState<import('geojson').FeatureCollection | null>(null);\r\n const fitBoundsAppliedRef = React.useRef(false);\r\n\r\n // Fetch features once when the component mounts (or dataset identity changes)\r\n React.useEffect(() => {\r\n if (!map) return;\r\n let cancelled = false;\r\n\r\n const load = async () => {\r\n try {\r\n const fetched = await dataset.getFeatures();\r\n if (cancelled) return;\r\n\r\n const fc: import('geojson').FeatureCollection =\r\n fetched?.type === 'FeatureCollection'\r\n ? fetched\r\n : { type: 'FeatureCollection', features: [] };\r\n\r\n setFeatureCollection(fc);\r\n } catch (error) {\r\n console.error(`OpenDataLayers: Error fetching features for \"${dataset.name}\":`, error);\r\n }\r\n };\r\n\r\n load();\r\n return () => { cancelled = true; };\r\n }, [map, dataset.name]);\r\n\r\n // Build the layer JSX from the loaded feature collection\r\n const layerContent = React.useMemo(() => {\r\n if (!featureCollection || featureCollection.features.length === 0) return null;\r\n\r\n const geometryType = featureCollection.features[0]?.geometry?.type;\r\n if (!geometryType) return null;\r\n\r\n // ── colour resolution ──\r\n let layerColor: any = dataset.layerColor?.color || '#0d9488';\r\n let numericFieldName: string | undefined;\r\n\r\n if (dataset.selectedFieldName) {\r\n const selectedField = dataset.fields?.find((field: any) => field.name === dataset.selectedFieldName);\r\n if (selectedField?.layerColor) {\r\n if (selectedField.colorType === 'single') {\r\n layerColor = selectedField.layerColor.color;\r\n }\r\n if (selectedField.colorType === 'minMax') {\r\n try {\r\n const fieldName = dataset.selectedFieldName;\r\n numericFieldName = `__numeric_${fieldName}`;\r\n const range = computeMinMax(featureCollection.features, fieldName);\r\n if (range) {\r\n const minColor = selectedField.layerColor.minColor || dataset.layerColor?.minColor || dataset.layerColor?.color || '#0d9488';\r\n const maxColor = selectedField.layerColor.maxColor || dataset.layerColor?.maxColor || dataset.layerColor?.color || '#0d9488';\r\n layerColor = [\r\n 'interpolate', ['linear'],\r\n ['to-number', ['get', numericFieldName], range.min],\r\n range.min, minColor,\r\n range.max, maxColor,\r\n ];\r\n }\r\n } catch (error) {\r\n console.warn('Failed to build interpolate for field', dataset.selectedFieldName, error);\r\n }\r\n }\r\n if (selectedField.colorType === 'boolean') {\r\n const minColor = selectedField.layerColor.minColor || dataset.layerColor?.minColor || dataset.layerColor?.color || '#0d9488';\r\n const maxColor = selectedField.layerColor.maxColor || dataset.layerColor?.maxColor || dataset.layerColor?.color || '#0d9488';\r\n const fieldName = dataset.selectedFieldName;\r\n layerColor = [\r\n 'case',\r\n ['any',\r\n ['==', ['get', fieldName], true],\r\n ['==', ['get', fieldName], 1],\r\n ['==', ['downcase', ['to-string', ['get', fieldName]]], 'true'],\r\n ['==', ['downcase', ['to-string', ['get', fieldName]]], 'yes'],\r\n ],\r\n maxColor,\r\n minColor,\r\n ];\r\n }\r\n }\r\n }\r\n\r\n // ── inject datasetName + numeric shadow field into each feature ──\r\n const enrichedFC: import('geojson').FeatureCollection = {\r\n ...featureCollection,\r\n features: featureCollection.features.map((feature) => {\r\n let numericVal: number | undefined;\r\n if (numericFieldName && dataset.selectedFieldName) {\r\n const v = parseNumericValue((feature.properties || {})[dataset.selectedFieldName]);\r\n if (v !== null) numericVal = v;\r\n }\r\n return {\r\n ...feature,\r\n properties: {\r\n ...feature.properties,\r\n datasetName: dataset.name,\r\n layer_color: layerColor,\r\n ...(numericFieldName && numericVal !== undefined ? { [numericFieldName]: numericVal } : {}),\r\n },\r\n };\r\n }),\r\n };\r\n\r\n // ── build layer props per geometry type ──\r\n const registeredIds: string[] = [];\r\n\r\n if (geometryType === 'Point' || geometryType === 'MultiPoint') {\r\n const paint = {\r\n 'circle-radius': 6,\r\n 'circle-color': layerColor,\r\n 'circle-opacity': 0.8,\r\n 'circle-stroke-width': 2,\r\n 'circle-stroke-color': '#ffffff',\r\n };\r\n registeredIds.push(`${dataset.name}-unclustered-point`);\r\n\r\n return {\r\n registeredIds,\r\n jsx: (\r\n <Source\r\n id={`${dataset.name}-source`}\r\n key={`${index}-${dataset.name}-source`}\r\n type=\"geojson\"\r\n data={enrichedFC}\r\n cluster={true}\r\n clusterMaxZoom={11}\r\n clusterRadius={50}\r\n >\r\n <Layer\r\n id={`${dataset.name}-clusters`}\r\n filter={['has', 'point_count']}\r\n type=\"circle\"\r\n paint={{\r\n 'circle-color': dataset.layerColor?.color || '#0d9488',\r\n 'circle-radius': ['step', ['get', 'point_count'], 20, 100, 30, 750, 40],\r\n 'circle-opacity': 0.9,\r\n }}\r\n />\r\n <Layer\r\n id={`${dataset.name}-cluster-count`}\r\n filter={['has', 'point_count']}\r\n type=\"symbol\"\r\n layout={{\r\n 'text-field': '{point_count_abbreviated}',\r\n 'text-font': ['DIN Offc Pro Medium', 'Arial Unicode MS Bold'],\r\n 'text-size': 12,\r\n }}\r\n paint={{ 'text-color': '#fff' }}\r\n />\r\n <Layer\r\n id={`${dataset.name}-unclustered-point`}\r\n filter={['!', ['has', 'point_count']]}\r\n type=\"circle\"\r\n paint={paint}\r\n />\r\n </Source>\r\n ),\r\n };\r\n }\r\n\r\n if (geometryType === 'LineString' || geometryType === 'MultiLineString') {\r\n const mainId = `${dataset.name}-line`;\r\n registeredIds.push(mainId);\r\n return {\r\n registeredIds,\r\n jsx: (\r\n <Source\r\n id={`${dataset.name}-source`}\r\n key={`${index}-${dataset.name}-source`}\r\n type=\"geojson\"\r\n data={enrichedFC}\r\n >\r\n <Layer\r\n id={mainId}\r\n type=\"line\"\r\n paint={{ 'line-color': layerColor, 'line-width': 3, 'line-opacity': 1 }}\r\n />\r\n </Source>\r\n ),\r\n };\r\n }\r\n\r\n if (geometryType === 'Polygon' || geometryType === 'MultiPolygon') {\r\n const fillId = `${dataset.name}-fill`;\r\n const outlineId = `${dataset.name}-outline`;\r\n registeredIds.push(fillId, outlineId);\r\n return {\r\n registeredIds,\r\n jsx: (\r\n <Source\r\n id={`${dataset.name}-source`}\r\n key={`${index}-${dataset.name}-source`}\r\n type=\"geojson\"\r\n data={enrichedFC}\r\n >\r\n <Layer\r\n id={fillId}\r\n type=\"fill\"\r\n paint={{ 'fill-color': layerColor, 'fill-opacity': 0.5 }}\r\n />\r\n <Layer\r\n id={outlineId}\r\n type=\"line\"\r\n paint={{ 'line-color': '#ffffff', 'line-width': 2 }}\r\n />\r\n </Source>\r\n ),\r\n };\r\n }\r\n\r\n return null;\r\n }, [featureCollection, dataset.name, dataset.layerColor, dataset.selectedFieldName, dataset.fields, index]);\r\n\r\n // Register / unregister interactive layer IDs with the parent\r\n React.useEffect(() => {\r\n if (layerContent?.registeredIds) {\r\n onLayerReady(dataset.name, layerContent.registeredIds);\r\n }\r\n return () => { onLayerRemoved(dataset.name); };\r\n }, [layerContent?.registeredIds, dataset.name, onLayerReady, onLayerRemoved]);\r\n\r\n return layerContent?.jsx ?? null;\r\n});\r\nGeoJsonDatasetLayer.displayName = 'GeoJsonDatasetLayer';\r\n\r\n\r\n// ─── Per-dataset MVT layer ────────────────────────────────────────────\r\n\r\ninterface MVTDatasetLayerProps {\r\n dataset: any;\r\n index: number;\r\n onLayerReady: (datasetName: string, layerIds: string[]) => void;\r\n onLayerRemoved: (datasetName: string) => void;\r\n}\r\n\r\nconst MVTDatasetLayer = React.memo(({ dataset, index, onLayerReady, onLayerRemoved }: MVTDatasetLayerProps) => {\r\n const tileUrl = dataset.url || dataset.information;\r\n const sourceLayer = (dataset as any)?.serviceInfo?.sourceLayer || dataset.id || dataset.name.toLowerCase().replace(/\\s+/g, '_');\r\n const layerColor = dataset.layerColor?.color || '#0d9488';\r\n const isPointLayer = dataset.layerType === 'circle' || /point/i.test(sourceLayer);\r\n const isMartinBuilding = /buildings?/i.test((dataset as any)?.serviceInfo?.sourceLayer || dataset.id || dataset.name);\r\n // Only extrude actual building layers. A polygon dataset resolves to layerType\r\n // 'fill', so keying extrusion off 'fill' alone routed every polygon (e.g. published\r\n // open-data boundaries) into the zero-height, minzoom-15.5 extrusion branch — leaving\r\n // only the outline visible. Non-building polygons fall through to the flat-fill branch.\r\n const extraIsBuilding = isMartinBuilding && !isPointLayer;\r\n\r\n const mainLayerId = isPointLayer\r\n ? `${dataset.name}-points`\r\n : extraIsBuilding\r\n ? `${dataset.name}-extrusion`\r\n : `${dataset.name}-fill`;\r\n const outlineLayerId = `${dataset.name}-outline`;\r\n\r\n // Register interactive layer IDs\r\n React.useEffect(() => {\r\n const ids = isPointLayer ? [mainLayerId] : [mainLayerId, outlineLayerId];\r\n onLayerReady(dataset.name, ids);\r\n return () => { onLayerRemoved(dataset.name); };\r\n }, [dataset.name, mainLayerId, outlineLayerId, isPointLayer, onLayerReady, onLayerRemoved]);\r\n\r\n if (!tileUrl) {\r\n console.error(`❌ OpenDataLayers: No tile URL found for MVT dataset \"${dataset.name}\"`);\r\n return null;\r\n }\r\n\r\n if (extraIsBuilding) {\r\n return (\r\n <Source id={`${dataset.name}-source`} key={`${index}-${dataset.name}-source`} type=\"vector\" tiles={[tileUrl]}>\r\n <Layer\r\n id={mainLayerId} type=\"fill-extrusion\" source-layer={sourceLayer}\r\n paint={{\r\n 'fill-extrusion-color': layerColor,\r\n 'fill-extrusion-height': ['coalesce', ['to-number', ['get', 'heightmax']], 0],\r\n 'fill-extrusion-opacity': 0.8,\r\n }}\r\n minzoom={15.5}\r\n />\r\n <Layer id={outlineLayerId} type=\"line\" source-layer={sourceLayer} paint={{ 'line-color': layerColor, 'line-width': 1, 'line-opacity': 0.8 }} />\r\n </Source>\r\n );\r\n }\r\n\r\n if (isPointLayer) {\r\n return (\r\n <Source id={`${dataset.name}-source`} key={`${index}-${dataset.name}-source`} type=\"vector\" tiles={[tileUrl]}>\r\n <Layer\r\n id={mainLayerId} type=\"circle\" source-layer={sourceLayer}\r\n paint={{ 'circle-radius': 6, 'circle-color': layerColor, 'circle-opacity': 0.8, 'circle-stroke-width': 2, 'circle-stroke-color': '#ffffff' }}\r\n />\r\n </Source>\r\n );\r\n }\r\n\r\n return (\r\n <Source id={`${dataset.name}-source`} key={`${index}-${dataset.name}-source`} type=\"vector\" tiles={[tileUrl]}>\r\n <Layer id={mainLayerId} type=\"fill\" source-layer={sourceLayer} paint={{ 'fill-color': layerColor, 'fill-opacity': 0.6 }} />\r\n {/* White outline (matches the original GeoJSON polygon style) so subdivision\r\n boundaries stay legible — a same-colour outline read as one solid blob. */}\r\n <Layer id={outlineLayerId} type=\"line\" source-layer={sourceLayer} paint={{ 'line-color': '#ffffff', 'line-width': 2 }} />\r\n </Source>\r\n );\r\n});\r\nMVTDatasetLayer.displayName = 'MVTDatasetLayer';\r\n\r\n\r\n// ─── Per-dataset WMS raster layer ─────────────────────────────────────\r\n// Live/federated WMS overlays (e.g. the GeoMet weather radar). The dataset's\r\n// `url` is a MapLibre raster tile template (GetMap with a literal\r\n// {bbox-epsg-3857}); MapLibre fetches tiles directly, so there's nothing to\r\n// parse and no features to query (raster → not interactive).\r\n\r\ninterface WMSDatasetLayerProps {\r\n dataset: any;\r\n index: number;\r\n onLayerReady: (datasetName: string, layerIds: string[]) => void;\r\n onLayerRemoved: (datasetName: string) => void;\r\n}\r\n\r\nconst WMSDatasetLayer = React.memo(({ dataset, index, onLayerReady, onLayerRemoved }: WMSDatasetLayerProps) => {\r\n const { state: mapState } = React.useContext(MapContext);\r\n const { map } = mapState.map;\r\n\r\n const tileUrl = dataset.url || dataset.information;\r\n const layerId = `${dataset.name}-wms`;\r\n const sourceId = `${dataset.name}-source`;\r\n\r\n const timeEnabled = !!dataset.timeEnabled && !!dataset.wms;\r\n const [frames, setFrames] = React.useState<string[]>([]);\r\n const [activeTime, setActiveTime] = React.useState<string | null>(null);\r\n // The bottom-left overlay stack's portal slot (MapViewer renders it). Resolved\r\n // in an effect so the node exists (post-commit) before we portal into it.\r\n const [controlSlot, setControlSlot] = React.useState<HTMLElement | null>(null);\r\n React.useEffect(() => {\r\n if (timeEnabled) setControlSlot(document.getElementById('wms-time-slot'));\r\n }, [timeEnabled]);\r\n\r\n // Register with no interactive layer ids — a raster has no queryable features.\r\n React.useEffect(() => {\r\n onLayerReady(dataset.name, []);\r\n return () => { onLayerRemoved(dataset.name); };\r\n }, [dataset.name, onLayerReady, onLayerRemoved]);\r\n\r\n // Load the WMS time extent once (time-enabled datasets only).\r\n React.useEffect(() => {\r\n if (!timeEnabled || !dataset.wms) return;\r\n let cancelled = false;\r\n fetchWmsFrames(dataset.wms.baseUrl, dataset.wms.layers)\r\n .then(f => { if (!cancelled) setFrames(f); })\r\n .catch(() => { /* fetchWmsFrames already swallows; keep static */ });\r\n return () => { cancelled = true; };\r\n }, [timeEnabled, dataset.wms?.baseUrl, dataset.wms?.layers]);\r\n\r\n // Imperatively swap the raster source's tiles per frame. The <Source tiles>\r\n // prop below never changes after mount, so there's no react-map-gl tug-of-war\r\n // and no flicker — this setTiles call is the single source of truth for TIME.\r\n React.useEffect(() => {\r\n if (!map || !activeTime || !dataset.wms) return;\r\n const src = map.getSource(sourceId) as { setTiles?: (t: string[]) => void } | undefined;\r\n if (src?.setTiles) {\r\n src.setTiles([buildWmsTimeUrl(dataset.wms.baseUrl, dataset.wms.layers, activeTime)]);\r\n }\r\n }, [map, activeTime, sourceId, dataset.wms?.baseUrl, dataset.wms?.layers]);\r\n\r\n if (!tileUrl) {\r\n console.error(`❌ OpenDataLayers: No tile URL found for WMS dataset \"${dataset.name}\"`);\r\n return null;\r\n }\r\n\r\n const showControl = timeEnabled && frames.length > 1 && map && controlSlot;\r\n\r\n return (\r\n <>\r\n <Source id={sourceId} key={`${index}-${dataset.name}-source`} type=\"raster\" tiles={[tileUrl]} tileSize={256}>\r\n <Layer id={layerId} type=\"raster\" paint={{ 'raster-opacity': 0.85 }} />\r\n </Source>\r\n {showControl && createPortal(\r\n <WmsTimeControl\r\n frames={frames}\r\n onTimeChange={setActiveTime}\r\n label={dataset.name}\r\n legendUrl={dataset.wms ? wmsLegendUrl(dataset.wms.baseUrl, dataset.wms.layers) : undefined}\r\n />,\r\n controlSlot,\r\n )}\r\n </>\r\n );\r\n});\r\nWMSDatasetLayer.displayName = 'WMSDatasetLayer';\r\n\r\n\r\n// ─── Main orchestrator ────────────────────────────────────────────────\r\n\r\nexport const OpenDataLayers = () => {\r\n const { \"state\": mapState, \"dispatch\": mapDispatch } = React.useContext(MapContext);\r\n const { map, mapClickManager } = mapState.map;\r\n\r\n const { state: datasetState } = React.useContext(DatasetsContext);\r\n const { addedDatasets } = datasetState.datasets;\r\n\r\n const [clickedFeature, setClickedFeature] = React.useState<any>(null);\r\n const [addedFeaturesPopup, setAddedFeaturesPopup] = React.useState<Array<{\r\n id: string | number;\r\n popup: React.ReactElement;\r\n }>>([]);\r\n\r\n // Track interactive layer IDs per dataset for click handling\r\n const layerIdsMapRef = React.useRef<Record<string, string[]>>({});\r\n const [allLayerNames, setAllLayerNames] = React.useState<string[]>([]);\r\n\r\n const handleLayerReady = React.useCallback((datasetName: string, layerIds: string[]) => {\r\n layerIdsMapRef.current[datasetName] = layerIds;\r\n setAllLayerNames(Object.values(layerIdsMapRef.current).flat());\r\n }, []);\r\n\r\n const handleLayerRemoved = React.useCallback((datasetName: string) => {\r\n delete layerIdsMapRef.current[datasetName];\r\n setAllLayerNames(Object.values(layerIdsMapRef.current).flat());\r\n }, []);\r\n\r\n // ── Click handling ──\r\n React.useEffect(() => {\r\n if (!map || !mapClickManager || allLayerNames.length === 0) return;\r\n\r\n const handleMapClick = (e: MapMouseEvent) => {\r\n const clicked = map.queryRenderedFeatures(e.point, { layers: allLayerNames });\r\n const localClickedFeature = clicked?.[0];\r\n\r\n if (!localClickedFeature) {\r\n setClickedFeature(null);\r\n return;\r\n }\r\n\r\n const lng = e.lngLat.lng;\r\n const lat = e.lngLat.lat;\r\n const coordinates = [lng, lat];\r\n const properties = localClickedFeature.properties || {};\r\n const _name = Object.entries(properties).find(([key]) => key.toLowerCase().includes('name'))?.[1] || undefined;\r\n\r\n let datasetNameFromFeature = properties.datasetName;\r\n if (!datasetNameFromFeature && localClickedFeature.layer) {\r\n const layerId = localClickedFeature.layer.id;\r\n const suffixes = ['-unclustered-point', '-clusters', '-cluster-count', '-outline', '-fill', '-line', '-circle', '-extrusion', '-points'];\r\n let extractedName = layerId;\r\n for (const suffix of suffixes) {\r\n if (layerId.endsWith(suffix)) {\r\n extractedName = layerId.slice(0, -suffix.length);\r\n break;\r\n }\r\n }\r\n if (extractedName === layerId && layerId.includes('-')) {\r\n extractedName = layerId.slice(0, layerId.lastIndexOf('-'));\r\n }\r\n datasetNameFromFeature = extractedName;\r\n }\r\n\r\n const featureId = properties.globalid || properties.id || `temp-${Date.now()}`;\r\n localClickedFeature.id = featureId;\r\n localClickedFeature.properties = { ...properties, coordinates, _name, datasetName: datasetNameFromFeature };\r\n setClickedFeature(localClickedFeature);\r\n };\r\n\r\n for (const layerId of allLayerNames) {\r\n mapClickManager.register(layerId, MapLayerClickPriority.OpenDataLayerClickPriority, handleMapClick);\r\n }\r\n\r\n return () => {\r\n for (const layerId of allLayerNames) {\r\n mapClickManager.unregister(layerId);\r\n }\r\n };\r\n }, [map, mapClickManager, allLayerNames]);\r\n\r\n // ── Hover cursor handling ──\r\n React.useEffect(() => {\r\n if (!map) return;\r\n\r\n const canvas = map.getCanvas();\r\n\r\n const setDefaultCursor = () => {\r\n canvas.style.cursor = 'default';\r\n };\r\n\r\n if (allLayerNames.length === 0) {\r\n setDefaultCursor();\r\n return;\r\n }\r\n\r\n const handleMouseMove = (e: MapMouseEvent) => {\r\n const hoveredFeatures = map.queryRenderedFeatures(e.point, { layers: allLayerNames });\r\n canvas.style.cursor = hoveredFeatures.length > 0 ? 'pointer' : 'default';\r\n };\r\n\r\n const handleMouseLeave = () => {\r\n setDefaultCursor();\r\n };\r\n\r\n map.on('mousemove', handleMouseMove);\r\n map.on('mouseleave', handleMouseLeave);\r\n\r\n return () => {\r\n map.off('mousemove', handleMouseMove);\r\n map.off('mouseleave', handleMouseLeave);\r\n setDefaultCursor();\r\n };\r\n }, [map, allLayerNames]);\r\n\r\n // ── Popup ──\r\n React.useEffect(() => {\r\n if (!clickedFeature || !clickedFeature.properties?.coordinates) {\r\n setAddedFeaturesPopup([]);\r\n return;\r\n }\r\n const popup = (\r\n <Popup\r\n anchor=\"bottom\"\r\n closeButton={true}\r\n closeOnClick={false}\r\n closeOnMove={false}\r\n focusAfterOpen={true}\r\n key={clickedFeature.id}\r\n latitude={clickedFeature.properties.coordinates[1]}\r\n longitude={clickedFeature.properties.coordinates[0]}\r\n >\r\n <MapFeaturePopoverMenu\r\n feature={clickedFeature}\r\n onCloseAction={() => clearClickedFeature()}\r\n />\r\n </Popup>\r\n );\r\n setAddedFeaturesPopup([{ id: clickedFeature.id as string | number, popup }]);\r\n }, [clickedFeature]);\r\n\r\n function clearClickedFeature() {\r\n mapDispatch({ type: \"SET_CLICKED_FEATURE\", payload: { clickedFeature: null } });\r\n setClickedFeature(null);\r\n }\r\n\r\n // ── Sort datasets by display order ──\r\n const sortedDatasets = React.useMemo(() => {\r\n if (!addedDatasets?.length) return [];\r\n return [...addedDatasets].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\r\n }, [addedDatasets]);\r\n\r\n return (\r\n <>\r\n {sortedDatasets.map((dataset, index) => {\r\n if (dataset.visible === false) return null;\r\n if (isBuildingDataset(dataset)) return null;\r\n\r\n if (dataset.type === 'WMS' || dataset.datasetType === 'WMS') {\r\n return (\r\n <WMSDatasetLayer\r\n key={dataset.name}\r\n dataset={dataset}\r\n index={index}\r\n onLayerReady={handleLayerReady}\r\n onLayerRemoved={handleLayerRemoved}\r\n />\r\n );\r\n }\r\n\r\n if (dataset.type === 'MVT' || dataset.datasetType === 'MVT') {\r\n return (\r\n <MVTDatasetLayer\r\n key={dataset.name}\r\n dataset={dataset}\r\n index={index}\r\n onLayerReady={handleLayerReady}\r\n onLayerRemoved={handleLayerRemoved}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <GeoJsonDatasetLayer\r\n key={dataset.name}\r\n dataset={dataset}\r\n index={index}\r\n onLayerReady={handleLayerReady}\r\n onLayerRemoved={handleLayerRemoved}\r\n />\r\n );\r\n })}\r\n\r\n {addedFeaturesPopup.map((popup) => (\r\n <React.Fragment key={popup.id}>{popup.popup}</React.Fragment>\r\n ))}\r\n </>\r\n );\r\n};\r\n"],"mappings":"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","names":["_a"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaceOnMap.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/PlaceOnMap.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PlaceOnMap.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/PlaceOnMap.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAA;AAK7D,UAAU,eAAe;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1D,QAAQ,EAAE,MAAM,IAAI,CAAA;CACvB;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAkEhD,CAAA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { useTranslations } from "next-intl";
|
|
2
3
|
import * as React from "react";
|
|
3
|
-
import { MapContext } from "../../../../../../store";
|
|
4
|
-
import { useFile } from "../../../../../../hooks/files/files";
|
|
5
4
|
import { toast } from "sonner";
|
|
6
|
-
import {
|
|
5
|
+
import { useFile } from "../../../../../../hooks/files/files";
|
|
6
|
+
import { MapContext } from "../../../../../../store";
|
|
7
7
|
const PlaceOnMap = ({ file, onPlaced, onCancel }) => {
|
|
8
8
|
const { state: mapState } = React.useContext(MapContext);
|
|
9
9
|
const { map } = mapState.map;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/PlaceOnMap.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
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/PlaceOnMap.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 { useTranslations } from \"next-intl\"\r\nimport * as React from \"react\"\r\nimport { toast } from \"sonner\"\r\n\r\nimport { useFile } from \"../../../../../../hooks/files/files\"\r\nimport { MapContext } from \"../../../../../../store\"\r\n\r\nimport type { DbFile } from \"../../../../../../types/dbTypes\"\r\nimport type maplibregl from \"maplibre-gl\"\r\n\r\n\r\n\r\ninterface PlaceOnMapProps {\r\n file: DbFile\r\n onPlaced: (file: DbFile, lat: number, lng: number) => void\r\n onCancel: () => void\r\n}\r\n\r\n/**\r\n * Invisible component that puts the map into \"click-to-place\" mode.\r\n * Sets crosshair cursor, listens for a single click, saves the coords to the DB,\r\n * then calls onPlaced. Esc calls onCancel.\r\n */\r\nexport const PlaceOnMap: React.FC<PlaceOnMapProps> = ({ file, onPlaced, onCancel }) => {\r\n const { state: mapState } = React.useContext(MapContext)\r\n const { map } = mapState.map\r\n const { updateFile } = useFile(file.id)\r\n const t = useTranslations(\"EditFilePosition\")\r\n\r\n // Stable refs so the map effect never needs to re-register\r\n const onPlacedRef = React.useRef(onPlaced)\r\n const onCancelRef = React.useRef(onCancel)\r\n onPlacedRef.current = onPlaced\r\n onCancelRef.current = onCancel\r\n\r\n React.useEffect(() => {\r\n if (!map) return\r\n\r\n const canvas = map.getCanvas()\r\n\r\n // MapLibre resets the cursor on every mousemove, so we re-apply it each time\r\n const keepCrosshair = () => { canvas.style.cursor = \"crosshair\" }\r\n const clearCursor = () => { canvas.style.cursor = \"\" }\r\n\r\n canvas.style.cursor = \"crosshair\"\r\n map.on(\"mousemove\", keepCrosshair)\r\n\r\n const handleClick = async (e: maplibregl.MapMouseEvent) => {\r\n const lat = e.lngLat.lat\r\n const lng = e.lngLat.lng\r\n\r\n map.off(\"mousemove\", keepCrosshair)\r\n clearCursor()\r\n\r\n try {\r\n await updateFile({ lat, lng, type: 'map-file' } as Partial<DbFile>)\r\n file.lat = lat\r\n file.lng = lng\r\n file.type = 'map-file'\r\n onPlacedRef.current(file, lat, lng)\r\n toast.success(t(\"positionAcceptedToast\"))\r\n } catch (err) {\r\n console.error(\"Error placing file:\", err)\r\n // Restore on failure\r\n map.on(\"mousemove\", keepCrosshair)\r\n canvas.style.cursor = \"crosshair\"\r\n }\r\n }\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") {\r\n map.off(\"mousemove\", keepCrosshair)\r\n clearCursor()\r\n onCancelRef.current()\r\n }\r\n }\r\n\r\n map.on(\"click\", handleClick)\r\n document.addEventListener(\"keydown\", handleKeyDown)\r\n\r\n return () => {\r\n map.off(\"mousemove\", keepCrosshair)\r\n map.off(\"click\", handleClick)\r\n document.removeEventListener(\"keydown\", handleKeyDown)\r\n clearCursor()\r\n }\r\n }, [map, updateFile])\r\n\r\n return null\r\n}\r\n"],"mappings":";AAKA,SAAS,uBAAuB;AAChC,YAAY,WAAW;AACvB,SAAS,aAAa;AAEtB,SAAS,eAAe;AACxB,SAAS,kBAAkB;AAkBpB,MAAM,aAAwC,CAAC,EAAE,MAAM,UAAU,SAAS,MAAM;AACnF,QAAM,EAAE,OAAO,SAAS,IAAI,MAAM,WAAW,UAAU;AACvD,QAAM,EAAE,IAAI,IAAI,SAAS;AACzB,QAAM,EAAE,WAAW,IAAI,QAAQ,KAAK,EAAE;AACtC,QAAM,IAAI,gBAAgB,kBAAkB;AAG5C,QAAM,cAAc,MAAM,OAAO,QAAQ;AACzC,QAAM,cAAc,MAAM,OAAO,QAAQ;AACzC,cAAY,UAAU;AACtB,cAAY,UAAU;AAEtB,QAAM,UAAU,MAAM;AAClB,QAAI,CAAC,IAAK;AAEV,UAAM,SAAS,IAAI,UAAU;AAG7B,UAAM,gBAAgB,MAAM;AAAE,aAAO,MAAM,SAAS;AAAA,IAAY;AAChE,UAAM,cAAgB,MAAM;AAAE,aAAO,MAAM,SAAS;AAAA,IAAG;AAEvD,WAAO,MAAM,SAAS;AACtB,QAAI,GAAG,aAAa,aAAa;AAEjC,UAAM,cAAc,OAAO,MAAgC;AACvD,YAAM,MAAM,EAAE,OAAO;AACrB,YAAM,MAAM,EAAE,OAAO;AAErB,UAAI,IAAI,aAAa,aAAa;AAClC,kBAAY;AAEZ,UAAI;AACA,cAAM,WAAW,EAAE,KAAK,KAAK,MAAM,WAAW,CAAoB;AAClE,aAAK,MAAM;AACX,aAAK,MAAM;AACX,aAAK,OAAO;AACZ,oBAAY,QAAQ,MAAM,KAAK,GAAG;AAClC,cAAM,QAAQ,EAAE,uBAAuB,CAAC;AAAA,MAC5C,SAAS,KAAK;AACV,gBAAQ,MAAM,uBAAuB,GAAG;AAExC,YAAI,GAAG,aAAa,aAAa;AACjC,eAAO,MAAM,SAAS;AAAA,MAC1B;AAAA,IACJ;AAEA,UAAM,gBAAgB,CAAC,MAAqB;AACxC,UAAI,EAAE,QAAQ,UAAU;AACpB,YAAI,IAAI,aAAa,aAAa;AAClC,oBAAY;AACZ,oBAAY,QAAQ;AAAA,MACxB;AAAA,IACJ;AAEA,QAAI,GAAG,SAAS,WAAW;AAC3B,aAAS,iBAAiB,WAAW,aAAa;AAElD,WAAO,MAAM;AACT,UAAI,IAAI,aAAa,aAAa;AAClC,UAAI,IAAI,SAAS,WAAW;AAC5B,eAAS,oBAAoB,WAAW,aAAa;AACrD,kBAAY;AAAA,IAChB;AAAA,EACJ,GAAG,CAAC,KAAK,UAAU,CAAC;AAEpB,SAAO;AACX;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAqD9B,eAAO,MAAM,YAAY,GAAI,kBAAkB;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,sBA4TvE,CAAA"}
|
|
@@ -19,22 +19,22 @@ var __spreadValues = (a, b) => {
|
|
|
19
19
|
};
|
|
20
20
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
21
21
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
22
|
-
import
|
|
22
|
+
import * as LR from "lucide-react";
|
|
23
|
+
import { useSession } from "next-auth/react";
|
|
24
|
+
import { useTranslations } from "next-intl";
|
|
23
25
|
import * as React from "react";
|
|
24
26
|
import { Source, Layer, Popup, Marker } from "react-map-gl/maplibre";
|
|
25
|
-
import Sensor from "../../../../../../ui/Sensors/Sensor";
|
|
26
|
-
import { ViewerNames } from "../../../../../../../types/dbTypes";
|
|
27
|
-
import { MapLayerClickPriority } from "../../../../utils/MapEventManager/MapClickManager";
|
|
28
|
-
import { extractCoordinatesFromFeature } from "../../../../utils/extractCoordinates";
|
|
29
|
-
import { useSensor, useSensors } from "../../../../../../../hooks/sensors/sensors";
|
|
30
|
-
import { useUsers } from "../../../../../../../hooks/users/users";
|
|
31
27
|
import { toast } from "sonner";
|
|
32
|
-
import {
|
|
33
|
-
import { useSession } from "next-auth/react";
|
|
34
|
-
import { createClusterLayer, createClusterCountLayer, createUnclusteredPointLayer } from "../mapLayersUtils";
|
|
28
|
+
import { useSensor, useSensors } from "../../../../../../../hooks/sensors/sensors";
|
|
35
29
|
import { useSensorTypes } from "../../../../../../../hooks/sensorTypes/sensorTypes";
|
|
36
|
-
import
|
|
30
|
+
import { useUsers } from "../../../../../../../hooks/users/users";
|
|
31
|
+
import { MapContext, MenusContext } from "../../../../../../../store";
|
|
32
|
+
import { ViewerNames } from "../../../../../../../types/dbTypes";
|
|
33
|
+
import Sensor from "../../../../../../ui/Sensors/Sensor";
|
|
37
34
|
import { UNTAGGED_TAG } from "../../../../../../ui/Sensors/SensorsSection";
|
|
35
|
+
import { extractCoordinatesFromFeature } from "../../../../utils/extractCoordinates";
|
|
36
|
+
import { MapLayerClickPriority } from "../../../../utils/MapEventManager/MapClickManager";
|
|
37
|
+
import { createClusterLayer, createClusterCountLayer, createUnclusteredPointLayer } from "../mapLayersUtils";
|
|
38
38
|
const SensorIconMarker = ({ feature, isHighlighted, onMouseEnter, onMouseLeave, sensorTypes }) => {
|
|
39
39
|
var _a, _b;
|
|
40
40
|
const coords = extractCoordinatesFromFeature(feature);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport { MapContext, MenusContext } from '../../../../../../../store'\r\nimport * as React from 'react'\r\nimport { Source, Layer, Popup, Marker } from 'react-map-gl/maplibre'\r\nimport type { MapGeoJSONFeature, MapLayerMouseEvent } from 'maplibre-gl'\r\nimport Sensor from '../../../../../../ui/Sensors/Sensor'\r\nimport { SensorType, ViewerNames, type Sensor as ISensor} from '../../../../../../../types/dbTypes'\r\n\r\nimport { MapLayerClickPriority, ClickCallback } from '../../../../utils/MapEventManager/MapClickManager'\r\nimport { extractCoordinatesFromFeature } from '../../../../utils/extractCoordinates'\r\nimport { useSensor, useSensors } from '../../../../../../../hooks/sensors/sensors'\r\nimport { useUsers } from '../../../../../../../hooks/users/users'\r\nimport { toast } from 'sonner'\r\nimport { useTranslations } from 'next-intl'\r\nimport { useSession } from 'next-auth/react'\r\nimport { createClusterLayer, createClusterCountLayer, createUnclusteredPointLayer } from '../mapLayersUtils'\r\nimport { useSensorTypes } from '../../../../../../../hooks/sensorTypes/sensorTypes'\r\nimport * as LR from 'lucide-react'\r\nimport { UNTAGGED_TAG } from '../../../../../../ui/Sensors/SensorsSection'\r\n\r\nconst SensorIconMarker = ({ feature, isHighlighted, onMouseEnter, onMouseLeave, sensorTypes }: { feature: MapGeoJSONFeature; isHighlighted?: boolean; onMouseEnter?: () => void; onMouseLeave?: () => void; sensorTypes: SensorType[] }) => {\r\n\r\n const coords = extractCoordinatesFromFeature(feature)\r\n if (!coords) return null\r\n\r\n const sensorType = sensorTypes.find(t => t.id === feature.properties?.typeId)\r\n const icon = sensorType?.icon || 'Radio'\r\n const SensorIcon = LR[icon] || LR.Radio\r\n\r\n return (\r\n <Marker key={String(feature.properties?.id ?? `${coords.lng},${coords.lat}`)} longitude={coords.lng} latitude={coords.lat} anchor=\"center\">\r\n <div\r\n style={{\r\n width: '36px',\r\n height: '36px',\r\n borderRadius: '50%',\r\n border: isHighlighted ? '3px solid #73cee2' : '2px solid white',\r\n backgroundColor: 'black',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n boxShadow: isHighlighted ? '0 0 12px rgba(115, 206, 226, 0.5)' : 'none',\r\n transition: 'all 0.2s ease-in-out',\r\n transform: isHighlighted ? 'scale(1.2)' : 'scale(1)',\r\n }}\r\n onMouseEnter={onMouseEnter}\r\n onMouseLeave={onMouseLeave}\r\n >\r\n <SensorIcon style={{ width: '20px', height: '20px', color: 'hsl(var(--primary-foreground))' }} />\r\n </div>\r\n </Marker>\r\n )\r\n}\r\n\r\nexport const SensorLayers = ({ minioBaseUrl }: { minioBaseUrl?: string }) => {\r\n const [hoveredSensorId, setHoveredSensorId] = React.useState<number | null>(null)\r\n const clusterLayer = createClusterLayer('sensors')\r\n const clusterCountLayer = createClusterCountLayer('sensors')\r\n const unclusteredPointLayer = createUnclusteredPointLayer('sensors')\r\n\r\n // global map state\r\n\r\n const t = useTranslations('SensorLayers')\r\n const tSensors = useTranslations('SensorsSection')\r\n\r\n const { state: mapState } = React.useContext(MapContext)\r\n const { map, mapClickManager } = mapState.map\r\n const { sensors } = useSensors()\r\n const { users } = useUsers()\r\n const user = useSession().data?.user\r\n\r\n const [popupInfo, setPopUpInfo] = React.useState<Partial<ISensor & { sensorType: SensorType }> | null>(null)\r\n const { deleteSensor, updateSensor } = useSensor(popupInfo?.id ?? null)\r\n const { state: menusState } = React.useContext(MenusContext)\r\n const { visibleSensorTypes, visibleSensorTags, currentSensorId } = menusState.menus\r\n const typesVisible = visibleSensorTypes?.[ViewerNames.map] || []\r\n const tagsVisible = visibleSensorTags?.[ViewerNames.map] || []\r\n\r\n const {sensorTypes} = useSensorTypes()\r\n\r\n const eligibleSensors: Array<ISensor & { authorName: string } & { sensorType: SensorType }> = sensors\r\n .filter((sensor) => sensor.viewer === ViewerNames.map)\r\n .filter((sensor) => {\r\n const matchesType = typesVisible.includes(sensor.typeId)\r\n const hasNoTags = !sensor.tags?.length\r\n const matchesTag = hasNoTags\r\n ? tagsVisible.includes(UNTAGGED_TAG)\r\n : sensor.tags?.some(tag => tagsVisible.includes(tag)) ?? false\r\n return matchesType || matchesTag\r\n })\r\n .map((sensor) => {\r\n const user = users.find(u => u.id === sensor.authorId)\r\n const sensorType = sensorTypes.find(t => t.id === sensor.typeId)\r\n return {\r\n ...sensor,\r\n authorName: user?.name ?? 'Unknown User',\r\n sensorType,\r\n }\r\n })\r\n\r\n // Close popup if the sensor was deleted\r\n React.useEffect(() => {\r\n if (popupInfo && !sensors.find((s) => s.id === popupInfo.id)) {\r\n setPopUpInfo(null)\r\n }\r\n }, [sensors, popupInfo])\r\n\r\n const geojsonSensorData = React.useMemo(() => {\r\n const convertDataToGeojson = (sensorData: typeof eligibleSensors): GeoJSON.FeatureCollection<GeoJSON.Point, { [key: string]: any }> => {\r\n const sensorFeatures: GeoJSON.Feature<GeoJSON.Point, { [key: string]: any }>[] = sensorData\r\n .map((sensor) => {\r\n const { longitude, latitude, id, name, typeId, sensorType, data, dataFormat, updateFrequency, createdAt, authorId, organizationId, visible, url, authorName } = sensor\r\n\r\n return {\r\n type: 'Feature',\r\n geometry: {\r\n type: 'Point',\r\n coordinates: [longitude, latitude],\r\n },\r\n properties: {\r\n id: Number(id),\r\n organizationId,\r\n visible,\r\n longitude,\r\n latitude,\r\n authorId: Number(authorId),\r\n authorName,\r\n name,\r\n typeId: Number(typeId),\r\n typeIcon: sensorType?.icon,\r\n data,\r\n dataFormat,\r\n updateFrequency,\r\n url,\r\n createdAt,\r\n viewer: ViewerNames.map,\r\n },\r\n }\r\n })\r\n\r\n \r\n\r\n const sensorFC: GeoJSON.FeatureCollection<GeoJSON.Point, { [key: string]: any }> = {\r\n type: 'FeatureCollection',\r\n features: sensorFeatures,\r\n }\r\n return sensorFC\r\n }\r\n return convertDataToGeojson(eligibleSensors)\r\n }, [eligibleSensors])\r\n\r\n // event listeners for sensor unclustered points\r\n React.useEffect(() => {\r\n if (!map) return\r\n const showSensorPopUp: ClickCallback = (e: MapLayerMouseEvent, features: MapGeoJSONFeature[]) => {\r\n const feature = features?.[0]\r\n\r\n if (!feature || feature.properties.point_count) return\r\n\r\n if (feature.geometry.type != 'Point') return\r\n const [longitude, latitude] = feature.geometry.coordinates\r\n const { id, authorId, name, typeId, data, dataFormat, updateFrequency, createdAt, url } = feature.properties\r\n setPopUpInfo({\r\n id: Number(id),\r\n authorId: Number(authorId),\r\n organizationId: feature.properties?.organizationId,\r\n visible: feature.properties?.visible,\r\n longitude,\r\n latitude,\r\n name,\r\n typeId: Number(typeId),\r\n data,\r\n dataFormat,\r\n updateFrequency,\r\n url,\r\n createdAt,\r\n viewer: ViewerNames.map,\r\n })\r\n }\r\n\r\n const mouseEnterChangeCursor = () => {\r\n map.getCanvas().style.cursor = 'pointer'\r\n }\r\n const mouseLeaveChangeCursor = () => {\r\n map.getCanvas().style.cursor = ''\r\n }\r\n\r\n // event listener for clicking on single point to show sensor, hover to change cursor\r\n mapClickManager.register('sensors-unclustered-points', MapLayerClickPriority.CommentLayersClickPriority, showSensorPopUp)\r\n\r\n map.on('mouseenter', 'sensors-unclustered-points', mouseEnterChangeCursor)\r\n map.on('mouseleave', 'sensors-unclustered-points', mouseLeaveChangeCursor)\r\n return () => {\r\n mapClickManager.unregister('sensors-unclustered-points')\r\n map.off('mouseenter', 'sensors-unclustered-points', mouseEnterChangeCursor)\r\n map.off('mouseleave', 'sensors-unclustered-points', mouseLeaveChangeCursor)\r\n }\r\n }, [map, mapClickManager])\r\n\r\n const handleRemoveSensor = () => {\r\n toast.success(t('sensorDeleted'))\r\n deleteSensor()\r\n setPopUpInfo(null)\r\n }\r\n\r\n // event listeners for clustered points\r\n React.useEffect(() => {\r\n if (!map) return\r\n\r\n const zoomInToDecluster = (e: MapLayerMouseEvent) => {\r\n const feature = e.features?.[0] // only proceed if this is actually a cluster\r\n if (!feature || !feature.properties.cluster_id) return\r\n\r\n const clusterId = feature.properties.cluster_id as number\r\n\r\n // Check if geometry has coordinates (not a GeometryCollection)\r\n if (!('coordinates' in feature.geometry)) return\r\n const [lng, lat] = feature.geometry.coordinates as [number, number]\r\n\r\n const source = map.getSource('sensors') as any\r\n console.log(source)\r\n console.log(clusterId)\r\n source.getClusterExpansionZoom(clusterId).then(\r\n (zoom: number) => {\r\n console.log('easing to')\r\n map.easeTo({ center: [lng, lat], zoom })\r\n },\r\n )\r\n .catch((error) => {\r\n console.error(error)\r\n })\r\n }\r\n\r\n const mouseEnterChangeCursor = () => { map.getCanvas().style.cursor = 'pointer' }\r\n const mouseLeaveChangeCursor = () => { map.getCanvas().style.cursor = '' }\r\n\r\n // event listener for clicking on single point to zoom in and decluster, hover to change cursor\r\n map.on('click', 'sensors-clusters', zoomInToDecluster)\r\n map.on('mouseenter', 'sensors-clusters', mouseEnterChangeCursor)\r\n map.on('mouseleave', 'sensors-clusters', mouseLeaveChangeCursor)\r\n return () => {\r\n map.off('click', 'sensors-clusters', zoomInToDecluster)\r\n map.off('mouseenter', 'sensors-clusters', mouseEnterChangeCursor)\r\n map.off('mouseleave', 'sensors-clusters', mouseLeaveChangeCursor)\r\n }\r\n }, [map])\r\n\r\n const renderPopup = () => {\r\n if (!popupInfo) return null\r\n const sensorType = sensorTypes.find(t => t.id === popupInfo.typeId)\r\n const liveSensor = sensors.find(s => s.id === popupInfo.id)\r\n const dataUrl = popupInfo.url\r\n ? `${minioBaseUrl ?? ''}/sensors/${popupInfo.url}`\r\n : popupInfo.data || ''\r\n \r\n return (\r\n <Popup\r\n className=\"noBorderPopup\"\r\n longitude={popupInfo.longitude}\r\n latitude={popupInfo.latitude}\r\n closeOnClick={false}\r\n onClose={() => setPopUpInfo(null)}\r\n anchor=\"bottom\"\r\n style={{ height: '50px', border: 'none', boxShadow: 'none' }}\r\n offset={[0, 10]}\r\n >\r\n <Sensor\r\n sensorName={popupInfo.name || ''}\r\n sensorType={sensorType}\r\n sensorId={popupInfo.id}\r\n tags={liveSensor?.tags ?? []}\r\n onAddTag={async (tag) => { await updateSensor({ tags: [...(liveSensor?.tags ?? []), tag] }) }}\r\n onDeleteTag={async (tag) => { await updateSensor({ tags: (liveSensor?.tags ?? []).filter(t => t !== tag) }) }}\r\n tagsTranslations={{\r\n addTag: tSensors('addTag'),\r\n removeTag: tSensors('removeTag'),\r\n cancel: tSensors('cancel'),\r\n newTagPlaceholder: tSensors('newTagPlaceholder'),\r\n }}\r\n dataUrl={dataUrl}\r\n dataFormat={popupInfo.dataFormat}\r\n updateFrequency={popupInfo.updateFrequency}\r\n buildingId={popupInfo.buildingId}\r\n createdAt={popupInfo.createdAt}\r\n onRemove={user.id === String(popupInfo.authorId) ? handleRemoveSensor : null}\r\n onClose={() => setPopUpInfo(null)}\r\n size=\"sm\"\r\n />\r\n {/* inline styles to override MapLibre's Pop up CSS */}\r\n <style>\r\n {`\r\n .noBorderPopup .maplibregl-popup-content {\r\n border: none !important;\r\n box-shadow: none !important;\r\n background: transparent !important;\r\n }\r\n .noBorderPopup .maplibregl-popup-tip {\r\n display: none !important;\r\n }\r\n `}\r\n </style>\r\n </Popup>\r\n )\r\n }\r\n\r\n // Track unclustered sensors to display icons\r\n const [unclusteredFeatures, setUnclusteredFeatures] = React.useState<MapGeoJSONFeature[]>([])\r\n\r\n React.useEffect(() => {\r\n if (!map) return\r\n\r\n const updateUnclusteredFeatures = () => {\r\n const allFeatures = map.querySourceFeatures('sensors')\r\n const unclusteredOnly = allFeatures.filter(\r\n (f) => !f.properties?.cluster && !f.properties?.point_count\r\n )\r\n // Deduplicate by id\r\n const uniqueFeatures = new Map()\r\n unclusteredOnly.forEach((f) => uniqueFeatures.set(f.properties.id, f))\r\n setUnclusteredFeatures(Array.from(uniqueFeatures.values()))\r\n }\r\n\r\n const onSourceData = (e: any) => {\r\n if (e?.sourceId === 'sensors') updateUnclusteredFeatures()\r\n }\r\n\r\n map.on('sourcedata', onSourceData)\r\n map.on('moveend', updateUnclusteredFeatures)\r\n map.on('zoomend', updateUnclusteredFeatures)\r\n\r\n updateUnclusteredFeatures()\r\n\r\n return () => {\r\n map.off('sourcedata', onSourceData)\r\n map.off('moveend', updateUnclusteredFeatures)\r\n map.off('zoomend', updateUnclusteredFeatures)\r\n }\r\n }, [map])\r\n\r\n return (\r\n <>\r\n {(typesVisible.length > 0 || tagsVisible.length > 0) &&\r\n <Source\r\n id=\"sensors\"\r\n type=\"geojson\"\r\n data={geojsonSensorData}\r\n cluster={true}\r\n clusterMaxZoom={14}\r\n clusterRadius={40}\r\n >\r\n <Layer {...clusterLayer} />\r\n <Layer {...clusterCountLayer} />\r\n <Layer {...unclusteredPointLayer} />\r\n\r\n {renderPopup()}\r\n {unclusteredFeatures\r\n .filter((feature) => feature.properties?.id !== popupInfo?.id)\r\n .map((feature) => (\r\n <SensorIconMarker\r\n key={String(feature.properties?.id)}\r\n feature={feature}\r\n isHighlighted={currentSensorId === feature.properties?.id || hoveredSensorId === feature.properties?.id}\r\n onMouseEnter={() => setHoveredSensorId(feature.properties?.id)}\r\n onMouseLeave={() => setHoveredSensorId(null)}\r\n sensorTypes={sensorTypes}\r\n />\r\n ))}\r\n </Source>}\r\n </>\r\n )\r\n}\r\n"],"mappings":"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","names":["_a","_b","user","t"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as LR from 'lucide-react'\r\nimport { useSession } from 'next-auth/react'\r\nimport { useTranslations } from 'next-intl'\r\nimport * as React from 'react'\r\nimport { Source, Layer, Popup, Marker } from 'react-map-gl/maplibre'\r\nimport { toast } from 'sonner'\r\n\r\nimport { useSensor, useSensors } from '../../../../../../../hooks/sensors/sensors'\r\nimport { useSensorTypes } from '../../../../../../../hooks/sensorTypes/sensorTypes'\r\nimport { useUsers } from '../../../../../../../hooks/users/users'\r\nimport { MapContext, MenusContext } from '../../../../../../../store'\r\nimport { ViewerNames, type Sensor as ISensor} from '../../../../../../../types/dbTypes'\r\nimport Sensor from '../../../../../../ui/Sensors/Sensor'\r\nimport { UNTAGGED_TAG } from '../../../../../../ui/Sensors/SensorsSection'\r\nimport { extractCoordinatesFromFeature } from '../../../../utils/extractCoordinates'\r\nimport { MapLayerClickPriority } from '../../../../utils/MapEventManager/MapClickManager'\r\nimport { createClusterLayer, createClusterCountLayer, createUnclusteredPointLayer } from '../mapLayersUtils'\r\n\r\nimport type { SensorType} from '../../../../../../../types/dbTypes';\r\nimport type { ClickCallback } from '../../../../utils/MapEventManager/MapClickManager';\r\nimport type { MapGeoJSONFeature, MapLayerMouseEvent } from 'maplibre-gl'\r\n\r\nconst SensorIconMarker = ({ feature, isHighlighted, onMouseEnter, onMouseLeave, sensorTypes }: { feature: MapGeoJSONFeature; isHighlighted?: boolean; onMouseEnter?: () => void; onMouseLeave?: () => void; sensorTypes: SensorType[] }) => {\r\n\r\n const coords = extractCoordinatesFromFeature(feature)\r\n if (!coords) return null\r\n\r\n const sensorType = sensorTypes.find(t => t.id === feature.properties?.typeId)\r\n const icon = sensorType?.icon || 'Radio'\r\n const SensorIcon = LR[icon] || LR.Radio\r\n\r\n return (\r\n <Marker key={String(feature.properties?.id ?? `${coords.lng},${coords.lat}`)} longitude={coords.lng} latitude={coords.lat} anchor=\"center\">\r\n <div\r\n style={{\r\n width: '36px',\r\n height: '36px',\r\n borderRadius: '50%',\r\n border: isHighlighted ? '3px solid #73cee2' : '2px solid white',\r\n backgroundColor: 'black',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n boxShadow: isHighlighted ? '0 0 12px rgba(115, 206, 226, 0.5)' : 'none',\r\n transition: 'all 0.2s ease-in-out',\r\n transform: isHighlighted ? 'scale(1.2)' : 'scale(1)',\r\n }}\r\n onMouseEnter={onMouseEnter}\r\n onMouseLeave={onMouseLeave}\r\n >\r\n <SensorIcon style={{ width: '20px', height: '20px', color: 'hsl(var(--primary-foreground))' }} />\r\n </div>\r\n </Marker>\r\n )\r\n}\r\n\r\nexport const SensorLayers = ({ minioBaseUrl }: { minioBaseUrl?: string }) => {\r\n const [hoveredSensorId, setHoveredSensorId] = React.useState<number | null>(null)\r\n const clusterLayer = createClusterLayer('sensors')\r\n const clusterCountLayer = createClusterCountLayer('sensors')\r\n const unclusteredPointLayer = createUnclusteredPointLayer('sensors')\r\n\r\n // global map state\r\n\r\n const t = useTranslations('SensorLayers')\r\n const tSensors = useTranslations('SensorsSection')\r\n\r\n const { state: mapState } = React.useContext(MapContext)\r\n const { map, mapClickManager } = mapState.map\r\n const { sensors } = useSensors()\r\n const { users } = useUsers()\r\n const user = useSession().data?.user\r\n\r\n const [popupInfo, setPopUpInfo] = React.useState<Partial<ISensor & { sensorType: SensorType }> | null>(null)\r\n const { deleteSensor, updateSensor } = useSensor(popupInfo?.id ?? null)\r\n const { state: menusState } = React.useContext(MenusContext)\r\n const { visibleSensorTypes, visibleSensorTags, currentSensorId } = menusState.menus\r\n const typesVisible = visibleSensorTypes?.[ViewerNames.map] || []\r\n const tagsVisible = visibleSensorTags?.[ViewerNames.map] || []\r\n\r\n const {sensorTypes} = useSensorTypes()\r\n\r\n const eligibleSensors: Array<ISensor & { authorName: string } & { sensorType: SensorType }> = sensors\r\n .filter((sensor) => sensor.viewer === ViewerNames.map)\r\n .filter((sensor) => {\r\n const matchesType = typesVisible.includes(sensor.typeId)\r\n const hasNoTags = !sensor.tags?.length\r\n const matchesTag = hasNoTags\r\n ? tagsVisible.includes(UNTAGGED_TAG)\r\n : sensor.tags?.some(tag => tagsVisible.includes(tag)) ?? false\r\n return matchesType || matchesTag\r\n })\r\n .map((sensor) => {\r\n const user = users.find(u => u.id === sensor.authorId)\r\n const sensorType = sensorTypes.find(t => t.id === sensor.typeId)\r\n return {\r\n ...sensor,\r\n authorName: user?.name ?? 'Unknown User',\r\n sensorType,\r\n }\r\n })\r\n\r\n // Close popup if the sensor was deleted\r\n React.useEffect(() => {\r\n if (popupInfo && !sensors.find((s) => s.id === popupInfo.id)) {\r\n setPopUpInfo(null)\r\n }\r\n }, [sensors, popupInfo])\r\n\r\n const geojsonSensorData = React.useMemo(() => {\r\n const convertDataToGeojson = (sensorData: typeof eligibleSensors): GeoJSON.FeatureCollection<GeoJSON.Point, { [key: string]: any }> => {\r\n const sensorFeatures: GeoJSON.Feature<GeoJSON.Point, { [key: string]: any }>[] = sensorData\r\n .map((sensor) => {\r\n const { longitude, latitude, id, name, typeId, sensorType, data, dataFormat, updateFrequency, createdAt, authorId, organizationId, visible, url, authorName } = sensor\r\n\r\n return {\r\n type: 'Feature',\r\n geometry: {\r\n type: 'Point',\r\n coordinates: [longitude, latitude],\r\n },\r\n properties: {\r\n id: Number(id),\r\n organizationId,\r\n visible,\r\n longitude,\r\n latitude,\r\n authorId: Number(authorId),\r\n authorName,\r\n name,\r\n typeId: Number(typeId),\r\n typeIcon: sensorType?.icon,\r\n data,\r\n dataFormat,\r\n updateFrequency,\r\n url,\r\n createdAt,\r\n viewer: ViewerNames.map,\r\n },\r\n }\r\n })\r\n\r\n\r\n\r\n const sensorFC: GeoJSON.FeatureCollection<GeoJSON.Point, { [key: string]: any }> = {\r\n type: 'FeatureCollection',\r\n features: sensorFeatures,\r\n }\r\n return sensorFC\r\n }\r\n return convertDataToGeojson(eligibleSensors)\r\n }, [eligibleSensors])\r\n\r\n // event listeners for sensor unclustered points\r\n React.useEffect(() => {\r\n if (!map) return\r\n const showSensorPopUp: ClickCallback = (e: MapLayerMouseEvent, features: MapGeoJSONFeature[]) => {\r\n const feature = features?.[0]\r\n\r\n if (!feature || feature.properties.point_count) return\r\n\r\n if (feature.geometry.type != 'Point') return\r\n const [longitude, latitude] = feature.geometry.coordinates\r\n const { id, authorId, name, typeId, data, dataFormat, updateFrequency, createdAt, url } = feature.properties\r\n setPopUpInfo({\r\n id: Number(id),\r\n authorId: Number(authorId),\r\n organizationId: feature.properties?.organizationId,\r\n visible: feature.properties?.visible,\r\n longitude,\r\n latitude,\r\n name,\r\n typeId: Number(typeId),\r\n data,\r\n dataFormat,\r\n updateFrequency,\r\n url,\r\n createdAt,\r\n viewer: ViewerNames.map,\r\n })\r\n }\r\n\r\n const mouseEnterChangeCursor = () => {\r\n map.getCanvas().style.cursor = 'pointer'\r\n }\r\n const mouseLeaveChangeCursor = () => {\r\n map.getCanvas().style.cursor = ''\r\n }\r\n\r\n // event listener for clicking on single point to show sensor, hover to change cursor\r\n mapClickManager.register('sensors-unclustered-points', MapLayerClickPriority.CommentLayersClickPriority, showSensorPopUp)\r\n\r\n map.on('mouseenter', 'sensors-unclustered-points', mouseEnterChangeCursor)\r\n map.on('mouseleave', 'sensors-unclustered-points', mouseLeaveChangeCursor)\r\n return () => {\r\n mapClickManager.unregister('sensors-unclustered-points')\r\n map.off('mouseenter', 'sensors-unclustered-points', mouseEnterChangeCursor)\r\n map.off('mouseleave', 'sensors-unclustered-points', mouseLeaveChangeCursor)\r\n }\r\n }, [map, mapClickManager])\r\n\r\n const handleRemoveSensor = () => {\r\n toast.success(t('sensorDeleted'))\r\n deleteSensor()\r\n setPopUpInfo(null)\r\n }\r\n\r\n // event listeners for clustered points\r\n React.useEffect(() => {\r\n if (!map) return\r\n\r\n const zoomInToDecluster = (e: MapLayerMouseEvent) => {\r\n const feature = e.features?.[0] // only proceed if this is actually a cluster\r\n if (!feature || !feature.properties.cluster_id) return\r\n\r\n const clusterId = feature.properties.cluster_id as number\r\n\r\n // Check if geometry has coordinates (not a GeometryCollection)\r\n if (!('coordinates' in feature.geometry)) return\r\n const [lng, lat] = feature.geometry.coordinates as [number, number]\r\n\r\n const source = map.getSource('sensors') as any\r\n console.log(source)\r\n console.log(clusterId)\r\n source.getClusterExpansionZoom(clusterId).then(\r\n (zoom: number) => {\r\n console.log('easing to')\r\n map.easeTo({ center: [lng, lat], zoom })\r\n },\r\n )\r\n .catch((error) => {\r\n console.error(error)\r\n })\r\n }\r\n\r\n const mouseEnterChangeCursor = () => { map.getCanvas().style.cursor = 'pointer' }\r\n const mouseLeaveChangeCursor = () => { map.getCanvas().style.cursor = '' }\r\n\r\n // event listener for clicking on single point to zoom in and decluster, hover to change cursor\r\n map.on('click', 'sensors-clusters', zoomInToDecluster)\r\n map.on('mouseenter', 'sensors-clusters', mouseEnterChangeCursor)\r\n map.on('mouseleave', 'sensors-clusters', mouseLeaveChangeCursor)\r\n return () => {\r\n map.off('click', 'sensors-clusters', zoomInToDecluster)\r\n map.off('mouseenter', 'sensors-clusters', mouseEnterChangeCursor)\r\n map.off('mouseleave', 'sensors-clusters', mouseLeaveChangeCursor)\r\n }\r\n }, [map])\r\n\r\n const renderPopup = () => {\r\n if (!popupInfo) return null\r\n const sensorType = sensorTypes.find(t => t.id === popupInfo.typeId)\r\n const liveSensor = sensors.find(s => s.id === popupInfo.id)\r\n const dataUrl = popupInfo.url\r\n ? `${minioBaseUrl ?? ''}/sensors/${popupInfo.url}`\r\n : popupInfo.data || ''\r\n\r\n return (\r\n <Popup\r\n className=\"noBorderPopup\"\r\n longitude={popupInfo.longitude}\r\n latitude={popupInfo.latitude}\r\n closeOnClick={false}\r\n onClose={() => setPopUpInfo(null)}\r\n anchor=\"bottom\"\r\n style={{ height: '50px', border: 'none', boxShadow: 'none' }}\r\n offset={[0, 10]}\r\n >\r\n <Sensor\r\n sensorName={popupInfo.name || ''}\r\n sensorType={sensorType}\r\n sensorId={popupInfo.id}\r\n tags={liveSensor?.tags ?? []}\r\n onAddTag={async (tag) => { await updateSensor({ tags: [...(liveSensor?.tags ?? []), tag] }) }}\r\n onDeleteTag={async (tag) => { await updateSensor({ tags: (liveSensor?.tags ?? []).filter(t => t !== tag) }) }}\r\n tagsTranslations={{\r\n addTag: tSensors('addTag'),\r\n removeTag: tSensors('removeTag'),\r\n cancel: tSensors('cancel'),\r\n newTagPlaceholder: tSensors('newTagPlaceholder'),\r\n }}\r\n dataUrl={dataUrl}\r\n dataFormat={popupInfo.dataFormat}\r\n updateFrequency={popupInfo.updateFrequency}\r\n buildingId={popupInfo.buildingId}\r\n createdAt={popupInfo.createdAt}\r\n onRemove={user.id === String(popupInfo.authorId) ? handleRemoveSensor : null}\r\n onClose={() => setPopUpInfo(null)}\r\n size=\"sm\"\r\n />\r\n {/* inline styles to override MapLibre's Pop up CSS */}\r\n <style>\r\n {`\r\n .noBorderPopup .maplibregl-popup-content {\r\n border: none !important;\r\n box-shadow: none !important;\r\n background: transparent !important;\r\n }\r\n .noBorderPopup .maplibregl-popup-tip {\r\n display: none !important;\r\n }\r\n `}\r\n </style>\r\n </Popup>\r\n )\r\n }\r\n\r\n // Track unclustered sensors to display icons\r\n const [unclusteredFeatures, setUnclusteredFeatures] = React.useState<MapGeoJSONFeature[]>([])\r\n\r\n React.useEffect(() => {\r\n if (!map) return\r\n\r\n const updateUnclusteredFeatures = () => {\r\n const allFeatures = map.querySourceFeatures('sensors')\r\n const unclusteredOnly = allFeatures.filter(\r\n (f) => !f.properties?.cluster && !f.properties?.point_count\r\n )\r\n // Deduplicate by id\r\n const uniqueFeatures = new Map()\r\n unclusteredOnly.forEach((f) => uniqueFeatures.set(f.properties.id, f))\r\n setUnclusteredFeatures(Array.from(uniqueFeatures.values()))\r\n }\r\n\r\n const onSourceData = (e: any) => {\r\n if (e?.sourceId === 'sensors') updateUnclusteredFeatures()\r\n }\r\n\r\n map.on('sourcedata', onSourceData)\r\n map.on('moveend', updateUnclusteredFeatures)\r\n map.on('zoomend', updateUnclusteredFeatures)\r\n\r\n updateUnclusteredFeatures()\r\n\r\n return () => {\r\n map.off('sourcedata', onSourceData)\r\n map.off('moveend', updateUnclusteredFeatures)\r\n map.off('zoomend', updateUnclusteredFeatures)\r\n }\r\n }, [map])\r\n\r\n return (\r\n <>\r\n {(typesVisible.length > 0 || tagsVisible.length > 0) &&\r\n <Source\r\n id=\"sensors\"\r\n type=\"geojson\"\r\n data={geojsonSensorData}\r\n cluster={true}\r\n clusterMaxZoom={14}\r\n clusterRadius={40}\r\n >\r\n <Layer {...clusterLayer} />\r\n <Layer {...clusterCountLayer} />\r\n <Layer {...unclusteredPointLayer} />\r\n\r\n {renderPopup()}\r\n {unclusteredFeatures\r\n .filter((feature) => feature.properties?.id !== popupInfo?.id)\r\n .map((feature) => (\r\n <SensorIconMarker\r\n key={String(feature.properties?.id)}\r\n feature={feature}\r\n isHighlighted={currentSensorId === feature.properties?.id || hoveredSensorId === feature.properties?.id}\r\n onMouseEnter={() => setHoveredSensorId(feature.properties?.id)}\r\n onMouseLeave={() => setHoveredSensorId(null)}\r\n sensorTypes={sensorTypes}\r\n />\r\n ))}\r\n </Source>}\r\n </>\r\n )\r\n}\r\n"],"mappings":"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","names":["_a","_b","user","t"]}
|
package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SiteContextMenu.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SiteContextMenu.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAA;AAE5E,MAAM,WAAW,oBAAoB;IACnC,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,IAAI,EAAE,SAAS,CAAA;IACf,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACrC;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAqI1D,CAAA"}
|
|
@@ -1,10 +1,10 @@
|
|
|
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 { useTranslations } from "next-intl";
|
|
6
|
-
import
|
|
5
|
+
import * as React from "react";
|
|
7
6
|
import ConfirmDialog from "../../../../../../ConfirmDialog";
|
|
7
|
+
import { Input } from "../../../../../../ui/Input";
|
|
8
8
|
const SiteContextMenu = ({
|
|
9
9
|
x,
|
|
10
10
|
y,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.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
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as LR from 'lucide-react'\r\nimport { useTranslations } from 'next-intl'\r\nimport * as React from 'react'\r\n\r\nimport ConfirmDialog from '../../../../../../ConfirmDialog'\r\nimport { Button } from '../../../../../../ui/Button'\r\nimport { Input } from '../../../../../../ui/Input'\r\n\r\nimport type { ShownSite } from '../../../../../../../store/MapSites/reducer'\r\n\r\nexport interface SiteContextMenuProps {\r\n x: number\r\n y: number\r\n site: ShownSite\r\n isEditing: boolean\r\n canUpdate: boolean\r\n canDelete: boolean\r\n canRead: boolean\r\n onClose: () => void\r\n onRename: (name: string) => void\r\n onToggleEdit: () => void\r\n onHide: () => void\r\n onInfo: () => void\r\n onDelete: () => void | Promise<void>\r\n}\r\n\r\nexport const SiteContextMenu: React.FC<SiteContextMenuProps> = ({\r\n x, y, site, isEditing, canUpdate, canDelete, canRead,\r\n onClose, onRename, onToggleEdit, onHide, onInfo, onDelete,\r\n}) => {\r\n const t = useTranslations('SiteContextMenu')\r\n // Translate with an English fallback so the menu is usable before the host\r\n // app's message catalog is updated (mirrors SiteAdder's approach).\r\n const tf = React.useCallback(\r\n (key: string, fallback: string) => (t.has(key) ? t(key) : fallback),\r\n [t],\r\n )\r\n\r\n const ref = React.useRef<HTMLDivElement>(null)\r\n const [name, setName] = React.useState(site.name)\r\n const [isDeleteOpen, setIsDeleteOpen] = React.useState(false)\r\n const [isDeleting, setIsDeleting] = React.useState(false)\r\n\r\n React.useEffect(() => { setName(site.name) }, [site.id, site.name])\r\n\r\n // Close on outside click / Escape, unless the delete confirmation is open or\r\n // the user is editing the polygon (dragging a vertex is an \"outside\" click).\r\n React.useEffect(() => {\r\n const onPointerDown = (e: MouseEvent) => {\r\n if (isDeleteOpen || isEditing) return\r\n if (ref.current && !ref.current.contains(e.target as Node)) onClose()\r\n }\r\n const onKey = (e: KeyboardEvent) => {\r\n if (isDeleteOpen || isEditing) return\r\n if (e.key === 'Escape') onClose()\r\n }\r\n document.addEventListener('mousedown', onPointerDown)\r\n document.addEventListener('keydown', onKey)\r\n return () => {\r\n document.removeEventListener('mousedown', onPointerDown)\r\n document.removeEventListener('keydown', onKey)\r\n }\r\n }, [isDeleteOpen, isEditing, onClose])\r\n\r\n const commitName = () => {\r\n const trimmed = name.trim()\r\n if (trimmed && trimmed !== site.name) onRename(trimmed)\r\n }\r\n\r\n const handleConfirmDelete = async (e: React.MouseEvent) => {\r\n e.preventDefault()\r\n setIsDeleting(true)\r\n try {\r\n await onDelete()\r\n }\r\n finally {\r\n setIsDeleting(false)\r\n setIsDeleteOpen(false)\r\n }\r\n }\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className=\"fixed z-50 w-56 rounded-md border bg-popover text-popover-foreground shadow-md p-1\"\r\n style={{ left: x, top: y }}\r\n onClick={e => e.stopPropagation()}\r\n >\r\n {/* Editable site name */}\r\n <div className=\"px-2 pt-1.5 pb-2\">\r\n <Input\r\n value={name}\r\n disabled={!canUpdate}\r\n onChange={e => setName(e.target.value)}\r\n onBlur={commitName}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') { e.preventDefault(); commitName(); (e.target as HTMLInputElement).blur() }\r\n }}\r\n placeholder={tf('namePlaceholder', 'Site name')}\r\n className=\"h-8 text-sm\"\r\n />\r\n </div>\r\n\r\n <div className=\"h-px bg-border my-1\" />\r\n\r\n <button\r\n type=\"button\"\r\n onClick={onToggleEdit}\r\n disabled={!canUpdate}\r\n className=\"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-sm hover:bg-accent disabled:opacity-50 disabled:pointer-events-none\"\r\n >\r\n {isEditing\r\n ? <LR.Check className=\"h-4 w-4\" />\r\n : <LR.PencilRuler className=\"h-4 w-4\" />}\r\n {isEditing ? tf('doneEditing', 'Done editing shape') : tf('editShape', 'Edit shape')}\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n onClick={onHide}\r\n disabled={!canRead}\r\n className=\"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-sm hover:bg-accent disabled:opacity-50 disabled:pointer-events-none\"\r\n >\r\n <LR.EyeOff className=\"h-4 w-4\" />\r\n {tf('hide', 'Hide')}\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n onClick={onInfo}\r\n disabled={!canRead}\r\n className=\"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-sm hover:bg-accent disabled:opacity-50 disabled:pointer-events-none\"\r\n >\r\n <LR.Info className=\"h-4 w-4\" />\r\n {tf('info', 'Site details')}\r\n </button>\r\n\r\n <div className=\"h-px bg-border my-1\" />\r\n\r\n <button\r\n type=\"button\"\r\n onClick={() => setIsDeleteOpen(true)}\r\n disabled={!canDelete}\r\n className=\"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-destructive hover:bg-accent disabled:opacity-50 disabled:pointer-events-none\"\r\n >\r\n <LR.Trash2 className=\"h-4 w-4\" />\r\n {tf('delete', 'Delete site')}\r\n </button>\r\n\r\n <ConfirmDialog\r\n isOpen={isDeleteOpen}\r\n isDeleting={isDeleting}\r\n onOpenChange={setIsDeleteOpen}\r\n handleConfirm={handleConfirmDelete}\r\n itemName={site.name}\r\n dataType={tf('siteDataType', 'site')}\r\n />\r\n </div>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SiteLayer.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"SiteLayer.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAgE9B,eAAO,MAAM,SAAS,yBA+QrB,CAAA"}
|
|
@@ -19,18 +19,18 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
|
19
19
|
import * as React from "react";
|
|
20
20
|
import { Source, Layer, Marker } from "react-map-gl/maplibre";
|
|
21
21
|
import { toast } from "sonner";
|
|
22
|
+
import { useDeleteFile } from "../../../../../../../hooks/files/files";
|
|
23
|
+
import { useSite, useDeleteSite } from "../../../../../../../hooks/sites/sites";
|
|
22
24
|
import {
|
|
23
25
|
MapContext,
|
|
24
26
|
usePermissions,
|
|
25
27
|
useMenusContext,
|
|
26
28
|
useMapSitesContext
|
|
27
29
|
} from "../../../../../../../store";
|
|
28
|
-
import { MapLayerClickPriority } from "../../../../utils/MapEventManager/MapClickManager";
|
|
29
30
|
import { ViewerNames } from "../../../../../../../types/dbTypes";
|
|
30
|
-
import {
|
|
31
|
-
import { useDeleteFile } from "../../../../../../../hooks/files/files";
|
|
32
|
-
import { polygonCentroid, uploadGeoJsonToAsset, pointToSegmentDistance } from "./siteGeometry";
|
|
31
|
+
import { MapLayerClickPriority } from "../../../../utils/MapEventManager/MapClickManager";
|
|
33
32
|
import { SiteContextMenu } from "./SiteContextMenu";
|
|
33
|
+
import { polygonCentroid, uploadGeoJsonToAsset, pointToSegmentDistance } from "./siteGeometry";
|
|
34
34
|
const SITE_FILL_ID = "site-fill";
|
|
35
35
|
const SITE_OUTLINE_ID = "site-outline";
|
|
36
36
|
const SITE_LABEL_ID = "site-label";
|