@selvajs/ui 6.6.0-beta.2 → 6.6.0-beta.20
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 +7 -3
- package/dist/components/compute/AppLayout.svelte +307 -123
- package/dist/components/compute/AppLayout.svelte.d.ts +28 -0
- package/dist/components/compute/CollapsedPanelStrip.svelte +4 -2
- package/dist/components/compute/ComputeApp.svelte +46 -22
- package/dist/components/compute/ComputeApp.svelte.d.ts +20 -3
- package/dist/components/compute/ComputeMessagesDialog.svelte +31 -41
- package/dist/components/compute/ParameterPresetManager.svelte +16 -65
- package/dist/components/compute/ParameterPresetManager.svelte.d.ts +4 -5
- package/dist/components/compute/SolveMessages.svelte +128 -121
- package/dist/components/compute/SolveMessages.svelte.d.ts +12 -12
- package/dist/components/layout/AppShell.svelte +10 -6
- 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 +26 -14
- package/dist/components/layout/PageHeader.svelte +14 -10
- package/dist/components/layout/SectionHeader.svelte +4 -2
- package/dist/components/layout/SideNav.svelte +57 -8
- package/dist/components/layout/SubNav.svelte +2 -2
- package/dist/components/preview/ChartOutput.svelte +131 -65
- package/dist/components/preview/Group.svelte +42 -22
- package/dist/components/preview/HelpButton.svelte +5 -3
- package/dist/components/preview/ImageOutput.svelte +435 -71
- package/dist/components/preview/InputControl.svelte +125 -51
- package/dist/components/preview/InputControl.svelte.d.ts +5 -1
- package/dist/components/preview/OutputDisplay.svelte +42 -28
- package/dist/components/preview/TabBar.svelte +8 -6
- package/dist/components/preview/TabBar.svelte.d.ts +2 -0
- package/dist/components/preview/TabContent.svelte +66 -31
- package/dist/components/preview/TabContent.svelte.d.ts +5 -1
- package/dist/components/preview/TabLayout.svelte +29 -8
- package/dist/components/preview/TabLayout.svelte.d.ts +5 -0
- package/dist/components/preview/inputs/CheckboxInput.svelte +1 -1
- package/dist/components/preview/inputs/ChecklistInput.svelte +11 -6
- package/dist/components/preview/inputs/ChecklistInput.svelte.d.ts +2 -1
- package/dist/components/preview/inputs/ColorInput.svelte +357 -13
- package/dist/components/preview/inputs/ColorInput.svelte.d.ts +2 -0
- package/dist/components/preview/inputs/DropdownInput.svelte +20 -5
- package/dist/components/preview/inputs/DropdownInput.svelte.d.ts +2 -1
- package/dist/components/preview/inputs/FileInput.svelte +115 -103
- package/dist/components/preview/inputs/GeometryInput.svelte +128 -0
- package/dist/components/preview/inputs/GeometryInput.svelte.d.ts +21 -0
- package/dist/components/preview/inputs/NumberInput.svelte +98 -16
- package/dist/components/preview/inputs/NumberInput.svelte.d.ts +2 -0
- package/dist/components/preview/inputs/OptionGlyph.svelte +29 -0
- package/dist/components/preview/inputs/OptionGlyph.svelte.d.ts +8 -0
- package/dist/components/preview/inputs/SegmentedInput.svelte +45 -0
- package/dist/components/preview/inputs/SegmentedInput.svelte.d.ts +12 -0
- package/dist/components/preview/inputs/TextInput.svelte +11 -6
- package/dist/components/preview/inputs/TileInput.svelte +83 -0
- package/dist/components/preview/inputs/TileInput.svelte.d.ts +12 -0
- package/dist/components/preview/inputs/index.d.ts +3 -0
- package/dist/components/preview/inputs/index.js +3 -0
- package/dist/components/primitives/CalculateButton.svelte +56 -24
- package/dist/components/primitives/CalculateButton.svelte.d.ts +3 -0
- package/dist/components/primitives/Callout.svelte +8 -6
- package/dist/components/primitives/Callout.svelte.d.ts +4 -4
- package/dist/components/primitives/DataTable.svelte +38 -4
- package/dist/components/primitives/DataTable.svelte.d.ts +2 -0
- 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 +245 -15
- package/dist/components/primitives/SolvingIndicator.svelte.d.ts +15 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-content.svelte +1 -1
- package/dist/components/primitives/badge/badge.svelte +4 -4
- package/dist/components/primitives/badge/badge.svelte.d.ts +10 -10
- package/dist/components/primitives/button/button.svelte +10 -8
- package/dist/components/primitives/button/button.svelte.d.ts +20 -17
- 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 +7 -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 +4 -4
- 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 +5 -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/scroll-area/scroll-area.svelte +1 -1
- package/dist/components/primitives/search/search.svelte +2 -2
- 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 +8 -3
- package/dist/components/primitives/slider/slider.svelte.d.ts +5 -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 +3 -3
- package/dist/components/primitives/tabs/tabs-trigger.svelte.d.ts +7 -7
- package/dist/components/primitives/textarea/textarea.svelte +1 -1
- package/dist/components/primitives/toggle/toggle.svelte +11 -3
- package/dist/components/primitives/toggle/toggle.svelte.d.ts +13 -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 +119 -0
- package/dist/components/viewer/MeshMetadataPanel.svelte.d.ts +9 -0
- package/dist/components/viewer/SceneManager.svelte +32 -21
- package/dist/components/viewer/SceneManager.svelte.d.ts +3 -1
- package/dist/components/viewer/Viewer.svelte +195 -207
- package/dist/components/viewer/Viewer.svelte.d.ts +7 -2
- package/dist/components/viewer/ViewerDock.svelte +404 -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/run-panel-action.d.ts +8 -0
- package/dist/compute/run-panel-action.js +12 -0
- package/dist/compute/solving.svelte.d.ts +11 -7
- package/dist/compute/solving.svelte.js +64 -45
- package/dist/compute/useSolveSession.svelte.js +3 -0
- package/dist/constants.d.ts +6 -8
- package/dist/constants.js +8 -11
- package/dist/contexts/hostContext.svelte.d.ts +39 -0
- package/dist/contexts/hostContext.svelte.js +9 -0
- package/dist/features/chart/plotly-compat.d.ts +15 -0
- package/dist/features/chart/plotly-compat.js +124 -0
- package/dist/i18n/localeContext.svelte.d.ts +10 -3
- package/dist/i18n/localeContext.svelte.js +27 -5
- package/dist/i18n/messages.d.ts +164 -2
- package/dist/i18n/messages.js +281 -11
- package/dist/index.d.ts +6 -1
- package/dist/index.js +5 -0
- package/dist/public.d.ts +2 -1
- package/dist/public.js +1 -0
- package/dist/schema/host-support.d.ts +29 -0
- package/dist/schema/host-support.js +97 -0
- package/dist/schema/option-display.d.ts +12 -0
- package/dist/schema/option-display.js +29 -0
- package/dist/schema/param-exporter.d.ts +4 -1
- package/dist/schema/param-exporter.js +10 -6
- package/dist/schema/visibility-rules.d.ts +7 -1
- package/dist/schema/visibility-rules.js +38 -0
- package/dist/styles/base.css +116 -83
- package/dist/types/actionButton.d.ts +17 -3
- package/dist/types/presetLabels.d.ts +3 -2
- package/dist/types/presetLabels.js +9 -8
- package/dist/utils/color-space.d.ts +21 -0
- package/dist/utils/color-space.js +90 -0
- package/dist/utils/file-download.js +10 -22
- package/dist/utils/host-files.d.ts +12 -0
- package/dist/utils/host-files.js +46 -0
- package/dist/utils/loadScript.d.ts +2 -0
- package/dist/utils/loadScript.js +2 -0
- package/dist/utils/webp-to-png.d.ts +10 -0
- package/dist/utils/webp-to-png.js +41 -0
- package/package.json +30 -22
- package/src/lib/components/ErrorScreen.svelte +7 -3
- package/src/lib/components/compute/AppLayout.svelte +307 -123
- package/src/lib/components/compute/CollapsedPanelStrip.svelte +4 -2
- package/src/lib/components/compute/ComputeApp.svelte +46 -22
- package/src/lib/components/compute/ComputeMessagesDialog.svelte +32 -42
- package/src/lib/components/compute/ParameterPresetManager.svelte +16 -65
- package/src/lib/components/compute/SolveMessages.svelte +130 -123
- package/src/lib/components/layout/AppShell.svelte +10 -6
- 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 +26 -14
- package/src/lib/components/layout/PageHeader.svelte +14 -10
- package/src/lib/components/layout/SectionHeader.svelte +4 -2
- package/src/lib/components/layout/SideNav.svelte +57 -8
- package/src/lib/components/layout/SubNav.svelte +2 -2
- package/src/lib/components/preview/ChartOutput.svelte +131 -65
- package/src/lib/components/preview/Group.svelte +42 -22
- package/src/lib/components/preview/HelpButton.svelte +5 -3
- package/src/lib/components/preview/ImageOutput.svelte +435 -71
- package/src/lib/components/preview/InputControl.svelte +125 -51
- package/src/lib/components/preview/OutputDisplay.svelte +42 -28
- package/src/lib/components/preview/TabBar.svelte +8 -6
- package/src/lib/components/preview/TabContent.svelte +66 -31
- package/src/lib/components/preview/TabLayout.svelte +29 -8
- package/src/lib/components/preview/inputs/CheckboxInput.svelte +1 -1
- package/src/lib/components/preview/inputs/ChecklistInput.svelte +11 -6
- package/src/lib/components/preview/inputs/ColorInput.svelte +357 -13
- package/src/lib/components/preview/inputs/DropdownInput.svelte +20 -5
- package/src/lib/components/preview/inputs/FileInput.svelte +115 -103
- package/src/lib/components/preview/inputs/GeometryInput.svelte +128 -0
- package/src/lib/components/preview/inputs/NumberInput.svelte +98 -16
- package/src/lib/components/preview/inputs/OptionGlyph.svelte +29 -0
- package/src/lib/components/preview/inputs/SegmentedInput.svelte +45 -0
- package/src/lib/components/preview/inputs/TextInput.svelte +11 -6
- package/src/lib/components/preview/inputs/TileInput.svelte +83 -0
- package/src/lib/components/preview/inputs/index.ts +3 -0
- package/src/lib/components/primitives/CalculateButton.svelte +56 -24
- package/src/lib/components/primitives/Callout.svelte +9 -7
- package/src/lib/components/primitives/DataTable.svelte +38 -4
- 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 +245 -15
- 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 +5 -5
- package/src/lib/components/primitives/button/button.svelte +10 -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 +8 -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 +5 -5
- 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 +5 -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 +2 -2
- package/src/lib/components/primitives/search/search.svelte +3 -3
- 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 +9 -4
- 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 +4 -4
- 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 +12 -4
- 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 +119 -0
- package/src/lib/components/viewer/SceneManager.svelte +32 -21
- package/src/lib/components/viewer/Viewer.svelte +196 -208
- package/src/lib/components/viewer/ViewerDock.svelte +404 -0
- package/src/lib/composables/useFooterItem.svelte.ts +1 -1
- package/src/lib/compute/liveProgress.svelte.ts +103 -0
- package/src/lib/compute/run-panel-action.ts +16 -0
- package/src/lib/compute/solving.svelte.ts +66 -50
- package/src/lib/compute/useSolveSession.svelte.ts +3 -0
- package/src/lib/constants.ts +8 -11
- package/src/lib/contexts/hostContext.svelte.ts +51 -0
- package/src/lib/features/chart/plotly-compat.ts +141 -0
- package/src/lib/i18n/localeContext.svelte.ts +40 -5
- package/src/lib/i18n/messages.ts +487 -13
- package/src/lib/index.ts +23 -0
- package/src/lib/public.ts +2 -0
- package/src/lib/schema/host-support.ts +129 -0
- package/src/lib/schema/option-display.ts +44 -0
- package/src/lib/schema/param-exporter.ts +10 -7
- package/src/lib/schema/visibility-rules.ts +50 -1
- package/src/lib/styles/base.css +116 -83
- package/src/lib/types/actionButton.ts +16 -3
- package/src/lib/types/presetLabels.ts +13 -11
- package/src/lib/utils/color-space.ts +107 -0
- package/src/lib/utils/file-download.ts +11 -21
- package/src/lib/utils/host-files.ts +61 -0
- package/src/lib/utils/loadScript.ts +3 -0
- package/src/lib/utils/webp-to-png.ts +48 -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/components/viewer/MeshMetadataDialog.svelte +0 -126
- package/dist/components/viewer/MeshMetadataDialog.svelte.d.ts +0 -10
- 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/components/viewer/MeshMetadataDialog.svelte +0 -126
- 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
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
base: 'inline-flex items-center text-muted-foreground',
|
|
6
6
|
variants: {
|
|
7
7
|
variant: {
|
|
8
|
-
default: 'h-9 w-fit justify-center rounded-
|
|
9
|
-
line: 'gap-1 px-
|
|
8
|
+
default: 'h-9 w-fit justify-center rounded-md bg-muted p-0.5',
|
|
9
|
+
line: 'gap-1 px-1 w-full justify-start'
|
|
10
10
|
}
|
|
11
11
|
},
|
|
12
12
|
defaultVariants: {
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { type VariantProps } from 'tailwind-variants';
|
|
2
2
|
export declare const tabsListVariants: import("tailwind-variants").TVReturnType<{
|
|
3
3
|
variant: {
|
|
4
|
-
default: "h-9 w-fit justify-center rounded-
|
|
5
|
-
line: "gap-1 px-
|
|
4
|
+
default: "h-9 w-fit justify-center rounded-md bg-muted p-0.5";
|
|
5
|
+
line: "gap-1 px-1 w-full justify-start";
|
|
6
6
|
};
|
|
7
7
|
}, undefined, "inline-flex items-center text-muted-foreground", {
|
|
8
8
|
variant: {
|
|
9
|
-
default: "h-9 w-fit justify-center rounded-
|
|
10
|
-
line: "gap-1 px-
|
|
9
|
+
default: "h-9 w-fit justify-center rounded-md bg-muted p-0.5";
|
|
10
|
+
line: "gap-1 px-1 w-full justify-start";
|
|
11
11
|
};
|
|
12
12
|
}, undefined, import("tailwind-variants").TVReturnTypeLike<{
|
|
13
13
|
variant: {
|
|
14
|
-
default: "h-9 w-fit justify-center rounded-
|
|
15
|
-
line: "gap-1 px-
|
|
14
|
+
default: "h-9 w-fit justify-center rounded-md bg-muted p-0.5";
|
|
15
|
+
line: "gap-1 px-1 w-full justify-start";
|
|
16
16
|
};
|
|
17
17
|
}, undefined>>;
|
|
18
18
|
export type TabsListVariant = VariantProps<typeof tabsListVariants>['variant'];
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
import { type VariantProps, tv } from 'tailwind-variants';
|
|
3
3
|
|
|
4
4
|
export const tabsTriggerVariants = tv({
|
|
5
|
-
base: "gap-1.5 text-sm font-medium [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap focus-visible:ring-3 focus-visible:ring-ring
|
|
5
|
+
base: "gap-1.5 text-sm font-medium [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap focus-visible:ring-3 focus-visible:ring-ring focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
6
6
|
variants: {
|
|
7
7
|
variant: {
|
|
8
8
|
default:
|
|
9
|
-
'px-2 py-1 data-[state=active]:shadow-sm h-full flex-1 rounded-
|
|
10
|
-
line: 'px-2.5 py-
|
|
9
|
+
'px-2 py-1 data-[state=active]:shadow-sm h-full flex-1 rounded-inner border border-transparent text-foreground transition focus-visible:border-ring data-[state=active]:bg-raised dark:text-muted-foreground data-[state=active]:border-border-strong dark:data-[state=active]:text-foreground',
|
|
10
|
+
line: 'px-2.5 py-2.5 relative flex-none text-muted-foreground transition-colors after:absolute after:inset-x-2 after:bottom-0 after:h-0.5 after:rounded-full hover:text-foreground data-[state=active]:text-foreground data-[state=active]:after:bg-primary'
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
13
|
defaultVariants: {
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { type VariantProps } from 'tailwind-variants';
|
|
2
2
|
export declare const tabsTriggerVariants: import("tailwind-variants").TVReturnType<{
|
|
3
3
|
variant: {
|
|
4
|
-
default: "px-2 py-1 data-[state=active]:shadow-sm h-full flex-1 rounded-
|
|
5
|
-
line: "px-2.5 py-
|
|
4
|
+
default: "px-2 py-1 data-[state=active]:shadow-sm h-full flex-1 rounded-inner border border-transparent text-foreground transition focus-visible:border-ring data-[state=active]:bg-raised dark:text-muted-foreground data-[state=active]:border-border-strong dark:data-[state=active]:text-foreground";
|
|
5
|
+
line: "px-2.5 py-2.5 relative flex-none text-muted-foreground transition-colors after:absolute after:inset-x-2 after:bottom-0 after:h-0.5 after:rounded-full hover:text-foreground data-[state=active]:text-foreground data-[state=active]:after:bg-primary";
|
|
6
6
|
};
|
|
7
|
-
}, undefined, "gap-1.5 text-sm font-medium [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap focus-visible:ring-3 focus-visible:ring-ring
|
|
7
|
+
}, undefined, "gap-1.5 text-sm font-medium [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap focus-visible:ring-3 focus-visible:ring-ring focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0", {
|
|
8
8
|
variant: {
|
|
9
|
-
default: "px-2 py-1 data-[state=active]:shadow-sm h-full flex-1 rounded-
|
|
10
|
-
line: "px-2.5 py-
|
|
9
|
+
default: "px-2 py-1 data-[state=active]:shadow-sm h-full flex-1 rounded-inner border border-transparent text-foreground transition focus-visible:border-ring data-[state=active]:bg-raised dark:text-muted-foreground data-[state=active]:border-border-strong dark:data-[state=active]:text-foreground";
|
|
10
|
+
line: "px-2.5 py-2.5 relative flex-none text-muted-foreground transition-colors after:absolute after:inset-x-2 after:bottom-0 after:h-0.5 after:rounded-full hover:text-foreground data-[state=active]:text-foreground data-[state=active]:after:bg-primary";
|
|
11
11
|
};
|
|
12
12
|
}, undefined, import("tailwind-variants").TVReturnTypeLike<{
|
|
13
13
|
variant: {
|
|
14
|
-
default: "px-2 py-1 data-[state=active]:shadow-sm h-full flex-1 rounded-
|
|
15
|
-
line: "px-2.5 py-
|
|
14
|
+
default: "px-2 py-1 data-[state=active]:shadow-sm h-full flex-1 rounded-inner border border-transparent text-foreground transition focus-visible:border-ring data-[state=active]:bg-raised dark:text-muted-foreground data-[state=active]:border-border-strong dark:data-[state=active]:text-foreground";
|
|
15
|
+
line: "px-2.5 py-2.5 relative flex-none text-muted-foreground transition-colors after:absolute after:inset-x-2 after:bottom-0 after:h-0.5 after:rounded-full hover:text-foreground data-[state=active]:text-foreground data-[state=active]:after:bg-primary";
|
|
16
16
|
};
|
|
17
17
|
}, undefined>>;
|
|
18
18
|
export type TabsTriggerVariant = VariantProps<typeof tabsTriggerVariants>['variant'];
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
bind:this={ref}
|
|
16
16
|
data-slot={dataSlot}
|
|
17
17
|
class={cn(
|
|
18
|
-
'min-h-16 px-3 py-2 text-base shadow-xs md:text-sm flex field-sizing-content w-full rounded-md border border-input bg-
|
|
18
|
+
'min-h-16 px-3 py-2 text-base shadow-xs md:text-sm flex field-sizing-content w-full rounded-md border border-input bg-field transition outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40',
|
|
19
19
|
className
|
|
20
20
|
)}
|
|
21
21
|
bind:value
|
|
@@ -2,17 +2,25 @@
|
|
|
2
2
|
import { type VariantProps, tv } from 'tailwind-variants';
|
|
3
3
|
|
|
4
4
|
export const toggleVariants = tv({
|
|
5
|
-
base: "hover:text-foreground aria-pressed:bg-
|
|
5
|
+
base: "hover:text-foreground aria-pressed:bg-selected focus-visible:border-ring focus-visible:ring-ring aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[state=on]:bg-selected gap-1 rounded-md text-sm font-medium transition-all [&_svg:not([class*='size-'])]:size-4 group/toggle inline-flex items-center justify-center whitespace-nowrap outline-none hover:bg-hover focus-visible:ring-3 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
6
6
|
variants: {
|
|
7
7
|
variant: {
|
|
8
8
|
default: 'bg-transparent',
|
|
9
|
-
|
|
9
|
+
// Item inside a segmented track: the chosen value sits raised above the track.
|
|
10
|
+
segmented:
|
|
11
|
+
'rounded-inner bg-transparent text-muted-foreground data-[state=on]:bg-raised data-[state=on]:text-foreground data-[state=on]:shadow-raised data-[state=on]:ring-1 data-[state=on]:ring-border-strong',
|
|
12
|
+
outline: 'border-input hover:bg-hover border bg-field',
|
|
13
|
+
// Filled accent for the active item; a bare bg-muted is too faint on a form.
|
|
14
|
+
accent:
|
|
15
|
+
'border-input hover:bg-hover border bg-transparent data-[state=on]:bg-primary/15 data-[state=on]:ring-1 data-[state=on]:ring-primary data-[state=on]:ring-inset'
|
|
10
16
|
},
|
|
11
17
|
size: {
|
|
12
18
|
default:
|
|
13
19
|
'h-8 min-w-8 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',
|
|
14
20
|
sm: "h-7 min-w-7 rounded-md px-2.5 text-xs has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
|
|
15
|
-
lg: 'h-9 min-w-9 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2'
|
|
21
|
+
lg: 'h-9 min-w-9 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',
|
|
22
|
+
// Icon over a short label, so a row of options still fits a phone-width column.
|
|
23
|
+
stacked: 'min-h-12 min-w-0 flex-col gap-1 px-1 py-1.5 text-xs'
|
|
16
24
|
}
|
|
17
25
|
},
|
|
18
26
|
defaultVariants: {
|
|
@@ -2,32 +2,41 @@ import { type VariantProps } from 'tailwind-variants';
|
|
|
2
2
|
export declare const toggleVariants: import("tailwind-variants").TVReturnType<{
|
|
3
3
|
variant: {
|
|
4
4
|
default: "bg-transparent";
|
|
5
|
-
|
|
5
|
+
segmented: "rounded-inner bg-transparent text-muted-foreground data-[state=on]:bg-raised data-[state=on]:text-foreground data-[state=on]:shadow-raised data-[state=on]:ring-1 data-[state=on]:ring-border-strong";
|
|
6
|
+
outline: "border-input hover:bg-hover border bg-field";
|
|
7
|
+
accent: "border-input hover:bg-hover border bg-transparent data-[state=on]:bg-primary/15 data-[state=on]:ring-1 data-[state=on]:ring-primary data-[state=on]:ring-inset";
|
|
6
8
|
};
|
|
7
9
|
size: {
|
|
8
10
|
default: "h-8 min-w-8 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2";
|
|
9
11
|
sm: "h-7 min-w-7 rounded-md px-2.5 text-xs has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5";
|
|
10
12
|
lg: "h-9 min-w-9 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2";
|
|
13
|
+
stacked: "min-h-12 min-w-0 flex-col gap-1 px-1 py-1.5 text-xs";
|
|
11
14
|
};
|
|
12
|
-
}, undefined, "hover:text-foreground aria-pressed:bg-
|
|
15
|
+
}, undefined, "hover:text-foreground aria-pressed:bg-selected focus-visible:border-ring focus-visible:ring-ring aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[state=on]:bg-selected gap-1 rounded-md text-sm font-medium transition-all [&_svg:not([class*='size-'])]:size-4 group/toggle inline-flex items-center justify-center whitespace-nowrap outline-none hover:bg-hover focus-visible:ring-3 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0", {
|
|
13
16
|
variant: {
|
|
14
17
|
default: "bg-transparent";
|
|
15
|
-
|
|
18
|
+
segmented: "rounded-inner bg-transparent text-muted-foreground data-[state=on]:bg-raised data-[state=on]:text-foreground data-[state=on]:shadow-raised data-[state=on]:ring-1 data-[state=on]:ring-border-strong";
|
|
19
|
+
outline: "border-input hover:bg-hover border bg-field";
|
|
20
|
+
accent: "border-input hover:bg-hover border bg-transparent data-[state=on]:bg-primary/15 data-[state=on]:ring-1 data-[state=on]:ring-primary data-[state=on]:ring-inset";
|
|
16
21
|
};
|
|
17
22
|
size: {
|
|
18
23
|
default: "h-8 min-w-8 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2";
|
|
19
24
|
sm: "h-7 min-w-7 rounded-md px-2.5 text-xs has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5";
|
|
20
25
|
lg: "h-9 min-w-9 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2";
|
|
26
|
+
stacked: "min-h-12 min-w-0 flex-col gap-1 px-1 py-1.5 text-xs";
|
|
21
27
|
};
|
|
22
28
|
}, undefined, import("tailwind-variants").TVReturnTypeLike<{
|
|
23
29
|
variant: {
|
|
24
30
|
default: "bg-transparent";
|
|
25
|
-
|
|
31
|
+
segmented: "rounded-inner bg-transparent text-muted-foreground data-[state=on]:bg-raised data-[state=on]:text-foreground data-[state=on]:shadow-raised data-[state=on]:ring-1 data-[state=on]:ring-border-strong";
|
|
32
|
+
outline: "border-input hover:bg-hover border bg-field";
|
|
33
|
+
accent: "border-input hover:bg-hover border bg-transparent data-[state=on]:bg-primary/15 data-[state=on]:ring-1 data-[state=on]:ring-primary data-[state=on]:ring-inset";
|
|
26
34
|
};
|
|
27
35
|
size: {
|
|
28
36
|
default: "h-8 min-w-8 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2";
|
|
29
37
|
sm: "h-7 min-w-7 rounded-md px-2.5 text-xs has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5";
|
|
30
38
|
lg: "h-9 min-w-9 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2";
|
|
39
|
+
stacked: "min-h-12 min-w-0 flex-col gap-1 px-1 py-1.5 text-xs";
|
|
31
40
|
};
|
|
32
41
|
}, undefined>>;
|
|
33
42
|
export type ToggleVariant = VariantProps<typeof toggleVariants>['variant'];
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
data-size={ctx.size || size}
|
|
24
24
|
data-spacing={ctx.spacing}
|
|
25
25
|
class={cn(
|
|
26
|
-
'group-data-[spacing=0]/toggle-group:px-2 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-1.5 shrink-0 group-data-[spacing=0]/toggle-group:rounded-none focus:z-10 focus-visible:z-10 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-
|
|
26
|
+
'group-data-[spacing=0]/toggle-group:px-2 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-1.5 shrink-0 group-data-[spacing=0]/toggle-group:rounded-none focus:z-10 focus-visible:z-10 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:first:rounded-l-md group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:first:rounded-t-md group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:last:rounded-r-md group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:last:rounded-b-md group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=accent]:border-l-0 group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=accent]:border-t-0 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=accent]:first:border-l group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=accent]:first:border-t group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t',
|
|
27
27
|
toggleVariants({
|
|
28
28
|
variant: ctx.variant || variant,
|
|
29
29
|
size: ctx.size || size
|
|
@@ -68,7 +68,7 @@ get along, so we shut typescript up by casting `value` to `never`.
|
|
|
68
68
|
data-spacing={spacing}
|
|
69
69
|
style="--gap: calc(var(--spacing) * {spacing})"
|
|
70
70
|
class={cn(
|
|
71
|
-
'group/toggle-group flex w-fit flex-row items-center gap-(--gap) rounded-
|
|
71
|
+
'group/toggle-group data-[variant=segmented]:p-0.5 flex w-fit flex-row items-center gap-(--gap) rounded-md data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch data-[variant=segmented]:rounded-lg data-[variant=segmented]:border data-[variant=segmented]:border-input data-[variant=segmented]:bg-muted',
|
|
72
72
|
className
|
|
73
73
|
)}
|
|
74
74
|
{...restProps}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import Content from './tooltip-content.svelte';
|
|
2
|
+
import Portal from './tooltip-portal.svelte';
|
|
3
|
+
import Provider from './tooltip-provider.svelte';
|
|
4
|
+
import Trigger from './tooltip-trigger.svelte';
|
|
5
|
+
import Root from './tooltip.svelte';
|
|
6
|
+
export { Root, Content, Provider, Portal, Trigger, Root as Tooltip, Content as TooltipContent, Provider as TooltipProvider, Portal as TooltipPortal, Trigger as TooltipTrigger };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import Content from './tooltip-content.svelte';
|
|
2
|
+
import Portal from './tooltip-portal.svelte';
|
|
3
|
+
import Provider from './tooltip-provider.svelte';
|
|
4
|
+
import Trigger from './tooltip-trigger.svelte';
|
|
5
|
+
import Root from './tooltip.svelte';
|
|
6
|
+
export { Root, Content, Provider, Portal, Trigger,
|
|
7
|
+
//
|
|
8
|
+
Root as Tooltip, Content as TooltipContent, Provider as TooltipProvider, Portal as TooltipPortal, Trigger as TooltipTrigger };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { Tooltip as TooltipPrimitive } from 'bits-ui';
|
|
3
|
+
import { cn, type WithoutChildrenOrChild } from '../../../utils.js';
|
|
4
|
+
import TooltipPortal from './tooltip-portal.svelte';
|
|
5
|
+
import type { ComponentProps } from 'svelte';
|
|
6
|
+
|
|
7
|
+
let {
|
|
8
|
+
ref = $bindable(null),
|
|
9
|
+
class: className,
|
|
10
|
+
sideOffset = 6,
|
|
11
|
+
side = 'top',
|
|
12
|
+
children,
|
|
13
|
+
portalProps,
|
|
14
|
+
...restProps
|
|
15
|
+
}: TooltipPrimitive.ContentProps & {
|
|
16
|
+
portalProps?: WithoutChildrenOrChild<ComponentProps<typeof TooltipPortal>>;
|
|
17
|
+
} = $props();
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<TooltipPortal {...portalProps}>
|
|
21
|
+
<TooltipPrimitive.Content
|
|
22
|
+
bind:ref
|
|
23
|
+
data-slot="tooltip-content"
|
|
24
|
+
{sideOffset}
|
|
25
|
+
{side}
|
|
26
|
+
class={cn(
|
|
27
|
+
'data-[state=delayed-open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=delayed-open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=delayed-open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 px-2.5 py-1.5 text-xs font-medium z-50 w-fit origin-(--bits-tooltip-content-transform-origin) rounded-md bg-foreground text-balance text-background',
|
|
28
|
+
className
|
|
29
|
+
)}
|
|
30
|
+
{...restProps}
|
|
31
|
+
>
|
|
32
|
+
{@render children?.()}
|
|
33
|
+
</TooltipPrimitive.Content>
|
|
34
|
+
</TooltipPortal>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Tooltip as TooltipPrimitive } from 'bits-ui';
|
|
2
|
+
import { type WithoutChildrenOrChild } from '../../../utils.js';
|
|
3
|
+
import TooltipPortal from './tooltip-portal.svelte';
|
|
4
|
+
import type { ComponentProps } from 'svelte';
|
|
5
|
+
type $$ComponentProps = TooltipPrimitive.ContentProps & {
|
|
6
|
+
portalProps?: WithoutChildrenOrChild<ComponentProps<typeof TooltipPortal>>;
|
|
7
|
+
};
|
|
8
|
+
declare const TooltipContent: import("svelte").Component<$$ComponentProps, {}, "ref">;
|
|
9
|
+
type TooltipContent = ReturnType<typeof TooltipContent>;
|
|
10
|
+
export default TooltipContent;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { X } from '@lucide/svelte';
|
|
3
|
+
import { Button } from '../primitives/button/index.js';
|
|
4
|
+
import { getLocaleContext } from '../../i18n/localeContext.svelte.js';
|
|
5
|
+
|
|
6
|
+
const locale = getLocaleContext();
|
|
7
|
+
const t = $derived(locale.messages);
|
|
8
|
+
|
|
9
|
+
interface Props {
|
|
10
|
+
metadata: Record<string, any>;
|
|
11
|
+
meshName: string | null;
|
|
12
|
+
onClose: () => void;
|
|
13
|
+
class?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const EXCLUDED_KEYS = new Set(['name', 'layer', 'id']);
|
|
17
|
+
|
|
18
|
+
let { metadata, meshName, onClose, class: className = '' }: Props = $props();
|
|
19
|
+
|
|
20
|
+
const filteredMetadata = $derived.by(() => {
|
|
21
|
+
const result: Record<string, unknown> = {};
|
|
22
|
+
for (const [key, value] of Object.entries(metadata)) {
|
|
23
|
+
if (EXCLUDED_KEYS.has(key)) continue;
|
|
24
|
+
if (
|
|
25
|
+
key === 'metadata' &&
|
|
26
|
+
typeof value === 'object' &&
|
|
27
|
+
value !== null &&
|
|
28
|
+
!Array.isArray(value)
|
|
29
|
+
) {
|
|
30
|
+
Object.assign(result, value);
|
|
31
|
+
} else {
|
|
32
|
+
result[key] = value;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
});
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<!-- Not a modal: a modal locks the page, and on touch the tap that should dismiss it can race the
|
|
40
|
+
dialog's own dismiss handler, leaving the viewer frozen. A card lets the canvas keep orbiting. -->
|
|
41
|
+
<section
|
|
42
|
+
aria-label={meshName ?? t.objectFallbackName}
|
|
43
|
+
class="min-h-0 shadow-lg backdrop-blur-sm flex flex-col overflow-hidden rounded-lg border bg-background/95 {className}"
|
|
44
|
+
>
|
|
45
|
+
<header class="gap-2 py-1 pr-1 pl-4 flex items-center border-b">
|
|
46
|
+
<h2 class="text-sm font-semibold min-w-0 flex-1 truncate">
|
|
47
|
+
{meshName ?? t.objectFallbackName}
|
|
48
|
+
</h2>
|
|
49
|
+
<Button
|
|
50
|
+
variant="ghost"
|
|
51
|
+
size="icon-sm"
|
|
52
|
+
class="pointer-coarse:size-10 shrink-0"
|
|
53
|
+
aria-label={t.close}
|
|
54
|
+
title={t.close}
|
|
55
|
+
onclick={onClose}
|
|
56
|
+
>
|
|
57
|
+
<X />
|
|
58
|
+
</Button>
|
|
59
|
+
</header>
|
|
60
|
+
|
|
61
|
+
<div class="min-h-0 overflow-y-auto overscroll-contain">
|
|
62
|
+
{#if Object.keys(filteredMetadata).length === 0}
|
|
63
|
+
<p class="px-4 py-3 text-xs text-muted-foreground">{t.noMetadata}</p>
|
|
64
|
+
{:else}
|
|
65
|
+
<table class="text-xs w-full border-collapse">
|
|
66
|
+
<tbody>
|
|
67
|
+
{#each Object.entries(filteredMetadata) as [key, value] (key)}
|
|
68
|
+
<tr class="border-b border-border last:border-b-0">
|
|
69
|
+
<th
|
|
70
|
+
scope="row"
|
|
71
|
+
class="px-4 py-2 font-normal text-left align-top whitespace-nowrap text-muted-foreground"
|
|
72
|
+
>{key}</th
|
|
73
|
+
>
|
|
74
|
+
<td class="px-4 py-2 text-right align-top text-foreground">
|
|
75
|
+
{#if typeof value === 'object' && value !== null}
|
|
76
|
+
{#if Array.isArray(value)}
|
|
77
|
+
<div class="space-y-1 text-left">
|
|
78
|
+
{#each value as item, index (index)}
|
|
79
|
+
{#if typeof item === 'object'}
|
|
80
|
+
<div class="space-y-0.5">
|
|
81
|
+
{#each Object.entries(item) as [k, v] (k)}
|
|
82
|
+
<div class="gap-2 flex">
|
|
83
|
+
<span class="shrink-0 text-muted-foreground">{k}:</span>
|
|
84
|
+
<span>{v}</span>
|
|
85
|
+
</div>
|
|
86
|
+
{/each}
|
|
87
|
+
</div>
|
|
88
|
+
{:else}
|
|
89
|
+
<div>{item}</div>
|
|
90
|
+
{/if}
|
|
91
|
+
{/each}
|
|
92
|
+
</div>
|
|
93
|
+
{:else}
|
|
94
|
+
<div class="space-y-0.5 text-left">
|
|
95
|
+
{#each Object.entries(value) as [k, v] (k)}
|
|
96
|
+
<div class="gap-2 flex">
|
|
97
|
+
<span class="shrink-0 text-muted-foreground">{k}:</span>
|
|
98
|
+
<span>{v}</span>
|
|
99
|
+
</div>
|
|
100
|
+
{/each}
|
|
101
|
+
</div>
|
|
102
|
+
{/if}
|
|
103
|
+
{:else if typeof value === 'number'}
|
|
104
|
+
<span class="font-mono">{value}</span>
|
|
105
|
+
{:else if typeof value === 'boolean'}
|
|
106
|
+
<span class={value ? 'text-success' : 'text-muted-foreground'}
|
|
107
|
+
>{value ? 'true' : 'false'}</span
|
|
108
|
+
>
|
|
109
|
+
{:else}
|
|
110
|
+
<span class="break-all">{value}</span>
|
|
111
|
+
{/if}
|
|
112
|
+
</td>
|
|
113
|
+
</tr>
|
|
114
|
+
{/each}
|
|
115
|
+
</tbody>
|
|
116
|
+
</table>
|
|
117
|
+
{/if}
|
|
118
|
+
</div>
|
|
119
|
+
</section>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
metadata: Record<string, any>;
|
|
3
|
+
meshName: string | null;
|
|
4
|
+
onClose: () => void;
|
|
5
|
+
class?: string;
|
|
6
|
+
}
|
|
7
|
+
declare const MeshMetadataPanel: import("svelte").Component<Props, {}, "">;
|
|
8
|
+
type MeshMetadataPanel = ReturnType<typeof MeshMetadataPanel>;
|
|
9
|
+
export default MeshMetadataPanel;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
type SceneEntry,
|
|
15
15
|
type SceneOutliner
|
|
16
16
|
} from '@selvajs/visualization/scene';
|
|
17
|
-
import { getLocaleContext } from '../../i18n/localeContext.svelte';
|
|
17
|
+
import { getLocaleContext } from '../../i18n/localeContext.svelte.js';
|
|
18
18
|
|
|
19
19
|
const locale = getLocaleContext();
|
|
20
20
|
const t = $derived(locale.messages);
|
|
@@ -33,9 +33,11 @@
|
|
|
33
33
|
* repaint, so the row updates instantly and the geometry lags behind.
|
|
34
34
|
*/
|
|
35
35
|
onVisibilityChange?: () => void;
|
|
36
|
+
/** The entry under the pointer, or null once it leaves. Drives the viewport preview tint. */
|
|
37
|
+
onHover?: (entry: SceneEntry | null) => void;
|
|
36
38
|
}
|
|
37
39
|
|
|
38
|
-
let { outliner, sceneVersion = 0, onVisibilityChange }: Props = $props();
|
|
40
|
+
let { outliner, sceneVersion = 0, onVisibilityChange, onHover }: Props = $props();
|
|
39
41
|
|
|
40
42
|
// A partially hidden layer hides the rest; only a fully hidden one comes back — the same rule
|
|
41
43
|
// `visibility.toggleLayer` applies to objects, restated over entries because a layer's rows are
|
|
@@ -51,6 +53,13 @@
|
|
|
51
53
|
onVisibilityChange?.();
|
|
52
54
|
};
|
|
53
55
|
|
|
56
|
+
// A solve or closing the panel removes the row without a mouseleave, which would leave the
|
|
57
|
+
// preview tint stuck on the viewport.
|
|
58
|
+
$effect(() => {
|
|
59
|
+
void sceneVersion;
|
|
60
|
+
return () => onHover?.(null);
|
|
61
|
+
});
|
|
62
|
+
|
|
54
63
|
// Derived, not destructured: the prop is reassignable, and these must follow it.
|
|
55
64
|
const hidden = $derived(outliner.visibility.hidden);
|
|
56
65
|
const selected = $derived(outliner.selection.selected);
|
|
@@ -216,16 +225,16 @@
|
|
|
216
225
|
onmousedown={() => outliner.selection.clear()}
|
|
217
226
|
>
|
|
218
227
|
<div class="px-3 py-2 gap-2 flex items-center border-b border-border">
|
|
219
|
-
<Search class="h-3.5 w-3.5 shrink-0 text-
|
|
228
|
+
<Search class="h-3.5 w-3.5 shrink-0 text-faint-foreground" />
|
|
220
229
|
<input
|
|
221
|
-
class="min-w-0 text-xs flex-1 bg-transparent text-foreground outline-none placeholder:text-
|
|
230
|
+
class="min-w-0 text-xs flex-1 bg-transparent text-foreground outline-none placeholder:text-faint-foreground"
|
|
222
231
|
placeholder={t.searchObjects}
|
|
223
232
|
bind:value={searchQuery}
|
|
224
233
|
/>
|
|
225
234
|
{#if searchQuery}
|
|
226
235
|
<button onclick={() => (searchQuery = '')} aria-label={t.clearSearch}>
|
|
227
236
|
<X
|
|
228
|
-
class="h-3.5 w-3.5 text-
|
|
237
|
+
class="h-3.5 w-3.5 text-faint-foreground transition-colors hover:text-muted-foreground"
|
|
229
238
|
/>
|
|
230
239
|
</button>
|
|
231
240
|
{/if}
|
|
@@ -238,11 +247,11 @@
|
|
|
238
247
|
>
|
|
239
248
|
{#if allCollapsed}
|
|
240
249
|
<ChevronsUpDown
|
|
241
|
-
class="h-3.5 w-3.5 text-
|
|
250
|
+
class="h-3.5 w-3.5 text-faint-foreground transition-colors hover:text-muted-foreground"
|
|
242
251
|
/>
|
|
243
252
|
{:else}
|
|
244
253
|
<ChevronsDownUp
|
|
245
|
-
class="h-3.5 w-3.5 text-
|
|
254
|
+
class="h-3.5 w-3.5 text-faint-foreground transition-colors hover:text-muted-foreground"
|
|
246
255
|
/>
|
|
247
256
|
{/if}
|
|
248
257
|
</button>
|
|
@@ -276,10 +285,10 @@
|
|
|
276
285
|
{@const isCollapsed = collapsed.has(row.layerName)}
|
|
277
286
|
|
|
278
287
|
<div
|
|
279
|
-
class="gap-1 pl-1 pr-2 group flex h-full items-center transition-colors hover:bg-
|
|
288
|
+
class="gap-1 pl-1 pr-2 group flex h-full items-center transition-colors hover:bg-hover"
|
|
280
289
|
>
|
|
281
290
|
<button
|
|
282
|
-
class="
|
|
291
|
+
class="p-0.5 shrink-0 rounded-sm text-muted-foreground transition-colors hover:text-muted-foreground"
|
|
283
292
|
onclick={() => outliner.toggleCollapsed(row.layerName)}
|
|
284
293
|
aria-label={isCollapsed ? t.expandLayer : t.collapseLayer}
|
|
285
294
|
>
|
|
@@ -291,15 +300,15 @@
|
|
|
291
300
|
</button>
|
|
292
301
|
|
|
293
302
|
<button
|
|
294
|
-
class="
|
|
303
|
+
class="p-1 shrink-0 rounded-sm transition-colors hover:bg-hover"
|
|
295
304
|
onclick={() => toggleLayer(entries)}
|
|
296
305
|
title={layerHidden ? t.showLayer : t.hideLayer}
|
|
297
306
|
aria-label={layerHidden ? t.showLayer : t.hideLayer}
|
|
298
307
|
>
|
|
299
308
|
{#if layerHidden}
|
|
300
|
-
<EyeOff class="h-3.5 w-3.5 text-
|
|
309
|
+
<EyeOff class="h-3.5 w-3.5 text-faint-foreground" />
|
|
301
310
|
{:else if layerPartial}
|
|
302
|
-
<Eye class="h-3.5 w-3.5 text-
|
|
311
|
+
<Eye class="h-3.5 w-3.5 text-faint-foreground" />
|
|
303
312
|
{:else}
|
|
304
313
|
<Eye class="h-3.5 w-3.5 text-muted-foreground" />
|
|
305
314
|
{/if}
|
|
@@ -307,13 +316,13 @@
|
|
|
307
316
|
|
|
308
317
|
<span
|
|
309
318
|
class="min-w-0 text-xs font-medium flex-1 truncate {layerHidden
|
|
310
|
-
? 'text-
|
|
319
|
+
? 'text-faint-foreground line-through'
|
|
311
320
|
: 'text-foreground'}"
|
|
312
321
|
>
|
|
313
322
|
{row.layerName}
|
|
314
323
|
</span>
|
|
315
324
|
|
|
316
|
-
<span class="shrink-0 text-2xs text-
|
|
325
|
+
<span class="shrink-0 text-2xs text-faint-foreground tabular-nums">
|
|
317
326
|
{entries.length}
|
|
318
327
|
</span>
|
|
319
328
|
</div>
|
|
@@ -329,8 +338,10 @@
|
|
|
329
338
|
aria-selected={isSelected}
|
|
330
339
|
tabindex="-1"
|
|
331
340
|
class="gap-1.5 pl-5 pr-2 flex h-full cursor-pointer items-center transition-colors
|
|
332
|
-
{isSelected ? 'bg-primary/10 hover:bg-primary/15' : 'hover:bg-
|
|
341
|
+
{isSelected ? 'bg-primary/10 hover:bg-primary/15' : 'hover:bg-hover'}
|
|
333
342
|
{isHidden ? 'opacity-40' : ''}"
|
|
343
|
+
onmouseenter={() => onHover?.(entry)}
|
|
344
|
+
onmouseleave={() => onHover?.(null)}
|
|
334
345
|
onmousedown={(e) => {
|
|
335
346
|
e.stopPropagation();
|
|
336
347
|
if (e.shiftKey) e.preventDefault();
|
|
@@ -340,7 +351,7 @@
|
|
|
340
351
|
e.key === 'Enter' && selectObject(entry.key, e as unknown as MouseEvent)}
|
|
341
352
|
>
|
|
342
353
|
<button
|
|
343
|
-
class="
|
|
354
|
+
class="p-1 shrink-0 rounded-sm transition-colors hover:bg-hover"
|
|
344
355
|
onclick={(e) => {
|
|
345
356
|
e.stopPropagation();
|
|
346
357
|
toggleEntry(entry);
|
|
@@ -349,7 +360,7 @@
|
|
|
349
360
|
aria-label={isHidden ? t.showObject : t.hideObject}
|
|
350
361
|
>
|
|
351
362
|
{#if isHidden}
|
|
352
|
-
<EyeOff class="h-3 w-3 text-
|
|
363
|
+
<EyeOff class="h-3 w-3 text-faint-foreground" />
|
|
353
364
|
{:else}
|
|
354
365
|
<Eye class="h-3 w-3 text-muted-foreground" />
|
|
355
366
|
{/if}
|
|
@@ -358,13 +369,13 @@
|
|
|
358
369
|
<span
|
|
359
370
|
class="min-w-0 text-xs flex-1 truncate {isHidden
|
|
360
371
|
? 'text-muted-foreground line-through'
|
|
361
|
-
: 'text-foreground
|
|
372
|
+
: 'text-foreground'}"
|
|
362
373
|
>
|
|
363
374
|
{entry.label}
|
|
364
375
|
</span>
|
|
365
376
|
|
|
366
377
|
<span
|
|
367
|
-
class="
|
|
378
|
+
class="px-1 py-0.5 font-medium shrink-0 rounded-sm bg-muted text-2xs text-faint-foreground"
|
|
368
379
|
>
|
|
369
380
|
{getTypeLabel(entry.object)}
|
|
370
381
|
</span>
|
|
@@ -377,12 +388,12 @@
|
|
|
377
388
|
|
|
378
389
|
{#if sceneObjects.length === 0}
|
|
379
390
|
<div class="py-12 flex flex-col items-center justify-center text-center">
|
|
380
|
-
<EyeOff class="mb-2 h-5 w-5 text-
|
|
391
|
+
<EyeOff class="mb-2 h-5 w-5 text-faint-foreground" />
|
|
381
392
|
<p class="text-xs text-muted-foreground">{t.noObjects}</p>
|
|
382
393
|
</div>
|
|
383
394
|
{:else if layerGroups.size === 0}
|
|
384
395
|
<div class="py-12 flex flex-col items-center justify-center text-center">
|
|
385
|
-
<Search class="mb-2 h-5 w-5 text-
|
|
396
|
+
<Search class="mb-2 h-5 w-5 text-faint-foreground" />
|
|
386
397
|
<p class="text-xs text-muted-foreground">
|
|
387
398
|
{t.noResultsFor.replace('{query}', searchQuery)}
|
|
388
399
|
</p>
|