@collabdt/core 0.0.51 → 0.0.53
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/NOTICE +1021 -0
- package/README.md +32 -4
- package/dist/core/components/AppSidebarContent.d.ts.map +1 -1
- package/dist/core/components/AppSidebarContent.js.map +1 -1
- package/dist/core/components/ConfirmDialog.d.ts.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.map +1 -1
- package/dist/core/components/Logo.d.ts.map +1 -1
- package/dist/core/components/Logo.js.map +1 -1
- package/dist/core/components/Toolbar.d.ts.map +1 -1
- package/dist/core/components/Toolbar.js.map +1 -1
- package/dist/core/components/ToolbarBody.d.ts.map +1 -1
- package/dist/core/components/ToolbarBody.js.map +1 -1
- package/dist/core/components/ToolbarSubmenu.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/core/components/authentication/AuthPage.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/core/components/authentication/PasswordError.d.ts.map +1 -1
- package/dist/core/components/authentication/PasswordError.js.map +1 -1
- package/dist/core/components/authentication/Signin.d.ts.map +1 -1
- package/dist/core/components/authentication/Signin.js.map +1 -1
- package/dist/core/components/authentication/SigninEmail.d.ts.map +1 -1
- package/dist/core/components/authentication/SigninEmail.js.map +1 -1
- package/dist/core/components/authentication/Signup.d.ts.map +1 -1
- package/dist/core/components/authentication/Signup.js.map +1 -1
- package/dist/core/components/authentication/VerifyEmail.d.ts.map +1 -1
- package/dist/core/components/authentication/VerifyEmail.js.map +1 -1
- package/dist/core/components/authentication/index.d.ts.map +1 -1
- package/dist/core/components/authentication/index.js.map +1 -1
- package/dist/core/components/index.d.ts.map +1 -1
- package/dist/core/components/index.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.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.map +1 -1
- package/dist/core/components/organizationConfig/index.d.ts.map +1 -1
- package/dist/core/components/organizationConfig/index.js.map +1 -1
- package/dist/core/components/organizationConfig/src/organizationConfigContent.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/core/components/settings/src/AccountSettingsPanel.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/core/components/settings/src/OrganizationSettingsPanel.d.ts.map +1 -1
- package/dist/core/components/settings/src/OrganizationSettingsPanel.js.map +1 -1
- package/dist/core/components/settings/src/OrganizationSkeleton.d.ts.map +1 -1
- package/dist/core/components/settings/src/OrganizationSkeleton.js.map +1 -1
- package/dist/core/components/settings/src/SettingsContent.d.ts.map +1 -1
- package/dist/core/components/settings/src/SettingsContent.js.map +1 -1
- package/dist/core/components/settings/src/SettingsHeader.d.ts.map +1 -1
- package/dist/core/components/settings/src/SettingsHeader.js.map +1 -1
- package/dist/core/components/settings/src/SettingsSidebar.d.ts.map +1 -1
- package/dist/core/components/settings/src/SettingsSidebar.js.map +1 -1
- package/dist/core/components/settings/src/SettingsSkeleton.d.ts.map +1 -1
- package/dist/core/components/settings/src/SettingsSkeleton.js.map +1 -1
- package/dist/core/components/settings/src/UsersSettingsPanel.d.ts.map +1 -1
- package/dist/core/components/settings/src/UsersSettingsPanel.js.map +1 -1
- package/dist/core/components/settings/src/types.d.ts.map +1 -1
- package/dist/core/components/ui/Accordion.d.ts.map +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.map +1 -1
- package/dist/core/components/ui/AlertDialog.d.ts.map +1 -1
- package/dist/core/components/ui/AlertDialog.js.map +1 -1
- package/dist/core/components/ui/AnimatedBackground.d.ts.map +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.map +1 -1
- package/dist/core/components/ui/Avatar.d.ts.map +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.map +1 -1
- package/dist/core/components/ui/Button.d.ts.map +1 -1
- package/dist/core/components/ui/Button.js.map +1 -1
- package/dist/core/components/ui/Calendar.d.ts.map +1 -1
- package/dist/core/components/ui/Calendar.js.map +1 -1
- package/dist/core/components/ui/Card.d.ts.map +1 -1
- package/dist/core/components/ui/Card.js.map +1 -1
- package/dist/core/components/ui/Checkbox.d.ts.map +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.map +1 -1
- package/dist/core/components/ui/ColorCircle.d.ts.map +1 -1
- package/dist/core/components/ui/ColorCircle.js.map +1 -1
- package/dist/core/components/ui/Command.d.ts.map +1 -1
- package/dist/core/components/ui/Command.js.map +1 -1
- package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/core/components/ui/Comments/CommentInput.d.ts.map +1 -1
- 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.map +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.map +1 -1
- package/dist/core/components/ui/DataTable.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/core/components/ui/DescriptionList.d.ts.map +1 -1
- package/dist/core/components/ui/DescriptionList.js.map +1 -1
- package/dist/core/components/ui/Dialog.d.ts.map +1 -1
- package/dist/core/components/ui/Dialog.js.map +1 -1
- package/dist/core/components/ui/DropdownMenu.d.ts.map +1 -1
- package/dist/core/components/ui/DropdownMenu.js.map +1 -1
- package/dist/core/components/ui/ExportData.d.ts.map +1 -1
- package/dist/core/components/ui/ExportData.js.map +1 -1
- package/dist/core/components/ui/FilesManager/index.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/index.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.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.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.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.map +1 -1
- package/dist/core/components/ui/FilesManager/src/downloadUtils.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useCommonFileUpload.d.ts.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.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileActions.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileDeleteHandler.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileDeleteHandler.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.d.ts.map +1 -1
- 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/Footer.d.ts.map +1 -1
- package/dist/core/components/ui/Footer.js.map +1 -1
- package/dist/core/components/ui/GenericTool.d.ts.map +1 -1
- package/dist/core/components/ui/GenericTool.js.map +1 -1
- package/dist/core/components/ui/Icons/BcfIcon.d.ts.map +1 -1
- package/dist/core/components/ui/Icons/BcfIcon.js.map +1 -1
- package/dist/core/components/ui/Icons/CdtIcon.d.ts.map +1 -1
- package/dist/core/components/ui/Icons/CdtIcon.js.map +1 -1
- package/dist/core/components/ui/Icons/FloorPlanIcon.d.ts.map +1 -1
- package/dist/core/components/ui/Icons/FloorPlanIcon.js.map +1 -1
- package/dist/core/components/ui/Icons/GoogleIcon.d.ts.map +1 -1
- package/dist/core/components/ui/Icons/GoogleIcon.js.map +1 -1
- package/dist/core/components/ui/Icons/IdsIcon.d.ts.map +1 -1
- package/dist/core/components/ui/Icons/IdsIcon.js.map +1 -1
- package/dist/core/components/ui/Icons/IfcIcon.d.ts.map +1 -1
- package/dist/core/components/ui/Icons/IfcIcon.js.map +1 -1
- package/dist/core/components/ui/Icons/index.d.ts.map +1 -1
- package/dist/core/components/ui/Icons/index.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.map +1 -1
- package/dist/core/components/ui/InfoSidebar/index.d.ts.map +1 -1
- package/dist/core/components/ui/InfoSidebar/index.js.map +1 -1
- package/dist/core/components/ui/Input.d.ts.map +1 -1
- package/dist/core/components/ui/Input.js.map +1 -1
- package/dist/core/components/ui/Label.d.ts.map +1 -1
- package/dist/core/components/ui/Label.js.map +1 -1
- package/dist/core/components/ui/LanguageToggle.d.ts.map +1 -1
- package/dist/core/components/ui/LanguageToggle.js.map +1 -1
- package/dist/core/components/ui/LoadingSpinner.d.ts.map +1 -1
- package/dist/core/components/ui/LoadingSpinner.js.map +1 -1
- package/dist/core/components/ui/Menubar.d.ts.map +1 -1
- package/dist/core/components/ui/Menubar.js.map +1 -1
- package/dist/core/components/ui/NavUser.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/core/components/ui/Popover.d.ts.map +1 -1
- package/dist/core/components/ui/Popover.js.map +1 -1
- package/dist/core/components/ui/Progress.d.ts.map +1 -1
- package/dist/core/components/ui/Progress.js.map +1 -1
- package/dist/core/components/ui/ScrollArea.d.ts.map +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.map +1 -1
- package/dist/core/components/ui/Select.d.ts.map +1 -1
- package/dist/core/components/ui/Select.js.map +1 -1
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js.map +1 -1
- package/dist/core/components/ui/Sensors/Sensor.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/Sensor.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorChart.d.ts.map +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.map +1 -1
- package/dist/core/components/ui/Sensors/SensorTagsSection.d.ts.map +1 -1
- 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.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.map +1 -1
- package/dist/core/components/ui/Sensors/sensorUtils.js.map +1 -1
- package/dist/core/components/ui/Separator.d.ts.map +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.map +1 -1
- package/dist/core/components/ui/ShareFeature/QRCodeWithLink.d.ts.map +1 -1
- package/dist/core/components/ui/ShareFeature/QRCodeWithLink.js.map +1 -1
- package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.d.ts.map +1 -1
- package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.js.map +1 -1
- package/dist/core/components/ui/ShareFeature/index.d.ts.map +1 -1
- package/dist/core/components/ui/ShareFeature/index.js.map +1 -1
- package/dist/core/components/ui/Sheet.d.ts.map +1 -1
- package/dist/core/components/ui/Sheet.js.map +1 -1
- package/dist/core/components/ui/Sidebar.d.ts.map +1 -1
- package/dist/core/components/ui/Sidebar.js.map +1 -1
- package/dist/core/components/ui/Skeleton.d.ts.map +1 -1
- package/dist/core/components/ui/Skeleton.js.map +1 -1
- package/dist/core/components/ui/Slider.d.ts.map +1 -1
- package/dist/core/components/ui/Slider.js.map +1 -1
- package/dist/core/components/ui/Sonner.d.ts.map +1 -1
- package/dist/core/components/ui/Sonner.js.map +1 -1
- package/dist/core/components/ui/Switch.d.ts.map +1 -1
- package/dist/core/components/ui/Switch.js.map +1 -1
- package/dist/core/components/ui/Table.d.ts.map +1 -1
- package/dist/core/components/ui/Table.js.map +1 -1
- package/dist/core/components/ui/Tabs.d.ts.map +1 -1
- package/dist/core/components/ui/Tabs.js.map +1 -1
- package/dist/core/components/ui/Textarea.d.ts.map +1 -1
- package/dist/core/components/ui/Textarea.js.map +1 -1
- package/dist/core/components/ui/Toggle.d.ts.map +1 -1
- package/dist/core/components/ui/Toggle.js.map +1 -1
- package/dist/core/components/ui/ToggleGroup.d.ts.map +1 -1
- package/dist/core/components/ui/ToggleGroup.js.map +1 -1
- package/dist/core/components/ui/ToolbarButton.d.ts.map +1 -1
- package/dist/core/components/ui/ToolbarButton.js.map +1 -1
- package/dist/core/components/ui/Tooltip.d.ts.map +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.map +1 -1
- package/dist/core/components/ui/chart.d.ts.map +1 -1
- package/dist/core/components/ui/chart.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/index.d.ts.map +1 -1
- package/dist/core/components/ui/index.js.map +1 -1
- package/dist/core/components/ui/openPopupWindow.d.ts.map +1 -1
- package/dist/core/components/ui/openPopupWindow.js.map +1 -1
- package/dist/core/components/ui/openPopupWindowLCA.d.ts.map +1 -1
- package/dist/core/components/ui/openPopupWindowLCA.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.d.ts.map +1 -1
- package/dist/core/components/ui/uploadFile.js.map +1 -1
- package/dist/core/components/viewers/Data/DataMenu.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/DataMenu.js.map +1 -1
- package/dist/core/components/viewers/Data/FilterButtons.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/FilterButtons.js.map +1 -1
- package/dist/core/components/viewers/Data/HeaderButtons.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/HeaderButtons.js.map +1 -1
- package/dist/core/components/viewers/Data/MoreOptions.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/MoreOptions.js.map +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/Filters.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/Filters.js.map +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.js.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.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.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.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.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.map +1 -1
- package/dist/core/components/viewers/Data/details/AttachedFiles.js.map +1 -1
- package/dist/core/components/viewers/Data/details/CheckboxGroup.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/CheckboxGroup.js.map +1 -1
- package/dist/core/components/viewers/Data/details/DetailActions.d.ts.map +1 -1
- 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.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.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.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.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.map +1 -1
- package/dist/core/components/viewers/Data/details/UnitsGrid.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/UnitsGrid.js.map +1 -1
- package/dist/core/components/viewers/Data/details/getAttachmentFileName.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/getAttachmentFileName.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.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.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.map +1 -1
- package/dist/core/components/viewers/Data/files/FilePreview.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/files/FilePreview.js.map +1 -1
- package/dist/core/components/viewers/Data/files/utils/fuzzySearch.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/files/utils/fuzzySearch.js.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.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.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.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.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.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.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.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.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.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.map +1 -1
- package/dist/core/components/viewers/Data/utils/Columns.d.ts.map +1 -1
- 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/convertDate.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/utils/convertDate.js.map +1 -1
- package/dist/core/components/viewers/Data/utils/csvUtils.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/utils/csvUtils.js.map +1 -1
- package/dist/core/components/viewers/Data/utils/filterHelper.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/utils/filterHelper.js.map +1 -1
- package/dist/core/components/viewers/Data/utils/positionParser.d.ts.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.map +1 -1
- package/dist/core/components/viewers/Data/utils/useViewerData.js.map +1 -1
- package/dist/core/components/viewers/Data/utils/viewerConfig.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/utils/viewerConfig.js.map +1 -1
- package/dist/core/components/viewers/Viewer.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/core/components/viewers/bim/BimViewer.d.ts.map +1 -1
- 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.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.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.map +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.map +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.map +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.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.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.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js.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.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.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.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.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.map +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.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.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.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.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.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.js.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.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.map +1 -1
- package/dist/core/components/viewers/bim/src/CurrentCamera.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/CurrentCamera.js.map +1 -1
- package/dist/core/components/viewers/bim/src/CurrentWorld.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/CurrentWorld.js.map +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.map +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.map +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.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.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.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts.map +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.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.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.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/types.js.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/utils.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/utils.js.map +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.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.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.map +1 -1
- package/dist/core/components/viewers/bim/src/IfcToFragments.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/IfcToFragments.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.map +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.map +1 -1
- package/dist/core/components/viewers/bim/src/ModelManager/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/SimpleBimViewer.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/SimpleBimViewer.js.map +1 -1
- package/dist/core/components/viewers/bim/src/SpatialStructure.d.ts.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.map +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/CategoryHighlighter.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/CategoryHighlighter.js.map +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.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.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/ViewModeCoordinator.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/ViewModeCoordinator.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/ViewSectionList.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/ViewSectionList.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/drawingLayers.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/drawingLayers.js.map +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/exportDrawingToDxf.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/exportDrawingToDxf.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/safeRun.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/safeRun.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.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/viewSection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/viewSection.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.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.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.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.map +1 -1
- 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.map +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.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.map +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.map +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.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.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.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.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/markerUtils.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/markerUtils.js.map +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.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.map +1 -1
- 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.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.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.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.js.map +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.map +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.map +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.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/measureBimTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/measureBimTool.js.map +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.map +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.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.map +1 -1
- package/dist/core/components/viewers/bim/utils/setCameraLookAt.js.map +1 -1
- package/dist/core/components/viewers/index.d.ts.map +1 -1
- package/dist/core/components/viewers/index.js.map +1 -1
- package/dist/core/components/viewers/map/MapViewer.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetDetails.d.ts.map +1 -1
- 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.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.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.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.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.map +1 -1
- package/dist/core/components/viewers/map/datasets/data.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/data.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/index.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/arcgisFetch.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/arcgisFetch.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.d.ts.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.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/ckanDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/geojsonFile.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/geojsonFile.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/localDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/localDatasets.js.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.map +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.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.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/urlSources.d.ts.map +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.map +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/src/wmsTime.d.ts +0 -8
- package/dist/core/components/viewers/map/datasets/src/wmsTime.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/wmsTime.js.map +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.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.map +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.map +1 -1
- 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.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js.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.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.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.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.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.map +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.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.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.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.map +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.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.map +1 -1
- 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.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.map +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.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.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.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.map +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/disposeThreeScene.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/disposeThreeScene.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/mapLayersUtils.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/mapLayersUtils.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.js.map +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.map +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.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.js.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.map +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.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.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.map +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.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.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.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.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.map +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.map +1 -1
- package/dist/core/components/viewers/map/src/compare/CompareDialog.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/compare/CompareDialog.js.map +1 -1
- package/dist/core/components/viewers/map/src/compare/description-list.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/compare/description-list.js.map +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.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.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.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/ProgressBar.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/ProgressBar.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/utils/uploadToPresignedURLS.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/utils/uploadToPresignedURLS.js.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.map +1 -1
- 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.map +1 -1
- package/dist/core/components/viewers/map/src/tools/DatasetMapTool.d.ts.map +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.map +1 -1
- package/dist/core/components/viewers/map/src/tools/mapTools.js.map +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.map +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.map +1 -1
- package/dist/core/components/viewers/map/utils/ClusterManager.js.map +1 -1
- package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.js.map +1 -1
- package/dist/core/components/viewers/map/utils/MapEventManager/MapHoverManager.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/MapEventManager/MapHoverManager.js.map +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/dateName.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/dateName.js.map +1 -1
- package/dist/core/components/viewers/map/utils/extractCoordinates.d.ts.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.map +1 -1
- package/dist/core/components/viewers/map/utils/fitBuildingsBounds.js.map +1 -1
- package/dist/core/components/viewers/map/utils/fitGeojsonBounds.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/fitGeojsonBounds.js.map +1 -1
- package/dist/core/components/viewers/map/utils/flyToEach.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/flyToEach.js.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoder.d.ts.map +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.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/adapters.js.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/config.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/config.js.map +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.map +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.map +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.map +1 -1
- package/dist/core/components/viewers/map/utils/getOsmIdFromMartin.js.map +1 -1
- package/dist/core/components/viewers/map/utils/getOsmIdbyCoordinates.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/getOsmIdbyCoordinates.js.map +1 -1
- package/dist/core/components/viewers/map/utils/mapStyleCatalog.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/mapStyleCatalog.js.map +1 -1
- package/dist/core/components/viewers/map/utils/stringToColour.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/stringToColour.js.map +1 -1
- package/dist/core/components/viewers/map/utils/toggleBimToMap.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/toggleBimToMap.js.map +1 -1
- package/dist/core/components/viewers/map/utils/updateBuildingOsmId.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/updateBuildingOsmId.js.map +1 -1
- package/dist/core/components/viewers/map/utils/validateBounds.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/validateBounds.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/PointCloudToolbar.d.ts.map +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.map +1 -1
- package/dist/core/components/viewers/pointcloud/define.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/define.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.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.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.map +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.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.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.map +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.map +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.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.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.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.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.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/ViewportGizmo.d.ts.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.map +1 -1
- 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.map +1 -1
- 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.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.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.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.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.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.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.map +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.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/src/getCameraPosition.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/src/getCameraPosition.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/index.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/index.js.map +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.map +1 -1
- package/dist/core/components/viewers/pointcloud/utils/potreeLoader.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/utils/potreeLoader.js.map +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/components/viewers/useCoordinateSystem.d.ts.map +1 -1
- package/dist/core/components/viewers/useCoordinateSystem.js.map +1 -1
- package/dist/core/hooks/buildings/buildings.d.ts.map +1 -1
- package/dist/core/hooks/buildings/buildings.js.map +1 -1
- package/dist/core/hooks/buildings/createBuildingHooks.d.ts.map +1 -1
- package/dist/core/hooks/buildings/createBuildingHooks.js.map +1 -1
- package/dist/core/hooks/comments/comments.d.ts.map +1 -1
- package/dist/core/hooks/comments/comments.js.map +1 -1
- package/dist/core/hooks/comments/createCommentHooks.d.ts.map +1 -1
- package/dist/core/hooks/comments/createCommentHooks.js.map +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.map +1 -1
- package/dist/core/hooks/index.d.ts.map +1 -1
- package/dist/core/hooks/index.js.map +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/infrastructures/infrastructures.d.ts.map +1 -1
- package/dist/core/hooks/infrastructures/infrastructures.js.map +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/openDataPortals/openDataPortals.d.ts.map +1 -1
- package/dist/core/hooks/openDataPortals/openDataPortals.js.map +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/organizations/organizations.d.ts.map +1 -1
- package/dist/core/hooks/organizations/organizations.js.map +1 -1
- package/dist/core/hooks/ports/apiAdapter.d.ts.map +1 -1
- package/dist/core/hooks/provider.d.ts.map +1 -1
- package/dist/core/hooks/provider.js.map +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/sensorTypes/sensorTypes.d.ts.map +1 -1
- package/dist/core/hooks/sensorTypes/sensorTypes.js.map +1 -1
- package/dist/core/hooks/sensors/createSensorHooks.d.ts.map +1 -1
- package/dist/core/hooks/sensors/createSensorHooks.js.map +1 -1
- package/dist/core/hooks/sensors/sensors.d.ts.map +1 -1
- package/dist/core/hooks/sensors/sensors.js.map +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/sites/sites.js.map +1 -1
- package/dist/core/hooks/ui/use-mobile.d.ts.map +1 -1
- package/dist/core/hooks/ui/use-mobile.js.map +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/hooks/users/users.d.ts.map +1 -1
- package/dist/core/hooks/users/users.js.map +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js.map +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/errors.d.ts.map +1 -1
- package/dist/core/plugins/host/errors.js.map +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.map +1 -1
- package/dist/core/plugins/host/registry.d.ts.map +1 -1
- package/dist/core/plugins/host/registry.js.map +1 -1
- package/dist/core/plugins/installed.d.ts.map +1 -1
- package/dist/core/plugins/installed.js.map +1 -1
- package/dist/core/plugins/sdk/components.d.ts.map +1 -1
- package/dist/core/plugins/sdk/components.js.map +1 -1
- package/dist/core/plugins/sdk/index.d.ts.map +1 -1
- package/dist/core/plugins/sdk/index.js.map +1 -1
- package/dist/core/plugins/sdk/types.d.ts.map +1 -1
- package/dist/core/plugins/sdk/types.js.map +1 -1
- package/dist/core/store/ActionMap.d.ts.map +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.map +1 -1
- package/dist/core/store/AppConfig/reducer.js.map +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.map +1 -1
- package/dist/core/store/BIM/reducer.js.map +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.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.map +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.map +1 -1
- package/dist/core/store/Datasets/context.js.map +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.map +1 -1
- package/dist/core/store/Files/context.js.map +1 -1
- 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.map +1 -1
- package/dist/core/store/Map/context.js.map +1 -1
- 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/Menus/context.d.ts.map +1 -1
- package/dist/core/store/Menus/context.js.map +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.map +1 -1
- package/dist/core/store/Permissions/context.js.map +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.map +1 -1
- package/dist/core/store/PointCloud/reducer.js.map +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.map +1 -1
- package/dist/core/store/Tools/reducer.js.map +1 -1
- package/dist/core/store/index.d.ts.map +1 -1
- package/dist/core/store/index.js.map +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/bim.d.ts.map +1 -1
- package/dist/core/types/datasetTypes.d.ts.map +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.map +1 -1
- package/dist/core/types/global.d.ts.map +1 -1
- package/dist/core/types/global.js.map +1 -1
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/types/map.d.ts.map +1 -1
- package/dist/core/types/martinTypes.d.ts.map +1 -1
- package/dist/core/types/martinTypes.js.map +1 -1
- package/dist/core/types/next-auth.d.ts.map +1 -1
- package/dist/core/types/tools.d.ts.map +1 -1
- package/dist/core/types/users.d.ts.map +1 -1
- package/dist/core/utils/acceptedFiles.d.ts.map +1 -1
- package/dist/core/utils/acceptedFiles.js.map +1 -1
- package/dist/core/utils/errorHandler.d.ts.map +1 -1
- package/dist/core/utils/errorHandler.js.map +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/imageUtils.d.ts.map +1 -1
- package/dist/core/utils/imageUtils.js.map +1 -1
- package/dist/core/utils/index.d.ts.map +1 -1
- package/dist/core/utils/index.js.map +1 -1
- package/dist/core/utils/markerUtils.d.ts.map +1 -1
- package/dist/core/utils/markerUtils.js.map +1 -1
- package/dist/core/utils/memcache.d.ts.map +1 -1
- package/dist/core/utils/memcache.js.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.d.ts.map +1 -1
- package/dist/core/utils/timeUtils.js.map +1 -1
- package/dist/core/utils/utils.d.ts.map +1 -1
- package/dist/core/utils/utils.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +6 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/MarkerManager.ts"],"sourcesContent":["import type { LayerColors } from '../../../../types/datasetTypes'\r\nimport { Marker } from 'maplibre-gl'\r\n\r\n// Custom events for marker actions\r\nconst MARKER_REMOVED_EVENT = 'markerRemoved'\r\nconst MARKER_MOVED_EVENT = 'markerMoved'\r\nconst MARKER_EDITING_CHANGED_EVENT = 'markerEditingChanged'\r\n\r\n// Interface for marker events\r\ninterface MarkerEventDetail {\r\n coordinates?: [number, number]\r\n editing?: boolean\r\n}\r\n\r\nexport interface ClusterDataset {\r\n name: string\r\n data: any[]\r\n layerColor?: LayerColors | string\r\n}\r\n\r\nexport interface ClusterOptions {\r\n longitudeKey?: string\r\n latitudeKey?: string\r\n color?: string\r\n clusterMaxZoom?: number\r\n clusterRadius?: number\r\n}\r\n\r\nexport class MarkerManager {\r\n private markers: Marker[] = []\r\n private marker: Marker | null = null\r\n private map: any = null\r\n private escKeyCleanup: (() => void) | null = null\r\n private _editing: boolean = false\r\n private _coordinates: [number, number] | null = null\r\n private defaultColour = '#73cee2'\r\n private allowMultiple: boolean = false // <-- Add this\r\n\r\n constructor() {\r\n this.handleEscKey = this.handleEscKey.bind(this)\r\n this.handleMarkerDragEnd = this.handleMarkerDragEnd.bind(this)\r\n }\r\n\r\n // Getter for editing state\r\n get editing(): boolean {\r\n return this._editing\r\n }\r\n\r\n // Setter for editing state\r\n set editing(value: boolean) {\r\n if (this._editing !== value) {\r\n this._editing = value\r\n this.updateMarkerDraggable()\r\n this.dispatchEditingChangedEvent()\r\n }\r\n }\r\n\r\n // Getter for coordinates\r\n get coordinates(): [number, number] | null {\r\n return this._coordinates\r\n }\r\n\r\n // Create and add a marker to the map\r\n create(\r\n coordinates: [number, number],\r\n map: any,\r\n options?: { allowMultiple?: boolean, layerColor?: LayerColors | string, editing?: boolean },\r\n ): Marker {\r\n this.allowMultiple = options?.allowMultiple ?? false\r\n\r\n if (!this.allowMultiple) {\r\n this.remove()\r\n }\r\n\r\n this.map = map\r\n this._coordinates = coordinates\r\n const editing = options?.editing ?? false\r\n const layerColor = options?.layerColor\r\n\r\n // Create marker element\r\n const markerElement = document.createElement('div')\r\n markerElement.style.width = '15px'\r\n markerElement.style.height = '15px'\r\n markerElement.style.borderRadius = '50%'\r\n markerElement.style.backgroundColor\r\n = typeof layerColor === 'string'\r\n ? layerColor\r\n : (layerColor?.color || this.defaultColour)\r\n markerElement.style.border = '3px solid white'\r\n markerElement.style.cursor = editing ? 'move' : 'pointer'\r\n\r\n // Create the marker\r\n const newMarker = new Marker({\r\n element: markerElement,\r\n anchor: 'center',\r\n draggable: editing,\r\n })\r\n .setLngLat(coordinates)\r\n .addTo(map)\r\n\r\n if (editing) {\r\n newMarker.on('dragend', this.handleMarkerDragEnd)\r\n }\r\n\r\n if (this.allowMultiple) {\r\n this.markers.push(newMarker)\r\n }\r\n else {\r\n this.marker = newMarker\r\n }\r\n\r\n this.setupEscapeKeyListener()\r\n\r\n return newMarker\r\n }\r\n\r\n // Update marker draggable state\r\n private updateMarkerDraggable(): void {\r\n if (this.marker) {\r\n // Remove existing drag listener\r\n this.marker.off('dragend', this.handleMarkerDragEnd)\r\n\r\n // Update draggable state\r\n this.marker.setDraggable(this._editing)\r\n\r\n // Update cursor style\r\n const element = this.marker.getElement()\r\n if (element) {\r\n element.style.cursor = this._editing ? 'dragging' : 'pointer'\r\n }\r\n\r\n // Add drag listener if editing\r\n if (this._editing) {\r\n this.marker.on('dragend', this.handleMarkerDragEnd)\r\n }\r\n }\r\n }\r\n\r\n // Handle marker drag end\r\n private handleMarkerDragEnd(): void {\r\n if (this.marker) {\r\n const newCoordinates = this.marker.getLngLat().toArray() as [number, number]\r\n this._coordinates = newCoordinates\r\n this.dispatchMarkerMovedEvent(newCoordinates)\r\n }\r\n }\r\n\r\n // Handle escape key press\r\n private handleEscKey(event: KeyboardEvent): void {\r\n if (event.key === 'Escape') {\r\n this.remove()\r\n }\r\n }\r\n\r\n // Set up escape key listener\r\n private setupEscapeKeyListener(): void {\r\n // Clean up existing listener\r\n if (this.escKeyCleanup) {\r\n this.escKeyCleanup()\r\n }\r\n\r\n // Add new listener\r\n document.addEventListener('keydown', this.handleEscKey)\r\n\r\n // Store cleanup function\r\n this.escKeyCleanup = () => {\r\n document.removeEventListener('keydown', this.handleEscKey)\r\n }\r\n }\r\n\r\n // Remove the marker(s)\r\n remove(): void {\r\n if (this.allowMultiple) {\r\n for (const marker of this.markers) marker.remove()\r\n this.markers = []\r\n this._coordinates = null\r\n this.dispatchMarkerRemovedEvent()\r\n }\r\n else if (this.marker) {\r\n this.marker.remove()\r\n this.marker = null\r\n this._coordinates = null\r\n this.dispatchMarkerRemovedEvent()\r\n }\r\n\r\n // Clean up escape key listener\r\n if (this.escKeyCleanup) {\r\n this.escKeyCleanup()\r\n this.escKeyCleanup = null\r\n }\r\n }\r\n\r\n // Update marker position\r\n updatePosition(coordinates: [number, number]): void {\r\n if (this.marker) {\r\n this.marker.setLngLat(coordinates)\r\n this._coordinates = coordinates\r\n }\r\n }\r\n\r\n // Check if marker exists\r\n hasMarker(): boolean {\r\n return this.marker !== null\r\n }\r\n\r\n // Get the underlying MapLibre marker instance\r\n getMarker(): Marker | null {\r\n return this.marker\r\n }\r\n\r\n // Listen to marker events on this instance\r\n onRemoved(callback: (event: CustomEvent) => void): () => void {\r\n document.addEventListener(MARKER_REMOVED_EVENT, callback as EventListener)\r\n return () => {\r\n document.removeEventListener(MARKER_REMOVED_EVENT, callback as EventListener)\r\n }\r\n }\r\n\r\n onMoved(callback: (event: CustomEvent) => void): () => void {\r\n document.addEventListener(MARKER_MOVED_EVENT, callback as EventListener)\r\n return () => {\r\n document.removeEventListener(MARKER_MOVED_EVENT, callback as EventListener)\r\n }\r\n }\r\n\r\n onEditingChanged(callback: (event: CustomEvent) => void): () => void {\r\n document.addEventListener(MARKER_EDITING_CHANGED_EVENT, callback as EventListener)\r\n return () => {\r\n document.removeEventListener(MARKER_EDITING_CHANGED_EVENT, callback as EventListener)\r\n }\r\n }\r\n\r\n // Dispatch marker removed event\r\n private dispatchMarkerRemovedEvent(): void {\r\n const event = new CustomEvent(MARKER_REMOVED_EVENT, {\r\n detail: {\r\n timestamp: new Date().toISOString(),\r\n markerType: 'marker',\r\n } as MarkerEventDetail,\r\n })\r\n document.dispatchEvent(event)\r\n }\r\n\r\n // Dispatch marker moved event\r\n private dispatchMarkerMovedEvent(coordinates: [number, number]): void {\r\n const event = new CustomEvent(MARKER_MOVED_EVENT, {\r\n detail: {\r\n timestamp: new Date().toISOString(),\r\n markerType: 'marker',\r\n coordinates,\r\n } as MarkerEventDetail,\r\n })\r\n document.dispatchEvent(event)\r\n }\r\n\r\n // Dispatch editing state changed event\r\n private dispatchEditingChangedEvent(): void {\r\n const event = new CustomEvent(MARKER_EDITING_CHANGED_EVENT, {\r\n detail: {\r\n timestamp: new Date().toISOString(),\r\n markerType: 'marker',\r\n editing: this._editing,\r\n coordinates: this._coordinates,\r\n } as MarkerEventDetail,\r\n })\r\n document.dispatchEvent(event)\r\n }\r\n\r\n static addClusterMarkers(\r\n map: any,\r\n dataset: ClusterDataset,\r\n options: ClusterOptions = {},\r\n ): void {\r\n const {\r\n longitudeKey = 'longitude',\r\n latitudeKey = 'latitude',\r\n color = (typeof dataset.layerColor === 'string'\r\n ? dataset.layerColor\r\n : dataset.layerColor?.color) || '#73cee2',\r\n clusterMaxZoom = 14,\r\n clusterRadius = 50,\r\n } = options\r\n\r\n const sourceId = `cluster-${dataset.name}`\r\n const clusterLayerId = `cluster-layer-${dataset.name}`\r\n const countLayerId = `cluster-count-${dataset.name}`\r\n const unclusteredLayerId = `unclustered-${dataset.name}`\r\n\r\n // Prepare GeoJSON FeatureCollection\r\n const geojson = {\r\n type: 'FeatureCollection',\r\n features: dataset.data\r\n .filter((item: any) => item[longitudeKey] && item[latitudeKey])\r\n .map((item: any) => ({\r\n type: 'Feature',\r\n geometry: {\r\n type: 'Point',\r\n coordinates: [item[longitudeKey], item[latitudeKey]],\r\n },\r\n properties: { name: dataset.name },\r\n })),\r\n }\r\n\r\n // Add or update source\r\n if (map.getSource(sourceId)) {\r\n (map.getSource(sourceId) as any).setData(geojson)\r\n }\r\n else {\r\n map.addSource(sourceId, {\r\n type: 'geojson',\r\n data: geojson,\r\n cluster: true,\r\n clusterMaxZoom,\r\n clusterRadius,\r\n })\r\n\r\n // Cluster circles\r\n map.addLayer({\r\n id: clusterLayerId,\r\n type: 'circle',\r\n source: sourceId,\r\n filter: ['has', 'point_count'],\r\n paint: {\r\n 'circle-color': color,\r\n 'circle-radius': [\r\n 'step',\r\n ['get', 'point_count'],\r\n 20,\r\n 100,\r\n 30,\r\n 750,\r\n 40,\r\n ],\r\n },\r\n })\r\n\r\n // Cluster count labels\r\n map.addLayer({\r\n id: countLayerId,\r\n type: 'symbol',\r\n source: sourceId,\r\n filter: ['has', 'point_count'],\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: {\r\n 'text-color': '#ffffff',\r\n },\r\n })\r\n\r\n // Unclustered points\r\n map.addLayer({\r\n id: unclusteredLayerId,\r\n type: 'circle',\r\n source: sourceId,\r\n filter: ['!', ['has', 'point_count']],\r\n paint: {\r\n 'circle-color': color,\r\n 'circle-radius': 6,\r\n 'circle-stroke-width': 2,\r\n 'circle-stroke-color': '#fff',\r\n },\r\n })\r\n }\r\n }\r\n\r\n // Cleanup method for when the instance is no longer needed\r\n destroy(): void {\r\n this.remove()\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/MarkerManager.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport type { LayerColors } from '../../../../types/datasetTypes'\r\nimport { Marker } from 'maplibre-gl'\r\n\r\n// Custom events for marker actions\r\nconst MARKER_REMOVED_EVENT = 'markerRemoved'\r\nconst MARKER_MOVED_EVENT = 'markerMoved'\r\nconst MARKER_EDITING_CHANGED_EVENT = 'markerEditingChanged'\r\n\r\n// Interface for marker events\r\ninterface MarkerEventDetail {\r\n coordinates?: [number, number]\r\n editing?: boolean\r\n}\r\n\r\nexport interface ClusterDataset {\r\n name: string\r\n data: any[]\r\n layerColor?: LayerColors | string\r\n}\r\n\r\nexport interface ClusterOptions {\r\n longitudeKey?: string\r\n latitudeKey?: string\r\n color?: string\r\n clusterMaxZoom?: number\r\n clusterRadius?: number\r\n}\r\n\r\nexport class MarkerManager {\r\n private markers: Marker[] = []\r\n private marker: Marker | null = null\r\n private map: any = null\r\n private escKeyCleanup: (() => void) | null = null\r\n private _editing: boolean = false\r\n private _coordinates: [number, number] | null = null\r\n private defaultColour = '#73cee2'\r\n private allowMultiple: boolean = false // <-- Add this\r\n\r\n constructor() {\r\n this.handleEscKey = this.handleEscKey.bind(this)\r\n this.handleMarkerDragEnd = this.handleMarkerDragEnd.bind(this)\r\n }\r\n\r\n // Getter for editing state\r\n get editing(): boolean {\r\n return this._editing\r\n }\r\n\r\n // Setter for editing state\r\n set editing(value: boolean) {\r\n if (this._editing !== value) {\r\n this._editing = value\r\n this.updateMarkerDraggable()\r\n this.dispatchEditingChangedEvent()\r\n }\r\n }\r\n\r\n // Getter for coordinates\r\n get coordinates(): [number, number] | null {\r\n return this._coordinates\r\n }\r\n\r\n // Create and add a marker to the map\r\n create(\r\n coordinates: [number, number],\r\n map: any,\r\n options?: { allowMultiple?: boolean, layerColor?: LayerColors | string, editing?: boolean },\r\n ): Marker {\r\n this.allowMultiple = options?.allowMultiple ?? false\r\n\r\n if (!this.allowMultiple) {\r\n this.remove()\r\n }\r\n\r\n this.map = map\r\n this._coordinates = coordinates\r\n const editing = options?.editing ?? false\r\n const layerColor = options?.layerColor\r\n\r\n // Create marker element\r\n const markerElement = document.createElement('div')\r\n markerElement.style.width = '15px'\r\n markerElement.style.height = '15px'\r\n markerElement.style.borderRadius = '50%'\r\n markerElement.style.backgroundColor\r\n = typeof layerColor === 'string'\r\n ? layerColor\r\n : (layerColor?.color || this.defaultColour)\r\n markerElement.style.border = '3px solid white'\r\n markerElement.style.cursor = editing ? 'move' : 'pointer'\r\n\r\n // Create the marker\r\n const newMarker = new Marker({\r\n element: markerElement,\r\n anchor: 'center',\r\n draggable: editing,\r\n })\r\n .setLngLat(coordinates)\r\n .addTo(map)\r\n\r\n if (editing) {\r\n newMarker.on('dragend', this.handleMarkerDragEnd)\r\n }\r\n\r\n if (this.allowMultiple) {\r\n this.markers.push(newMarker)\r\n }\r\n else {\r\n this.marker = newMarker\r\n }\r\n\r\n this.setupEscapeKeyListener()\r\n\r\n return newMarker\r\n }\r\n\r\n // Update marker draggable state\r\n private updateMarkerDraggable(): void {\r\n if (this.marker) {\r\n // Remove existing drag listener\r\n this.marker.off('dragend', this.handleMarkerDragEnd)\r\n\r\n // Update draggable state\r\n this.marker.setDraggable(this._editing)\r\n\r\n // Update cursor style\r\n const element = this.marker.getElement()\r\n if (element) {\r\n element.style.cursor = this._editing ? 'dragging' : 'pointer'\r\n }\r\n\r\n // Add drag listener if editing\r\n if (this._editing) {\r\n this.marker.on('dragend', this.handleMarkerDragEnd)\r\n }\r\n }\r\n }\r\n\r\n // Handle marker drag end\r\n private handleMarkerDragEnd(): void {\r\n if (this.marker) {\r\n const newCoordinates = this.marker.getLngLat().toArray() as [number, number]\r\n this._coordinates = newCoordinates\r\n this.dispatchMarkerMovedEvent(newCoordinates)\r\n }\r\n }\r\n\r\n // Handle escape key press\r\n private handleEscKey(event: KeyboardEvent): void {\r\n if (event.key === 'Escape') {\r\n this.remove()\r\n }\r\n }\r\n\r\n // Set up escape key listener\r\n private setupEscapeKeyListener(): void {\r\n // Clean up existing listener\r\n if (this.escKeyCleanup) {\r\n this.escKeyCleanup()\r\n }\r\n\r\n // Add new listener\r\n document.addEventListener('keydown', this.handleEscKey)\r\n\r\n // Store cleanup function\r\n this.escKeyCleanup = () => {\r\n document.removeEventListener('keydown', this.handleEscKey)\r\n }\r\n }\r\n\r\n // Remove the marker(s)\r\n remove(): void {\r\n if (this.allowMultiple) {\r\n for (const marker of this.markers) marker.remove()\r\n this.markers = []\r\n this._coordinates = null\r\n this.dispatchMarkerRemovedEvent()\r\n }\r\n else if (this.marker) {\r\n this.marker.remove()\r\n this.marker = null\r\n this._coordinates = null\r\n this.dispatchMarkerRemovedEvent()\r\n }\r\n\r\n // Clean up escape key listener\r\n if (this.escKeyCleanup) {\r\n this.escKeyCleanup()\r\n this.escKeyCleanup = null\r\n }\r\n }\r\n\r\n // Update marker position\r\n updatePosition(coordinates: [number, number]): void {\r\n if (this.marker) {\r\n this.marker.setLngLat(coordinates)\r\n this._coordinates = coordinates\r\n }\r\n }\r\n\r\n // Check if marker exists\r\n hasMarker(): boolean {\r\n return this.marker !== null\r\n }\r\n\r\n // Get the underlying MapLibre marker instance\r\n getMarker(): Marker | null {\r\n return this.marker\r\n }\r\n\r\n // Listen to marker events on this instance\r\n onRemoved(callback: (event: CustomEvent) => void): () => void {\r\n document.addEventListener(MARKER_REMOVED_EVENT, callback as EventListener)\r\n return () => {\r\n document.removeEventListener(MARKER_REMOVED_EVENT, callback as EventListener)\r\n }\r\n }\r\n\r\n onMoved(callback: (event: CustomEvent) => void): () => void {\r\n document.addEventListener(MARKER_MOVED_EVENT, callback as EventListener)\r\n return () => {\r\n document.removeEventListener(MARKER_MOVED_EVENT, callback as EventListener)\r\n }\r\n }\r\n\r\n onEditingChanged(callback: (event: CustomEvent) => void): () => void {\r\n document.addEventListener(MARKER_EDITING_CHANGED_EVENT, callback as EventListener)\r\n return () => {\r\n document.removeEventListener(MARKER_EDITING_CHANGED_EVENT, callback as EventListener)\r\n }\r\n }\r\n\r\n // Dispatch marker removed event\r\n private dispatchMarkerRemovedEvent(): void {\r\n const event = new CustomEvent(MARKER_REMOVED_EVENT, {\r\n detail: {\r\n timestamp: new Date().toISOString(),\r\n markerType: 'marker',\r\n } as MarkerEventDetail,\r\n })\r\n document.dispatchEvent(event)\r\n }\r\n\r\n // Dispatch marker moved event\r\n private dispatchMarkerMovedEvent(coordinates: [number, number]): void {\r\n const event = new CustomEvent(MARKER_MOVED_EVENT, {\r\n detail: {\r\n timestamp: new Date().toISOString(),\r\n markerType: 'marker',\r\n coordinates,\r\n } as MarkerEventDetail,\r\n })\r\n document.dispatchEvent(event)\r\n }\r\n\r\n // Dispatch editing state changed event\r\n private dispatchEditingChangedEvent(): void {\r\n const event = new CustomEvent(MARKER_EDITING_CHANGED_EVENT, {\r\n detail: {\r\n timestamp: new Date().toISOString(),\r\n markerType: 'marker',\r\n editing: this._editing,\r\n coordinates: this._coordinates,\r\n } as MarkerEventDetail,\r\n })\r\n document.dispatchEvent(event)\r\n }\r\n\r\n static addClusterMarkers(\r\n map: any,\r\n dataset: ClusterDataset,\r\n options: ClusterOptions = {},\r\n ): void {\r\n const {\r\n longitudeKey = 'longitude',\r\n latitudeKey = 'latitude',\r\n color = (typeof dataset.layerColor === 'string'\r\n ? dataset.layerColor\r\n : dataset.layerColor?.color) || '#73cee2',\r\n clusterMaxZoom = 14,\r\n clusterRadius = 50,\r\n } = options\r\n\r\n const sourceId = `cluster-${dataset.name}`\r\n const clusterLayerId = `cluster-layer-${dataset.name}`\r\n const countLayerId = `cluster-count-${dataset.name}`\r\n const unclusteredLayerId = `unclustered-${dataset.name}`\r\n\r\n // Prepare GeoJSON FeatureCollection\r\n const geojson = {\r\n type: 'FeatureCollection',\r\n features: dataset.data\r\n .filter((item: any) => item[longitudeKey] && item[latitudeKey])\r\n .map((item: any) => ({\r\n type: 'Feature',\r\n geometry: {\r\n type: 'Point',\r\n coordinates: [item[longitudeKey], item[latitudeKey]],\r\n },\r\n properties: { name: dataset.name },\r\n })),\r\n }\r\n\r\n // Add or update source\r\n if (map.getSource(sourceId)) {\r\n (map.getSource(sourceId) as any).setData(geojson)\r\n }\r\n else {\r\n map.addSource(sourceId, {\r\n type: 'geojson',\r\n data: geojson,\r\n cluster: true,\r\n clusterMaxZoom,\r\n clusterRadius,\r\n })\r\n\r\n // Cluster circles\r\n map.addLayer({\r\n id: clusterLayerId,\r\n type: 'circle',\r\n source: sourceId,\r\n filter: ['has', 'point_count'],\r\n paint: {\r\n 'circle-color': color,\r\n 'circle-radius': [\r\n 'step',\r\n ['get', 'point_count'],\r\n 20,\r\n 100,\r\n 30,\r\n 750,\r\n 40,\r\n ],\r\n },\r\n })\r\n\r\n // Cluster count labels\r\n map.addLayer({\r\n id: countLayerId,\r\n type: 'symbol',\r\n source: sourceId,\r\n filter: ['has', 'point_count'],\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: {\r\n 'text-color': '#ffffff',\r\n },\r\n })\r\n\r\n // Unclustered points\r\n map.addLayer({\r\n id: unclusteredLayerId,\r\n type: 'circle',\r\n source: sourceId,\r\n filter: ['!', ['has', 'point_count']],\r\n paint: {\r\n 'circle-color': color,\r\n 'circle-radius': 6,\r\n 'circle-stroke-width': 2,\r\n 'circle-stroke-color': '#fff',\r\n },\r\n })\r\n }\r\n }\r\n\r\n // Cleanup method for when the instance is no longer needed\r\n destroy(): void {\r\n this.remove()\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateName.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/dateName.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dateName.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/dateName.ts"],"names":[],"mappings":"AAGA,eAAQ,MAAM,QAAQ,GAAI,MAAM,MAAM,WAI/B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/dateName.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/dateName.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nexport const dateName = (name: string) => {\r\n const currentDate = new Date().toISOString().split('T')[0] // YYYY-MM-DD format\r\n const validName = name.replace(/[^a-zA-Z0-9-_]/g, '_') // Replace invalid filename chars with underscore\r\n return `${currentDate}_${validName}`\r\n }"],"mappings":"AAGQ,MAAM,WAAW,CAAC,SAAiB;AACnC,QAAM,eAAc,oBAAI,KAAK,GAAE,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;AACzD,QAAM,YAAY,KAAK,QAAQ,mBAAmB,GAAG;AACrD,SAAO,GAAG,WAAW,IAAI,SAAS;AACpC;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractCoordinates.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/extractCoordinates.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extractCoordinates.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/extractCoordinates.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,iBAAiB,GACzB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA4BrC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/extractCoordinates.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/extractCoordinates.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport type { MapGeoJSONFeature } from 'maplibre-gl'\r\n\r\n/**\r\n * Extracts coordinates from a MapGeoJSONFeature in a type-safe manner.\r\n * Handles multiple coordinate formats:\r\n * - Standard GeoJSON array: [lng, lat]\r\n * - Object formats: { lng, lat }, { lon, lat }, { x, y }\r\n * \r\n * @param feature - The MapGeoJSONFeature to extract coordinates from\r\n * @returns An object with lng and lat properties, or null if coordinates cannot be extracted\r\n */\r\nexport function extractCoordinatesFromFeature(\r\n feature: MapGeoJSONFeature\r\n): { lng: number; lat: number } | null {\r\n // Type guard to ensure geometry has coordinates\r\n if (!('coordinates' in feature.geometry)) {\r\n return null\r\n }\r\n\r\n const coords = feature.geometry.coordinates\r\n\r\n let lng: number\r\n let lat: number\r\n\r\n if (Array.isArray(coords)) {\r\n // Standard GeoJSON array format: [lng, lat]\r\n [lng, lat] = coords as [number, number]\r\n } else if (typeof coords === 'object' && coords !== null) {\r\n // Handle object format: { lng, lat } or { lon, lat } or { x, y }\r\n lng = (coords as any).lng ?? (coords as any).lon ?? (coords as any).x\r\n lat = (coords as any).lat ?? (coords as any).y\r\n } else {\r\n return null // Invalid coordinate format\r\n }\r\n\r\n // Validate that we have valid numbers\r\n if (typeof lng !== 'number' || typeof lat !== 'number' || isNaN(lng) || isNaN(lat)) {\r\n return null\r\n }\r\n\r\n return { lng, lat }\r\n}\r\n"],"mappings":"AAcO,SAAS,8BACd,SACqC;AAhBvC;AAkBE,MAAI,EAAE,iBAAiB,QAAQ,WAAW;AACxC,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,QAAQ,SAAS;AAEhC,MAAI;AACJ,MAAI;AAEJ,MAAI,MAAM,QAAQ,MAAM,GAAG;AAEzB,KAAC,KAAK,GAAG,IAAI;AAAA,EACf,WAAW,OAAO,WAAW,YAAY,WAAW,MAAM;AAExD,WAAO,kBAAe,QAAf,YAAuB,OAAe,QAAtC,YAA8C,OAAe;AACpE,WAAO,YAAe,QAAf,YAAuB,OAAe;AAAA,EAC/C,OAAO;AACL,WAAO;AAAA,EACT;AAGA,MAAI,OAAO,QAAQ,YAAY,OAAO,QAAQ,YAAY,MAAM,GAAG,KAAK,MAAM,GAAG,GAAG;AAClF,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,KAAK,IAAI;AACpB;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fitBuildingsBounds.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/fitBuildingsBounds.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fitBuildingsBounds.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/fitBuildingsBounds.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAA;AAE1D,eAAO,MAAM,kBAAkB,GAAI,WAAW,QAAQ,EAAE,EAAE,KAAK,GAAG,SAqBjE,CAAA;AACD,eAAO,MAAM,cAAc,GAAI,OAAO,IAAI,EAAE,EAAE,KAAK,GAAG,SAqBrD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/fitBuildingsBounds.ts"],"sourcesContent":["\r\nimport type { Map } from 'maplibre-gl'\r\nimport * as turf from '@turf/turf'\r\nimport { Building, Site } from '../../../../types/dbTypes'\r\n\r\nexport const fitBuildingsBounds = (buildings: Building[], map: Map) => {\r\n // Collect valid building coordinates\r\n const coordinates: [number, number][] = []\r\n for (const building of buildings) {\r\n if (building.buildingLongitude != null && building.buildingLatitude != null) {\r\n coordinates.push([building.buildingLongitude, building.buildingLatitude])\r\n }\r\n }\r\n\r\n // Calculate bounding box of all coordinates\r\n const bbox = turf.bbox(turf.featureCollection(\r\n coordinates.map((coord: [number, number]) => turf.point(coord)),\r\n ))\r\n\r\n if (map && bbox && buildings.length > 0) {\r\n map.fitBounds([[bbox[0], bbox[1]], [bbox[2], bbox[3]]], {\r\n duration: 1000,\r\n maxZoom: 18,\r\n padding: 10,\r\n })\r\n }\r\n}\r\nexport const fitSitesBounds = (sites: Site[], map: Map) => {\r\n // Collect valid site coordinates\r\n const coordinates: [number, number][] = []\r\n for (const site of sites) {\r\n if (site.siteLongitude != null && site.siteLatitude != null) {\r\n coordinates.push([site.siteLongitude, site.siteLatitude])\r\n }\r\n }\r\n\r\n // Calculate bounding box of all coordinates\r\n const bbox = turf.bbox(turf.featureCollection(\r\n coordinates.map((coord: [number, number]) => turf.point(coord)),\r\n ))\r\n\r\n if (map && bbox && sites.length > 0) {\r\n map.fitBounds([[bbox[0], bbox[1]], [bbox[2], bbox[3]]], {\r\n duration: 1000,\r\n maxZoom: 18,\r\n padding: 10,\r\n })\r\n }\r\n}\r\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/fitBuildingsBounds.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport type { Map } from 'maplibre-gl'\r\nimport * as turf from '@turf/turf'\r\nimport { Building, Site } from '../../../../types/dbTypes'\r\n\r\nexport const fitBuildingsBounds = (buildings: Building[], map: Map) => {\r\n // Collect valid building coordinates\r\n const coordinates: [number, number][] = []\r\n for (const building of buildings) {\r\n if (building.buildingLongitude != null && building.buildingLatitude != null) {\r\n coordinates.push([building.buildingLongitude, building.buildingLatitude])\r\n }\r\n }\r\n\r\n // Calculate bounding box of all coordinates\r\n const bbox = turf.bbox(turf.featureCollection(\r\n coordinates.map((coord: [number, number]) => turf.point(coord)),\r\n ))\r\n\r\n if (map && bbox && buildings.length > 0) {\r\n map.fitBounds([[bbox[0], bbox[1]], [bbox[2], bbox[3]]], {\r\n duration: 1000,\r\n maxZoom: 18,\r\n padding: 10,\r\n })\r\n }\r\n}\r\nexport const fitSitesBounds = (sites: Site[], map: Map) => {\r\n // Collect valid site coordinates\r\n const coordinates: [number, number][] = []\r\n for (const site of sites) {\r\n if (site.siteLongitude != null && site.siteLatitude != null) {\r\n coordinates.push([site.siteLongitude, site.siteLatitude])\r\n }\r\n }\r\n\r\n // Calculate bounding box of all coordinates\r\n const bbox = turf.bbox(turf.featureCollection(\r\n coordinates.map((coord: [number, number]) => turf.point(coord)),\r\n ))\r\n\r\n if (map && bbox && sites.length > 0) {\r\n map.fitBounds([[bbox[0], bbox[1]], [bbox[2], bbox[3]]], {\r\n duration: 1000,\r\n maxZoom: 18,\r\n padding: 10,\r\n })\r\n }\r\n}\r\n"],"mappings":"AAIA,YAAY,UAAU;AAGf,MAAM,qBAAqB,CAAC,WAAuB,QAAa;AAErE,QAAM,cAAkC,CAAC;AACzC,aAAW,YAAY,WAAW;AAChC,QAAI,SAAS,qBAAqB,QAAQ,SAAS,oBAAoB,MAAM;AAC3E,kBAAY,KAAK,CAAC,SAAS,mBAAmB,SAAS,gBAAgB,CAAC;AAAA,IAC1E;AAAA,EACF;AAGA,QAAM,OAAO,KAAK,KAAK,KAAK;AAAA,IAC1B,YAAY,IAAI,CAAC,UAA4B,KAAK,MAAM,KAAK,CAAC;AAAA,EAChE,CAAC;AAED,MAAI,OAAO,QAAQ,UAAU,SAAS,GAAG;AACvC,QAAI,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG;AAAA,MACtD,UAAU;AAAA,MACV,SAAS;AAAA,MACT,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AACO,MAAM,iBAAiB,CAAC,OAAe,QAAa;AAEzD,QAAM,cAAkC,CAAC;AACzC,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,iBAAiB,QAAQ,KAAK,gBAAgB,MAAM;AAC3D,kBAAY,KAAK,CAAC,KAAK,eAAe,KAAK,YAAY,CAAC;AAAA,IAC1D;AAAA,EACF;AAGA,QAAM,OAAO,KAAK,KAAK,KAAK;AAAA,IAC1B,YAAY,IAAI,CAAC,UAA4B,KAAK,MAAM,KAAK,CAAC;AAAA,EAChE,CAAC;AAED,MAAI,OAAO,QAAQ,MAAM,SAAS,GAAG;AACnC,QAAI,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG;AAAA,MACtD,UAAU;AAAA,MACV,SAAS;AAAA,MACT,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fitGeojsonBounds.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/fitGeojsonBounds.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fitGeojsonBounds.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/fitGeojsonBounds.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,GAAG,EACZ,QAAQ,GAAE,MAAa,EACvB,OAAO,GAAE,MAAU,QAYpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/fitGeojsonBounds.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/fitGeojsonBounds.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport { bbox } from '@turf/turf'\r\n\r\n/**\r\n * Fits the map view to the bounding box of the given GeoJSON.\r\n * @param map - The map instance.\r\n * @param geojson - A GeoJSON FeatureCollection.\r\n * @param padding - Optional padding for fitBounds (default: 40).\r\n * @param duration - Optional animation duration in ms (default: 1500).\r\n */\r\nexport function fitGeoJsonBounds(\r\n map: any,\r\n geojson: any,\r\n duration: number = 1500,\r\n padding: number = 0,\r\n) {\r\n if (geojson?.features?.length > 0) {\r\n const bounds = bbox(geojson) // [minX, minY, maxX, maxY]\r\n map.fitBounds(\r\n [\r\n [bounds[0], bounds[1]],\r\n [bounds[2], bounds[3]],\r\n ],\r\n { padding, duration },\r\n )\r\n }\r\n}\r\n"],"mappings":"AAGA,SAAS,YAAY;AASd,SAAS,iBACd,KACA,SACA,WAAmB,MACnB,UAAkB,GAClB;AAjBF;AAkBE,QAAI,wCAAS,aAAT,mBAAmB,UAAS,GAAG;AACjC,UAAM,SAAS,KAAK,OAAO;AAC3B,QAAI;AAAA,MACF;AAAA,QACE,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAAA,QACrB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAAA,MACvB;AAAA,MACA,EAAE,SAAS,SAAS;AAAA,IACtB;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flyToEach.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/flyToEach.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flyToEach.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/flyToEach.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAEpD,eAAO,MAAM,SAAS,GAAU,KAAK,GAAG,EAAE,WAAW,QAAQ,EAAE,kBAuB9D,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/flyToEach.ts"],"sourcesContent":["\r\nimport { getOsmIdFromLatLng } from './getOsmIdFromMartin'\r\nimport type { Map } from 'maplibre-gl'\r\nimport { updateBuildingOsmId } from './updateBuildingOsmId'\r\nimport { Building } from '../../../../types/dbTypes'\r\n\r\nexport const flyToEach = async (map: Map, buildings: Building[]) => {\r\n // Sequentially process each building and wait for each to finish\r\n for (const building of buildings) {\r\n if (building.buildingOsmId) continue\r\n try {\r\n const osmId = await getOsmIdFromLatLng(map, building.buildingLatitude, building.buildingLongitude)\r\n if (osmId) {\r\n building.buildingOsmId = String(osmId)\r\n }\r\n console.log('OSM ID for', building.buildingName, ':', osmId)\r\n if (typeof osmId === 'number') {\r\n await updateBuildingOsmId(building.id, osmId)\r\n }\r\n else {\r\n throw new TypeError(`Failed to fetch OSM ID for ${building.buildingName}`)\r\n }\r\n }\r\n catch (error) {\r\n console.error(error)\r\n // Optionally continue on error, or break if you want to stop\r\n // continue;\r\n }\r\n }\r\n}\r\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/flyToEach.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport { getOsmIdFromLatLng } from './getOsmIdFromMartin'\r\nimport type { Map } from 'maplibre-gl'\r\nimport { updateBuildingOsmId } from './updateBuildingOsmId'\r\nimport { Building } from '../../../../types/dbTypes'\r\n\r\nexport const flyToEach = async (map: Map, buildings: Building[]) => {\r\n // Sequentially process each building and wait for each to finish\r\n for (const building of buildings) {\r\n if (building.buildingOsmId) continue\r\n try {\r\n const osmId = await getOsmIdFromLatLng(map, building.buildingLatitude, building.buildingLongitude)\r\n if (osmId) {\r\n building.buildingOsmId = String(osmId)\r\n }\r\n console.log('OSM ID for', building.buildingName, ':', osmId)\r\n if (typeof osmId === 'number') {\r\n await updateBuildingOsmId(building.id, osmId)\r\n }\r\n else {\r\n throw new TypeError(`Failed to fetch OSM ID for ${building.buildingName}`)\r\n }\r\n }\r\n catch (error) {\r\n console.error(error)\r\n // Optionally continue on error, or break if you want to stop\r\n // continue;\r\n }\r\n }\r\n}\r\n"],"mappings":"AAGA,SAAS,0BAA0B;AAEnC,SAAS,2BAA2B;AAG7B,MAAM,YAAY,OAAO,KAAU,cAA0B;AAElE,aAAW,YAAY,WAAW;AAChC,QAAI,SAAS,cAAe;AAC5B,QAAI;AACF,YAAM,QAAQ,MAAM,mBAAmB,KAAK,SAAS,kBAAkB,SAAS,iBAAiB;AACjG,UAAI,OAAO;AACT,iBAAS,gBAAgB,OAAO,KAAK;AAAA,MACvC;AACA,cAAQ,IAAI,cAAc,SAAS,cAAc,KAAK,KAAK;AAC3D,UAAI,OAAO,UAAU,UAAU;AAC7B,cAAM,oBAAoB,SAAS,IAAI,KAAK;AAAA,MAC9C,OACK;AACH,cAAM,IAAI,UAAU,8BAA8B,SAAS,YAAY,EAAE;AAAA,MAC3E;AAAA,IACF,SACO,OAAO;AACZ,cAAQ,MAAM,KAAK;AAAA,IAGrB;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geocoder.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/geocoder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"geocoder.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/geocoder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAS,MAAM,SAAS,CAAA;AAgBxC,eAAO,MAAM,0BAA0B,GAAU,UAAU,MAAM,EAAE,WAAW,MAAM,EAAE,cAAc,MAAM;;;EAmBzG,CAAA;AAGD,eAAO,MAAM,gBAAgB,GAAU,OAAO,MAAM,EAAE,cAAc,MAAM;;KAYzE,CAAA;AAGD,eAAO,MAAM,aAAa,GAAI,SAAS,OAAO;;;;CAoC7C,CAAA;AAGD,eAAO,MAAM,oBAAoB,GAAI,SAAS,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,EAAE,UAAU;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqF7G,CAAA;AAGD,eAAO,MAAM,kBAAkB,GAAU,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,MAAM;;GAc3F,CAAA;AAGD,eAAO,MAAM,iBAAiB,GAAI,aAAQ;;;;;;;;;;;;;;;CAgCzC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/geocoder.ts"],"sourcesContent":["import { Feature, Point } from 'geojson'\r\nimport { MarkerManager } from './MarkerManager'\r\nimport { autocompleteGeocode, reverseGeocode } from './geocoding'\r\n\r\n// Global marker manager instance for geocoder\r\nlet geocoderMarkerManager: MarkerManager | null = null\r\n\r\n// Helper function to get or create the marker manager\r\nconst getGeocoderMarkerManager = (): MarkerManager => {\r\n if (!geocoderMarkerManager) {\r\n geocoderMarkerManager = new MarkerManager()\r\n }\r\n return geocoderMarkerManager\r\n}\r\n\r\n// Convert longitude and latitude into Municipality and Country Subdivision\r\nexport const getMunicipalityAndProvince = async (latitude: string, longitude: string, countryCode?: string) => {\r\n try {\r\n const features = await reverseGeocode(latitude, longitude, countryCode, { size: 1, coarse: true })\r\n\r\n if (features.length > 0) {\r\n const properties = features[0].properties as any\r\n\r\n const municipality = properties.locality || properties.neighbourhood || properties.county || ''\r\n const countrySubdivision = properties.region_a || properties.region || '' // region_a gives abbreviation like \"ON\", \"BC\"\r\n\r\n return { municipality, countrySubdivision }\r\n }\r\n\r\n return { municipality: '', countrySubdivision: '' }\r\n }\r\n catch (error) {\r\n console.error('Error fetching municipality and country subdivision:', error)\r\n return { municipality: '', countrySubdivision: '' }\r\n }\r\n}\r\n\r\n// Fetch address suggestions from the active autocomplete provider\r\nexport const fetchSuggestions = async (input: string, countryCode?: string) => {\r\n if (!input || input.length < 3) {\r\n return []\r\n }\r\n\r\n try {\r\n return await autocompleteGeocode(input, countryCode, 5)\r\n }\r\n catch (error) {\r\n console.error('Error fetching address suggestions:', error)\r\n return []\r\n }\r\n}\r\n\r\n// Parse location details for better display\r\nexport const parseLocation = (feature: Feature) => {\r\n const locationName = feature.properties?.name || ''\r\n const fullLabel = feature.properties?.label || ''\r\n\r\n // Try to extract location details from properties\r\n const properties = feature.properties\r\n let regionDetails = ''\r\n\r\n if (properties) {\r\n const locality = properties.locality\r\n const region = properties.region // Full countrySubdivision name\r\n const region_a = properties.region_a // CountrySubdivision abbreviation (ON, BC, etc.)\r\n const country = properties.country\r\n const country_a = properties.country_a // Country abbreviation (CA)\r\n\r\n // Build region details similar to your original format\r\n if (locality && region_a && country_a) {\r\n regionDetails = `${locality}, ${region_a}, ${country_a}`\r\n }\r\n else if (locality && region && country) {\r\n regionDetails = `${locality}, ${region}, ${country}`\r\n }\r\n else {\r\n // Fallback: try to extract from the full label\r\n const parts = fullLabel.split(', ')\r\n if (parts.length > 1) {\r\n regionDetails = parts.slice(1, 3).join(', ')\r\n }\r\n }\r\n }\r\n\r\n return {\r\n name: locationName,\r\n region: regionDetails,\r\n fullLabel: fullLabel,\r\n }\r\n}\r\n\r\n// Handle suggestion selection and map movement\r\nexport const handleLocationSelect = (feature: Feature, map: any, type: string, options?: { editing?: boolean }) => {\r\n const editing = options?.editing || false\r\n const markerManager = getGeocoderMarkerManager()\r\n\r\n // Handle feature with is_database_building flag\r\n if (type === 'dbBuilding') {\r\n const geometry = feature.geometry as Point\r\n const center = geometry.coordinates\r\n const addressData = {\r\n formatted_address: feature.properties?.label || '',\r\n coordinates: center,\r\n properties: feature.properties,\r\n building_id: feature.properties.gid?.replace('building-', ''),\r\n is_database_building: true,\r\n }\r\n\r\n if (map && center) {\r\n // Add marker to the center with editing capability\r\n // markerManager.create(center as [number, number], map)\r\n\r\n map.flyTo({\r\n center: addressData.coordinates,\r\n zoom: 18,\r\n speed: 1.5,\r\n })\r\n }\r\n\r\n return addressData\r\n }\r\n\r\n // Calculate center coordinates\r\n let center\r\n\r\n // Use bbox if available (more precise for areas)\r\n if (feature.bbox) {\r\n center = [\r\n feature.bbox[0] + (feature.bbox[2] - feature.bbox[0]) / 2,\r\n feature.bbox[1] + (feature.bbox[3] - feature.bbox[1]) / 2,\r\n ]\r\n }\r\n // Otherwise extract coordinates based on geometry type\r\n else if (feature.geometry?.type === 'Point') {\r\n center = (feature.geometry as any).coordinates\r\n }\r\n\r\n const addressData = {\r\n formatted_address: feature.properties?.label || feature.properties?.name || '',\r\n coordinates: center,\r\n properties: feature.properties,\r\n address_details: {\r\n name: feature.properties?.name,\r\n label: feature.properties?.label,\r\n locality: feature.properties?.locality,\r\n neighbourhood: feature.properties?.neighbourhood,\r\n region: feature.properties?.region,\r\n region_a: feature.properties?.region_a,\r\n country: feature.properties?.country,\r\n country_a: feature.properties?.country_a,\r\n postalcode: feature.properties?.postalcode,\r\n housenumber: feature.properties?.housenumber,\r\n street: feature.properties?.street,\r\n },\r\n geocode_earth_id: feature.properties?.gid, // Geocode Earth's unique id\r\n layer: feature.properties?.layer, // Type of place (address, venue, locality, etc.)\r\n confidence: feature.properties?.confidence, // Geocode Earth's confidence score\r\n match_type: feature.properties?.match_type, // How well the result matches the query\r\n }\r\n\r\n if (map && center) {\r\n // Add marker to the center with editing capability\r\n // markerManager.create(center as [number, number], map, { editing })\r\n\r\n if (feature.bbox) {\r\n map.fitBounds(feature.bbox, { speed: 2 })\r\n }\r\n else {\r\n map.flyTo({\r\n center: addressData.coordinates,\r\n zoom: 14, // Might be good idea to set zoom level depending on layer / type of place\r\n speed: 2,\r\n })\r\n }\r\n }\r\n\r\n return addressData\r\n}\r\n\r\n// Util function to get detailed address information\r\nexport const getDetailedAddress = async (coordinates: [number, number], countryCode?: string) => {\r\n const [longitude, latitude] = coordinates\r\n\r\n try {\r\n // Restrict to address-layer results (the original popover used layers=address) so\r\n // callers get a street address rather than the nearest venue/POI. Nominatim's zoom-18\r\n // reverse is already building-level, so this only refines the Pelias path.\r\n const features = await reverseGeocode(latitude.toString(), longitude.toString(), countryCode, { size: 1, layers: 'address' })\r\n return features.length > 0 ? features[0] : null\r\n }\r\n catch (error) {\r\n console.error('Error fetching detailed address:', error)\r\n return null\r\n }\r\n}\r\n\r\n// Convert a building object to a GeoJSON feature format compatible with handleLocationSelect\r\nexport const buildingToFeature = (building) => {\r\n const name = building.buildingName || ''\r\n\r\n // Validate coordinates - use the correct property names\r\n const longitude = Number.parseFloat(building.buildingLongitude)\r\n const latitude = Number.parseFloat(building.buildingLatitude)\r\n\r\n if (isNaN(longitude) || isNaN(latitude)) {\r\n console.error('Invalid building coordinates:', {\r\n longitude: building.buildingLongitude,\r\n latitude: building.buildingLatitude,\r\n buildingId: building.id,\r\n })\r\n return null\r\n }\r\n\r\n return {\r\n properties: {\r\n name: name,\r\n label: `${name}, ${[building.buildingAddress, building.buildingMunicipality, building.buildingCountrySubdivision].filter(Boolean).join(', ')}`,\r\n address: building.buildingAddress,\r\n municipality: building.buildingMunicipality,\r\n countrySubdivision: building.buildingCountrySubdivision,\r\n postalCode: building.buildingPostalCode,\r\n gid: `building-${building.id}`,\r\n },\r\n geometry: {\r\n type: 'Point',\r\n coordinates: [longitude, latitude],\r\n },\r\n is_database_building: true,\r\n }\r\n}\r\n\r\n// // Enhanced marker creation with editing capabilities\r\n// export const createGeocoderMarker = (coordinates: [number, number], map: any, options?: { editing?: boolean }) => {\r\n// const editing = options?.editing || false\r\n// const markerManager = getGeocoderMarkerManager()\r\n// markerManager.create(coordinates, map, { editing })\r\n// return markerManager\r\n// }\r\n\r\n// Helper function to remove the current marker\r\n// export const removeGeocoderMarker = (): void => {\r\n// const markerManager = getGeocoderMarkerManager()\r\n// markerManager.remove()\r\n// }\r\n"],"mappings":"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","names":["center","addressData"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/geocoder.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport { Feature, Point } from 'geojson'\r\nimport { MarkerManager } from './MarkerManager'\r\nimport { autocompleteGeocode, reverseGeocode } from './geocoding'\r\n\r\n// Global marker manager instance for geocoder\r\nlet geocoderMarkerManager: MarkerManager | null = null\r\n\r\n// Helper function to get or create the marker manager\r\nconst getGeocoderMarkerManager = (): MarkerManager => {\r\n if (!geocoderMarkerManager) {\r\n geocoderMarkerManager = new MarkerManager()\r\n }\r\n return geocoderMarkerManager\r\n}\r\n\r\n// Convert longitude and latitude into Municipality and Country Subdivision\r\nexport const getMunicipalityAndProvince = async (latitude: string, longitude: string, countryCode?: string) => {\r\n try {\r\n const features = await reverseGeocode(latitude, longitude, countryCode, { size: 1, coarse: true })\r\n\r\n if (features.length > 0) {\r\n const properties = features[0].properties as any\r\n\r\n const municipality = properties.locality || properties.neighbourhood || properties.county || ''\r\n const countrySubdivision = properties.region_a || properties.region || '' // region_a gives abbreviation like \"ON\", \"BC\"\r\n\r\n return { municipality, countrySubdivision }\r\n }\r\n\r\n return { municipality: '', countrySubdivision: '' }\r\n }\r\n catch (error) {\r\n console.error('Error fetching municipality and country subdivision:', error)\r\n return { municipality: '', countrySubdivision: '' }\r\n }\r\n}\r\n\r\n// Fetch address suggestions from the active autocomplete provider\r\nexport const fetchSuggestions = async (input: string, countryCode?: string) => {\r\n if (!input || input.length < 3) {\r\n return []\r\n }\r\n\r\n try {\r\n return await autocompleteGeocode(input, countryCode, 5)\r\n }\r\n catch (error) {\r\n console.error('Error fetching address suggestions:', error)\r\n return []\r\n }\r\n}\r\n\r\n// Parse location details for better display\r\nexport const parseLocation = (feature: Feature) => {\r\n const locationName = feature.properties?.name || ''\r\n const fullLabel = feature.properties?.label || ''\r\n\r\n // Try to extract location details from properties\r\n const properties = feature.properties\r\n let regionDetails = ''\r\n\r\n if (properties) {\r\n const locality = properties.locality\r\n const region = properties.region // Full countrySubdivision name\r\n const region_a = properties.region_a // CountrySubdivision abbreviation (ON, BC, etc.)\r\n const country = properties.country\r\n const country_a = properties.country_a // Country abbreviation (CA)\r\n\r\n // Build region details similar to your original format\r\n if (locality && region_a && country_a) {\r\n regionDetails = `${locality}, ${region_a}, ${country_a}`\r\n }\r\n else if (locality && region && country) {\r\n regionDetails = `${locality}, ${region}, ${country}`\r\n }\r\n else {\r\n // Fallback: try to extract from the full label\r\n const parts = fullLabel.split(', ')\r\n if (parts.length > 1) {\r\n regionDetails = parts.slice(1, 3).join(', ')\r\n }\r\n }\r\n }\r\n\r\n return {\r\n name: locationName,\r\n region: regionDetails,\r\n fullLabel: fullLabel,\r\n }\r\n}\r\n\r\n// Handle suggestion selection and map movement\r\nexport const handleLocationSelect = (feature: Feature, map: any, type: string, options?: { editing?: boolean }) => {\r\n const editing = options?.editing || false\r\n const markerManager = getGeocoderMarkerManager()\r\n\r\n // Handle feature with is_database_building flag\r\n if (type === 'dbBuilding') {\r\n const geometry = feature.geometry as Point\r\n const center = geometry.coordinates\r\n const addressData = {\r\n formatted_address: feature.properties?.label || '',\r\n coordinates: center,\r\n properties: feature.properties,\r\n building_id: feature.properties.gid?.replace('building-', ''),\r\n is_database_building: true,\r\n }\r\n\r\n if (map && center) {\r\n // Add marker to the center with editing capability\r\n // markerManager.create(center as [number, number], map)\r\n\r\n map.flyTo({\r\n center: addressData.coordinates,\r\n zoom: 18,\r\n speed: 1.5,\r\n })\r\n }\r\n\r\n return addressData\r\n }\r\n\r\n // Calculate center coordinates\r\n let center\r\n\r\n // Use bbox if available (more precise for areas)\r\n if (feature.bbox) {\r\n center = [\r\n feature.bbox[0] + (feature.bbox[2] - feature.bbox[0]) / 2,\r\n feature.bbox[1] + (feature.bbox[3] - feature.bbox[1]) / 2,\r\n ]\r\n }\r\n // Otherwise extract coordinates based on geometry type\r\n else if (feature.geometry?.type === 'Point') {\r\n center = (feature.geometry as any).coordinates\r\n }\r\n\r\n const addressData = {\r\n formatted_address: feature.properties?.label || feature.properties?.name || '',\r\n coordinates: center,\r\n properties: feature.properties,\r\n address_details: {\r\n name: feature.properties?.name,\r\n label: feature.properties?.label,\r\n locality: feature.properties?.locality,\r\n neighbourhood: feature.properties?.neighbourhood,\r\n region: feature.properties?.region,\r\n region_a: feature.properties?.region_a,\r\n country: feature.properties?.country,\r\n country_a: feature.properties?.country_a,\r\n postalcode: feature.properties?.postalcode,\r\n housenumber: feature.properties?.housenumber,\r\n street: feature.properties?.street,\r\n },\r\n geocode_earth_id: feature.properties?.gid, // Geocode Earth's unique id\r\n layer: feature.properties?.layer, // Type of place (address, venue, locality, etc.)\r\n confidence: feature.properties?.confidence, // Geocode Earth's confidence score\r\n match_type: feature.properties?.match_type, // How well the result matches the query\r\n }\r\n\r\n if (map && center) {\r\n // Add marker to the center with editing capability\r\n // markerManager.create(center as [number, number], map, { editing })\r\n\r\n if (feature.bbox) {\r\n map.fitBounds(feature.bbox, { speed: 2 })\r\n }\r\n else {\r\n map.flyTo({\r\n center: addressData.coordinates,\r\n zoom: 14, // Might be good idea to set zoom level depending on layer / type of place\r\n speed: 2,\r\n })\r\n }\r\n }\r\n\r\n return addressData\r\n}\r\n\r\n// Util function to get detailed address information\r\nexport const getDetailedAddress = async (coordinates: [number, number], countryCode?: string) => {\r\n const [longitude, latitude] = coordinates\r\n\r\n try {\r\n // Restrict to address-layer results (the original popover used layers=address) so\r\n // callers get a street address rather than the nearest venue/POI. Nominatim's zoom-18\r\n // reverse is already building-level, so this only refines the Pelias path.\r\n const features = await reverseGeocode(latitude.toString(), longitude.toString(), countryCode, { size: 1, layers: 'address' })\r\n return features.length > 0 ? features[0] : null\r\n }\r\n catch (error) {\r\n console.error('Error fetching detailed address:', error)\r\n return null\r\n }\r\n}\r\n\r\n// Convert a building object to a GeoJSON feature format compatible with handleLocationSelect\r\nexport const buildingToFeature = (building) => {\r\n const name = building.buildingName || ''\r\n\r\n // Validate coordinates - use the correct property names\r\n const longitude = Number.parseFloat(building.buildingLongitude)\r\n const latitude = Number.parseFloat(building.buildingLatitude)\r\n\r\n if (isNaN(longitude) || isNaN(latitude)) {\r\n console.error('Invalid building coordinates:', {\r\n longitude: building.buildingLongitude,\r\n latitude: building.buildingLatitude,\r\n buildingId: building.id,\r\n })\r\n return null\r\n }\r\n\r\n return {\r\n properties: {\r\n name: name,\r\n label: `${name}, ${[building.buildingAddress, building.buildingMunicipality, building.buildingCountrySubdivision].filter(Boolean).join(', ')}`,\r\n address: building.buildingAddress,\r\n municipality: building.buildingMunicipality,\r\n countrySubdivision: building.buildingCountrySubdivision,\r\n postalCode: building.buildingPostalCode,\r\n gid: `building-${building.id}`,\r\n },\r\n geometry: {\r\n type: 'Point',\r\n coordinates: [longitude, latitude],\r\n },\r\n is_database_building: true,\r\n }\r\n}\r\n\r\n// // Enhanced marker creation with editing capabilities\r\n// export const createGeocoderMarker = (coordinates: [number, number], map: any, options?: { editing?: boolean }) => {\r\n// const editing = options?.editing || false\r\n// const markerManager = getGeocoderMarkerManager()\r\n// markerManager.create(coordinates, map, { editing })\r\n// return markerManager\r\n// }\r\n\r\n// Helper function to remove the current marker\r\n// export const removeGeocoderMarker = (): void => {\r\n// const markerManager = getGeocoderMarkerManager()\r\n// markerManager.remove()\r\n// }\r\n"],"mappings":"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","names":["center","addressData"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/adapters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/adapters.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAGjC,eAAO,MAAM,kBAAkB,GAAI,WAAW,MAAM,KAAG,MAoBtD,CAAA;AAkCD,eAAO,MAAM,sBAAsB,GAAI,SAAS,GAAG,KAAG,OAuCrD,CAAA;AAGD,eAAO,MAAM,wBAAwB,GAAI,MAAM,GAAG,KAAG,OAkCpD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/adapters.ts"],"sourcesContent":["import { Feature } from 'geojson'\r\n\r\n// Map OSM place categories onto Pelias-style layer names (best effort, display-only).\r\nexport const osmCategoryToLayer = (category?: string): string => {\r\n switch (category) {\r\n case 'house':\r\n case 'building': return 'address'\r\n case 'street':\r\n case 'road': return 'street'\r\n case 'city':\r\n case 'town':\r\n case 'village':\r\n case 'hamlet':\r\n case 'locality': return 'locality'\r\n case 'district':\r\n case 'suburb':\r\n case 'neighbourhood': return 'neighbourhood'\r\n case 'county': return 'county'\r\n case 'state':\r\n case 'region': return 'region'\r\n case 'country': return 'country'\r\n default: return category || 'venue'\r\n }\r\n}\r\n\r\n// Photon (OSM) returns full subdivision names (\"Ontario\"); the rest of the app expects\r\n// Pelias-style abbreviations (\"ON\"). Map common North American ones so the public\r\n// fallback populates region_a the way Geocode Earth / Pelias do.\r\nconst SUBDIVISION_ABBREVIATIONS: Record<string, Record<string, string>> = {\r\n CA: {\r\n 'alberta': 'AB', 'british columbia': 'BC', 'manitoba': 'MB', 'new brunswick': 'NB',\r\n 'newfoundland and labrador': 'NL', 'northwest territories': 'NT', 'nova scotia': 'NS',\r\n 'nunavut': 'NU', 'ontario': 'ON', 'prince edward island': 'PE', 'quebec': 'QC',\r\n 'québec': 'QC', 'saskatchewan': 'SK', 'yukon': 'YT',\r\n },\r\n US: {\r\n 'alabama': 'AL', 'alaska': 'AK', 'arizona': 'AZ', 'arkansas': 'AR', 'california': 'CA',\r\n 'colorado': 'CO', 'connecticut': 'CT', 'delaware': 'DE', 'district of columbia': 'DC',\r\n 'florida': 'FL', 'georgia': 'GA', 'hawaii': 'HI', 'idaho': 'ID', 'illinois': 'IL',\r\n 'indiana': 'IN', 'iowa': 'IA', 'kansas': 'KS', 'kentucky': 'KY', 'louisiana': 'LA',\r\n 'maine': 'ME', 'maryland': 'MD', 'massachusetts': 'MA', 'michigan': 'MI', 'minnesota': 'MN',\r\n 'mississippi': 'MS', 'missouri': 'MO', 'montana': 'MT', 'nebraska': 'NE', 'nevada': 'NV',\r\n 'new hampshire': 'NH', 'new jersey': 'NJ', 'new mexico': 'NM', 'new york': 'NY',\r\n 'north carolina': 'NC', 'north dakota': 'ND', 'ohio': 'OH', 'oklahoma': 'OK', 'oregon': 'OR',\r\n 'pennsylvania': 'PA', 'rhode island': 'RI', 'south carolina': 'SC', 'south dakota': 'SD',\r\n 'tennessee': 'TN', 'texas': 'TX', 'utah': 'UT', 'vermont': 'VT', 'virginia': 'VA',\r\n 'washington': 'WA', 'west virginia': 'WV', 'wisconsin': 'WI', 'wyoming': 'WY',\r\n },\r\n}\r\n\r\nconst subdivisionAbbreviation = (countryCode: string, state?: string): string => {\r\n if (!state) return ''\r\n const table = SUBDIVISION_ABBREVIATIONS[(countryCode || '').toUpperCase()]\r\n return (table && table[state.trim().toLowerCase()]) || ''\r\n}\r\n\r\n// Normalize a Photon autocomplete feature into the Pelias feature shape.\r\nexport const normalizePhotonFeature = (feature: any): Feature => {\r\n const p = feature.properties || {}\r\n const region = p.state || ''\r\n const country = p.country || ''\r\n const country_a = (p.countrycode || '').toUpperCase()\r\n const region_a = subdivisionAbbreviation(country_a, region)\r\n const locality = p.city || p.town || p.village || p.district || ''\r\n const name = p.name || [p.housenumber, p.street].filter(Boolean).join(' ') || locality\r\n // Match the Pelias label shape (\"Name, City, ON, Country\") so label-parsing consumers work.\r\n const label = [name, locality && locality !== name ? locality : null, region_a || region, country]\r\n .filter(Boolean)\r\n .join(', ')\r\n\r\n // Photon `extent` is [west, north, east, south]; Pelias bbox is [west, south, east, north].\r\n const bbox: [number, number, number, number] | undefined = Array.isArray(p.extent) && p.extent.length === 4\r\n ? [p.extent[0], p.extent[3], p.extent[2], p.extent[1]]\r\n : undefined\r\n\r\n return {\r\n type: 'Feature',\r\n geometry: feature.geometry,\r\n ...(bbox ? { bbox } : {}),\r\n properties: {\r\n name,\r\n label,\r\n housenumber: p.housenumber,\r\n street: p.street,\r\n locality,\r\n neighbourhood: p.district,\r\n county: p.county,\r\n region,\r\n region_a, // mapped from the full subdivision name where known (SUBDIVISION_ABBREVIATIONS)\r\n country,\r\n country_a,\r\n postalcode: p.postcode,\r\n gid: p.osm_id != null ? `osm:${p.osm_type}:${p.osm_id}` : undefined,\r\n layer: osmCategoryToLayer(p.type),\r\n },\r\n } as Feature\r\n}\r\n\r\n// Normalize a Nominatim reverse result into the Pelias feature shape.\r\nexport const normalizeNominatimResult = (data: any): Feature => {\r\n const a = data.address || {}\r\n // ISO3166-2-lvl4 looks like \"CA-ON\"; the suffix is the Pelias region_a abbreviation.\r\n const region_a = (a['ISO3166-2-lvl4'] || '').split('-')[1] || ''\r\n const locality = a.city || a.town || a.village || a.municipality || a.suburb || a.neighbourhood || a.county || ''\r\n const name = a.road ? [a.house_number, a.road].filter(Boolean).join(' ') : (locality || (data.display_name || '').split(',')[0])\r\n\r\n // Nominatim boundingbox is [minlat, maxlat, minlon, maxlon]; Pelias bbox is [west, south, east, north].\r\n const bb = data.boundingbox\r\n const bbox: [number, number, number, number] | undefined = Array.isArray(bb) && bb.length === 4\r\n ? [Number(bb[2]), Number(bb[0]), Number(bb[3]), Number(bb[1])]\r\n : undefined\r\n\r\n return {\r\n type: 'Feature',\r\n geometry: { type: 'Point', coordinates: [Number(data.lon), Number(data.lat)] },\r\n ...(bbox ? { bbox } : {}),\r\n properties: {\r\n name,\r\n label: data.display_name || '',\r\n housenumber: a.house_number,\r\n street: a.road,\r\n locality,\r\n neighbourhood: a.neighbourhood || a.suburb,\r\n county: a.county,\r\n region: a.state,\r\n region_a,\r\n country: a.country,\r\n country_a: (a.country_code || '').toUpperCase(),\r\n postalcode: a.postcode,\r\n gid: data.osm_id != null ? `osm:${data.osm_type}:${data.osm_id}` : undefined,\r\n layer: osmCategoryToLayer(data.addresstype || data.type),\r\n },\r\n } as Feature\r\n}\r\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/adapters.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport { Feature } from 'geojson'\r\n\r\n// Map OSM place categories onto Pelias-style layer names (best effort, display-only).\r\nexport const osmCategoryToLayer = (category?: string): string => {\r\n switch (category) {\r\n case 'house':\r\n case 'building': return 'address'\r\n case 'street':\r\n case 'road': return 'street'\r\n case 'city':\r\n case 'town':\r\n case 'village':\r\n case 'hamlet':\r\n case 'locality': return 'locality'\r\n case 'district':\r\n case 'suburb':\r\n case 'neighbourhood': return 'neighbourhood'\r\n case 'county': return 'county'\r\n case 'state':\r\n case 'region': return 'region'\r\n case 'country': return 'country'\r\n default: return category || 'venue'\r\n }\r\n}\r\n\r\n// Photon (OSM) returns full subdivision names (\"Ontario\"); the rest of the app expects\r\n// Pelias-style abbreviations (\"ON\"). Map common North American ones so the public\r\n// fallback populates region_a the way Geocode Earth / Pelias do.\r\nconst SUBDIVISION_ABBREVIATIONS: Record<string, Record<string, string>> = {\r\n CA: {\r\n 'alberta': 'AB', 'british columbia': 'BC', 'manitoba': 'MB', 'new brunswick': 'NB',\r\n 'newfoundland and labrador': 'NL', 'northwest territories': 'NT', 'nova scotia': 'NS',\r\n 'nunavut': 'NU', 'ontario': 'ON', 'prince edward island': 'PE', 'quebec': 'QC',\r\n 'québec': 'QC', 'saskatchewan': 'SK', 'yukon': 'YT',\r\n },\r\n US: {\r\n 'alabama': 'AL', 'alaska': 'AK', 'arizona': 'AZ', 'arkansas': 'AR', 'california': 'CA',\r\n 'colorado': 'CO', 'connecticut': 'CT', 'delaware': 'DE', 'district of columbia': 'DC',\r\n 'florida': 'FL', 'georgia': 'GA', 'hawaii': 'HI', 'idaho': 'ID', 'illinois': 'IL',\r\n 'indiana': 'IN', 'iowa': 'IA', 'kansas': 'KS', 'kentucky': 'KY', 'louisiana': 'LA',\r\n 'maine': 'ME', 'maryland': 'MD', 'massachusetts': 'MA', 'michigan': 'MI', 'minnesota': 'MN',\r\n 'mississippi': 'MS', 'missouri': 'MO', 'montana': 'MT', 'nebraska': 'NE', 'nevada': 'NV',\r\n 'new hampshire': 'NH', 'new jersey': 'NJ', 'new mexico': 'NM', 'new york': 'NY',\r\n 'north carolina': 'NC', 'north dakota': 'ND', 'ohio': 'OH', 'oklahoma': 'OK', 'oregon': 'OR',\r\n 'pennsylvania': 'PA', 'rhode island': 'RI', 'south carolina': 'SC', 'south dakota': 'SD',\r\n 'tennessee': 'TN', 'texas': 'TX', 'utah': 'UT', 'vermont': 'VT', 'virginia': 'VA',\r\n 'washington': 'WA', 'west virginia': 'WV', 'wisconsin': 'WI', 'wyoming': 'WY',\r\n },\r\n}\r\n\r\nconst subdivisionAbbreviation = (countryCode: string, state?: string): string => {\r\n if (!state) return ''\r\n const table = SUBDIVISION_ABBREVIATIONS[(countryCode || '').toUpperCase()]\r\n return (table && table[state.trim().toLowerCase()]) || ''\r\n}\r\n\r\n// Normalize a Photon autocomplete feature into the Pelias feature shape.\r\nexport const normalizePhotonFeature = (feature: any): Feature => {\r\n const p = feature.properties || {}\r\n const region = p.state || ''\r\n const country = p.country || ''\r\n const country_a = (p.countrycode || '').toUpperCase()\r\n const region_a = subdivisionAbbreviation(country_a, region)\r\n const locality = p.city || p.town || p.village || p.district || ''\r\n const name = p.name || [p.housenumber, p.street].filter(Boolean).join(' ') || locality\r\n // Match the Pelias label shape (\"Name, City, ON, Country\") so label-parsing consumers work.\r\n const label = [name, locality && locality !== name ? locality : null, region_a || region, country]\r\n .filter(Boolean)\r\n .join(', ')\r\n\r\n // Photon `extent` is [west, north, east, south]; Pelias bbox is [west, south, east, north].\r\n const bbox: [number, number, number, number] | undefined = Array.isArray(p.extent) && p.extent.length === 4\r\n ? [p.extent[0], p.extent[3], p.extent[2], p.extent[1]]\r\n : undefined\r\n\r\n return {\r\n type: 'Feature',\r\n geometry: feature.geometry,\r\n ...(bbox ? { bbox } : {}),\r\n properties: {\r\n name,\r\n label,\r\n housenumber: p.housenumber,\r\n street: p.street,\r\n locality,\r\n neighbourhood: p.district,\r\n county: p.county,\r\n region,\r\n region_a, // mapped from the full subdivision name where known (SUBDIVISION_ABBREVIATIONS)\r\n country,\r\n country_a,\r\n postalcode: p.postcode,\r\n gid: p.osm_id != null ? `osm:${p.osm_type}:${p.osm_id}` : undefined,\r\n layer: osmCategoryToLayer(p.type),\r\n },\r\n } as Feature\r\n}\r\n\r\n// Normalize a Nominatim reverse result into the Pelias feature shape.\r\nexport const normalizeNominatimResult = (data: any): Feature => {\r\n const a = data.address || {}\r\n // ISO3166-2-lvl4 looks like \"CA-ON\"; the suffix is the Pelias region_a abbreviation.\r\n const region_a = (a['ISO3166-2-lvl4'] || '').split('-')[1] || ''\r\n const locality = a.city || a.town || a.village || a.municipality || a.suburb || a.neighbourhood || a.county || ''\r\n const name = a.road ? [a.house_number, a.road].filter(Boolean).join(' ') : (locality || (data.display_name || '').split(',')[0])\r\n\r\n // Nominatim boundingbox is [minlat, maxlat, minlon, maxlon]; Pelias bbox is [west, south, east, north].\r\n const bb = data.boundingbox\r\n const bbox: [number, number, number, number] | undefined = Array.isArray(bb) && bb.length === 4\r\n ? [Number(bb[2]), Number(bb[0]), Number(bb[3]), Number(bb[1])]\r\n : undefined\r\n\r\n return {\r\n type: 'Feature',\r\n geometry: { type: 'Point', coordinates: [Number(data.lon), Number(data.lat)] },\r\n ...(bbox ? { bbox } : {}),\r\n properties: {\r\n name,\r\n label: data.display_name || '',\r\n housenumber: a.house_number,\r\n street: a.road,\r\n locality,\r\n neighbourhood: a.neighbourhood || a.suburb,\r\n county: a.county,\r\n region: a.state,\r\n region_a,\r\n country: a.country,\r\n country_a: (a.country_code || '').toUpperCase(),\r\n postalcode: a.postcode,\r\n gid: data.osm_id != null ? `osm:${data.osm_type}:${data.osm_id}` : undefined,\r\n layer: osmCategoryToLayer(data.addresstype || data.type),\r\n },\r\n } as Feature\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAMO,MAAM,qBAAqB,CAAC,aAA8B;AAC/D,UAAQ,UAAU;AAAA,IAChB,KAAK;AAAA,IACL,KAAK;AAAY,aAAO;AAAA,IACxB,KAAK;AAAA,IACL,KAAK;AAAQ,aAAO;AAAA,IACpB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAY,aAAO;AAAA,IACxB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAiB,aAAO;AAAA,IAC7B,KAAK;AAAU,aAAO;AAAA,IACtB,KAAK;AAAA,IACL,KAAK;AAAU,aAAO;AAAA,IACtB,KAAK;AAAW,aAAO;AAAA,IACvB;AAAS,aAAO,YAAY;AAAA,EAC9B;AACF;AAKA,MAAM,4BAAoE;AAAA,EACxE,IAAI;AAAA,IACF,WAAW;AAAA,IAAM,oBAAoB;AAAA,IAAM,YAAY;AAAA,IAAM,iBAAiB;AAAA,IAC9E,6BAA6B;AAAA,IAAM,yBAAyB;AAAA,IAAM,eAAe;AAAA,IACjF,WAAW;AAAA,IAAM,WAAW;AAAA,IAAM,wBAAwB;AAAA,IAAM,UAAU;AAAA,IAC1E,aAAU;AAAA,IAAM,gBAAgB;AAAA,IAAM,SAAS;AAAA,EACjD;AAAA,EACA,IAAI;AAAA,IACF,WAAW;AAAA,IAAM,UAAU;AAAA,IAAM,WAAW;AAAA,IAAM,YAAY;AAAA,IAAM,cAAc;AAAA,IAClF,YAAY;AAAA,IAAM,eAAe;AAAA,IAAM,YAAY;AAAA,IAAM,wBAAwB;AAAA,IACjF,WAAW;AAAA,IAAM,WAAW;AAAA,IAAM,UAAU;AAAA,IAAM,SAAS;AAAA,IAAM,YAAY;AAAA,IAC7E,WAAW;AAAA,IAAM,QAAQ;AAAA,IAAM,UAAU;AAAA,IAAM,YAAY;AAAA,IAAM,aAAa;AAAA,IAC9E,SAAS;AAAA,IAAM,YAAY;AAAA,IAAM,iBAAiB;AAAA,IAAM,YAAY;AAAA,IAAM,aAAa;AAAA,IACvF,eAAe;AAAA,IAAM,YAAY;AAAA,IAAM,WAAW;AAAA,IAAM,YAAY;AAAA,IAAM,UAAU;AAAA,IACpF,iBAAiB;AAAA,IAAM,cAAc;AAAA,IAAM,cAAc;AAAA,IAAM,YAAY;AAAA,IAC3E,kBAAkB;AAAA,IAAM,gBAAgB;AAAA,IAAM,QAAQ;AAAA,IAAM,YAAY;AAAA,IAAM,UAAU;AAAA,IACxF,gBAAgB;AAAA,IAAM,gBAAgB;AAAA,IAAM,kBAAkB;AAAA,IAAM,gBAAgB;AAAA,IACpF,aAAa;AAAA,IAAM,SAAS;AAAA,IAAM,QAAQ;AAAA,IAAM,WAAW;AAAA,IAAM,YAAY;AAAA,IAC7E,cAAc;AAAA,IAAM,iBAAiB;AAAA,IAAM,aAAa;AAAA,IAAM,WAAW;AAAA,EAC3E;AACF;AAEA,MAAM,0BAA0B,CAAC,aAAqB,UAA2B;AAC/E,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,QAAQ,2BAA2B,eAAe,IAAI,YAAY,CAAC;AACzE,SAAQ,SAAS,MAAM,MAAM,KAAK,EAAE,YAAY,CAAC,KAAM;AACzD;AAGO,MAAM,yBAAyB,CAAC,YAA0B;AAC/D,QAAM,IAAI,QAAQ,cAAc,CAAC;AACjC,QAAM,SAAS,EAAE,SAAS;AAC1B,QAAM,UAAU,EAAE,WAAW;AAC7B,QAAM,aAAa,EAAE,eAAe,IAAI,YAAY;AACpD,QAAM,WAAW,wBAAwB,WAAW,MAAM;AAC1D,QAAM,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY;AAChE,QAAM,OAAO,EAAE,QAAQ,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK;AAE9E,QAAM,QAAQ,CAAC,MAAM,YAAY,aAAa,OAAO,WAAW,MAAM,YAAY,QAAQ,OAAO,EAC9F,OAAO,OAAO,EACd,KAAK,IAAI;AAGZ,QAAM,OAAqD,MAAM,QAAQ,EAAE,MAAM,KAAK,EAAE,OAAO,WAAW,IACtG,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IACnD;AAEJ,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU,QAAQ;AAAA,KACd,OAAO,EAAE,KAAK,IAAI,CAAC,IAHlB;AAAA,IAIL,YAAY;AAAA,MACV;AAAA,MACA;AAAA,MACA,aAAa,EAAE;AAAA,MACf,QAAQ,EAAE;AAAA,MACV;AAAA,MACA,eAAe,EAAE;AAAA,MACjB,QAAQ,EAAE;AAAA,MACV;AAAA,MACA;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY,EAAE;AAAA,MACd,KAAK,EAAE,UAAU,OAAO,OAAO,EAAE,QAAQ,IAAI,EAAE,MAAM,KAAK;AAAA,MAC1D,OAAO,mBAAmB,EAAE,IAAI;AAAA,IAClC;AAAA,EACF;AACF;AAGO,MAAM,2BAA2B,CAAC,SAAuB;AAC9D,QAAM,IAAI,KAAK,WAAW,CAAC;AAE3B,QAAM,YAAY,EAAE,gBAAgB,KAAK,IAAI,MAAM,GAAG,EAAE,CAAC,KAAK;AAC9D,QAAM,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU;AAC/G,QAAM,OAAO,EAAE,OAAO,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,IAAK,aAAa,KAAK,gBAAgB,IAAI,MAAM,GAAG,EAAE,CAAC;AAG9H,QAAM,KAAK,KAAK;AAChB,QAAM,OAAqD,MAAM,QAAQ,EAAE,KAAK,GAAG,WAAW,IAC1F,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,IAC3D;AAEJ,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU,EAAE,MAAM,SAAS,aAAa,CAAC,OAAO,KAAK,GAAG,GAAG,OAAO,KAAK,GAAG,CAAC,EAAE;AAAA,KACzE,OAAO,EAAE,KAAK,IAAI,CAAC,IAHlB;AAAA,IAIL,YAAY;AAAA,MACV;AAAA,MACA,OAAO,KAAK,gBAAgB;AAAA,MAC5B,aAAa,EAAE;AAAA,MACf,QAAQ,EAAE;AAAA,MACV;AAAA,MACA,eAAe,EAAE,iBAAiB,EAAE;AAAA,MACpC,QAAQ,EAAE;AAAA,MACV,QAAQ,EAAE;AAAA,MACV;AAAA,MACA,SAAS,EAAE;AAAA,MACX,YAAY,EAAE,gBAAgB,IAAI,YAAY;AAAA,MAC9C,YAAY,EAAE;AAAA,MACd,KAAK,KAAK,UAAU,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,MAAM,KAAK;AAAA,MACnE,OAAO,mBAAmB,KAAK,eAAe,KAAK,IAAI;AAAA,IACzD;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/config.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,qBAAqB,QAAgD,CAAA;AAKlF,eAAO,MAAM,UAAU,QAAmE,CAAA;AAC1F,eAAO,MAAM,aAAa,QAAiF,CAAA;AAG3G,eAAO,MAAM,WAAW,QAA2E,CAAA;AACnG,eAAO,MAAM,UAAU,SAAuB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/config.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\r\n// Geocoding provider resolution\r\n//\r\n// Geocode Earth is hosted Pelias, so it and a self-hosted Pelias instance share\r\n// one code path (`/v1/autocomplete`, `/v1/reverse`, and the same response shape).\r\n// When neither a key nor a self-hosted URL is configured we fall back to free,\r\n// no-key public OSM services so self-hosters get working geocoding out of the box:\r\n// - autocomplete -> Photon (komoot), which is built for per-keystroke search.\r\n// - reverse -> Nominatim, fine for occasional point lookups.\r\n// (Nominatim's usage policy forbids autocomplete-style traffic, which is why\r\n// Photon handles suggestions.) Both responses are normalized by ./adapters into\r\n// the Pelias property shape (`locality`, `region_a`, `country_a`, `label`, ...)\r\n// that parseLocation / handleLocationSelect already expect.\r\n// ---------------------------------------------------------------------------\r\n\r\nexport const GEOCODE_EARTH_API_KEY = process.env.NEXT_PUBLIC_GEOCODE_EARTH_API_KEY\r\n// Self-hosted Pelias-compatible endpoint (no key). e.g. https://pelias.example.com\r\nconst PELIAS_URL = process.env.NEXT_PUBLIC_GEOCODER_URL\r\n// Public OSM fallbacks. Default to the community instances; self-hosters can point at\r\n// their own Photon/Nominatim via env to avoid the public instances' rate limits.\r\nexport const PHOTON_URL = process.env.NEXT_PUBLIC_PHOTON_URL || 'https://photon.komoot.io'\r\nexport const NOMINATIM_URL = process.env.NEXT_PUBLIC_NOMINATIM_URL || 'https://nominatim.openstreetmap.org'\r\n\r\n// Key wins (best quality), then self-hosted Pelias, otherwise public OSM.\r\nexport const PELIAS_BASE = GEOCODE_EARTH_API_KEY ? 'https://api.geocode.earth' : PELIAS_URL || null\r\nexport const USE_PELIAS = Boolean(PELIAS_BASE)\r\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/config.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\n// ---------------------------------------------------------------------------\r\n// Geocoding provider resolution\r\n//\r\n// Geocode Earth is hosted Pelias, so it and a self-hosted Pelias instance share\r\n// one code path (`/v1/autocomplete`, `/v1/reverse`, and the same response shape).\r\n// When neither a key nor a self-hosted URL is configured we fall back to free,\r\n// no-key public OSM services so self-hosters get working geocoding out of the box:\r\n// - autocomplete -> Photon (komoot), which is built for per-keystroke search.\r\n// - reverse -> Nominatim, fine for occasional point lookups.\r\n// (Nominatim's usage policy forbids autocomplete-style traffic, which is why\r\n// Photon handles suggestions.) Both responses are normalized by ./adapters into\r\n// the Pelias property shape (`locality`, `region_a`, `country_a`, `label`, ...)\r\n// that parseLocation / handleLocationSelect already expect.\r\n// ---------------------------------------------------------------------------\r\n\r\nexport const GEOCODE_EARTH_API_KEY = process.env.NEXT_PUBLIC_GEOCODE_EARTH_API_KEY\r\n// Self-hosted Pelias-compatible endpoint (no key). e.g. https://pelias.example.com\r\nconst PELIAS_URL = process.env.NEXT_PUBLIC_GEOCODER_URL\r\n// Public OSM fallbacks. Default to the community instances; self-hosters can point at\r\n// their own Photon/Nominatim via env to avoid the public instances' rate limits.\r\nexport const PHOTON_URL = process.env.NEXT_PUBLIC_PHOTON_URL || 'https://photon.komoot.io'\r\nexport const NOMINATIM_URL = process.env.NEXT_PUBLIC_NOMINATIM_URL || 'https://nominatim.openstreetmap.org'\r\n\r\n// Key wins (best quality), then self-hosted Pelias, otherwise public OSM.\r\nexport const PELIAS_BASE = GEOCODE_EARTH_API_KEY ? 'https://api.geocode.earth' : PELIAS_URL || null\r\nexport const USE_PELIAS = Boolean(PELIAS_BASE)\r\n"],"mappings":"AAkBO,MAAM,wBAAwB,QAAQ,IAAI;AAEjD,MAAM,aAAa,QAAQ,IAAI;AAGxB,MAAM,aAAa,QAAQ,IAAI,0BAA0B;AACzD,MAAM,gBAAgB,QAAQ,IAAI,6BAA6B;AAG/D,MAAM,cAAc,wBAAwB,8BAA8B,cAAc;AACxF,MAAM,aAAa,QAAQ,WAAW;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAiCjC,eAAO,MAAM,mBAAmB,GAAU,MAAM,MAAM,EAAE,aAAa,MAAM,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,OAAO,EAAE,CAU5G,CAAA;AAED,eAAO,MAAM,cAAc,GACzB,UAAU,MAAM,EAChB,WAAW,MAAM,EACjB,aAAa,MAAM,EACnB,2BAAsC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,KAC9F,OAAO,CAAC,OAAO,EAAE,CAUnB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/index.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/index.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport { Feature } from 'geojson'\r\nimport { USE_PELIAS } from './config'\r\nimport { peliasAutocomplete, peliasReverse } from './pelias'\r\nimport { photonAutocomplete, nominatimReverse } from './osm'\r\n\r\n// Provider-agnostic entry points. The preferred provider (Geocode Earth or a\r\n// self-hosted Pelias) is resolved in ./config from env vars; if it fails we fall\r\n// back to the free public OSM services so address search keeps working.\r\n//\r\n// A bad/expired/origin-restricted key surfaces as a 401/403. Autocomplete fires\r\n// on every keystroke, so once we see an auth failure we stop retrying the keyed\r\n// provider for the rest of the session and serve results directly from public OSM.\r\nlet peliasAuthFailed = false\r\n\r\nconst peliasActive = (): boolean => USE_PELIAS && !peliasAuthFailed\r\n\r\nconst isAuthError = (error: unknown): boolean => {\r\n const message = error instanceof Error ? error.message : String(error)\r\n return message.includes('401') || message.includes('403')\r\n}\r\n\r\nconst handlePeliasFailure = (error: unknown, fallbackName: string): void => {\r\n if (isAuthError(error)) {\r\n peliasAuthFailed = true\r\n console.warn(\r\n `Geocoder: the configured provider rejected the API key (auth error). ` +\r\n `Falling back to public OSM services (Photon/Nominatim) for the rest of this session.`,\r\n )\r\n } else {\r\n console.warn(`Geocoder: provider request failed; falling back to ${fallbackName}.`, error)\r\n }\r\n}\r\n\r\nexport const autocompleteGeocode = async (text: string, countryCode: string, size: number): Promise<Feature[]> => {\r\n if (peliasActive()) {\r\n try {\r\n return await peliasAutocomplete(text, countryCode, size)\r\n }\r\n catch (error) {\r\n handlePeliasFailure(error, 'Photon')\r\n }\r\n }\r\n return photonAutocomplete(text, countryCode, size)\r\n}\r\n\r\nexport const reverseGeocode = async (\r\n latitude: string,\r\n longitude: string,\r\n countryCode: string,\r\n { size = 1, coarse = false, layers }: { size?: number; coarse?: boolean; layers?: string } = {},\r\n): Promise<Feature[]> => {\r\n if (peliasActive()) {\r\n try {\r\n return await peliasReverse(latitude, longitude, countryCode, { size, coarse, layers })\r\n }\r\n catch (error) {\r\n handlePeliasFailure(error, 'Nominatim')\r\n }\r\n }\r\n return nominatimReverse(latitude, longitude, { coarse })\r\n}\r\n"],"mappings":"AAIA,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB,qBAAqB;AAClD,SAAS,oBAAoB,wBAAwB;AASrD,IAAI,mBAAmB;AAEvB,MAAM,eAAe,MAAe,cAAc,CAAC;AAEnD,MAAM,cAAc,CAAC,UAA4B;AAC/C,QAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,SAAO,QAAQ,SAAS,KAAK,KAAK,QAAQ,SAAS,KAAK;AAC1D;AAEA,MAAM,sBAAsB,CAAC,OAAgB,iBAA+B;AAC1E,MAAI,YAAY,KAAK,GAAG;AACtB,uBAAmB;AACnB,YAAQ;AAAA,MACN;AAAA,IAEF;AAAA,EACF,OAAO;AACL,YAAQ,KAAK,sDAAsD,YAAY,KAAK,KAAK;AAAA,EAC3F;AACF;AAEO,MAAM,sBAAsB,OAAO,MAAc,aAAqB,SAAqC;AAChH,MAAI,aAAa,GAAG;AAClB,QAAI;AACF,aAAO,MAAM,mBAAmB,MAAM,aAAa,IAAI;AAAA,IACzD,SACO,OAAO;AACZ,0BAAoB,OAAO,QAAQ;AAAA,IACrC;AAAA,EACF;AACA,SAAO,mBAAmB,MAAM,aAAa,IAAI;AACnD;AAEO,MAAM,iBAAiB,OAC5B,UACA,WACA,aACA,EAAE,OAAO,GAAG,SAAS,OAAO,OAAO,IAA0D,CAAC,MACvE;AACvB,MAAI,aAAa,GAAG;AAClB,QAAI;AACF,aAAO,MAAM,cAAc,UAAU,WAAW,aAAa,EAAE,MAAM,QAAQ,OAAO,CAAC;AAAA,IACvF,SACO,OAAO;AACZ,0BAAoB,OAAO,WAAW;AAAA,IACxC;AAAA,EACF;AACA,SAAO,iBAAiB,UAAU,WAAW,EAAE,OAAO,CAAC;AACzD;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"osm.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/osm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"osm.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/osm.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAOjC,eAAO,MAAM,kBAAkB,GAAU,MAAM,MAAM,EAAE,aAAa,MAAM,GAAG,SAAS,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,OAAO,EAAE,CAoBvH,CAAA;AAED,eAAO,MAAM,gBAAgB,GAC3B,UAAU,MAAM,EAChB,WAAW,MAAM,EACjB,YAAY;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,KAC9B,OAAO,CAAC,OAAO,EAAE,CAenB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/osm.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/osm.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport { Feature } from 'geojson'\r\nimport { PHOTON_URL, NOMINATIM_URL } from './config'\r\nimport { normalizePhotonFeature, normalizeNominatimResult } from './adapters'\r\n\r\n// Free, no-key public OSM fallbacks. Photon serves autocomplete (it is built for\r\n// per-keystroke search); Nominatim serves reverse lookups (occasional, single point).\r\n\r\nexport const photonAutocomplete = async (text: string, countryCode: string | undefined, size: number): Promise<Feature[]> => {\r\n // Photon has no country filter, so over-fetch and post-filter by country code.\r\n const params = new URLSearchParams({ q: text, limit: String(size * 2), lang: 'en' })\r\n\r\n const response = await fetch(`${PHOTON_URL}/api?${params}`)\r\n if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`)\r\n\r\n const data = await response.json()\r\n let features: Feature[] = (data.features || []).map(normalizePhotonFeature)\r\n\r\n if (countryCode) {\r\n const cc = countryCode.toUpperCase()\r\n const inCountry = features.filter(f => {\r\n const ca = (f.properties as any)?.country_a\r\n return !ca || ca === cc\r\n })\r\n if (inCountry.length) features = inCountry\r\n }\r\n\r\n return features.slice(0, size)\r\n}\r\n\r\nexport const nominatimReverse = async (\r\n latitude: string,\r\n longitude: string,\r\n { coarse }: { coarse: boolean },\r\n): Promise<Feature[]> => {\r\n const params = new URLSearchParams({\r\n format: 'jsonv2',\r\n lat: latitude,\r\n lon: longitude,\r\n addressdetails: '1',\r\n zoom: coarse ? '10' : '18', // coarse -> city level, otherwise building level\r\n })\r\n\r\n const response = await fetch(`${NOMINATIM_URL}/reverse?${params}`)\r\n if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`)\r\n\r\n const data = await response.json()\r\n if (!data || data.error || data.lat == null) return []\r\n return [normalizeNominatimResult(data)]\r\n}\r\n"],"mappings":"AAIA,SAAS,YAAY,qBAAqB;AAC1C,SAAS,wBAAwB,gCAAgC;AAK1D,MAAM,qBAAqB,OAAO,MAAc,aAAiC,SAAqC;AAE3H,QAAM,SAAS,IAAI,gBAAgB,EAAE,GAAG,MAAM,OAAO,OAAO,OAAO,CAAC,GAAG,MAAM,KAAK,CAAC;AAEnF,QAAM,WAAW,MAAM,MAAM,GAAG,UAAU,QAAQ,MAAM,EAAE;AAC1D,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,uBAAuB,SAAS,MAAM,EAAE;AAE1E,QAAM,OAAO,MAAM,SAAS,KAAK;AACjC,MAAI,YAAuB,KAAK,YAAY,CAAC,GAAG,IAAI,sBAAsB;AAE1E,MAAI,aAAa;AACf,UAAM,KAAK,YAAY,YAAY;AACnC,UAAM,YAAY,SAAS,OAAO,OAAK;AAtB3C;AAuBM,YAAM,MAAM,OAAE,eAAF,mBAAsB;AAClC,aAAO,CAAC,MAAM,OAAO;AAAA,IACvB,CAAC;AACD,QAAI,UAAU,OAAQ,YAAW;AAAA,EACnC;AAEA,SAAO,SAAS,MAAM,GAAG,IAAI;AAC/B;AAEO,MAAM,mBAAmB,OAC9B,UACA,WACA,EAAE,OAAO,MACc;AACvB,QAAM,SAAS,IAAI,gBAAgB;AAAA,IACjC,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,KAAK;AAAA,IACL,gBAAgB;AAAA,IAChB,MAAM,SAAS,OAAO;AAAA;AAAA,EACxB,CAAC;AAED,QAAM,WAAW,MAAM,MAAM,GAAG,aAAa,YAAY,MAAM,EAAE;AACjE,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,uBAAuB,SAAS,MAAM,EAAE;AAE1E,QAAM,OAAO,MAAM,SAAS,KAAK;AACjC,MAAI,CAAC,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAM,QAAO,CAAC;AACrD,SAAO,CAAC,yBAAyB,IAAI,CAAC;AACxC;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pelias.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/pelias.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pelias.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/pelias.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMjC,eAAO,MAAM,kBAAkB,GAAU,MAAM,MAAM,EAAE,aAAa,MAAM,GAAG,SAAS,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,OAAO,EAAE,CAavH,CAAA;AAED,eAAO,MAAM,aAAa,GACxB,UAAU,MAAM,EAChB,WAAW,MAAM,EACjB,aAAa,MAAM,GAAG,SAAS,EAC/B,0BAA0B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAC3E,OAAO,CAAC,OAAO,EAAE,CAiBnB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/pelias.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/pelias.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport { Feature } from 'geojson'\r\nimport { GEOCODE_EARTH_API_KEY, PELIAS_BASE } from './config'\r\n\r\n// Geocode Earth and self-hosted Pelias share this dialect; only the base URL and\r\n// the (optional) api_key differ. Responses already match the shape the app expects.\r\n\r\nexport const peliasAutocomplete = async (text: string, countryCode: string | undefined, size: number): Promise<Feature[]> => {\r\n const params = new URLSearchParams({\r\n 'text': text,\r\n 'size': String(size),\r\n })\r\n if (countryCode) params.set('boundary.country', countryCode.toUpperCase())\r\n if (GEOCODE_EARTH_API_KEY) params.set('api_key', GEOCODE_EARTH_API_KEY)\r\n\r\n const response = await fetch(`${PELIAS_BASE}/v1/autocomplete?${params}`)\r\n if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`)\r\n\r\n const geojson = await response.json()\r\n return geojson.features?.length ? geojson.features : []\r\n}\r\n\r\nexport const peliasReverse = async (\r\n latitude: string,\r\n longitude: string,\r\n countryCode: string | undefined,\r\n { size, coarse, layers }: { size: number; coarse: boolean; layers?: string },\r\n): Promise<Feature[]> => {\r\n const params = new URLSearchParams({\r\n 'point.lat': latitude,\r\n 'point.lon': longitude,\r\n 'size': String(size),\r\n })\r\n if (countryCode) params.set('boundary.country', countryCode.toUpperCase())\r\n // coarse (municipality-level) takes precedence; otherwise honor an explicit layer filter.\r\n if (coarse) params.set('layers', 'coarse')\r\n else if (layers) params.set('layers', layers)\r\n if (GEOCODE_EARTH_API_KEY) params.set('api_key', GEOCODE_EARTH_API_KEY)\r\n\r\n const response = await fetch(`${PELIAS_BASE}/v1/reverse?${params}`)\r\n if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`)\r\n\r\n const data = await response.json()\r\n return data.features?.length ? data.features : []\r\n}\r\n"],"mappings":"AAIA,SAAS,uBAAuB,mBAAmB;AAK5C,MAAM,qBAAqB,OAAO,MAAc,aAAiC,SAAqC;AAT7H;AAUE,QAAM,SAAS,IAAI,gBAAgB;AAAA,IACjC,QAAQ;AAAA,IACR,QAAQ,OAAO,IAAI;AAAA,EACrB,CAAC;AACD,MAAI,YAAa,QAAO,IAAI,oBAAoB,YAAY,YAAY,CAAC;AACzE,MAAI,sBAAuB,QAAO,IAAI,WAAW,qBAAqB;AAEtE,QAAM,WAAW,MAAM,MAAM,GAAG,WAAW,oBAAoB,MAAM,EAAE;AACvE,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,uBAAuB,SAAS,MAAM,EAAE;AAE1E,QAAM,UAAU,MAAM,SAAS,KAAK;AACpC,WAAO,aAAQ,aAAR,mBAAkB,UAAS,QAAQ,WAAW,CAAC;AACxD;AAEO,MAAM,gBAAgB,OAC3B,UACA,WACA,aACA,EAAE,MAAM,QAAQ,OAAO,MACA;AA7BzB;AA8BE,QAAM,SAAS,IAAI,gBAAgB;AAAA,IACjC,aAAa;AAAA,IACb,aAAa;AAAA,IACb,QAAQ,OAAO,IAAI;AAAA,EACrB,CAAC;AACD,MAAI,YAAa,QAAO,IAAI,oBAAoB,YAAY,YAAY,CAAC;AAEzE,MAAI,OAAQ,QAAO,IAAI,UAAU,QAAQ;AAAA,WAChC,OAAQ,QAAO,IAAI,UAAU,MAAM;AAC5C,MAAI,sBAAuB,QAAO,IAAI,WAAW,qBAAqB;AAEtE,QAAM,WAAW,MAAM,MAAM,GAAG,WAAW,eAAe,MAAM,EAAE;AAClE,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,uBAAuB,SAAS,MAAM,EAAE;AAE1E,QAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO,UAAK,aAAL,mBAAe,UAAS,KAAK,WAAW,CAAC;AAClD;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getOsmIdFromMartin.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/getOsmIdFromMartin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getOsmIdFromMartin.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/getOsmIdFromMartin.ts"],"names":[],"mappings":"AAGA,OAAO,UAAU,MAAM,aAAa,CAAA;AAEpC,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,UAAU,CAAC,GAAG,EACnB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CA4BjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/getOsmIdFromMartin.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/getOsmIdFromMartin.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport maplibregl from 'maplibre-gl' // or 'mapbox-gl'\r\n\r\nexport async function getOsmIdFromLatLng(\r\n map: maplibregl.Map,\r\n lat: number,\r\n lng: number,\r\n): Promise<number> {\r\n // Fly to the location with 1 second duration\r\n map.flyTo({ center: [lng, lat], zoom: 18, duration: 1000 })\r\n\r\n // Wait 2 seconds before querying features\r\n await new Promise(resolve => setTimeout(resolve, 2000))\r\n\r\n // Convert lat/lng to pixel coordinates\r\n const point = map.project([lng, lat])\r\n // Query features at the point\r\n const features = map.queryRenderedFeatures(point)\r\n\r\n // Find the first feature with osm_id\r\n const feature = features.find(f => f.properties && f.properties.osm_id)\r\n\r\n if (feature) {\r\n // Ensure osm_id is a number\r\n const osmId = Number(feature.properties.osm_id)\r\n if (isNaN(osmId)) {\r\n throw new TypeError('osm_id is not a valid number')\r\n }\r\n else {\r\n return osmId\r\n }\r\n }\r\n else {\r\n throw new Error('No feature with osm_id found at the given location')\r\n }\r\n}\r\n"],"mappings":"AAKA,eAAsB,mBACpB,KACA,KACA,KACiB;AAEjB,MAAI,MAAM,EAAE,QAAQ,CAAC,KAAK,GAAG,GAAG,MAAM,IAAI,UAAU,IAAK,CAAC;AAG1D,QAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,GAAI,CAAC;AAGtD,QAAM,QAAQ,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC;AAEpC,QAAM,WAAW,IAAI,sBAAsB,KAAK;AAGhD,QAAM,UAAU,SAAS,KAAK,OAAK,EAAE,cAAc,EAAE,WAAW,MAAM;AAEtE,MAAI,SAAS;AAEX,UAAM,QAAQ,OAAO,QAAQ,WAAW,MAAM;AAC9C,QAAI,MAAM,KAAK,GAAG;AAChB,YAAM,IAAI,UAAU,8BAA8B;AAAA,IACpD,OACK;AACH,aAAO;AAAA,IACT;AAAA,EACF,OACK;AACH,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AACF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getOsmIdbyCoordinates.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/getOsmIdbyCoordinates.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getOsmIdbyCoordinates.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/getOsmIdbyCoordinates.ts"],"names":[],"mappings":"AAGA,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgDxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/getOsmIdbyCoordinates.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/getOsmIdbyCoordinates.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nexport async function getOsmId(\r\n latitude: number,\r\n longitude: number,\r\n): Promise<number | null> {\r\n const nominatimApiUrl = 'https://nominatim.openstreetmap.org/reverse'\r\n\r\n const url = new URL(nominatimApiUrl)\r\n url.searchParams.append('format', 'json')\r\n url.searchParams.append('lat', latitude.toString())\r\n url.searchParams.append('lon', longitude.toString())\r\n\r\n // Set User-Agent and Referer headers\r\n const headers = {\r\n 'User-Agent': 'CDT-NA/1.0 (narellano@cims.carleton.ca)',\r\n }\r\n\r\n console.log(url.toString())\r\n\r\n // Wait at least 1000ms between requests\r\n await new Promise(resolve => setTimeout(resolve, 2000))\r\n\r\n try {\r\n const response = await fetch(url.toString(), { headers })\r\n\r\n if (!response.ok) {\r\n console.error(`HTTP error! Status: ${response.status}`)\r\n return null\r\n }\r\n\r\n const data = await response.json()\r\n console.log('Nominatim response:', data) // Debug: see full response\r\n\r\n if (data && (typeof data.osm_id === 'string' || typeof data.osm_id === 'number')) {\r\n const osmIdNum = Number(data.osm_id)\r\n if (isNaN(osmIdNum)) {\r\n console.warn('OSM ID is not a valid number:', data.osm_id)\r\n return null\r\n }\r\n else {\r\n return osmIdNum\r\n }\r\n }\r\n else {\r\n console.warn('No OSM ID found for the given coordinates in the response:', data)\r\n return null\r\n }\r\n }\r\n catch (error) {\r\n console.error('Error fetching OSM ID:', error)\r\n return null\r\n }\r\n}\r\n\r\n// Attribution: Data © OpenStreetMap contributors, ODbL license.\r\n"],"mappings":"AAGA,eAAsB,SACpB,UACA,WACwB;AACxB,QAAM,kBAAkB;AAExB,QAAM,MAAM,IAAI,IAAI,eAAe;AACnC,MAAI,aAAa,OAAO,UAAU,MAAM;AACxC,MAAI,aAAa,OAAO,OAAO,SAAS,SAAS,CAAC;AAClD,MAAI,aAAa,OAAO,OAAO,UAAU,SAAS,CAAC;AAGnD,QAAM,UAAU;AAAA,IACd,cAAc;AAAA,EAChB;AAEA,UAAQ,IAAI,IAAI,SAAS,CAAC;AAG1B,QAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,GAAI,CAAC;AAEtD,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,IAAI,SAAS,GAAG,EAAE,QAAQ,CAAC;AAExD,QAAI,CAAC,SAAS,IAAI;AAChB,cAAQ,MAAM,uBAAuB,SAAS,MAAM,EAAE;AACtD,aAAO;AAAA,IACT;AAEA,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,YAAQ,IAAI,uBAAuB,IAAI;AAEvC,QAAI,SAAS,OAAO,KAAK,WAAW,YAAY,OAAO,KAAK,WAAW,WAAW;AAChF,YAAM,WAAW,OAAO,KAAK,MAAM;AACnC,UAAI,MAAM,QAAQ,GAAG;AACnB,gBAAQ,KAAK,iCAAiC,KAAK,MAAM;AACzD,eAAO;AAAA,MACT,OACK;AACH,eAAO;AAAA,MACT;AAAA,IACF,OACK;AACH,cAAQ,KAAK,8DAA8D,IAAI;AAC/E,aAAO;AAAA,IACT;AAAA,EACF,SACO,OAAO;AACZ,YAAQ,MAAM,0BAA0B,KAAK;AAC7C,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapStyleCatalog.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/mapStyleCatalog.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mapStyleCatalog.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/mapStyleCatalog.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAErD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,EAMzC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAiC,CAAC;AA2DlE;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,kBAAkB,EAAE,OAAO,GAAG,QAAQ,EAAE,CA+B7E;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,EACzC,OAAO,EAAE,QAAQ,EAAE,GAClB,QAAQ,CAQV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/mapStyleCatalog.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/mapStyleCatalog.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport type { MapStyle } from '../../../../types/map'\r\n\r\n/**\r\n * Built-in map style catalog that is always available.\r\n * These are the default base styles available to all organizations.\r\n */\r\nexport const BUILT_IN_MAP_STYLES: MapStyle[] = [\r\n { name: 'Satellite', url: '/mapStyles/satellite.json' },\r\n// { name: 'Streets', url: '/mapStyles/streets.json' },\r\n { name: 'Dark', url: 'https://basemaps.cartocdn.com/gl/dark-matter-gl-style/style.json' },\r\n { name: 'Positron', url: 'https://basemaps.cartocdn.com/gl/positron-gl-style/style.json' },\r\n { name: 'Maplibre', url: 'https://demotiles.maplibre.org/style.json' },\r\n]\r\n\r\n/**\r\n * The default/fallback map style used when no style is selected or organization config is unavailable.\r\n */\r\nexport const DEFAULT_MAP_STYLE: MapStyle = BUILT_IN_MAP_STYLES[0]; // Satellite\r\n\r\n/**\r\n * Type guard to check if a value is a valid map style object.\r\n */\r\nconst isValidMapStyle = (value: unknown): value is MapStyle => {\r\n return (\r\n value !== null\r\n && typeof value === 'object'\r\n && typeof (value as any).url === 'string'\r\n && typeof (value as any).name === 'string'\r\n )\r\n}\r\n\r\n/**\r\n * Type guard to check if a string is a valid style URL format.\r\n */\r\nconst isValidStyleUrl = (url: string): boolean => {\r\n try {\r\n new URL(url)\r\n return /\\.(json|geojson)$/i.test(url) || url.includes('://')\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * Normalizes and validates a single style entry from organization config.\r\n * Returns a valid MapStyle or null if the entry is invalid.\r\n *\r\n * @param style - Raw style data from organization config\r\n * @returns Valid MapStyle or null\r\n */\r\nfunction normalizeStyleEntry(style: unknown): MapStyle | null {\r\n if (isValidMapStyle(style)) {\r\n const url = style.url.trim()\r\n if (isValidStyleUrl(url)) {\r\n return {\r\n name: String(style.name).substring(0, 100).trim(),\r\n url,\r\n }\r\n }\r\n }\r\n\r\n // Attempt recovery: if it's just a URL string, generate a name\r\n if (typeof style === 'string') {\r\n const url = style.trim()\r\n if (isValidStyleUrl(url)) {\r\n const styleName = url.replace('.json', '').split('/').pop() || 'Custom'\r\n return {\r\n name: styleName.charAt(0).toUpperCase() + styleName.slice(1),\r\n url,\r\n }\r\n }\r\n }\r\n\r\n return null\r\n}\r\n\r\n/**\r\n * Builds the complete map styles array by merging built-in styles with validated organization styles.\r\n * Deduplicates by URL, always keeps built-ins, and appends validated org styles.\r\n *\r\n * @param organizationStyles - Raw styles from organization config (unknown[])\r\n * @returns Array of valid MapStyle objects, always includes built-in styles\r\n */\r\nexport function buildMapStylesCatalog(organizationStyles: unknown): MapStyle[] {\r\n const catalog: MapStyle[] = [...BUILT_IN_MAP_STYLES]\r\n\r\n if (!Array.isArray(organizationStyles) || organizationStyles.length === 0) {\r\n return catalog\r\n }\r\n\r\n const invalidEntries: unknown[] = []\r\n\r\n organizationStyles.forEach((style) => {\r\n const normalized = normalizeStyleEntry(style)\r\n\r\n if (normalized) {\r\n // Deduplicate by URL\r\n if (!catalog.some((s) => s.url === normalized.url)) {\r\n catalog.push(normalized)\r\n }\r\n } else {\r\n invalidEntries.push(style)\r\n }\r\n })\r\n\r\n // Log a warning if any entries were invalid (non-blocking)\r\n if (invalidEntries.length > 0) {\r\n console.warn(\r\n `[Map Styles] Dropped ${invalidEntries.length} invalid organization style entries:`,\r\n invalidEntries\r\n )\r\n }\r\n\r\n return catalog\r\n}\r\n\r\n/**\r\n * Resolves the current map style safely.\r\n * If the current style URL is not in the catalog, falls back to the default.\r\n *\r\n * @param currentStyle - The currently selected map style\r\n * @param catalog - Available map styles\r\n * @returns Valid MapStyle from catalog or default\r\n */\r\nexport function resolveMapStyle(\r\n currentStyle: MapStyle | null | undefined,\r\n catalog: MapStyle[]\r\n): MapStyle {\r\n if (!currentStyle) {\r\n return DEFAULT_MAP_STYLE\r\n }\r\n\r\n // Check if current style is in catalog by URL\r\n const found = catalog.find((s) => s.url === currentStyle.url)\r\n return found || DEFAULT_MAP_STYLE\r\n}\r\n"],"mappings":"AASO,MAAM,sBAAmC;AAAA,EAC9C,EAAE,MAAM,aAAa,KAAK,4BAA4B;AAAA;AAAA,EAEtD,EAAE,MAAM,QAAQ,KAAK,mEAAmE;AAAA,EACxF,EAAE,MAAM,YAAY,KAAK,gEAAgE;AAAA,EACzF,EAAE,MAAM,YAAY,KAAK,4CAA4C;AACvE;AAKO,MAAM,oBAA8B,oBAAoB,CAAC;AAKhE,MAAM,kBAAkB,CAAC,UAAsC;AAC7D,SACE,UAAU,QACP,OAAO,UAAU,YACjB,OAAQ,MAAc,QAAQ,YAC9B,OAAQ,MAAc,SAAS;AAEtC;AAKA,MAAM,kBAAkB,CAAC,QAAyB;AAChD,MAAI;AACF,QAAI,IAAI,GAAG;AACX,WAAO,qBAAqB,KAAK,GAAG,KAAK,IAAI,SAAS,KAAK;AAAA,EAC7D,SAAQ;AACN,WAAO;AAAA,EACT;AACF;AASA,SAAS,oBAAoB,OAAiC;AAC5D,MAAI,gBAAgB,KAAK,GAAG;AAC1B,UAAM,MAAM,MAAM,IAAI,KAAK;AAC3B,QAAI,gBAAgB,GAAG,GAAG;AACxB,aAAO;AAAA,QACL,MAAM,OAAO,MAAM,IAAI,EAAE,UAAU,GAAG,GAAG,EAAE,KAAK;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,MAAM,MAAM,KAAK;AACvB,QAAI,gBAAgB,GAAG,GAAG;AACxB,YAAM,YAAY,IAAI,QAAQ,SAAS,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,KAAK;AAC/D,aAAO;AAAA,QACL,MAAM,UAAU,OAAO,CAAC,EAAE,YAAY,IAAI,UAAU,MAAM,CAAC;AAAA,QAC3D;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AASO,SAAS,sBAAsB,oBAAyC;AAC7E,QAAM,UAAsB,CAAC,GAAG,mBAAmB;AAEnD,MAAI,CAAC,MAAM,QAAQ,kBAAkB,KAAK,mBAAmB,WAAW,GAAG;AACzE,WAAO;AAAA,EACT;AAEA,QAAM,iBAA4B,CAAC;AAEnC,qBAAmB,QAAQ,CAAC,UAAU;AACpC,UAAM,aAAa,oBAAoB,KAAK;AAE5C,QAAI,YAAY;AAEd,UAAI,CAAC,QAAQ,KAAK,CAAC,MAAM,EAAE,QAAQ,WAAW,GAAG,GAAG;AAClD,gBAAQ,KAAK,UAAU;AAAA,MACzB;AAAA,IACF,OAAO;AACL,qBAAe,KAAK,KAAK;AAAA,IAC3B;AAAA,EACF,CAAC;AAGD,MAAI,eAAe,SAAS,GAAG;AAC7B,YAAQ;AAAA,MACN,wBAAwB,eAAe,MAAM;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAUO,SAAS,gBACd,cACA,SACU;AACV,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA,EACT;AAGA,QAAM,QAAQ,QAAQ,KAAK,CAAC,MAAM,EAAE,QAAQ,aAAa,GAAG;AAC5D,SAAO,SAAS;AAClB;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stringToColour.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/stringToColour.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stringToColour.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/stringToColour.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAEjE,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,EAAE,UAAU,KAAK,GAAG,KAAK,WA8DlE,CAAA;AA0BD,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,WAQ/C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/stringToColour.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/stringToColour.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport type { LayerColors } from '../../../../types/datasetTypes'\r\n\r\nexport const stringToColour = (str: string, variant?: 'min' | 'max') => {\r\n // Expanded palette: 36 map-friendly, colorblind-accessible, high-contrast colors\r\n // Carefully chosen for distinctiveness and good contrast with both black and white\r\n const palette = [\r\n '#1b9e77', // teal\r\n '#d95f02', // orange\r\n '#7570b3', // purple\r\n '#e7298a', // pink\r\n '#66a61e', // green\r\n '#e6ab02', // yellow\r\n '#a6761d', // brown\r\n '#377eb8', // blue\r\n '#ff7f00', // bright orange\r\n '#41b6c4', // cyan\r\n '#f46d43', // coral\r\n '#7fc97f', // light green\r\n '#beaed4', // lavender\r\n '#fdc086', // peach\r\n '#ffff99', // pale yellow\r\n '#386cb0', // strong blue\r\n '#f0027f', // magenta\r\n '#bf5b17', // dark brown\r\n '#6666ff', // periwinkle\r\n '#e41a1c', // strong red\r\n '#4daf4a', // vivid green\r\n '#984ea3', // deep purple\r\n '#ffea00', // vivid yellow\r\n '#a65628', // chestnut\r\n '#f781bf', // light magenta\r\n '#0173b2', // steel blue\r\n '#de8f05', // ochre\r\n '#029e73', // emerald\r\n '#d55e00', // vermillion\r\n '#cc78bc', // amethyst\r\n '#ca9161', // sand\r\n '#fbafe4', // pastel pink\r\n '#8dd3c7', // turquoise\r\n '#ccebc5', // mint\r\n ]\r\n\r\n // Simple hash to index\r\n let hash = 0\r\n for (let i = 0; i < str.length; i++) {\r\n hash = str.charCodeAt(i) + ((hash << 5) - hash)\r\n }\r\n const index = Math.abs(hash) % palette.length\r\n const baseColour = palette[index]\r\n\r\n // No default lightening, just use as-is for good contrast\r\n let colour = baseColour\r\n\r\n // Optionally adjust for variant\r\n if (variant === 'min') {\r\n // Slightly lighten color\r\n colour = lighten(colour, 0.3)\r\n }\r\n else if (variant === 'max') {\r\n // Slightly darken color\r\n colour = darken(colour, 0.3)\r\n }\r\n\r\n return colour\r\n}\r\n\r\n// Helper to lighten hex color\r\nfunction lighten(hex: string, amount: number) {\r\n return adjustColor(hex, amount)\r\n}\r\n\r\n// Helper to darken hex color\r\nfunction darken(hex: string, amount: number) {\r\n return adjustColor(hex, -amount)\r\n}\r\n\r\n// Adjust color brightness\r\nfunction adjustColor(hex: string, amount: number) {\r\n let usePound = false\r\n if (hex[0] === '#') {\r\n hex = hex.slice(1)\r\n usePound = true\r\n }\r\n const num = Number.parseInt(hex, 16)\r\n const r = Math.min(255, Math.max(0, ((num >> 16) & 0xFF) + Math.round(255 * amount)))\r\n const g = Math.min(255, Math.max(0, ((num >> 8) & 0xFF) + Math.round(255 * amount)))\r\n const b = Math.min(255, Math.max(0, (num & 0xFF) + Math.round(255 * amount)))\r\n return (usePound ? '#' : '') + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)\r\n}\r\n\r\nexport const layerColorByName = (name: string): LayerColors => {\r\n // Use the stringToColour function to generate a color based on the name\r\n return {\r\n color: stringToColour(name),\r\n nameColor: stringToColour(name),\r\n minColor: stringToColour(name, 'min'),\r\n maxColor: stringToColour(name, 'max'),\r\n }\r\n}\r\n"],"mappings":"AAKO,MAAM,iBAAiB,CAAC,KAAa,YAA4B;AAGtE,QAAM,UAAU;AAAA,IACd;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,EACF;AAGA,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,WAAO,IAAI,WAAW,CAAC,MAAM,QAAQ,KAAK;AAAA,EAC5C;AACA,QAAM,QAAQ,KAAK,IAAI,IAAI,IAAI,QAAQ;AACvC,QAAM,aAAa,QAAQ,KAAK;AAGhC,MAAI,SAAS;AAGb,MAAI,YAAY,OAAO;AAErB,aAAS,QAAQ,QAAQ,GAAG;AAAA,EAC9B,WACS,YAAY,OAAO;AAE1B,aAAS,OAAO,QAAQ,GAAG;AAAA,EAC7B;AAEA,SAAO;AACT;AAGA,SAAS,QAAQ,KAAa,QAAgB;AAC5C,SAAO,YAAY,KAAK,MAAM;AAChC;AAGA,SAAS,OAAO,KAAa,QAAgB;AAC3C,SAAO,YAAY,KAAK,CAAC,MAAM;AACjC;AAGA,SAAS,YAAY,KAAa,QAAgB;AAChD,MAAI,WAAW;AACf,MAAI,IAAI,CAAC,MAAM,KAAK;AAClB,UAAM,IAAI,MAAM,CAAC;AACjB,eAAW;AAAA,EACb;AACA,QAAM,MAAM,OAAO,SAAS,KAAK,EAAE;AACnC,QAAM,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,IAAK,OAAO,KAAM,OAAQ,KAAK,MAAM,MAAM,MAAM,CAAC,CAAC;AACpF,QAAM,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,IAAK,OAAO,IAAK,OAAQ,KAAK,MAAM,MAAM,MAAM,CAAC,CAAC;AACnF,QAAM,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,OAAQ,KAAK,MAAM,MAAM,MAAM,CAAC,CAAC;AAC5E,UAAQ,WAAW,MAAM,QAAQ,KAAK,OAAO,KAAK,OAAO,KAAK,KAAK,GAAG,SAAS,EAAE,EAAE,MAAM,CAAC;AAC5F;AAEO,MAAM,mBAAmB,CAAC,SAA8B;AAE7D,SAAO;AAAA,IACL,OAAO,eAAe,IAAI;AAAA,IAC1B,WAAW,eAAe,IAAI;AAAA,IAC9B,UAAU,eAAe,MAAM,KAAK;AAAA,IACpC,UAAU,eAAe,MAAM,KAAK;AAAA,EACtC;AACF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toggleBimToMap.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/toggleBimToMap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"toggleBimToMap.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/toggleBimToMap.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAEjE,KAAK,WAAW,GAAG,CAAC,MAAM,EAAE;IAC1B,IAAI,EAAE,mBAAmB,CAAA;IACzB,OAAO,EAAE;QACP,aAAa,EAAE;YACb,OAAO,EAAE,MAAM,CAAA;YACf,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;SAC1B,CAAA;KACF,CAAA;CACF,KAAK,IAAI,CAAA;AAEV,wBAAgB,cAAc,CAC5B,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,GAAG,IAAI,QAa1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/toggleBimToMap.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/toggleBimToMap.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport type { Building, DbFile } from '../../../../types/dbTypes'\r\n\r\ntype BimDispatch = (action: {\r\n type: 'TOGGLE_BIM_TO_MAP'\r\n payload: {\r\n buildingModel: {\r\n bimFile: DbFile\r\n building: Building | null\r\n }\r\n }\r\n}) => void\r\n\r\nexport function toggleBimToMap(\r\n bimDispatch: BimDispatch,\r\n bimFile: DbFile,\r\n building: Building | null,\r\n) {\r\n if (!building) return\r\n\r\n bimDispatch({\r\n type: 'TOGGLE_BIM_TO_MAP',\r\n payload: {\r\n buildingModel: {\r\n bimFile,\r\n building,\r\n },\r\n },\r\n })\r\n}"],"mappings":"AAeO,SAAS,eACd,aACA,SACA,UACA;AACA,MAAI,CAAC,SAAU;AAEf,cAAY;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,MACP,eAAe;AAAA,QACb;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateBuildingOsmId.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/updateBuildingOsmId.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"updateBuildingOsmId.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/map/utils/updateBuildingOsmId.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,mBAAmB,GAAU,YAAY,MAAM,EAAE,OAAO,MAAM,kBAe1E,CAAA"}
|