@collabdt/core 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/components/AppSidebarContent.d.ts +1 -1
- package/dist/core/components/AppSidebarContent.d.ts.map +1 -1
- package/dist/core/components/AppSidebarContent.js +9 -9
- package/dist/core/components/AppSidebarContent.js.map +1 -1
- package/dist/core/components/ConfirmDialog.js.map +1 -1
- package/dist/core/components/DataTableSkeleton.d.ts.map +1 -1
- package/dist/core/components/DataTableSkeleton.js.map +1 -1
- package/dist/core/components/LanguageSwitch.d.ts.map +1 -1
- package/dist/core/components/LanguageSwitch.js +4 -4
- package/dist/core/components/LanguageSwitch.js.map +1 -1
- package/dist/core/components/Logo.js +1 -1
- package/dist/core/components/Logo.js.map +1 -1
- package/dist/core/components/Toolbar.d.ts +1 -1
- package/dist/core/components/Toolbar.d.ts.map +1 -1
- package/dist/core/components/Toolbar.js +1 -1
- package/dist/core/components/Toolbar.js.map +1 -1
- package/dist/core/components/ToolbarBody.d.ts +1 -1
- package/dist/core/components/ToolbarBody.d.ts.map +1 -1
- package/dist/core/components/ToolbarBody.js +1 -1
- package/dist/core/components/ToolbarBody.js.map +1 -1
- package/dist/core/components/ToolbarSubmenu.d.ts +1 -1
- package/dist/core/components/ToolbarSubmenu.d.ts.map +1 -1
- package/dist/core/components/ToolbarSubmenu.js +2 -2
- package/dist/core/components/ToolbarSubmenu.js.map +1 -1
- package/dist/core/components/TopNavigationBar.d.ts.map +1 -1
- package/dist/core/components/TopNavigationBar.js +5 -5
- package/dist/core/components/TopNavigationBar.js.map +1 -1
- package/dist/core/components/authentication/AuthPage.d.ts.map +1 -1
- package/dist/core/components/authentication/AuthPage.js +5 -5
- package/dist/core/components/authentication/AuthPage.js.map +1 -1
- package/dist/core/components/authentication/ForgotPassword.d.ts.map +1 -1
- package/dist/core/components/authentication/ForgotPassword.js +3 -4
- package/dist/core/components/authentication/ForgotPassword.js.map +1 -1
- package/dist/core/components/authentication/Signin.d.ts.map +1 -1
- package/dist/core/components/authentication/Signin.js +5 -5
- package/dist/core/components/authentication/Signin.js.map +1 -1
- package/dist/core/components/authentication/Signup.d.ts.map +1 -1
- package/dist/core/components/authentication/Signup.js +7 -7
- package/dist/core/components/authentication/Signup.js.map +1 -1
- package/dist/core/components/instance-not-found/index.d.ts.map +1 -1
- package/dist/core/components/instance-not-found/index.js +4 -4
- package/dist/core/components/instance-not-found/index.js.map +1 -1
- package/dist/core/components/instance-not-found/src/OrganizationNotFoundSection.d.ts.map +1 -1
- package/dist/core/components/instance-not-found/src/OrganizationNotFoundSection.js +3 -3
- package/dist/core/components/instance-not-found/src/OrganizationNotFoundSection.js.map +1 -1
- package/dist/core/components/organizationConfig/index.d.ts.map +1 -1
- package/dist/core/components/organizationConfig/index.js +4 -4
- package/dist/core/components/organizationConfig/index.js.map +1 -1
- package/dist/core/components/organizationConfig/src/organizationConfigContent.js +2 -2
- package/dist/core/components/organizationConfig/src/organizationConfigContent.js.map +1 -1
- package/dist/core/components/settings/index.d.ts.map +1 -1
- package/dist/core/components/settings/index.js +2 -2
- package/dist/core/components/settings/index.js.map +1 -1
- package/dist/core/components/settings/src/AccountSettingsPanel.d.ts.map +1 -1
- package/dist/core/components/settings/src/AccountSettingsPanel.js +8 -8
- package/dist/core/components/settings/src/AccountSettingsPanel.js.map +1 -1
- package/dist/core/components/settings/src/ChangePassword.d.ts.map +1 -1
- package/dist/core/components/settings/src/ChangePassword.js +5 -5
- package/dist/core/components/settings/src/ChangePassword.js.map +1 -1
- package/dist/core/components/settings/src/OrganizationSettingsPanel.d.ts.map +1 -1
- package/dist/core/components/settings/src/OrganizationSettingsPanel.js +7 -7
- package/dist/core/components/settings/src/OrganizationSettingsPanel.js.map +1 -1
- package/dist/core/components/settings/src/SettingsContent.d.ts.map +1 -1
- package/dist/core/components/settings/src/SettingsContent.js +1 -1
- package/dist/core/components/settings/src/SettingsContent.js.map +1 -1
- package/dist/core/components/settings/src/SettingsSidebar.d.ts.map +1 -1
- package/dist/core/components/settings/src/SettingsSidebar.js +3 -3
- package/dist/core/components/settings/src/SettingsSidebar.js.map +1 -1
- package/dist/core/components/settings/src/UsersSettingsPanel.js +1 -1
- package/dist/core/components/settings/src/UsersSettingsPanel.js.map +1 -1
- package/dist/core/components/support/BugReportDialog.d.ts.map +1 -1
- package/dist/core/components/support/BugReportDialog.js +8 -8
- package/dist/core/components/support/BugReportDialog.js.map +1 -1
- package/dist/core/components/support/FeatureRequestDialog.d.ts.map +1 -1
- package/dist/core/components/support/FeatureRequestDialog.js +6 -6
- package/dist/core/components/support/FeatureRequestDialog.js.map +1 -1
- package/dist/core/components/support/SupportMenu.d.ts.map +1 -1
- package/dist/core/components/support/SupportMenu.js +1 -1
- package/dist/core/components/support/SupportMenu.js.map +1 -1
- package/dist/core/components/ui/Accordion.d.ts +1 -1
- package/dist/core/components/ui/Accordion.d.ts.map +1 -1
- package/dist/core/components/ui/Accordion.js +1 -1
- package/dist/core/components/ui/Accordion.js.map +1 -1
- package/dist/core/components/ui/AddItemDialog.d.ts.map +1 -1
- package/dist/core/components/ui/AddItemDialog.js +1 -1
- package/dist/core/components/ui/AddItemDialog.js.map +1 -1
- package/dist/core/components/ui/AlertDialog.d.ts +1 -1
- package/dist/core/components/ui/AlertDialog.d.ts.map +1 -1
- package/dist/core/components/ui/AlertDialog.js +1 -1
- package/dist/core/components/ui/AlertDialog.js.map +1 -1
- package/dist/core/components/ui/AnimatedBackground.js +1 -1
- package/dist/core/components/ui/AnimatedBackground.js.map +1 -1
- package/dist/core/components/ui/AppSidebar.d.ts.map +1 -1
- package/dist/core/components/ui/AppSidebar.js +7 -7
- package/dist/core/components/ui/AppSidebar.js.map +1 -1
- package/dist/core/components/ui/Avatar.d.ts +1 -1
- package/dist/core/components/ui/Avatar.d.ts.map +1 -1
- package/dist/core/components/ui/Avatar.js +1 -1
- package/dist/core/components/ui/Avatar.js.map +1 -1
- package/dist/core/components/ui/Badge.d.ts.map +1 -1
- package/dist/core/components/ui/Badge.js.map +1 -1
- package/dist/core/components/ui/Breadcrumb.d.ts.map +1 -1
- package/dist/core/components/ui/Breadcrumb.js +2 -2
- package/dist/core/components/ui/Breadcrumb.js.map +1 -1
- package/dist/core/components/ui/Button.d.ts.map +1 -1
- package/dist/core/components/ui/Button.js +1 -1
- package/dist/core/components/ui/Button.js.map +1 -1
- package/dist/core/components/ui/Calendar.d.ts +2 -1
- package/dist/core/components/ui/Calendar.d.ts.map +1 -1
- package/dist/core/components/ui/Calendar.js +1 -1
- package/dist/core/components/ui/Calendar.js.map +1 -1
- package/dist/core/components/ui/Checkbox.d.ts +1 -1
- package/dist/core/components/ui/Checkbox.d.ts.map +1 -1
- package/dist/core/components/ui/Checkbox.js +1 -1
- package/dist/core/components/ui/Checkbox.js.map +1 -1
- package/dist/core/components/ui/CollapsibleSection.d.ts.map +1 -1
- package/dist/core/components/ui/CollapsibleSection.js +2 -2
- package/dist/core/components/ui/CollapsibleSection.js.map +1 -1
- package/dist/core/components/ui/Command.d.ts +8 -8
- package/dist/core/components/ui/Command.d.ts.map +1 -1
- package/dist/core/components/ui/Command.js +1 -1
- package/dist/core/components/ui/Command.js.map +1 -1
- package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts +13 -3
- package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts.map +1 -1
- package/dist/core/components/ui/Comments/CollapsibleCommentItem.js +144 -146
- package/dist/core/components/ui/Comments/CollapsibleCommentItem.js.map +1 -1
- package/dist/core/components/ui/Comments/Comment.d.ts +18 -1
- package/dist/core/components/ui/Comments/Comment.d.ts.map +1 -1
- package/dist/core/components/ui/Comments/Comment.js +97 -26
- package/dist/core/components/ui/Comments/Comment.js.map +1 -1
- package/dist/core/components/ui/Comments/CommentActionButtons.d.ts +34 -0
- package/dist/core/components/ui/Comments/CommentActionButtons.d.ts.map +1 -0
- package/dist/core/components/ui/Comments/CommentActionButtons.js +106 -0
- package/dist/core/components/ui/Comments/CommentActionButtons.js.map +1 -0
- package/dist/core/components/ui/Comments/CommentInput.d.ts.map +1 -1
- package/dist/core/components/ui/Comments/CommentInput.js +11 -8
- package/dist/core/components/ui/Comments/CommentInput.js.map +1 -1
- package/dist/core/components/ui/Comments/CommentsSection.d.ts.map +1 -1
- package/dist/core/components/ui/Comments/CommentsSection.js +89 -45
- package/dist/core/components/ui/Comments/CommentsSection.js.map +1 -1
- package/dist/core/components/ui/Comments/commentUtils.d.ts +1 -1
- package/dist/core/components/ui/Comments/commentUtils.d.ts.map +1 -1
- package/dist/core/components/ui/Comments/commentUtils.js +2 -1
- package/dist/core/components/ui/Comments/commentUtils.js.map +1 -1
- package/dist/core/components/ui/Countdown.d.ts.map +1 -1
- package/dist/core/components/ui/Countdown.js +1 -1
- package/dist/core/components/ui/Countdown.js.map +1 -1
- package/dist/core/components/ui/DataTable.d.ts +1 -1
- package/dist/core/components/ui/DataTable.d.ts.map +1 -1
- package/dist/core/components/ui/DataTable.js +17 -17
- package/dist/core/components/ui/DataTable.js.map +1 -1
- package/dist/core/components/ui/DatePicker.d.ts.map +1 -1
- package/dist/core/components/ui/DatePicker.js +2 -2
- package/dist/core/components/ui/DatePicker.js.map +1 -1
- package/dist/core/components/ui/DescriptionList.d.ts.map +1 -1
- package/dist/core/components/ui/DescriptionList.js +2 -2
- package/dist/core/components/ui/DescriptionList.js.map +1 -1
- package/dist/core/components/ui/Dialog.d.ts +1 -1
- package/dist/core/components/ui/Dialog.d.ts.map +1 -1
- package/dist/core/components/ui/Dialog.js +1 -1
- package/dist/core/components/ui/Dialog.js.map +1 -1
- package/dist/core/components/ui/DropdownMenu.d.ts +1 -1
- package/dist/core/components/ui/DropdownMenu.d.ts.map +1 -1
- package/dist/core/components/ui/DropdownMenu.js +1 -1
- package/dist/core/components/ui/DropdownMenu.js.map +1 -1
- package/dist/core/components/ui/ExportData.d.ts +2 -2
- package/dist/core/components/ui/ExportData.d.ts.map +1 -1
- package/dist/core/components/ui/ExportData.js +5 -5
- package/dist/core/components/ui/ExportData.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/FileItemComponent.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/FileItemComponent.js +3 -3
- package/dist/core/components/ui/FilesManager/src/FileItemComponent.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/FileMarker.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/FileMarker.js +2 -2
- package/dist/core/components/ui/FilesManager/src/FileMarker.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/ViewerContextMenu.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/ViewerContextMenu.js +1 -1
- package/dist/core/components/ui/FilesManager/src/ViewerContextMenu.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/downloadUtils.d.ts +1 -1
- package/dist/core/components/ui/FilesManager/src/downloadUtils.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/downloadUtils.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useCommonFileUpload.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileActions.d.ts +2 -2
- package/dist/core/components/ui/FilesManager/src/useFileActions.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileActions.js +2 -2
- package/dist/core/components/ui/FilesManager/src/useFileActions.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileDeleteHandler.js +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileDeleteHandler.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.js +3 -3
- package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileUploadWithProgress.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileUploadWithProgress.js +0 -1
- package/dist/core/components/ui/FilesManager/src/useFileUploadWithProgress.js.map +1 -1
- package/dist/core/components/ui/GenericTool.d.ts +1 -1
- package/dist/core/components/ui/GenericTool.d.ts.map +1 -1
- package/dist/core/components/ui/GenericTool.js +2 -2
- package/dist/core/components/ui/GenericTool.js.map +1 -1
- package/dist/core/components/ui/Icons/FloorPlanIcon.js +1 -1
- package/dist/core/components/ui/Icons/FloorPlanIcon.js.map +1 -1
- package/dist/core/components/ui/InfoSidebar/Container.d.ts.map +1 -1
- package/dist/core/components/ui/InfoSidebar/Container.js +16 -12
- package/dist/core/components/ui/InfoSidebar/Container.js.map +1 -1
- package/dist/core/components/ui/InfoSidebar/Header.d.ts.map +1 -1
- package/dist/core/components/ui/InfoSidebar/Header.js +4 -4
- package/dist/core/components/ui/InfoSidebar/Header.js.map +1 -1
- package/dist/core/components/ui/InfoSidebar/index.d.ts +1 -1
- package/dist/core/components/ui/InfoSidebar/index.d.ts.map +1 -1
- package/dist/core/components/ui/InfoSidebar/index.js +1 -1
- package/dist/core/components/ui/InfoSidebar/index.js.map +1 -1
- package/dist/core/components/ui/Label.d.ts +1 -1
- package/dist/core/components/ui/Label.d.ts.map +1 -1
- package/dist/core/components/ui/Label.js +1 -1
- package/dist/core/components/ui/Label.js.map +1 -1
- package/dist/core/components/ui/LanguageToggle.d.ts +1 -1
- package/dist/core/components/ui/LanguageToggle.d.ts.map +1 -1
- package/dist/core/components/ui/LanguageToggle.js +1 -1
- package/dist/core/components/ui/LanguageToggle.js.map +1 -1
- package/dist/core/components/ui/Menubar.d.ts +1 -1
- package/dist/core/components/ui/Menubar.d.ts.map +1 -1
- package/dist/core/components/ui/Menubar.js +1 -1
- package/dist/core/components/ui/Menubar.js.map +1 -1
- package/dist/core/components/ui/NavUser.js +7 -7
- package/dist/core/components/ui/NavUser.js.map +1 -1
- package/dist/core/components/ui/Navbar.d.ts.map +1 -1
- package/dist/core/components/ui/Navbar.js +2 -2
- package/dist/core/components/ui/Navbar.js.map +1 -1
- package/dist/core/components/ui/Popover.d.ts +1 -1
- package/dist/core/components/ui/Popover.d.ts.map +1 -1
- package/dist/core/components/ui/Popover.js +1 -1
- package/dist/core/components/ui/Popover.js.map +1 -1
- package/dist/core/components/ui/Progress.d.ts +1 -1
- package/dist/core/components/ui/Progress.d.ts.map +1 -1
- package/dist/core/components/ui/Progress.js +1 -1
- package/dist/core/components/ui/Progress.js.map +1 -1
- package/dist/core/components/ui/ScrollArea.d.ts +1 -1
- package/dist/core/components/ui/ScrollArea.d.ts.map +1 -1
- package/dist/core/components/ui/ScrollArea.js +1 -1
- package/dist/core/components/ui/ScrollArea.js.map +1 -1
- package/dist/core/components/ui/SearchInput.d.ts.map +1 -1
- package/dist/core/components/ui/SearchInput.js +2 -2
- package/dist/core/components/ui/SearchInput.js.map +1 -1
- package/dist/core/components/ui/Select.d.ts +1 -1
- package/dist/core/components/ui/Select.d.ts.map +1 -1
- package/dist/core/components/ui/Select.js +3 -3
- package/dist/core/components/ui/Select.js.map +1 -1
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts +1 -1
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js +10 -10
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js.map +1 -1
- package/dist/core/components/ui/Sensors/Sensor.d.ts +2 -1
- package/dist/core/components/ui/Sensors/Sensor.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/Sensor.js +3 -3
- package/dist/core/components/ui/Sensors/Sensor.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorChart.d.ts +1 -1
- package/dist/core/components/ui/Sensors/SensorChart.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/SensorChart.js +1 -1
- package/dist/core/components/ui/Sensors/SensorChart.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorInput.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/SensorInput.js +9 -10
- package/dist/core/components/ui/Sensors/SensorInput.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorTagsSection.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/SensorTagsSection.js +3 -3
- package/dist/core/components/ui/Sensors/SensorTagsSection.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorsSection.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/SensorsSection.js +7 -9
- package/dist/core/components/ui/Sensors/SensorsSection.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorsSectionSkeleton.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/SensorsSectionSkeleton.js.map +1 -1
- package/dist/core/components/ui/Sensors/sensorUtils.d.ts +1 -1
- package/dist/core/components/ui/Sensors/sensorUtils.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/sensorUtils.js.map +1 -1
- package/dist/core/components/ui/Separator.d.ts +1 -1
- package/dist/core/components/ui/Separator.d.ts.map +1 -1
- package/dist/core/components/ui/Separator.js +1 -1
- package/dist/core/components/ui/Separator.js.map +1 -1
- package/dist/core/components/ui/SettingsButton.d.ts.map +1 -1
- package/dist/core/components/ui/SettingsButton.js +4 -4
- package/dist/core/components/ui/SettingsButton.js.map +1 -1
- package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.d.ts +1 -1
- package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.d.ts.map +1 -1
- package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.js +14 -14
- package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.js.map +1 -1
- package/dist/core/components/ui/Sheet.d.ts +1 -1
- package/dist/core/components/ui/Sheet.d.ts.map +1 -1
- package/dist/core/components/ui/Sheet.js +1 -1
- package/dist/core/components/ui/Sheet.js.map +1 -1
- package/dist/core/components/ui/Sidebar.d.ts +1 -1
- package/dist/core/components/ui/Sidebar.d.ts.map +1 -1
- package/dist/core/components/ui/Sidebar.js +33 -10
- package/dist/core/components/ui/Sidebar.js.map +1 -1
- package/dist/core/components/ui/Slider.d.ts +1 -1
- package/dist/core/components/ui/Slider.d.ts.map +1 -1
- package/dist/core/components/ui/Slider.js +1 -1
- package/dist/core/components/ui/Slider.js.map +1 -1
- package/dist/core/components/ui/Switch.d.ts +1 -1
- package/dist/core/components/ui/Switch.d.ts.map +1 -1
- package/dist/core/components/ui/Switch.js +1 -1
- package/dist/core/components/ui/Switch.js.map +1 -1
- package/dist/core/components/ui/Tabs.d.ts +1 -1
- package/dist/core/components/ui/Tabs.d.ts.map +1 -1
- package/dist/core/components/ui/Tabs.js +1 -1
- package/dist/core/components/ui/Tabs.js.map +1 -1
- package/dist/core/components/ui/Toggle.d.ts +1 -1
- package/dist/core/components/ui/Toggle.d.ts.map +1 -1
- package/dist/core/components/ui/Toggle.js +1 -1
- package/dist/core/components/ui/Toggle.js.map +1 -1
- package/dist/core/components/ui/ToggleGroup.d.ts +1 -1
- package/dist/core/components/ui/ToggleGroup.d.ts.map +1 -1
- package/dist/core/components/ui/ToggleGroup.js +1 -1
- package/dist/core/components/ui/ToggleGroup.js.map +1 -1
- package/dist/core/components/ui/ToolbarButton.d.ts +1 -1
- package/dist/core/components/ui/ToolbarButton.d.ts.map +1 -1
- package/dist/core/components/ui/ToolbarButton.js +1 -2
- package/dist/core/components/ui/ToolbarButton.js.map +1 -1
- package/dist/core/components/ui/Tooltip.d.ts +1 -1
- package/dist/core/components/ui/Tooltip.d.ts.map +1 -1
- package/dist/core/components/ui/Tooltip.js +1 -1
- package/dist/core/components/ui/Tooltip.js.map +1 -1
- package/dist/core/components/ui/UserAvatar.d.ts.map +1 -1
- package/dist/core/components/ui/UserAvatar.js +1 -1
- package/dist/core/components/ui/UserAvatar.js.map +1 -1
- package/dist/core/components/ui/downloadUtils.d.ts.map +1 -1
- package/dist/core/components/ui/downloadUtils.js.map +1 -1
- package/dist/core/components/ui/stats.d.ts.map +1 -1
- package/dist/core/components/ui/stats.js.map +1 -1
- package/dist/core/components/ui/uploadFile.js +1 -1
- package/dist/core/components/ui/uploadFile.js.map +1 -1
- package/dist/core/components/viewers/Data/DataMenu.d.ts +1 -1
- package/dist/core/components/viewers/Data/DataMenu.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/DataMenu.js +11 -11
- package/dist/core/components/viewers/Data/DataMenu.js.map +1 -1
- package/dist/core/components/viewers/Data/FilterButtons.d.ts +1 -1
- package/dist/core/components/viewers/Data/FilterButtons.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/FilterButtons.js +7 -7
- package/dist/core/components/viewers/Data/FilterButtons.js.map +1 -1
- package/dist/core/components/viewers/Data/HeaderButtons.d.ts +1 -1
- package/dist/core/components/viewers/Data/HeaderButtons.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/HeaderButtons.js +9 -9
- package/dist/core/components/viewers/Data/HeaderButtons.js.map +1 -1
- package/dist/core/components/viewers/Data/MoreOptions.d.ts +1 -1
- package/dist/core/components/viewers/Data/MoreOptions.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/MoreOptions.js +16 -16
- package/dist/core/components/viewers/Data/MoreOptions.js.map +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/Filters.d.ts +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/Filters.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/Filters.js +2 -2
- package/dist/core/components/viewers/Data/advancedFilter/Filters.js.map +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.d.ts +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.js +6 -8
- package/dist/core/components/viewers/Data/advancedFilter/FiltersDialog.js.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.js +3 -3
- package/dist/core/components/viewers/Data/buildingDetails/AddBuilding.js.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/BuildingDetails.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/BuildingDetails.js +10 -10
- package/dist/core/components/viewers/Data/buildingDetails/BuildingDetails.js.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/BuildingsMoreOptions.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/BuildingsMoreOptions.js +11 -11
- package/dist/core/components/viewers/Data/buildingDetails/BuildingsMoreOptions.js.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.js +10 -10
- package/dist/core/components/viewers/Data/buildingDetails/FieldRenderer.js.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.js.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/buildingSchemaTemplate.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/buildingSchemaTemplate.js.map +1 -1
- package/dist/core/components/viewers/Data/details/AttachedFiles.d.ts +1 -1
- package/dist/core/components/viewers/Data/details/AttachedFiles.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/AttachedFiles.js +3 -3
- package/dist/core/components/viewers/Data/details/AttachedFiles.js.map +1 -1
- package/dist/core/components/viewers/Data/details/DetailActions.d.ts +1 -1
- package/dist/core/components/viewers/Data/details/DetailActions.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/DetailActions.js +2 -2
- package/dist/core/components/viewers/Data/details/DetailActions.js.map +1 -1
- package/dist/core/components/viewers/Data/details/DetailHeader.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/DetailHeader.js.map +1 -1
- package/dist/core/components/viewers/Data/details/EnergySourcesGrid.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/EnergySourcesGrid.js +4 -14
- package/dist/core/components/viewers/Data/details/EnergySourcesGrid.js.map +1 -1
- package/dist/core/components/viewers/Data/details/FieldValue.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/FieldValue.js +2 -2
- package/dist/core/components/viewers/Data/details/FieldValue.js.map +1 -1
- package/dist/core/components/viewers/Data/details/FileUpload.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/FileUpload.js +2 -2
- package/dist/core/components/viewers/Data/details/FileUpload.js.map +1 -1
- package/dist/core/components/viewers/Data/details/FilterFiles.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/FilterFiles.js +2 -2
- package/dist/core/components/viewers/Data/details/FilterFiles.js.map +1 -1
- package/dist/core/components/viewers/Data/details/TabSidebar.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/details/TabSidebar.js +3 -3
- package/dist/core/components/viewers/Data/details/TabSidebar.js.map +1 -1
- package/dist/core/components/viewers/Data/files/DatatableFileAdder.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/files/DatatableFileAdder.js +3 -4
- package/dist/core/components/viewers/Data/files/DatatableFileAdder.js.map +1 -1
- package/dist/core/components/viewers/Data/files/FileDetails.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/files/FileDetails.js +8 -8
- package/dist/core/components/viewers/Data/files/FileDetails.js.map +1 -1
- package/dist/core/components/viewers/Data/files/FileMoreOptions.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/files/FileMoreOptions.js +8 -8
- package/dist/core/components/viewers/Data/files/FileMoreOptions.js.map +1 -1
- package/dist/core/components/viewers/Data/files/FilePreview.d.ts +1 -1
- package/dist/core/components/viewers/Data/files/FilePreview.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/files/FilePreview.js +1 -1
- package/dist/core/components/viewers/Data/files/FilePreview.js.map +1 -1
- package/dist/core/components/viewers/Data/files/utils/fuzzySearch.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/files/utils/fuzzySearch.js +0 -1
- package/dist/core/components/viewers/Data/files/utils/fuzzySearch.js.map +1 -1
- package/dist/core/components/viewers/Data/infrastructureDetails/AddInfrastructure.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/infrastructureDetails/AddInfrastructure.js +3 -3
- package/dist/core/components/viewers/Data/infrastructureDetails/AddInfrastructure.js.map +1 -1
- package/dist/core/components/viewers/Data/infrastructureDetails/FieldRenderer.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/infrastructureDetails/FieldRenderer.js +2 -2
- package/dist/core/components/viewers/Data/infrastructureDetails/FieldRenderer.js.map +1 -1
- package/dist/core/components/viewers/Data/infrastructureDetails/InfrastructureDetails.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/infrastructureDetails/InfrastructureDetails.js +6 -6
- package/dist/core/components/viewers/Data/infrastructureDetails/InfrastructureDetails.js.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/AddSite.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/AddSite.js +5 -5
- package/dist/core/components/viewers/Data/siteDetails/AddSite.js.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js +10 -10
- package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/FieldRenderer.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/FieldRenderer.js +9 -9
- package/dist/core/components/viewers/Data/siteDetails/FieldRenderer.js.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/SiteDetails.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/SiteDetails.js +11 -11
- package/dist/core/components/viewers/Data/siteDetails/SiteDetails.js.map +1 -1
- package/dist/core/components/viewers/Data/userDetails/AddUser.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/userDetails/AddUser.js +3 -3
- package/dist/core/components/viewers/Data/userDetails/AddUser.js.map +1 -1
- package/dist/core/components/viewers/Data/userDetails/UserDetails.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/userDetails/UserDetails.js +12 -12
- package/dist/core/components/viewers/Data/userDetails/UserDetails.js.map +1 -1
- package/dist/core/components/viewers/Data/userDetails/UserMoreOptions.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/userDetails/UserMoreOptions.js +12 -13
- package/dist/core/components/viewers/Data/userDetails/UserMoreOptions.js.map +1 -1
- package/dist/core/components/viewers/Data/utils/Columns.d.ts +2 -2
- package/dist/core/components/viewers/Data/utils/Columns.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/utils/Columns.js +7 -7
- package/dist/core/components/viewers/Data/utils/Columns.js.map +1 -1
- package/dist/core/components/viewers/Data/utils/Headers.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/utils/Headers.js.map +1 -1
- package/dist/core/components/viewers/Data/utils/csvUtils.js.map +1 -1
- package/dist/core/components/viewers/Data/utils/filterHelper.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/utils/filterHelper.js +0 -2
- package/dist/core/components/viewers/Data/utils/filterHelper.js.map +1 -1
- package/dist/core/components/viewers/Data/utils/positionParser.js.map +1 -1
- package/dist/core/components/viewers/Data/utils/useViewerData.d.ts +2 -2
- package/dist/core/components/viewers/Data/utils/useViewerData.d.ts.map +1 -1
- package/dist/core/components/viewers/Data/utils/useViewerData.js.map +1 -1
- package/dist/core/components/viewers/Viewer.d.ts +1 -1
- package/dist/core/components/viewers/Viewer.d.ts.map +1 -1
- package/dist/core/components/viewers/Viewer.js +6 -6
- package/dist/core/components/viewers/Viewer.js.map +1 -1
- package/dist/core/components/viewers/bim/BimToolbar.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/BimToolbar.js +1 -1
- package/dist/core/components/viewers/bim/BimToolbar.js.map +1 -1
- package/dist/core/components/viewers/bim/BimViewer.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/BimViewer.js +7 -7
- package/dist/core/components/viewers/bim/BimViewer.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BCFTopicsManager.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BCFTopicsManager.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BIMManager/index.d.ts +2 -2
- package/dist/core/components/viewers/bim/src/BIMManager/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BIMManager/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimLoadingState/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimLoadingState/index.js +9 -9
- package/dist/core/components/viewers/bim/src/BimLoadingState/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimMeasurements/LenghtMeasurement.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimMeasurements/LenghtMeasurement.js +1 -1
- package/dist/core/components/viewers/bim/src/BimMeasurements/LenghtMeasurement.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/index.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/index.js +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CollapsibleTopicItem.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CollapsibleTopicItem.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CollapsibleTopicItem.js +5 -5
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CollapsibleTopicItem.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CreateTopicDialog.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CreateTopicDialog.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CreateTopicDialog.js +9 -9
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/CreateTopicDialog.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/TopicsSection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/TopicsSection.js +6 -9
- package/dist/core/components/viewers/bim/src/BimSidebar/src/CommunicationTab/src/TopicsSection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/index.js +4 -4
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js +11 -17
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.js +10 -18
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/index.js +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/ElevationsSection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/ElevationsSection.js +2 -2
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/ElevationsSection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/SpatialStructureSection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/SpatialStructureSection.js +6 -6
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/SpatialStructureSection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SensorsTab/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/index.js +2 -2
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.js +5 -5
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/GridManagement.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/LightingManagement.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/LightingManagement.js +3 -3
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/LightingManagement.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.js +3 -3
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/RenderMode.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.js +4 -4
- package/dist/core/components/viewers/bim/src/BimSidebar/src/SettingsTab/src/ToggleProjection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.js +5 -4
- package/dist/core/components/viewers/bim/src/BimSidebar/src/TabSelector.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/index.js +5 -5
- package/dist/core/components/viewers/bim/src/BimSidebar/src/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/CameraProjection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/CameraProjection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/ClippingPlane.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/ClippingPlane.js +1 -2
- package/dist/core/components/viewers/bim/src/ClippingPlane.js.map +1 -1
- package/dist/core/components/viewers/bim/src/Cursor.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/Cursor.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/Cursor.js.map +1 -1
- package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/DXFLoader/index.js +1 -1
- package/dist/core/components/viewers/bim/src/DXFLoader/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/index.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/index.js +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/src/ElevationProjector.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/src/ElevationProjector.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/src/ElevationProjector.js.map +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/src/types.d.ts +4 -4
- package/dist/core/components/viewers/bim/src/ElevationsTool/src/types.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/ElevationsTool/src/types.js.map +1 -1
- package/dist/core/components/viewers/bim/src/FitCamera.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/FitCamera.js +1 -1
- package/dist/core/components/viewers/bim/src/FitCamera.js.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts +3 -3
- package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/index.js +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/FloorplanRenderer.d.ts +3 -3
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/FloorplanRenderer.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/FloorplanRenderer.js.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/StoreyProjector.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/StoreyProjector.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/StoreyProjector.js.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/types.d.ts +2 -2
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/types.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/src/types.js.map +1 -1
- package/dist/core/components/viewers/bim/src/GhostMode.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/GhostMode.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/GhostMode.js.map +1 -1
- package/dist/core/components/viewers/bim/src/Highlighter/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/Highlighter/index.js +1 -1
- package/dist/core/components/viewers/bim/src/Highlighter/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/IDSManager/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/IDSManager/index.js +3 -3
- package/dist/core/components/viewers/bim/src/IDSManager/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/IDSManager/src/IDSLegend.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/IDSManager/src/IDSLegend.js +2 -2
- package/dist/core/components/viewers/bim/src/IDSManager/src/IDSLegend.js.map +1 -1
- package/dist/core/components/viewers/bim/src/LoadIfcAsFragments.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/LoadIfcAsFragments.js.map +1 -1
- package/dist/core/components/viewers/bim/src/LoadModels.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/LoadModels.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/LoadModels.js +1 -1
- package/dist/core/components/viewers/bim/src/LoadModels.js.map +1 -1
- package/dist/core/components/viewers/bim/src/ModelManager/index.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/ModelManager/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/ModelManager/index.js +4 -4
- package/dist/core/components/viewers/bim/src/ModelManager/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/SimpleBimViewer.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/SimpleBimViewer.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/SimpleBimViewer.js +8 -8
- package/dist/core/components/viewers/bim/src/SimpleBimViewer.js.map +1 -1
- package/dist/core/components/viewers/bim/src/SpatialStructure.js.map +1 -1
- package/dist/core/components/viewers/bim/src/ViewportGizmo.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/ViewportGizmo.js +2 -2
- package/dist/core/components/viewers/bim/src/ViewportGizmo.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/CameraController.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/lib/CameraController.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/CameraController.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/ChromeController.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/lib/ChromeController.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/ChromeController.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/ClipController.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/lib/ClipController.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/ClipController.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/GridController.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/GridController.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.js +1 -1
- package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/ViewSectionList.d.ts +2 -2
- package/dist/core/components/viewers/bim/src/lib/ViewSectionList.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/ViewSectionList.js +1 -1
- package/dist/core/components/viewers/bim/src/lib/ViewSectionList.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/drawingProjection.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/lib/drawingProjection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/drawingProjection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/useBuildingName.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/useBuildingName.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js +1 -1
- package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/index.js +4 -4
- package/dist/core/components/viewers/bim/src/propertiesMenu/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/ElementList.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/ElementList.js +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/ElementList.js.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertiesMenuHeader.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertiesMenuHeader.js +2 -2
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertiesMenuHeader.js.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertyGroup.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/PropertyGroup.js.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.js +2 -2
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/useElementProperties.js.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/utils.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/propertiesMenu/src/utils.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js +9 -9
- package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js +2 -2
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddFile.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddFile.js +2 -2
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddFile.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddSensor.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddSensor.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddSensor.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddToBimToolbar.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddToBimToolbar.js +3 -3
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddToBimToolbar.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.d.ts +16 -10
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.js +26 -6
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimComment.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimCommentCluster.d.ts +23 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimCommentCluster.d.ts.map +1 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimCommentCluster.js +108 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimCommentCluster.js.map +1 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.d.ts +2 -2
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts +5 -5
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js +2 -2
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.js +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/clusterMarkersByScreenSpace.d.ts +44 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/clusterMarkersByScreenSpace.d.ts.map +1 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/clusterMarkersByScreenSpace.js +77 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/clusterMarkersByScreenSpace.js.map +1 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentCameraUtils.d.ts +24 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentCameraUtils.d.ts.map +1 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentCameraUtils.js +27 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/commentCameraUtils.js.map +1 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.js +3 -3
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/renderCSS2DMarkers.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.js +244 -63
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useCommentMarkers.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.d.ts +2 -2
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js +4 -4
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.js +6 -6
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useSensorMarkers.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/BIMSearchTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/BIMSearchTool.js +2 -2
- package/dist/core/components/viewers/bim/src/tools/BIMSearchTool.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.js +6 -10
- package/dist/core/components/viewers/bim/src/tools/ClippingTool/ClippingTool.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.js +3 -4
- package/dist/core/components/viewers/bim/src/tools/ExplodeByLevelTool.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/FitCameraTool.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/FitCameraTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/FitCameraTool.js +2 -2
- package/dist/core/components/viewers/bim/src/tools/FitCameraTool.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/InspectBimTool.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/InspectBimTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/InspectBimTool.js +4 -4
- package/dist/core/components/viewers/bim/src/tools/InspectBimTool.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/bimToolbar.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/bimToolbar.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/bimToolbar.js +4 -4
- package/dist/core/components/viewers/bim/src/tools/bimToolbar.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/measureBimTool.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/measureBimTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/measureBimTool.js +6 -7
- package/dist/core/components/viewers/bim/src/tools/measureBimTool.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/selectionBimTool.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/selectionBimTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/selectionBimTool.js +5 -5
- package/dist/core/components/viewers/bim/src/tools/selectionBimTool.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/shareBimTool.d.ts +1 -1
- package/dist/core/components/viewers/bim/src/tools/shareBimTool.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/shareBimTool.js.map +1 -1
- package/dist/core/components/viewers/bim/utils/GizmoController.d.ts +1 -1
- package/dist/core/components/viewers/bim/utils/GizmoController.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/utils/GizmoController.js.map +1 -1
- package/dist/core/components/viewers/bim/utils/setCameraLookAt.d.ts +1 -1
- package/dist/core/components/viewers/bim/utils/setCameraLookAt.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/utils/setCameraLookAt.js.map +1 -1
- package/dist/core/components/viewers/map/MapViewer.d.ts +1 -1
- package/dist/core/components/viewers/map/MapViewer.d.ts.map +1 -1
- package/dist/core/components/viewers/map/MapViewer.js +7 -7
- package/dist/core/components/viewers/map/MapViewer.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/AddPortalDialog.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/AddPortalDialog.js +4 -4
- package/dist/core/components/viewers/map/datasets/AddPortalDialog.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetDetails.d.ts +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetDetails.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetDetails.js +4 -4
- package/dist/core/components/viewers/map/datasets/DatasetDetails.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetManager/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetManager/index.js +13 -13
- package/dist/core/components/viewers/map/datasets/DatasetManager/index.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetManager/src/FieldsTable.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetManager/src/FieldsTable.js +2 -2
- package/dist/core/components/viewers/map/datasets/DatasetManager/src/FieldsTable.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetSkeleton.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetSkeleton.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/Filters.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/Filters.js +2 -2
- package/dist/core/components/viewers/map/datasets/Filters.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/NestedFilter.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/NestedFilter.js +1 -1
- package/dist/core/components/viewers/map/datasets/NestedFilter.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/RowActions.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/RowActions.js +3 -3
- package/dist/core/components/viewers/map/datasets/RowActions.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/data.d.ts +1 -1
- package/dist/core/components/viewers/map/datasets/data.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/data.js +2 -2
- package/dist/core/components/viewers/map/datasets/data.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/index.d.ts +1 -1
- package/dist/core/components/viewers/map/datasets/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/index.js +11 -11
- package/dist/core/components/viewers/map/datasets/index.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.d.ts +1 -1
- package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.js +13 -16
- package/dist/core/components/viewers/map/datasets/src/arcGISDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/cache.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/ckanDatasets.d.ts +1 -1
- package/dist/core/components/viewers/map/datasets/src/ckanDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/ckanDatasets.js +3 -6
- package/dist/core/components/viewers/map/datasets/src/ckanDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/localDatasets.d.ts +1 -1
- package/dist/core/components/viewers/map/datasets/src/localDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/localDatasets.js +3 -6
- package/dist/core/components/viewers/map/datasets/src/localDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/minioDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/minioDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.d.ts +1 -1
- package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.js +1 -12
- package/dist/core/components/viewers/map/datasets/src/opendatasoftDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts +1 -1
- package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/publishedTiles.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/socrataDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/socrataDatasets.js +1 -1
- package/dist/core/components/viewers/map/datasets/src/socrataDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/urlSources.d.ts +1 -12
- package/dist/core/components/viewers/map/datasets/src/urlSources.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/urlSources.js +1 -1
- package/dist/core/components/viewers/map/datasets/src/urlSources.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/useDatasetsForPortals.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/useDatasetsForPortals.js +1 -1
- package/dist/core/components/viewers/map/datasets/src/useDatasetsForPortals.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/useFastDatasetCache.d.ts +1 -1
- package/dist/core/components/viewers/map/datasets/src/useFastDatasetCache.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/useFastDatasetCache.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/utils.d.ts +1 -1
- package/dist/core/components/viewers/map/datasets/utils.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/utils.js.map +1 -1
- package/dist/core/components/viewers/map/legends/MapLegendHost.d.ts.map +1 -1
- package/dist/core/components/viewers/map/legends/MapLegendHost.js +3 -3
- package/dist/core/components/viewers/map/legends/MapLegendHost.js.map +1 -1
- package/dist/core/components/viewers/map/src/Geocoder.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/Geocoder.js +8 -8
- package/dist/core/components/viewers/map/src/Geocoder.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/index.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/index.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/index.js +3 -3
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.js +11 -11
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/DatabaseBuildingPopover/src/BuildingsTools.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js +23 -56
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/OpenDataFeaturePopover.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/OpenDataFeaturePopover.js +4 -5
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/OpenDataFeaturePopover.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/PopoverSkeleton.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/PopoverSkeleton.js +2 -2
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/PopoverSkeleton.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/index.js +5 -5
- package/dist/core/components/viewers/map/src/MapLayers/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js +5 -5
- package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/index.js +4 -4
- package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/src/databaseBuildings.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/src/databaseBuildings.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/BuildingLayers/src/databaseBuildings.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/CommentLayer/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/CommentLayer/index.js +182 -61
- package/dist/core/components/viewers/map/src/MapLayers/src/CommentLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/EditPosition.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/EditPosition.js +3 -3
- package/dist/core/components/viewers/map/src/MapLayers/src/EditPosition.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.js +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileIcon.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileIcon.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.js +3 -3
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/FileManagerRow.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.js +4 -3
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileManager.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileMarker.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/components/MapFileMarker.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/index.js +6 -6
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/openFileInPopUpWindow.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/openFileInPopUpWindow.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/openFileInPopUpWindow.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js +3 -3
- package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/PlaceOnMap.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/PlaceOnMap.js +3 -3
- package/dist/core/components/viewers/map/src/MapLayers/src/PlaceOnMap.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.js +11 -14
- package/dist/core/components/viewers/map/src/MapLayers/src/SensorsLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.js +2 -2
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteContextMenu.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.js +4 -4
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/SiteLayer.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/index.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/siteGeometry.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/siteGeometry.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/useShowSitesOnMap.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/SiteLayer/useShowSitesOnMap.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.js +5 -4
- package/dist/core/components/viewers/map/src/MapSidebar/TabSelector.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/index.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/index.js +4 -4
- package/dist/core/components/viewers/map/src/MapSidebar/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/CommunicationTab/index.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/CommunicationTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/CommunicationTab/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/index.js +2 -2
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.js +5 -6
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.js +6 -10
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.js +4 -4
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AppliedDatasetsSection.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AppliedDatasetsSection.js +4 -4
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AppliedDatasetsSection.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AvailableDatasetsSection.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AvailableDatasetsSection.js +2 -2
- package/dist/core/components/viewers/map/src/MapSidebar/src/LayersTab/src/AvailableDatasetsSection.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.d.ts +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SensorsTab/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.js +3 -3
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/LocationSettings.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapCustomization.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapCustomization.js +3 -3
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapCustomization.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapProjection.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapProjection.js +3 -3
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/MapProjection.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js +3 -3
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js.map +1 -1
- package/dist/core/components/viewers/map/src/SimpleMap.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/SimpleMap.js +1 -1
- package/dist/core/components/viewers/map/src/SimpleMap.js.map +1 -1
- package/dist/core/components/viewers/map/src/compare/AddItem.d.ts +1 -1
- package/dist/core/components/viewers/map/src/compare/AddItem.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/compare/AddItem.js +6 -6
- package/dist/core/components/viewers/map/src/compare/AddItem.js.map +1 -1
- package/dist/core/components/viewers/map/src/compare/CompareDialog.d.ts +2 -2
- package/dist/core/components/viewers/map/src/compare/CompareDialog.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/compare/CompareDialog.js +5 -5
- package/dist/core/components/viewers/map/src/compare/CompareDialog.js.map +1 -1
- package/dist/core/components/viewers/map/src/compare/index.d.ts +1 -1
- package/dist/core/components/viewers/map/src/compare/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/compare/index.js +6 -6
- package/dist/core/components/viewers/map/src/compare/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.js +3 -3
- package/dist/core/components/viewers/map/src/tools/AddTools/AddDataset/DatasetAdder.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/FileAdder.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/FileAdder.js +5 -5
- package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/FileAdder.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/utils/uploadToPresignedURLS.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/utils/uploadToPresignedURLS.js +1 -3
- package/dist/core/components/viewers/map/src/tools/AddTools/AddFile/utils/uploadToPresignedURLS.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.js +3 -3
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/AssociateBuildingsDialog.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.js +7 -7
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/SiteAdder.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/persistSite.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/persistSite.js +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddSite/persistSite.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.d.ts +2 -2
- package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.js +8 -8
- package/dist/core/components/viewers/map/src/tools/AddTools/AddToMap.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/DatasetMapTool.d.ts +2 -2
- package/dist/core/components/viewers/map/src/tools/DatasetMapTool.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/DatasetMapTool.js +1 -1
- package/dist/core/components/viewers/map/src/tools/DatasetMapTool.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/mapTools.d.ts +2 -2
- package/dist/core/components/viewers/map/src/tools/mapTools.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/mapTools.js +4 -4
- package/dist/core/components/viewers/map/src/tools/mapTools.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/measureMapTool.d.ts +1 -1
- package/dist/core/components/viewers/map/src/tools/measureMapTool.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/measureMapTool.js +3 -3
- package/dist/core/components/viewers/map/src/tools/measureMapTool.js.map +1 -1
- package/dist/core/components/viewers/map/src/tools/shareMapTool.d.ts +1 -1
- package/dist/core/components/viewers/map/src/tools/shareMapTool.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/tools/shareMapTool.js.map +1 -1
- package/dist/core/components/viewers/map/utils/ClusterManager.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/ClusterManager.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/ClusterManager.js.map +1 -1
- package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.js +0 -1
- package/dist/core/components/viewers/map/utils/MapEventManager/MapClickManager.js.map +1 -1
- package/dist/core/components/viewers/map/utils/MarkerManager.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/MarkerManager.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/MarkerManager.js.map +1 -1
- package/dist/core/components/viewers/map/utils/extractCoordinates.js.map +1 -1
- package/dist/core/components/viewers/map/utils/fitBuildingsBounds.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/fitBuildingsBounds.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/fitBuildingsBounds.js.map +1 -1
- package/dist/core/components/viewers/map/utils/flyToEach.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/flyToEach.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/flyToEach.js +0 -1
- package/dist/core/components/viewers/map/utils/flyToEach.js.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoder.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/geocoder.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoder.js +1 -1
- package/dist/core/components/viewers/map/utils/geocoder.js.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/adapters.js.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/index.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/index.js +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/index.js.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/osm.js +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/osm.js.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/pelias.js.map +1 -1
- package/dist/core/components/viewers/map/utils/getOsmIdFromMartin.d.ts +1 -1
- package/dist/core/components/viewers/map/utils/getOsmIdFromMartin.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/getOsmIdFromMartin.js.map +1 -1
- package/dist/core/components/viewers/map/utils/getOsmIdbyCoordinates.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/getOsmIdbyCoordinates.js +0 -2
- package/dist/core/components/viewers/map/utils/getOsmIdbyCoordinates.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/PointCloudToolbar.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/PointCloudToolbar.js +1 -1
- package/dist/core/components/viewers/pointcloud/PointCloudToolbar.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/PointCloudViewer.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/PointCloudViewer.js +5 -5
- package/dist/core/components/viewers/pointcloud/PointCloudViewer.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.js +7 -7
- package/dist/core/components/viewers/pointcloud/src/PointCloudLoadingState/index.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudManagementTable.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.js +15 -15
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudTable.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.js +3 -3
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudUploadPanel.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/TabSelector.d.ts +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/TabSelector.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/TabSelector.js +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/TabSelector.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.js +2 -2
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/index.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js +3 -3
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.d.ts +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js +4 -4
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.d.ts +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.js +5 -5
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/index.js +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/index.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/CameraSettings.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/CameraSettings.js +3 -3
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/CameraSettings.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/GridManagement.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/GridManagement.js +4 -4
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/GridManagement.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/PerformanceSettings.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/PerformanceSettings.js +10 -10
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/SettingsTab/src/PerformanceSettings.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/ViewportGizmo.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/ClippingTools/ClippingTool.d.ts +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/ClippingTools/ClippingTool.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/ClippingTools/ClippingTool.js +3 -3
- package/dist/core/components/viewers/pointcloud/src/tools/ClippingTools/ClippingTool.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/FitToScreen.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/FitToScreen.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AngleMeasurement.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AngleMeasurement.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AreaMeasurement.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/AreaMeasurement.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/LineMeasurement.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/LineMeasurement.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/MeasurePointCloudTool.d.ts +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/MeasurePointCloudTool.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/MeasurePointCloudTool.js +6 -6
- package/dist/core/components/viewers/pointcloud/src/tools/MeasureTools/MeasurePointCloudTool.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PCSearchTool.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PCSearchTool.js +2 -2
- package/dist/core/components/viewers/pointcloud/src/tools/PCSearchTool.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js +2 -2
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PerformanceSettingTools.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PerformanceSettingTools.js +3 -3
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PerformanceSettingTools.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PointBudgetTool.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PointBudgetTool.js +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/PointBudgetTool.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/ShowOctreeBoxTool.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/ShowOctreeBoxTool.js +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/ShowOctreeBoxTool.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/SplatQualitySelection.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/SplatQualitySelection.js +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/SplatQualitySelection.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/SetCameraOption.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/SetCameraOption.js +4 -4
- package/dist/core/components/viewers/pointcloud/src/tools/SetCameraOption.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/index.d.ts +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/index.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/index.js +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/SharePointCloudTool/index.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/pointcloudToolbarTools.d.ts +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/pointcloudToolbarTools.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/pointcloudToolbarTools.js +2 -2
- package/dist/core/components/viewers/pointcloud/src/tools/pointcloudToolbarTools.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/utils/restoreCameraFromUrl.d.ts +1 -1
- package/dist/core/components/viewers/pointcloud/utils/restoreCameraFromUrl.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/utils/restoreCameraFromUrl.js.map +1 -1
- package/dist/core/hooks/buildings/createBuildingHooks.d.ts +1 -1
- package/dist/core/hooks/buildings/createBuildingHooks.d.ts.map +1 -1
- package/dist/core/hooks/buildings/createBuildingHooks.js.map +1 -1
- package/dist/core/hooks/comments/comments.d.ts +11 -0
- package/dist/core/hooks/comments/comments.d.ts.map +1 -1
- package/dist/core/hooks/comments/comments.js +3 -1
- package/dist/core/hooks/comments/comments.js.map +1 -1
- package/dist/core/hooks/comments/createCommentHooks.d.ts +12 -1
- package/dist/core/hooks/comments/createCommentHooks.d.ts.map +1 -1
- package/dist/core/hooks/comments/createCommentHooks.js +31 -2
- package/dist/core/hooks/comments/createCommentHooks.js.map +1 -1
- package/dist/core/hooks/files/createFileHooks.d.ts +1 -1
- package/dist/core/hooks/files/createFileHooks.d.ts.map +1 -1
- package/dist/core/hooks/files/createFileHooks.js.map +1 -1
- package/dist/core/hooks/files/files.d.ts.map +1 -1
- package/dist/core/hooks/files/files.js +1 -2
- package/dist/core/hooks/files/files.js.map +1 -1
- package/dist/core/hooks/infrastructures/createInfrastructureHooks.d.ts +1 -1
- package/dist/core/hooks/infrastructures/createInfrastructureHooks.d.ts.map +1 -1
- package/dist/core/hooks/infrastructures/createInfrastructureHooks.js.map +1 -1
- package/dist/core/hooks/openDataPortals/createOpenDataPortalHooks.d.ts +1 -1
- package/dist/core/hooks/openDataPortals/createOpenDataPortalHooks.d.ts.map +1 -1
- package/dist/core/hooks/openDataPortals/createOpenDataPortalHooks.js.map +1 -1
- package/dist/core/hooks/organizations/createOrganizationHooks.d.ts +1 -1
- package/dist/core/hooks/organizations/createOrganizationHooks.d.ts.map +1 -1
- package/dist/core/hooks/organizations/createOrganizationHooks.js.map +1 -1
- package/dist/core/hooks/provider.d.ts +5 -5
- package/dist/core/hooks/provider.d.ts.map +1 -1
- package/dist/core/hooks/provider.js +4 -4
- package/dist/core/hooks/provider.js.map +1 -1
- package/dist/core/hooks/sensorTypes/createSensorTypeHooks.d.ts +1 -1
- package/dist/core/hooks/sensorTypes/createSensorTypeHooks.d.ts.map +1 -1
- package/dist/core/hooks/sensorTypes/createSensorTypeHooks.js.map +1 -1
- package/dist/core/hooks/sensors/createSensorHooks.d.ts +1 -1
- package/dist/core/hooks/sensors/createSensorHooks.d.ts.map +1 -1
- package/dist/core/hooks/sensors/createSensorHooks.js +1 -1
- package/dist/core/hooks/sensors/createSensorHooks.js.map +1 -1
- package/dist/core/hooks/sites/createSiteHooks.d.ts +1 -1
- package/dist/core/hooks/sites/createSiteHooks.d.ts.map +1 -1
- package/dist/core/hooks/sites/createSiteHooks.js.map +1 -1
- package/dist/core/hooks/sites/sites.d.ts.map +1 -1
- package/dist/core/hooks/ui/useResizableSidebarWidth.d.ts +30 -0
- package/dist/core/hooks/ui/useResizableSidebarWidth.d.ts.map +1 -0
- package/dist/core/hooks/ui/useResizableSidebarWidth.js +75 -0
- package/dist/core/hooks/ui/useResizableSidebarWidth.js.map +1 -0
- package/dist/core/hooks/useCaptureScreenshot.d.ts.map +1 -1
- package/dist/core/hooks/useCaptureScreenshot.js.map +1 -1
- package/dist/core/hooks/useCurrentViewerPosition.d.ts.map +1 -1
- package/dist/core/hooks/useCurrentViewerPosition.js +1 -1
- package/dist/core/hooks/useCurrentViewerPosition.js.map +1 -1
- package/dist/core/hooks/useGeocodingRuntimeConfig.d.ts +1 -1
- package/dist/core/hooks/useGeocodingRuntimeConfig.d.ts.map +1 -1
- package/dist/core/hooks/useGeocodingRuntimeConfig.js.map +1 -1
- package/dist/core/hooks/useShareUrl.d.ts.map +1 -1
- package/dist/core/hooks/useShareUrl.js +1 -1
- package/dist/core/hooks/useShareUrl.js.map +1 -1
- package/dist/core/hooks/users/createUserHooks.d.ts +1 -1
- package/dist/core/hooks/users/createUserHooks.d.ts.map +1 -1
- package/dist/core/hooks/users/createUserHooks.js.map +1 -1
- package/dist/core/i18n/index.js +1 -1
- package/dist/core/i18n/index.js.map +1 -1
- package/dist/core/i18n/messages/en.json +1877 -1872
- package/dist/core/i18n/messages/es.json +1875 -1870
- package/dist/core/i18n/messages/fr.json +1875 -1870
- package/dist/core/plugins/host/context.d.ts +1 -1
- package/dist/core/plugins/host/context.d.ts.map +1 -1
- package/dist/core/plugins/host/context.js.map +1 -1
- package/dist/core/plugins/host/host.d.ts +1 -1
- package/dist/core/plugins/host/host.d.ts.map +1 -1
- package/dist/core/plugins/host/host.js.map +1 -1
- package/dist/core/plugins/host/provider.d.ts.map +1 -1
- package/dist/core/plugins/host/provider.js +2 -2
- package/dist/core/plugins/host/provider.js.map +1 -1
- package/dist/core/store/AppConfig/context.d.ts +1 -1
- package/dist/core/store/AppConfig/context.d.ts.map +1 -1
- package/dist/core/store/AppConfig/context.js.map +1 -1
- package/dist/core/store/AppConfig/reducer.d.ts +2 -2
- package/dist/core/store/AppConfig/reducer.d.ts.map +1 -1
- package/dist/core/store/AppConfig/reducer.js.map +1 -1
- package/dist/core/store/BIM/context.d.ts +1 -1
- package/dist/core/store/BIM/context.d.ts.map +1 -1
- package/dist/core/store/BIM/context.js.map +1 -1
- package/dist/core/store/BIM/reducer.d.ts +3 -3
- package/dist/core/store/BIM/reducer.d.ts.map +1 -1
- package/dist/core/store/BIM/reducer.js.map +1 -1
- package/dist/core/store/Buildings/context.d.ts +1 -1
- package/dist/core/store/Buildings/context.d.ts.map +1 -1
- package/dist/core/store/Buildings/context.js.map +1 -1
- package/dist/core/store/Buildings/reducer.d.ts +2 -2
- package/dist/core/store/Buildings/reducer.d.ts.map +1 -1
- package/dist/core/store/Buildings/reducer.js.map +1 -1
- package/dist/core/store/CombineProviders.d.ts.map +1 -1
- package/dist/core/store/CombineProviders.js +7 -7
- package/dist/core/store/CombineProviders.js.map +1 -1
- package/dist/core/store/Content/context.d.ts +1 -1
- package/dist/core/store/Content/context.d.ts.map +1 -1
- package/dist/core/store/Content/context.js.map +1 -1
- package/dist/core/store/Datasets/context.d.ts +1 -1
- package/dist/core/store/Datasets/context.d.ts.map +1 -1
- package/dist/core/store/Datasets/context.js.map +1 -1
- package/dist/core/store/Datasets/reducer.d.ts +1 -1
- package/dist/core/store/Datasets/reducer.d.ts.map +1 -1
- package/dist/core/store/Datasets/reducer.js +0 -2
- package/dist/core/store/Datasets/reducer.js.map +1 -1
- package/dist/core/store/Files/context.d.ts +1 -1
- package/dist/core/store/Files/context.d.ts.map +1 -1
- package/dist/core/store/Files/context.js.map +1 -1
- package/dist/core/store/Files/reducer.d.ts +3 -3
- package/dist/core/store/Files/reducer.d.ts.map +1 -1
- package/dist/core/store/Files/reducer.js +0 -1
- package/dist/core/store/Files/reducer.js.map +1 -1
- package/dist/core/store/Map/context.d.ts +1 -1
- package/dist/core/store/Map/context.d.ts.map +1 -1
- package/dist/core/store/Map/context.js +1 -1
- package/dist/core/store/Map/context.js.map +1 -1
- package/dist/core/store/Map/reducer.d.ts +6 -5
- package/dist/core/store/Map/reducer.d.ts.map +1 -1
- package/dist/core/store/Map/reducer.js.map +1 -1
- package/dist/core/store/MapSites/context.d.ts +1 -1
- package/dist/core/store/MapSites/context.d.ts.map +1 -1
- package/dist/core/store/MapSites/context.js.map +1 -1
- package/dist/core/store/MapSites/reducer.d.ts +1 -1
- package/dist/core/store/MapSites/reducer.d.ts.map +1 -1
- package/dist/core/store/MapSites/reducer.js.map +1 -1
- package/dist/core/store/Menus/context.d.ts +1 -1
- package/dist/core/store/Menus/context.d.ts.map +1 -1
- package/dist/core/store/Menus/context.js +6 -3
- package/dist/core/store/Menus/context.js.map +1 -1
- package/dist/core/store/Menus/reducer.d.ts +21 -1
- package/dist/core/store/Menus/reducer.d.ts.map +1 -1
- package/dist/core/store/Menus/reducer.js +21 -3
- package/dist/core/store/Menus/reducer.js.map +1 -1
- package/dist/core/store/Permissions/context.d.ts +1 -1
- package/dist/core/store/Permissions/context.d.ts.map +1 -1
- package/dist/core/store/Permissions/context.js +2 -2
- package/dist/core/store/Permissions/context.js.map +1 -1
- package/dist/core/store/PointCloud/context.d.ts +1 -1
- package/dist/core/store/PointCloud/context.d.ts.map +1 -1
- package/dist/core/store/PointCloud/context.js.map +1 -1
- package/dist/core/store/PointCloud/reducer.d.ts +1 -1
- package/dist/core/store/PointCloud/reducer.d.ts.map +1 -1
- package/dist/core/store/PointCloud/reducer.js.map +1 -1
- package/dist/core/store/Tools/context.d.ts +1 -1
- package/dist/core/store/Tools/context.d.ts.map +1 -1
- package/dist/core/store/Tools/context.js.map +1 -1
- package/dist/core/store/Tools/reducer.d.ts +1 -1
- package/dist/core/store/Tools/reducer.d.ts.map +1 -1
- package/dist/core/store/Tools/reducer.js.map +1 -1
- package/dist/core/styles/globals.css +17 -16
- package/dist/core/styles/tailwindMerge.d.ts +1 -1
- package/dist/core/styles/tailwindMerge.d.ts.map +1 -1
- package/dist/core/styles/tailwindMerge.js.map +1 -1
- package/dist/core/types/datasetTypes.d.ts +2 -2
- package/dist/core/types/datasetTypes.d.ts.map +1 -1
- package/dist/core/types/dbTypes.d.ts +1 -1
- package/dist/core/types/dbTypes.d.ts.map +1 -1
- package/dist/core/types/dbTypes.js.map +1 -1
- package/dist/core/types/files.d.ts +2 -2
- package/dist/core/types/files.d.ts.map +1 -1
- package/dist/core/types/global.d.ts +3 -3
- package/dist/core/types/global.d.ts.map +1 -1
- package/dist/core/types/global.js.map +1 -1
- package/dist/core/types/map.d.ts +2 -2
- package/dist/core/types/map.d.ts.map +1 -1
- package/dist/core/types/tools.d.ts +3 -3
- package/dist/core/types/tools.d.ts.map +1 -1
- package/dist/core/types/users.d.ts +2 -2
- package/dist/core/types/users.d.ts.map +1 -1
- package/dist/core/utils/getFileIcon.d.ts +1 -1
- package/dist/core/utils/getFileIcon.d.ts.map +1 -1
- package/dist/core/utils/getFileIcon.js.map +1 -1
- package/dist/core/utils/markerUtils.d.ts +10 -0
- package/dist/core/utils/markerUtils.d.ts.map +1 -1
- package/dist/core/utils/markerUtils.js +9 -1
- package/dist/core/utils/markerUtils.js.map +1 -1
- package/dist/core/utils/memcache.d.ts.map +1 -1
- package/dist/core/utils/memcache.js +0 -7
- package/dist/core/utils/memcache.js.map +1 -1
- package/dist/core/utils/roles.d.ts.map +1 -1
- package/dist/core/utils/roles.js.map +1 -1
- package/dist/core/utils/timeUtils.js.map +1 -1
- package/dist/core/utils/utils.d.ts +1 -1
- package/dist/core/utils/utils.d.ts.map +1 -1
- package/dist/core/utils/utils.js.map +1 -1
- package/package.json +8 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/GridController.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 { CurrentWorld } from '../CurrentWorld'\r\n\r\n/**\r\n * Hides the world grid while a drawing-based view tool is active.\r\n *\r\n * The grid is `transparent: true` (an infinite shader plane), so even when\r\n * positioned below the slab it can poke through via Z-fighting or because\r\n * the section clip doesn't always cull it. Floorplan/elevation drawings\r\n * are also conventionally rendered without a grid — so the cleanest fix\r\n * is to flip its visibility off and restore it on exit.\r\n *\r\n * Source priority for the grid reference:\r\n * 1. The instance injected via `setGrid(grid)` (typically from\r\n * `bimState.bim.grid`, which the BimViewer dispatches at startup).\r\n * 2. Fallback: `OBC.Grids.list.get(world.uuid)`.\r\n */\r\nexport class GridController {\r\n private _injected: any | null = null\r\n private _savedVisible: boolean | null = null\r\n\r\n constructor(private components: OBC.Components) {}\r\n\r\n setGrid(grid: any | null) {\r\n this._injected = grid ?? null\r\n }\r\n\r\n hide() {\r\n if (this._savedVisible !== null) return // already hidden\r\n const grid = this._resolveGrid()\r\n if (!grid) return\r\n this._savedVisible = grid.config?.visible ?? grid.three?.visible ?? true\r\n if (grid.config) grid.config.visible = false\r\n if (grid.three) grid.three.visible = false\r\n }\r\n\r\n restore() {\r\n if (this._savedVisible === null) return\r\n const grid = this._resolveGrid()\r\n const restoreTo = this._savedVisible\r\n this._savedVisible = null\r\n if (!grid) return\r\n if (grid.config) grid.config.visible = restoreTo\r\n if (grid.three) grid.three.visible = restoreTo\r\n }\r\n\r\n private _resolveGrid(): any | null {\r\n if (this._injected) return this._injected\r\n try {\r\n const grids = this.components.get(OBC.Grids)\r\n if (!grids?.list) return null\r\n const sourceWorld = this.components.get(CurrentWorld).world\r\n if (sourceWorld) {\r\n const byWorld = grids.list.get(sourceWorld.uuid)\r\n if (byWorld) return byWorld\r\n }\r\n // Fallback: any registered grid (typically a single one per session).\r\n for (const grid of grids.list.values()) return grid\r\n } catch {\r\n // Grids component not registered — no-op.\r\n }\r\n return null\r\n }\r\n}\r\n"],"mappings":"AAGA,YAAY,SAAS;
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/GridController.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\nimport { CurrentWorld } from '../CurrentWorld'\r\n\r\n/**\r\n * Hides the world grid while a drawing-based view tool is active.\r\n *\r\n * The grid is `transparent: true` (an infinite shader plane), so even when\r\n * positioned below the slab it can poke through via Z-fighting or because\r\n * the section clip doesn't always cull it. Floorplan/elevation drawings\r\n * are also conventionally rendered without a grid — so the cleanest fix\r\n * is to flip its visibility off and restore it on exit.\r\n *\r\n * Source priority for the grid reference:\r\n * 1. The instance injected via `setGrid(grid)` (typically from\r\n * `bimState.bim.grid`, which the BimViewer dispatches at startup).\r\n * 2. Fallback: `OBC.Grids.list.get(world.uuid)`.\r\n */\r\nexport class GridController {\r\n private _injected: any | null = null\r\n private _savedVisible: boolean | null = null\r\n\r\n constructor(private components: OBC.Components) {}\r\n\r\n setGrid(grid: any | null) {\r\n this._injected = grid ?? null\r\n }\r\n\r\n hide() {\r\n if (this._savedVisible !== null) return // already hidden\r\n const grid = this._resolveGrid()\r\n if (!grid) return\r\n this._savedVisible = grid.config?.visible ?? grid.three?.visible ?? true\r\n if (grid.config) grid.config.visible = false\r\n if (grid.three) grid.three.visible = false\r\n }\r\n\r\n restore() {\r\n if (this._savedVisible === null) return\r\n const grid = this._resolveGrid()\r\n const restoreTo = this._savedVisible\r\n this._savedVisible = null\r\n if (!grid) return\r\n if (grid.config) grid.config.visible = restoreTo\r\n if (grid.three) grid.three.visible = restoreTo\r\n }\r\n\r\n private _resolveGrid(): any | null {\r\n if (this._injected) return this._injected\r\n try {\r\n const grids = this.components.get(OBC.Grids)\r\n if (!grids?.list) return null\r\n const sourceWorld = this.components.get(CurrentWorld).world\r\n if (sourceWorld) {\r\n const byWorld = grids.list.get(sourceWorld.uuid)\r\n if (byWorld) return byWorld\r\n }\r\n // Fallback: any registered grid (typically a single one per session).\r\n for (const grid of grids.list.values()) return grid\r\n } catch {\r\n // Grids component not registered — no-op.\r\n }\r\n return null\r\n }\r\n}\r\n"],"mappings":"AAGA,YAAY,SAAS;AAErB,SAAS,oBAAoB;AAgBtB,MAAM,eAAe;AAAA,EAI1B,YAAoB,YAA4B;AAA5B;AAHpB,SAAQ,YAAwB;AAChC,SAAQ,gBAAgC;AAAA,EAES;AAAA,EAEjD,QAAQ,MAAkB;AACxB,SAAK,YAAY,sBAAQ;AAAA,EAC3B;AAAA,EAEA,OAAO;AA/BT;AAgCI,QAAI,KAAK,kBAAkB,KAAM;AACjC,UAAM,OAAO,KAAK,aAAa;AAC/B,QAAI,CAAC,KAAM;AACX,SAAK,iBAAgB,sBAAK,WAAL,mBAAa,YAAb,aAAwB,UAAK,UAAL,mBAAY,YAApC,YAA+C;AACpE,QAAI,KAAK,OAAQ,MAAK,OAAO,UAAU;AACvC,QAAI,KAAK,MAAO,MAAK,MAAM,UAAU;AAAA,EACvC;AAAA,EAEA,UAAU;AACR,QAAI,KAAK,kBAAkB,KAAM;AACjC,UAAM,OAAO,KAAK,aAAa;AAC/B,UAAM,YAAY,KAAK;AACvB,SAAK,gBAAgB;AACrB,QAAI,CAAC,KAAM;AACX,QAAI,KAAK,OAAQ,MAAK,OAAO,UAAU;AACvC,QAAI,KAAK,MAAO,MAAK,MAAM,UAAU;AAAA,EACvC;AAAA,EAEQ,eAA2B;AACjC,QAAI,KAAK,UAAW,QAAO,KAAK;AAChC,QAAI;AACF,YAAM,QAAQ,KAAK,WAAW,IAAI,IAAI,KAAK;AAC3C,UAAI,EAAC,+BAAO,MAAM,QAAO;AACzB,YAAM,cAAc,KAAK,WAAW,IAAI,YAAY,EAAE;AACtD,UAAI,aAAa;AACf,cAAM,UAAU,MAAM,KAAK,IAAI,YAAY,IAAI;AAC/C,YAAI,QAAS,QAAO;AAAA,MACtB;AAEA,iBAAW,QAAQ,MAAM,KAAK,OAAO,EAAG,QAAO;AAAA,IACjD,SAAQ;AAAA,IAER;AACA,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrueNorthPopover.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/lib/TrueNorthPopover.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TrueNorthPopover.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/lib/TrueNorthPopover.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAU9B,UAAU,KAAK;IACb,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAA;IAClB,wEAAwE;IACxE,YAAY,EAAE,OAAO,CAAA;IACrB,0EAA0E;IAC1E,QAAQ,EAAE,OAAO,CAAA;IACjB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB,YAAY,EAAE,MAAM,IAAI,CAAA;CACzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,WAAW,EACX,YAAY,GACb,EAAE,KAAK,qBA0GP"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import * as React from "react";
|
|
4
3
|
import * as LR from "lucide-react";
|
|
5
4
|
import { useTranslations } from "next-intl";
|
|
5
|
+
import * as React from "react";
|
|
6
6
|
import { Button } from "../../../../ui/Button";
|
|
7
7
|
import { Input } from "../../../../ui/Input";
|
|
8
8
|
import {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/TrueNorthPopover.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/TrueNorthPopover.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as LR from 'lucide-react'\r\nimport { useTranslations } from 'next-intl'\r\nimport * as React from 'react'\r\n\r\nimport { Button } from '../../../../ui/Button'\r\nimport { Input } from '../../../../ui/Input'\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from '../../../../ui/Popover'\r\n\r\ninterface Props {\r\n /** Current rotation in degrees (0-360, clockwise from default screen-up). */\r\n northAngle: number\r\n /** Whether the floorplan tool is currently waiting for a line click. */\r\n pickingNorth: boolean\r\n /** Disabled when no floorplan is active (rotation makes no sense yet). */\r\n disabled: boolean\r\n onChangeAngle: (degrees: number) => void\r\n onStartPick: () => void\r\n onCancelPick: () => void\r\n}\r\n\r\n/**\r\n * Compass-icon button + popover that lets the user set the building's\r\n * true north for floorplan views. Two ways to set it:\r\n * 1. Type a value 0-360 °.\r\n * 2. Click \"Pick line\", then draw a line by clicking two points on the\r\n * active floorplan — each point snaps to the nearest geometry vertex,\r\n * and the bearing between them becomes the new north (Esc cancels).\r\n *\r\n * The popover closes when the user starts a pick (so the canvas isn't\r\n * obscured) and stays in sync via the `northAngle` / `pickingNorth` props\r\n * coming from FloorplanTool.\r\n */\r\nexport function TrueNorthPopover({\r\n northAngle,\r\n pickingNorth,\r\n disabled,\r\n onChangeAngle,\r\n onStartPick,\r\n onCancelPick,\r\n}: Props) {\r\n const t = useTranslations('ViewSection')\r\n const [open, setOpen] = React.useState(false)\r\n const [draft, setDraft] = React.useState<string>(formatAngle(northAngle))\r\n\r\n // Keep the input in sync when the angle changes from outside (e.g. line\r\n // pick committed a new value).\r\n React.useEffect(() => {\r\n setDraft(formatAngle(northAngle))\r\n }, [northAngle])\r\n\r\n // Close the popover automatically when the user kicks off a line pick.\r\n React.useEffect(() => {\r\n if (pickingNorth) setOpen(false)\r\n }, [pickingNorth])\r\n\r\n const commitDraft = () => {\r\n const value = Number(draft)\r\n if (!Number.isFinite(value)) {\r\n setDraft(formatAngle(northAngle))\r\n return\r\n }\r\n onChangeAngle(value)\r\n }\r\n\r\n return (\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"h-6 w-6 p-0\"\r\n title={t('trueNorthTitle')}\r\n disabled={disabled}\r\n >\r\n <LR.Compass className=\"h-3.5 w-3.5\" />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent align=\"end\" className=\"w-64 p-3\">\r\n <div className=\"space-y-3\">\r\n <div className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">\r\n {t('trueNorthTitle')}\r\n </div>\r\n\r\n <label className=\"block space-y-1\">\r\n <span className=\"text-xs text-muted-foreground\">\r\n {t('trueNorthAngleLabel')}\r\n </span>\r\n <div className=\"flex items-center gap-2\">\r\n <Input\r\n type=\"number\"\r\n min={0}\r\n max={360}\r\n step={1}\r\n value={draft}\r\n onChange={(e) => setDraft(e.target.value)}\r\n onBlur={commitDraft}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') {\r\n commitDraft()\r\n e.currentTarget.blur()\r\n }\r\n }}\r\n className=\"h-8 text-sm\"\r\n disabled={disabled}\r\n />\r\n <span className=\"text-xs text-muted-foreground\">°</span>\r\n </div>\r\n </label>\r\n\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"w-full justify-start gap-2 h-8 text-xs\"\r\n disabled={disabled || pickingNorth}\r\n onClick={onStartPick}\r\n >\r\n <LR.MousePointerClick className=\"h-3.5 w-3.5\" />\r\n {pickingNorth ? t('trueNorthPicking') : t('trueNorthPickLine')}\r\n </Button>\r\n\r\n {pickingNorth && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"w-full h-7 text-xs\"\r\n onClick={onCancelPick}\r\n >\r\n {t('trueNorthCancelPick')}\r\n </Button>\r\n )}\r\n\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"w-full h-7 text-xs\"\r\n disabled={disabled || northAngle === 0}\r\n onClick={() => onChangeAngle(0)}\r\n >\r\n <LR.RotateCcw className=\"h-3 w-3 mr-1\" />\r\n {t('trueNorthReset')}\r\n </Button>\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n}\r\n\r\nfunction formatAngle(degrees: number): string {\r\n // Show 0 decimals for whole numbers, 1 decimal otherwise — keeps the\r\n // input clean for typed values but readable after a line pick.\r\n const rounded = Math.round(degrees * 10) / 10\r\n return Number.isInteger(rounded) ? rounded.toFixed(0) : rounded.toFixed(1)\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { DrawingLayerInfo } from './drawingLayers';
|
|
3
|
-
import { ViewListEntry, ViewLoadingState } from './viewSection';
|
|
2
|
+
import type { DrawingLayerInfo } from './drawingLayers';
|
|
3
|
+
import type { ViewListEntry, ViewLoadingState } from './viewSection';
|
|
4
4
|
interface Props {
|
|
5
5
|
entries: ViewListEntry[];
|
|
6
6
|
activeId: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewSectionList.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/lib/ViewSectionList.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ViewSectionList.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/lib/ViewSectionList.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEpE,UAAU,KAAK;IACb,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB;wEACoE;IACpE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,EAAE,gBAAgB,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB;mEAC+D;IAC/D,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAA;IACvC,kEAAkE;IAClE,cAAc,EAAE,MAAM,CAAA;IACtB,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAA;IACrB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAA;IACjB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAA;IACjB,kDAAkD;IAClD,aAAa,EAAE,MAAM,CAAA;IACrB,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAA;IACnB,sDAAsD;IACtD,qBAAqB,EAAE,MAAM,CAAA;IAC7B,+CAA+C;IAC/C,gBAAgB,EAAE,MAAM,CAAA;IACxB;qCACiC;IACjC,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAA;IAChD,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IACxC,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,UAAU,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;IACnE,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5D,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/D;AAED;;uCAEuC;AACvC,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,QAAQ,EACR,SAAS,EACT,OAAO,EACP,cAAc,EACd,YAAY,EACZ,cAAc,EACd,aAAa,EACb,SAAS,EACT,SAAS,EACT,aAAa,EACb,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,MAAM,EACN,UAAU,EACV,aAAa,EACb,kBAAkB,GACnB,EAAE,KAAK,qBA4IP"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import * as React from "react";
|
|
4
3
|
import * as LR from "lucide-react";
|
|
4
|
+
import * as React from "react";
|
|
5
5
|
import { Button } from "../../../../ui/Button";
|
|
6
6
|
import { Switch } from "../../../../ui/Switch";
|
|
7
7
|
function ViewSectionList({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/ViewSectionList.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 { Button } from '../../../../ui/Button'\r\nimport { Switch } from '../../../../ui/Switch'\r\nimport { DrawingLayerInfo } from './drawingLayers'\r\nimport { ViewListEntry, ViewLoadingState } from './viewSection'\r\n\r\ninterface Props {\r\n entries: ViewListEntry[]\r\n activeId: string | null\r\n /** Id the user just clicked but the tool hasn't activated yet. Lets the\r\n * spinner appear on the row immediately, before activeId flips. */\r\n pendingId: string | null\r\n loading: ViewLoadingState\r\n loadingPercent: number\r\n /** Per-IFC-class layers of the active entry, or null if none. Used to\r\n * render the expandable layers panel below the active row. */\r\n activeLayers: DrawingLayerInfo[] | null\r\n /** Translated message shown next to the spinner while loading. */\r\n loadingMessage: string\r\n /** Translated \"Viewing\" prefix shown before the entry label when active. */\r\n viewingPrefix: string\r\n /** Translated label of the Exit button. */\r\n exitLabel: string\r\n /** Translated tooltip for \"Go to …\". */\r\n goToLabel: string\r\n /** Translated tooltip for the download button. */\r\n downloadLabel: string\r\n /** Translated tooltip for the layers expand/collapse button. */\r\n layersLabel: string\r\n /** Translated tooltip for layer visibility toggle. */\r\n toggleVisibilityLabel: string\r\n /** Translated tooltip for the color picker. */\r\n chooseColorLabel: string\r\n /** Maps an IFC class name to a friendly translated label\r\n * (e.g. \"IFCWALL\" → \"Wall\"). */\r\n friendlyClassName: (className: string) => string\r\n onSelect: (entry: ViewListEntry) => void\r\n onExit: () => void\r\n onDownload: (entry: ViewListEntry, event: React.MouseEvent) => void\r\n onToggleLayer: (className: string, visible: boolean) => void\r\n onChangeLayerColor: (className: string, color: number) => void\r\n}\r\n\r\n/** Active-card + row list shared by every \"view\" sidebar section\r\n * (floorplans, elevations, …). Localized strings come from the parent —\r\n * this component is i18n-agnostic. */\r\nexport function ViewSectionList({\r\n entries,\r\n activeId,\r\n pendingId,\r\n loading,\r\n loadingPercent,\r\n activeLayers,\r\n loadingMessage,\r\n viewingPrefix,\r\n exitLabel,\r\n goToLabel,\r\n downloadLabel,\r\n layersLabel,\r\n toggleVisibilityLabel,\r\n chooseColorLabel,\r\n friendlyClassName,\r\n onSelect,\r\n onExit,\r\n onDownload,\r\n onToggleLayer,\r\n onChangeLayerColor,\r\n}: Props) {\r\n const [layersExpanded, setLayersExpanded] = React.useState(false)\r\n const activeEntry = entries.find((entry) => entry.id === activeId) ?? null\r\n const isLoading = loading.isLoading\r\n const targetId = activeId ?? pendingId\r\n const showCard = !!activeEntry || (isLoading && !!targetId)\r\n const cardEntry =\r\n activeEntry ??\r\n (targetId ? entries.find((e) => e.id === targetId) : null) ??\r\n null\r\n\r\n // Auto-collapse the layers panel when the active entry changes.\r\n React.useEffect(() => {\r\n setLayersExpanded(false)\r\n }, [activeId])\r\n\r\n return (\r\n <>\r\n {showCard && (\r\n <div className=\"mb-2 p-2 bg-accent rounded-md border border-gray-200\">\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center gap-2 min-w-0\">\r\n {isLoading && (\r\n <LR.Loader2 className=\"h-3 w-3 animate-spin flex-shrink-0 text-muted-foreground\" />\r\n )}\r\n <span className=\"text-xs truncate\">\r\n {isLoading\r\n ? loadingMessage\r\n : `${viewingPrefix}: ${cardEntry?.label ?? ''}`}\r\n </span>\r\n </div>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={onExit}\r\n className=\"h-6 text-xs px-2\"\r\n >\r\n <LR.X className=\"h-3 w-3 mr-1\" />\r\n {exitLabel}\r\n </Button>\r\n </div>\r\n {isLoading && (\r\n <div className=\"mt-2 h-1 w-full bg-gray-200 rounded-full overflow-hidden\">\r\n <div\r\n className=\"h-full bg-primary transition-all duration-300 ease-out\"\r\n style={{ width: `${loadingPercent}%` }}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n {entries.map((entry) => {\r\n const isActive = activeId === entry.id\r\n const isPending =\r\n isLoading && (pendingId === entry.id || activeId === entry.id)\r\n const showLayersPanel =\r\n isActive &&\r\n layersExpanded &&\r\n !!activeLayers &&\r\n activeLayers.length > 0\r\n return (\r\n <div key={entry.id}>\r\n <div\r\n className={`flex items-center justify-between m-2 px-2 py-1 hover:bg-accent/50 rounded-md transition-colors ${\r\n isActive ? 'bg-accent' : ''\r\n }`}\r\n >\r\n <div\r\n title={`${goToLabel}: ${entry.label}`}\r\n className=\"flex items-center gap-2 flex-1 min-w-0 cursor-pointer\"\r\n onClick={() => onSelect(entry)}\r\n >\r\n <span className=\"text-sm text-foreground truncate cursor-pointer\">\r\n {entry.label}\r\n </span>\r\n {isPending ? (\r\n <LR.Loader2 className=\"h-3 w-3 flex-shrink-0 text-muted-foreground animate-spin\" />\r\n ) : isActive ? (\r\n <LR.Eye className=\"h-3 w-3 flex-shrink-0 text-muted-foreground\" />\r\n ) : null}\r\n </div>\r\n {isActive && (\r\n <div className=\"flex items-center gap-1\">\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"h-6 w-6 p-0\"\r\n onClick={(event) => onDownload(entry, event)}\r\n title={downloadLabel}\r\n >\r\n <LR.Download className=\"h-3 w-3\" />\r\n </Button>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"h-6 w-6 p-0\"\r\n onClick={(event) => {\r\n event.stopPropagation()\r\n setLayersExpanded((prev) => !prev)\r\n }}\r\n title={layersLabel}\r\n >\r\n {layersExpanded ? (\r\n <LR.ChevronDown className=\"h-3 w-3\" />\r\n ) : (\r\n <LR.ChevronRight className=\"h-3 w-3\" />\r\n )}\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n {showLayersPanel && (\r\n <div className=\"mx-2 mb-2 px-2 py-1 border border-gray-200 rounded-md bg-background/50\">\r\n <div className=\"text-[10px] uppercase tracking-wide text-muted-foreground mb-1 px-1\">\r\n {layersLabel}\r\n </div>\r\n <div className=\"space-y-0.5\">\r\n {activeLayers!.map((layer) => (\r\n <LayerRow\r\n key={layer.className}\r\n layer={layer}\r\n label={friendlyClassName(layer.className)}\r\n toggleTitle={toggleVisibilityLabel}\r\n colorTitle={chooseColorLabel}\r\n onToggle={(visible) =>\r\n onToggleLayer(layer.className, visible)\r\n }\r\n onColor={(color) =>\r\n onChangeLayerColor(layer.className, color)\r\n }\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n )\r\n })}\r\n </>\r\n )\r\n}\r\n\r\ninterface LayerRowProps {\r\n layer: DrawingLayerInfo\r\n label: string\r\n toggleTitle: string\r\n colorTitle: string\r\n onToggle: (visible: boolean) => void\r\n onColor: (color: number) => void\r\n}\r\n\r\nfunction LayerRow({\r\n layer,\r\n label,\r\n toggleTitle,\r\n colorTitle,\r\n onToggle,\r\n onColor,\r\n}: LayerRowProps) {\r\n const hex = `#${layer.color.toString(16).padStart(6, '0')}`\r\n return (\r\n <div className=\"flex items-center gap-2 px-1 py-1 hover:bg-accent/30 rounded-sm\">\r\n <Switch\r\n checked={layer.visible}\r\n onCheckedChange={onToggle}\r\n title={toggleTitle}\r\n className=\"scale-75 origin-left flex-shrink-0\"\r\n />\r\n <label\r\n title={colorTitle}\r\n className=\"relative inline-block h-4 w-4 cursor-pointer rounded-full border border-black flex-shrink-0 overflow-hidden\"\r\n style={{ backgroundColor: hex }}\r\n >\r\n <input\r\n type=\"color\"\r\n value={hex}\r\n onChange={(event) => {\r\n const next = parseInt(event.target.value.replace('#', ''), 16)\r\n if (!Number.isNaN(next)) onColor(next)\r\n }}\r\n className=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\r\n />\r\n </label>\r\n <span className=\"text-xs text-foreground truncate flex-1 min-w-0\">\r\n {label}\r\n </span>\r\n <span className=\"text-[10px] text-muted-foreground flex-shrink-0\">\r\n {layer.itemCount}\r\n </span>\r\n </div>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/ViewSectionList.tsx"],"sourcesContent":["'use client'\r\n\r\n// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as LR from 'lucide-react'\r\nimport * as React from 'react'\r\n\r\nimport { Button } from '../../../../ui/Button'\r\nimport { Switch } from '../../../../ui/Switch'\r\n\r\nimport type { DrawingLayerInfo } from './drawingLayers'\r\nimport type { ViewListEntry, ViewLoadingState } from './viewSection'\r\n\r\ninterface Props {\r\n entries: ViewListEntry[]\r\n activeId: string | null\r\n /** Id the user just clicked but the tool hasn't activated yet. Lets the\r\n * spinner appear on the row immediately, before activeId flips. */\r\n pendingId: string | null\r\n loading: ViewLoadingState\r\n loadingPercent: number\r\n /** Per-IFC-class layers of the active entry, or null if none. Used to\r\n * render the expandable layers panel below the active row. */\r\n activeLayers: DrawingLayerInfo[] | null\r\n /** Translated message shown next to the spinner while loading. */\r\n loadingMessage: string\r\n /** Translated \"Viewing\" prefix shown before the entry label when active. */\r\n viewingPrefix: string\r\n /** Translated label of the Exit button. */\r\n exitLabel: string\r\n /** Translated tooltip for \"Go to …\". */\r\n goToLabel: string\r\n /** Translated tooltip for the download button. */\r\n downloadLabel: string\r\n /** Translated tooltip for the layers expand/collapse button. */\r\n layersLabel: string\r\n /** Translated tooltip for layer visibility toggle. */\r\n toggleVisibilityLabel: string\r\n /** Translated tooltip for the color picker. */\r\n chooseColorLabel: string\r\n /** Maps an IFC class name to a friendly translated label\r\n * (e.g. \"IFCWALL\" → \"Wall\"). */\r\n friendlyClassName: (className: string) => string\r\n onSelect: (entry: ViewListEntry) => void\r\n onExit: () => void\r\n onDownload: (entry: ViewListEntry, event: React.MouseEvent) => void\r\n onToggleLayer: (className: string, visible: boolean) => void\r\n onChangeLayerColor: (className: string, color: number) => void\r\n}\r\n\r\n/** Active-card + row list shared by every \"view\" sidebar section\r\n * (floorplans, elevations, …). Localized strings come from the parent —\r\n * this component is i18n-agnostic. */\r\nexport function ViewSectionList({\r\n entries,\r\n activeId,\r\n pendingId,\r\n loading,\r\n loadingPercent,\r\n activeLayers,\r\n loadingMessage,\r\n viewingPrefix,\r\n exitLabel,\r\n goToLabel,\r\n downloadLabel,\r\n layersLabel,\r\n toggleVisibilityLabel,\r\n chooseColorLabel,\r\n friendlyClassName,\r\n onSelect,\r\n onExit,\r\n onDownload,\r\n onToggleLayer,\r\n onChangeLayerColor,\r\n}: Props) {\r\n const [layersExpanded, setLayersExpanded] = React.useState(false)\r\n const activeEntry = entries.find((entry) => entry.id === activeId) ?? null\r\n const isLoading = loading.isLoading\r\n const targetId = activeId ?? pendingId\r\n const showCard = !!activeEntry || (isLoading && !!targetId)\r\n const cardEntry =\r\n activeEntry ??\r\n (targetId ? entries.find((e) => e.id === targetId) : null) ??\r\n null\r\n\r\n // Auto-collapse the layers panel when the active entry changes.\r\n React.useEffect(() => {\r\n setLayersExpanded(false)\r\n }, [activeId])\r\n\r\n return (\r\n <>\r\n {showCard && (\r\n <div className=\"mb-2 p-2 bg-accent rounded-md border border-gray-200\">\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center gap-2 min-w-0\">\r\n {isLoading && (\r\n <LR.Loader2 className=\"h-3 w-3 animate-spin flex-shrink-0 text-muted-foreground\" />\r\n )}\r\n <span className=\"text-xs truncate\">\r\n {isLoading\r\n ? loadingMessage\r\n : `${viewingPrefix}: ${cardEntry?.label ?? ''}`}\r\n </span>\r\n </div>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={onExit}\r\n className=\"h-6 text-xs px-2\"\r\n >\r\n <LR.X className=\"h-3 w-3 mr-1\" />\r\n {exitLabel}\r\n </Button>\r\n </div>\r\n {isLoading && (\r\n <div className=\"mt-2 h-1 w-full bg-gray-200 rounded-full overflow-hidden\">\r\n <div\r\n className=\"h-full bg-primary transition-all duration-300 ease-out\"\r\n style={{ width: `${loadingPercent}%` }}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n {entries.map((entry) => {\r\n const isActive = activeId === entry.id\r\n const isPending =\r\n isLoading && (pendingId === entry.id || activeId === entry.id)\r\n const showLayersPanel =\r\n isActive &&\r\n layersExpanded &&\r\n !!activeLayers &&\r\n activeLayers.length > 0\r\n return (\r\n <div key={entry.id}>\r\n <div\r\n className={`flex items-center justify-between m-2 px-2 py-1 hover:bg-accent/50 rounded-md transition-colors ${\r\n isActive ? 'bg-accent' : ''\r\n }`}\r\n >\r\n <div\r\n title={`${goToLabel}: ${entry.label}`}\r\n className=\"flex items-center gap-2 flex-1 min-w-0 cursor-pointer\"\r\n onClick={() => onSelect(entry)}\r\n >\r\n <span className=\"text-sm text-foreground truncate cursor-pointer\">\r\n {entry.label}\r\n </span>\r\n {isPending ? (\r\n <LR.Loader2 className=\"h-3 w-3 flex-shrink-0 text-muted-foreground animate-spin\" />\r\n ) : isActive ? (\r\n <LR.Eye className=\"h-3 w-3 flex-shrink-0 text-muted-foreground\" />\r\n ) : null}\r\n </div>\r\n {isActive && (\r\n <div className=\"flex items-center gap-1\">\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"h-6 w-6 p-0\"\r\n onClick={(event) => onDownload(entry, event)}\r\n title={downloadLabel}\r\n >\r\n <LR.Download className=\"h-3 w-3\" />\r\n </Button>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"h-6 w-6 p-0\"\r\n onClick={(event) => {\r\n event.stopPropagation()\r\n setLayersExpanded((prev) => !prev)\r\n }}\r\n title={layersLabel}\r\n >\r\n {layersExpanded ? (\r\n <LR.ChevronDown className=\"h-3 w-3\" />\r\n ) : (\r\n <LR.ChevronRight className=\"h-3 w-3\" />\r\n )}\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n {showLayersPanel && (\r\n <div className=\"mx-2 mb-2 px-2 py-1 border border-gray-200 rounded-md bg-background/50\">\r\n <div className=\"text-[10px] uppercase tracking-wide text-muted-foreground mb-1 px-1\">\r\n {layersLabel}\r\n </div>\r\n <div className=\"space-y-0.5\">\r\n {activeLayers!.map((layer) => (\r\n <LayerRow\r\n key={layer.className}\r\n layer={layer}\r\n label={friendlyClassName(layer.className)}\r\n toggleTitle={toggleVisibilityLabel}\r\n colorTitle={chooseColorLabel}\r\n onToggle={(visible) =>\r\n onToggleLayer(layer.className, visible)\r\n }\r\n onColor={(color) =>\r\n onChangeLayerColor(layer.className, color)\r\n }\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n )\r\n })}\r\n </>\r\n )\r\n}\r\n\r\ninterface LayerRowProps {\r\n layer: DrawingLayerInfo\r\n label: string\r\n toggleTitle: string\r\n colorTitle: string\r\n onToggle: (visible: boolean) => void\r\n onColor: (color: number) => void\r\n}\r\n\r\nfunction LayerRow({\r\n layer,\r\n label,\r\n toggleTitle,\r\n colorTitle,\r\n onToggle,\r\n onColor,\r\n}: LayerRowProps) {\r\n const hex = `#${layer.color.toString(16).padStart(6, '0')}`\r\n return (\r\n <div className=\"flex items-center gap-2 px-1 py-1 hover:bg-accent/30 rounded-sm\">\r\n <Switch\r\n checked={layer.visible}\r\n onCheckedChange={onToggle}\r\n title={toggleTitle}\r\n className=\"scale-75 origin-left flex-shrink-0\"\r\n />\r\n <label\r\n title={colorTitle}\r\n className=\"relative inline-block h-4 w-4 cursor-pointer rounded-full border border-black flex-shrink-0 overflow-hidden\"\r\n style={{ backgroundColor: hex }}\r\n >\r\n <input\r\n type=\"color\"\r\n value={hex}\r\n onChange={(event) => {\r\n const next = parseInt(event.target.value.replace('#', ''), 16)\r\n if (!Number.isNaN(next)) onColor(next)\r\n }}\r\n className=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\r\n />\r\n </label>\r\n <span className=\"text-xs text-foreground truncate flex-1 min-w-0\">\r\n {label}\r\n </span>\r\n <span className=\"text-[10px] text-muted-foreground flex-shrink-0\">\r\n {layer.itemCount}\r\n </span>\r\n </div>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as OBC from '@thatopen/components';
|
|
2
2
|
import * as THREE from 'three';
|
|
3
|
-
import { DrawingLayerInfo } from './drawingLayers';
|
|
3
|
+
import type { DrawingLayerInfo } from './drawingLayers';
|
|
4
4
|
export declare const FONT_URL = "https://thatopen.github.io/engine_components/resources/fonts/PlusJakartaSans-Medium.ttf";
|
|
5
5
|
export declare const VISIBLE_LAYER = "Visible";
|
|
6
6
|
export declare const HIDDEN_LAYER = "Hidden";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawingProjection.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/lib/drawingProjection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,GAAG,MAAM,sBAAsB,CAAA;AAE3C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"drawingProjection.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/lib/drawingProjection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/drawingProjection.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 * as OBF from '@thatopen/components-front'\r\nimport * as THREE from 'three'\r\nimport { CurrentWorld } from '../CurrentWorld'\r\nimport {\r\n defaultLayerColor,\r\n DrawingLayerInfo,\r\n sortClassesByPriority,\r\n} from './drawingLayers'\r\n\r\nexport const FONT_URL =\r\n 'https://thatopen.github.io/engine_components/resources/fonts/PlusJakartaSans-Medium.ttf'\r\n\r\nexport const VISIBLE_LAYER = 'Visible'\r\nexport const HIDDEN_LAYER = 'Hidden'\r\nexport const ANNOTATIONS_LAYER = 'Annotations'\r\n\r\nexport interface DrawingViewportConfig {\r\n left: number\r\n right: number\r\n top: number\r\n bottom: number\r\n scale?: number\r\n name?: string\r\n}\r\n\r\nexport interface DrawingConfig {\r\n /** Direction the drawing's \"camera\" looks. Top-down floorplan: (0,-1,0).\r\n * North elevation: (0,0,-1). Etc. */\r\n orientation: THREE.Vector3\r\n /** World position of the drawing plane. */\r\n position: THREE.Vector3\r\n /** Depth captured from the plane along the orientation. */\r\n far: number\r\n viewport: DrawingViewportConfig\r\n}\r\n\r\n/**\r\n * Lazy, idempotent setup of `OBF.DrawingEditor` (font + source world).\r\n * Call before any drawing-projection work.\r\n */\r\nexport class DrawingEditorReady {\r\n private _fontLoaded = false\r\n private _editorSourceSet = false\r\n\r\n constructor(private components: OBC.Components) {}\r\n\r\n async ensure() {\r\n const editor = this.components.get(OBF.DrawingEditor)\r\n\r\n if (!this._fontLoaded) {\r\n try {\r\n await editor.fonts.load(FONT_URL)\r\n } catch (error) {\r\n console.warn('[drawingProjection] Font load failed:', error)\r\n }\r\n this._fontLoaded = true\r\n }\r\n\r\n if (!this._editorSourceSet) {\r\n const sourceWorld = this.components.get(CurrentWorld).world\r\n if (sourceWorld) {\r\n editor.setSource(sourceWorld)\r\n this._editorSourceSet = true\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** Create a new TechnicalDrawing pre-configured with the standard\r\n * visible/hidden/annotations layers + viewport. Caller still needs to\r\n * add projection items (`addProjectionFromItems`). */\r\nexport function createDrawing(\r\n components: OBC.Components,\r\n config: DrawingConfig,\r\n): OBC.TechnicalDrawing | null {\r\n const sourceWorld = components.get(CurrentWorld).world\r\n if (!sourceWorld) return null\r\n\r\n const techDrawings = components.get(OBC.TechnicalDrawings)\r\n const drawing = techDrawings.create(sourceWorld)\r\n drawing.orientTo(config.orientation.clone())\r\n drawing.three.position.copy(config.position)\r\n drawing.three.visible = false\r\n drawing.far = config.far\r\n\r\n drawing.layers.create(VISIBLE_LAYER, {\r\n material: new THREE.LineBasicMaterial({ color: 0x000000 }),\r\n })\r\n drawing.layers.create(HIDDEN_LAYER, {\r\n material: new THREE.LineDashedMaterial({\r\n color: 0x888888,\r\n dashSize: 0.2,\r\n gapSize: 0.1,\r\n }),\r\n visible: false,\r\n } as any)\r\n drawing.layers.create(ANNOTATIONS_LAYER, {\r\n material: new THREE.LineBasicMaterial({ color: 0x000000 }),\r\n })\r\n drawing.activeLayer = ANNOTATIONS_LAYER\r\n\r\n drawing.viewports.create({\r\n left: config.viewport.left,\r\n right: config.viewport.right,\r\n top: config.viewport.top,\r\n bottom: config.viewport.bottom,\r\n scale: config.viewport.scale ?? 100,\r\n name: config.viewport.name ?? 'Drawing',\r\n })\r\n\r\n return drawing\r\n}\r\n\r\n/** Force ProjectionGenerator off the WebGPU path (it silently returns 0\r\n * edges when WebGPU is unavailable in the browser, which @thatopen\r\n * components 3.4 hits). Idempotent. */\r\nexport function disableProjectorWebGPU(components: OBC.Components) {\r\n const projector = components.get(OBC.EdgeProjector)\r\n ;(projector as any).generator.useWebGPU = false\r\n}\r\n\r\n/** Patch a model's `getItemsGeometry` to give every entry a unique\r\n * representationId. EdgeProjector at index.mjs:11228 uses\r\n * `!geomData.representationId` to validate, so id=0 is incorrectly\r\n * skipped — and the fragments worker for our models returns 0 for every\r\n * entry. Idempotent per model via a flag on the model itself. */\r\nexport function patchModelGeometryRepresentationIds(model: any) {\r\n if (model._floorplanGeometryPatched) return\r\n const original = model.getItemsGeometry.bind(model)\r\n let counter = 1\r\n model.getItemsGeometry = async (ids: number[]) => {\r\n const data = await original(ids)\r\n if (data && typeof data === 'object') {\r\n const arrays = Array.isArray(data) ? data : Object.values(data)\r\n for (const arr of arrays) {\r\n if (!Array.isArray(arr)) continue\r\n for (const g of arr) {\r\n if (\r\n g &&\r\n (g.representationId === 0 ||\r\n g.representationId == null ||\r\n g.representationId === '')\r\n ) {\r\n g.representationId = `cdt-rep-${counter++}`\r\n }\r\n }\r\n }\r\n }\r\n return data\r\n }\r\n model._floorplanGeometryPatched = true\r\n}\r\n\r\n/** Add the projection lines for the given item ids to a drawing. Lays\r\n * them into the standard visible/hidden layers. */\r\nexport async function addItemsProjection(\r\n drawing: OBC.TechnicalDrawing,\r\n modelId: string,\r\n itemIds: number[],\r\n): Promise<void> {\r\n if (itemIds.length === 0) return\r\n const modelIdMap: OBC.ModelIdMap = { [modelId]: new Set(itemIds) }\r\n await drawing.addProjectionFromItems(modelIdMap, {\r\n layers: { visible: VISIBLE_LAYER, hidden: HIDDEN_LAYER },\r\n })\r\n}\r\n\r\n/**\r\n * Project items grouped by IFC class into per-class drawing layers. Each\r\n * class gets its own visible layer with a default color (cut classes black,\r\n * everything else mid-gray); the hidden side of every class shares the\r\n * standard `HIDDEN_LAYER`.\r\n *\r\n * Returns metadata used by the sidebar UI (visibility toggles + color\r\n * pickers) and the future DXF export. Skipping classes whose projection\r\n * fails — one broken class shouldn't strand the rest of the drawing.\r\n */\r\nexport async function addItemsProjectionByClass(\r\n drawing: OBC.TechnicalDrawing,\r\n modelId: string,\r\n itemIdsByClass: Map<string, number[]>,\r\n onClassDone?: (className: string) => void,\r\n): Promise<DrawingLayerInfo[]> {\r\n const layers: DrawingLayerInfo[] = []\r\n for (const [className, ids] of itemIdsByClass) {\r\n if (ids.length === 0) continue\r\n const color = defaultLayerColor(className)\r\n if (!drawing.layers.has(className)) {\r\n drawing.layers.create(className, {\r\n material: new THREE.LineBasicMaterial({ color }),\r\n })\r\n }\r\n const modelIdMap: OBC.ModelIdMap = { [modelId]: new Set(ids) }\r\n try {\r\n await drawing.addProjectionFromItems(modelIdMap, {\r\n layers: { visible: className, hidden: HIDDEN_LAYER },\r\n })\r\n } catch (error) {\r\n console.warn(\r\n `[drawingProjection] projection for ${className} failed:`,\r\n error,\r\n )\r\n continue\r\n }\r\n layers.push({\r\n className,\r\n layerName: className,\r\n visible: true,\r\n color,\r\n itemCount: ids.length,\r\n })\r\n onClassDone?.(className)\r\n }\r\n return layers\r\n}\r\n\r\n/**\r\n * Group a model's geometric item ids by IFC class. Optional `idFilter`\r\n * narrows the result to a specific subset (e.g. items in a single storey).\r\n */\r\nexport async function getItemIdsByClass(\r\n model: any,\r\n idFilter?: Set<number>,\r\n): Promise<Map<string, number[]>> {\r\n const all = (await model.getItemsOfCategories([/^IFC/])) as Record<\r\n string,\r\n number[]\r\n >\r\n const result = new Map<string, number[]>()\r\n for (const [className, ids] of Object.entries(all)) {\r\n const filtered = idFilter ? ids.filter((id) => idFilter.has(id)) : ids\r\n if (filtered.length > 0) result.set(className, filtered)\r\n }\r\n // Walls, columns, slabs, curtain-walls render first so they appear early\r\n // during progressive projection; everything else follows.\r\n return sortClassesByPriority(result)\r\n}\r\n\r\n/**\r\n * Project items into per-IFC-class drawing layers using a SINGLE\r\n * EdgeProjector pass. The visibility culler then sees the union of all\r\n * meshes and classifies each edge against the full scene — so a wall in\r\n * front of a chair correctly hides the chair's edges, even though they\r\n * end up on different layers.\r\n *\r\n * Use this for elevation drawings, where the entire building depth is\r\n * visible. {@link addItemsProjectionByClass} stays appropriate for\r\n * floorplans, where the section clip already limits depth and the per-\r\n * class path is faster.\r\n *\r\n * Hidden edges are intentionally discarded — the elevation should only\r\n * show the lines of objects immediately visible to the camera.\r\n */\r\nexport async function addItemsProjectionByClassOccluded(\r\n drawing: OBC.TechnicalDrawing,\r\n components: OBC.Components,\r\n modelId: string,\r\n itemIdsByClass: Map<string, number[]>,\r\n): Promise<DrawingLayerInfo[]> {\r\n const world = components.get(CurrentWorld).world\r\n if (!world) return []\r\n\r\n // Build flat id set + reverse map (localId → className) so we can bin the\r\n // resulting line segments by their source class.\r\n const allIds = new Set<number>()\r\n const idToClass = new Map<number, string>()\r\n for (const [className, ids] of itemIdsByClass) {\r\n for (const id of ids) {\r\n allIds.add(id)\r\n idToClass.set(id, className)\r\n }\r\n }\r\n if (allIds.size === 0) return []\r\n\r\n const projector = components.get(OBC.EdgeProjector)\r\n ;(projector as any).generator.useWebGPU = false\r\n\r\n // Mirror the projection-direction + near/far plane setup that\r\n // `TechnicalDrawing.addProjectionFromItems` uses internally — see\r\n // node_modules/@thatopen/components/dist/index.mjs::addProjectionFromItems.\r\n const savedDir = projector.projectionDirection.clone()\r\n const savedNear = projector.nearPlane\r\n const savedFar = projector.farPlane\r\n let result: OBC.EdgeProjectionResult\r\n try {\r\n drawing.three.updateWorldMatrix(true, false)\r\n const projDir = new THREE.Vector3(0, -1, 0)\r\n .transformDirection(drawing.three.matrixWorld)\r\n .normalize()\r\n projector.projectionDirection.copy(projDir)\r\n const rotMat = new THREE.Matrix4().makeRotationFromQuaternion(\r\n new THREE.Quaternion().setFromUnitVectors(\r\n projDir,\r\n new THREE.Vector3(0, -1, 0),\r\n ),\r\n )\r\n const planeY = new THREE.Vector3()\r\n .setFromMatrixPosition(drawing.three.matrixWorld)\r\n .applyMatrix4(rotMat).y\r\n projector.farPlane = planeY\r\n projector.nearPlane = planeY - drawing.far\r\n\r\n const modelIdMap: OBC.ModelIdMap = { [modelId]: allIds }\r\n result = await projector.get(modelIdMap, world)\r\n } finally {\r\n projector.projectionDirection.copy(savedDir)\r\n projector.nearPlane = savedNear\r\n projector.farPlane = savedFar\r\n }\r\n\r\n // Pre-create empty layers so the panel UI lists every class even if its\r\n // edges all ended up occluded (count = 0 for hidden classes).\r\n for (const className of itemIdsByClass.keys()) {\r\n if (!drawing.layers.has(className)) {\r\n drawing.layers.create(className, {\r\n material: new THREE.LineBasicMaterial({\r\n color: defaultLayerColor(className),\r\n }),\r\n })\r\n }\r\n }\r\n\r\n return splitVisibleByClass(drawing, result, idToClass, itemIdsByClass)\r\n}\r\n\r\n/** Walk the per-vertex `group` attribute of `result.visible`, look up the\r\n * IFC class of the source item, and emit one `LineSegments` per class\r\n * (transformed into drawing-local space and assigned to its layer). */\r\nfunction splitVisibleByClass(\r\n drawing: OBC.TechnicalDrawing,\r\n result: OBC.EdgeProjectionResult,\r\n idToClass: Map<number, string>,\r\n itemIdsByClass: Map<string, number[]>,\r\n): DrawingLayerInfo[] {\r\n const visibleGeom = result.visible\r\n const positionsAttr = visibleGeom.getAttribute('position') as\r\n | THREE.BufferAttribute\r\n | undefined\r\n const groupAttr = visibleGeom.getAttribute('group') as\r\n | THREE.BufferAttribute\r\n | undefined\r\n if (!positionsAttr) return []\r\n\r\n const buf = new Map<string, number[]>()\r\n const items = new Map<string, Set<number>>()\r\n for (const className of itemIdsByClass.keys()) {\r\n buf.set(className, [])\r\n items.set(className, new Set())\r\n }\r\n\r\n if (!groupAttr) return [] // No group info — can't bin.\r\n\r\n const positionArr = positionsAttr.array as Float32Array\r\n const groupArr = groupAttr.array as ArrayLike<number>\r\n const vertexCount = positionsAttr.count\r\n\r\n // Each line segment = 2 consecutive vertices that share a group index\r\n // (see ProjectedEdgeCollector::toLineGeometry in OBC's bundle).\r\n for (let i = 0; i < vertexCount; i += 2) {\r\n const groupIndex = Number(groupArr[i])\r\n const groupInfo = result.groups[groupIndex]\r\n if (!groupInfo) continue\r\n const className = idToClass.get(groupInfo.localId)\r\n if (!className) continue\r\n const verts = buf.get(className)\r\n if (!verts) continue\r\n const start = i * 3\r\n verts.push(\r\n positionArr[start],\r\n positionArr[start + 1],\r\n positionArr[start + 2],\r\n positionArr[start + 3],\r\n positionArr[start + 4],\r\n positionArr[start + 5],\r\n )\r\n items.get(className)!.add(groupInfo.localId)\r\n }\r\n\r\n const layers: DrawingLayerInfo[] = []\r\n for (const [className, verts] of buf) {\r\n if (verts.length === 0) continue\r\n const geom = new THREE.BufferGeometry()\r\n geom.setAttribute(\r\n 'position',\r\n new THREE.Float32BufferAttribute(new Float32Array(verts), 3),\r\n )\r\n // Wrap in LineSegments at world origin so toDrawingSpace transforms the\r\n // (already world-space) positions into the drawing's local XZ plane.\r\n const sourceLine = new THREE.LineSegments(geom)\r\n const projected = OBC.TechnicalDrawing.toDrawingSpace(sourceLine, drawing)\r\n drawing.addProjectionLines(projected, className)\r\n layers.push({\r\n className,\r\n layerName: className,\r\n visible: true,\r\n color: defaultLayerColor(className),\r\n itemCount: items.get(className)!.size,\r\n })\r\n }\r\n return layers\r\n}\r\n\r\nexport function disposeDrawing(\r\n components: OBC.Components,\r\n drawing: OBC.TechnicalDrawing | null,\r\n) {\r\n if (!drawing) return\r\n try {\r\n const techDrawings = components.get(OBC.TechnicalDrawings)\r\n techDrawings.list.delete(drawing.uuid)\r\n } catch {\r\n // best-effort\r\n }\r\n}\r\n\r\nexport const DOOR_SWING_LAYER = 'Door Swings'\r\nconst DOOR_SWING_COLOR = 0x666666\r\nconst DOOR_SWING_SEGMENTS = 16\r\nconst DOOR_STOREY_Y_TOLERANCE = 0.6\r\n\r\n/**\r\n * Add a quarter-circle swing arc for every IFCDOOR in `idFilter` whose\r\n * bbox sits at the active storey's elevation. Returns a `DrawingLayerInfo`\r\n * for the new `Door Swings` layer (or null if no doors qualified), so the\r\n * caller can append it to the sidebar's toggleable layer list.\r\n *\r\n * The arc radius matches the door's widest horizontal dimension;\r\n * orientation is inferred from the bbox — the larger horizontal extent\r\n * is the door width direction, the smaller is wall thickness.\r\n *\r\n * Best-effort: missing bbox or implausibly-sized doors are skipped silently.\r\n */\r\nexport async function addDoorSwingsToDrawing(\r\n drawing: OBC.TechnicalDrawing,\r\n model: any,\r\n idFilter: Set<number> | null,\r\n storeyY: number,\r\n): Promise<DrawingLayerInfo | null> {\r\n const doorMap = (await model.getItemsOfCategories([/IFCDOOR/])) as Record<\r\n string,\r\n number[]\r\n >\r\n let doorIds = Object.values(doorMap).flat() as number[]\r\n if (idFilter) doorIds = doorIds.filter((id) => idFilter.has(id))\r\n if (doorIds.length === 0) return null\r\n\r\n // Fetch boxes (world-space AABB, used for size + Y filter) and geometry\r\n // (per-item transform, used to recover REAL orientation — bboxes can't,\r\n // which is why doors in curved walls or at non-axis-aligned angles get\r\n // mis-oriented swings).\r\n const boxes: THREE.Box3[] = await model.getBoxes(doorIds)\r\n if (!boxes || boxes.length === 0) return null\r\n const geomDataPerDoor = await model.getItemsGeometry(doorIds)\r\n\r\n if (!drawing.layers.has(DOOR_SWING_LAYER)) {\r\n drawing.layers.create(DOOR_SWING_LAYER, {\r\n material: new THREE.LineBasicMaterial({ color: DOOR_SWING_COLOR }),\r\n })\r\n }\r\n\r\n const modelMatrix = model.object?.matrixWorld as THREE.Matrix4 | undefined\r\n const verts: number[] = []\r\n let drawnCount = 0\r\n for (let i = 0; i < boxes.length; i++) {\r\n const box = boxes[i]\r\n if (!box || box.isEmpty()) continue\r\n // `model.getBoxes` already applies `model.object.matrixWorld` internally\r\n // (BoxManager.getAllBoxes in @thatopen/fragments). Don't double-transform.\r\n const worldBox = box\r\n // Storey-Y filter: a door's bottom should sit at the active storey's\r\n // elevation. Filters out doors that leak through from upper storeys.\r\n if (Math.abs(worldBox.min.y - storeyY) > DOOR_STOREY_Y_TOLERANCE) continue\r\n const size = new THREE.Vector3()\r\n worldBox.getSize(size)\r\n // Tighter sanity range — a typical leaf door is 0.7-1.2 m; >2.5 m is\r\n // almost certainly a stacked / double-swing / wall-segment bbox.\r\n const bboxWidth = Math.max(size.x, size.z)\r\n if (bboxWidth < 0.6 || bboxWidth > 2.5) continue\r\n const center = new THREE.Vector3()\r\n worldBox.getCenter(center)\r\n\r\n // Recover the door's actual orientation from its geometry transform.\r\n // `geomData.transform` is the local-to-model matrix; combine with\r\n // `model.object.matrixWorld` (which `getBoxes` already applied to the\r\n // bbox) to get the world-space transform. The first column of that\r\n // matrix is the door's local +X axis in world space — for IFC doors\r\n // that's the width direction along the wall.\r\n const itemMeshes = geomDataPerDoor?.[i]\r\n const localTransform: THREE.Matrix4 | undefined = itemMeshes?.[0]?.transform\r\n let widthDir: THREE.Vector3\r\n let swingDir: THREE.Vector3\r\n if (localTransform) {\r\n const worldTransform = new THREE.Matrix4()\r\n if (modelMatrix) worldTransform.copy(modelMatrix)\r\n worldTransform.multiply(localTransform)\r\n // Local +X in world space, projected to the horizontal plane.\r\n widthDir = new THREE.Vector3()\r\n .setFromMatrixColumn(worldTransform, 0)\r\n .setY(0)\r\n if (widthDir.lengthSq() < 1e-6) {\r\n // Degenerate — door's local X points straight up. Fall back to bbox.\r\n widthDir = size.x >= size.z\r\n ? new THREE.Vector3(1, 0, 0)\r\n : new THREE.Vector3(0, 0, 1)\r\n } else {\r\n widthDir.normalize()\r\n }\r\n // Swing direction = 90° rotation of width in the horizontal plane.\r\n swingDir = new THREE.Vector3(-widthDir.z, 0, widthDir.x)\r\n } else {\r\n // No transform available — fall back to the original bbox heuristic\r\n // (correct for axis-aligned doors, wrong for angled ones).\r\n const widthAlongX = size.x >= size.z\r\n widthDir = widthAlongX\r\n ? new THREE.Vector3(1, 0, 0)\r\n : new THREE.Vector3(0, 0, 1)\r\n swingDir = widthAlongX\r\n ? new THREE.Vector3(0, 0, 1)\r\n : new THREE.Vector3(1, 0, 0)\r\n }\r\n\r\n // Door width = bbox extent projected onto widthDir. Use abs since the\r\n // signed projection of (size.x, size.z) along widthDir can be negative.\r\n const width = Math.abs(size.x * widthDir.x) + Math.abs(size.z * widthDir.z)\r\n if (width < 0.6 || width > 2.5) continue\r\n\r\n // Hinge sits at one end of the door. Step backward along widthDir by\r\n // half the width from the center.\r\n const hinge = new THREE.Vector3()\r\n .copy(center)\r\n .addScaledVector(widthDir, -width / 2)\r\n\r\n // Build quarter-arc from angle 0 (closed-door end) → π/2 (perpendicular).\r\n // `prev` MUST reset per door so segments don't leak between doors.\r\n let prev: THREE.Vector3 | null = null\r\n for (let s = 0; s <= DOOR_SWING_SEGMENTS; s++) {\r\n const t = (s / DOOR_SWING_SEGMENTS) * (Math.PI / 2)\r\n const point = new THREE.Vector3()\r\n .copy(hinge)\r\n .addScaledVector(widthDir, Math.cos(t) * width)\r\n .addScaledVector(swingDir, Math.sin(t) * width)\r\n if (prev) {\r\n verts.push(prev.x, prev.y, prev.z, point.x, point.y, point.z)\r\n }\r\n prev = point\r\n }\r\n // Straight edge from hinge to swing endpoint (the open-door line).\r\n const open = new THREE.Vector3()\r\n .copy(hinge)\r\n .addScaledVector(swingDir, width)\r\n verts.push(hinge.x, hinge.y, hinge.z, open.x, open.y, open.z)\r\n drawnCount++\r\n }\r\n\r\n if (verts.length === 0) return null\r\n\r\n const geometry = new THREE.BufferGeometry()\r\n geometry.setAttribute(\r\n 'position',\r\n new THREE.Float32BufferAttribute(new Float32Array(verts), 3),\r\n )\r\n const sourceLine = new THREE.LineSegments(geometry)\r\n const projected = OBC.TechnicalDrawing.toDrawingSpace(sourceLine, drawing)\r\n drawing.addProjectionLines(projected, DOOR_SWING_LAYER)\r\n return {\r\n className: DOOR_SWING_LAYER,\r\n layerName: DOOR_SWING_LAYER,\r\n visible: true,\r\n color: DOOR_SWING_COLOR,\r\n itemCount: drawnCount,\r\n displayKey: 'DrawingLayers.doorSwings',\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/drawingProjection.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 * as OBF from '@thatopen/components-front'\r\nimport * as THREE from 'three'\r\n\r\nimport { CurrentWorld } from '../CurrentWorld'\r\n\r\nimport {\r\n defaultLayerColor,\r\n sortClassesByPriority,\r\n} from './drawingLayers'\r\n\r\nimport type {\r\n DrawingLayerInfo} from './drawingLayers';\r\n\r\nexport const FONT_URL =\r\n 'https://thatopen.github.io/engine_components/resources/fonts/PlusJakartaSans-Medium.ttf'\r\n\r\nexport const VISIBLE_LAYER = 'Visible'\r\nexport const HIDDEN_LAYER = 'Hidden'\r\nexport const ANNOTATIONS_LAYER = 'Annotations'\r\n\r\nexport interface DrawingViewportConfig {\r\n left: number\r\n right: number\r\n top: number\r\n bottom: number\r\n scale?: number\r\n name?: string\r\n}\r\n\r\nexport interface DrawingConfig {\r\n /** Direction the drawing's \"camera\" looks. Top-down floorplan: (0,-1,0).\r\n * North elevation: (0,0,-1). Etc. */\r\n orientation: THREE.Vector3\r\n /** World position of the drawing plane. */\r\n position: THREE.Vector3\r\n /** Depth captured from the plane along the orientation. */\r\n far: number\r\n viewport: DrawingViewportConfig\r\n}\r\n\r\n/**\r\n * Lazy, idempotent setup of `OBF.DrawingEditor` (font + source world).\r\n * Call before any drawing-projection work.\r\n */\r\nexport class DrawingEditorReady {\r\n private _fontLoaded = false\r\n private _editorSourceSet = false\r\n\r\n constructor(private components: OBC.Components) {}\r\n\r\n async ensure() {\r\n const editor = this.components.get(OBF.DrawingEditor)\r\n\r\n if (!this._fontLoaded) {\r\n try {\r\n await editor.fonts.load(FONT_URL)\r\n } catch (error) {\r\n console.warn('[drawingProjection] Font load failed:', error)\r\n }\r\n this._fontLoaded = true\r\n }\r\n\r\n if (!this._editorSourceSet) {\r\n const sourceWorld = this.components.get(CurrentWorld).world\r\n if (sourceWorld) {\r\n editor.setSource(sourceWorld)\r\n this._editorSourceSet = true\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** Create a new TechnicalDrawing pre-configured with the standard\r\n * visible/hidden/annotations layers + viewport. Caller still needs to\r\n * add projection items (`addProjectionFromItems`). */\r\nexport function createDrawing(\r\n components: OBC.Components,\r\n config: DrawingConfig,\r\n): OBC.TechnicalDrawing | null {\r\n const sourceWorld = components.get(CurrentWorld).world\r\n if (!sourceWorld) return null\r\n\r\n const techDrawings = components.get(OBC.TechnicalDrawings)\r\n const drawing = techDrawings.create(sourceWorld)\r\n drawing.orientTo(config.orientation.clone())\r\n drawing.three.position.copy(config.position)\r\n drawing.three.visible = false\r\n drawing.far = config.far\r\n\r\n drawing.layers.create(VISIBLE_LAYER, {\r\n material: new THREE.LineBasicMaterial({ color: 0x000000 }),\r\n })\r\n drawing.layers.create(HIDDEN_LAYER, {\r\n material: new THREE.LineDashedMaterial({\r\n color: 0x888888,\r\n dashSize: 0.2,\r\n gapSize: 0.1,\r\n }),\r\n visible: false,\r\n } as any)\r\n drawing.layers.create(ANNOTATIONS_LAYER, {\r\n material: new THREE.LineBasicMaterial({ color: 0x000000 }),\r\n })\r\n drawing.activeLayer = ANNOTATIONS_LAYER\r\n\r\n drawing.viewports.create({\r\n left: config.viewport.left,\r\n right: config.viewport.right,\r\n top: config.viewport.top,\r\n bottom: config.viewport.bottom,\r\n scale: config.viewport.scale ?? 100,\r\n name: config.viewport.name ?? 'Drawing',\r\n })\r\n\r\n return drawing\r\n}\r\n\r\n/** Force ProjectionGenerator off the WebGPU path (it silently returns 0\r\n * edges when WebGPU is unavailable in the browser, which @thatopen\r\n * components 3.4 hits). Idempotent. */\r\nexport function disableProjectorWebGPU(components: OBC.Components) {\r\n const projector = components.get(OBC.EdgeProjector)\r\n ;(projector as any).generator.useWebGPU = false\r\n}\r\n\r\n/** Patch a model's `getItemsGeometry` to give every entry a unique\r\n * representationId. EdgeProjector at index.mjs:11228 uses\r\n * `!geomData.representationId` to validate, so id=0 is incorrectly\r\n * skipped — and the fragments worker for our models returns 0 for every\r\n * entry. Idempotent per model via a flag on the model itself. */\r\nexport function patchModelGeometryRepresentationIds(model: any) {\r\n if (model._floorplanGeometryPatched) return\r\n const original = model.getItemsGeometry.bind(model)\r\n let counter = 1\r\n model.getItemsGeometry = async (ids: number[]) => {\r\n const data = await original(ids)\r\n if (data && typeof data === 'object') {\r\n const arrays = Array.isArray(data) ? data : Object.values(data)\r\n for (const arr of arrays) {\r\n if (!Array.isArray(arr)) continue\r\n for (const g of arr) {\r\n if (\r\n g &&\r\n (g.representationId === 0 ||\r\n g.representationId == null ||\r\n g.representationId === '')\r\n ) {\r\n g.representationId = `cdt-rep-${counter++}`\r\n }\r\n }\r\n }\r\n }\r\n return data\r\n }\r\n model._floorplanGeometryPatched = true\r\n}\r\n\r\n/** Add the projection lines for the given item ids to a drawing. Lays\r\n * them into the standard visible/hidden layers. */\r\nexport async function addItemsProjection(\r\n drawing: OBC.TechnicalDrawing,\r\n modelId: string,\r\n itemIds: number[],\r\n): Promise<void> {\r\n if (itemIds.length === 0) return\r\n const modelIdMap: OBC.ModelIdMap = { [modelId]: new Set(itemIds) }\r\n await drawing.addProjectionFromItems(modelIdMap, {\r\n layers: { visible: VISIBLE_LAYER, hidden: HIDDEN_LAYER },\r\n })\r\n}\r\n\r\n/**\r\n * Project items grouped by IFC class into per-class drawing layers. Each\r\n * class gets its own visible layer with a default color (cut classes black,\r\n * everything else mid-gray); the hidden side of every class shares the\r\n * standard `HIDDEN_LAYER`.\r\n *\r\n * Returns metadata used by the sidebar UI (visibility toggles + color\r\n * pickers) and the future DXF export. Skipping classes whose projection\r\n * fails — one broken class shouldn't strand the rest of the drawing.\r\n */\r\nexport async function addItemsProjectionByClass(\r\n drawing: OBC.TechnicalDrawing,\r\n modelId: string,\r\n itemIdsByClass: Map<string, number[]>,\r\n onClassDone?: (className: string) => void,\r\n): Promise<DrawingLayerInfo[]> {\r\n const layers: DrawingLayerInfo[] = []\r\n for (const [className, ids] of itemIdsByClass) {\r\n if (ids.length === 0) continue\r\n const color = defaultLayerColor(className)\r\n if (!drawing.layers.has(className)) {\r\n drawing.layers.create(className, {\r\n material: new THREE.LineBasicMaterial({ color }),\r\n })\r\n }\r\n const modelIdMap: OBC.ModelIdMap = { [modelId]: new Set(ids) }\r\n try {\r\n await drawing.addProjectionFromItems(modelIdMap, {\r\n layers: { visible: className, hidden: HIDDEN_LAYER },\r\n })\r\n } catch (error) {\r\n console.warn(\r\n `[drawingProjection] projection for ${className} failed:`,\r\n error,\r\n )\r\n continue\r\n }\r\n layers.push({\r\n className,\r\n layerName: className,\r\n visible: true,\r\n color,\r\n itemCount: ids.length,\r\n })\r\n onClassDone?.(className)\r\n }\r\n return layers\r\n}\r\n\r\n/**\r\n * Group a model's geometric item ids by IFC class. Optional `idFilter`\r\n * narrows the result to a specific subset (e.g. items in a single storey).\r\n */\r\nexport async function getItemIdsByClass(\r\n model: any,\r\n idFilter?: Set<number>,\r\n): Promise<Map<string, number[]>> {\r\n const all = (await model.getItemsOfCategories([/^IFC/])) as Record<\r\n string,\r\n number[]\r\n >\r\n const result = new Map<string, number[]>()\r\n for (const [className, ids] of Object.entries(all)) {\r\n const filtered = idFilter ? ids.filter((id) => idFilter.has(id)) : ids\r\n if (filtered.length > 0) result.set(className, filtered)\r\n }\r\n // Walls, columns, slabs, curtain-walls render first so they appear early\r\n // during progressive projection; everything else follows.\r\n return sortClassesByPriority(result)\r\n}\r\n\r\n/**\r\n * Project items into per-IFC-class drawing layers using a SINGLE\r\n * EdgeProjector pass. The visibility culler then sees the union of all\r\n * meshes and classifies each edge against the full scene — so a wall in\r\n * front of a chair correctly hides the chair's edges, even though they\r\n * end up on different layers.\r\n *\r\n * Use this for elevation drawings, where the entire building depth is\r\n * visible. {@link addItemsProjectionByClass} stays appropriate for\r\n * floorplans, where the section clip already limits depth and the per-\r\n * class path is faster.\r\n *\r\n * Hidden edges are intentionally discarded — the elevation should only\r\n * show the lines of objects immediately visible to the camera.\r\n */\r\nexport async function addItemsProjectionByClassOccluded(\r\n drawing: OBC.TechnicalDrawing,\r\n components: OBC.Components,\r\n modelId: string,\r\n itemIdsByClass: Map<string, number[]>,\r\n): Promise<DrawingLayerInfo[]> {\r\n const world = components.get(CurrentWorld).world\r\n if (!world) return []\r\n\r\n // Build flat id set + reverse map (localId → className) so we can bin the\r\n // resulting line segments by their source class.\r\n const allIds = new Set<number>()\r\n const idToClass = new Map<number, string>()\r\n for (const [className, ids] of itemIdsByClass) {\r\n for (const id of ids) {\r\n allIds.add(id)\r\n idToClass.set(id, className)\r\n }\r\n }\r\n if (allIds.size === 0) return []\r\n\r\n const projector = components.get(OBC.EdgeProjector)\r\n ;(projector as any).generator.useWebGPU = false\r\n\r\n // Mirror the projection-direction + near/far plane setup that\r\n // `TechnicalDrawing.addProjectionFromItems` uses internally — see\r\n // node_modules/@thatopen/components/dist/index.mjs::addProjectionFromItems.\r\n const savedDir = projector.projectionDirection.clone()\r\n const savedNear = projector.nearPlane\r\n const savedFar = projector.farPlane\r\n let result: OBC.EdgeProjectionResult\r\n try {\r\n drawing.three.updateWorldMatrix(true, false)\r\n const projDir = new THREE.Vector3(0, -1, 0)\r\n .transformDirection(drawing.three.matrixWorld)\r\n .normalize()\r\n projector.projectionDirection.copy(projDir)\r\n const rotMat = new THREE.Matrix4().makeRotationFromQuaternion(\r\n new THREE.Quaternion().setFromUnitVectors(\r\n projDir,\r\n new THREE.Vector3(0, -1, 0),\r\n ),\r\n )\r\n const planeY = new THREE.Vector3()\r\n .setFromMatrixPosition(drawing.three.matrixWorld)\r\n .applyMatrix4(rotMat).y\r\n projector.farPlane = planeY\r\n projector.nearPlane = planeY - drawing.far\r\n\r\n const modelIdMap: OBC.ModelIdMap = { [modelId]: allIds }\r\n result = await projector.get(modelIdMap, world)\r\n } finally {\r\n projector.projectionDirection.copy(savedDir)\r\n projector.nearPlane = savedNear\r\n projector.farPlane = savedFar\r\n }\r\n\r\n // Pre-create empty layers so the panel UI lists every class even if its\r\n // edges all ended up occluded (count = 0 for hidden classes).\r\n for (const className of itemIdsByClass.keys()) {\r\n if (!drawing.layers.has(className)) {\r\n drawing.layers.create(className, {\r\n material: new THREE.LineBasicMaterial({\r\n color: defaultLayerColor(className),\r\n }),\r\n })\r\n }\r\n }\r\n\r\n return splitVisibleByClass(drawing, result, idToClass, itemIdsByClass)\r\n}\r\n\r\n/** Walk the per-vertex `group` attribute of `result.visible`, look up the\r\n * IFC class of the source item, and emit one `LineSegments` per class\r\n * (transformed into drawing-local space and assigned to its layer). */\r\nfunction splitVisibleByClass(\r\n drawing: OBC.TechnicalDrawing,\r\n result: OBC.EdgeProjectionResult,\r\n idToClass: Map<number, string>,\r\n itemIdsByClass: Map<string, number[]>,\r\n): DrawingLayerInfo[] {\r\n const visibleGeom = result.visible\r\n const positionsAttr = visibleGeom.getAttribute('position') as\r\n | THREE.BufferAttribute\r\n | undefined\r\n const groupAttr = visibleGeom.getAttribute('group') as\r\n | THREE.BufferAttribute\r\n | undefined\r\n if (!positionsAttr) return []\r\n\r\n const buf = new Map<string, number[]>()\r\n const items = new Map<string, Set<number>>()\r\n for (const className of itemIdsByClass.keys()) {\r\n buf.set(className, [])\r\n items.set(className, new Set())\r\n }\r\n\r\n if (!groupAttr) return [] // No group info — can't bin.\r\n\r\n const positionArr = positionsAttr.array as Float32Array\r\n const groupArr = groupAttr.array as ArrayLike<number>\r\n const vertexCount = positionsAttr.count\r\n\r\n // Each line segment = 2 consecutive vertices that share a group index\r\n // (see ProjectedEdgeCollector::toLineGeometry in OBC's bundle).\r\n for (let i = 0; i < vertexCount; i += 2) {\r\n const groupIndex = Number(groupArr[i])\r\n const groupInfo = result.groups[groupIndex]\r\n if (!groupInfo) continue\r\n const className = idToClass.get(groupInfo.localId)\r\n if (!className) continue\r\n const verts = buf.get(className)\r\n if (!verts) continue\r\n const start = i * 3\r\n verts.push(\r\n positionArr[start],\r\n positionArr[start + 1],\r\n positionArr[start + 2],\r\n positionArr[start + 3],\r\n positionArr[start + 4],\r\n positionArr[start + 5],\r\n )\r\n items.get(className)!.add(groupInfo.localId)\r\n }\r\n\r\n const layers: DrawingLayerInfo[] = []\r\n for (const [className, verts] of buf) {\r\n if (verts.length === 0) continue\r\n const geom = new THREE.BufferGeometry()\r\n geom.setAttribute(\r\n 'position',\r\n new THREE.Float32BufferAttribute(new Float32Array(verts), 3),\r\n )\r\n // Wrap in LineSegments at world origin so toDrawingSpace transforms the\r\n // (already world-space) positions into the drawing's local XZ plane.\r\n const sourceLine = new THREE.LineSegments(geom)\r\n const projected = OBC.TechnicalDrawing.toDrawingSpace(sourceLine, drawing)\r\n drawing.addProjectionLines(projected, className)\r\n layers.push({\r\n className,\r\n layerName: className,\r\n visible: true,\r\n color: defaultLayerColor(className),\r\n itemCount: items.get(className)!.size,\r\n })\r\n }\r\n return layers\r\n}\r\n\r\nexport function disposeDrawing(\r\n components: OBC.Components,\r\n drawing: OBC.TechnicalDrawing | null,\r\n) {\r\n if (!drawing) return\r\n try {\r\n const techDrawings = components.get(OBC.TechnicalDrawings)\r\n techDrawings.list.delete(drawing.uuid)\r\n } catch {\r\n // best-effort\r\n }\r\n}\r\n\r\nexport const DOOR_SWING_LAYER = 'Door Swings'\r\nconst DOOR_SWING_COLOR = 0x666666\r\nconst DOOR_SWING_SEGMENTS = 16\r\nconst DOOR_STOREY_Y_TOLERANCE = 0.6\r\n\r\n/**\r\n * Add a quarter-circle swing arc for every IFCDOOR in `idFilter` whose\r\n * bbox sits at the active storey's elevation. Returns a `DrawingLayerInfo`\r\n * for the new `Door Swings` layer (or null if no doors qualified), so the\r\n * caller can append it to the sidebar's toggleable layer list.\r\n *\r\n * The arc radius matches the door's widest horizontal dimension;\r\n * orientation is inferred from the bbox — the larger horizontal extent\r\n * is the door width direction, the smaller is wall thickness.\r\n *\r\n * Best-effort: missing bbox or implausibly-sized doors are skipped silently.\r\n */\r\nexport async function addDoorSwingsToDrawing(\r\n drawing: OBC.TechnicalDrawing,\r\n model: any,\r\n idFilter: Set<number> | null,\r\n storeyY: number,\r\n): Promise<DrawingLayerInfo | null> {\r\n const doorMap = (await model.getItemsOfCategories([/IFCDOOR/])) as Record<\r\n string,\r\n number[]\r\n >\r\n let doorIds = Object.values(doorMap).flat() as number[]\r\n if (idFilter) doorIds = doorIds.filter((id) => idFilter.has(id))\r\n if (doorIds.length === 0) return null\r\n\r\n // Fetch boxes (world-space AABB, used for size + Y filter) and geometry\r\n // (per-item transform, used to recover REAL orientation — bboxes can't,\r\n // which is why doors in curved walls or at non-axis-aligned angles get\r\n // mis-oriented swings).\r\n const boxes: THREE.Box3[] = await model.getBoxes(doorIds)\r\n if (!boxes || boxes.length === 0) return null\r\n const geomDataPerDoor = await model.getItemsGeometry(doorIds)\r\n\r\n if (!drawing.layers.has(DOOR_SWING_LAYER)) {\r\n drawing.layers.create(DOOR_SWING_LAYER, {\r\n material: new THREE.LineBasicMaterial({ color: DOOR_SWING_COLOR }),\r\n })\r\n }\r\n\r\n const modelMatrix = model.object?.matrixWorld as THREE.Matrix4 | undefined\r\n const verts: number[] = []\r\n let drawnCount = 0\r\n for (let i = 0; i < boxes.length; i++) {\r\n const box = boxes[i]\r\n if (!box || box.isEmpty()) continue\r\n // `model.getBoxes` already applies `model.object.matrixWorld` internally\r\n // (BoxManager.getAllBoxes in @thatopen/fragments). Don't double-transform.\r\n const worldBox = box\r\n // Storey-Y filter: a door's bottom should sit at the active storey's\r\n // elevation. Filters out doors that leak through from upper storeys.\r\n if (Math.abs(worldBox.min.y - storeyY) > DOOR_STOREY_Y_TOLERANCE) continue\r\n const size = new THREE.Vector3()\r\n worldBox.getSize(size)\r\n // Tighter sanity range — a typical leaf door is 0.7-1.2 m; >2.5 m is\r\n // almost certainly a stacked / double-swing / wall-segment bbox.\r\n const bboxWidth = Math.max(size.x, size.z)\r\n if (bboxWidth < 0.6 || bboxWidth > 2.5) continue\r\n const center = new THREE.Vector3()\r\n worldBox.getCenter(center)\r\n\r\n // Recover the door's actual orientation from its geometry transform.\r\n // `geomData.transform` is the local-to-model matrix; combine with\r\n // `model.object.matrixWorld` (which `getBoxes` already applied to the\r\n // bbox) to get the world-space transform. The first column of that\r\n // matrix is the door's local +X axis in world space — for IFC doors\r\n // that's the width direction along the wall.\r\n const itemMeshes = geomDataPerDoor?.[i]\r\n const localTransform: THREE.Matrix4 | undefined = itemMeshes?.[0]?.transform\r\n let widthDir: THREE.Vector3\r\n let swingDir: THREE.Vector3\r\n if (localTransform) {\r\n const worldTransform = new THREE.Matrix4()\r\n if (modelMatrix) worldTransform.copy(modelMatrix)\r\n worldTransform.multiply(localTransform)\r\n // Local +X in world space, projected to the horizontal plane.\r\n widthDir = new THREE.Vector3()\r\n .setFromMatrixColumn(worldTransform, 0)\r\n .setY(0)\r\n if (widthDir.lengthSq() < 1e-6) {\r\n // Degenerate — door's local X points straight up. Fall back to bbox.\r\n widthDir = size.x >= size.z\r\n ? new THREE.Vector3(1, 0, 0)\r\n : new THREE.Vector3(0, 0, 1)\r\n } else {\r\n widthDir.normalize()\r\n }\r\n // Swing direction = 90° rotation of width in the horizontal plane.\r\n swingDir = new THREE.Vector3(-widthDir.z, 0, widthDir.x)\r\n } else {\r\n // No transform available — fall back to the original bbox heuristic\r\n // (correct for axis-aligned doors, wrong for angled ones).\r\n const widthAlongX = size.x >= size.z\r\n widthDir = widthAlongX\r\n ? new THREE.Vector3(1, 0, 0)\r\n : new THREE.Vector3(0, 0, 1)\r\n swingDir = widthAlongX\r\n ? new THREE.Vector3(0, 0, 1)\r\n : new THREE.Vector3(1, 0, 0)\r\n }\r\n\r\n // Door width = bbox extent projected onto widthDir. Use abs since the\r\n // signed projection of (size.x, size.z) along widthDir can be negative.\r\n const width = Math.abs(size.x * widthDir.x) + Math.abs(size.z * widthDir.z)\r\n if (width < 0.6 || width > 2.5) continue\r\n\r\n // Hinge sits at one end of the door. Step backward along widthDir by\r\n // half the width from the center.\r\n const hinge = new THREE.Vector3()\r\n .copy(center)\r\n .addScaledVector(widthDir, -width / 2)\r\n\r\n // Build quarter-arc from angle 0 (closed-door end) → π/2 (perpendicular).\r\n // `prev` MUST reset per door so segments don't leak between doors.\r\n let prev: THREE.Vector3 | null = null\r\n for (let s = 0; s <= DOOR_SWING_SEGMENTS; s++) {\r\n const t = (s / DOOR_SWING_SEGMENTS) * (Math.PI / 2)\r\n const point = new THREE.Vector3()\r\n .copy(hinge)\r\n .addScaledVector(widthDir, Math.cos(t) * width)\r\n .addScaledVector(swingDir, Math.sin(t) * width)\r\n if (prev) {\r\n verts.push(prev.x, prev.y, prev.z, point.x, point.y, point.z)\r\n }\r\n prev = point\r\n }\r\n // Straight edge from hinge to swing endpoint (the open-door line).\r\n const open = new THREE.Vector3()\r\n .copy(hinge)\r\n .addScaledVector(swingDir, width)\r\n verts.push(hinge.x, hinge.y, hinge.z, open.x, open.y, open.z)\r\n drawnCount++\r\n }\r\n\r\n if (verts.length === 0) return null\r\n\r\n const geometry = new THREE.BufferGeometry()\r\n geometry.setAttribute(\r\n 'position',\r\n new THREE.Float32BufferAttribute(new Float32Array(verts), 3),\r\n )\r\n const sourceLine = new THREE.LineSegments(geometry)\r\n const projected = OBC.TechnicalDrawing.toDrawingSpace(sourceLine, drawing)\r\n drawing.addProjectionLines(projected, DOOR_SWING_LAYER)\r\n return {\r\n className: DOOR_SWING_LAYER,\r\n layerName: DOOR_SWING_LAYER,\r\n visible: true,\r\n color: DOOR_SWING_COLOR,\r\n itemCount: drawnCount,\r\n displayKey: 'DrawingLayers.doorSwings',\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBuildingName.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/lib/useBuildingName.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useBuildingName.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/lib/useBuildingName.ts"],"names":[],"mappings":"AAOA;;;;;;;;;GASG;AACH,wBAAgB,eAAe,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAmB7D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/useBuildingName.ts"],"sourcesContent":["// 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 { BimContext } from '../../../../../store'\r\n\r\n/**\r\n * Hook returning a function that resolves the building/file display name\r\n * for a given `modelId`. The model's loaded file lives in either\r\n * `bimState.bim.buildingModel.bimFile` (single-model viewer) or\r\n * `bimState.bim.bimModelsAddedToMap[]` (multi-model). We fall back to the\r\n * raw modelId so the caller never gets `null`.\r\n *\r\n * The returned name is stripped of its file extension (\".frag\", \".ifc\",\r\n * etc.) so it can be safely composed into a download filename.\r\n */\r\nexport function useBuildingName(): (modelId: string) => string {\r\n const { state: bimState } = React.useContext(BimContext)\r\n const { buildingModel, bimModelsAddedToMap } = bimState.bim\r\n\r\n return React.useCallback(\r\n (modelId: string) => {\r\n const idStr = String(modelId)\r\n const fromMap = bimModelsAddedToMap.find(\r\n (m) => String(m.bimFile.id) === idStr,\r\n )\r\n if (fromMap) return stripExtension(fromMap.bimFile.name)\r\n const single = buildingModel.bimFile\r\n if (single && String(single.id) === idStr) {\r\n return stripExtension(single.name)\r\n }\r\n return idStr\r\n },\r\n [buildingModel, bimModelsAddedToMap],\r\n )\r\n}\r\n\r\nfunction stripExtension(name: string): string {\r\n const dot = name.lastIndexOf('.')\r\n if (dot <= 0) return name\r\n return name.slice(0, dot)\r\n}\r\n"],"mappings":"AAGA,YAAY,WAAW;
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/useBuildingName.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport * as React from 'react'\r\n\r\nimport { BimContext } from '../../../../../store'\r\n\r\n/**\r\n * Hook returning a function that resolves the building/file display name\r\n * for a given `modelId`. The model's loaded file lives in either\r\n * `bimState.bim.buildingModel.bimFile` (single-model viewer) or\r\n * `bimState.bim.bimModelsAddedToMap[]` (multi-model). We fall back to the\r\n * raw modelId so the caller never gets `null`.\r\n *\r\n * The returned name is stripped of its file extension (\".frag\", \".ifc\",\r\n * etc.) so it can be safely composed into a download filename.\r\n */\r\nexport function useBuildingName(): (modelId: string) => string {\r\n const { state: bimState } = React.useContext(BimContext)\r\n const { buildingModel, bimModelsAddedToMap } = bimState.bim\r\n\r\n return React.useCallback(\r\n (modelId: string) => {\r\n const idStr = String(modelId)\r\n const fromMap = bimModelsAddedToMap.find(\r\n (m) => String(m.bimFile.id) === idStr,\r\n )\r\n if (fromMap) return stripExtension(fromMap.bimFile.name)\r\n const single = buildingModel.bimFile\r\n if (single && String(single.id) === idStr) {\r\n return stripExtension(single.name)\r\n }\r\n return idStr\r\n },\r\n [buildingModel, bimModelsAddedToMap],\r\n )\r\n}\r\n\r\nfunction stripExtension(name: string): string {\r\n const dot = name.lastIndexOf('.')\r\n if (dot <= 0) return name\r\n return name.slice(0, dot)\r\n}\r\n"],"mappings":"AAGA,YAAY,WAAW;AAEvB,SAAS,kBAAkB;AAYpB,SAAS,kBAA+C;AAC7D,QAAM,EAAE,OAAO,SAAS,IAAI,MAAM,WAAW,UAAU;AACvD,QAAM,EAAE,eAAe,oBAAoB,IAAI,SAAS;AAExD,SAAO,MAAM;AAAA,IACX,CAAC,YAAoB;AACnB,YAAM,QAAQ,OAAO,OAAO;AAC5B,YAAM,UAAU,oBAAoB;AAAA,QAClC,CAAC,MAAM,OAAO,EAAE,QAAQ,EAAE,MAAM;AAAA,MAClC;AACA,UAAI,QAAS,QAAO,eAAe,QAAQ,QAAQ,IAAI;AACvD,YAAM,SAAS,cAAc;AAC7B,UAAI,UAAU,OAAO,OAAO,EAAE,MAAM,OAAO;AACzC,eAAO,eAAe,OAAO,IAAI;AAAA,MACnC;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC,eAAe,mBAAmB;AAAA,EACrC;AACF;AAEA,SAAS,eAAe,MAAsB;AAC5C,QAAM,MAAM,KAAK,YAAY,GAAG;AAChC,MAAI,OAAO,EAAG,QAAO;AACrB,SAAO,KAAK,MAAM,GAAG,GAAG;AAC1B;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\r\n// Copyright (C) 2025 Collab Digital Twins\r\n\r\nimport { useTranslations } from 'next-intl'\r\nimport * as React from 'react'\r\n\r\n/**\r\n * Hook returning a function that maps a layer class name to a display label.\r\n * IFC class names (IFCWALL, IFCSLAB, …) are returned verbatim per-spec.\r\n * Special non-IFC layer keys (e.g. \"Door Swings\") are looked up in the\r\n * DrawingLayers i18n namespace so they get localized.\r\n */\r\nexport function useFriendlyIfcClassName(): (className: string) => string {\r\n const tLayers = useTranslations('DrawingLayers')\r\n\r\n return React.useCallback(\r\n (className: string) => {\r\n if (className.startsWith('IFC')) return className\r\n // The Fill/Cut group rows arrive fully qualified (\"DrawingLayers.cut\").\r\n // Strip the namespace prefix so the lookup lands on the bare key (\"cut\")\r\n // instead of resolving the dotted path as nested keys (which misses).\r\n const key = className.startsWith('DrawingLayers.')\r\n ? className.slice('DrawingLayers.'.length)\r\n : className\r\n return tLayers.has(key) ? tLayers(key) : className\r\n },\r\n [tLayers],\r\n )\r\n}\r\n"],"mappings":"AAGA,SAAS,uBAAuB;AAChC,YAAY,WAAW;AAQhB,SAAS,0BAAyD;AACvE,QAAM,UAAU,gBAAgB,eAAe;AAE/C,SAAO,MAAM;AAAA,IACX,CAAC,cAAsB;AACrB,UAAI,UAAU,WAAW,KAAK,EAAG,QAAO;AAIxC,YAAM,MAAM,UAAU,WAAW,gBAAgB,IAC7C,UAAU,MAAM,iBAAiB,MAAM,IACvC;AACJ,aAAO,QAAQ,IAAI,GAAG,IAAI,QAAQ,GAAG,IAAI;AAAA,IAC3C;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AACF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAe9B,UAAU,sBAAsB;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CAC7C;AAuCD,wBAAgB,cAAc,CAAC,EAAE,IAAY,EAAE,kBAAkB,EAAE,EAAE,sBAAsB,qBAsX1F"}
|
|
@@ -3,13 +3,13 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { BimContext, ToolsContext } from "../../../../../store";
|
|
5
5
|
import { Highlighter } from "../Highlighter";
|
|
6
|
-
import {
|
|
6
|
+
import { IDSManager } from "../IDSManager";
|
|
7
|
+
import { IDSLegend } from "../IDSManager/src/IDSLegend";
|
|
7
8
|
import { ElementList } from "./src/ElementList";
|
|
9
|
+
import { PropertiesMenuHeader } from "./src/PropertiesMenuHeader";
|
|
8
10
|
import { PropertyGroup } from "./src/PropertyGroup";
|
|
9
|
-
import { formatPropertyValue } from "./src/utils";
|
|
10
11
|
import { useElementProperties } from "./src/useElementProperties";
|
|
11
|
-
import {
|
|
12
|
-
import { IDSLegend } from "../IDSManager/src/IDSLegend";
|
|
12
|
+
import { formatPropertyValue } from "./src/utils";
|
|
13
13
|
function useElementNames(bimComponents) {
|
|
14
14
|
const { fetchElementProperties } = useElementProperties(bimComponents);
|
|
15
15
|
const getElementName = React.useCallback(async (elementId) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/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 { BimContext, ToolsContext } from '../../../../../store'\r\nimport { Highlighter } from '../Highlighter'\r\nimport { PropertiesMenuHeader } from './src/PropertiesMenuHeader'\r\nimport { ElementList } from './src/ElementList'\r\nimport { PropertyGroup } from './src/PropertyGroup'\r\nimport { formatPropertyValue } from './src/utils'\r\nimport type { PropertyGroup as PropertyGroupType } from './src/utils'\r\nimport { useElementProperties } from './src/useElementProperties'\r\nimport { IDSManager } from '../IDSManager'\r\nimport { IDSLegend } from '../IDSManager/src/IDSLegend'\r\n\r\ninterface PropertiesSideBarProps {\r\n open?: boolean\r\n onOpenChangeAction?: (open: boolean) => void\r\n}\r\n\r\n// Hook to get element names for multiple elements\r\nfunction useElementNames(bimComponents: any) {\r\n const { fetchElementProperties } = useElementProperties(bimComponents)\r\n\r\n const getElementName = React.useCallback(async (elementId: number): Promise<string> => {\r\n try {\r\n const { elementName } = await fetchElementProperties(elementId)\r\n return elementName || `Element ${elementId}`\r\n }\r\n catch (error) {\r\n console.error('Error fetching element name:', error)\r\n return `Element ${elementId}`\r\n }\r\n }, [fetchElementProperties])\r\n\r\n const getElementNames = React.useCallback(async (elementIds: number[]): Promise<Record<number, string>> => {\r\n const names: Record<number, string> = {}\r\n\r\n // Fetch names in parallel for better performance\r\n const namePromises = elementIds.map(async (id) => {\r\n const name = await getElementName(id)\r\n return { id, name }\r\n })\r\n\r\n const results = await Promise.allSettled(namePromises)\r\n for (const result of results) {\r\n if (result.status === 'fulfilled') {\r\n names[result.value.id] = result.value.name\r\n }\r\n }\r\n\r\n return names\r\n }, [getElementName])\r\n\r\n return { getElementName, getElementNames }\r\n}\r\n\r\nexport function PropertiesMenu({ open = false, onOpenChangeAction }: PropertiesSideBarProps) {\r\n const { state: bimState } = React.useContext(BimContext)\r\n const { bimComponents } = bimState.bim\r\n const { state: toolsState } = React.useContext(ToolsContext)\r\n const { currentToolId } = toolsState.tools\r\n\r\n const { fetchElementProperties } = useElementProperties(bimComponents)\r\n const { getElementNames } = useElementNames(bimComponents)\r\n const [selectedElementIds, setSelectedElementIds] = React.useState<number[]>([])\r\n const [currentElementId, setCurrentElementId] = React.useState<number | null>(null)\r\n const [currentElementName, setCurrentElementName] = React.useState<string | null>(null)\r\n const [propertyGroups, setPropertyGroups] = React.useState<PropertyGroupType[]>([])\r\n const [expandedGroups, setExpandedGroups] = React.useState<Set<string>>(new Set(['identity-data']))\r\n const [loading, setLoading] = React.useState(false)\r\n const [internalOpen, setInternalOpen] = React.useState(false)\r\n const [elementNames, setElementNames] = React.useState<Record<number, string>>({})\r\n const [hasEverSelectedElement, setHasEverSelectedElement] = React.useState(false)\r\n const [isExiting, setIsExiting] = React.useState(false)\r\n const [idsTestResults, setIdsTestResults] = React.useState<{ passed: number; failed: number } | null>(null)\r\n const [idsEnabled, setIdsEnabled] = React.useState(false)\r\n const [currentElementIdsStatus, setCurrentElementIdsStatus] = React.useState<'pass' | 'fail' | null>(null)\r\n const [idsTitle, setIdsTitle] = React.useState<string>('IDS Verification')\r\n const [idsDescription, setIdsDescription] = React.useState<string>('')\r\n const [idsLegendHeight, setIdsLegendHeight] = React.useState<number>(0)\r\n\r\n // Ref to prevent circular calls between React and ClickHandler\r\n const isInternalCloseRef = React.useRef(false)\r\n\r\n // Use internal state if no external control is provided\r\n const isOpen = onOpenChangeAction ? open : internalOpen\r\n const handleOpenChange = onOpenChangeAction || setInternalOpen\r\n\r\n // Function to toggle group expansion\r\n const toggleGroup = (groupId: string) => {\r\n setExpandedGroups((prev) => {\r\n const newSet = new Set(prev)\r\n if (newSet.has(groupId)) {\r\n newSet.delete(groupId)\r\n }\r\n else {\r\n newSet.add(groupId)\r\n }\r\n return newSet\r\n })\r\n }\r\n\r\n // Function to fetch properties for the current element\r\n const loadElementProperties = React.useCallback(async (localId: number) => {\r\n setLoading(true)\r\n try {\r\n const { groups, elementName } = await fetchElementProperties(localId)\r\n setPropertyGroups(groups)\r\n setCurrentElementName(elementName)\r\n // Reset expanded groups to defaults when element changes\r\n setExpandedGroups(new Set(['identity-data']))\r\n }\r\n catch (error) {\r\n console.error('Error fetching element properties:', error)\r\n setPropertyGroups([])\r\n setCurrentElementName(null)\r\n }\r\n finally {\r\n setLoading(false)\r\n }\r\n }, [fetchElementProperties])\r\n\r\n // Handle closing the properties panel\r\n const handleClose = React.useCallback(() => {\r\n if (!isOpen) {\r\n // If not open, close immediately without animation\r\n setSelectedElementIds([])\r\n setCurrentElementId(null)\r\n setCurrentElementName(null)\r\n setElementNames({})\r\n setHasEverSelectedElement(false)\r\n isInternalCloseRef.current = false\r\n handleOpenChange(false)\r\n return\r\n }\r\n\r\n setIsExiting(true)\r\n // Delay the actual close to allow animation to complete\r\n setTimeout(() => {\r\n setSelectedElementIds([])\r\n setCurrentElementId(null)\r\n setCurrentElementName(null)\r\n setElementNames({})\r\n setHasEverSelectedElement(false)\r\n isInternalCloseRef.current = false\r\n setIsExiting(false)\r\n handleOpenChange(false)\r\n }, 300) // Match animation duration\r\n }, [isOpen, handleOpenChange])\r\n\r\n // Handle manual close (e.g., when user clicks close button)\r\n const handleManualClose = React.useCallback(() => {\r\n isInternalCloseRef.current = true\r\n const highlighter = bimComponents?.get(Highlighter)\r\n if (highlighter) {\r\n highlighter.clearSelection()\r\n }\r\n // Call handleClose directly after clearing selection\r\n handleClose()\r\n }, [bimComponents, handleClose])\r\n\r\n const handleSelectionCleared = React.useCallback(() => {\r\n // Only call handleClose if this is not an internal close operation\r\n if (!isInternalCloseRef.current) {\r\n handleClose()\r\n }\r\n }, [handleClose])\r\n\r\n // Handle selecting a specific element from the list\r\n const handleElementSelect = (elementId: string) => {\r\n const id = Number.parseInt(elementId)\r\n setCurrentElementId(id)\r\n loadElementProperties(id)\r\n }\r\n\r\n // Memoize event handlers to prevent infinite loops\r\n const handleElementsSelected = React.useCallback((elementIds: number[]) => {\r\n setSelectedElementIds(elementIds)\r\n if (elementIds.length > 0) {\r\n setCurrentElementId(elementIds[0])\r\n setHasEverSelectedElement(true)\r\n // Only open properties panel if no tool is currently active\r\n if (currentToolId === null) {\r\n handleOpenChange(true)\r\n }\r\n }\r\n else {\r\n // No elements selected - close the panel\r\n if (hasEverSelectedElement && currentToolId === null) {\r\n handleClose()\r\n }\r\n // If no element has ever been selected or tool is active, do nothing (don't open panel)\r\n }\r\n }, [currentToolId, hasEverSelectedElement, handleOpenChange, handleClose])\r\n\r\n // Handler to close IDS verification\r\n const handleIDSClose = React.useCallback(async () => {\r\n if (!bimComponents) return\r\n try {\r\n const idsManager = bimComponents.get(IDSManager)\r\n await idsManager.reset()\r\n } catch (error) {\r\n console.error('Error closing IDS:', error)\r\n }\r\n }, [bimComponents])\r\n\r\n // Set up IDS Manager listener\r\n React.useEffect(() => {\r\n if (!bimComponents) return\r\n\r\n try {\r\n const idsManager = bimComponents.get(IDSManager)\r\n \r\n const handleIDSTest = ({ totalPassed, totalFailed, title, description }: { totalPassed: number; totalFailed: number; title?: string; description?: string }) => {\r\n setIdsTestResults({ passed: totalPassed, failed: totalFailed })\r\n setIdsTitle(title || 'IDS Verification')\r\n setIdsDescription(description || '')\r\n setIdsEnabled(true)\r\n }\r\n\r\n const handleIDSReset = () => {\r\n setIdsTestResults(null)\r\n setIdsEnabled(false)\r\n setCurrentElementIdsStatus(null)\r\n setIdsTitle('IDS Verification')\r\n setIdsDescription('')\r\n }\r\n\r\n idsManager.onTest.add(handleIDSTest)\r\n idsManager.onReset.add(handleIDSReset)\r\n\r\n // Check if IDS is currently enabled and has results\r\n if (idsManager.enabled) {\r\n setIdsEnabled(true)\r\n // Try to get existing results\r\n const pass = idsManager.pass\r\n const fail = idsManager.fail\r\n if (pass && fail) {\r\n const totalPassed = Object.values(pass).reduce((total, set) => total + set.size, 0)\r\n const totalFailed = Object.values(fail).reduce((total, set) => total + set.size, 0)\r\n if (totalPassed > 0 || totalFailed > 0) {\r\n setIdsTestResults({ passed: totalPassed, failed: totalFailed })\r\n }\r\n }\r\n }\r\n\r\n return () => {\r\n idsManager.onTest.remove(handleIDSTest)\r\n idsManager.onReset.remove(handleIDSReset)\r\n }\r\n } catch (error) {\r\n // IDSManager might not be initialized\r\n return\r\n }\r\n }, [bimComponents])\r\n\r\n // Set up ClickHandler event listener\r\n React.useEffect(() => {\r\n if (!bimComponents) return\r\n\r\n const highlighter = bimComponents.get(Highlighter)\r\n\r\n // Subscribe to the event\r\n highlighter.onElementsSelected.add(handleElementsSelected)\r\n highlighter.onSelectionCleared.add(handleSelectionCleared)\r\n\r\n // Get the currently selected elements if any\r\n const currentlySelected = highlighter.selectedElement\r\n if (currentlySelected && currentlySelected.length > 0 && currentToolId === null) {\r\n setSelectedElementIds(currentlySelected)\r\n setCurrentElementId(currentlySelected[0])\r\n setHasEverSelectedElement(true)\r\n handleOpenChange(true)\r\n }\r\n\r\n // Cleanup on unmount\r\n return () => {\r\n highlighter.onElementsSelected.remove(handleElementsSelected)\r\n highlighter.onSelectionCleared.remove(handleSelectionCleared)\r\n }\r\n }, [bimComponents, handleElementsSelected, handleSelectionCleared, currentToolId, handleOpenChange])\r\n // Fetch properties when currentElementId changes\r\n React.useEffect(() => {\r\n if (currentElementId === null) {\r\n setPropertyGroups([])\r\n setCurrentElementName(null)\r\n setExpandedGroups(new Set())\r\n setCurrentElementIdsStatus(null)\r\n }\r\n else {\r\n loadElementProperties(currentElementId)\r\n \r\n // Check if current element passed or failed IDS test\r\n if (bimComponents && idsEnabled) {\r\n try {\r\n const idsManager = bimComponents.get(IDSManager)\r\n const passMap = idsManager.pass\r\n const failMap = idsManager.fail\r\n \r\n let elementStatus: 'pass' | 'fail' | null = null\r\n \r\n // Check if element is in pass map\r\n for (const [modelId, expressIds] of Object.entries(passMap || {})) {\r\n if (expressIds.has(currentElementId)) {\r\n elementStatus = 'pass'\r\n break\r\n }\r\n }\r\n \r\n // Check if element is in fail map (only if not already found in pass)\r\n if (!elementStatus) {\r\n for (const [modelId, expressIds] of Object.entries(failMap || {})) {\r\n if (expressIds.has(currentElementId)) {\r\n elementStatus = 'fail'\r\n break\r\n }\r\n }\r\n }\r\n \r\n setCurrentElementIdsStatus(elementStatus)\r\n } catch (error) {\r\n setCurrentElementIdsStatus(null)\r\n }\r\n } else {\r\n setCurrentElementIdsStatus(null)\r\n }\r\n }\r\n }, [currentElementId, loadElementProperties, bimComponents, idsEnabled])\r\n\r\n // Close properties panel when a tool becomes active\r\n React.useEffect(() => {\r\n if (currentToolId !== null && isOpen) {\r\n handleOpenChange(false)\r\n }\r\n }, [currentToolId, isOpen, handleOpenChange])\r\n\r\n // Fetch element names when selectedElementIds changes\r\n React.useEffect(() => {\r\n if (selectedElementIds.length > 1) {\r\n getElementNames(selectedElementIds).then(setElementNames)\r\n }\r\n else {\r\n setElementNames({})\r\n }\r\n }, [selectedElementIds, getElementNames])\r\n\r\n // Calculate bottom position for properties panel when IDS is visible\r\n const panelGap = 8 // Gap between panels in pixels (0.5rem)\r\n const propertiesPanelBottom = React.useMemo(() => {\r\n return idsEnabled && idsTestResults && idsLegendHeight > 0\r\n ? `${idsLegendHeight + panelGap + 8}px` // IDS height + gap + margin\r\n : '0.5rem'\r\n }, [idsEnabled, idsTestResults, idsLegendHeight])\r\n\r\n // Handler for IDS legend height changes\r\n const handleIDSHeightChange = React.useCallback((height: number) => {\r\n setIdsLegendHeight(height)\r\n }, [])\r\n\r\n // Render IDS legend component\r\n const idsLegendComponent = React.useMemo(() => {\r\n if (!idsEnabled || !idsTestResults) return null\r\n \r\n return (\r\n <IDSLegend \r\n idsTestResults={idsTestResults} \r\n title={idsTitle}\r\n description={idsDescription}\r\n onClose={handleIDSClose}\r\n onHeightChange={handleIDSHeightChange}\r\n />\r\n )\r\n }, [idsEnabled, idsTestResults, idsTitle, idsDescription, handleIDSClose, handleIDSHeightChange])\r\n\r\n // Don't render properties panel if not open, exiting, or when a tool is active\r\n const propertiesPanelComponent = (isOpen || isExiting) && currentToolId === null && (\r\n <div\r\n className={`fixed right-2 top-2 w-80 z-50 rounded-md bg-background/95 backdrop-blur-sm border shadow-lg pointer-events-auto ${\r\n isExiting\r\n ? 'animate-out slide-out-to-right duration-300'\r\n : 'animate-in slide-in-from-right duration-300'\r\n }`}\r\n style={{\r\n bottom: propertiesPanelBottom,\r\n minWidth: '300px',\r\n resize: 'both',\r\n overflow: 'hidden',\r\n }}\r\n >\r\n <div className=\"flex flex-col h-full p-4 pr-1 \">\r\n <PropertiesMenuHeader\r\n elementName={currentElementName}\r\n onCloseAction={handleManualClose}\r\n idsStatus={currentElementIdsStatus}\r\n />\r\n <div className=\"flex-1 overflow-y-auto space-y-4\">{selectedElementIds.length > 0 && !loading && (\r\n <>\r\n <ElementList\r\n selectedElementIds={selectedElementIds}\r\n currentElementId={currentElementId}\r\n onElementSelectAction={handleElementSelect}\r\n elementNames={elementNames}\r\n />\r\n\r\n {propertyGroups.length > 0 && (\r\n <div className=\"space-y-1\">\r\n {propertyGroups.map(group => (\r\n <PropertyGroup\r\n key={group.id}\r\n group={group}\r\n isExpanded={expandedGroups.has(group.id)}\r\n onToggleAction={toggleGroup}\r\n formatPropertyValueAction={formatPropertyValue}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n\r\n return (\r\n <>\r\n {propertiesPanelComponent}\r\n {idsLegendComponent}\r\n </>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/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\n\r\nimport { BimContext, ToolsContext } from '../../../../../store'\r\nimport { Highlighter } from '../Highlighter'\r\nimport { IDSManager } from '../IDSManager'\r\nimport { IDSLegend } from '../IDSManager/src/IDSLegend'\r\n\r\nimport { ElementList } from './src/ElementList'\r\nimport { PropertiesMenuHeader } from './src/PropertiesMenuHeader'\r\nimport { PropertyGroup } from './src/PropertyGroup'\r\nimport { useElementProperties } from './src/useElementProperties'\r\nimport { formatPropertyValue } from './src/utils'\r\n\r\nimport type { PropertyGroup as PropertyGroupType } from './src/utils'\r\n\r\ninterface PropertiesSideBarProps {\r\n open?: boolean\r\n onOpenChangeAction?: (open: boolean) => void\r\n}\r\n\r\n// Hook to get element names for multiple elements\r\nfunction useElementNames(bimComponents: any) {\r\n const { fetchElementProperties } = useElementProperties(bimComponents)\r\n\r\n const getElementName = React.useCallback(async (elementId: number): Promise<string> => {\r\n try {\r\n const { elementName } = await fetchElementProperties(elementId)\r\n return elementName || `Element ${elementId}`\r\n }\r\n catch (error) {\r\n console.error('Error fetching element name:', error)\r\n return `Element ${elementId}`\r\n }\r\n }, [fetchElementProperties])\r\n\r\n const getElementNames = React.useCallback(async (elementIds: number[]): Promise<Record<number, string>> => {\r\n const names: Record<number, string> = {}\r\n\r\n // Fetch names in parallel for better performance\r\n const namePromises = elementIds.map(async (id) => {\r\n const name = await getElementName(id)\r\n return { id, name }\r\n })\r\n\r\n const results = await Promise.allSettled(namePromises)\r\n for (const result of results) {\r\n if (result.status === 'fulfilled') {\r\n names[result.value.id] = result.value.name\r\n }\r\n }\r\n\r\n return names\r\n }, [getElementName])\r\n\r\n return { getElementName, getElementNames }\r\n}\r\n\r\nexport function PropertiesMenu({ open = false, onOpenChangeAction }: PropertiesSideBarProps) {\r\n const { state: bimState } = React.useContext(BimContext)\r\n const { bimComponents } = bimState.bim\r\n const { state: toolsState } = React.useContext(ToolsContext)\r\n const { currentToolId } = toolsState.tools\r\n\r\n const { fetchElementProperties } = useElementProperties(bimComponents)\r\n const { getElementNames } = useElementNames(bimComponents)\r\n const [selectedElementIds, setSelectedElementIds] = React.useState<number[]>([])\r\n const [currentElementId, setCurrentElementId] = React.useState<number | null>(null)\r\n const [currentElementName, setCurrentElementName] = React.useState<string | null>(null)\r\n const [propertyGroups, setPropertyGroups] = React.useState<PropertyGroupType[]>([])\r\n const [expandedGroups, setExpandedGroups] = React.useState<Set<string>>(new Set(['identity-data']))\r\n const [loading, setLoading] = React.useState(false)\r\n const [internalOpen, setInternalOpen] = React.useState(false)\r\n const [elementNames, setElementNames] = React.useState<Record<number, string>>({})\r\n const [hasEverSelectedElement, setHasEverSelectedElement] = React.useState(false)\r\n const [isExiting, setIsExiting] = React.useState(false)\r\n const [idsTestResults, setIdsTestResults] = React.useState<{ passed: number; failed: number } | null>(null)\r\n const [idsEnabled, setIdsEnabled] = React.useState(false)\r\n const [currentElementIdsStatus, setCurrentElementIdsStatus] = React.useState<'pass' | 'fail' | null>(null)\r\n const [idsTitle, setIdsTitle] = React.useState<string>('IDS Verification')\r\n const [idsDescription, setIdsDescription] = React.useState<string>('')\r\n const [idsLegendHeight, setIdsLegendHeight] = React.useState<number>(0)\r\n\r\n // Ref to prevent circular calls between React and ClickHandler\r\n const isInternalCloseRef = React.useRef(false)\r\n\r\n // Use internal state if no external control is provided\r\n const isOpen = onOpenChangeAction ? open : internalOpen\r\n const handleOpenChange = onOpenChangeAction || setInternalOpen\r\n\r\n // Function to toggle group expansion\r\n const toggleGroup = (groupId: string) => {\r\n setExpandedGroups((prev) => {\r\n const newSet = new Set(prev)\r\n if (newSet.has(groupId)) {\r\n newSet.delete(groupId)\r\n }\r\n else {\r\n newSet.add(groupId)\r\n }\r\n return newSet\r\n })\r\n }\r\n\r\n // Function to fetch properties for the current element\r\n const loadElementProperties = React.useCallback(async (localId: number) => {\r\n setLoading(true)\r\n try {\r\n const { groups, elementName } = await fetchElementProperties(localId)\r\n setPropertyGroups(groups)\r\n setCurrentElementName(elementName)\r\n // Reset expanded groups to defaults when element changes\r\n setExpandedGroups(new Set(['identity-data']))\r\n }\r\n catch (error) {\r\n console.error('Error fetching element properties:', error)\r\n setPropertyGroups([])\r\n setCurrentElementName(null)\r\n }\r\n finally {\r\n setLoading(false)\r\n }\r\n }, [fetchElementProperties])\r\n\r\n // Handle closing the properties panel\r\n const handleClose = React.useCallback(() => {\r\n if (!isOpen) {\r\n // If not open, close immediately without animation\r\n setSelectedElementIds([])\r\n setCurrentElementId(null)\r\n setCurrentElementName(null)\r\n setElementNames({})\r\n setHasEverSelectedElement(false)\r\n isInternalCloseRef.current = false\r\n handleOpenChange(false)\r\n return\r\n }\r\n\r\n setIsExiting(true)\r\n // Delay the actual close to allow animation to complete\r\n setTimeout(() => {\r\n setSelectedElementIds([])\r\n setCurrentElementId(null)\r\n setCurrentElementName(null)\r\n setElementNames({})\r\n setHasEverSelectedElement(false)\r\n isInternalCloseRef.current = false\r\n setIsExiting(false)\r\n handleOpenChange(false)\r\n }, 300) // Match animation duration\r\n }, [isOpen, handleOpenChange])\r\n\r\n // Handle manual close (e.g., when user clicks close button)\r\n const handleManualClose = React.useCallback(() => {\r\n isInternalCloseRef.current = true\r\n const highlighter = bimComponents?.get(Highlighter)\r\n if (highlighter) {\r\n highlighter.clearSelection()\r\n }\r\n // Call handleClose directly after clearing selection\r\n handleClose()\r\n }, [bimComponents, handleClose])\r\n\r\n const handleSelectionCleared = React.useCallback(() => {\r\n // Only call handleClose if this is not an internal close operation\r\n if (!isInternalCloseRef.current) {\r\n handleClose()\r\n }\r\n }, [handleClose])\r\n\r\n // Handle selecting a specific element from the list\r\n const handleElementSelect = (elementId: string) => {\r\n const id = Number.parseInt(elementId)\r\n setCurrentElementId(id)\r\n loadElementProperties(id)\r\n }\r\n\r\n // Memoize event handlers to prevent infinite loops\r\n const handleElementsSelected = React.useCallback((elementIds: number[]) => {\r\n setSelectedElementIds(elementIds)\r\n if (elementIds.length > 0) {\r\n setCurrentElementId(elementIds[0])\r\n setHasEverSelectedElement(true)\r\n // Only open properties panel if no tool is currently active\r\n if (currentToolId === null) {\r\n handleOpenChange(true)\r\n }\r\n }\r\n else {\r\n // No elements selected - close the panel\r\n if (hasEverSelectedElement && currentToolId === null) {\r\n handleClose()\r\n }\r\n // If no element has ever been selected or tool is active, do nothing (don't open panel)\r\n }\r\n }, [currentToolId, hasEverSelectedElement, handleOpenChange, handleClose])\r\n\r\n // Handler to close IDS verification\r\n const handleIDSClose = React.useCallback(async () => {\r\n if (!bimComponents) return\r\n try {\r\n const idsManager = bimComponents.get(IDSManager)\r\n await idsManager.reset()\r\n } catch (error) {\r\n console.error('Error closing IDS:', error)\r\n }\r\n }, [bimComponents])\r\n\r\n // Set up IDS Manager listener\r\n React.useEffect(() => {\r\n if (!bimComponents) return\r\n\r\n try {\r\n const idsManager = bimComponents.get(IDSManager)\r\n\r\n const handleIDSTest = ({ totalPassed, totalFailed, title, description }: { totalPassed: number; totalFailed: number; title?: string; description?: string }) => {\r\n setIdsTestResults({ passed: totalPassed, failed: totalFailed })\r\n setIdsTitle(title || 'IDS Verification')\r\n setIdsDescription(description || '')\r\n setIdsEnabled(true)\r\n }\r\n\r\n const handleIDSReset = () => {\r\n setIdsTestResults(null)\r\n setIdsEnabled(false)\r\n setCurrentElementIdsStatus(null)\r\n setIdsTitle('IDS Verification')\r\n setIdsDescription('')\r\n }\r\n\r\n idsManager.onTest.add(handleIDSTest)\r\n idsManager.onReset.add(handleIDSReset)\r\n\r\n // Check if IDS is currently enabled and has results\r\n if (idsManager.enabled) {\r\n setIdsEnabled(true)\r\n // Try to get existing results\r\n const pass = idsManager.pass\r\n const fail = idsManager.fail\r\n if (pass && fail) {\r\n const totalPassed = Object.values(pass).reduce((total, set) => total + set.size, 0)\r\n const totalFailed = Object.values(fail).reduce((total, set) => total + set.size, 0)\r\n if (totalPassed > 0 || totalFailed > 0) {\r\n setIdsTestResults({ passed: totalPassed, failed: totalFailed })\r\n }\r\n }\r\n }\r\n\r\n return () => {\r\n idsManager.onTest.remove(handleIDSTest)\r\n idsManager.onReset.remove(handleIDSReset)\r\n }\r\n } catch (error) {\r\n // IDSManager might not be initialized\r\n return\r\n }\r\n }, [bimComponents])\r\n\r\n // Set up ClickHandler event listener\r\n React.useEffect(() => {\r\n if (!bimComponents) return\r\n\r\n const highlighter = bimComponents.get(Highlighter)\r\n\r\n // Subscribe to the event\r\n highlighter.onElementsSelected.add(handleElementsSelected)\r\n highlighter.onSelectionCleared.add(handleSelectionCleared)\r\n\r\n // Get the currently selected elements if any\r\n const currentlySelected = highlighter.selectedElement\r\n if (currentlySelected && currentlySelected.length > 0 && currentToolId === null) {\r\n setSelectedElementIds(currentlySelected)\r\n setCurrentElementId(currentlySelected[0])\r\n setHasEverSelectedElement(true)\r\n handleOpenChange(true)\r\n }\r\n\r\n // Cleanup on unmount\r\n return () => {\r\n highlighter.onElementsSelected.remove(handleElementsSelected)\r\n highlighter.onSelectionCleared.remove(handleSelectionCleared)\r\n }\r\n }, [bimComponents, handleElementsSelected, handleSelectionCleared, currentToolId, handleOpenChange])\r\n // Fetch properties when currentElementId changes\r\n React.useEffect(() => {\r\n if (currentElementId === null) {\r\n setPropertyGroups([])\r\n setCurrentElementName(null)\r\n setExpandedGroups(new Set())\r\n setCurrentElementIdsStatus(null)\r\n }\r\n else {\r\n loadElementProperties(currentElementId)\r\n\r\n // Check if current element passed or failed IDS test\r\n if (bimComponents && idsEnabled) {\r\n try {\r\n const idsManager = bimComponents.get(IDSManager)\r\n const passMap = idsManager.pass\r\n const failMap = idsManager.fail\r\n\r\n let elementStatus: 'pass' | 'fail' | null = null\r\n\r\n // Check if element is in pass map\r\n for (const [modelId, expressIds] of Object.entries(passMap || {})) {\r\n if (expressIds.has(currentElementId)) {\r\n elementStatus = 'pass'\r\n break\r\n }\r\n }\r\n\r\n // Check if element is in fail map (only if not already found in pass)\r\n if (!elementStatus) {\r\n for (const [modelId, expressIds] of Object.entries(failMap || {})) {\r\n if (expressIds.has(currentElementId)) {\r\n elementStatus = 'fail'\r\n break\r\n }\r\n }\r\n }\r\n\r\n setCurrentElementIdsStatus(elementStatus)\r\n } catch (error) {\r\n setCurrentElementIdsStatus(null)\r\n }\r\n } else {\r\n setCurrentElementIdsStatus(null)\r\n }\r\n }\r\n }, [currentElementId, loadElementProperties, bimComponents, idsEnabled])\r\n\r\n // Close properties panel when a tool becomes active\r\n React.useEffect(() => {\r\n if (currentToolId !== null && isOpen) {\r\n handleOpenChange(false)\r\n }\r\n }, [currentToolId, isOpen, handleOpenChange])\r\n\r\n // Fetch element names when selectedElementIds changes\r\n React.useEffect(() => {\r\n if (selectedElementIds.length > 1) {\r\n getElementNames(selectedElementIds).then(setElementNames)\r\n }\r\n else {\r\n setElementNames({})\r\n }\r\n }, [selectedElementIds, getElementNames])\r\n\r\n // Calculate bottom position for properties panel when IDS is visible\r\n const panelGap = 8 // Gap between panels in pixels (0.5rem)\r\n const propertiesPanelBottom = React.useMemo(() => {\r\n return idsEnabled && idsTestResults && idsLegendHeight > 0\r\n ? `${idsLegendHeight + panelGap + 8}px` // IDS height + gap + margin\r\n : '0.5rem'\r\n }, [idsEnabled, idsTestResults, idsLegendHeight])\r\n\r\n // Handler for IDS legend height changes\r\n const handleIDSHeightChange = React.useCallback((height: number) => {\r\n setIdsLegendHeight(height)\r\n }, [])\r\n\r\n // Render IDS legend component\r\n const idsLegendComponent = React.useMemo(() => {\r\n if (!idsEnabled || !idsTestResults) return null\r\n\r\n return (\r\n <IDSLegend\r\n idsTestResults={idsTestResults}\r\n title={idsTitle}\r\n description={idsDescription}\r\n onClose={handleIDSClose}\r\n onHeightChange={handleIDSHeightChange}\r\n />\r\n )\r\n }, [idsEnabled, idsTestResults, idsTitle, idsDescription, handleIDSClose, handleIDSHeightChange])\r\n\r\n // Don't render properties panel if not open, exiting, or when a tool is active\r\n const propertiesPanelComponent = (isOpen || isExiting) && currentToolId === null && (\r\n <div\r\n className={`fixed right-2 top-2 w-80 z-50 rounded-md bg-background/95 backdrop-blur-sm border shadow-lg pointer-events-auto ${\r\n isExiting\r\n ? 'animate-out slide-out-to-right duration-300'\r\n : 'animate-in slide-in-from-right duration-300'\r\n }`}\r\n style={{\r\n bottom: propertiesPanelBottom,\r\n minWidth: '300px',\r\n resize: 'both',\r\n overflow: 'hidden',\r\n }}\r\n >\r\n <div className=\"flex flex-col h-full p-4 pr-1 \">\r\n <PropertiesMenuHeader\r\n elementName={currentElementName}\r\n onCloseAction={handleManualClose}\r\n idsStatus={currentElementIdsStatus}\r\n />\r\n <div className=\"flex-1 overflow-y-auto space-y-4\">{selectedElementIds.length > 0 && !loading && (\r\n <>\r\n <ElementList\r\n selectedElementIds={selectedElementIds}\r\n currentElementId={currentElementId}\r\n onElementSelectAction={handleElementSelect}\r\n elementNames={elementNames}\r\n />\r\n\r\n {propertyGroups.length > 0 && (\r\n <div className=\"space-y-1\">\r\n {propertyGroups.map(group => (\r\n <PropertyGroup\r\n key={group.id}\r\n group={group}\r\n isExpanded={expandedGroups.has(group.id)}\r\n onToggleAction={toggleGroup}\r\n formatPropertyValueAction={formatPropertyValue}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n\r\n return (\r\n <>\r\n {propertiesPanelComponent}\r\n {idsLegendComponent}\r\n </>\r\n )\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementList.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/ElementList.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ElementList.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/components/viewers/bim/src/propertiesMenu/src/ElementList.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,UAAU,gBAAgB;IACxB,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC;AAED,wBAAgB,WAAW,CAAC,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,YAAiB,EAAE,EAAE,gBAAgB,qBAgD/H"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useTranslations } from "next-intl";
|
|
4
3
|
import * as LR from "lucide-react";
|
|
4
|
+
import { useTranslations } from "next-intl";
|
|
5
5
|
import { Badge } from "../../../../../ui/Badge";
|
|
6
6
|
import { Separator } from "../../../../../ui/Separator";
|
|
7
7
|
function ElementList({ selectedElementIds, currentElementId, onElementSelectAction, elementNames = {} }) {
|