@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
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
const clamp = (n, min, max) => Math.min(max, Math.max(min, n));
|
|
2
|
+
/** Accepts `#rgb`, `#rrggbb` and the same without `#`. Returns lowercase `#rrggbb`, or null. */
|
|
3
|
+
export function normalizeHex(input) {
|
|
4
|
+
const raw = input.trim().replace(/^#/, '');
|
|
5
|
+
if (/^[0-9a-f]{3}$/i.test(raw)) {
|
|
6
|
+
return `#${raw
|
|
7
|
+
.split('')
|
|
8
|
+
.map((c) => c + c)
|
|
9
|
+
.join('')
|
|
10
|
+
.toLowerCase()}`;
|
|
11
|
+
}
|
|
12
|
+
if (/^[0-9a-f]{6}$/i.test(raw))
|
|
13
|
+
return `#${raw.toLowerCase()}`;
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
export function hexToRgb(hex) {
|
|
17
|
+
const normalized = normalizeHex(hex);
|
|
18
|
+
if (!normalized)
|
|
19
|
+
return null;
|
|
20
|
+
return {
|
|
21
|
+
r: parseInt(normalized.slice(1, 3), 16),
|
|
22
|
+
g: parseInt(normalized.slice(3, 5), 16),
|
|
23
|
+
b: parseInt(normalized.slice(5, 7), 16)
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export function rgbToHex({ r, g, b }) {
|
|
27
|
+
const channel = (n) => clamp(Math.round(n), 0, 255).toString(16).padStart(2, '0');
|
|
28
|
+
return `#${channel(r)}${channel(g)}${channel(b)}`;
|
|
29
|
+
}
|
|
30
|
+
export function rgbToHsv({ r, g, b }) {
|
|
31
|
+
const rn = r / 255;
|
|
32
|
+
const gn = g / 255;
|
|
33
|
+
const bn = b / 255;
|
|
34
|
+
const max = Math.max(rn, gn, bn);
|
|
35
|
+
const delta = max - Math.min(rn, gn, bn);
|
|
36
|
+
let h = 0;
|
|
37
|
+
if (delta !== 0) {
|
|
38
|
+
if (max === rn)
|
|
39
|
+
h = ((gn - bn) / delta) % 6;
|
|
40
|
+
else if (max === gn)
|
|
41
|
+
h = (bn - rn) / delta + 2;
|
|
42
|
+
else
|
|
43
|
+
h = (rn - gn) / delta + 4;
|
|
44
|
+
h *= 60;
|
|
45
|
+
if (h < 0)
|
|
46
|
+
h += 360;
|
|
47
|
+
}
|
|
48
|
+
return { h, s: max === 0 ? 0 : delta / max, v: max };
|
|
49
|
+
}
|
|
50
|
+
export function hsvToRgb({ h, s, v }) {
|
|
51
|
+
const c = v * s;
|
|
52
|
+
const hp = (((h % 360) + 360) % 360) / 60;
|
|
53
|
+
const x = c * (1 - Math.abs((hp % 2) - 1));
|
|
54
|
+
const [r1, g1, b1] = hp < 1
|
|
55
|
+
? [c, x, 0]
|
|
56
|
+
: hp < 2
|
|
57
|
+
? [x, c, 0]
|
|
58
|
+
: hp < 3
|
|
59
|
+
? [0, c, x]
|
|
60
|
+
: hp < 4
|
|
61
|
+
? [0, x, c]
|
|
62
|
+
: hp < 5
|
|
63
|
+
? [x, 0, c]
|
|
64
|
+
: [c, 0, x];
|
|
65
|
+
const m = v - c;
|
|
66
|
+
return { r: (r1 + m) * 255, g: (g1 + m) * 255, b: (b1 + m) * 255 };
|
|
67
|
+
}
|
|
68
|
+
export const hexToHsv = (hex) => {
|
|
69
|
+
const rgb = hexToRgb(hex);
|
|
70
|
+
return rgb ? rgbToHsv(rgb) : null;
|
|
71
|
+
};
|
|
72
|
+
export const hsvToHex = (hsv) => rgbToHex(hsvToRgb(hsv));
|
|
73
|
+
/** WCAG relative luminance of an sRGB color. */
|
|
74
|
+
function luminance({ r, g, b }) {
|
|
75
|
+
const lin = (c) => {
|
|
76
|
+
const n = c / 255;
|
|
77
|
+
return n <= 0.04045 ? n / 12.92 : Math.pow((n + 0.055) / 1.055, 2.4);
|
|
78
|
+
};
|
|
79
|
+
return 0.2126 * lin(r) + 0.7152 * lin(g) + 0.0722 * lin(b);
|
|
80
|
+
}
|
|
81
|
+
/** WCAG contrast ratio between two hex colors, 1 to 21. Null if either isn't a hex color. */
|
|
82
|
+
export function contrastRatio(a, b) {
|
|
83
|
+
const ra = hexToRgb(a);
|
|
84
|
+
const rb = hexToRgb(b);
|
|
85
|
+
if (!ra || !rb)
|
|
86
|
+
return null;
|
|
87
|
+
const la = luminance(ra);
|
|
88
|
+
const lb = luminance(rb);
|
|
89
|
+
return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);
|
|
90
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { downloadFileDataByRoot } from '@selvajs/compute/core';
|
|
1
|
+
import { decodeBase64ToBinary, downloadFileDataByRoot } from '@selvajs/compute/core';
|
|
2
2
|
import { SvelteMap } from 'svelte/reactivity';
|
|
3
3
|
import { APP_DEFAULTS } from '../constants';
|
|
4
|
+
import { saveBlob } from './host-files';
|
|
4
5
|
export const MIME_BY_EXT = {
|
|
5
6
|
'.png': 'image/png',
|
|
6
7
|
'.jpg': 'image/jpeg',
|
|
@@ -20,23 +21,10 @@ export const MIME_BY_EXT = {
|
|
|
20
21
|
function saveSingleFile(file) {
|
|
21
22
|
const ext = (file.fileType ?? '').toLowerCase();
|
|
22
23
|
const mime = MIME_BY_EXT[ext] ?? 'application/octet-stream';
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
for (let i = 0; i < binary.length; i++)
|
|
28
|
-
bytes[i] = binary.charCodeAt(i);
|
|
29
|
-
blob = new Blob([bytes], { type: mime });
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
blob = new Blob([file.data], { type: mime });
|
|
33
|
-
}
|
|
34
|
-
const fullName = `${file.fileName}${file.fileType ?? ''}`;
|
|
35
|
-
const a = document.createElement('a');
|
|
36
|
-
a.href = URL.createObjectURL(blob);
|
|
37
|
-
a.download = fullName;
|
|
38
|
-
a.click();
|
|
39
|
-
URL.revokeObjectURL(a.href);
|
|
24
|
+
const content = file.isBase64Encoded ? decodeBase64ToBinary(file.data) : file.data;
|
|
25
|
+
// decodeBase64ToBinary returns an ArrayBuffer-backed copy, never a SharedArrayBuffer view.
|
|
26
|
+
const blob = new Blob([content], { type: mime });
|
|
27
|
+
return saveBlob(blob, `${file.fileName}${file.fileType ?? ''}`);
|
|
40
28
|
}
|
|
41
29
|
export async function downloadFiles(fileData, fileName = 'grasshopper-output') {
|
|
42
30
|
try {
|
|
@@ -45,13 +33,13 @@ export async function downloadFiles(fileData, fileName = 'grasshopper-output') {
|
|
|
45
33
|
console.warn('[FileDownload] No files to download');
|
|
46
34
|
return;
|
|
47
35
|
}
|
|
48
|
-
// A lone file is saved as itself rather than zipped
|
|
49
|
-
//
|
|
36
|
+
// A lone file is saved as itself rather than zipped. Everything else, including the
|
|
37
|
+
// per-root archive split, belongs to compute.
|
|
50
38
|
if (filesArray.length === 1) {
|
|
51
|
-
saveSingleFile(filesArray[0]);
|
|
39
|
+
await saveSingleFile(filesArray[0]);
|
|
52
40
|
return;
|
|
53
41
|
}
|
|
54
|
-
await downloadFileDataByRoot(filesArray, fileName);
|
|
42
|
+
await downloadFileDataByRoot(filesArray, fileName, null, { saveBlob });
|
|
55
43
|
}
|
|
56
44
|
catch (error) {
|
|
57
45
|
console.error('[FileDownload] Error downloading files:', error);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Resolves false when the user cancelled. An anchor download always resolves true: it can't tell. */
|
|
2
|
+
export type BlobSaver = (blob: Blob, fileName: string) => Promise<boolean>;
|
|
3
|
+
/** `accept` is what `<input accept>` takes: `.slvp,.sps`, `image/*`. Resolves null on cancel. */
|
|
4
|
+
export type FilePicker = (options: {
|
|
5
|
+
accept: string;
|
|
6
|
+
}) => Promise<File | null>;
|
|
7
|
+
export declare function setBlobSaver(next: BlobSaver): void;
|
|
8
|
+
export declare function setFilePicker(next: FilePicker): void;
|
|
9
|
+
export declare function saveBlob(blob: Blob, fileName: string): Promise<boolean>;
|
|
10
|
+
export declare function pickFile(options: {
|
|
11
|
+
accept: string;
|
|
12
|
+
}): Promise<File | null>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Where a file the page offers goes, and where a file the page asks for comes from. A browser
|
|
2
|
+
// gets an <a download> click and a hidden <input type=file>. A host whose WebView can't do
|
|
3
|
+
// either safely (the Rhino panel) installs its own once at start-up, before the first save or pick.
|
|
4
|
+
let saver = saveWithAnchor;
|
|
5
|
+
let picker = pickWithInput;
|
|
6
|
+
export function setBlobSaver(next) {
|
|
7
|
+
saver = next;
|
|
8
|
+
}
|
|
9
|
+
export function setFilePicker(next) {
|
|
10
|
+
picker = next;
|
|
11
|
+
}
|
|
12
|
+
export function saveBlob(blob, fileName) {
|
|
13
|
+
return saver(blob, fileName);
|
|
14
|
+
}
|
|
15
|
+
export function pickFile(options) {
|
|
16
|
+
return picker(options);
|
|
17
|
+
}
|
|
18
|
+
async function saveWithAnchor(blob, fileName) {
|
|
19
|
+
const url = URL.createObjectURL(blob);
|
|
20
|
+
const a = document.createElement('a');
|
|
21
|
+
a.href = url;
|
|
22
|
+
a.download = fileName;
|
|
23
|
+
// Firefox only downloads from an anchor that is in the document.
|
|
24
|
+
document.body.appendChild(a);
|
|
25
|
+
a.click();
|
|
26
|
+
a.remove();
|
|
27
|
+
// Revoking synchronously can abort the download: the browser pins the blob only once it starts.
|
|
28
|
+
setTimeout(() => URL.revokeObjectURL(url), 10_000);
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
function pickWithInput({ accept }) {
|
|
32
|
+
return new Promise((resolve) => {
|
|
33
|
+
const input = document.createElement('input');
|
|
34
|
+
input.type = 'file';
|
|
35
|
+
input.accept = accept;
|
|
36
|
+
input.style.display = 'none';
|
|
37
|
+
const settle = (file) => {
|
|
38
|
+
input.remove();
|
|
39
|
+
resolve(file);
|
|
40
|
+
};
|
|
41
|
+
input.addEventListener('change', () => settle(input.files?.[0] ?? null), { once: true });
|
|
42
|
+
input.addEventListener('cancel', () => settle(null), { once: true });
|
|
43
|
+
document.body.appendChild(input);
|
|
44
|
+
input.click();
|
|
45
|
+
});
|
|
46
|
+
}
|
package/dist/utils/loadScript.js
CHANGED
|
@@ -17,6 +17,8 @@ export function loadScript(src, options) {
|
|
|
17
17
|
script.src = src;
|
|
18
18
|
if (options?.crossOrigin)
|
|
19
19
|
script.crossOrigin = options.crossOrigin;
|
|
20
|
+
if (options?.integrity)
|
|
21
|
+
script.integrity = options.integrity;
|
|
20
22
|
if (options?.async !== undefined)
|
|
21
23
|
script.async = options.async;
|
|
22
24
|
if (options?.defer !== undefined)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** True when a WebP should go out as PNG: the input takes PNG, so a PNG is a valid value. */
|
|
2
|
+
export declare function shouldConvertWebp(fileEnding: string, acceptedFormats: readonly string[]): boolean;
|
|
3
|
+
/** Whether the input takes a file with this ending, counting a WebP it would get as PNG. */
|
|
4
|
+
export declare function acceptsFileEnding(fileEnding: string, acceptedFormats: readonly string[]): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* By content, not name: image CDNs serve WebP from URLs with no extension or one naming another
|
|
7
|
+
* format. A WebP file starts `RIFF`, a 4-byte size, then `WEBP`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function isWebp(blob: Blob): Promise<boolean>;
|
|
10
|
+
export declare function webpToPng(blob: Blob): Promise<Blob>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// Grasshopper's PDF export can't read WebP: the plugin's PDF library has no WebP decoder, and
|
|
2
|
+
// nothing on Windows or Rhino.Compute decodes it reliably. The browser can, so a WebP picked for
|
|
3
|
+
// an input that also takes PNG is re-encoded here. PNG rather than JPEG keeps transparency.
|
|
4
|
+
/** True when a WebP should go out as PNG: the input takes PNG, so a PNG is a valid value. */
|
|
5
|
+
export function shouldConvertWebp(fileEnding, acceptedFormats) {
|
|
6
|
+
return fileEnding === '.webp' && acceptedFormats.includes('.png');
|
|
7
|
+
}
|
|
8
|
+
/** Whether the input takes a file with this ending, counting a WebP it would get as PNG. */
|
|
9
|
+
export function acceptsFileEnding(fileEnding, acceptedFormats) {
|
|
10
|
+
const ending = fileEnding.toLowerCase();
|
|
11
|
+
if (acceptedFormats.length === 0 || acceptedFormats.includes(ending))
|
|
12
|
+
return true;
|
|
13
|
+
return shouldConvertWebp(ending, acceptedFormats);
|
|
14
|
+
}
|
|
15
|
+
const ascii = (bytes, start, end) => String.fromCharCode(...bytes.subarray(start, end));
|
|
16
|
+
/**
|
|
17
|
+
* By content, not name: image CDNs serve WebP from URLs with no extension or one naming another
|
|
18
|
+
* format. A WebP file starts `RIFF`, a 4-byte size, then `WEBP`.
|
|
19
|
+
*/
|
|
20
|
+
export async function isWebp(blob) {
|
|
21
|
+
if (blob.type === 'image/webp')
|
|
22
|
+
return true;
|
|
23
|
+
const head = new Uint8Array(await blob.slice(0, 12).arrayBuffer());
|
|
24
|
+
return head.length === 12 && ascii(head, 0, 4) === 'RIFF' && ascii(head, 8, 12) === 'WEBP';
|
|
25
|
+
}
|
|
26
|
+
export async function webpToPng(blob) {
|
|
27
|
+
const bitmap = await createImageBitmap(blob);
|
|
28
|
+
try {
|
|
29
|
+
const canvas = document.createElement('canvas');
|
|
30
|
+
canvas.width = bitmap.width;
|
|
31
|
+
canvas.height = bitmap.height;
|
|
32
|
+
const context = canvas.getContext('2d');
|
|
33
|
+
if (!context)
|
|
34
|
+
throw new Error('Canvas 2D context unavailable');
|
|
35
|
+
context.drawImage(bitmap, 0, 0);
|
|
36
|
+
return await new Promise((resolve, reject) => canvas.toBlob((png) => (png ? resolve(png) : reject(new Error('PNG encoding failed'))), 'image/png'));
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
bitmap.close();
|
|
40
|
+
}
|
|
41
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@selvajs/ui",
|
|
3
|
-
"version": "6.6.0-beta.
|
|
3
|
+
"version": "6.6.0-beta.20",
|
|
4
4
|
"description": "Shared UI components and utilities for Selva applications",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "VektorNode",
|
|
@@ -31,17 +31,20 @@
|
|
|
31
31
|
".": {
|
|
32
32
|
"selva-source": {
|
|
33
33
|
"types": "./dist/index.d.ts",
|
|
34
|
-
"svelte": "./
|
|
34
|
+
"svelte": "./src/lib/index.ts"
|
|
35
35
|
},
|
|
36
36
|
"types": "./dist/public.d.ts",
|
|
37
37
|
"svelte": "./dist/public.js"
|
|
38
38
|
},
|
|
39
39
|
"./external": {
|
|
40
|
+
"selva-source": {
|
|
41
|
+
"types": "./dist/external/storage.d.ts",
|
|
42
|
+
"svelte": "./src/lib/external/storage.ts"
|
|
43
|
+
},
|
|
40
44
|
"types": "./dist/external/storage.d.ts",
|
|
41
45
|
"svelte": "./dist/external/storage.js"
|
|
42
46
|
},
|
|
43
|
-
"./styles/base.css": "./src/lib/styles/base.css"
|
|
44
|
-
"./styles/themes/*": "./src/lib/styles/themes/*"
|
|
47
|
+
"./styles/base.css": "./src/lib/styles/base.css"
|
|
45
48
|
},
|
|
46
49
|
"files": [
|
|
47
50
|
"dist",
|
|
@@ -58,11 +61,11 @@
|
|
|
58
61
|
"bits-ui": "^2.18.0",
|
|
59
62
|
"svelte": "^5",
|
|
60
63
|
"tailwind-variants": "^3.3.1",
|
|
61
|
-
"three": "^0.
|
|
62
|
-
"@selvajs/compute": "^
|
|
63
|
-
"@selvajs/
|
|
64
|
-
"@selvajs/
|
|
65
|
-
"@selvajs/solve": "^
|
|
64
|
+
"three": "^0.187.0",
|
|
65
|
+
"@selvajs/compute": "^5.0.0-beta.10",
|
|
66
|
+
"@selvajs/visualization": "^1.6.0-beta.10",
|
|
67
|
+
"@selvajs/schemas": "^5.3.0-beta.3",
|
|
68
|
+
"@selvajs/solve": "^2.0.0-beta.13"
|
|
66
69
|
},
|
|
67
70
|
"peerDependenciesMeta": {
|
|
68
71
|
"three": {
|
|
@@ -71,30 +74,35 @@
|
|
|
71
74
|
},
|
|
72
75
|
"dependencies": {
|
|
73
76
|
"@floating-ui/dom": "^1.8.0",
|
|
74
|
-
"@
|
|
75
|
-
"@
|
|
77
|
+
"@fontsource-variable/hanken-grotesk": "^5.3.0",
|
|
78
|
+
"@iconify/svelte": "^5.2.4",
|
|
79
|
+
"@lucide/svelte": "^1.66.0",
|
|
76
80
|
"clsx": "^2.1.1",
|
|
77
81
|
"mode-watcher": "^1.1.0",
|
|
78
82
|
"paneforge": "^1.0.2",
|
|
79
|
-
"svelte-sonner": "^1.2.
|
|
83
|
+
"svelte-sonner": "^1.2.2",
|
|
80
84
|
"tailwind-merge": "^3.7.0",
|
|
81
85
|
"tw-animate-css": "^1.4.0"
|
|
82
86
|
},
|
|
83
87
|
"devDependencies": {
|
|
84
88
|
"@internationalized/date": "^3.12.4",
|
|
85
|
-
"@sveltejs/kit": "
|
|
89
|
+
"@sveltejs/kit": "3.1.1",
|
|
86
90
|
"@sveltejs/vite-plugin-svelte": "^7.3.1",
|
|
87
|
-
"@types/three": "^0.
|
|
88
|
-
"bits-ui": "^2.
|
|
91
|
+
"@types/three": "^0.187.0",
|
|
92
|
+
"bits-ui": "^2.20.2",
|
|
89
93
|
"rimraf": "^6.1.3",
|
|
90
|
-
"svelte": "5.57.
|
|
94
|
+
"svelte": "5.57.3",
|
|
91
95
|
"tailwind-variants": "^3.3.1",
|
|
92
|
-
"vitest": "^5.0.
|
|
93
|
-
"@selvajs/
|
|
94
|
-
"@selvajs/
|
|
95
|
-
"@selvajs/
|
|
96
|
-
"@selvajs/
|
|
97
|
-
"@selvajs/
|
|
96
|
+
"vitest": "^5.0.5",
|
|
97
|
+
"@selvajs/compute": "5.0.0-beta.10",
|
|
98
|
+
"@selvajs/config": "0.0.4",
|
|
99
|
+
"@selvajs/visualization": "1.6.0-beta.10",
|
|
100
|
+
"@selvajs/schemas": "5.3.0-beta.3",
|
|
101
|
+
"@selvajs/solve": "2.0.0-beta.13"
|
|
102
|
+
},
|
|
103
|
+
"imports": {
|
|
104
|
+
"#lib": "./src/lib/index.js",
|
|
105
|
+
"#lib/*": "./src/lib/*"
|
|
98
106
|
},
|
|
99
107
|
"scripts": {
|
|
100
108
|
"predev": "node ../../scripts/sync-shared-assets.js",
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import * as Card from './primitives/card/index.js';
|
|
4
4
|
import { Button } from './primitives/button/index.js';
|
|
5
5
|
import Callout from './primitives/Callout.svelte';
|
|
6
|
+
import { getLocaleContext } from '#lib/i18n/localeContext.svelte.js';
|
|
6
7
|
|
|
7
8
|
interface Props {
|
|
8
9
|
status?: number;
|
|
@@ -12,9 +13,12 @@
|
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
let { status = 500, message, details, homeLink = '/' }: Props = $props();
|
|
16
|
+
|
|
17
|
+
const locale = getLocaleContext();
|
|
18
|
+
const t = $derived(locale.messages);
|
|
15
19
|
</script>
|
|
16
20
|
|
|
17
|
-
<div class="p-4 flex min-h-
|
|
21
|
+
<div class="p-4 flex min-h-dvh items-center justify-center bg-background">
|
|
18
22
|
<Card.Root class="max-w-md w-full">
|
|
19
23
|
<Card.Header>
|
|
20
24
|
<div class="gap-4 flex flex-col items-center text-center">
|
|
@@ -26,7 +30,7 @@
|
|
|
26
30
|
</Card.Header>
|
|
27
31
|
<Card.Content>
|
|
28
32
|
<div class="gap-4 flex flex-col">
|
|
29
|
-
<Callout tone="danger" title=
|
|
33
|
+
<Callout tone="danger" title={t.errorTitle}>
|
|
30
34
|
{#if message}{message}{/if}
|
|
31
35
|
</Callout>
|
|
32
36
|
{#if details}
|
|
@@ -37,7 +41,7 @@
|
|
|
37
41
|
</div>
|
|
38
42
|
</Card.Content>
|
|
39
43
|
<Card.Footer>
|
|
40
|
-
<Button variant="outline" href={homeLink} rel="external" class="w-full">
|
|
44
|
+
<Button variant="outline" href={homeLink} rel="external" class="w-full">{t.goHome}</Button>
|
|
41
45
|
</Card.Footer>
|
|
42
46
|
</Card.Root>
|
|
43
47
|
</div>
|