@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/bim/src/BimSidebar/src/LayersTab/src/SpatialStructureSection.tsx"],"sourcesContent":["'use client'\r\n\r\nimport * as React from 'react'\r\nimport * as LR from 'lucide-react'\r\nimport { useTranslations } from 'next-intl'\r\nimport * as OBC from '@thatopen/components'\r\nimport * as OBF from '@thatopen/components-front'\r\nimport { Button } from '../../../../../../../ui/Button'\r\nimport { Switch } from '../../../../../../../ui/Switch'\r\nimport { CollapsibleSection } from '../../../../../../../ui/CollapsibleSection'\r\nimport { cn } from '../../../../../../../../utils/utils'\r\nimport { BimContext } from '../../../../../../../../store'\r\nimport {\r\n SpatialStructure,\r\n type SpatialTreeItem,\r\n} from '../../../../SpatialStructure'\r\n\r\ninterface Props {\r\n /** Filter query coming from the shared search bar at the top of the\r\n * LayersTab — applied to both the tree itself and to auto-expanding\r\n * any branch that contains a match. */\r\n searchQuery: string\r\n /** Currently active fragment model id. When omitted, the section\r\n * resolves the first model in `FragmentsManager.list`. */\r\n modelId: string | null\r\n}\r\n\r\n/**\r\n * Sidebar section that renders the IFC spatial-structure tree (Project →\r\n * Site → Building → Storey → …) and lets the user select / hover items\r\n * to highlight them in the 3D view.\r\n *\r\n * Extracted from `LayersTab/index.tsx` so that file can stay focused on\r\n * the shared chrome (search bar + the three sibling sections).\r\n */\r\nexport function SpatialStructureSection({ searchQuery, modelId }: Props) {\r\n const t = useTranslations('LayersTab')\r\n const { state: bimState } = React.useContext(BimContext)\r\n const { bimComponents } = bimState.bim\r\n\r\n const [tree, setTree] = React.useState<SpatialTreeItem | null>(null)\r\n const [isLoading, setIsLoading] = React.useState(false)\r\n const [expandedItems, setExpandedItems] = React.useState<Set<string>>(\r\n new Set(),\r\n )\r\n const [visibilityByNodeId, setVisibilityByNodeId] = React.useState<Record<string, boolean>>({})\r\n const [isTreeExpanded, setIsTreeExpanded] = React.useState(true)\r\n\r\n const highlighterRef = React.useRef<OBF.Highlighter | null>(null)\r\n const spatialStructureRef = React.useRef<SpatialStructure | null>(null)\r\n const currentModelIdRef = React.useRef<string | null>(null)\r\n const activeModelIdRef = React.useRef<string | null>(null)\r\n const appliedVisibilityByLocalIdRef = React.useRef<Map<string, boolean>>(new Map())\r\n\r\n const getItemId = React.useCallback(\r\n (item: SpatialTreeItem, path = ''): string => {\r\n const currentPath = path ? `${path}/${item.name}` : item.name\r\n return item.localId ? `${item.localId}` : currentPath\r\n },\r\n [],\r\n )\r\n\r\n React.useEffect(() => {\r\n if (!bimComponents) return\r\n\r\n try {\r\n spatialStructureRef.current = bimComponents.get(SpatialStructure)\r\n } catch {\r\n spatialStructureRef.current = new SpatialStructure(bimComponents)\r\n }\r\n\r\n const spatialStructure = spatialStructureRef.current\r\n\r\n setTree(spatialStructure.tree)\r\n setIsLoading(spatialStructure.isLoading)\r\n\r\n const handleTreeCreated = (data: { tree: SpatialTreeItem | null }) => {\r\n setTree(data.tree)\r\n }\r\n const handleLoadingChanged = (data: { isLoading: boolean }) => {\r\n setIsLoading(data.isLoading)\r\n }\r\n\r\n spatialStructure.onSpatialStructureCreated.add(handleTreeCreated)\r\n spatialStructure.onLoadingStateChanged.add(handleLoadingChanged)\r\n\r\n try {\r\n highlighterRef.current = bimComponents.get(OBF.Highlighter)\r\n } catch {\r\n // Highlighter not registered in this viewer — selection/hover\r\n // becomes a visual no-op which is fine.\r\n }\r\n\r\n try {\r\n const fragments = bimComponents.get(OBC.FragmentsManager)\r\n if (fragments && 'list' in fragments) {\r\n const fragmentsList = fragments.list as Map<string, any>\r\n if (modelId) {\r\n currentModelIdRef.current = modelId\r\n } else if (fragmentsList.size > 0) {\r\n currentModelIdRef.current = Array.from(fragmentsList.keys())[0]\r\n }\r\n }\r\n } catch {\r\n // FragmentsManager not initialized yet — leave currentModelIdRef\r\n // null; the tree call below will short-circuit.\r\n }\r\n\r\n if (activeModelIdRef.current !== currentModelIdRef.current) {\r\n activeModelIdRef.current = currentModelIdRef.current\r\n appliedVisibilityByLocalIdRef.current = new Map()\r\n setVisibilityByNodeId({})\r\n }\r\n\r\n if (\r\n currentModelIdRef.current &&\r\n !spatialStructure.tree &&\r\n !spatialStructure.isLoading\r\n ) {\r\n spatialStructure.getSpatialStructure(currentModelIdRef.current)\r\n }\r\n\r\n return () => {\r\n spatialStructure.onSpatialStructureCreated.remove(handleTreeCreated)\r\n spatialStructure.onLoadingStateChanged.remove(handleLoadingChanged)\r\n }\r\n }, [bimComponents, modelId])\r\n\r\n React.useEffect(() => {\r\n if (!tree || !bimComponents || !currentModelIdRef.current) return\r\n\r\n const fragments = bimComponents.get(OBC.FragmentsManager)\r\n const model = fragments.core.models.list.get(currentModelIdRef.current) as any\r\n if (!model?.setVisible) return\r\n\r\n const hideIds: number[] = []\r\n const showIds: number[] = []\r\n\r\n const visit = (item: SpatialTreeItem, parentPath = '', parentVisible = true): void => {\r\n const itemId = getItemId(item, parentPath)\r\n const effectiveVisible = parentVisible && (visibilityByNodeId[itemId] ?? true)\r\n\r\n if (item.localId !== undefined) {\r\n const appliedKey = `${currentModelIdRef.current}:${item.localId}`\r\n const lastAppliedVisible = appliedVisibilityByLocalIdRef.current.get(appliedKey)\r\n if (lastAppliedVisible !== effectiveVisible) {\r\n appliedVisibilityByLocalIdRef.current.set(appliedKey, effectiveVisible)\r\n if (effectiveVisible) {\r\n showIds.push(item.localId)\r\n } else {\r\n hideIds.push(item.localId)\r\n }\r\n }\r\n }\r\n\r\n for (const child of item.children) {\r\n visit(child, `${parentPath}/${item.name}`, effectiveVisible)\r\n }\r\n }\r\n\r\n for (const child of tree.children) {\r\n visit(child)\r\n }\r\n\r\n if (hideIds.length === 0 && showIds.length === 0) return\r\n\r\n void (async () => {\r\n try {\r\n if (hideIds.length > 0) {\r\n await model.setVisible(hideIds, false)\r\n }\r\n if (showIds.length > 0) {\r\n await model.setVisible(showIds, true)\r\n }\r\n fragments.core.update(true)\r\n } catch (error) {\r\n console.warn('Failed to sync spatial visibility:', error)\r\n }\r\n })()\r\n }, [bimComponents, tree, getItemId, visibilityByNodeId])\r\n\r\n // Auto-expand parents of search matches so hits are visible without the\r\n // user having to drill down manually.\r\n React.useEffect(() => {\r\n if (!tree || !searchQuery.trim()) return\r\n const next = new Set(expandedItems)\r\n const expandParents = (\r\n items: SpatialTreeItem[],\r\n parentPath = '',\r\n parentId?: string,\r\n ): void => {\r\n for (const item of items) {\r\n const itemId = getItemId(item, parentPath)\r\n const matches = item.name\r\n .toLowerCase()\r\n .includes(searchQuery.toLowerCase())\r\n if (matches && parentId) next.add(parentId)\r\n if (item.children.length > 0) {\r\n expandParents(item.children, `${parentPath}/${item.name}`, itemId)\r\n }\r\n }\r\n }\r\n expandParents(tree.children)\r\n setExpandedItems(next)\r\n // Intentionally no `expandedItems` in deps — that would loop.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [searchQuery, tree, getItemId])\r\n\r\n const handleNodeClick = React.useCallback((item: SpatialTreeItem) => {\r\n if (\r\n !highlighterRef.current ||\r\n !currentModelIdRef.current ||\r\n item.localId === undefined\r\n ) {\r\n return\r\n }\r\n try {\r\n highlighterRef.current.clear('select')\r\n const selection = {\r\n [currentModelIdRef.current]: new Set([item.localId]),\r\n }\r\n highlighterRef.current.highlightByID('select', selection)\r\n } catch (error) {\r\n console.warn('Highlighting failed:', error)\r\n }\r\n }, [])\r\n\r\n const handleNodeHover = React.useCallback(\r\n (item: SpatialTreeItem, isHovering: boolean) => {\r\n if (\r\n !highlighterRef.current ||\r\n !currentModelIdRef.current ||\r\n item.localId === undefined\r\n ) {\r\n return\r\n }\r\n try {\r\n if (isHovering) {\r\n const selection = {\r\n [currentModelIdRef.current]: new Set([item.localId]),\r\n }\r\n highlighterRef.current.highlightByID('hover', selection)\r\n } else {\r\n highlighterRef.current.clear('hover')\r\n }\r\n } catch (error) {\r\n console.warn('Hover highlighting failed:', error)\r\n }\r\n },\r\n [],\r\n )\r\n\r\n const syncVisibilityToModel = React.useCallback(async (\r\n nextVisibilityByNodeId: Record<string, boolean>,\r\n ) => {\r\n if (!bimComponents || !currentModelIdRef.current) return\r\n\r\n const fragments = bimComponents.get(OBC.FragmentsManager)\r\n const model = fragments.core.models.list.get(currentModelIdRef.current) as any\r\n if (!model?.setVisible) return\r\n\r\n const hideIds: number[] = []\r\n const showIds: number[] = []\r\n\r\n const visit = (node: SpatialTreeItem, parentPath = '', parentVisible = true): void => {\r\n const itemId = getItemId(node, parentPath)\r\n const nodeVisible = nextVisibilityByNodeId[itemId] ?? true\r\n const effectiveVisible = parentVisible && nodeVisible\r\n\r\n if (node.localId !== undefined) {\r\n const appliedKey = `${currentModelIdRef.current}:${node.localId}`\r\n const lastAppliedVisible = appliedVisibilityByLocalIdRef.current.get(appliedKey)\r\n if (lastAppliedVisible !== effectiveVisible) {\r\n appliedVisibilityByLocalIdRef.current.set(appliedKey, effectiveVisible)\r\n if (effectiveVisible) {\r\n showIds.push(node.localId)\r\n } else {\r\n hideIds.push(node.localId)\r\n }\r\n }\r\n }\r\n\r\n for (const child of node.children) {\r\n visit(child, `${parentPath}/${node.name}`, effectiveVisible)\r\n }\r\n }\r\n\r\n for (const child of tree?.children ?? []) {\r\n visit(child)\r\n }\r\n\r\n if (hideIds.length === 0 && showIds.length === 0) return\r\n\r\n try {\r\n if (hideIds.length > 0) {\r\n await model.setVisible(hideIds, false)\r\n }\r\n if (showIds.length > 0) {\r\n await model.setVisible(showIds, true)\r\n }\r\n fragments.core.update(true)\r\n } catch (error) {\r\n console.warn('Failed to sync spatial visibility:', error)\r\n }\r\n }, [bimComponents, getItemId, tree])\r\n\r\n const applyNodeVisibility = React.useCallback(async (\r\n item: SpatialTreeItem,\r\n visible: boolean,\r\n ) => {\r\n const nextVisibility: Record<string, boolean> = { ...visibilityByNodeId }\r\n\r\n const setNodeAndChildren = (node: SpatialTreeItem, parentPath = ''): void => {\r\n const itemId = getItemId(node, parentPath)\r\n nextVisibility[itemId] = visible\r\n for (const child of node.children) {\r\n setNodeAndChildren(child, `${parentPath}/${node.name}`)\r\n }\r\n }\r\n\r\n setNodeAndChildren(item)\r\n\r\n setVisibilityByNodeId(nextVisibility)\r\n await syncVisibilityToModel(nextVisibility)\r\n }, [getItemId, syncVisibilityToModel, visibilityByNodeId])\r\n\r\n const handleNodeVisibilityChange = React.useCallback((item: SpatialTreeItem, nextVisible: boolean) => {\r\n void applyNodeVisibility(item, nextVisible)\r\n }, [applyNodeVisibility])\r\n\r\n const toggleExpanded = (id: string) => {\r\n const next = new Set(expandedItems)\r\n if (next.has(id)) next.delete(id)\r\n else next.add(id)\r\n setExpandedItems(next)\r\n }\r\n\r\n const toggleTreeExpansion = React.useCallback(() => {\r\n if (!tree) return\r\n const newIsExpanded = !isTreeExpanded\r\n setIsTreeExpanded(newIsExpanded)\r\n if (newIsExpanded) {\r\n const expandAll = (\r\n item: SpatialTreeItem,\r\n expanded: Set<string>,\r\n path = '',\r\n ) => {\r\n const itemId = getItemId(item, path)\r\n expanded.add(itemId)\r\n for (const child of item.children) {\r\n expandAll(child, expanded, `${path}/${item.name}`)\r\n }\r\n }\r\n const next = new Set<string>()\r\n for (const child of tree.children) expandAll(child, next)\r\n setExpandedItems(next)\r\n } else {\r\n setExpandedItems(new Set())\r\n }\r\n }, [isTreeExpanded, tree, getItemId])\r\n\r\n const treeBody = isLoading ? (\r\n <div className=\"flex items-center justify-center py-8\">\r\n <LR.Loader2 className=\"h-4 w-4 animate-spin mr-2\" />\r\n <span className=\"text-sm text-muted-foreground\">{t('loadingText')}</span>\r\n </div>\r\n ) : tree ? (\r\n <div className=\"space-y-1\">\r\n {tree.children.length > 0 && (\r\n <div className=\"space-y-1\">\r\n {tree.children.map((item) => {\r\n const itemId = getItemId(item)\r\n return (\r\n <SpatialTreeNode\r\n key={itemId}\r\n item={item}\r\n getItemId={getItemId}\r\n expandedItems={expandedItems}\r\n onToggleExpanded={toggleExpanded}\r\n onNodeClick={handleNodeClick}\r\n onNodeHover={handleNodeHover}\r\n onNodeVisibilityChange={handleNodeVisibilityChange}\r\n visibilityByNodeId={visibilityByNodeId}\r\n searchQuery={searchQuery}\r\n path=\"\"\r\n />\r\n )\r\n })}\r\n </div>\r\n )}\r\n {searchQuery.trim() &&\r\n !tree.children.some(\r\n (child) =>\r\n child.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\r\n hasMatchingDescendants(child, searchQuery),\r\n ) && (\r\n <div className=\"flex items-center justify-center py-8\">\r\n <span className=\"text-sm text-muted-foreground\">\r\n {t('noResults')} “{searchQuery}”\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n ) : (\r\n <div className=\"flex flex-col items-center justify-center py-8 space-y-3\">\r\n <span className=\"text-sm text-muted-foreground\">{t('noneAvailable')}</span>\r\n </div>\r\n )\r\n\r\n return (\r\n <CollapsibleSection\r\n title={t('spatialStructure')}\r\n className=\"overflow-y-auto pr-2\"\r\n style={{ height: '100%', minHeight: 0 }}\r\n headerActions={\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"h-6 w-6 p-0\"\r\n onClick={toggleTreeExpansion}\r\n title={isTreeExpanded ? t('collapseTitle') : t('expandTitle')}\r\n >\r\n {isTreeExpanded ? (\r\n <LR.ListCollapse className=\"h-4 w-4\" />\r\n ) : (\r\n <LR.ListFilterPlus className=\"h-4 w-4\" />\r\n )}\r\n </Button>\r\n }\r\n >\r\n {treeBody}\r\n </CollapsibleSection>\r\n )\r\n}\r\n\r\ninterface SpatialTreeNodeProps {\r\n item: SpatialTreeItem\r\n getItemId: (item: SpatialTreeItem, path?: string) => string\r\n expandedItems: Set<string>\r\n onToggleExpanded: (id: string) => void\r\n onNodeClick: (item: SpatialTreeItem) => void\r\n onNodeHover: (item: SpatialTreeItem, isHovering: boolean) => void\r\n onNodeVisibilityChange: (item: SpatialTreeItem, visible: boolean) => void\r\n visibilityByNodeId: Record<string, boolean>\r\n searchQuery: string\r\n path?: string\r\n}\r\n\r\nfunction SpatialTreeNode({\r\n item,\r\n getItemId,\r\n expandedItems,\r\n onToggleExpanded,\r\n onNodeClick,\r\n onNodeHover,\r\n onNodeVisibilityChange,\r\n visibilityByNodeId,\r\n searchQuery,\r\n path = '',\r\n}: SpatialTreeNodeProps) {\r\n const itemId = getItemId(item, path)\r\n const hasChildren = item.children && item.children.length > 0\r\n const isExpanded = expandedItems.has(itemId)\r\n const isVisible = visibilityByNodeId[itemId] ?? true\r\n const itemMatchesSearch =\r\n searchQuery === '' ||\r\n item.name.toLowerCase().includes(searchQuery.toLowerCase())\r\n\r\n const visibleChildren = React.useMemo(() => {\r\n if (!hasChildren) return []\r\n if (searchQuery === '') return item.children\r\n return item.children.filter(\r\n (child) =>\r\n child.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\r\n hasMatchingDescendants(child, searchQuery),\r\n )\r\n }, [hasChildren, item.children, searchQuery])\r\n\r\n const shouldShow = itemMatchesSearch || visibleChildren.length > 0\r\n if (!shouldShow) return null\r\n\r\n return (\r\n <div>\r\n <div\r\n className=\"flex items-center gap-2 px-2 py-1.5 rounded-md hover:bg-accent/50 transition-colors cursor-pointer\"\r\n onClick={() => onNodeClick(item)}\r\n onMouseEnter={() => onNodeHover(item, true)}\r\n onMouseLeave={() => onNodeHover(item, false)}\r\n >\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"h-4 w-4 p-0\"\r\n onClick={(e) => {\r\n e.stopPropagation()\r\n if (hasChildren) onToggleExpanded(itemId)\r\n }}\r\n disabled={!hasChildren}\r\n >\r\n {hasChildren ? (\r\n isExpanded ? (\r\n <LR.ChevronDown className=\"h-4 w-4\" />\r\n ) : (\r\n <LR.ChevronRight className=\"h-4 w-4\" />\r\n )\r\n ) : (\r\n <div className=\"w-4 h-4\" />\r\n )}\r\n </Button>\r\n <span className={cn(\"text-sm flex-1\", isVisible ? \"text-foreground\" : \"text-muted-foreground line-through\")}>{item.name}</span>\r\n <div\r\n className=\"flex items-center\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n <Switch\r\n checked={isVisible}\r\n onCheckedChange={(checked) => onNodeVisibilityChange(item, checked)}\r\n aria-label={`Toggle visibility for ${item.name}`}\r\n />\r\n </div>\r\n </div>\r\n\r\n {isExpanded && visibleChildren.length > 0 && (\r\n <div className=\"ml-4 space-y-1\">\r\n {visibleChildren.map((child) => {\r\n const childPath = `${path}/${item.name}`\r\n const childId = getItemId(child, childPath)\r\n return (\r\n <SpatialTreeNode\r\n key={childId}\r\n item={child}\r\n getItemId={getItemId}\r\n expandedItems={expandedItems}\r\n onToggleExpanded={onToggleExpanded}\r\n onNodeClick={onNodeClick}\r\n onNodeHover={onNodeHover}\r\n onNodeVisibilityChange={onNodeVisibilityChange}\r\n visibilityByNodeId={visibilityByNodeId}\r\n searchQuery={searchQuery}\r\n path={childPath}\r\n />\r\n )\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nfunction hasMatchingDescendants(\r\n item: SpatialTreeItem,\r\n searchQuery: string,\r\n): boolean {\r\n if (searchQuery === '') return false\r\n return item.children.some(\r\n (child) =>\r\n child.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\r\n hasMatchingDescendants(child, searchQuery),\r\n )\r\n}\r\n"],"mappings":"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","names":["_a"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/SpatialStructureSection.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport * as LR from 'lucide-react'\r\nimport { useTranslations } from 'next-intl'\r\nimport * as OBC from '@thatopen/components'\r\nimport * as OBF from '@thatopen/components-front'\r\nimport { Button } from '../../../../../../../ui/Button'\r\nimport { Switch } from '../../../../../../../ui/Switch'\r\nimport { CollapsibleSection } from '../../../../../../../ui/CollapsibleSection'\r\nimport { cn } from '../../../../../../../../utils/utils'\r\nimport { BimContext } from '../../../../../../../../store'\r\nimport {\r\n SpatialStructure,\r\n type SpatialTreeItem,\r\n} from '../../../../SpatialStructure'\r\n\r\ninterface Props {\r\n /** Filter query coming from the shared search bar at the top of the\r\n * LayersTab — applied to both the tree itself and to auto-expanding\r\n * any branch that contains a match. */\r\n searchQuery: string\r\n /** Currently active fragment model id. When omitted, the section\r\n * resolves the first model in `FragmentsManager.list`. */\r\n modelId: string | null\r\n}\r\n\r\n/**\r\n * Sidebar section that renders the IFC spatial-structure tree (Project →\r\n * Site → Building → Storey → …) and lets the user select / hover items\r\n * to highlight them in the 3D view.\r\n *\r\n * Extracted from `LayersTab/index.tsx` so that file can stay focused on\r\n * the shared chrome (search bar + the three sibling sections).\r\n */\r\nexport function SpatialStructureSection({ searchQuery, modelId }: Props) {\r\n const t = useTranslations('LayersTab')\r\n const { state: bimState } = React.useContext(BimContext)\r\n const { bimComponents } = bimState.bim\r\n\r\n const [tree, setTree] = React.useState<SpatialTreeItem | null>(null)\r\n const [isLoading, setIsLoading] = React.useState(false)\r\n const [expandedItems, setExpandedItems] = React.useState<Set<string>>(\r\n new Set(),\r\n )\r\n const [visibilityByNodeId, setVisibilityByNodeId] = React.useState<Record<string, boolean>>({})\r\n const [isTreeExpanded, setIsTreeExpanded] = React.useState(true)\r\n\r\n const highlighterRef = React.useRef<OBF.Highlighter | null>(null)\r\n const spatialStructureRef = React.useRef<SpatialStructure | null>(null)\r\n const currentModelIdRef = React.useRef<string | null>(null)\r\n const activeModelIdRef = React.useRef<string | null>(null)\r\n const appliedVisibilityByLocalIdRef = React.useRef<Map<string, boolean>>(new Map())\r\n\r\n const getItemId = React.useCallback(\r\n (item: SpatialTreeItem, path = ''): string => {\r\n const currentPath = path ? `${path}/${item.name}` : item.name\r\n return item.localId ? `${item.localId}` : currentPath\r\n },\r\n [],\r\n )\r\n\r\n React.useEffect(() => {\r\n if (!bimComponents) return\r\n\r\n try {\r\n spatialStructureRef.current = bimComponents.get(SpatialStructure)\r\n } catch {\r\n spatialStructureRef.current = new SpatialStructure(bimComponents)\r\n }\r\n\r\n const spatialStructure = spatialStructureRef.current\r\n\r\n setTree(spatialStructure.tree)\r\n setIsLoading(spatialStructure.isLoading)\r\n\r\n const handleTreeCreated = (data: { tree: SpatialTreeItem | null }) => {\r\n setTree(data.tree)\r\n }\r\n const handleLoadingChanged = (data: { isLoading: boolean }) => {\r\n setIsLoading(data.isLoading)\r\n }\r\n\r\n spatialStructure.onSpatialStructureCreated.add(handleTreeCreated)\r\n spatialStructure.onLoadingStateChanged.add(handleLoadingChanged)\r\n\r\n try {\r\n highlighterRef.current = bimComponents.get(OBF.Highlighter)\r\n } catch {\r\n // Highlighter not registered in this viewer — selection/hover\r\n // becomes a visual no-op which is fine.\r\n }\r\n\r\n try {\r\n const fragments = bimComponents.get(OBC.FragmentsManager)\r\n if (fragments && 'list' in fragments) {\r\n const fragmentsList = fragments.list as Map<string, any>\r\n if (modelId) {\r\n currentModelIdRef.current = modelId\r\n } else if (fragmentsList.size > 0) {\r\n currentModelIdRef.current = Array.from(fragmentsList.keys())[0]\r\n }\r\n }\r\n } catch {\r\n // FragmentsManager not initialized yet — leave currentModelIdRef\r\n // null; the tree call below will short-circuit.\r\n }\r\n\r\n if (activeModelIdRef.current !== currentModelIdRef.current) {\r\n activeModelIdRef.current = currentModelIdRef.current\r\n appliedVisibilityByLocalIdRef.current = new Map()\r\n setVisibilityByNodeId({})\r\n }\r\n\r\n if (\r\n currentModelIdRef.current &&\r\n !spatialStructure.tree &&\r\n !spatialStructure.isLoading\r\n ) {\r\n spatialStructure.getSpatialStructure(currentModelIdRef.current)\r\n }\r\n\r\n return () => {\r\n spatialStructure.onSpatialStructureCreated.remove(handleTreeCreated)\r\n spatialStructure.onLoadingStateChanged.remove(handleLoadingChanged)\r\n }\r\n }, [bimComponents, modelId])\r\n\r\n React.useEffect(() => {\r\n if (!tree || !bimComponents || !currentModelIdRef.current) return\r\n\r\n const fragments = bimComponents.get(OBC.FragmentsManager)\r\n const model = fragments.core.models.list.get(currentModelIdRef.current) as any\r\n if (!model?.setVisible) return\r\n\r\n const hideIds: number[] = []\r\n const showIds: number[] = []\r\n\r\n const visit = (item: SpatialTreeItem, parentPath = '', parentVisible = true): void => {\r\n const itemId = getItemId(item, parentPath)\r\n const effectiveVisible = parentVisible && (visibilityByNodeId[itemId] ?? true)\r\n\r\n if (item.localId !== undefined) {\r\n const appliedKey = `${currentModelIdRef.current}:${item.localId}`\r\n const lastAppliedVisible = appliedVisibilityByLocalIdRef.current.get(appliedKey)\r\n if (lastAppliedVisible !== effectiveVisible) {\r\n appliedVisibilityByLocalIdRef.current.set(appliedKey, effectiveVisible)\r\n if (effectiveVisible) {\r\n showIds.push(item.localId)\r\n } else {\r\n hideIds.push(item.localId)\r\n }\r\n }\r\n }\r\n\r\n for (const child of item.children) {\r\n visit(child, `${parentPath}/${item.name}`, effectiveVisible)\r\n }\r\n }\r\n\r\n for (const child of tree.children) {\r\n visit(child)\r\n }\r\n\r\n if (hideIds.length === 0 && showIds.length === 0) return\r\n\r\n void (async () => {\r\n try {\r\n if (hideIds.length > 0) {\r\n await model.setVisible(hideIds, false)\r\n }\r\n if (showIds.length > 0) {\r\n await model.setVisible(showIds, true)\r\n }\r\n fragments.core.update(true)\r\n } catch (error) {\r\n console.warn('Failed to sync spatial visibility:', error)\r\n }\r\n })()\r\n }, [bimComponents, tree, getItemId, visibilityByNodeId])\r\n\r\n // Auto-expand parents of search matches so hits are visible without the\r\n // user having to drill down manually.\r\n React.useEffect(() => {\r\n if (!tree || !searchQuery.trim()) return\r\n const next = new Set(expandedItems)\r\n const expandParents = (\r\n items: SpatialTreeItem[],\r\n parentPath = '',\r\n parentId?: string,\r\n ): void => {\r\n for (const item of items) {\r\n const itemId = getItemId(item, parentPath)\r\n const matches = item.name\r\n .toLowerCase()\r\n .includes(searchQuery.toLowerCase())\r\n if (matches && parentId) next.add(parentId)\r\n if (item.children.length > 0) {\r\n expandParents(item.children, `${parentPath}/${item.name}`, itemId)\r\n }\r\n }\r\n }\r\n expandParents(tree.children)\r\n setExpandedItems(next)\r\n // Intentionally no `expandedItems` in deps — that would loop.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [searchQuery, tree, getItemId])\r\n\r\n const handleNodeClick = React.useCallback((item: SpatialTreeItem) => {\r\n if (\r\n !highlighterRef.current ||\r\n !currentModelIdRef.current ||\r\n item.localId === undefined\r\n ) {\r\n return\r\n }\r\n try {\r\n highlighterRef.current.clear('select')\r\n const selection = {\r\n [currentModelIdRef.current]: new Set([item.localId]),\r\n }\r\n highlighterRef.current.highlightByID('select', selection)\r\n } catch (error) {\r\n console.warn('Highlighting failed:', error)\r\n }\r\n }, [])\r\n\r\n const handleNodeHover = React.useCallback(\r\n (item: SpatialTreeItem, isHovering: boolean) => {\r\n if (\r\n !highlighterRef.current ||\r\n !currentModelIdRef.current ||\r\n item.localId === undefined\r\n ) {\r\n return\r\n }\r\n try {\r\n if (isHovering) {\r\n const selection = {\r\n [currentModelIdRef.current]: new Set([item.localId]),\r\n }\r\n highlighterRef.current.highlightByID('hover', selection)\r\n } else {\r\n highlighterRef.current.clear('hover')\r\n }\r\n } catch (error) {\r\n console.warn('Hover highlighting failed:', error)\r\n }\r\n },\r\n [],\r\n )\r\n\r\n const syncVisibilityToModel = React.useCallback(async (\r\n nextVisibilityByNodeId: Record<string, boolean>,\r\n ) => {\r\n if (!bimComponents || !currentModelIdRef.current) return\r\n\r\n const fragments = bimComponents.get(OBC.FragmentsManager)\r\n const model = fragments.core.models.list.get(currentModelIdRef.current) as any\r\n if (!model?.setVisible) return\r\n\r\n const hideIds: number[] = []\r\n const showIds: number[] = []\r\n\r\n const visit = (node: SpatialTreeItem, parentPath = '', parentVisible = true): void => {\r\n const itemId = getItemId(node, parentPath)\r\n const nodeVisible = nextVisibilityByNodeId[itemId] ?? true\r\n const effectiveVisible = parentVisible && nodeVisible\r\n\r\n if (node.localId !== undefined) {\r\n const appliedKey = `${currentModelIdRef.current}:${node.localId}`\r\n const lastAppliedVisible = appliedVisibilityByLocalIdRef.current.get(appliedKey)\r\n if (lastAppliedVisible !== effectiveVisible) {\r\n appliedVisibilityByLocalIdRef.current.set(appliedKey, effectiveVisible)\r\n if (effectiveVisible) {\r\n showIds.push(node.localId)\r\n } else {\r\n hideIds.push(node.localId)\r\n }\r\n }\r\n }\r\n\r\n for (const child of node.children) {\r\n visit(child, `${parentPath}/${node.name}`, effectiveVisible)\r\n }\r\n }\r\n\r\n for (const child of tree?.children ?? []) {\r\n visit(child)\r\n }\r\n\r\n if (hideIds.length === 0 && showIds.length === 0) return\r\n\r\n try {\r\n if (hideIds.length > 0) {\r\n await model.setVisible(hideIds, false)\r\n }\r\n if (showIds.length > 0) {\r\n await model.setVisible(showIds, true)\r\n }\r\n fragments.core.update(true)\r\n } catch (error) {\r\n console.warn('Failed to sync spatial visibility:', error)\r\n }\r\n }, [bimComponents, getItemId, tree])\r\n\r\n const applyNodeVisibility = React.useCallback(async (\r\n item: SpatialTreeItem,\r\n visible: boolean,\r\n ) => {\r\n const nextVisibility: Record<string, boolean> = { ...visibilityByNodeId }\r\n\r\n const setNodeAndChildren = (node: SpatialTreeItem, parentPath = ''): void => {\r\n const itemId = getItemId(node, parentPath)\r\n nextVisibility[itemId] = visible\r\n for (const child of node.children) {\r\n setNodeAndChildren(child, `${parentPath}/${node.name}`)\r\n }\r\n }\r\n\r\n setNodeAndChildren(item)\r\n\r\n setVisibilityByNodeId(nextVisibility)\r\n await syncVisibilityToModel(nextVisibility)\r\n }, [getItemId, syncVisibilityToModel, visibilityByNodeId])\r\n\r\n const handleNodeVisibilityChange = React.useCallback((item: SpatialTreeItem, nextVisible: boolean) => {\r\n void applyNodeVisibility(item, nextVisible)\r\n }, [applyNodeVisibility])\r\n\r\n const toggleExpanded = (id: string) => {\r\n const next = new Set(expandedItems)\r\n if (next.has(id)) next.delete(id)\r\n else next.add(id)\r\n setExpandedItems(next)\r\n }\r\n\r\n const toggleTreeExpansion = React.useCallback(() => {\r\n if (!tree) return\r\n const newIsExpanded = !isTreeExpanded\r\n setIsTreeExpanded(newIsExpanded)\r\n if (newIsExpanded) {\r\n const expandAll = (\r\n item: SpatialTreeItem,\r\n expanded: Set<string>,\r\n path = '',\r\n ) => {\r\n const itemId = getItemId(item, path)\r\n expanded.add(itemId)\r\n for (const child of item.children) {\r\n expandAll(child, expanded, `${path}/${item.name}`)\r\n }\r\n }\r\n const next = new Set<string>()\r\n for (const child of tree.children) expandAll(child, next)\r\n setExpandedItems(next)\r\n } else {\r\n setExpandedItems(new Set())\r\n }\r\n }, [isTreeExpanded, tree, getItemId])\r\n\r\n const treeBody = isLoading ? (\r\n <div className=\"flex items-center justify-center py-8\">\r\n <LR.Loader2 className=\"h-4 w-4 animate-spin mr-2\" />\r\n <span className=\"text-sm text-muted-foreground\">{t('loadingText')}</span>\r\n </div>\r\n ) : tree ? (\r\n <div className=\"space-y-1\">\r\n {tree.children.length > 0 && (\r\n <div className=\"space-y-1\">\r\n {tree.children.map((item) => {\r\n const itemId = getItemId(item)\r\n return (\r\n <SpatialTreeNode\r\n key={itemId}\r\n item={item}\r\n getItemId={getItemId}\r\n expandedItems={expandedItems}\r\n onToggleExpanded={toggleExpanded}\r\n onNodeClick={handleNodeClick}\r\n onNodeHover={handleNodeHover}\r\n onNodeVisibilityChange={handleNodeVisibilityChange}\r\n visibilityByNodeId={visibilityByNodeId}\r\n searchQuery={searchQuery}\r\n path=\"\"\r\n />\r\n )\r\n })}\r\n </div>\r\n )}\r\n {searchQuery.trim() &&\r\n !tree.children.some(\r\n (child) =>\r\n child.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\r\n hasMatchingDescendants(child, searchQuery),\r\n ) && (\r\n <div className=\"flex items-center justify-center py-8\">\r\n <span className=\"text-sm text-muted-foreground\">\r\n {t('noResults')} “{searchQuery}”\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n ) : (\r\n <div className=\"flex flex-col items-center justify-center py-8 space-y-3\">\r\n <span className=\"text-sm text-muted-foreground\">{t('noneAvailable')}</span>\r\n </div>\r\n )\r\n\r\n return (\r\n <CollapsibleSection\r\n title={t('spatialStructure')}\r\n className=\"overflow-y-auto pr-2\"\r\n style={{ height: '100%', minHeight: 0 }}\r\n headerActions={\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"h-6 w-6 p-0\"\r\n onClick={toggleTreeExpansion}\r\n title={isTreeExpanded ? t('collapseTitle') : t('expandTitle')}\r\n >\r\n {isTreeExpanded ? (\r\n <LR.ListCollapse className=\"h-4 w-4\" />\r\n ) : (\r\n <LR.ListFilterPlus className=\"h-4 w-4\" />\r\n )}\r\n </Button>\r\n }\r\n >\r\n {treeBody}\r\n </CollapsibleSection>\r\n )\r\n}\r\n\r\ninterface SpatialTreeNodeProps {\r\n item: SpatialTreeItem\r\n getItemId: (item: SpatialTreeItem, path?: string) => string\r\n expandedItems: Set<string>\r\n onToggleExpanded: (id: string) => void\r\n onNodeClick: (item: SpatialTreeItem) => void\r\n onNodeHover: (item: SpatialTreeItem, isHovering: boolean) => void\r\n onNodeVisibilityChange: (item: SpatialTreeItem, visible: boolean) => void\r\n visibilityByNodeId: Record<string, boolean>\r\n searchQuery: string\r\n path?: string\r\n}\r\n\r\nfunction SpatialTreeNode({\r\n item,\r\n getItemId,\r\n expandedItems,\r\n onToggleExpanded,\r\n onNodeClick,\r\n onNodeHover,\r\n onNodeVisibilityChange,\r\n visibilityByNodeId,\r\n searchQuery,\r\n path = '',\r\n}: SpatialTreeNodeProps) {\r\n const itemId = getItemId(item, path)\r\n const hasChildren = item.children && item.children.length > 0\r\n const isExpanded = expandedItems.has(itemId)\r\n const isVisible = visibilityByNodeId[itemId] ?? true\r\n const itemMatchesSearch =\r\n searchQuery === '' ||\r\n item.name.toLowerCase().includes(searchQuery.toLowerCase())\r\n\r\n const visibleChildren = React.useMemo(() => {\r\n if (!hasChildren) return []\r\n if (searchQuery === '') return item.children\r\n return item.children.filter(\r\n (child) =>\r\n child.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\r\n hasMatchingDescendants(child, searchQuery),\r\n )\r\n }, [hasChildren, item.children, searchQuery])\r\n\r\n const shouldShow = itemMatchesSearch || visibleChildren.length > 0\r\n if (!shouldShow) return null\r\n\r\n return (\r\n <div>\r\n <div\r\n className=\"flex items-center gap-2 px-2 py-1.5 rounded-md hover:bg-accent/50 transition-colors cursor-pointer\"\r\n onClick={() => onNodeClick(item)}\r\n onMouseEnter={() => onNodeHover(item, true)}\r\n onMouseLeave={() => onNodeHover(item, false)}\r\n >\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"h-4 w-4 p-0\"\r\n onClick={(e) => {\r\n e.stopPropagation()\r\n if (hasChildren) onToggleExpanded(itemId)\r\n }}\r\n disabled={!hasChildren}\r\n >\r\n {hasChildren ? (\r\n isExpanded ? (\r\n <LR.ChevronDown className=\"h-4 w-4\" />\r\n ) : (\r\n <LR.ChevronRight className=\"h-4 w-4\" />\r\n )\r\n ) : (\r\n <div className=\"w-4 h-4\" />\r\n )}\r\n </Button>\r\n <span className={cn(\"text-sm flex-1\", isVisible ? \"text-foreground\" : \"text-muted-foreground line-through\")}>{item.name}</span>\r\n <div\r\n className=\"flex items-center\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n <Switch\r\n checked={isVisible}\r\n onCheckedChange={(checked) => onNodeVisibilityChange(item, checked)}\r\n aria-label={`Toggle visibility for ${item.name}`}\r\n />\r\n </div>\r\n </div>\r\n\r\n {isExpanded && visibleChildren.length > 0 && (\r\n <div className=\"ml-4 space-y-1\">\r\n {visibleChildren.map((child) => {\r\n const childPath = `${path}/${item.name}`\r\n const childId = getItemId(child, childPath)\r\n return (\r\n <SpatialTreeNode\r\n key={childId}\r\n item={child}\r\n getItemId={getItemId}\r\n expandedItems={expandedItems}\r\n onToggleExpanded={onToggleExpanded}\r\n onNodeClick={onNodeClick}\r\n onNodeHover={onNodeHover}\r\n onNodeVisibilityChange={onNodeVisibilityChange}\r\n visibilityByNodeId={visibilityByNodeId}\r\n searchQuery={searchQuery}\r\n path={childPath}\r\n />\r\n )\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nfunction hasMatchingDescendants(\r\n item: SpatialTreeItem,\r\n searchQuery: string,\r\n): boolean {\r\n if (searchQuery === '') return false\r\n return item.children.some(\r\n (child) =>\r\n child.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\r\n hasMatchingDescendants(child, searchQuery),\r\n )\r\n}\r\n"],"mappings":"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","names":["_a"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAA;AAE3D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,KAAK,CAAC,WAAW,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,wBAAgB,UAAU,sBAMzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.tsx"],"sourcesContent":["'use client'\r\n\r\nimport * as React from 'react'\r\nimport { DbFile } from '../../../../../../../types/dbTypes'\r\nimport { SensorsSection } from '../../../../../../ui/Sensors/SensorsSection'\r\nexport interface FileItem {\r\n task: DbFile\r\n icon: React.ElementType\r\n visible: boolean\r\n}\r\n\r\nexport function SensorsTab() {\r\n return (\r\n <div className=\"flex-1 flex flex-col space-y-6 py-4 overflow-hidden\">\r\n <SensorsSection />\r\n </div>\r\n )\r\n}\r\n"],"mappings":";
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport { DbFile } from '../../../../../../../types/dbTypes'\r\nimport { SensorsSection } from '../../../../../../ui/Sensors/SensorsSection'\r\nexport interface FileItem {\r\n task: DbFile\r\n icon: React.ElementType\r\n visible: boolean\r\n}\r\n\r\nexport function SensorsTab() {\r\n return (\r\n <div className=\"flex-1 flex flex-col space-y-6 py-4 overflow-hidden\">\r\n <SensorsSection />\r\n </div>\r\n )\r\n}\r\n"],"mappings":";AAiBM;AAVN,SAAS,sBAAsB;AAOxB,SAAS,aAAa;AAC3B,SACE,oBAAC,SAAI,WAAU,uDACb,8BAAC,kBAAe,GAClB;AAEJ;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,wBAAgB,WAAW,sBAc1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/index.tsx"],"sourcesContent":["'use client'\r\n\r\nimport * as React from \"react\";\r\nimport { useTranslations } from 'next-intl'\r\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../../../../../ui/Select'\r\nimport { ToggleProjection } from './src/ToggleProjection'\r\nimport { GridManagement } from './src/GridManagement'\r\nimport { LightingManagement } from './src/LightingManagement'\r\nimport { RenderMode } from './src/RenderMode'\r\n\r\nexport function SettingsTab() {\r\n // Translation\r\n const t = useTranslations('SettingsTab')\r\n\r\n const [accountActivity, setAccountActivity] = React.useState('all')\r\n\r\n return (\r\n <div className=\"w-full h-full flex flex-col gap-6 p-4 overflow-y-auto point\">\r\n <ToggleProjection />\r\n <RenderMode />\r\n <GridManagement />\r\n {/* <LightingManagement /> */}\r\n </div>\r\n )\r\n}"],"mappings":";
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/index.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from \"react\";\r\nimport { useTranslations } from 'next-intl'\r\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../../../../../ui/Select'\r\nimport { ToggleProjection } from './src/ToggleProjection'\r\nimport { GridManagement } from './src/GridManagement'\r\nimport { LightingManagement } from './src/LightingManagement'\r\nimport { RenderMode } from './src/RenderMode'\r\n\r\nexport function SettingsTab() {\r\n // Translation\r\n const t = useTranslations('SettingsTab')\r\n\r\n const [accountActivity, setAccountActivity] = React.useState('all')\r\n\r\n return (\r\n <div className=\"w-full h-full flex flex-col gap-6 p-4 overflow-y-auto point\">\r\n <ToggleProjection />\r\n <RenderMode />\r\n <GridManagement />\r\n {/* <LightingManagement /> */}\r\n </div>\r\n )\r\n}"],"mappings":";AAoBI,SACE,KADF;AAfJ,YAAY,WAAW;AACvB,SAAS,uBAAuB;AAEhC,SAAS,wBAAwB;AACjC,SAAS,sBAAsB;AAE/B,SAAS,kBAAkB;AAEpB,SAAS,cAAc;AAE5B,QAAM,IAAI,gBAAgB,aAAa;AAEvC,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,MAAM,SAAS,KAAK;AAElE,SACE,qBAAC,SAAI,WAAU,+DACb;AAAA,wBAAC,oBAAiB;AAAA,IAClB,oBAAC,cAAW;AAAA,IACZ,oBAAC,kBAAe;AAAA,KAElB;AAEJ;","names":[]}
|
package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridManagement.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GridManagement.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAQ9B,wBAAgB,cAAc,sBAuN7B"}
|
package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.tsx"],"sourcesContent":["'use client'\r\n\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\nimport { SliderWithInput } from '../../../../../../../ui/Slider'\r\nimport { ColorInput } from '../../../../../../../ui/Input'\r\nimport { CollapsibleSection } from '../../../../../../../ui/CollapsibleSection'\r\nimport { BimContext } from '../../../../../../../../store'\r\nimport * as THREE from 'three'\r\n\r\nexport function GridManagement() {\r\n // Translation\r\n const t = useTranslations('GridManagement')\r\n\r\n const { dispatch: bimDispatch, state: bimState } = React.useContext(BimContext)\r\n const { grid } = bimState.bim\r\n\r\n // Use lazy initialization to get values from grid\r\n const [gridVisible, setGridVisible] = React.useState(() => {\r\n return grid?.config?.visible ?? true\r\n })\r\n const [gridColor, setGridColor] = React.useState(() => {\r\n return grid?.config?.color ? `#${grid.config.color.getHexString()}` : '#bbbbbb'\r\n })\r\n const [primarySize, setPrimarySize] = React.useState(() => {\r\n return [grid?.config?.primarySize ?? 1]\r\n })\r\n const [secondarySize, setSecondarySize] = React.useState(() => {\r\n return [grid?.config?.secondarySize ?? 10]\r\n })\r\n const [elevation, setElevation] = React.useState(() => {\r\n return [grid?.three?.position?.y ?? 0]\r\n })\r\n const [rotationY, setRotationZ] = React.useState(() => {\r\n const rotationDegrees = grid?.three?.rotation?.y ? (grid.three.rotation.y * 180) / Math.PI : 0\r\n return [rotationDegrees]\r\n })\r\n\r\n // Track if we've initialized to prevent re-initialization\r\n const [initialized, setInitialized] = React.useState(false)\r\n\r\n // Initialize state with current grid values (only once)\r\n React.useEffect(() => {\r\n if (!grid || initialized) return\r\n\r\n // Load all values from grid in one go\r\n if (grid.config) {\r\n setGridVisible(grid.config.visible ?? true)\r\n setPrimarySize([grid.config.primarySize ?? 1])\r\n setSecondarySize([grid.config.secondarySize ?? 10])\r\n if (grid.config.color) {\r\n setGridColor(`#${grid.config.color.getHexString()}`)\r\n }\r\n }\r\n\r\n if (grid.three) {\r\n if (grid.three.position) {\r\n setElevation([grid.three.position.y ?? 0])\r\n }\r\n if (grid.three.rotation) {\r\n const rotationDegrees = (grid.three.rotation.y * 180) / Math.PI\r\n setRotationZ([rotationDegrees ?? 0])\r\n }\r\n }\r\n\r\n setInitialized(true)\r\n }, [grid, initialized])\r\n\r\n // Update grid visibility when changed\r\n React.useEffect(() => {\r\n if (!grid?.config || !initialized) return\r\n\r\n const currentVisible = grid.config.visible ?? true\r\n if (currentVisible !== gridVisible) {\r\n grid.config.visible = gridVisible\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [gridVisible, grid, initialized, bimDispatch])\r\n\r\n // Update grid color when changed\r\n React.useEffect(() => {\r\n if (!grid?.config || !initialized) return\r\n\r\n const currentColor = grid.config.color ? `#${grid.config.color.getHexString()}` : '#bbbbbb'\r\n if (currentColor !== gridColor) {\r\n grid.config.color = new THREE.Color(gridColor)\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [gridColor, grid, initialized, bimDispatch])\r\n\r\n // Update grid primary size when changed\r\n React.useEffect(() => {\r\n if (!grid?.config || !initialized) return\r\n\r\n const currentPrimarySize = grid.config.primarySize ?? 1\r\n if (currentPrimarySize !== primarySize[0]) {\r\n grid.config.primarySize = primarySize[0]\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [primarySize, grid, initialized, bimDispatch])\r\n\r\n // Update grid secondary size when changed\r\n React.useEffect(() => {\r\n if (!grid?.config || !initialized) return\r\n\r\n const currentSecondarySize = grid.config.secondarySize ?? 10\r\n if (currentSecondarySize !== secondarySize[0]) {\r\n grid.config.secondarySize = secondarySize[0]\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [secondarySize, grid, initialized, bimDispatch])\r\n\r\n // Update grid elevation when changed\r\n React.useEffect(() => {\r\n if (!grid?.three?.position || !initialized) return\r\n\r\n const currentElevation = grid.three.position.y ?? 0\r\n if (currentElevation !== elevation[0]) {\r\n grid.three.position.y = elevation[0]\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [elevation, grid, initialized, bimDispatch])\r\n\r\n // Update grid rotation when changed\r\n React.useEffect(() => {\r\n if (!grid?.three?.rotation || !initialized) return\r\n\r\n const currentRotationDegrees = (grid.three.rotation.y * 180) / Math.PI\r\n if (Math.abs(currentRotationDegrees - rotationY[0]) > 0.001) { // Use small tolerance for floating point comparison\r\n grid.three.rotation.y = (rotationY[0] * Math.PI) / 180\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [rotationY, grid, initialized, bimDispatch])\r\n\r\n return (\r\n <CollapsibleSection\r\n title={t('gridTitle')}\r\n chevronPosition=\"left\"\r\n switchVariant={{\r\n checked: gridVisible,\r\n onCheckedChange: setGridVisible,\r\n disabled: false,\r\n }}\r\n defaultOpen={false}\r\n >\r\n <div className=\"space-y-4\">\r\n {/* Grid Color */}\r\n <div className=\"space-y-2\">\r\n <label className={`text-sm font-medium ${gridVisible ? '' : 'text-gray-400'}`}>Grid Color</label>\r\n <div className={`p-2 border rounded-md ${gridVisible ? 'bg-white' : 'bg-gray-100'}`}>\r\n <ColorInput\r\n value={gridColor}\r\n onChange={e => setGridColor(e.target.value)}\r\n disabled={!gridVisible}\r\n defaultColor=\"#bbbbbb\"\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Grid Primary Size */}\r\n <SliderWithInput\r\n label={t('primaryLabel')}\r\n value={primarySize}\r\n onValueChange={setPrimarySize}\r\n min={0}\r\n max={10}\r\n step={0.1}\r\n disabled={!gridVisible}\r\n />\r\n\r\n {/* Grid Secondary Size */}\r\n <SliderWithInput\r\n label={t('secondaryLabel')}\r\n value={secondarySize}\r\n onValueChange={setSecondarySize}\r\n min={0}\r\n max={20}\r\n step={0.1}\r\n disabled={!gridVisible}\r\n />\r\n\r\n {/* Grid Elevation */}\r\n <SliderWithInput\r\n label={t('elevationLabel')}\r\n value={elevation}\r\n onValueChange={setElevation}\r\n min={-50}\r\n max={50}\r\n step={0.5}\r\n unit=\"m\"\r\n disabled={!gridVisible}\r\n />\r\n\r\n {/* Grid Rotation */}\r\n <SliderWithInput\r\n label={t('rotationLabel')}\r\n value={rotationY}\r\n onValueChange={setRotationZ}\r\n min={-360}\r\n max={360}\r\n step={1}\r\n unit=\"°\"\r\n disabled={!gridVisible}\r\n />\r\n </div>\r\n </CollapsibleSection>\r\n )\r\n}\r\n"],"mappings":";AAqKQ,SACE,KADF;AAnKR,YAAY,WAAW;AACvB,SAAS,uBAAuB;AAChC,SAAS,uBAAuB;AAChC,SAAS,kBAAkB;AAC3B,SAAS,0BAA0B;AACnC,SAAS,kBAAkB;AAC3B,YAAY,WAAW;AAEhB,SAAS,iBAAiB;AAE/B,QAAM,IAAI,gBAAgB,gBAAgB;AAE1C,QAAM,EAAE,UAAU,aAAa,OAAO,SAAS,IAAI,MAAM,WAAW,UAAU;AAC9E,QAAM,EAAE,KAAK,IAAI,SAAS;AAG1B,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAAS,MAAM;AAlB7D;AAmBI,YAAO,wCAAM,WAAN,mBAAc,YAAd,YAAyB;AAAA,EAClC,CAAC;AACD,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,MAAM;AArBzD;AAsBI,aAAO,kCAAM,WAAN,mBAAc,SAAQ,IAAI,KAAK,OAAO,MAAM,aAAa,CAAC,KAAK;AAAA,EACxE,CAAC;AACD,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAAS,MAAM;AAxB7D;AAyBI,WAAO,EAAC,wCAAM,WAAN,mBAAc,gBAAd,YAA6B,CAAC;AAAA,EACxC,CAAC;AACD,QAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM,SAAS,MAAM;AA3BjE;AA4BI,WAAO,EAAC,wCAAM,WAAN,mBAAc,kBAAd,YAA+B,EAAE;AAAA,EAC3C,CAAC;AACD,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,MAAM;AA9BzD;AA+BI,WAAO,EAAC,8CAAM,UAAN,mBAAa,aAAb,mBAAuB,MAAvB,YAA4B,CAAC;AAAA,EACvC,CAAC;AACD,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,MAAM;AAjCzD;AAkCI,UAAM,oBAAkB,wCAAM,UAAN,mBAAa,aAAb,mBAAuB,KAAK,KAAK,MAAM,SAAS,IAAI,MAAO,KAAK,KAAK;AAC7F,WAAO,CAAC,eAAe;AAAA,EACzB,CAAC;AAGD,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAAS,KAAK;AAG1D,QAAM,UAAU,MAAM;AA1CxB;AA2CI,QAAI,CAAC,QAAQ,YAAa;AAG1B,QAAI,KAAK,QAAQ;AACf,sBAAe,UAAK,OAAO,YAAZ,YAAuB,IAAI;AAC1C,qBAAe,EAAC,UAAK,OAAO,gBAAZ,YAA2B,CAAC,CAAC;AAC7C,uBAAiB,EAAC,UAAK,OAAO,kBAAZ,YAA6B,EAAE,CAAC;AAClD,UAAI,KAAK,OAAO,OAAO;AACrB,qBAAa,IAAI,KAAK,OAAO,MAAM,aAAa,CAAC,EAAE;AAAA,MACrD;AAAA,IACF;AAEA,QAAI,KAAK,OAAO;AACd,UAAI,KAAK,MAAM,UAAU;AACvB,qBAAa,EAAC,UAAK,MAAM,SAAS,MAApB,YAAyB,CAAC,CAAC;AAAA,MAC3C;AACA,UAAI,KAAK,MAAM,UAAU;AACvB,cAAM,kBAAmB,KAAK,MAAM,SAAS,IAAI,MAAO,KAAK;AAC7D,qBAAa,CAAC,4CAAmB,CAAC,CAAC;AAAA,MACrC;AAAA,IACF;AAEA,mBAAe,IAAI;AAAA,EACrB,GAAG,CAAC,MAAM,WAAW,CAAC;AAGtB,QAAM,UAAU,MAAM;AArExB;AAsEI,QAAI,EAAC,6BAAM,WAAU,CAAC,YAAa;AAEnC,UAAM,kBAAiB,UAAK,OAAO,YAAZ,YAAuB;AAC9C,QAAI,mBAAmB,aAAa;AAClC,WAAK,OAAO,UAAU;AACtB,kBAAY;AAAA,QACV,MAAM;AAAA,QACN,SAAS,EAAE,KAAK;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,aAAa,MAAM,aAAa,WAAW,CAAC;AAGhD,QAAM,UAAU,MAAM;AACpB,QAAI,EAAC,6BAAM,WAAU,CAAC,YAAa;AAEnC,UAAM,eAAe,KAAK,OAAO,QAAQ,IAAI,KAAK,OAAO,MAAM,aAAa,CAAC,KAAK;AAClF,QAAI,iBAAiB,WAAW;AAC9B,WAAK,OAAO,QAAQ,IAAI,MAAM,MAAM,SAAS;AAC7C,kBAAY;AAAA,QACV,MAAM;AAAA,QACN,SAAS,EAAE,KAAK;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,WAAW,MAAM,aAAa,WAAW,CAAC;AAG9C,QAAM,UAAU,MAAM;AAjGxB;AAkGI,QAAI,EAAC,6BAAM,WAAU,CAAC,YAAa;AAEnC,UAAM,sBAAqB,UAAK,OAAO,gBAAZ,YAA2B;AACtD,QAAI,uBAAuB,YAAY,CAAC,GAAG;AACzC,WAAK,OAAO,cAAc,YAAY,CAAC;AACvC,kBAAY;AAAA,QACV,MAAM;AAAA,QACN,SAAS,EAAE,KAAK;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,aAAa,MAAM,aAAa,WAAW,CAAC;AAGhD,QAAM,UAAU,MAAM;AA/GxB;AAgHI,QAAI,EAAC,6BAAM,WAAU,CAAC,YAAa;AAEnC,UAAM,wBAAuB,UAAK,OAAO,kBAAZ,YAA6B;AAC1D,QAAI,yBAAyB,cAAc,CAAC,GAAG;AAC7C,WAAK,OAAO,gBAAgB,cAAc,CAAC;AAC3C,kBAAY;AAAA,QACV,MAAM;AAAA,QACN,SAAS,EAAE,KAAK;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,eAAe,MAAM,aAAa,WAAW,CAAC;AAGlD,QAAM,UAAU,MAAM;AA7HxB;AA8HI,QAAI,GAAC,kCAAM,UAAN,mBAAa,aAAY,CAAC,YAAa;AAE5C,UAAM,oBAAmB,UAAK,MAAM,SAAS,MAApB,YAAyB;AAClD,QAAI,qBAAqB,UAAU,CAAC,GAAG;AACrC,WAAK,MAAM,SAAS,IAAI,UAAU,CAAC;AACnC,kBAAY;AAAA,QACV,MAAM;AAAA,QACN,SAAS,EAAE,KAAK;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,WAAW,MAAM,aAAa,WAAW,CAAC;AAG9C,QAAM,UAAU,MAAM;AA3IxB;AA4II,QAAI,GAAC,kCAAM,UAAN,mBAAa,aAAY,CAAC,YAAa;AAE5C,UAAM,yBAA0B,KAAK,MAAM,SAAS,IAAI,MAAO,KAAK;AACpE,QAAI,KAAK,IAAI,yBAAyB,UAAU,CAAC,CAAC,IAAI,MAAO;AAC3D,WAAK,MAAM,SAAS,IAAK,UAAU,CAAC,IAAI,KAAK,KAAM;AACnD,kBAAY;AAAA,QACV,MAAM;AAAA,QACN,SAAS,EAAE,KAAK;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,WAAW,MAAM,aAAa,WAAW,CAAC;AAE9C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,EAAE,WAAW;AAAA,MACpB,iBAAgB;AAAA,MAChB,eAAe;AAAA,QACb,SAAS;AAAA,QACT,iBAAiB;AAAA,QACjB,UAAU;AAAA,MACZ;AAAA,MACA,aAAa;AAAA,MAEb,+BAAC,SAAI,WAAU,aAEb;AAAA,6BAAC,SAAI,WAAU,aACb;AAAA,8BAAC,WAAM,WAAW,uBAAuB,cAAc,KAAK,eAAe,IAAI,wBAAU;AAAA,UACzF,oBAAC,SAAI,WAAW,yBAAyB,cAAc,aAAa,aAAa,IAC/E;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,cACP,UAAU,OAAK,aAAa,EAAE,OAAO,KAAK;AAAA,cAC1C,UAAU,CAAC;AAAA,cACX,cAAa;AAAA;AAAA,UACf,GACF;AAAA,WACF;AAAA,QAGA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,EAAE,cAAc;AAAA,YACvB,OAAO;AAAA,YACP,eAAe;AAAA,YACf,KAAK;AAAA,YACL,KAAK;AAAA,YACL,MAAM;AAAA,YACN,UAAU,CAAC;AAAA;AAAA,QACb;AAAA,QAGA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,EAAE,gBAAgB;AAAA,YACzB,OAAO;AAAA,YACP,eAAe;AAAA,YACf,KAAK;AAAA,YACL,KAAK;AAAA,YACL,MAAM;AAAA,YACN,UAAU,CAAC;AAAA;AAAA,QACb;AAAA,QAGA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,EAAE,gBAAgB;AAAA,YACzB,OAAO;AAAA,YACP,eAAe;AAAA,YACf,KAAK;AAAA,YACL,KAAK;AAAA,YACL,MAAM;AAAA,YACN,MAAK;AAAA,YACL,UAAU,CAAC;AAAA;AAAA,QACb;AAAA,QAGA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,EAAE,eAAe;AAAA,YACxB,OAAO;AAAA,YACP,eAAe;AAAA,YACf,KAAK;AAAA,YACL,KAAK;AAAA,YACL,MAAM;AAAA,YACN,MAAK;AAAA,YACL,UAAU,CAAC;AAAA;AAAA,QACb;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport { useTranslations } from 'next-intl'\r\nimport { SliderWithInput } from '../../../../../../../ui/Slider'\r\nimport { ColorInput } from '../../../../../../../ui/Input'\r\nimport { CollapsibleSection } from '../../../../../../../ui/CollapsibleSection'\r\nimport { BimContext } from '../../../../../../../../store'\r\nimport * as THREE from 'three'\r\n\r\nexport function GridManagement() {\r\n // Translation\r\n const t = useTranslations('GridManagement')\r\n\r\n const { dispatch: bimDispatch, state: bimState } = React.useContext(BimContext)\r\n const { grid } = bimState.bim\r\n\r\n // Use lazy initialization to get values from grid\r\n const [gridVisible, setGridVisible] = React.useState(() => {\r\n return grid?.config?.visible ?? true\r\n })\r\n const [gridColor, setGridColor] = React.useState(() => {\r\n return grid?.config?.color ? `#${grid.config.color.getHexString()}` : '#bbbbbb'\r\n })\r\n const [primarySize, setPrimarySize] = React.useState(() => {\r\n return [grid?.config?.primarySize ?? 1]\r\n })\r\n const [secondarySize, setSecondarySize] = React.useState(() => {\r\n return [grid?.config?.secondarySize ?? 10]\r\n })\r\n const [elevation, setElevation] = React.useState(() => {\r\n return [grid?.three?.position?.y ?? 0]\r\n })\r\n const [rotationY, setRotationZ] = React.useState(() => {\r\n const rotationDegrees = grid?.three?.rotation?.y ? (grid.three.rotation.y * 180) / Math.PI : 0\r\n return [rotationDegrees]\r\n })\r\n\r\n // Track if we've initialized to prevent re-initialization\r\n const [initialized, setInitialized] = React.useState(false)\r\n\r\n // Initialize state with current grid values (only once)\r\n React.useEffect(() => {\r\n if (!grid || initialized) return\r\n\r\n // Load all values from grid in one go\r\n if (grid.config) {\r\n setGridVisible(grid.config.visible ?? true)\r\n setPrimarySize([grid.config.primarySize ?? 1])\r\n setSecondarySize([grid.config.secondarySize ?? 10])\r\n if (grid.config.color) {\r\n setGridColor(`#${grid.config.color.getHexString()}`)\r\n }\r\n }\r\n\r\n if (grid.three) {\r\n if (grid.three.position) {\r\n setElevation([grid.three.position.y ?? 0])\r\n }\r\n if (grid.three.rotation) {\r\n const rotationDegrees = (grid.three.rotation.y * 180) / Math.PI\r\n setRotationZ([rotationDegrees ?? 0])\r\n }\r\n }\r\n\r\n setInitialized(true)\r\n }, [grid, initialized])\r\n\r\n // Update grid visibility when changed\r\n React.useEffect(() => {\r\n if (!grid?.config || !initialized) return\r\n\r\n const currentVisible = grid.config.visible ?? true\r\n if (currentVisible !== gridVisible) {\r\n grid.config.visible = gridVisible\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [gridVisible, grid, initialized, bimDispatch])\r\n\r\n // Update grid color when changed\r\n React.useEffect(() => {\r\n if (!grid?.config || !initialized) return\r\n\r\n const currentColor = grid.config.color ? `#${grid.config.color.getHexString()}` : '#bbbbbb'\r\n if (currentColor !== gridColor) {\r\n grid.config.color = new THREE.Color(gridColor)\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [gridColor, grid, initialized, bimDispatch])\r\n\r\n // Update grid primary size when changed\r\n React.useEffect(() => {\r\n if (!grid?.config || !initialized) return\r\n\r\n const currentPrimarySize = grid.config.primarySize ?? 1\r\n if (currentPrimarySize !== primarySize[0]) {\r\n grid.config.primarySize = primarySize[0]\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [primarySize, grid, initialized, bimDispatch])\r\n\r\n // Update grid secondary size when changed\r\n React.useEffect(() => {\r\n if (!grid?.config || !initialized) return\r\n\r\n const currentSecondarySize = grid.config.secondarySize ?? 10\r\n if (currentSecondarySize !== secondarySize[0]) {\r\n grid.config.secondarySize = secondarySize[0]\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [secondarySize, grid, initialized, bimDispatch])\r\n\r\n // Update grid elevation when changed\r\n React.useEffect(() => {\r\n if (!grid?.three?.position || !initialized) return\r\n\r\n const currentElevation = grid.three.position.y ?? 0\r\n if (currentElevation !== elevation[0]) {\r\n grid.three.position.y = elevation[0]\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [elevation, grid, initialized, bimDispatch])\r\n\r\n // Update grid rotation when changed\r\n React.useEffect(() => {\r\n if (!grid?.three?.rotation || !initialized) return\r\n\r\n const currentRotationDegrees = (grid.three.rotation.y * 180) / Math.PI\r\n if (Math.abs(currentRotationDegrees - rotationY[0]) > 0.001) { // Use small tolerance for floating point comparison\r\n grid.three.rotation.y = (rotationY[0] * Math.PI) / 180\r\n bimDispatch({\r\n type: 'SET_GRID',\r\n payload: { grid },\r\n })\r\n }\r\n }, [rotationY, grid, initialized, bimDispatch])\r\n\r\n return (\r\n <CollapsibleSection\r\n title={t('gridTitle')}\r\n chevronPosition=\"left\"\r\n switchVariant={{\r\n checked: gridVisible,\r\n onCheckedChange: setGridVisible,\r\n disabled: false,\r\n }}\r\n defaultOpen={false}\r\n >\r\n <div className=\"space-y-4\">\r\n {/* Grid Color */}\r\n <div className=\"space-y-2\">\r\n <label className={`text-sm font-medium ${gridVisible ? '' : 'text-gray-400'}`}>Grid Color</label>\r\n <div className={`p-2 border rounded-md ${gridVisible ? 'bg-white' : 'bg-gray-100'}`}>\r\n <ColorInput\r\n value={gridColor}\r\n onChange={e => setGridColor(e.target.value)}\r\n disabled={!gridVisible}\r\n defaultColor=\"#bbbbbb\"\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Grid Primary Size */}\r\n <SliderWithInput\r\n label={t('primaryLabel')}\r\n value={primarySize}\r\n onValueChange={setPrimarySize}\r\n min={0}\r\n max={10}\r\n step={0.1}\r\n disabled={!gridVisible}\r\n />\r\n\r\n {/* Grid Secondary Size */}\r\n <SliderWithInput\r\n label={t('secondaryLabel')}\r\n value={secondarySize}\r\n onValueChange={setSecondarySize}\r\n min={0}\r\n max={20}\r\n step={0.1}\r\n disabled={!gridVisible}\r\n />\r\n\r\n {/* Grid Elevation */}\r\n <SliderWithInput\r\n label={t('elevationLabel')}\r\n value={elevation}\r\n onValueChange={setElevation}\r\n min={-50}\r\n max={50}\r\n step={0.5}\r\n unit=\"m\"\r\n disabled={!gridVisible}\r\n />\r\n\r\n {/* Grid Rotation */}\r\n <SliderWithInput\r\n label={t('rotationLabel')}\r\n value={rotationY}\r\n onValueChange={setRotationZ}\r\n min={-360}\r\n max={360}\r\n step={1}\r\n unit=\"°\"\r\n disabled={!gridVisible}\r\n />\r\n </div>\r\n </CollapsibleSection>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LightingManagement.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/LightingManagement.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LightingManagement.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/LightingManagement.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,wBAAgB,kBAAkB,sBAkDjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/LightingManagement.tsx"],"sourcesContent":["'use client'\r\n\r\nimport * as React from \"react\";\r\nimport { useTranslations } from 'next-intl'\r\nimport { Slider } from '../../../../../../../ui/Slider'\r\nimport { ColorInput } from '../../../../../../../ui/Input'\r\nimport { CollapsibleSection } from '../../../../../../../ui/CollapsibleSection'\r\n\r\nexport function LightingManagement() {\r\n // Translation\r\n const t = useTranslations('LightingManagement')\r\n\r\n const [lightingEnabled, setLightingEnabled] = React.useState(true)\r\n const [lightingDistance, setLightingDistance] = React.useState([500])\r\n const [lightingColor, setLightingColor] = React.useState('#F65234')\r\n\r\n return (\r\n <CollapsibleSection\r\n title={t('lightingTitle')}\r\n chevronPosition=\"left\"\r\n switchVariant={{\r\n checked: lightingEnabled,\r\n onCheckedChange: setLightingEnabled,\r\n disabled: false,\r\n }}\r\n defaultOpen={false}\r\n >\r\n <div className=\"space-y-4\">\r\n {/* Lighting Color */}\r\n <div className=\"space-y-2\">\r\n <label className={`text-sm font-medium ${lightingEnabled ? '' : 'text-gray-400'}`}>{t('colorLabel')}</label>\r\n <div className={`p-2 border rounded-md ${lightingEnabled ? 'bg-white' : 'bg-gray-100'}`}>\r\n <ColorInput\r\n value={lightingColor}\r\n onChange={e => setLightingColor(e.target.value)}\r\n disabled={!lightingEnabled}\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Lighting Distance */}\r\n <div className=\"space-y-2\">\r\n <div className=\"flex justify-between text-sm\">\r\n <label className={`font-medium ${lightingEnabled ? '' : 'text-gray-400'}`}>{t('distanceLabel')}</label>\r\n <span className={`${lightingEnabled ? 'text-gray-500' : 'text-gray-400'}`}>{lightingDistance[0]}</span>\r\n </div>\r\n <Slider\r\n value={lightingDistance}\r\n onValueChange={setLightingDistance}\r\n max={1000}\r\n min={0}\r\n step={10}\r\n disabled={!lightingEnabled}\r\n />\r\n </div>\r\n </div>\r\n </CollapsibleSection>\r\n )\r\n}"],"mappings":";
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/LightingManagement.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from \"react\";\r\nimport { useTranslations } from 'next-intl'\r\nimport { Slider } from '../../../../../../../ui/Slider'\r\nimport { ColorInput } from '../../../../../../../ui/Input'\r\nimport { CollapsibleSection } from '../../../../../../../ui/CollapsibleSection'\r\n\r\nexport function LightingManagement() {\r\n // Translation\r\n const t = useTranslations('LightingManagement')\r\n\r\n const [lightingEnabled, setLightingEnabled] = React.useState(true)\r\n const [lightingDistance, setLightingDistance] = React.useState([500])\r\n const [lightingColor, setLightingColor] = React.useState('#F65234')\r\n\r\n return (\r\n <CollapsibleSection\r\n title={t('lightingTitle')}\r\n chevronPosition=\"left\"\r\n switchVariant={{\r\n checked: lightingEnabled,\r\n onCheckedChange: setLightingEnabled,\r\n disabled: false,\r\n }}\r\n defaultOpen={false}\r\n >\r\n <div className=\"space-y-4\">\r\n {/* Lighting Color */}\r\n <div className=\"space-y-2\">\r\n <label className={`text-sm font-medium ${lightingEnabled ? '' : 'text-gray-400'}`}>{t('colorLabel')}</label>\r\n <div className={`p-2 border rounded-md ${lightingEnabled ? 'bg-white' : 'bg-gray-100'}`}>\r\n <ColorInput\r\n value={lightingColor}\r\n onChange={e => setLightingColor(e.target.value)}\r\n disabled={!lightingEnabled}\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Lighting Distance */}\r\n <div className=\"space-y-2\">\r\n <div className=\"flex justify-between text-sm\">\r\n <label className={`font-medium ${lightingEnabled ? '' : 'text-gray-400'}`}>{t('distanceLabel')}</label>\r\n <span className={`${lightingEnabled ? 'text-gray-500' : 'text-gray-400'}`}>{lightingDistance[0]}</span>\r\n </div>\r\n <Slider\r\n value={lightingDistance}\r\n onValueChange={setLightingDistance}\r\n max={1000}\r\n min={0}\r\n step={10}\r\n disabled={!lightingEnabled}\r\n />\r\n </div>\r\n </div>\r\n </CollapsibleSection>\r\n )\r\n}"],"mappings":";AAgCQ,SACE,KADF;AA3BR,YAAY,WAAW;AACvB,SAAS,uBAAuB;AAChC,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,0BAA0B;AAE5B,SAAS,qBAAqB;AAEnC,QAAM,IAAI,gBAAgB,oBAAoB;AAE9C,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,MAAM,SAAS,IAAI;AACjE,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,MAAM,SAAS,CAAC,GAAG,CAAC;AACpE,QAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM,SAAS,SAAS;AAElE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,EAAE,eAAe;AAAA,MACxB,iBAAgB;AAAA,MAChB,eAAe;AAAA,QACb,SAAS;AAAA,QACT,iBAAiB;AAAA,QACjB,UAAU;AAAA,MACZ;AAAA,MACA,aAAa;AAAA,MAEb,+BAAC,SAAI,WAAU,aAEb;AAAA,6BAAC,SAAI,WAAU,aACb;AAAA,8BAAC,WAAM,WAAW,uBAAuB,kBAAkB,KAAK,eAAe,IAAK,YAAE,YAAY,GAAE;AAAA,UACpG,oBAAC,SAAI,WAAW,yBAAyB,kBAAkB,aAAa,aAAa,IACnF;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,cACP,UAAU,OAAK,iBAAiB,EAAE,OAAO,KAAK;AAAA,cAC9C,UAAU,CAAC;AAAA;AAAA,UACb,GACF;AAAA,WACF;AAAA,QAGA,qBAAC,SAAI,WAAU,aACb;AAAA,+BAAC,SAAI,WAAU,gCACb;AAAA,gCAAC,WAAM,WAAW,eAAe,kBAAkB,KAAK,eAAe,IAAK,YAAE,eAAe,GAAE;AAAA,YAC/F,oBAAC,UAAK,WAAW,GAAG,kBAAkB,kBAAkB,eAAe,IAAK,2BAAiB,CAAC,GAAE;AAAA,aAClG;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,cACP,eAAe;AAAA,cACf,KAAK;AAAA,cACL,KAAK;AAAA,cACL,MAAM;AAAA,cACN,UAAU,CAAC;AAAA;AAAA,UACb;AAAA,WACF;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderMode.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RenderMode.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,wBAAgB,UAAU,sBAuDzB"}
|
package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.tsx"],"sourcesContent":["'use client'\r\n\r\nimport * as React from \"react\";\r\nimport { useTranslations } from 'next-intl'\r\nimport * as LR from 'lucide-react'\r\nimport { Tabs, TabsList, TabsTrigger } from '../../../../../../../ui/Tabs'\r\nimport { BimContext } from '../../../../../../../../store/BIM/context'\r\nimport * as OBC from '@thatopen/components'\r\nimport { GhostMode } from '../../../../GhostMode'\r\n\r\nexport function RenderMode() {\r\n // Translation\r\n type Modes = 'Shadowed' | 'Basic' | 'Ghost'\r\n const t = useTranslations('RenderMode')\r\n\r\n const [renderMode, setRenderMode] = React.useState<Modes>('Shadowed')\r\n const { state: bimState } = React.useContext(BimContext)\r\n const { world, bimComponents } = bimState.bim\r\n\r\n const handleCameraModeChange = (mode: Modes) => {\r\n if (!(bimComponents && world)) return\r\n setRenderMode(mode)\r\n\r\n const ghostMode = bimComponents.get(GhostMode)\r\n if (!ghostMode) return\r\n\r\n switch (mode) {\r\n case 'Shadowed':\r\n world.renderer.three.shadowMap.enabled = true;\r\n ghostMode.restoreModelMaterials()\r\n break\r\n case 'Basic':\r\n world.renderer.three.shadowMap.enabled = false;\r\n ghostMode.restoreModelMaterials()\r\n break\r\n case 'Ghost':\r\n ghostMode.setModelTransparent()\r\n break\r\n default:\r\n break;\r\n }\r\n\r\n }\r\n\r\n return (\r\n <div className=\"space-y-2\">\r\n <label className=\"text-sm font-medium\">{t('renderModeTitle')}</label>\r\n <Tabs value={renderMode} onValueChange={handleCameraModeChange} variant=\"switch\">\r\n <TabsList className=\"grid w-full grid-cols-3\">\r\n <TabsTrigger value=\"Shadowed\">\r\n <LR.Umbrella className=\"w-4 h-4 mr-2\" />\r\n {t('shadowed')}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"Basic\">\r\n <LR.UmbrellaOff className=\"w-4 h-4 mr-2\" />\r\n {t('basic')}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"Ghost\">\r\n <LR.Ghost className=\"w-4 h-4 mr-2\" />\r\n {t('ghost')}\r\n </TabsTrigger>\r\n </TabsList>\r\n </Tabs>\r\n </div>\r\n )\r\n}"],"mappings":";
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from \"react\";\r\nimport { useTranslations } from 'next-intl'\r\nimport * as LR from 'lucide-react'\r\nimport { Tabs, TabsList, TabsTrigger } from '../../../../../../../ui/Tabs'\r\nimport { BimContext } from '../../../../../../../../store/BIM/context'\r\nimport * as OBC from '@thatopen/components'\r\nimport { GhostMode } from '../../../../GhostMode'\r\n\r\nexport function RenderMode() {\r\n // Translation\r\n type Modes = 'Shadowed' | 'Basic' | 'Ghost'\r\n const t = useTranslations('RenderMode')\r\n\r\n const [renderMode, setRenderMode] = React.useState<Modes>('Shadowed')\r\n const { state: bimState } = React.useContext(BimContext)\r\n const { world, bimComponents } = bimState.bim\r\n\r\n const handleCameraModeChange = (mode: Modes) => {\r\n if (!(bimComponents && world)) return\r\n setRenderMode(mode)\r\n\r\n const ghostMode = bimComponents.get(GhostMode)\r\n if (!ghostMode) return\r\n\r\n switch (mode) {\r\n case 'Shadowed':\r\n world.renderer.three.shadowMap.enabled = true;\r\n ghostMode.restoreModelMaterials()\r\n break\r\n case 'Basic':\r\n world.renderer.three.shadowMap.enabled = false;\r\n ghostMode.restoreModelMaterials()\r\n break\r\n case 'Ghost':\r\n ghostMode.setModelTransparent()\r\n break\r\n default:\r\n break;\r\n }\r\n\r\n }\r\n\r\n return (\r\n <div className=\"space-y-2\">\r\n <label className=\"text-sm font-medium\">{t('renderModeTitle')}</label>\r\n <Tabs value={renderMode} onValueChange={handleCameraModeChange} variant=\"switch\">\r\n <TabsList className=\"grid w-full grid-cols-3\">\r\n <TabsTrigger value=\"Shadowed\">\r\n <LR.Umbrella className=\"w-4 h-4 mr-2\" />\r\n {t('shadowed')}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"Basic\">\r\n <LR.UmbrellaOff className=\"w-4 h-4 mr-2\" />\r\n {t('basic')}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"Ghost\">\r\n <LR.Ghost className=\"w-4 h-4 mr-2\" />\r\n {t('ghost')}\r\n </TabsTrigger>\r\n </TabsList>\r\n </Tabs>\r\n </div>\r\n )\r\n}"],"mappings":";AAiDM,cAGI,YAHJ;AA5CN,YAAY,WAAW;AACvB,SAAS,uBAAuB;AAChC,YAAY,QAAQ;AACpB,SAAS,MAAM,UAAU,mBAAmB;AAC5C,SAAS,kBAAkB;AAE3B,SAAS,iBAAiB;AAEnB,SAAS,aAAa;AAG3B,QAAM,IAAI,gBAAgB,YAAY;AAEtC,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM,SAAgB,UAAU;AACpE,QAAM,EAAE,OAAO,SAAS,IAAI,MAAM,WAAW,UAAU;AACvD,QAAM,EAAE,OAAO,cAAc,IAAI,SAAS;AAE1C,QAAM,yBAAyB,CAAC,SAAgB;AAC9C,QAAI,EAAE,iBAAiB,OAAQ;AAC/B,kBAAc,IAAI;AAElB,UAAM,YAAY,cAAc,IAAI,SAAS;AAC7C,QAAI,CAAC,UAAW;AAEhB,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,cAAM,SAAS,MAAM,UAAU,UAAU;AACzC,kBAAU,sBAAsB;AAChC;AAAA,MACF,KAAK;AACH,cAAM,SAAS,MAAM,UAAU,UAAU;AACzC,kBAAU,sBAAsB;AAChC;AAAA,MACF,KAAK;AACH,kBAAU,oBAAoB;AAC9B;AAAA,MACF;AACE;AAAA,IACJ;AAAA,EAEF;AAEA,SACE,qBAAC,SAAI,WAAU,aACb;AAAA,wBAAC,WAAM,WAAU,uBAAuB,YAAE,iBAAiB,GAAE;AAAA,IAC7D,oBAAC,QAAK,OAAO,YAAY,eAAe,wBAAwB,SAAQ,UACtE,+BAAC,YAAS,WAAU,2BAClB;AAAA,2BAAC,eAAY,OAAM,YACjB;AAAA,4BAAC,GAAG,UAAH,EAAY,WAAU,gBAAe;AAAA,QACrC,EAAE,UAAU;AAAA,SACf;AAAA,MACA,qBAAC,eAAY,OAAM,SACjB;AAAA,4BAAC,GAAG,aAAH,EAAe,WAAU,gBAAe;AAAA,QACxC,EAAE,OAAO;AAAA,SACZ;AAAA,MACA,qBAAC,eAAY,OAAM,SACjB;AAAA,4BAAC,GAAG,OAAH,EAAS,WAAU,gBAAe;AAAA,QAClC,EAAE,OAAO;AAAA,SACZ;AAAA,OACF,GACF;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToggleProjection.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ToggleProjection.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,wBAAgB,gBAAgB,sBAyD/B"}
|
package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.tsx"],"sourcesContent":["'use client'\r\n\r\nimport * as React from \"react\";\r\nimport { useTranslations } from 'next-intl'\r\nimport { Globe, Grid3X3 } from 'lucide-react'\r\nimport { Tabs, TabsList, TabsTrigger } from '../../../../../../../ui/Tabs'\r\nimport { BimContext } from '../../../../../../../../store/BIM/context'\r\nimport * as OBC from '@thatopen/components'\r\nimport { ViewportGizmo } from '../../../../ViewportGizmo'\r\n\r\nexport function ToggleProjection() {\r\n // Translation\r\n const t = useTranslations('ToggleProjection')\r\n\r\n const [cameraMode, setCameraMode] = React.useState('Perspective')\r\n const { state: bimState } = React.useContext(BimContext)\r\n const { world, bimComponents } = bimState.bim\r\n\r\n type Projections = 'Orthographic' | 'Perspective'\r\n const [setCameraProjectionLabel] = React.useState<Projections>('Orthographic')\r\n\r\n // Sync camera mode with actual camera projection\r\n React.useEffect(() => {\r\n if (world?.camera instanceof OBC.OrthoPerspectiveCamera) {\r\n const currentProjection = world.camera.projection.current\r\n setCameraMode(currentProjection)\r\n }\r\n }, [world?.camera])\r\n\r\n const handleCameraModeChange = (mode: string) => {\r\n if (!(bimComponents && world && world.camera && world.camera instanceof OBC.OrthoPerspectiveCamera)) return\r\n\r\n const viewportGizmo = bimComponents.get(ViewportGizmo)\r\n if (viewportGizmo) viewportGizmo.enabled = (mode !== 'Orthographic')\r\n\r\n try {\r\n const currentProjection = world.camera.projection.current\r\n\r\n // Only toggle if the requested mode is different from current\r\n if (mode !== currentProjection) {\r\n world.camera.projection.toggle()\r\n }\r\n\r\n setCameraMode(mode)\r\n }\r\n catch (error) {\r\n console.error('Error toggling camera projection:', error)\r\n }\r\n }\r\n\r\n return (\r\n <div className=\"space-y-2\">\r\n <label className=\"text-sm font-medium\">{t('perspectiveLabel')}</label>\r\n <Tabs value={cameraMode} onValueChange={handleCameraModeChange} variant=\"switch\">\r\n <TabsList className=\"grid w-full grid-cols-2\">\r\n <TabsTrigger value=\"Perspective\">\r\n <Globe className=\"w-4 h-4 mr-2\" />\r\n {t('perspective')}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"Orthographic\">\r\n <Grid3X3 className=\"w-4 h-4 mr-2\" />\r\n {t('orthographic')}\r\n </TabsTrigger>\r\n </TabsList>\r\n </Tabs>\r\n </div>\r\n )\r\n}"],"mappings":";
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from \"react\";\r\nimport { useTranslations } from 'next-intl'\r\nimport { Globe, Grid3X3 } from 'lucide-react'\r\nimport { Tabs, TabsList, TabsTrigger } from '../../../../../../../ui/Tabs'\r\nimport { BimContext } from '../../../../../../../../store/BIM/context'\r\nimport * as OBC from '@thatopen/components'\r\nimport { ViewportGizmo } from '../../../../ViewportGizmo'\r\n\r\nexport function ToggleProjection() {\r\n // Translation\r\n const t = useTranslations('ToggleProjection')\r\n\r\n const [cameraMode, setCameraMode] = React.useState('Perspective')\r\n const { state: bimState } = React.useContext(BimContext)\r\n const { world, bimComponents } = bimState.bim\r\n\r\n type Projections = 'Orthographic' | 'Perspective'\r\n const [setCameraProjectionLabel] = React.useState<Projections>('Orthographic')\r\n\r\n // Sync camera mode with actual camera projection\r\n React.useEffect(() => {\r\n if (world?.camera instanceof OBC.OrthoPerspectiveCamera) {\r\n const currentProjection = world.camera.projection.current\r\n setCameraMode(currentProjection)\r\n }\r\n }, [world?.camera])\r\n\r\n const handleCameraModeChange = (mode: string) => {\r\n if (!(bimComponents && world && world.camera && world.camera instanceof OBC.OrthoPerspectiveCamera)) return\r\n\r\n const viewportGizmo = bimComponents.get(ViewportGizmo)\r\n if (viewportGizmo) viewportGizmo.enabled = (mode !== 'Orthographic')\r\n\r\n try {\r\n const currentProjection = world.camera.projection.current\r\n\r\n // Only toggle if the requested mode is different from current\r\n if (mode !== currentProjection) {\r\n world.camera.projection.toggle()\r\n }\r\n\r\n setCameraMode(mode)\r\n }\r\n catch (error) {\r\n console.error('Error toggling camera projection:', error)\r\n }\r\n }\r\n\r\n return (\r\n <div className=\"space-y-2\">\r\n <label className=\"text-sm font-medium\">{t('perspectiveLabel')}</label>\r\n <Tabs value={cameraMode} onValueChange={handleCameraModeChange} variant=\"switch\">\r\n <TabsList className=\"grid w-full grid-cols-2\">\r\n <TabsTrigger value=\"Perspective\">\r\n <Globe className=\"w-4 h-4 mr-2\" />\r\n {t('perspective')}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"Orthographic\">\r\n <Grid3X3 className=\"w-4 h-4 mr-2\" />\r\n {t('orthographic')}\r\n </TabsTrigger>\r\n </TabsList>\r\n </Tabs>\r\n </div>\r\n )\r\n}"],"mappings":";AAuDM,cAGI,YAHJ;AAlDN,YAAY,WAAW;AACvB,SAAS,uBAAuB;AAChC,SAAS,OAAO,eAAe;AAC/B,SAAS,MAAM,UAAU,mBAAmB;AAC5C,SAAS,kBAAkB;AAC3B,YAAY,SAAS;AACrB,SAAS,qBAAqB;AAEvB,SAAS,mBAAmB;AAEjC,QAAM,IAAI,gBAAgB,kBAAkB;AAE5C,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM,SAAS,aAAa;AAChE,QAAM,EAAE,OAAO,SAAS,IAAI,MAAM,WAAW,UAAU;AACvD,QAAM,EAAE,OAAO,cAAc,IAAI,SAAS;AAG1C,QAAM,CAAC,wBAAwB,IAAI,MAAM,SAAsB,cAAc;AAG7E,QAAM,UAAU,MAAM;AACpB,SAAI,+BAAO,mBAAkB,IAAI,wBAAwB;AACvD,YAAM,oBAAoB,MAAM,OAAO,WAAW;AAClD,oBAAc,iBAAiB;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,+BAAO,MAAM,CAAC;AAElB,QAAM,yBAAyB,CAAC,SAAiB;AAC/C,QAAI,EAAE,iBAAiB,SAAS,MAAM,UAAU,MAAM,kBAAkB,IAAI,wBAAyB;AAErG,UAAM,gBAAgB,cAAc,IAAI,aAAa;AACrD,QAAI,cAAe,eAAc,UAAW,SAAS;AAErD,QAAI;AACF,YAAM,oBAAoB,MAAM,OAAO,WAAW;AAGlD,UAAI,SAAS,mBAAmB;AAC9B,cAAM,OAAO,WAAW,OAAO;AAAA,MACjC;AAEA,oBAAc,IAAI;AAAA,IACpB,SACO,OAAO;AACZ,cAAQ,MAAM,qCAAqC,KAAK;AAAA,IAC1D;AAAA,EACF;AAEA,SACE,qBAAC,SAAI,WAAU,aACb;AAAA,wBAAC,WAAM,WAAU,uBAAuB,YAAE,kBAAkB,GAAE;AAAA,IAC9D,oBAAC,QAAK,OAAO,YAAY,eAAe,wBAAwB,SAAQ,UACtE,+BAAC,YAAS,WAAU,2BAClB;AAAA,2BAAC,eAAY,OAAM,eACjB;AAAA,4BAAC,SAAM,WAAU,gBAAe;AAAA,QAC/B,EAAE,aAAa;AAAA,SAClB;AAAA,MACA,qBAAC,eAAY,OAAM,gBACjB;AAAA,4BAAC,WAAQ,WAAU,gBAAe;AAAA,QACjC,EAAE,cAAc;AAAA,SACnB;AAAA,OACF,GACF;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabSelector.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/TabSelector.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TabSelector.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/TabSelector.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,UAAU,gBAAgB;IACxB,SAAS,EAAE,cAAc,CAAA;IACzB,iBAAiB,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,CAAA;CACjD;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,qBAyC7E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/TabSelector.tsx"],"sourcesContent":["'use client'\r\nimport * as React from 'react'\r\nimport { Separator } from '../../../../../ui/Separator'\r\nimport { useTranslations } from 'next-intl'\r\nimport { SidebarTabType } from '../../../../../../store/Menus/reducer'\r\n\r\ninterface TabSelectorProps {\r\n activeTab: SidebarTabType\r\n onTabChangeAction: (tab: SidebarTabType) => void\r\n}\r\n\r\nexport function TabSelector({ activeTab, onTabChangeAction }: TabSelectorProps) {\r\n // Translation\r\n const t = useTranslations('TabSelector')\r\n\r\n const tabs = [\r\n { id: 'file', label: t('fileLabel') },\r\n { id: 'layers', label: t('layersTitle') },\r\n { id: 'communication', label: t('communicationTitle') },\r\n { id: 'sensors', label: t('sensorsTitle') },\r\n { id: 'settings', label: t('settingsTitle') },\r\n\r\n ]\r\n\r\n return (\r\n <div>\r\n <Separator />\r\n\r\n <div className=\"px-4 py-3\">\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center gap-1\">\r\n {tabs.map(tab => (\r\n <div\r\n key={tab.id}\r\n className={`px-3 py-2 rounded-md cursor-pointer transition-colors text-xs font-medium ${\r\n activeTab === tab.id\r\n ? 'bg-accent text-accent-foreground'\r\n : 'text-muted-foreground hover:text-foreground hover:bg-accent/50'\r\n }`}\r\n onClick={() => onTabChangeAction(tab.id as SidebarTabType)}\r\n >\r\n {tab.label}\r\n </div>\r\n ))}\r\n </div>\r\n {/* <LR.Search className=\"h-4 w-4 text-muted-foreground\" /> */}\r\n </div>\r\n </div>\r\n\r\n <Separator />\r\n </div>\r\n )\r\n}\r\n"],"mappings":";
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/TabSelector.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport { Separator } from '../../../../../ui/Separator'\r\nimport { useTranslations } from 'next-intl'\r\nimport { SidebarTabType } from '../../../../../../store/Menus/reducer'\r\n\r\ninterface TabSelectorProps {\r\n activeTab: SidebarTabType\r\n onTabChangeAction: (tab: SidebarTabType) => void\r\n}\r\n\r\nexport function TabSelector({ activeTab, onTabChangeAction }: TabSelectorProps) {\r\n // Translation\r\n const t = useTranslations('TabSelector')\r\n\r\n const tabs = [\r\n { id: 'file', label: t('fileLabel') },\r\n { id: 'layers', label: t('layersTitle') },\r\n { id: 'communication', label: t('communicationTitle') },\r\n { id: 'sensors', label: t('sensorsTitle') },\r\n { id: 'settings', label: t('settingsTitle') },\r\n\r\n ]\r\n\r\n return (\r\n <div>\r\n <Separator />\r\n\r\n <div className=\"px-4 py-3\">\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center gap-1\">\r\n {tabs.map(tab => (\r\n <div\r\n key={tab.id}\r\n className={`px-3 py-2 rounded-md cursor-pointer transition-colors text-xs font-medium ${\r\n activeTab === tab.id\r\n ? 'bg-accent text-accent-foreground'\r\n : 'text-muted-foreground hover:text-foreground hover:bg-accent/50'\r\n }`}\r\n onClick={() => onTabChangeAction(tab.id as SidebarTabType)}\r\n >\r\n {tab.label}\r\n </div>\r\n ))}\r\n </div>\r\n {/* <LR.Search className=\"h-4 w-4 text-muted-foreground\" /> */}\r\n </div>\r\n </div>\r\n\r\n <Separator />\r\n </div>\r\n )\r\n}\r\n"],"mappings":";AA6BI,SACE,KADF;AAvBJ,SAAS,iBAAiB;AAC1B,SAAS,uBAAuB;AAQzB,SAAS,YAAY,EAAE,WAAW,kBAAkB,GAAqB;AAE9E,QAAM,IAAI,gBAAgB,aAAa;AAEvC,QAAM,OAAO;AAAA,IACX,EAAE,IAAI,QAAQ,OAAO,EAAE,WAAW,EAAE;AAAA,IACpC,EAAE,IAAI,UAAU,OAAO,EAAE,aAAa,EAAE;AAAA,IACxC,EAAE,IAAI,iBAAiB,OAAO,EAAE,oBAAoB,EAAE;AAAA,IACtD,EAAE,IAAI,WAAW,OAAO,EAAE,cAAc,EAAE;AAAA,IAC1C,EAAE,IAAI,YAAY,OAAO,EAAE,eAAe,EAAE;AAAA,EAE9C;AAEA,SACE,qBAAC,SACC;AAAA,wBAAC,aAAU;AAAA,IAEX,oBAAC,SAAI,WAAU,aACb,8BAAC,SAAI,WAAU,qCACb,8BAAC,SAAI,WAAU,2BACZ,eAAK,IAAI,SACR;AAAA,MAAC;AAAA;AAAA,QAEC,WAAW,6EACT,cAAc,IAAI,KACd,qCACA,gEACN;AAAA,QACA,SAAS,MAAM,kBAAkB,IAAI,EAAoB;AAAA,QAExD,cAAI;AAAA;AAAA,MARA,IAAI;AAAA,IASX,CACD,GACH,GAEF,GACF;AAAA,IAEA,oBAAC,aAAU;AAAA,KACb;AAEJ;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAW9B,wBAAgB,UAAU,sBA0BzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/index.tsx"],"sourcesContent":["'use client'\r\nimport * as React from 'react'\r\nimport { TabSelector } from './TabSelector'\r\nimport { FileTab } from './FileTab'\r\nimport { LayersTab } from './LayersTab'\r\nimport { CommunicationTab } from './CommunicationTab'\r\nimport { SettingsTab } from './SettingsTab'\r\nimport { BimContext, MenusContext } from '../../../../../../store'\r\nimport { SidebarTabType } from '../../../../../../store/Menus/reducer'\r\nimport { InfoSidebarContainer } from '../../../../../ui/InfoSidebar/Container'\r\nimport { SensorsTab } from './SensorsTab'\r\n\r\nexport function BimSidebar() {\r\n const { state: bimState } = React.useContext(BimContext)\r\n const { modelId } = bimState.bim\r\n const { state: menusState, dispatch: menusDispatch } = React.useContext(MenusContext)\r\n const { selectedTab } = menusState.menus\r\n\r\n const handleTabChange = (selectedTab: SidebarTabType) => {\r\n menusDispatch({ type: 'SET_SIDEBAR_SELECTED_TAB', payload: { selectedTab } })\r\n }\r\n\r\n return (\r\n <InfoSidebarContainer\r\n tabSelector={\r\n <TabSelector\r\n activeTab={selectedTab}\r\n onTabChangeAction={handleTabChange}\r\n />\r\n }\r\n >\r\n {selectedTab === 'file' && <FileTab />}\r\n {selectedTab === 'layers' && <LayersTab modelId={modelId} />}\r\n {selectedTab === 'communication' && <CommunicationTab />}\r\n {selectedTab === 'sensors' && <SensorsTab />}\r\n {selectedTab === 'settings' && <SettingsTab />}\r\n </InfoSidebarContainer>\r\n )\r\n}"],"mappings":";
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../src/core/components/viewers/bim/src/BimSidebar/src/index.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\nimport { TabSelector } from './TabSelector'\r\nimport { FileTab } from './FileTab'\r\nimport { LayersTab } from './LayersTab'\r\nimport { CommunicationTab } from './CommunicationTab'\r\nimport { SettingsTab } from './SettingsTab'\r\nimport { BimContext, MenusContext } from '../../../../../../store'\r\nimport { SidebarTabType } from '../../../../../../store/Menus/reducer'\r\nimport { InfoSidebarContainer } from '../../../../../ui/InfoSidebar/Container'\r\nimport { SensorsTab } from './SensorsTab'\r\n\r\nexport function BimSidebar() {\r\n const { state: bimState } = React.useContext(BimContext)\r\n const { modelId } = bimState.bim\r\n const { state: menusState, dispatch: menusDispatch } = React.useContext(MenusContext)\r\n const { selectedTab } = menusState.menus\r\n\r\n const handleTabChange = (selectedTab: SidebarTabType) => {\r\n menusDispatch({ type: 'SET_SIDEBAR_SELECTED_TAB', payload: { selectedTab } })\r\n }\r\n\r\n return (\r\n <InfoSidebarContainer\r\n tabSelector={\r\n <TabSelector\r\n activeTab={selectedTab}\r\n onTabChangeAction={handleTabChange}\r\n />\r\n }\r\n >\r\n {selectedTab === 'file' && <FileTab />}\r\n {selectedTab === 'layers' && <LayersTab modelId={modelId} />}\r\n {selectedTab === 'communication' && <CommunicationTab />}\r\n {selectedTab === 'sensors' && <SensorsTab />}\r\n {selectedTab === 'settings' && <SettingsTab />}\r\n </InfoSidebarContainer>\r\n )\r\n}"],"mappings":";AA2BI,SAEI,KAFJ;AAtBJ,YAAY,WAAW;AACvB,SAAS,mBAAmB;AAC5B,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAC5B,SAAS,YAAY,oBAAoB;AAEzC,SAAS,4BAA4B;AACrC,SAAS,kBAAkB;AAEpB,SAAS,aAAa;AAC3B,QAAM,EAAE,OAAO,SAAS,IAAI,MAAM,WAAW,UAAU;AACvD,QAAM,EAAE,QAAQ,IAAI,SAAS;AAC7B,QAAM,EAAE,OAAO,YAAY,UAAU,cAAc,IAAI,MAAM,WAAW,YAAY;AACpF,QAAM,EAAE,YAAY,IAAI,WAAW;AAEnC,QAAM,kBAAkB,CAACA,iBAAgC;AACvD,kBAAc,EAAE,MAAM,4BAA4B,SAAS,EAAE,aAAAA,aAAY,EAAE,CAAC;AAAA,EAC9E;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aACE;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,UACX,mBAAmB;AAAA;AAAA,MACrB;AAAA,MAGD;AAAA,wBAAgB,UAAU,oBAAC,WAAQ;AAAA,QACnC,gBAAgB,YAAY,oBAAC,aAAU,SAAkB;AAAA,QACzD,gBAAgB,mBAAmB,oBAAC,oBAAiB;AAAA,QACrD,gBAAgB,aAAa,oBAAC,cAAW;AAAA,QACzC,gBAAgB,cAAc,oBAAC,eAAY;AAAA;AAAA;AAAA,EAC9C;AAEJ;","names":["selectedTab"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CameraProjection.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/bim/src/CameraProjection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CameraProjection.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/bim/src/CameraProjection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,GAAG,MAAM,sBAAsB,CAAA;AAI3C,qBAAa,gBAAiB,SAAQ,GAAG,CAAC,SAAS;IACjD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,sCAAsC,CAAS;IACtE,OAAO,UAAO;IAEd,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,SAAS,CAAyB;IAG1C,QAAQ,CAAC,mBAAmB;oBAA+B,aAAa,GAAG,cAAc;OAAK;gBAElF,UAAU,EAAE,GAAG,CAAC,UAAU;IAWtC,IAAI,iBAAiB,yBAEpB;IAEK,aAAa,CAAC,UAAU,EAAE,aAAa,GAAG,cAAc;IAsBxD,MAAM;IAKN,eAAe;IAIf,cAAc;CAGrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/bim/src/CameraProjection.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/bim/src/CameraProjection.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as OBC from '@thatopen/components'\r\nimport { CurrentCamera } from './CurrentCamera'\r\nimport { FitCamera } from './FitCamera'\r\n\r\nexport class CameraProjection extends OBC.Component {\r\n static readonly uuid = '43b40eb1-4203-4ff7-896a-73e56ed8da9f' as const\r\n enabled = true\r\n\r\n private camera: OBC.OrthoPerspectiveCamera\r\n private fitCamera: FitCamera | null = null\r\n\r\n // Event that fires when projection changes\r\n readonly onProjectionChanged = new OBC.Event<{ projection: 'Perspective' | 'Orthographic' }>()\r\n\r\n constructor(components: OBC.Components) {\r\n super(components)\r\n components.add(CameraProjection.uuid, this)\r\n\r\n const currentCamera = components.get(CurrentCamera)\r\n if (!currentCamera.camera) throw new Error('Camera is not initialized.')\r\n\r\n this.camera = currentCamera.camera\r\n this.fitCamera = components.get(FitCamera)\r\n }\r\n\r\n get currentProjection() {\r\n return this.camera.projection.current\r\n }\r\n\r\n async setProjection(projection: 'Perspective' | 'Orthographic') {\r\n if (this.camera.projection.current === projection) return\r\n\r\n this.camera.projection.set(projection)\r\n\r\n // Force camera matrix update\r\n this.camera.three.updateMatrix()\r\n this.camera.three.updateProjectionMatrix()\r\n\r\n // Small delay to ensure projection is applied\r\n await new Promise(resolve => setTimeout(resolve, 50))\r\n\r\n if (this.fitCamera) {\r\n await this.fitCamera.fit()\r\n }\r\n\r\n // Additional delay after fitting to ensure proper rendering\r\n await new Promise(resolve => setTimeout(resolve, 100))\r\n\r\n this.onProjectionChanged.trigger({ projection })\r\n }\r\n\r\n async toggle() {\r\n const newProjection = this.camera.projection.current === 'Perspective' ? 'Orthographic' : 'Perspective'\r\n await this.setProjection(newProjection)\r\n }\r\n\r\n async setOrthographic() {\r\n await this.setProjection('Orthographic')\r\n }\r\n\r\n async setPerspective() {\r\n await this.setProjection('Perspective')\r\n }\r\n}\r\n"],"mappings":"AAGA,YAAY,SAAS;AACrB,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB;AAEnB,MAAM,oBAAN,MAAM,0BAAyB,IAAI,UAAU;AAAA,EAUlD,YAAY,YAA4B;AACtC,UAAM,UAAU;AATlB,mBAAU;AAGV,SAAQ,YAA8B;AAGtC;AAAA,SAAS,sBAAsB,IAAI,IAAI,MAAsD;AAI3F,eAAW,IAAI,kBAAiB,MAAM,IAAI;AAE1C,UAAM,gBAAgB,WAAW,IAAI,aAAa;AAClD,QAAI,CAAC,cAAc,OAAQ,OAAM,IAAI,MAAM,4BAA4B;AAEvE,SAAK,SAAS,cAAc;AAC5B,SAAK,YAAY,WAAW,IAAI,SAAS;AAAA,EAC3C;AAAA,EAEA,IAAI,oBAAoB;AACtB,WAAO,KAAK,OAAO,WAAW;AAAA,EAChC;AAAA,EAEA,MAAM,cAAc,YAA4C;AAC9D,QAAI,KAAK,OAAO,WAAW,YAAY,WAAY;AAEnD,SAAK,OAAO,WAAW,IAAI,UAAU;AAGrC,SAAK,OAAO,MAAM,aAAa;AAC/B,SAAK,OAAO,MAAM,uBAAuB;AAGzC,UAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,EAAE,CAAC;AAEpD,QAAI,KAAK,WAAW;AAClB,YAAM,KAAK,UAAU,IAAI;AAAA,IAC3B;AAGA,UAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,GAAG,CAAC;AAErD,SAAK,oBAAoB,QAAQ,EAAE,WAAW,CAAC;AAAA,EACjD;AAAA,EAEA,MAAM,SAAS;AACb,UAAM,gBAAgB,KAAK,OAAO,WAAW,YAAY,gBAAgB,iBAAiB;AAC1F,UAAM,KAAK,cAAc,aAAa;AAAA,EACxC;AAAA,EAEA,MAAM,kBAAkB;AACtB,UAAM,KAAK,cAAc,cAAc;AAAA,EACzC;AAAA,EAEA,MAAM,iBAAiB;AACrB,UAAM,KAAK,cAAc,aAAa;AAAA,EACxC;AACF;AA3Da,kBACK,OAAO;AADlB,IAAM,mBAAN;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClippingPlane.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/bim/src/ClippingPlane.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClippingPlane.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/bim/src/ClippingPlane.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,GAAG,MAAM,sBAAsB,CAAA;AAE3C,qBAAa,aAAc,SAAQ,GAAG,CAAC,SAAS;IAE5C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,sCAAsC,CAAS;IAEtE,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,SAAS,CAA2B;IAE5C,IAAI,OAAO,IAIQ,OAAO,CAFzB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EASzB;gBAEW,UAAU,EAAE,GAAG,CAAC,UAAU;IAoBtC,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,aAAa,CAUpB;IAED,YAAY;IAMZ,YAAY;IAMZ,OAAO;CAMV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/bim/src/ClippingPlane.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/bim/src/ClippingPlane.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport { CurrentWorld } from './CurrentWorld';\r\nimport * as OBC from '@thatopen/components'\r\n\r\nexport class ClippingPlane extends OBC.Component {\r\n\r\n static readonly uuid = '29b2eabd-36cd-4b42-a62c-d0509bd67d60' as const\r\n\r\n private _enabled = false\r\n private clipper: OBC.Clipper\r\n private casters: OBC.Raycasters\r\n private world: OBC.World | null = null\r\n private container: HTMLElement | null = null\r\n\r\n get enabled() {\r\n return this._enabled\r\n }\r\n\r\n set enabled(value: boolean) {\r\n this._enabled = value\r\n this.clipper.enabled = value\r\n \r\n if (value) {\r\n this.setupClippingPlane()\r\n } else {\r\n this.removeEventListeners()\r\n }\r\n }\r\n\r\n constructor(components: OBC.Components) {\r\n super(components)\r\n components.add(ClippingPlane.uuid, this)\r\n \r\n // Initialize clipper and raycasters\r\n this.clipper = components.get(OBC.Clipper)\r\n this.casters = components.get(OBC.Raycasters)\r\n this.world = components.get(CurrentWorld).world\r\n \r\n // Initialize the raycaster for the world\r\n if (this.world) {\r\n this.casters.get(this.world)\r\n }\r\n \r\n // Get the container from the world's renderer\r\n if (this.world?.renderer?.three.domElement.parentElement) {\r\n this.container = this.world.renderer.three.domElement.parentElement\r\n }\r\n }\r\n\r\n private setupClippingPlane() {\r\n if (!this.world || !this.container) {\r\n console.warn('World and container must be set before enabling clipping plane')\r\n return\r\n }\r\n\r\n // Add double-click event listener to create clipping planes\r\n this.container.ondblclick = () => {\r\n if (this.enabled && this.world) {\r\n this.clipper.create(this.world)\r\n }\r\n }\r\n\r\n // Make container focusable and focused for keyboard events\r\n this.container.tabIndex = -1\r\n this.container.focus()\r\n\r\n // Add keyboard event listener for deleting clipping planes\r\n this.container.addEventListener('keydown', this.handleKeyDown)\r\n // Also add to window as fallback\r\n window.addEventListener('keydown', this.handleKeyDown)\r\n }\r\n\r\n private removeEventListeners() {\r\n if (this.container) {\r\n this.container.ondblclick = null\r\n this.container.removeEventListener('keydown', this.handleKeyDown)\r\n }\r\n window.removeEventListener('keydown', this.handleKeyDown)\r\n }\r\n\r\n private handleKeyDown = (event: KeyboardEvent) => {\r\n console.log('Key pressed:', event.code, 'Enabled:', this.enabled); // Debug log\r\n \r\n if (event.code === \"Delete\" || event.code === \"Backspace\" || event.code === \"Escape\") {\r\n if (this.enabled && this.world) {\r\n event.preventDefault(); \r\n event.stopPropagation(); \r\n this.deletePlanes()\r\n }\r\n }\r\n }\r\n\r\n createPlanes() {\r\n if (this.enabled && this.world) {\r\n this.clipper.create(this.world)\r\n }\r\n }\r\n\r\n deletePlanes() {\r\n if (this.world) {\r\n this.clipper.deleteAll()\r\n }\r\n }\r\n\r\n dispose() {\r\n this.enabled = false\r\n this.removeEventListeners()\r\n this.world = null\r\n this.container = null\r\n }\r\n}"],"mappings":"AAGA,SAAS,oBAAoB;AAC7B,YAAY,SAAS;AAEd,MAAM,iBAAN,MAAM,uBAAsB,IAAI,UAAU;AAAA,EAyB7C,YAAY,YAA4B;AA/B5C;AAgCQ,UAAM,UAAU;AAtBpB,SAAQ,WAAW;AAGnB,SAAQ,QAA0B;AAClC,SAAQ,YAAgC;AAoExC,SAAQ,gBAAgB,CAAC,UAAyB;AAC9C,cAAQ,IAAI,gBAAgB,MAAM,MAAM,YAAY,KAAK,OAAO;AAEhE,UAAI,MAAM,SAAS,YAAY,MAAM,SAAS,eAAe,MAAM,SAAS,UAAU;AAClF,YAAI,KAAK,WAAW,KAAK,OAAO;AAC5B,gBAAM,eAAe;AACrB,gBAAM,gBAAgB;AACtB,eAAK,aAAa;AAAA,QACtB;AAAA,MACJ;AAAA,IACJ;AA3DI,eAAW,IAAI,eAAc,MAAM,IAAI;AAGvC,SAAK,UAAU,WAAW,IAAI,IAAI,OAAO;AACzC,SAAK,UAAU,WAAW,IAAI,IAAI,UAAU;AAC5C,SAAK,QAAQ,WAAW,IAAI,YAAY,EAAE;AAG1C,QAAI,KAAK,OAAO;AACZ,WAAK,QAAQ,IAAI,KAAK,KAAK;AAAA,IAC/B;AAGA,SAAI,gBAAK,UAAL,mBAAY,aAAZ,mBAAsB,MAAM,WAAW,eAAe;AACtD,WAAK,YAAY,KAAK,MAAM,SAAS,MAAM,WAAW;AAAA,IAC1D;AAAA,EACJ;AAAA,EAjCA,IAAI,UAAU;AACV,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,QAAQ,OAAgB;AACxB,SAAK,WAAW;AAChB,SAAK,QAAQ,UAAU;AAEvB,QAAI,OAAO;AACP,WAAK,mBAAmB;AAAA,IAC5B,OAAO;AACH,WAAK,qBAAqB;AAAA,IAC9B;AAAA,EACJ;AAAA,EAsBQ,qBAAqB;AACzB,QAAI,CAAC,KAAK,SAAS,CAAC,KAAK,WAAW;AAChC,cAAQ,KAAK,gEAAgE;AAC7E;AAAA,IACJ;AAGA,SAAK,UAAU,aAAa,MAAM;AAC9B,UAAI,KAAK,WAAW,KAAK,OAAO;AAC5B,aAAK,QAAQ,OAAO,KAAK,KAAK;AAAA,MAClC;AAAA,IACJ;AAGA,SAAK,UAAU,WAAW;AAC1B,SAAK,UAAU,MAAM;AAGrB,SAAK,UAAU,iBAAiB,WAAW,KAAK,aAAa;AAE7D,WAAO,iBAAiB,WAAW,KAAK,aAAa;AAAA,EACzD;AAAA,EAEQ,uBAAuB;AAC3B,QAAI,KAAK,WAAW;AAChB,WAAK,UAAU,aAAa;AAC5B,WAAK,UAAU,oBAAoB,WAAW,KAAK,aAAa;AAAA,IACpE;AACA,WAAO,oBAAoB,WAAW,KAAK,aAAa;AAAA,EAC5D;AAAA,EAcA,eAAe;AACX,QAAI,KAAK,WAAW,KAAK,OAAO;AAC5B,WAAK,QAAQ,OAAO,KAAK,KAAK;AAAA,IAClC;AAAA,EACJ;AAAA,EAEA,eAAe;AACX,QAAI,KAAK,OAAO;AACZ,WAAK,QAAQ,UAAU;AAAA,IAC3B;AAAA,EACJ;AAAA,EAEA,UAAU;AACN,SAAK,UAAU;AACf,SAAK,qBAAqB;AAC1B,SAAK,QAAQ;AACb,SAAK,YAAY;AAAA,EACrB;AACJ;AA1Ga,eAEO,OAAO;AAFpB,IAAM,gBAAN;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CurrentCamera.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/bim/src/CurrentCamera.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CurrentCamera.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/bim/src/CurrentCamera.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,GAAG,MAAM,sBAAsB,CAAA;AAE3C,qBAAa,aAAc,SAAQ,GAAG,CAAC,SAAS;IAC9C,MAAM,CAAC,IAAI,EAAG,sCAAsC,CAAS;IAE7D,OAAO,UAAQ;gBAEH,UAAU,EAAE,GAAG,CAAC,UAAU;IAKtC,OAAO,CAAC,OAAO,CAA0C;IAEzD,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,sBAAsB,GAAG,IAAI,EAEnD;IAED,IAAI,MAAM,IAJS,GAAG,CAAC,sBAAsB,GAAG,IAAI,CAMnD;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/bim/src/CurrentCamera.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/bim/src/CurrentCamera.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as OBC from '@thatopen/components'\r\n\r\nexport class CurrentCamera extends OBC.Component {\r\n static uuid = 'f081b477-d3b0-4e81-a2b4-d91d5498e668' as const\r\n\r\n enabled = false\r\n\r\n constructor(components: OBC.Components) {\r\n super(components)\r\n components.add(CurrentCamera.uuid, this)\r\n }\r\n\r\n private _camera: OBC.OrthoPerspectiveCamera | null = null\r\n\r\n set camera(camera: OBC.OrthoPerspectiveCamera | null) {\r\n this._camera = camera\r\n }\r\n\r\n get camera() {\r\n return this._camera\r\n }\r\n}\r\n"],"mappings":"AAGA,YAAY,SAAS;AAEd,MAAM,iBAAN,MAAM,uBAAsB,IAAI,UAAU;AAAA,EAK/C,YAAY,YAA4B;AACtC,UAAM,UAAU;AAHlB,mBAAU;AAOV,SAAQ,UAA6C;AAHnD,eAAW,IAAI,eAAc,MAAM,IAAI;AAAA,EACzC;AAAA,EAIA,IAAI,OAAO,QAA2C;AACpD,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK;AAAA,EACd;AACF;AAnBa,eACJ,OAAO;AADT,IAAM,gBAAN;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CurrentWorld.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/bim/src/CurrentWorld.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CurrentWorld.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/bim/src/CurrentWorld.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,GAAG,MAAM,sBAAsB,CAAA;AAE3C,qBAAa,YAAa,SAAQ,GAAG,CAAC,SAAS;IAC7C,MAAM,CAAC,IAAI,EAAG,sCAAsC,CAAS;IAE7D,OAAO,UAAQ;gBAEH,UAAU,EAAE,GAAG,CAAC,UAAU;IAKtC,OAAO,CAAC,MAAM,CAAyB;IAEvC,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,IAAI,EAEhC;IAED,IAAI,KAAK,IAJQ,GAAG,CAAC,KAAK,GAAG,IAAI,CAMhC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/bim/src/CurrentWorld.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/bim/src/CurrentWorld.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as OBC from '@thatopen/components'\r\n\r\nexport class CurrentWorld extends OBC.Component {\r\n static uuid = '5f4b5917-dbd4-4ca4-a8c6-2873f15181c0' as const\r\n\r\n enabled = false\r\n\r\n constructor(components: OBC.Components) {\r\n super(components)\r\n components.add(CurrentWorld.uuid, this)\r\n }\r\n\r\n private _world: OBC.World | null = null\r\n\r\n set world(world: OBC.World | null) {\r\n this._world = world\r\n }\r\n\r\n get world() {\r\n return this._world\r\n }\r\n}\r\n"],"mappings":"AAGA,YAAY,SAAS;AAEd,MAAM,gBAAN,MAAM,sBAAqB,IAAI,UAAU;AAAA,EAK9C,YAAY,YAA4B;AACtC,UAAM,UAAU;AAHlB,mBAAU;AAOV,SAAQ,SAA2B;AAHjC,eAAW,IAAI,cAAa,MAAM,IAAI;AAAA,EACxC;AAAA,EAIA,IAAI,MAAM,OAAyB;AACjC,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AACF;AAnBa,cACJ,OAAO;AADT,IAAM,eAAN;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cursor.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/bim/src/Cursor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Cursor.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/viewers/bim/src/Cursor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,GAAG,MAAM,sBAAsB,CAAA;AAG3C,qBAAa,MAAO,SAAQ,GAAG,CAAC,SAAS;IACvC,MAAM,CAAC,IAAI,EAAG,sCAAsC,CAAS;IAE7D,OAAO,UAAQ;IAEf,OAAO,CAAC,KAAK,CAAyB;gBAE1B,UAAU,EAAE,GAAG,CAAC,UAAU;IAOtC,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,aAAa,CAIpB;IAED,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,OAAO,CAA0B;IAEzC,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,EAM5B;IAED,IAAI,MAAM,IARS,UAAU,CAU5B;IAED,OAAO;CAGR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/core/components/viewers/bim/src/Cursor.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/core/components/viewers/bim/src/Cursor.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport type { CursorType } from '../../../../types/global'\r\nimport * as OBC from '@thatopen/components'\r\nimport { CurrentWorld } from './CurrentWorld'\r\n\r\nexport class Cursor extends OBC.Component {\r\n static uuid = 'c2d607c5-4335-4b04-95bb-38c02f0caf5e' as const\r\n\r\n enabled = false\r\n\r\n private world: OBC.World | null = null\r\n\r\n constructor(components: OBC.Components) {\r\n super(components)\r\n components.add(Cursor.uuid, this)\r\n this.world = components.get(CurrentWorld).world\r\n this.setupEventListeners()\r\n }\r\n\r\n private setupEventListeners() {\r\n document.addEventListener('keydown', this.handleKeyDown)\r\n }\r\n\r\n private handleKeyDown = (event: KeyboardEvent) => {\r\n if (event.key === 'Escape') {\r\n this.cleanCursor()\r\n }\r\n }\r\n\r\n private cleanCursor() {\r\n this._cursor = null\r\n if (!this.world) return\r\n const domElement = this.world.renderer?.three.domElement\r\n if (!domElement) return\r\n domElement.style.cursor = 'default'\r\n }\r\n\r\n private _cursor: CursorType | null = null\r\n\r\n set cursor(cursor: CursorType) {\r\n this._cursor = cursor\r\n if (!this.world) return\r\n const domElement = this.world.renderer?.three.domElement\r\n if (!domElement) return\r\n domElement.style.cursor = cursor\r\n }\r\n\r\n get cursor() {\r\n return this._cursor\r\n }\r\n\r\n dispose() {\r\n document.removeEventListener('keydown', this.handleKeyDown)\r\n }\r\n}\r\n"],"mappings":"AAIA,YAAY,SAAS;AACrB,SAAS,oBAAoB;AAEtB,MAAM,UAAN,MAAM,gBAAe,IAAI,UAAU;AAAA,EAOxC,YAAY,YAA4B;AACtC,UAAM,UAAU;AALlB,mBAAU;AAEV,SAAQ,QAA0B;AAalC,SAAQ,gBAAgB,CAAC,UAAyB;AAChD,UAAI,MAAM,QAAQ,UAAU;AAC1B,aAAK,YAAY;AAAA,MACnB;AAAA,IACF;AAUA,SAAQ,UAA6B;AAvBnC,eAAW,IAAI,QAAO,MAAM,IAAI;AAChC,SAAK,QAAQ,WAAW,IAAI,YAAY,EAAE;AAC1C,SAAK,oBAAoB;AAAA,EAC3B;AAAA,EAEQ,sBAAsB;AAC5B,aAAS,iBAAiB,WAAW,KAAK,aAAa;AAAA,EACzD;AAAA,EAQQ,cAAc;AA/BxB;AAgCI,SAAK,UAAU;AACf,QAAI,CAAC,KAAK,MAAO;AACjB,UAAM,cAAa,UAAK,MAAM,aAAX,mBAAqB,MAAM;AAC9C,QAAI,CAAC,WAAY;AACjB,eAAW,MAAM,SAAS;AAAA,EAC5B;AAAA,EAIA,IAAI,OAAO,QAAoB;AAzCjC;AA0CI,SAAK,UAAU;AACf,QAAI,CAAC,KAAK,MAAO;AACjB,UAAM,cAAa,UAAK,MAAM,aAAX,mBAAqB,MAAM;AAC9C,QAAI,CAAC,WAAY;AACjB,eAAW,MAAM,SAAS;AAAA,EAC5B;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,UAAU;AACR,aAAS,oBAAoB,WAAW,KAAK,aAAa;AAAA,EAC5D;AACF;AAjDa,QACJ,OAAO;AADT,IAAM,SAAN;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/DXFLoader/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/DXFLoader/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,GAAG,MAAM,sBAAsB,CAAA;AAG3C;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,GAAG,CAAC,SAAS;IAC3C,MAAM,CAAC,IAAI,EAAG,sCAAsC,CAAS;IAE7D,OAAO,UAAO;IAEd,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyC;IACpE,OAAO,CAAC,UAAU,CAAW;gBAEjB,UAAU,EAAE,GAAG,CAAC,UAAU;IAMtC;;;;OAIG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;IA+B9C,4FAA4F;IAC5F,OAAO,CAAC,WAAW;IAgBnB,OAAO;CAGR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/DXFLoader/index.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/DXFLoader/index.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as THREE from 'three'\r\nimport * as OBC from '@thatopen/components'\r\nimport { DxfViewer } from 'dxf-viewer'\r\n\r\n/**\r\n * Parses DXF files into THREE.Groups for the BIM world. This is a pure parser:\r\n * it owns no scene placement, transforms or gizmos — the caller (AddDxf) decides\r\n * where the drawing goes. A single off-screen DxfViewer is reused as the parser.\r\n */\r\nexport class DXFManager extends OBC.Component {\r\n static uuid = '2cf1b746-3b3d-4988-960b-ea640e0e8925' as const\r\n\r\n enabled = true\r\n\r\n private readonly _container = document.createElement('bim-viewport')\r\n private _dxfViewer: DxfViewer\r\n\r\n constructor(components: OBC.Components) {\r\n super(components)\r\n components.add(DXFManager.uuid, this)\r\n this._dxfViewer = new DxfViewer(this._container, null)\r\n }\r\n\r\n /**\r\n * Load and parse a DXF into a THREE.Group centered on its own origin and laid\r\n * flat on the world ground (XZ) plane. DXF coordinates can carry huge offsets,\r\n * so recentering keeps the drawing co-located with whatever point it is placed at.\r\n */\r\n async parse(url: string): Promise<THREE.Group> {\r\n await this._dxfViewer.Load({\r\n url,\r\n fonts: ['/fonts/Roboto-LightItalic.ttf'],\r\n progressCbk: null,\r\n workerFactory: null,\r\n })\r\n\r\n const inner = new THREE.Group()\r\n const dxfScene = this._dxfViewer.GetScene()\r\n for (const child of [...dxfScene.children]) {\r\n this.flattenTo3D(child)\r\n inner.add(child)\r\n }\r\n\r\n // Recenter geometry on the group origin so placement lands the drawing's\r\n // center at the chosen point regardless of the DXF's authored coordinates.\r\n const box = new THREE.Box3().setFromObject(inner)\r\n if (!box.isEmpty()) {\r\n const center = box.getCenter(new THREE.Vector3())\r\n for (const child of inner.children) child.position.sub(center)\r\n }\r\n\r\n // DXF is authored in the XY plane; tip it onto the world XZ ground plane (Y up).\r\n inner.rotateX(THREE.MathUtils.degToRad(-90))\r\n\r\n const group = new THREE.Group()\r\n group.add(inner)\r\n return group\r\n }\r\n\r\n /** DxfViewer line geometry is 2D (x, y); promote it to 3D (x, y, 0) for the world scene. */\r\n private flattenTo3D(object: THREE.Object3D) {\r\n if (!('geometry' in object)) return\r\n const geometry = object.geometry as THREE.BufferGeometry\r\n const position = geometry.getAttribute('position')\r\n if (!position || position.itemSize === 3) return\r\n\r\n const flattened: number[] = []\r\n for (let i = 0; i < position.array.length; i += position.itemSize) {\r\n flattened.push(position.array[i], position.array[i + 1], 0)\r\n }\r\n geometry.setAttribute(\r\n 'position',\r\n new THREE.BufferAttribute(new Float32Array(flattened), 3),\r\n )\r\n }\r\n\r\n dispose() {\r\n ;(this._dxfViewer as unknown as { Destroy?: () => void }).Destroy?.()\r\n }\r\n}\r\n"],"mappings":"AAGA,YAAY,WAAW;AACvB,YAAY,SAAS;AACrB,SAAS,iBAAiB;AAOnB,MAAM,cAAN,MAAM,oBAAmB,IAAI,UAAU;AAAA,EAQ5C,YAAY,YAA4B;AACtC,UAAM,UAAU;AANlB,mBAAU;AAEV,SAAiB,aAAa,SAAS,cAAc,cAAc;AAKjE,eAAW,IAAI,YAAW,MAAM,IAAI;AACpC,SAAK,aAAa,IAAI,UAAU,KAAK,YAAY,IAAI;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,MAAM,KAAmC;AAC7C,UAAM,KAAK,WAAW,KAAK;AAAA,MACzB;AAAA,MACA,OAAO,CAAC,+BAA+B;AAAA,MACvC,aAAa;AAAA,MACb,eAAe;AAAA,IACjB,CAAC;AAED,UAAM,QAAQ,IAAI,MAAM,MAAM;AAC9B,UAAM,WAAW,KAAK,WAAW,SAAS;AAC1C,eAAW,SAAS,CAAC,GAAG,SAAS,QAAQ,GAAG;AAC1C,WAAK,YAAY,KAAK;AACtB,YAAM,IAAI,KAAK;AAAA,IACjB;AAIA,UAAM,MAAM,IAAI,MAAM,KAAK,EAAE,cAAc,KAAK;AAChD,QAAI,CAAC,IAAI,QAAQ,GAAG;AAClB,YAAM,SAAS,IAAI,UAAU,IAAI,MAAM,QAAQ,CAAC;AAChD,iBAAW,SAAS,MAAM,SAAU,OAAM,SAAS,IAAI,MAAM;AAAA,IAC/D;AAGA,UAAM,QAAQ,MAAM,UAAU,SAAS,GAAG,CAAC;AAE3C,UAAM,QAAQ,IAAI,MAAM,MAAM;AAC9B,UAAM,IAAI,KAAK;AACf,WAAO;AAAA,EACT;AAAA;AAAA,EAGQ,YAAY,QAAwB;AAC1C,QAAI,EAAE,cAAc,QAAS;AAC7B,UAAM,WAAW,OAAO;AACxB,UAAM,WAAW,SAAS,aAAa,UAAU;AACjD,QAAI,CAAC,YAAY,SAAS,aAAa,EAAG;AAE1C,UAAM,YAAsB,CAAC;AAC7B,aAAS,IAAI,GAAG,IAAI,SAAS,MAAM,QAAQ,KAAK,SAAS,UAAU;AACjE,gBAAU,KAAK,SAAS,MAAM,CAAC,GAAG,SAAS,MAAM,IAAI,CAAC,GAAG,CAAC;AAAA,IAC5D;AACA,aAAS;AAAA,MACP;AAAA,MACA,IAAI,MAAM,gBAAgB,IAAI,aAAa,SAAS,GAAG,CAAC;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,UAAU;AA/EZ;AAgFI;AAAC,KAAC,gBAAK,YAAmD,YAAxD;AAAA,EACJ;AACF;AAtEa,YACJ,OAAO;AADT,IAAM,aAAN;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/ElevationsTool/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/ElevationsTool/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,GAAG,MAAM,sBAAsB,CAAA;AAc3C,OAAO,EAGL,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,aAAa,CAAA;AAEpB,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,aAAa,CAAA;AAEpB,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,qBAAqB,GAAG,SAAS,GACvC,MAAM,CAER;AAID;;;;;;;;;;;GAWG;AACH,qBAAa,cAAe,SAAQ,GAAG,CAAC,SAAS;IAC/C,MAAM,CAAC,IAAI,yCAAuB;IAElC,OAAO,UAAQ;IAEf,QAAQ,CAAC,mBAAmB,8BAAoC;IAChE,QAAQ,CAAC,eAAe,4BAAyC;IACjE,QAAQ,CAAC,qBAAqB,mCAAyC;IACvE,yEAAyE;IACzE,QAAQ,CAAC,eAAe,4BAAkC;IAE1D,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,YAAY,CAAI;IAExB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,IAAI,CAAgB;gBAEhB,UAAU,EAAE,GAAG,CAAC,UAAU;IAyBtC,IAAI,UAAU,IAAI,cAAc,EAAE,CAEjC;IAED,IAAI,QAAQ,IAAI,MAAM,GAAG,IAAI,CAE5B;IAED,IAAI,eAAe,IAAI,cAAc,GAAG,IAAI,CAG3C;IAED;gEAC4D;IAC5D,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAIxB,2EAA2E;IAC3E,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAUpE,sEAAsE;IACtE,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAU/D,OAAO,CAAC,cAAc;IAStB,mEAAmE;IAC7D,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAsB1D;;;;OAIG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM;IAmFzB;6DACyD;IACnD,UAAU;IAmChB,sBAAsB,CAAC,OAAO,EAAE,MAAM;IActC,OAAO;IASP,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,KAAK;IAIb;qEACiE;YACnD,oBAAoB;IASlC,OAAO,CAAC,mBAAmB;CAO5B"}
|