@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
|
@@ -7,7 +7,12 @@
|
|
|
7
7
|
import type { PresetLabels } from '../../types/presetLabels';
|
|
8
8
|
import { createSolvingIndicator } from '../../compute/solving.svelte';
|
|
9
9
|
import { createRequestResponseDriver } from '@selvajs/solve/client';
|
|
10
|
-
import type {
|
|
10
|
+
import type {
|
|
11
|
+
RetainedSolveResult,
|
|
12
|
+
SolveEventSource,
|
|
13
|
+
SolveSession,
|
|
14
|
+
SolveSettlement
|
|
15
|
+
} from '@selvajs/solve/client';
|
|
11
16
|
import SolveMessages from './SolveMessages.svelte';
|
|
12
17
|
import { meshPolicy } from '@selvajs/visualization/parse';
|
|
13
18
|
import type { ThreeViewer } from '@selvajs/visualization/render';
|
|
@@ -19,8 +24,8 @@
|
|
|
19
24
|
import { type ViewerConfig } from '../viewer/Viewer.svelte';
|
|
20
25
|
import StateDisplay from '../primitives/StateDisplay.svelte';
|
|
21
26
|
import { setClientSlot, type ClientSlot } from '../../contexts/clientSlotContext.svelte';
|
|
22
|
-
import type { Locale } from '../../i18n/messages';
|
|
23
|
-
import {
|
|
27
|
+
import type { Locale, ViewerMessages } from '../../i18n/messages';
|
|
28
|
+
import { layerLocaleContext } from '../../i18n/localeContext.svelte';
|
|
24
29
|
|
|
25
30
|
import type { Snippet } from 'svelte';
|
|
26
31
|
|
|
@@ -34,8 +39,11 @@
|
|
|
34
39
|
isEmbedded?: boolean;
|
|
35
40
|
primaryColor?: string;
|
|
36
41
|
showModeToggle?: boolean;
|
|
42
|
+
/** Host actions, listed in the panel footer's ⋯ menu after saving and loading inputs. */
|
|
37
43
|
panelActions?: ActionButton[];
|
|
44
|
+
/** Lists "Save inputs…" in the footer menu. */
|
|
38
45
|
showSaveButton?: boolean;
|
|
46
|
+
/** Lists "Load inputs…" in the footer menu. */
|
|
39
47
|
showLoadButton?: boolean;
|
|
40
48
|
/** When set, persist saved states via this callback instead of downloading a .slvp file. */
|
|
41
49
|
onSaveState?: (state: ParameterPreset) => void | Promise<void>;
|
|
@@ -49,7 +57,7 @@
|
|
|
49
57
|
footerText?: string;
|
|
50
58
|
/**
|
|
51
59
|
* How long one solve may take before the client aborts it (ms). Pass the same value the
|
|
52
|
-
* server enforces
|
|
60
|
+
* server enforces for this definition's compute server, or the client aborts solves that would
|
|
53
61
|
* have finished.
|
|
54
62
|
*/
|
|
55
63
|
solveDeadlineMs: number;
|
|
@@ -74,6 +82,12 @@
|
|
|
74
82
|
*/
|
|
75
83
|
getSession: () => SolveSession;
|
|
76
84
|
}) => void;
|
|
85
|
+
/**
|
|
86
|
+
* Once per settled solve: applied, discarded, blocked, aborted or failed. A result held
|
|
87
|
+
* for review counts when the user accepts or rejects it, and one a queued solve replaces
|
|
88
|
+
* never does. Auto-solves from input changes count too.
|
|
89
|
+
*/
|
|
90
|
+
onSolved?: (settlement: SolveSettlement) => void;
|
|
77
91
|
/** Hands the live three.js viewer to the host once it mounts. See `Viewer.svelte` for the contract. */
|
|
78
92
|
onViewerReady?: (viewer: ThreeViewer) => void | (() => void);
|
|
79
93
|
/** Viewer chrome and defaults. `backgroundColor` and `showSceneManager` are set by the layout. */
|
|
@@ -92,6 +106,14 @@
|
|
|
92
106
|
// Language for the app's own chrome, English when unset. Does not translate
|
|
93
107
|
// schema-authored labels or Grasshopper-sourced names/metadata.
|
|
94
108
|
lang?: Locale;
|
|
109
|
+
/**
|
|
110
|
+
* Replaces individual strings of the app's own chrome, layered over the `lang` catalog
|
|
111
|
+
* (`VIEWER_MESSAGES`): reword a label, or supply every string for a language with no
|
|
112
|
+
* built-in catalog. Reaches every component inside, the viewer included. A `{name}`
|
|
113
|
+
* placeholder in the default is filled the same way in an override. The preset manager's
|
|
114
|
+
* strings come from `presetLabels` instead.
|
|
115
|
+
*/
|
|
116
|
+
messages?: Partial<ViewerMessages>;
|
|
95
117
|
}
|
|
96
118
|
|
|
97
119
|
let {
|
|
@@ -123,22 +145,26 @@
|
|
|
123
145
|
brandName,
|
|
124
146
|
header,
|
|
125
147
|
onReady,
|
|
148
|
+
onSolved,
|
|
126
149
|
onViewerReady,
|
|
127
150
|
viewerConfig = {},
|
|
128
151
|
externalScopeKey,
|
|
129
152
|
clientSlot,
|
|
130
|
-
lang
|
|
153
|
+
lang,
|
|
154
|
+
messages
|
|
131
155
|
}: Props = $props();
|
|
132
156
|
|
|
133
157
|
// Reaches InputControl deep in the tree.
|
|
134
158
|
// svelte-ignore state_referenced_locally
|
|
135
159
|
setClientSlot(clientSlot);
|
|
136
160
|
|
|
137
|
-
// Resolution: explicit `lang` → host-provided locale → English
|
|
138
|
-
// switching
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
161
|
+
// Resolution: explicit `lang` → host-provided locale → English, with `messages` on top.
|
|
162
|
+
// Getters, so switching either updates the chrome live.
|
|
163
|
+
const locale = layerLocaleContext(
|
|
164
|
+
() => lang,
|
|
165
|
+
() => messages
|
|
166
|
+
);
|
|
167
|
+
const t = $derived(locale.messages);
|
|
142
168
|
|
|
143
169
|
const resolvedScopeKey = $derived(externalScopeKey || definitionKey || schema?.id || '');
|
|
144
170
|
|
|
@@ -168,6 +194,9 @@
|
|
|
168
194
|
|
|
169
195
|
const solvingIndicator = createSolvingIndicator(() => session.isSolving);
|
|
170
196
|
|
|
197
|
+
// Read at call time, so a host swapping the callback needs no resubscribe.
|
|
198
|
+
$effect(() => session.onSettled((settlement) => onSolved?.(settlement)));
|
|
199
|
+
|
|
171
200
|
$effect(() => {
|
|
172
201
|
onReady?.({
|
|
173
202
|
loadValues: (incoming) => session.loadValues(incoming),
|
|
@@ -254,9 +283,13 @@
|
|
|
254
283
|
{#key definitionKey}
|
|
255
284
|
<AppLayout
|
|
256
285
|
{schema}
|
|
286
|
+
showViewer={!!schema.viewerOptions?.enableRemote}
|
|
257
287
|
meshes={session.meshes}
|
|
258
288
|
isSolving={session.isSolving}
|
|
259
|
-
showSolvingIndicator={
|
|
289
|
+
showSolvingIndicator={solvingIndicator.show}
|
|
290
|
+
solveIsSlow={solvingIndicator.slow}
|
|
291
|
+
live={session.live}
|
|
292
|
+
onabort={() => session.abort()}
|
|
260
293
|
hasPendingChanges={session.hasPendingChanges}
|
|
261
294
|
hasNeverSolved={session.hasNeverSolved}
|
|
262
295
|
bind:isViewerFullscreen
|
|
@@ -272,6 +305,7 @@
|
|
|
272
305
|
{presetLabels}
|
|
273
306
|
onValueChange={handleValueChange}
|
|
274
307
|
oncalculate={handleCalculate}
|
|
308
|
+
ensureSolved={() => session.ensureSolved()}
|
|
275
309
|
onLoadValues={() => session.loadValues({})}
|
|
276
310
|
/>
|
|
277
311
|
{/key}
|
|
@@ -286,15 +320,5 @@
|
|
|
286
320
|
onabort={() => session.abort()}
|
|
287
321
|
onconfirm={() => session.acknowledge()}
|
|
288
322
|
ondiscard={() => session.discard()}
|
|
289
|
-
|
|
290
|
-
solving: t.solveSolving,
|
|
291
|
-
blockedTitle: t.solveBlockedTitle,
|
|
292
|
-
messagesTitle: t.solveMessagesTitle,
|
|
293
|
-
blockedDescription: t.solveBlocked,
|
|
294
|
-
messagesDescription: t.solveMessagesDescription,
|
|
295
|
-
confirm: t.solveMessagesConfirm,
|
|
296
|
-
discard: t.solveMessagesDiscard,
|
|
297
|
-
abort: t.solveMessagesAbort,
|
|
298
|
-
dismiss: t.solveMessagesDismiss
|
|
299
|
-
}}
|
|
323
|
+
progressShownByHost={schema?.instanceSolve !== false}
|
|
300
324
|
/>
|
|
@@ -8,8 +8,10 @@
|
|
|
8
8
|
|
|
9
9
|
import type { Snippet } from 'svelte';
|
|
10
10
|
import type { SolveDiagnostic } from '@selvajs/solve/shared';
|
|
11
|
-
import * as Dialog from '
|
|
12
|
-
import IssueList, { type Issue } from '
|
|
11
|
+
import * as Dialog from '#lib/components/primitives/dialog/index.js';
|
|
12
|
+
import IssueList, { type Issue } from '#lib/components/primitives/IssueList.svelte';
|
|
13
|
+
import { getLocaleContext } from '#lib/i18n/localeContext.svelte.js';
|
|
14
|
+
import { formatCount } from '#lib/i18n/messages.js';
|
|
13
15
|
|
|
14
16
|
interface Props {
|
|
15
17
|
/** The last solve's messages. Preferred over `errors`/`warnings` when both are given. */
|
|
@@ -23,6 +25,9 @@
|
|
|
23
25
|
|
|
24
26
|
let { diagnostics, errors = [], warnings = [], trigger }: Props = $props();
|
|
25
27
|
|
|
28
|
+
const locale = getLocaleContext();
|
|
29
|
+
const t = $derived(locale.messages);
|
|
30
|
+
|
|
26
31
|
let open = $state(false);
|
|
27
32
|
|
|
28
33
|
const rows = $derived<SolveDiagnostic[]>(
|
|
@@ -41,26 +46,11 @@
|
|
|
41
46
|
count: number;
|
|
42
47
|
}
|
|
43
48
|
|
|
44
|
-
const
|
|
45
|
-
{
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
many: 'errors'
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
level: 'warning',
|
|
53
|
-
severity: 'warning',
|
|
54
|
-
one: 'warning',
|
|
55
|
-
many: 'warnings'
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
level: 'remark',
|
|
59
|
-
severity: 'note',
|
|
60
|
-
one: 'note',
|
|
61
|
-
many: 'notes'
|
|
62
|
-
}
|
|
63
|
-
] as const;
|
|
49
|
+
const levels = $derived([
|
|
50
|
+
{ level: 'error', severity: 'error', one: t.errorCountOne, other: t.errorCountOther },
|
|
51
|
+
{ level: 'warning', severity: 'warning', one: t.warningCountOne, other: t.warningCountOther },
|
|
52
|
+
{ level: 'remark', severity: 'note', one: t.noteCountOne, other: t.noteCountOther }
|
|
53
|
+
] as const);
|
|
64
54
|
|
|
65
55
|
/**
|
|
66
56
|
* One section per level that has messages, most severe first; within a level, the order the
|
|
@@ -68,23 +58,25 @@
|
|
|
68
58
|
* branches raises the same warning 200 times, and an unstacked list buries every other message.
|
|
69
59
|
*/
|
|
70
60
|
const sections = $derived(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
byKey[key]
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
61
|
+
levels
|
|
62
|
+
.map((meta) => {
|
|
63
|
+
// A null-prototype object rather than a Map: a local built fresh on each derive, never
|
|
64
|
+
// reactive state, and the lint rule that steers Map → SvelteMap cannot tell them apart.
|
|
65
|
+
const byKey: Record<string, Item> = Object.create(null);
|
|
66
|
+
const items: Item[] = [];
|
|
67
|
+
for (const d of rows) {
|
|
68
|
+
if (d.level !== meta.level) continue;
|
|
69
|
+
const key = `${d.message} ${d.source ?? ''}`;
|
|
70
|
+
if (byKey[key]) {
|
|
71
|
+
byKey[key].count++;
|
|
72
|
+
} else {
|
|
73
|
+
byKey[key] = { level: d.level, message: d.message, source: d.source, count: 1 };
|
|
74
|
+
items.push(byKey[key]);
|
|
75
|
+
}
|
|
84
76
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
77
|
+
return { ...meta, items };
|
|
78
|
+
})
|
|
79
|
+
.filter((section) => section.items.length > 0)
|
|
88
80
|
);
|
|
89
81
|
|
|
90
82
|
const issues = $derived<Issue[]>(
|
|
@@ -106,13 +98,11 @@
|
|
|
106
98
|
|
|
107
99
|
<Dialog.Content class="max-w-lg">
|
|
108
100
|
<Dialog.Header>
|
|
109
|
-
<Dialog.Title>
|
|
101
|
+
<Dialog.Title>{t.messagesTitle}</Dialog.Title>
|
|
110
102
|
<Dialog.Description>
|
|
111
103
|
{#each sections as section, i (section.level)}
|
|
112
104
|
{#if i > 0}<span class="mx-1.5">·</span>{/if}
|
|
113
|
-
<span
|
|
114
|
-
>{section.items.length} {section.items.length === 1 ? section.one : section.many}</span
|
|
115
|
-
>
|
|
105
|
+
<span>{formatCount(section.items.length, section.one, section.other)}</span>
|
|
116
106
|
{/each}
|
|
117
107
|
</Dialog.Description>
|
|
118
108
|
</Dialog.Header>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
2
|
+
import { Upload } from '@lucide/svelte';
|
|
3
3
|
import type { UISchema, ParameterPreset } from '@selvajs/schemas';
|
|
4
4
|
import {
|
|
5
5
|
createSavedState,
|
|
@@ -9,17 +9,13 @@
|
|
|
9
9
|
importStateFromJson
|
|
10
10
|
} from '../../schema/param-exporter';
|
|
11
11
|
import { Button, Input, Label, Textarea, Dialog, Callout, IssueList, toast } from '../primitives';
|
|
12
|
-
|
|
13
|
-
import type { ActionButton } from '../../types/actionButton';
|
|
14
12
|
import { DEFAULT_PRESET_LABELS, type PresetLabels } from '../../types/presetLabels';
|
|
13
|
+
import { pickFile } from '../../utils/host-files';
|
|
15
14
|
|
|
16
15
|
interface Props {
|
|
17
16
|
schema: UISchema;
|
|
18
17
|
currentValues: Record<string, unknown>;
|
|
19
18
|
onLoadValues: (values: Record<string, unknown>) => void;
|
|
20
|
-
showSaveButton?: boolean;
|
|
21
|
-
showLoadButton?: boolean;
|
|
22
|
-
actions?: ActionButton[];
|
|
23
19
|
/** When set, persist saved states via this callback instead of downloading a .slvp file. */
|
|
24
20
|
onSaveState?: (state: ParameterPreset) => void | Promise<void>;
|
|
25
21
|
/** When set, the Load dialog lists these states instead of showing a file input. */
|
|
@@ -28,17 +24,7 @@
|
|
|
28
24
|
labels?: Partial<PresetLabels>;
|
|
29
25
|
}
|
|
30
26
|
|
|
31
|
-
let {
|
|
32
|
-
schema,
|
|
33
|
-
currentValues,
|
|
34
|
-
onLoadValues,
|
|
35
|
-
showSaveButton = true,
|
|
36
|
-
showLoadButton = true,
|
|
37
|
-
actions = [],
|
|
38
|
-
onSaveState,
|
|
39
|
-
onListStates,
|
|
40
|
-
labels
|
|
41
|
-
}: Props = $props();
|
|
27
|
+
let { schema, currentValues, onLoadValues, onSaveState, onListStates, labels }: Props = $props();
|
|
42
28
|
|
|
43
29
|
const t = $derived({ ...DEFAULT_PRESET_LABELS, ...labels });
|
|
44
30
|
|
|
@@ -52,13 +38,13 @@
|
|
|
52
38
|
let showLoadDialog = $state(false);
|
|
53
39
|
let loadResult = $state<PresetLoadResult | null>(null);
|
|
54
40
|
let loadingPresetName = $state('');
|
|
55
|
-
let fileInputRef = $state<HTMLInputElement | null>(null);
|
|
56
41
|
|
|
57
42
|
let listedStates = $state<ParameterPreset[]>([]);
|
|
58
43
|
let isLoadingList = $state(false);
|
|
59
44
|
let listError = $state('');
|
|
60
45
|
|
|
61
|
-
|
|
46
|
+
/** Opens the save dialog. The panel footer's menu calls it. */
|
|
47
|
+
export function openSave() {
|
|
62
48
|
exportName = `State ${new Date().toLocaleDateString()}`;
|
|
63
49
|
exportDescription = '';
|
|
64
50
|
exportAuthor = schema.author || '';
|
|
@@ -83,7 +69,7 @@
|
|
|
83
69
|
});
|
|
84
70
|
|
|
85
71
|
if (onSaveState) await onSaveState(state);
|
|
86
|
-
else exportStateAsJson(state);
|
|
72
|
+
else await exportStateAsJson(state);
|
|
87
73
|
showExportDialog = false;
|
|
88
74
|
}
|
|
89
75
|
|
|
@@ -100,19 +86,16 @@
|
|
|
100
86
|
}
|
|
101
87
|
}
|
|
102
88
|
|
|
103
|
-
async function
|
|
104
|
-
|
|
105
|
-
|
|
89
|
+
async function importFromFile() {
|
|
90
|
+
// .sps is the pre-rename extension; files with it exist on users' drives, so keep accepting it.
|
|
91
|
+
const file = await pickFile({ accept: '.slvp,.sps' });
|
|
92
|
+
if (!file) return;
|
|
106
93
|
|
|
107
94
|
try {
|
|
108
|
-
|
|
109
|
-
tryLoad(imported);
|
|
95
|
+
tryLoad(await importStateFromJson(file));
|
|
110
96
|
} catch (error) {
|
|
111
97
|
toast.error(t.loadImportError + (error as Error).message);
|
|
112
98
|
}
|
|
113
|
-
|
|
114
|
-
// Reset so re-picking the same file fires `change` again.
|
|
115
|
-
input.value = '';
|
|
116
99
|
}
|
|
117
100
|
|
|
118
101
|
function confirmLoad() {
|
|
@@ -128,7 +111,8 @@
|
|
|
128
111
|
loadResult = null;
|
|
129
112
|
}
|
|
130
113
|
|
|
131
|
-
|
|
114
|
+
/** Opens the load dialog. The panel footer's menu calls it. */
|
|
115
|
+
export async function openLoad() {
|
|
132
116
|
showLoadDialog = true;
|
|
133
117
|
if (!onListStates) return;
|
|
134
118
|
|
|
@@ -145,8 +129,8 @@
|
|
|
145
129
|
}
|
|
146
130
|
|
|
147
131
|
function handleLoadClick() {
|
|
148
|
-
fileInputRef?.click();
|
|
149
132
|
showLoadDialog = false;
|
|
133
|
+
void importFromFile();
|
|
150
134
|
}
|
|
151
135
|
|
|
152
136
|
function selectListedState(preset: ParameterPreset) {
|
|
@@ -155,39 +139,6 @@
|
|
|
155
139
|
}
|
|
156
140
|
</script>
|
|
157
141
|
|
|
158
|
-
{#if showSaveButton}
|
|
159
|
-
<Button variant="outline" size="sm" onclick={openExportDialog}>
|
|
160
|
-
<Download class="mr-2 h-4 w-4" />
|
|
161
|
-
{t.saveButton}
|
|
162
|
-
</Button>
|
|
163
|
-
{/if}
|
|
164
|
-
|
|
165
|
-
{#if showLoadButton}
|
|
166
|
-
<Button variant="outline" size="sm" onclick={openLoadDialog}>
|
|
167
|
-
<Upload class="mr-2 h-4 w-4" />
|
|
168
|
-
{t.loadButton}
|
|
169
|
-
</Button>
|
|
170
|
-
{/if}
|
|
171
|
-
|
|
172
|
-
{#each actions as action (action.id)}
|
|
173
|
-
<Button variant={action.variant ?? 'outline'} size={action.size ?? 'sm'} onclick={action.onclick}>
|
|
174
|
-
{#if action.icon}
|
|
175
|
-
{@const IconComponent = action.icon}
|
|
176
|
-
<IconComponent class="mr-2 h-4 w-4" />
|
|
177
|
-
{/if}
|
|
178
|
-
{action.label}
|
|
179
|
-
</Button>
|
|
180
|
-
{/each}
|
|
181
|
-
|
|
182
|
-
<!-- .sps is the pre-rename extension; files with it exist on users' drives, so keep accepting it. -->
|
|
183
|
-
<input
|
|
184
|
-
bind:this={fileInputRef}
|
|
185
|
-
type="file"
|
|
186
|
-
accept=".slvp,.sps"
|
|
187
|
-
onchange={handleImport}
|
|
188
|
-
class="hidden"
|
|
189
|
-
/>
|
|
190
|
-
|
|
191
142
|
<!-- Save Dialog -->
|
|
192
143
|
<Dialog.Root bind:open={showExportDialog}>
|
|
193
144
|
<Dialog.Content>
|
|
@@ -225,7 +176,7 @@
|
|
|
225
176
|
|
|
226
177
|
<Dialog.Footer>
|
|
227
178
|
<Button variant="outline" onclick={() => (showExportDialog = false)}>{t.cancelButton}</Button>
|
|
228
|
-
<Button onclick={handleExport}>{t.
|
|
179
|
+
<Button onclick={handleExport}>{t.saveConfirmButton}</Button>
|
|
229
180
|
</Dialog.Footer>
|
|
230
181
|
</Dialog.Content>
|
|
231
182
|
</Dialog.Root>
|
|
@@ -252,7 +203,7 @@
|
|
|
252
203
|
<button
|
|
253
204
|
type="button"
|
|
254
205
|
onclick={() => selectListedState(preset)}
|
|
255
|
-
class="p-3 w-full rounded-lg border text-left transition-colors hover:bg-
|
|
206
|
+
class="p-3 w-full rounded-lg border text-left transition-colors hover:bg-hover"
|
|
256
207
|
>
|
|
257
208
|
<div class="text-sm font-medium">{preset.name}</div>
|
|
258
209
|
{#if preset.description}
|