@selvajs/ui 6.6.0-beta.9 → 7.0.1-beta.0
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/README.md +0 -3
- package/dist/components/ErrorScreen.svelte +1 -1
- package/dist/components/compute/AppLayout.svelte +230 -85
- package/dist/components/compute/AppLayout.svelte.d.ts +14 -2
- package/dist/components/compute/CollapsedPanelStrip.svelte +4 -2
- package/dist/components/compute/ComputeApp.svelte +6 -2
- package/dist/components/compute/ComputeApp.svelte.d.ts +1 -1
- package/dist/components/compute/ComputeMessagesDialog.svelte +3 -3
- package/dist/components/compute/ParameterPresetManager.svelte +1 -1
- package/dist/components/compute/SolveMessages.svelte +79 -88
- package/dist/components/compute/SolveMessages.svelte.d.ts +5 -0
- package/dist/components/layout/AppShell.svelte +2 -2
- package/dist/components/layout/FooterItemRenderer.svelte +2 -2
- package/dist/components/layout/FooterItemRenderer.svelte.d.ts +1 -1
- package/dist/components/layout/PageContent.svelte +3 -2
- package/dist/components/layout/PageFooter.svelte +9 -6
- package/dist/components/layout/PageHeader.svelte +3 -3
- package/dist/components/layout/SideNav.svelte +3 -3
- package/dist/components/layout/SubNav.svelte +2 -2
- package/dist/components/preview/ChartOutput.svelte +141 -50
- package/dist/components/preview/Group.svelte +9 -9
- package/dist/components/preview/HelpButton.svelte +1 -1
- package/dist/components/preview/ImageOutput.svelte +13 -10
- package/dist/components/preview/InputControl.svelte +13 -12
- package/dist/components/preview/OutputDisplay.svelte +26 -17
- package/dist/components/preview/TabBar.svelte +8 -6
- package/dist/components/preview/TabBar.svelte.d.ts +2 -0
- package/dist/components/preview/TabContent.svelte +8 -8
- package/dist/components/preview/TabLayout.svelte +6 -7
- package/dist/components/preview/inputs/CheckboxInput.svelte +1 -1
- package/dist/components/preview/inputs/ChecklistInput.svelte +5 -5
- package/dist/components/preview/inputs/ColorInput.svelte +356 -14
- package/dist/components/preview/inputs/ColorInput.svelte.d.ts +1 -0
- package/dist/components/preview/inputs/DropdownInput.svelte +3 -3
- package/dist/components/preview/inputs/FileInput.svelte +17 -12
- package/dist/components/preview/inputs/GeometryInput.svelte +4 -4
- package/dist/components/preview/inputs/GeometryInput.svelte.d.ts +1 -1
- package/dist/components/preview/inputs/NumberInput.svelte +8 -8
- package/dist/components/preview/inputs/OptionGlyph.svelte +1 -1
- package/dist/components/preview/inputs/OptionGlyph.svelte.d.ts +1 -1
- package/dist/components/preview/inputs/SegmentedInput.svelte +3 -2
- package/dist/components/preview/inputs/TextInput.svelte +5 -5
- package/dist/components/preview/inputs/TileInput.svelte +8 -5
- package/dist/components/primitives/CalculateButton.svelte +10 -4
- package/dist/components/primitives/Callout.svelte +8 -6
- package/dist/components/primitives/Callout.svelte.d.ts +4 -4
- package/dist/components/primitives/DataTable.svelte +1 -1
- package/dist/components/primitives/FilterableDropdown.svelte +13 -1
- package/dist/components/primitives/FilterableDropdown.svelte.d.ts +5 -0
- package/dist/components/primitives/ImageUploadField.svelte +1 -1
- package/dist/components/primitives/SolvingIndicator.svelte +242 -41
- package/dist/components/primitives/SolvingIndicator.svelte.d.ts +13 -5
- package/dist/components/primitives/alert-dialog/alert-dialog-content.svelte +1 -1
- package/dist/components/primitives/badge/badge.svelte +2 -2
- package/dist/components/primitives/badge/badge.svelte.d.ts +6 -6
- package/dist/components/primitives/button/button.svelte +7 -8
- package/dist/components/primitives/button/button.svelte.d.ts +19 -19
- package/dist/components/primitives/card/card.svelte +1 -1
- package/dist/components/primitives/card/card.svelte.d.ts +1 -1
- package/dist/components/primitives/checkbox/checkbox.svelte +1 -1
- package/dist/components/primitives/command/command-input.svelte +1 -1
- package/dist/components/primitives/command/command-item.svelte +1 -1
- package/dist/components/primitives/command/command-link-item.svelte +1 -1
- package/dist/components/primitives/command/command.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-checkbox-item.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-content.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-item.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-radio-item.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-sub-content.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-sub-trigger.svelte +1 -1
- package/dist/components/primitives/dialog/dialog-content.svelte +3 -3
- package/dist/components/primitives/drawer/Drawer.svelte +1 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte +31 -11
- package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +2 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-content.svelte +5 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-content.svelte.d.ts +2 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-item.svelte +4 -2
- package/dist/components/primitives/dropdown-menu/dropdown-menu-item.svelte.d.ts +2 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte +1 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte +1 -1
- package/dist/components/primitives/index.d.ts +1 -1
- package/dist/components/primitives/index.js +1 -1
- package/dist/components/primitives/input/input.svelte +2 -2
- package/dist/components/primitives/input-group/input-group-input.svelte.d.ts +1 -1
- package/dist/components/primitives/input-group/input-group.svelte +1 -1
- package/dist/components/primitives/mode-toggle/mode-toggle.svelte +2 -2
- package/dist/components/primitives/popover/popover-content.svelte +1 -1
- package/dist/components/primitives/resizable/resizable-handle.svelte +2 -2
- package/dist/components/primitives/search/search.svelte +1 -1
- package/dist/components/primitives/select/select-content.svelte +1 -1
- package/dist/components/primitives/select/select-item.svelte +1 -1
- package/dist/components/primitives/select/select-trigger.svelte +1 -1
- package/dist/components/primitives/slider/slider.svelte +1 -1
- package/dist/components/primitives/switch/switch.svelte +1 -1
- package/dist/components/primitives/tabs/tabs-list.svelte +2 -2
- package/dist/components/primitives/tabs/tabs-list.svelte.d.ts +6 -6
- package/dist/components/primitives/tabs/tabs-trigger.svelte +2 -2
- package/dist/components/primitives/tabs/tabs-trigger.svelte.d.ts +6 -6
- package/dist/components/primitives/textarea/textarea.svelte +1 -1
- package/dist/components/primitives/toggle/toggle.svelte +8 -2
- package/dist/components/primitives/toggle/toggle.svelte.d.ts +10 -4
- package/dist/components/primitives/toggle-group/toggle-group-item.svelte +1 -1
- package/dist/components/primitives/toggle-group/toggle-group.svelte +1 -1
- package/dist/components/primitives/tooltip/index.d.ts +6 -0
- package/dist/components/primitives/tooltip/index.js +8 -0
- package/dist/components/primitives/tooltip/tooltip-content.svelte +34 -0
- package/dist/components/primitives/tooltip/tooltip-content.svelte.d.ts +10 -0
- package/dist/components/primitives/tooltip/tooltip-portal.svelte +7 -0
- package/dist/components/primitives/tooltip/tooltip-portal.svelte.d.ts +4 -0
- package/dist/components/primitives/tooltip/tooltip-provider.svelte +7 -0
- package/dist/components/primitives/tooltip/tooltip-provider.svelte.d.ts +4 -0
- package/dist/components/primitives/tooltip/tooltip-trigger.svelte +7 -0
- package/dist/components/primitives/tooltip/tooltip-trigger.svelte.d.ts +4 -0
- package/dist/components/primitives/tooltip/tooltip.svelte +7 -0
- package/dist/components/primitives/tooltip/tooltip.svelte.d.ts +4 -0
- package/dist/components/viewer/MeshMetadataPanel.svelte +2 -2
- package/dist/components/viewer/SceneManager.svelte +32 -21
- package/dist/components/viewer/SceneManager.svelte.d.ts +3 -1
- package/dist/components/viewer/Viewer.svelte +128 -178
- package/dist/components/viewer/Viewer.svelte.d.ts +7 -2
- package/dist/components/viewer/ViewerDock.svelte +452 -0
- package/dist/components/viewer/ViewerDock.svelte.d.ts +42 -0
- package/dist/composables/useFooterItem.svelte.d.ts +1 -1
- package/dist/composables/useFooterItem.svelte.js +1 -1
- package/dist/compute/liveProgress.svelte.d.ts +16 -0
- package/dist/compute/liveProgress.svelte.js +90 -0
- package/dist/compute/solving.svelte.d.ts +7 -9
- package/dist/compute/solving.svelte.js +56 -48
- package/dist/constants.d.ts +6 -8
- package/dist/constants.js +8 -11
- package/dist/contexts/hostContext.svelte.d.ts +1 -1
- package/dist/features/chart/plotly-compat.d.ts +15 -0
- package/dist/features/chart/plotly-compat.js +124 -0
- package/dist/i18n/messages.d.ts +17 -0
- package/dist/i18n/messages.js +26 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/public.d.ts +1 -0
- package/dist/public.js +1 -0
- package/dist/schema/visibility-rules.d.ts +7 -1
- package/dist/schema/visibility-rules.js +17 -0
- package/dist/styles/base.css +100 -86
- package/dist/utils/color-space.d.ts +21 -0
- package/dist/utils/color-space.js +90 -0
- package/package.json +31 -23
- package/src/lib/components/ErrorScreen.svelte +1 -1
- package/src/lib/components/compute/AppLayout.svelte +231 -86
- package/src/lib/components/compute/CollapsedPanelStrip.svelte +4 -2
- package/src/lib/components/compute/ComputeApp.svelte +6 -2
- package/src/lib/components/compute/ComputeMessagesDialog.svelte +4 -4
- package/src/lib/components/compute/ParameterPresetManager.svelte +1 -1
- package/src/lib/components/compute/SolveMessages.svelte +81 -90
- package/src/lib/components/layout/AppShell.svelte +2 -2
- package/src/lib/components/layout/FooterItemRenderer.svelte +2 -2
- package/src/lib/components/layout/PageContent.svelte +3 -2
- package/src/lib/components/layout/PageFooter.svelte +9 -6
- package/src/lib/components/layout/PageHeader.svelte +3 -3
- package/src/lib/components/layout/SideNav.svelte +4 -4
- package/src/lib/components/layout/SubNav.svelte +2 -2
- package/src/lib/components/preview/ChartOutput.svelte +141 -50
- package/src/lib/components/preview/Group.svelte +9 -9
- package/src/lib/components/preview/HelpButton.svelte +1 -1
- package/src/lib/components/preview/ImageOutput.svelte +13 -10
- package/src/lib/components/preview/InputControl.svelte +13 -12
- package/src/lib/components/preview/OutputDisplay.svelte +26 -17
- package/src/lib/components/preview/TabBar.svelte +8 -6
- package/src/lib/components/preview/TabContent.svelte +8 -8
- package/src/lib/components/preview/TabLayout.svelte +6 -7
- package/src/lib/components/preview/inputs/CheckboxInput.svelte +1 -1
- package/src/lib/components/preview/inputs/ChecklistInput.svelte +5 -5
- package/src/lib/components/preview/inputs/ColorInput.svelte +356 -14
- package/src/lib/components/preview/inputs/DropdownInput.svelte +3 -3
- package/src/lib/components/preview/inputs/FileInput.svelte +17 -12
- package/src/lib/components/preview/inputs/GeometryInput.svelte +4 -4
- package/src/lib/components/preview/inputs/NumberInput.svelte +8 -8
- package/src/lib/components/preview/inputs/OptionGlyph.svelte +2 -2
- package/src/lib/components/preview/inputs/SegmentedInput.svelte +3 -2
- package/src/lib/components/preview/inputs/TextInput.svelte +5 -5
- package/src/lib/components/preview/inputs/TileInput.svelte +8 -5
- package/src/lib/components/primitives/CalculateButton.svelte +10 -4
- package/src/lib/components/primitives/Callout.svelte +9 -7
- package/src/lib/components/primitives/DataTable.svelte +1 -1
- package/src/lib/components/primitives/FilterableDropdown.svelte +14 -2
- package/src/lib/components/primitives/ImageUploadField.svelte +1 -1
- package/src/lib/components/primitives/IssueList.svelte +1 -1
- package/src/lib/components/primitives/SeverityIcon.svelte +1 -1
- package/src/lib/components/primitives/SolvingIndicator.svelte +242 -41
- package/src/lib/components/primitives/StateDisplay.svelte +1 -1
- package/src/lib/components/primitives/alert-dialog/alert-dialog-action.svelte +2 -2
- package/src/lib/components/primitives/alert-dialog/alert-dialog-cancel.svelte +2 -2
- package/src/lib/components/primitives/alert-dialog/alert-dialog-content.svelte +2 -2
- package/src/lib/components/primitives/alert-dialog/alert-dialog-description.svelte +1 -1
- package/src/lib/components/primitives/alert-dialog/alert-dialog-footer.svelte +1 -1
- package/src/lib/components/primitives/alert-dialog/alert-dialog-header.svelte +1 -1
- package/src/lib/components/primitives/alert-dialog/alert-dialog-overlay.svelte +1 -1
- package/src/lib/components/primitives/alert-dialog/alert-dialog-title.svelte +1 -1
- package/src/lib/components/primitives/badge/badge.svelte +3 -3
- package/src/lib/components/primitives/button/button.svelte +7 -8
- package/src/lib/components/primitives/button-group/button-group-separator.svelte +2 -2
- package/src/lib/components/primitives/button-group/button-group-text.svelte +1 -1
- package/src/lib/components/primitives/button-group/button-group.svelte +1 -1
- package/src/lib/components/primitives/card/card-content.svelte +1 -1
- package/src/lib/components/primitives/card/card-description.svelte +1 -1
- package/src/lib/components/primitives/card/card-footer.svelte +1 -1
- package/src/lib/components/primitives/card/card-header.svelte +1 -1
- package/src/lib/components/primitives/card/card-title.svelte +1 -1
- package/src/lib/components/primitives/card/card.svelte +2 -2
- package/src/lib/components/primitives/checkbox/checkbox.svelte +2 -2
- package/src/lib/components/primitives/command/command-dialog.svelte +2 -2
- package/src/lib/components/primitives/command/command-empty.svelte +1 -1
- package/src/lib/components/primitives/command/command-group.svelte +1 -1
- package/src/lib/components/primitives/command/command-input.svelte +3 -3
- package/src/lib/components/primitives/command/command-item.svelte +2 -2
- package/src/lib/components/primitives/command/command-link-item.svelte +2 -2
- package/src/lib/components/primitives/command/command-list.svelte +1 -1
- package/src/lib/components/primitives/command/command-separator.svelte +1 -1
- package/src/lib/components/primitives/command/command-shortcut.svelte +1 -1
- package/src/lib/components/primitives/command/command.svelte +2 -2
- package/src/lib/components/primitives/context-menu/context-menu-checkbox-item.svelte +2 -2
- package/src/lib/components/primitives/context-menu/context-menu-content.svelte +2 -2
- package/src/lib/components/primitives/context-menu/context-menu-group-heading.svelte +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-item.svelte +2 -2
- package/src/lib/components/primitives/context-menu/context-menu-label.svelte +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-radio-item.svelte +2 -2
- package/src/lib/components/primitives/context-menu/context-menu-separator.svelte +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-shortcut.svelte +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-sub-content.svelte +2 -2
- package/src/lib/components/primitives/context-menu/context-menu-sub-trigger.svelte +2 -2
- package/src/lib/components/primitives/dialog/dialog-content.svelte +4 -4
- package/src/lib/components/primitives/dialog/dialog-description.svelte +1 -1
- package/src/lib/components/primitives/dialog/dialog-footer.svelte +1 -1
- package/src/lib/components/primitives/dialog/dialog-header.svelte +1 -1
- package/src/lib/components/primitives/dialog/dialog-overlay.svelte +1 -1
- package/src/lib/components/primitives/dialog/dialog-title.svelte +1 -1
- package/src/lib/components/primitives/drawer/Drawer.svelte +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte +32 -12
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-content.svelte +6 -2
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-group-heading.svelte +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-item.svelte +5 -3
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-label.svelte +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte +2 -2
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-separator.svelte +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte +2 -2
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte +2 -2
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte +2 -2
- package/src/lib/components/primitives/empty/empty-content.svelte +1 -1
- package/src/lib/components/primitives/empty/empty-description.svelte +1 -1
- package/src/lib/components/primitives/empty/empty-header.svelte +1 -1
- package/src/lib/components/primitives/empty/empty-media.svelte +1 -1
- package/src/lib/components/primitives/empty/empty-title.svelte +1 -1
- package/src/lib/components/primitives/empty/empty.svelte +1 -1
- package/src/lib/components/primitives/field/field-content.svelte +1 -1
- package/src/lib/components/primitives/field/field-description.svelte +1 -1
- package/src/lib/components/primitives/field/field-error.svelte +1 -1
- package/src/lib/components/primitives/field/field-group.svelte +1 -1
- package/src/lib/components/primitives/field/field-label.svelte +2 -2
- package/src/lib/components/primitives/field/field-legend.svelte +1 -1
- package/src/lib/components/primitives/field/field-separator.svelte +2 -2
- package/src/lib/components/primitives/field/field-set.svelte +1 -1
- package/src/lib/components/primitives/field/field-title.svelte +1 -1
- package/src/lib/components/primitives/field/field.svelte +1 -1
- package/src/lib/components/primitives/index.ts +1 -1
- package/src/lib/components/primitives/input/input.svelte +3 -3
- package/src/lib/components/primitives/input-group/input-group-addon.svelte +1 -1
- package/src/lib/components/primitives/input-group/input-group-button.svelte +2 -2
- package/src/lib/components/primitives/input-group/input-group-input.svelte +2 -2
- package/src/lib/components/primitives/input-group/input-group-text.svelte +1 -1
- package/src/lib/components/primitives/input-group/input-group-textarea.svelte +2 -2
- package/src/lib/components/primitives/input-group/input-group.svelte +2 -2
- package/src/lib/components/primitives/label/label.svelte +1 -1
- package/src/lib/components/primitives/mode-toggle/mode-toggle.svelte +2 -2
- package/src/lib/components/primitives/popover/popover-content.svelte +2 -2
- package/src/lib/components/primitives/popover/popover-description.svelte +1 -1
- package/src/lib/components/primitives/popover/popover-header.svelte +1 -1
- package/src/lib/components/primitives/popover/popover-title.svelte +1 -1
- package/src/lib/components/primitives/popover/popover-trigger.svelte +1 -1
- package/src/lib/components/primitives/resizable/resizable-handle.svelte +3 -3
- package/src/lib/components/primitives/resizable/resizable-pane-group.svelte +1 -1
- package/src/lib/components/primitives/scroll-area/scroll-area-scrollbar.svelte +1 -1
- package/src/lib/components/primitives/scroll-area/scroll-area.svelte +1 -1
- package/src/lib/components/primitives/search/search.svelte +2 -2
- package/src/lib/components/primitives/select/select-content.svelte +2 -2
- package/src/lib/components/primitives/select/select-group-heading.svelte +1 -1
- package/src/lib/components/primitives/select/select-item.svelte +2 -2
- package/src/lib/components/primitives/select/select-label.svelte +1 -1
- package/src/lib/components/primitives/select/select-scroll-down-button.svelte +1 -1
- package/src/lib/components/primitives/select/select-scroll-up-button.svelte +1 -1
- package/src/lib/components/primitives/select/select-separator.svelte +2 -2
- package/src/lib/components/primitives/select/select-trigger.svelte +2 -2
- package/src/lib/components/primitives/separator/separator.svelte +1 -1
- package/src/lib/components/primitives/slider/slider.svelte +2 -2
- package/src/lib/components/primitives/spinner/spinner.svelte +1 -1
- package/src/lib/components/primitives/switch/switch.svelte +2 -2
- package/src/lib/components/primitives/tabs/tabs-content.svelte +1 -1
- package/src/lib/components/primitives/tabs/tabs-list.svelte +3 -3
- package/src/lib/components/primitives/tabs/tabs-trigger.svelte +3 -3
- package/src/lib/components/primitives/tabs/tabs.svelte +1 -1
- package/src/lib/components/primitives/textarea/textarea.svelte +2 -2
- package/src/lib/components/primitives/toggle/toggle.svelte +9 -3
- package/src/lib/components/primitives/toggle-group/toggle-group-item.svelte +3 -3
- package/src/lib/components/primitives/toggle-group/toggle-group.svelte +3 -3
- package/src/lib/components/primitives/tooltip/index.ts +19 -0
- package/src/lib/components/primitives/tooltip/tooltip-content.svelte +34 -0
- package/src/lib/components/primitives/tooltip/tooltip-portal.svelte +7 -0
- package/src/lib/components/primitives/tooltip/tooltip-provider.svelte +7 -0
- package/src/lib/components/primitives/tooltip/tooltip-trigger.svelte +7 -0
- package/src/lib/components/primitives/tooltip/tooltip.svelte +7 -0
- package/src/lib/components/viewer/MeshMetadataPanel.svelte +2 -2
- package/src/lib/components/viewer/SceneManager.svelte +32 -21
- package/src/lib/components/viewer/Viewer.svelte +129 -179
- package/src/lib/components/viewer/ViewerDock.svelte +452 -0
- package/src/lib/composables/useFooterItem.svelte.ts +1 -1
- package/src/lib/compute/liveProgress.svelte.ts +103 -0
- package/src/lib/compute/solving.svelte.ts +56 -55
- package/src/lib/constants.ts +8 -11
- package/src/lib/contexts/hostContext.svelte.ts +1 -1
- package/src/lib/features/chart/plotly-compat.ts +141 -0
- package/src/lib/i18n/messages.ts +43 -0
- package/src/lib/index.ts +2 -0
- package/src/lib/public.ts +1 -0
- package/src/lib/schema/visibility-rules.ts +27 -1
- package/src/lib/styles/base.css +100 -86
- package/src/lib/utils/color-space.ts +107 -0
- package/dist/components/primitives/theme-switcher/ThemeSwitcher.svelte +0 -39
- package/dist/components/primitives/theme-switcher/ThemeSwitcher.svelte.d.ts +0 -3
- package/dist/components/primitives/theme-switcher/index.d.ts +0 -1
- package/dist/components/primitives/theme-switcher/index.js +0 -1
- package/dist/styles/themes/cyberpunk.css +0 -98
- package/dist/styles/themes/neutral.css +0 -72
- package/dist/styles/themes/ocean.css +0 -75
- package/dist/styles/themes/selva.css +0 -105
- package/dist/theme/themeStore.svelte.d.ts +0 -12
- package/dist/theme/themeStore.svelte.js +0 -40
- package/dist/theme/themes.d.ts +0 -5
- package/dist/theme/themes.js +0 -13
- package/src/lib/components/primitives/theme-switcher/ThemeSwitcher.svelte +0 -39
- package/src/lib/components/primitives/theme-switcher/index.ts +0 -1
- package/src/lib/styles/themes/cyberpunk.css +0 -98
- package/src/lib/styles/themes/neutral.css +0 -72
- package/src/lib/styles/themes/ocean.css +0 -75
- package/src/lib/styles/themes/selva.css +0 -105
- package/src/lib/theme/themeStore.svelte.ts +0 -50
- package/src/lib/theme/themes.ts +0 -18
|
@@ -15,32 +15,18 @@
|
|
|
15
15
|
type Grid,
|
|
16
16
|
type ThreeViewer
|
|
17
17
|
} from '@selvajs/visualization/render';
|
|
18
|
-
import {
|
|
19
|
-
Maximize,
|
|
20
|
-
Minimize,
|
|
21
|
-
Camera,
|
|
22
|
-
Layers,
|
|
23
|
-
Settings2,
|
|
24
|
-
Box,
|
|
25
|
-
Square,
|
|
26
|
-
Frame,
|
|
27
|
-
Ruler,
|
|
28
|
-
Grid3x3,
|
|
29
|
-
Palette,
|
|
30
|
-
Spline
|
|
31
|
-
} from '@lucide/svelte';
|
|
32
18
|
import { SvelteSet } from 'svelte/reactivity';
|
|
33
19
|
import type * as THREE from 'three';
|
|
34
20
|
import type { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
|
|
35
21
|
import { createSceneOutliner, type SceneOutliner } from '@selvajs/visualization/scene';
|
|
22
|
+
import { clearGeometryCache } from '@selvajs/visualization/parse';
|
|
36
23
|
import SceneManager from './SceneManager.svelte';
|
|
24
|
+
import ViewerDock from './ViewerDock.svelte';
|
|
37
25
|
import MeshMetadataPanel from './MeshMetadataPanel.svelte';
|
|
38
|
-
import * as Resizable from '
|
|
39
|
-
import
|
|
40
|
-
import {
|
|
41
|
-
import
|
|
42
|
-
import { layerLocaleContext } from '$lib/i18n/localeContext.svelte';
|
|
43
|
-
import { saveBlob } from '$lib/utils/host-files';
|
|
26
|
+
import * as Resizable from '#lib/components/primitives/resizable/index.js';
|
|
27
|
+
import type { Locale } from '#lib/i18n/messages.js';
|
|
28
|
+
import { layerLocaleContext } from '#lib/i18n/localeContext.svelte.js';
|
|
29
|
+
import { saveBlob } from '#lib/utils/host-files.js';
|
|
44
30
|
|
|
45
31
|
export interface ViewerConfig {
|
|
46
32
|
showScreenshotButton?: boolean;
|
|
@@ -51,6 +37,8 @@
|
|
|
51
37
|
showDisplayMenu?: boolean;
|
|
52
38
|
enableMeshClick?: boolean;
|
|
53
39
|
backgroundColor?: string;
|
|
40
|
+
/** The look to open in. Default `technical`. */
|
|
41
|
+
look?: Look;
|
|
54
42
|
/** Initial state of the edge overlay and its display-menu checkmark. Default false. */
|
|
55
43
|
showEdges?: boolean;
|
|
56
44
|
}
|
|
@@ -58,7 +46,10 @@
|
|
|
58
46
|
interface Props {
|
|
59
47
|
meshes: any[];
|
|
60
48
|
isFullscreen?: boolean;
|
|
49
|
+
/** @deprecated Ignored: the panel's solve status shows a running solve. */
|
|
61
50
|
isSolving?: boolean;
|
|
51
|
+
/** @deprecated Ignored, like `isSolving`. */
|
|
52
|
+
isSlow?: boolean;
|
|
62
53
|
isBlurred?: boolean;
|
|
63
54
|
drawerOpen?: boolean;
|
|
64
55
|
viewerConfig?: ViewerConfig;
|
|
@@ -87,13 +78,13 @@
|
|
|
87
78
|
showDisplayMenu: true,
|
|
88
79
|
enableMeshClick: true,
|
|
89
80
|
backgroundColor: '#E6E6E6',
|
|
81
|
+
look: 'technical',
|
|
90
82
|
showEdges: false
|
|
91
83
|
};
|
|
92
84
|
|
|
93
85
|
let {
|
|
94
86
|
meshes,
|
|
95
87
|
isFullscreen = $bindable(false),
|
|
96
|
-
isSolving = false,
|
|
97
88
|
isBlurred = false,
|
|
98
89
|
drawerOpen = false,
|
|
99
90
|
viewerConfig = {},
|
|
@@ -119,11 +110,14 @@
|
|
|
119
110
|
let clearEdges: ThreeViewer['clearEdges'] | null = null;
|
|
120
111
|
let invalidate: (() => void) | null = null;
|
|
121
112
|
let captureImage: ThreeViewer['captureImage'] | null = null;
|
|
122
|
-
let setLook:
|
|
113
|
+
let setLook: ThreeViewer['setLook'] | null = null;
|
|
114
|
+
let syncEmissiveLights: (() => void) | null = null;
|
|
123
115
|
let updateGridScale: (() => void) | null = null;
|
|
124
116
|
let updateShadowBounds: (() => void) | null = null;
|
|
125
117
|
let fitToView: (() => void) | null = null;
|
|
126
118
|
let clearSelection: (() => void) | null = null;
|
|
119
|
+
let selectEntries: ThreeViewer['selectEntries'] | null = null;
|
|
120
|
+
let setHover: ThreeViewer['setHover'] | null = null;
|
|
127
121
|
let viewerInitialized = false;
|
|
128
122
|
let sceneVersion = $state(0);
|
|
129
123
|
let hideButton = $state(false);
|
|
@@ -138,9 +132,16 @@
|
|
|
138
132
|
let projection: CameraProjection = $state('perspective');
|
|
139
133
|
let measureActive = $state(false);
|
|
140
134
|
let gridVisible = $state(false);
|
|
141
|
-
|
|
135
|
+
// A saved schema can name a look this build doesn't have, and an unknown look throws on mount.
|
|
136
|
+
const openingLook = untrack(() => {
|
|
137
|
+
const look = viewerConfig.look;
|
|
138
|
+
return look && LOOKS.includes(look) ? look : defaultViewerConfig.look;
|
|
139
|
+
});
|
|
140
|
+
const opensAsLineDrawing = LOOK_PRESETS[openingLook].requiresEdges === true;
|
|
141
|
+
const configuredEdges = untrack(() => viewerConfig.showEdges) ?? defaultViewerConfig.showEdges;
|
|
142
|
+
let renderStyle: Look = $state(openingLook);
|
|
142
143
|
// Seeded once, then owned by the menu toggle.
|
|
143
|
-
let edgesVisible = $state(
|
|
144
|
+
let edgesVisible = $state(opensAsLineDrawing || configuredEdges);
|
|
144
145
|
let selectedMeshMetadata: Record<string, any> | null = $state(null);
|
|
145
146
|
let selectedMeshName: string | null = $state(null);
|
|
146
147
|
|
|
@@ -153,14 +154,20 @@
|
|
|
153
154
|
arctic: t.lookArctic,
|
|
154
155
|
xray: t.lookXray,
|
|
155
156
|
lineart: t.lookLineart,
|
|
156
|
-
wireframe: t.lookWireframe
|
|
157
|
+
wireframe: t.lookWireframe,
|
|
158
|
+
night: t.lookNight
|
|
157
159
|
});
|
|
160
|
+
// Night has its own toggle, so it stays out of the radio list.
|
|
158
161
|
const styleOptions = $derived<{ look: Look; label: string }[]>(
|
|
159
|
-
LOOKS.map((look) => ({
|
|
162
|
+
LOOKS.filter((look) => look !== 'night').map((look) => ({
|
|
160
163
|
look,
|
|
161
164
|
label: lookLabels[look] ?? look.charAt(0).toUpperCase() + look.slice(1)
|
|
162
165
|
}))
|
|
163
166
|
);
|
|
167
|
+
const nightOn = $derived(renderStyle === 'night');
|
|
168
|
+
|
|
169
|
+
// What the night toggle returns to.
|
|
170
|
+
let dayLook: Look = $state(openingLook === 'night' ? defaultViewerConfig.look : openingLook);
|
|
164
171
|
|
|
165
172
|
const VIEW_PRESETS: { preset: ViewPreset; label: () => string }[] = [
|
|
166
173
|
{ preset: 'top', label: () => t.viewTop },
|
|
@@ -198,8 +205,8 @@
|
|
|
198
205
|
events: {
|
|
199
206
|
// Fires before onMeshMetadataClicked, so picking an object without metadata closes the
|
|
200
207
|
// previous object's panel instead of leaving it describing the wrong thing.
|
|
201
|
-
onObjectSelected:
|
|
202
|
-
onBackgroundClicked:
|
|
208
|
+
onObjectSelected: dropPanelSelection,
|
|
209
|
+
onBackgroundClicked: dropPanelSelection,
|
|
203
210
|
onMeshMetadataClicked: config.enableMeshClick
|
|
204
211
|
? (metadata: Record<string, unknown>) => {
|
|
205
212
|
if (hasUsefulMetadata(metadata)) {
|
|
@@ -227,25 +234,25 @@
|
|
|
227
234
|
invalidate = init.invalidate;
|
|
228
235
|
captureImage = init.captureImage;
|
|
229
236
|
setLook = init.setLook;
|
|
237
|
+
syncEmissiveLights = init.syncEmissiveLights;
|
|
230
238
|
updateGridScale = init.updateGridScale;
|
|
231
239
|
updateShadowBounds = init.updateShadowBounds;
|
|
232
240
|
fitToView = init.fitToView;
|
|
233
241
|
clearSelection = init.clearSelection;
|
|
242
|
+
selectEntries = init.selectEntries;
|
|
243
|
+
setHover = init.setHover;
|
|
234
244
|
projection = init.cameraController.getProjection();
|
|
235
245
|
|
|
236
|
-
const renderer = init.renderer;
|
|
237
|
-
|
|
238
246
|
// Untracked so the host reading `meshes` or config inside its setup can't re-run onMount's teardown.
|
|
239
247
|
const hostCleanup = untrack(() => onViewerReady?.(init));
|
|
240
248
|
|
|
241
249
|
return () => {
|
|
242
250
|
// Before dispose, so the host can still remove its own objects from a live scene.
|
|
243
251
|
hostCleanup?.();
|
|
252
|
+
// Also frees the GL context: a second forceContextLoss() here hits an already-lost one.
|
|
244
253
|
init.dispose();
|
|
245
|
-
//
|
|
246
|
-
|
|
247
|
-
// drop this one so the GPU-side context is released now rather than at GC.
|
|
248
|
-
renderer.forceContextLoss();
|
|
254
|
+
// Parsed geometry outlives the viewer otherwise: the cache is page-wide.
|
|
255
|
+
clearGeometryCache();
|
|
249
256
|
};
|
|
250
257
|
});
|
|
251
258
|
|
|
@@ -273,12 +280,13 @@
|
|
|
273
280
|
|
|
274
281
|
// Edges the lineart look switched on, so leaving it can put the user's own choice back rather
|
|
275
282
|
// than stranding them with overlays they never asked for.
|
|
276
|
-
let edgesBeforeLineDrawing: boolean | null = null;
|
|
283
|
+
let edgesBeforeLineDrawing: boolean | null = opensAsLineDrawing ? configuredEdges : null;
|
|
277
284
|
|
|
278
285
|
function setRenderStyle(look: Look) {
|
|
279
286
|
if (!setLook || look === renderStyle) return;
|
|
280
287
|
const wasLineDrawing = LOOK_PRESETS[renderStyle].requiresEdges === true;
|
|
281
288
|
renderStyle = look;
|
|
289
|
+
if (look !== 'night') dayLook = look;
|
|
282
290
|
setLook(look);
|
|
283
291
|
|
|
284
292
|
// A look never drives the overlay itself; honouring `requiresEdges` is the host's call. Without
|
|
@@ -344,6 +352,10 @@
|
|
|
344
352
|
else clearEdges?.(scene);
|
|
345
353
|
}
|
|
346
354
|
|
|
355
|
+
function toggleNight() {
|
|
356
|
+
setRenderStyle(nightOn ? dayLook : 'night');
|
|
357
|
+
}
|
|
358
|
+
|
|
347
359
|
function toggleEdges() {
|
|
348
360
|
edgesVisible = !edgesVisible;
|
|
349
361
|
// Toggling by hand inside lineart overrides what that look forced, so the pre-look value is
|
|
@@ -360,7 +372,8 @@
|
|
|
360
372
|
untrack(() => {
|
|
361
373
|
// The new meshes carry the materials the parser built, so a look that overrides them
|
|
362
374
|
// (arctic, x-ray) has to be re-applied or the solve silently reverts to shaded.
|
|
363
|
-
|
|
375
|
+
// Emissive lights wait for `applyTo` below, or a hidden lamp would count as lit.
|
|
376
|
+
setLook?.(renderStyle, { deferEmissiveLights: true });
|
|
364
377
|
// updateScene discarded the previous solve's overlays along with its content.
|
|
365
378
|
if (edgesVisible) applyEdges?.(scene!, edgeOverrides());
|
|
366
379
|
// Rescale the grid so cells and fade match the new content's extent.
|
|
@@ -371,6 +384,7 @@
|
|
|
371
384
|
// The rebuild un-hid everything; the outliner keys hidden state on Grasshopper
|
|
372
385
|
// identity, not on the instances just discarded, so it can re-hide it.
|
|
373
386
|
outliner?.applyTo();
|
|
387
|
+
syncEmissiveLights?.();
|
|
374
388
|
sceneVersion++;
|
|
375
389
|
// Repaint now rather than on the render loop's safety interval.
|
|
376
390
|
invalidate?.();
|
|
@@ -387,6 +401,24 @@
|
|
|
387
401
|
selectedMeshName = null;
|
|
388
402
|
}
|
|
389
403
|
|
|
404
|
+
// A click on the canvas replaces whatever the panel selected: one selection at a time.
|
|
405
|
+
function dropPanelSelection() {
|
|
406
|
+
closeMetadata();
|
|
407
|
+
selectedObjects.clear();
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
// Mirrors the panel's selection into the viewport. The size check skips walking the entries for
|
|
411
|
+
// the common empty case, which also keeps `has()` from subscribing to every key.
|
|
412
|
+
$effect(() => {
|
|
413
|
+
if (selectedObjects.size === 0) {
|
|
414
|
+
selectEntries?.([]);
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
const chosen = outliner?.entries().filter((entry) => selectedObjects.has(entry.key)) ?? [];
|
|
418
|
+
closeMetadata();
|
|
419
|
+
selectEntries?.(chosen);
|
|
420
|
+
});
|
|
421
|
+
|
|
390
422
|
function dismissMetadata() {
|
|
391
423
|
closeMetadata();
|
|
392
424
|
clearSelection?.();
|
|
@@ -409,6 +441,27 @@
|
|
|
409
441
|
isFullscreen = !isFullscreen;
|
|
410
442
|
}
|
|
411
443
|
|
|
444
|
+
// Single letters; F (fit) is handled by the canvas itself. Held back while typing, e.g. in the
|
|
445
|
+
// scene manager's search box.
|
|
446
|
+
const SHORTCUTS: Record<string, () => void> = {
|
|
447
|
+
o: toggleProjection,
|
|
448
|
+
m: toggleMeasure,
|
|
449
|
+
g: toggleGrid,
|
|
450
|
+
n: toggleNight,
|
|
451
|
+
e: toggleEdges,
|
|
452
|
+
s: () => (sceneManagerOpen = !sceneManagerOpen)
|
|
453
|
+
};
|
|
454
|
+
|
|
455
|
+
function handleShortcut(event: KeyboardEvent) {
|
|
456
|
+
if (event.ctrlKey || event.metaKey || event.altKey || event.repeat) return;
|
|
457
|
+
const target = event.target as HTMLElement;
|
|
458
|
+
if (target.closest('input, textarea, select, [contenteditable]')) return;
|
|
459
|
+
const action = SHORTCUTS[event.key.toLowerCase()];
|
|
460
|
+
if (!action) return;
|
|
461
|
+
event.preventDefault();
|
|
462
|
+
action();
|
|
463
|
+
}
|
|
464
|
+
|
|
412
465
|
function hasUsefulMetadata(metadata: Record<string, any>): boolean {
|
|
413
466
|
if (!metadata) return false;
|
|
414
467
|
|
|
@@ -439,10 +492,13 @@
|
|
|
439
492
|
}
|
|
440
493
|
</script>
|
|
441
494
|
|
|
495
|
+
<!-- Key events bubble up from the focused canvas or any control inside; the div itself is not interactive. -->
|
|
496
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
442
497
|
<div
|
|
443
498
|
class="min-h-64 sm:min-h-96 lg:min-h-125 relative h-full flex-1 border {isFullscreen
|
|
444
499
|
? 'fullscreen-viewer'
|
|
445
500
|
: 'overflow-hidden rounded-lg'}"
|
|
501
|
+
onkeydown={handleShortcut}
|
|
446
502
|
>
|
|
447
503
|
<Resizable.PaneGroup direction="horizontal" class="h-full w-full">
|
|
448
504
|
<!-- `defaultSize` must sum to 100 across the live panes. Panes register a frame before the
|
|
@@ -456,7 +512,7 @@
|
|
|
456
512
|
the DOM, so this is the only observable proof a solve's geometry decoded and
|
|
457
513
|
rendered; e2e asserts on it. -->
|
|
458
514
|
<canvas
|
|
459
|
-
class="viewer-canvas block h-full w-full select-none"
|
|
515
|
+
class="viewer-canvas block h-full w-full outline-none select-none"
|
|
460
516
|
data-testid="viewer-canvas"
|
|
461
517
|
data-mesh-count={meshes.length}
|
|
462
518
|
bind:this={canvas}
|
|
@@ -468,10 +524,6 @@
|
|
|
468
524
|
: 'blur-overlay-inactive'}"
|
|
469
525
|
></div>
|
|
470
526
|
|
|
471
|
-
{#if isSolving}
|
|
472
|
-
<div class="inset-0 animate-in fade-in backdrop-blur-xs absolute z-10 duration-200"></div>
|
|
473
|
-
{/if}
|
|
474
|
-
|
|
475
527
|
{#if logoUrl}
|
|
476
528
|
<!-- pointer-events:none so it never intercepts canvas drags. -->
|
|
477
529
|
<div
|
|
@@ -497,143 +549,36 @@
|
|
|
497
549
|
{/if}
|
|
498
550
|
|
|
499
551
|
{#if config.showToolsMenu}
|
|
500
|
-
<
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
<DropdownMenu.Item onSelect={() => fitToView?.()}>
|
|
531
|
-
<Frame />
|
|
532
|
-
{t.fitToView}
|
|
533
|
-
</DropdownMenu.Item>
|
|
534
|
-
|
|
535
|
-
<DropdownMenu.Sub>
|
|
536
|
-
<DropdownMenu.SubTrigger>
|
|
537
|
-
<Box />
|
|
538
|
-
{t.views}
|
|
539
|
-
</DropdownMenu.SubTrigger>
|
|
540
|
-
<DropdownMenu.SubContent class="z-10001">
|
|
541
|
-
{#each VIEW_PRESETS as { preset, label } (preset)}
|
|
542
|
-
<DropdownMenu.Item onSelect={() => setView(preset)}
|
|
543
|
-
>{label()}</DropdownMenu.Item
|
|
544
|
-
>
|
|
545
|
-
{/each}
|
|
546
|
-
</DropdownMenu.SubContent>
|
|
547
|
-
</DropdownMenu.Sub>
|
|
548
|
-
|
|
549
|
-
{#if config.showDisplayMenu}
|
|
550
|
-
<DropdownMenu.Sub>
|
|
551
|
-
<DropdownMenu.SubTrigger>
|
|
552
|
-
<Palette />
|
|
553
|
-
{t.display}
|
|
554
|
-
</DropdownMenu.SubTrigger>
|
|
555
|
-
<DropdownMenu.SubContent class="min-w-40 z-10001">
|
|
556
|
-
<DropdownMenu.RadioGroup
|
|
557
|
-
value={renderStyle}
|
|
558
|
-
onValueChange={(look) => setRenderStyle(look as typeof renderStyle)}
|
|
559
|
-
>
|
|
560
|
-
{#each styleOptions as { look, label } (look)}
|
|
561
|
-
<DropdownMenu.RadioItem value={look} closeOnSelect={false}>
|
|
562
|
-
{label}
|
|
563
|
-
</DropdownMenu.RadioItem>
|
|
564
|
-
{/each}
|
|
565
|
-
</DropdownMenu.RadioGroup>
|
|
566
|
-
<DropdownMenu.Separator />
|
|
567
|
-
<DropdownMenu.CheckboxItem
|
|
568
|
-
checked={edgesVisible}
|
|
569
|
-
onCheckedChange={toggleEdges}
|
|
570
|
-
>
|
|
571
|
-
<Spline />
|
|
572
|
-
{t.edges}
|
|
573
|
-
</DropdownMenu.CheckboxItem>
|
|
574
|
-
</DropdownMenu.SubContent>
|
|
575
|
-
</DropdownMenu.Sub>
|
|
576
|
-
{/if}
|
|
577
|
-
|
|
578
|
-
<DropdownMenu.CheckboxItem checked={measureActive} onCheckedChange={toggleMeasure}>
|
|
579
|
-
<Ruler />
|
|
580
|
-
{t.measure}
|
|
581
|
-
</DropdownMenu.CheckboxItem>
|
|
582
|
-
|
|
583
|
-
{#if config.showGridToggle}
|
|
584
|
-
<DropdownMenu.CheckboxItem checked={gridVisible} onCheckedChange={toggleGrid}>
|
|
585
|
-
<Grid3x3 />
|
|
586
|
-
{t.grid}
|
|
587
|
-
</DropdownMenu.CheckboxItem>
|
|
588
|
-
{/if}
|
|
589
|
-
|
|
590
|
-
{#if config.showSceneManager || config.showScreenshotButton || config.showFullscreenButton}
|
|
591
|
-
<DropdownMenu.Separator />
|
|
592
|
-
{/if}
|
|
593
|
-
|
|
594
|
-
{#if config.showSceneManager}
|
|
595
|
-
<DropdownMenu.CheckboxItem
|
|
596
|
-
checked={sceneManagerOpen}
|
|
597
|
-
onCheckedChange={() => (sceneManagerOpen = !sceneManagerOpen)}
|
|
598
|
-
>
|
|
599
|
-
<Layers />
|
|
600
|
-
{t.sceneManager}
|
|
601
|
-
</DropdownMenu.CheckboxItem>
|
|
602
|
-
{/if}
|
|
603
|
-
|
|
604
|
-
{#if config.showScreenshotButton}
|
|
605
|
-
<DropdownMenu.Item onSelect={downloadScreenshot}>
|
|
606
|
-
<Camera />
|
|
607
|
-
{t.screenshot}
|
|
608
|
-
</DropdownMenu.Item>
|
|
609
|
-
{/if}
|
|
610
|
-
|
|
611
|
-
{#if config.showFullscreenButton}
|
|
612
|
-
<DropdownMenu.Item onSelect={toggleFullscreen}>
|
|
613
|
-
{#if isFullscreen}
|
|
614
|
-
<Minimize />
|
|
615
|
-
{t.exitFullscreen}
|
|
616
|
-
{:else}
|
|
617
|
-
<Maximize />
|
|
618
|
-
{t.fullscreen}
|
|
619
|
-
{/if}
|
|
620
|
-
</DropdownMenu.Item>
|
|
621
|
-
{/if}
|
|
622
|
-
</DropdownMenu.Content>
|
|
623
|
-
</DropdownMenu.Root>
|
|
624
|
-
<!-- Touch has no F key, and fit-to-view is the way back from a framed part. -->
|
|
625
|
-
<div class="hidden pointer-coarse:block">
|
|
626
|
-
<Button
|
|
627
|
-
variant="overlay"
|
|
628
|
-
size="icon-lg"
|
|
629
|
-
title={t.fitToView}
|
|
630
|
-
aria-label={t.fitToView}
|
|
631
|
-
onclick={() => fitToView?.()}
|
|
632
|
-
>
|
|
633
|
-
<Frame />
|
|
634
|
-
</Button>
|
|
635
|
-
</div>
|
|
636
|
-
</div>
|
|
552
|
+
<ViewerDock
|
|
553
|
+
{t}
|
|
554
|
+
hidden={hideButton}
|
|
555
|
+
showDisplay={config.showDisplayMenu}
|
|
556
|
+
showGrid={config.showGridToggle}
|
|
557
|
+
showSceneManager={config.showSceneManager}
|
|
558
|
+
showScreenshot={config.showScreenshotButton}
|
|
559
|
+
showFullscreen={config.showFullscreenButton}
|
|
560
|
+
{styleOptions}
|
|
561
|
+
viewPresets={VIEW_PRESETS.map(({ preset, label }) => ({ preset, label: label() }))}
|
|
562
|
+
{renderStyle}
|
|
563
|
+
{nightOn}
|
|
564
|
+
{edgesVisible}
|
|
565
|
+
{measureActive}
|
|
566
|
+
{gridVisible}
|
|
567
|
+
{sceneManagerOpen}
|
|
568
|
+
{projection}
|
|
569
|
+
{isFullscreen}
|
|
570
|
+
onSetLook={setRenderStyle}
|
|
571
|
+
onToggleNight={toggleNight}
|
|
572
|
+
onToggleEdges={toggleEdges}
|
|
573
|
+
onToggleMeasure={toggleMeasure}
|
|
574
|
+
onToggleGrid={toggleGrid}
|
|
575
|
+
onToggleSceneManager={() => (sceneManagerOpen = !sceneManagerOpen)}
|
|
576
|
+
onToggleProjection={toggleProjection}
|
|
577
|
+
onSetView={setView}
|
|
578
|
+
onFit={() => fitToView?.()}
|
|
579
|
+
onScreenshot={downloadScreenshot}
|
|
580
|
+
onToggleFullscreen={toggleFullscreen}
|
|
581
|
+
/>
|
|
637
582
|
{/if}
|
|
638
583
|
</div>
|
|
639
584
|
</Resizable.Pane>
|
|
@@ -641,7 +586,12 @@
|
|
|
641
586
|
{#if sceneManagerOpen && scene && outliner}
|
|
642
587
|
<Resizable.Handle withHandle />
|
|
643
588
|
<Resizable.Pane id="scene-manager" order={2} defaultSize={15} minSize={8} maxSize={30}>
|
|
644
|
-
<SceneManager
|
|
589
|
+
<SceneManager
|
|
590
|
+
{outliner}
|
|
591
|
+
{sceneVersion}
|
|
592
|
+
onVisibilityChange={() => syncEmissiveLights?.()}
|
|
593
|
+
onHover={(entry) => setHover?.(entry?.object ?? null, entry?.memberIndex ?? null)}
|
|
594
|
+
/>
|
|
645
595
|
</Resizable.Pane>
|
|
646
596
|
{/if}
|
|
647
597
|
</Resizable.PaneGroup>
|