@selvajs/ui 6.5.1-beta.1 → 6.6.0-beta.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ConfirmDialog.svelte +2 -10
- package/dist/components/ErrorScreen.svelte +21 -27
- package/dist/components/compute/AppLayout.svelte +298 -128
- package/dist/components/compute/AppLayout.svelte.d.ts +22 -0
- package/dist/components/compute/CollapsedPanelStrip.svelte +4 -2
- package/dist/components/compute/ComputeApp.svelte +45 -24
- package/dist/components/compute/ComputeApp.svelte.d.ts +19 -2
- package/dist/components/compute/ComputeMessagesDialog.svelte +47 -83
- package/dist/components/compute/ParameterPresetManager.svelte +37 -130
- package/dist/components/compute/ParameterPresetManager.svelte.d.ts +4 -5
- package/dist/components/compute/SolveMessages.svelte +131 -77
- package/dist/components/compute/SolveMessages.svelte.d.ts +7 -12
- package/dist/components/layout/AppShell.svelte +10 -6
- package/dist/components/layout/PageFooter.svelte +23 -11
- package/dist/components/layout/PageHeader.svelte +11 -7
- package/dist/components/layout/Pagination.svelte +2 -4
- package/dist/components/layout/SectionHeader.svelte +4 -2
- package/dist/components/layout/SideNav.svelte +56 -7
- package/dist/components/preview/ChartOutput.svelte +91 -48
- package/dist/components/preview/Group.svelte +92 -103
- package/dist/components/preview/Group.svelte.d.ts +1 -1
- package/dist/components/preview/HelpButton.svelte +36 -0
- package/dist/components/preview/HelpButton.svelte.d.ts +8 -0
- package/dist/components/preview/ImageOutput.svelte +434 -72
- package/dist/components/preview/InputControl.svelte +163 -90
- package/dist/components/preview/InputControl.svelte.d.ts +5 -1
- package/dist/components/preview/OutputDisplay.svelte +44 -42
- package/dist/components/preview/TabBar.svelte +106 -22
- package/dist/components/preview/TabBar.svelte.d.ts +1 -0
- package/dist/components/preview/TabContent.svelte +63 -57
- package/dist/components/preview/TabContent.svelte.d.ts +5 -1
- package/dist/components/preview/TabLayout.svelte +27 -5
- package/dist/components/preview/TabLayout.svelte.d.ts +5 -0
- package/dist/components/preview/inputs/CheckboxInput.svelte +7 -7
- package/dist/components/preview/inputs/CheckboxInput.svelte.d.ts +3 -0
- package/dist/components/preview/inputs/ChecklistInput.svelte +7 -2
- package/dist/components/preview/inputs/ChecklistInput.svelte.d.ts +2 -1
- package/dist/components/preview/inputs/ColorInput.svelte +4 -2
- package/dist/components/preview/inputs/ColorInput.svelte.d.ts +1 -0
- package/dist/components/preview/inputs/DropdownInput.svelte +19 -4
- package/dist/components/preview/inputs/DropdownInput.svelte.d.ts +2 -1
- package/dist/components/preview/inputs/FileInput.svelte +112 -108
- 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 +123 -61
- 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 +44 -0
- package/dist/components/preview/inputs/SegmentedInput.svelte.d.ts +12 -0
- package/dist/components/preview/inputs/TextInput.svelte +8 -4
- package/dist/components/preview/inputs/TileInput.svelte +80 -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 +11 -18
- package/dist/components/primitives/DataTable.svelte +38 -5
- package/dist/components/primitives/DataTable.svelte.d.ts +2 -0
- package/dist/components/primitives/FilterableDropdown.svelte +42 -129
- package/dist/components/primitives/FilterableDropdown.svelte.d.ts +1 -1
- package/dist/components/primitives/IssueList.svelte +56 -0
- package/dist/components/primitives/IssueList.svelte.d.ts +20 -0
- package/dist/components/primitives/SeverityIcon.svelte +15 -0
- package/dist/components/primitives/SeverityIcon.svelte.d.ts +8 -0
- package/dist/components/primitives/SolvingIndicator.svelte +43 -42
- package/dist/components/primitives/SolvingIndicator.svelte.d.ts +6 -0
- package/dist/components/primitives/StateDisplay.svelte +19 -79
- package/dist/components/primitives/ViewToggle.svelte +18 -33
- package/dist/components/primitives/alert-dialog/alert-dialog-action.svelte +9 -3
- package/dist/components/primitives/alert-dialog/alert-dialog-action.svelte.d.ts +6 -1
- package/dist/components/primitives/alert-dialog/alert-dialog-content.svelte +1 -1
- package/dist/components/primitives/alert-dialog/alert-dialog-overlay.svelte +1 -1
- package/dist/components/primitives/badge/badge.svelte +2 -2
- package/dist/components/primitives/badge/badge.svelte.d.ts +4 -4
- package/dist/components/primitives/button/button.svelte +6 -2
- package/dist/components/primitives/button/button.svelte.d.ts +10 -4
- package/dist/components/primitives/card/card-header.svelte +1 -1
- package/dist/components/primitives/card/card.svelte +21 -5
- package/dist/components/primitives/card/card.svelte.d.ts +25 -1
- package/dist/components/primitives/card/index.d.ts +1 -2
- package/dist/components/primitives/card/index.js +2 -3
- package/dist/components/primitives/checkbox/checkbox.svelte +1 -1
- package/dist/components/primitives/command/command-dialog.svelte +42 -0
- package/dist/components/primitives/command/command-dialog.svelte.d.ts +14 -0
- package/dist/components/primitives/command/command-empty.svelte +17 -0
- package/dist/components/primitives/command/command-empty.svelte.d.ts +4 -0
- package/dist/components/primitives/command/command-group.svelte +33 -0
- package/dist/components/primitives/command/command-group.svelte.d.ts +7 -0
- package/dist/components/primitives/command/command-input.svelte +36 -0
- package/dist/components/primitives/command/command-input.svelte.d.ts +4 -0
- package/dist/components/primitives/command/command-item.svelte +28 -0
- package/dist/components/primitives/command/command-item.svelte.d.ts +4 -0
- package/dist/components/primitives/command/command-link-item.svelte +21 -0
- package/dist/components/primitives/command/command-link-item.svelte.d.ts +4 -0
- package/dist/components/primitives/command/command-list.svelte +20 -0
- package/dist/components/primitives/command/command-list.svelte.d.ts +4 -0
- package/dist/components/primitives/command/command-loading.svelte +7 -0
- package/dist/components/primitives/command/command-loading.svelte.d.ts +4 -0
- package/dist/components/primitives/command/command-separator.svelte +17 -0
- package/dist/components/primitives/command/command-separator.svelte.d.ts +4 -0
- package/dist/components/primitives/command/command-shortcut.svelte +23 -0
- package/dist/components/primitives/command/command-shortcut.svelte.d.ts +5 -0
- package/dist/components/primitives/command/command.svelte +28 -0
- package/dist/components/primitives/command/command.svelte.d.ts +8 -0
- package/dist/components/primitives/command/index.d.ts +12 -0
- package/dist/components/primitives/command/index.js +14 -0
- package/dist/components/primitives/context-menu/context-menu-content.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-sub-content.svelte +1 -1
- package/dist/components/primitives/dialog/dialog-content.svelte +11 -3
- package/dist/components/primitives/dialog/dialog-content.svelte.d.ts +2 -0
- package/dist/components/primitives/dialog/dialog-overlay.svelte +1 -1
- package/dist/components/primitives/dialog/dialog-title.svelte +6 -2
- package/dist/components/primitives/dialog/dialog-title.svelte.d.ts +5 -1
- package/dist/components/primitives/drawer/Drawer.svelte +2 -2
- package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-group.svelte.d.ts +4 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte +46 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +9 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-content.svelte +31 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-content.svelte.d.ts +10 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +8 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-group.svelte +7 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-group.svelte.d.ts +4 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-item.svelte +27 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-item.svelte.d.ts +8 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-label.svelte +24 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-label.svelte.d.ts +8 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-portal.svelte +7 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-portal.svelte.d.ts +3 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +4 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte +36 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +4 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-separator.svelte +17 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-separator.svelte.d.ts +4 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte +23 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts +5 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte +31 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +10 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +7 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-sub.svelte +7 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-sub.svelte.d.ts +3 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +4 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu.svelte +7 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu.svelte.d.ts +3 -0
- package/dist/components/primitives/dropdown-menu/index.d.ts +18 -0
- package/dist/components/primitives/dropdown-menu/index.js +18 -0
- package/dist/components/primitives/{alert/alert-description.svelte → empty/empty-content.svelte} +3 -3
- package/dist/components/primitives/empty/empty-content.svelte.d.ts +5 -0
- package/dist/components/primitives/empty/empty-description.svelte +23 -0
- package/dist/components/primitives/{alert/alert-description.svelte.d.ts → empty/empty-description.svelte.d.ts} +4 -4
- package/dist/components/primitives/{alert/alert-title.svelte → empty/empty-header.svelte} +3 -3
- package/dist/components/primitives/empty/empty-header.svelte.d.ts +5 -0
- package/dist/components/primitives/empty/empty-media.svelte +41 -0
- package/dist/components/primitives/empty/empty-media.svelte.d.ts +26 -0
- package/dist/components/primitives/{card/card-action.svelte → empty/empty-title.svelte} +2 -2
- package/dist/components/primitives/{card/card-action.svelte.d.ts → empty/empty-title.svelte.d.ts} +3 -3
- package/dist/components/primitives/empty/empty.svelte +23 -0
- package/dist/components/primitives/empty/empty.svelte.d.ts +5 -0
- package/dist/components/primitives/empty/index.d.ts +7 -0
- package/dist/components/primitives/empty/index.js +9 -0
- package/dist/components/primitives/index.d.ts +10 -1
- package/dist/components/primitives/index.js +10 -1
- package/dist/components/primitives/input/input.svelte +4 -4
- package/dist/components/primitives/input-group/index.d.ts +7 -0
- package/dist/components/primitives/input-group/index.js +9 -0
- package/dist/components/primitives/input-group/input-group-addon.svelte +53 -0
- package/dist/components/primitives/input-group/input-group-addon.svelte.d.ts +32 -0
- package/dist/components/primitives/input-group/input-group-button.svelte +49 -0
- package/dist/components/primitives/input-group/input-group-button.svelte.d.ts +32 -0
- package/dist/components/primitives/input-group/input-group-input.svelte +25 -0
- package/dist/components/primitives/input-group/input-group-input.svelte.d.ts +11 -0
- package/dist/components/primitives/input-group/input-group-text.svelte +22 -0
- package/dist/components/primitives/input-group/input-group-text.svelte.d.ts +5 -0
- package/dist/components/primitives/input-group/input-group-textarea.svelte +23 -0
- package/dist/components/primitives/input-group/input-group-textarea.svelte.d.ts +3 -0
- package/dist/components/primitives/input-group/input-group.svelte +24 -0
- package/dist/components/primitives/{alert/alert-title.svelte.d.ts → input-group/input-group.svelte.d.ts} +4 -4
- package/dist/components/primitives/mode-toggle/mode-toggle.svelte +6 -7
- package/dist/components/primitives/popover/index.d.ts +9 -0
- package/dist/components/primitives/popover/index.js +11 -0
- package/dist/components/primitives/popover/popover-close.svelte +7 -0
- package/dist/components/primitives/popover/popover-close.svelte.d.ts +4 -0
- package/dist/components/primitives/popover/popover-content.svelte +31 -0
- package/dist/components/primitives/popover/popover-content.svelte.d.ts +10 -0
- package/dist/components/primitives/popover/popover-description.svelte +20 -0
- package/dist/components/primitives/popover/popover-description.svelte.d.ts +5 -0
- package/dist/components/primitives/popover/popover-header.svelte +20 -0
- package/dist/components/primitives/popover/popover-header.svelte.d.ts +5 -0
- package/dist/components/primitives/popover/popover-portal.svelte +7 -0
- package/dist/components/primitives/popover/popover-portal.svelte.d.ts +3 -0
- package/dist/components/primitives/popover/popover-title.svelte +15 -0
- package/dist/components/primitives/popover/popover-title.svelte.d.ts +5 -0
- package/dist/components/primitives/popover/popover-trigger.svelte +17 -0
- package/dist/components/primitives/popover/popover-trigger.svelte.d.ts +4 -0
- package/dist/components/primitives/popover/popover.svelte +7 -0
- package/dist/components/primitives/popover/popover.svelte.d.ts +3 -0
- package/dist/components/primitives/resizable/resizable-handle.svelte +6 -2
- package/dist/components/primitives/resizable/resizable-handle.svelte.d.ts +2 -0
- package/dist/components/primitives/resizable/resizable-pane-group.svelte +1 -4
- package/dist/components/primitives/scroll-area/scroll-area.svelte +1 -1
- package/dist/components/primitives/search/search.svelte +3 -3
- package/dist/components/primitives/select/select-content.svelte +1 -1
- package/dist/components/primitives/select/select-trigger.svelte +1 -1
- package/dist/components/primitives/severity.d.ts +7 -0
- package/dist/components/primitives/severity.js +19 -0
- package/dist/components/primitives/slider/slider.svelte +8 -3
- package/dist/components/primitives/slider/slider.svelte.d.ts +5 -1
- package/dist/components/primitives/sonner/sonner.svelte +1 -1
- package/dist/components/primitives/spinner/index.d.ts +1 -0
- package/dist/components/primitives/spinner/index.js +1 -0
- package/dist/components/primitives/spinner/spinner.svelte +29 -0
- package/dist/components/primitives/spinner/spinner.svelte.d.ts +4 -0
- package/dist/components/primitives/switch/switch.svelte +2 -2
- package/dist/components/primitives/tabs/tabs-list.svelte +27 -5
- package/dist/components/primitives/tabs/tabs-list.svelte.d.ts +22 -1
- package/dist/components/primitives/tabs/tabs-trigger.svelte +23 -5
- package/dist/components/primitives/tabs/tabs-trigger.svelte.d.ts +22 -1
- package/dist/components/primitives/tabs/tabs.svelte +6 -2
- package/dist/components/primitives/tabs/tabs.svelte.d.ts +5 -1
- package/dist/components/primitives/textarea/textarea.svelte +1 -1
- package/dist/components/primitives/theme-switcher/ThemeSwitcher.svelte +1 -1
- package/dist/components/primitives/toggle/index.d.ts +3 -0
- package/dist/components/primitives/toggle/index.js +5 -0
- package/dist/components/primitives/toggle/toggle.svelte +54 -0
- package/dist/components/primitives/toggle/toggle.svelte.d.ts +46 -0
- package/dist/components/primitives/toggle-group/index.d.ts +3 -0
- package/dist/components/primitives/toggle-group/index.js +5 -0
- package/dist/components/primitives/toggle-group/toggle-group-item.svelte +35 -0
- package/dist/components/primitives/toggle-group/toggle-group-item.svelte.d.ts +6 -0
- package/dist/components/primitives/toggle-group/toggle-group.svelte +75 -0
- package/dist/components/primitives/toggle-group/toggle-group.svelte.d.ts +17 -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 +14 -5
- package/dist/components/viewer/Viewer.svelte +243 -221
- package/dist/components/viewer/Viewer.svelte.d.ts +3 -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 +7 -9
- package/dist/contexts/hostContext.svelte.d.ts +39 -0
- package/dist/contexts/hostContext.svelte.js +9 -0
- package/dist/i18n/localeContext.svelte.d.ts +10 -3
- package/dist/i18n/localeContext.svelte.js +27 -5
- package/dist/i18n/messages.d.ts +150 -2
- package/dist/i18n/messages.js +261 -11
- package/dist/index.d.ts +4 -1
- package/dist/index.js +3 -0
- package/dist/public.d.ts +1 -1
- 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.js +21 -0
- package/dist/styles/base.css +80 -10
- 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/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 +19 -15
- package/src/lib/components/ConfirmDialog.svelte +2 -10
- package/src/lib/components/ErrorScreen.svelte +21 -27
- package/src/lib/components/compute/AppLayout.svelte +298 -128
- package/src/lib/components/compute/CollapsedPanelStrip.svelte +4 -2
- package/src/lib/components/compute/ComputeApp.svelte +45 -24
- package/src/lib/components/compute/ComputeMessagesDialog.svelte +47 -83
- package/src/lib/components/compute/ParameterPresetManager.svelte +37 -130
- package/src/lib/components/compute/SolveMessages.svelte +131 -77
- package/src/lib/components/layout/AppShell.svelte +10 -6
- package/src/lib/components/layout/PageFooter.svelte +23 -11
- package/src/lib/components/layout/PageHeader.svelte +11 -7
- package/src/lib/components/layout/Pagination.svelte +2 -4
- package/src/lib/components/layout/SectionHeader.svelte +4 -2
- package/src/lib/components/layout/SideNav.svelte +56 -7
- package/src/lib/components/preview/ChartOutput.svelte +91 -48
- package/src/lib/components/preview/Group.svelte +92 -103
- package/src/lib/components/preview/HelpButton.svelte +36 -0
- package/src/lib/components/preview/ImageOutput.svelte +434 -72
- package/src/lib/components/preview/InputControl.svelte +163 -90
- package/src/lib/components/preview/OutputDisplay.svelte +44 -42
- package/src/lib/components/preview/TabBar.svelte +106 -22
- package/src/lib/components/preview/TabContent.svelte +63 -57
- package/src/lib/components/preview/TabLayout.svelte +27 -5
- package/src/lib/components/preview/inputs/CheckboxInput.svelte +7 -7
- package/src/lib/components/preview/inputs/ChecklistInput.svelte +7 -2
- package/src/lib/components/preview/inputs/ColorInput.svelte +4 -2
- package/src/lib/components/preview/inputs/DropdownInput.svelte +19 -4
- package/src/lib/components/preview/inputs/FileInput.svelte +112 -108
- package/src/lib/components/preview/inputs/GeometryInput.svelte +128 -0
- package/src/lib/components/preview/inputs/NumberInput.svelte +123 -61
- package/src/lib/components/preview/inputs/OptionGlyph.svelte +29 -0
- package/src/lib/components/preview/inputs/SegmentedInput.svelte +44 -0
- package/src/lib/components/preview/inputs/TextInput.svelte +8 -4
- package/src/lib/components/preview/inputs/TileInput.svelte +80 -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 +11 -18
- package/src/lib/components/primitives/DataTable.svelte +38 -5
- package/src/lib/components/primitives/FilterableDropdown.svelte +42 -129
- package/src/lib/components/primitives/IssueList.svelte +56 -0
- package/src/lib/components/primitives/SeverityIcon.svelte +15 -0
- package/src/lib/components/primitives/SolvingIndicator.svelte +43 -42
- package/src/lib/components/primitives/StateDisplay.svelte +19 -79
- package/src/lib/components/primitives/ViewToggle.svelte +18 -33
- package/src/lib/components/primitives/alert-dialog/alert-dialog-action.svelte +9 -3
- package/src/lib/components/primitives/alert-dialog/alert-dialog-content.svelte +1 -1
- package/src/lib/components/primitives/alert-dialog/alert-dialog-overlay.svelte +1 -1
- package/src/lib/components/primitives/badge/badge.svelte +2 -2
- package/src/lib/components/primitives/button/button.svelte +6 -2
- package/src/lib/components/primitives/card/card-header.svelte +1 -1
- package/src/lib/components/primitives/card/card.svelte +21 -5
- package/src/lib/components/primitives/card/index.ts +1 -4
- package/src/lib/components/primitives/checkbox/checkbox.svelte +1 -1
- package/src/lib/components/primitives/command/command-dialog.svelte +42 -0
- package/src/lib/components/primitives/command/command-empty.svelte +17 -0
- package/src/lib/components/primitives/command/command-group.svelte +33 -0
- package/src/lib/components/primitives/command/command-input.svelte +36 -0
- package/src/lib/components/primitives/command/command-item.svelte +28 -0
- package/src/lib/components/primitives/command/command-link-item.svelte +21 -0
- package/src/lib/components/primitives/command/command-list.svelte +20 -0
- package/src/lib/components/primitives/command/command-loading.svelte +7 -0
- package/src/lib/components/primitives/command/command-separator.svelte +17 -0
- package/src/lib/components/primitives/command/command-shortcut.svelte +23 -0
- package/src/lib/components/primitives/command/command.svelte +28 -0
- package/src/lib/components/primitives/command/index.ts +37 -0
- package/src/lib/components/primitives/context-menu/context-menu-content.svelte +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-sub-content.svelte +1 -1
- package/src/lib/components/primitives/dialog/dialog-content.svelte +11 -3
- package/src/lib/components/primitives/dialog/dialog-overlay.svelte +1 -1
- package/src/lib/components/primitives/dialog/dialog-title.svelte +6 -2
- package/src/lib/components/primitives/drawer/Drawer.svelte +2 -2
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte +46 -0
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-content.svelte +31 -0
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-group.svelte +7 -0
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-item.svelte +27 -0
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-label.svelte +24 -0
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-portal.svelte +7 -0
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte +36 -0
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-separator.svelte +17 -0
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte +23 -0
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte +31 -0
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub.svelte +7 -0
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu.svelte +7 -0
- package/src/lib/components/primitives/dropdown-menu/index.ts +54 -0
- package/src/lib/components/primitives/{alert/alert-description.svelte → empty/empty-content.svelte} +3 -3
- package/src/lib/components/primitives/empty/empty-description.svelte +23 -0
- package/src/lib/components/primitives/{alert/alert-title.svelte → empty/empty-header.svelte} +3 -3
- package/src/lib/components/primitives/empty/empty-media.svelte +41 -0
- package/src/lib/components/primitives/{card/card-action.svelte → empty/empty-title.svelte} +2 -2
- package/src/lib/components/primitives/empty/empty.svelte +23 -0
- package/src/lib/components/primitives/empty/index.ts +22 -0
- package/src/lib/components/primitives/index.ts +10 -1
- package/src/lib/components/primitives/input/input.svelte +4 -4
- package/src/lib/components/primitives/input-group/index.ts +22 -0
- package/src/lib/components/primitives/input-group/input-group-addon.svelte +53 -0
- package/src/lib/components/primitives/input-group/input-group-button.svelte +49 -0
- package/src/lib/components/primitives/input-group/input-group-input.svelte +25 -0
- package/src/lib/components/primitives/input-group/input-group-text.svelte +22 -0
- package/src/lib/components/primitives/input-group/input-group-textarea.svelte +23 -0
- package/src/lib/components/primitives/input-group/input-group.svelte +24 -0
- package/src/lib/components/primitives/mode-toggle/mode-toggle.svelte +6 -7
- package/src/lib/components/primitives/popover/index.ts +28 -0
- package/src/lib/components/primitives/popover/popover-close.svelte +7 -0
- package/src/lib/components/primitives/popover/popover-content.svelte +31 -0
- package/src/lib/components/primitives/popover/popover-description.svelte +20 -0
- package/src/lib/components/primitives/popover/popover-header.svelte +20 -0
- package/src/lib/components/primitives/popover/popover-portal.svelte +7 -0
- package/src/lib/components/primitives/popover/popover-title.svelte +15 -0
- package/src/lib/components/primitives/popover/popover-trigger.svelte +17 -0
- package/src/lib/components/primitives/popover/popover.svelte +7 -0
- package/src/lib/components/primitives/resizable/resizable-handle.svelte +6 -2
- package/src/lib/components/primitives/resizable/resizable-pane-group.svelte +1 -4
- package/src/lib/components/primitives/scroll-area/scroll-area.svelte +1 -1
- package/src/lib/components/primitives/search/search.svelte +3 -3
- package/src/lib/components/primitives/select/select-content.svelte +1 -1
- package/src/lib/components/primitives/select/select-trigger.svelte +1 -1
- package/src/lib/components/primitives/severity.ts +26 -0
- package/src/lib/components/primitives/slider/slider.svelte +8 -3
- package/src/lib/components/primitives/sonner/sonner.svelte +1 -1
- package/src/lib/components/primitives/spinner/index.ts +1 -0
- package/src/lib/components/primitives/spinner/spinner.svelte +29 -0
- package/src/lib/components/primitives/switch/switch.svelte +2 -2
- package/src/lib/components/primitives/tabs/tabs-list.svelte +27 -5
- package/src/lib/components/primitives/tabs/tabs-trigger.svelte +23 -5
- package/src/lib/components/primitives/tabs/tabs.svelte +6 -2
- package/src/lib/components/primitives/textarea/textarea.svelte +1 -1
- package/src/lib/components/primitives/theme-switcher/ThemeSwitcher.svelte +1 -1
- package/src/lib/components/primitives/toggle/index.ts +13 -0
- package/src/lib/components/primitives/toggle/toggle.svelte +54 -0
- package/src/lib/components/primitives/toggle-group/index.ts +10 -0
- package/src/lib/components/primitives/toggle-group/toggle-group-item.svelte +35 -0
- package/src/lib/components/primitives/toggle-group/toggle-group.svelte +75 -0
- package/src/lib/components/viewer/MeshMetadataPanel.svelte +119 -0
- package/src/lib/components/viewer/SceneManager.svelte +14 -5
- package/src/lib/components/viewer/Viewer.svelte +243 -221
- 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 +7 -9
- package/src/lib/contexts/hostContext.svelte.ts +51 -0
- package/src/lib/i18n/localeContext.svelte.ts +40 -5
- package/src/lib/i18n/messages.ts +453 -13
- package/src/lib/index.ts +21 -0
- package/src/lib/public.ts +1 -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 +23 -0
- package/src/lib/styles/base.css +80 -10
- package/src/lib/types/actionButton.ts +16 -3
- package/src/lib/types/presetLabels.ts +13 -11
- 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/alert/alert.svelte +0 -44
- package/dist/components/primitives/alert/alert.svelte.d.ts +0 -26
- package/dist/components/primitives/alert/index.d.ts +0 -5
- package/dist/components/primitives/alert/index.js +0 -7
- package/dist/components/viewer/MeshMetadataDialog.svelte +0 -126
- package/dist/components/viewer/MeshMetadataDialog.svelte.d.ts +0 -10
- package/src/lib/components/primitives/alert/alert.svelte +0 -44
- package/src/lib/components/primitives/alert/index.ts +0 -14
- package/src/lib/components/viewer/MeshMetadataDialog.svelte +0 -126
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* When to show that a solve is running. A solve that ends within `SHOW_AFTER_MS` shows nothing:
|
|
3
|
+
* the result updating is feedback enough, and a spinner that flashes for a frame reads as jank.
|
|
4
|
+
* Once shown, the indicator stays `MIN_VISIBLE_MS` for the same reason. `slow` turns on past
|
|
5
|
+
* `SLOW_AFTER_MS`, the case of a Rhino.Compute round trip or a heavy definition.
|
|
4
6
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* - First solve: shown immediately, there is no history yet
|
|
7
|
+
* `freezesDuringSolve` is for a host that can't paint while it solves (an embedded WebView on
|
|
8
|
+
* the solver's thread). A delay can't run there, so the indicator shows on every solve, before
|
|
9
|
+
* the solve takes the thread: it is the only place that host can say Esc aborts.
|
|
9
10
|
*/
|
|
10
|
-
export declare function createSolvingIndicator(isSolving: () => boolean
|
|
11
|
+
export declare function createSolvingIndicator(isSolving: () => boolean, options?: {
|
|
12
|
+
freezesDuringSolve?: boolean;
|
|
13
|
+
}): {
|
|
11
14
|
readonly show: boolean;
|
|
15
|
+
readonly slow: boolean;
|
|
12
16
|
};
|
|
@@ -1,68 +1,87 @@
|
|
|
1
1
|
import { untrack } from 'svelte';
|
|
2
2
|
import { APP_DEFAULTS } from '../constants';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* When to show that a solve is running. A solve that ends within `SHOW_AFTER_MS` shows nothing:
|
|
5
|
+
* the result updating is feedback enough, and a spinner that flashes for a frame reads as jank.
|
|
6
|
+
* Once shown, the indicator stays `MIN_VISIBLE_MS` for the same reason. `slow` turns on past
|
|
7
|
+
* `SLOW_AFTER_MS`, the case of a Rhino.Compute round trip or a heavy definition.
|
|
6
8
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* - First solve: shown immediately, there is no history yet
|
|
9
|
+
* `freezesDuringSolve` is for a host that can't paint while it solves (an embedded WebView on
|
|
10
|
+
* the solver's thread). A delay can't run there, so the indicator shows on every solve, before
|
|
11
|
+
* the solve takes the thread: it is the only place that host can say Esc aborts.
|
|
11
12
|
*/
|
|
12
|
-
export function createSolvingIndicator(isSolving) {
|
|
13
|
-
const {
|
|
13
|
+
export function createSolvingIndicator(isSolving, options = {}) {
|
|
14
|
+
const { SHOW_AFTER_MS, MIN_VISIBLE_MS, SLOW_AFTER_MS } = APP_DEFAULTS.SOLVING_INDICATOR;
|
|
15
|
+
if (options.freezesDuringSolve) {
|
|
16
|
+
return {
|
|
17
|
+
// Read straight from `isSolving`, not through an effect: an effect would run a tick
|
|
18
|
+
// later, after the solve has already frozen the page.
|
|
19
|
+
get show() {
|
|
20
|
+
return isSolving();
|
|
21
|
+
},
|
|
22
|
+
slow: false
|
|
23
|
+
};
|
|
24
|
+
}
|
|
14
25
|
let show = $state(false);
|
|
15
|
-
let
|
|
16
|
-
let
|
|
17
|
-
|
|
26
|
+
let slow = $state(false);
|
|
27
|
+
let shownAt = 0;
|
|
28
|
+
let showTimer = null;
|
|
29
|
+
let slowTimer = null;
|
|
30
|
+
let hideTimer = null;
|
|
31
|
+
function clear(timer) {
|
|
32
|
+
if (timer)
|
|
33
|
+
clearTimeout(timer);
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
function hide() {
|
|
37
|
+
hideTimer = null;
|
|
38
|
+
show = false;
|
|
39
|
+
slow = false;
|
|
40
|
+
}
|
|
18
41
|
$effect(() => {
|
|
19
42
|
const solving = isSolving();
|
|
20
43
|
untrack(() => {
|
|
21
44
|
if (solving) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return;
|
|
28
|
-
const delay = avg === Infinity || avg >= SLOW_THRESHOLD_MS
|
|
29
|
-
? 0
|
|
30
|
-
: ((avg - FAST_THRESHOLD_MS) / (SLOW_THRESHOLD_MS - FAST_THRESHOLD_MS)) *
|
|
31
|
-
ANIMATION_DELAY;
|
|
32
|
-
if (!timeout) {
|
|
33
|
-
if (delay === 0) {
|
|
45
|
+
// A solve that starts while the last one's indicator is held keeps it up.
|
|
46
|
+
hideTimer = clear(hideTimer);
|
|
47
|
+
if (!show) {
|
|
48
|
+
showTimer ??= setTimeout(() => {
|
|
49
|
+
showTimer = null;
|
|
34
50
|
show = true;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
timeout = setTimeout(() => {
|
|
38
|
-
show = true;
|
|
39
|
-
timeout = null;
|
|
40
|
-
}, delay);
|
|
41
|
-
}
|
|
51
|
+
shownAt = performance.now();
|
|
52
|
+
}, SHOW_AFTER_MS);
|
|
42
53
|
}
|
|
54
|
+
slowTimer ??= setTimeout(() => {
|
|
55
|
+
slowTimer = null;
|
|
56
|
+
slow = true;
|
|
57
|
+
}, SLOW_AFTER_MS);
|
|
43
58
|
}
|
|
44
59
|
else {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
show = false;
|
|
60
|
+
showTimer = clear(showTimer);
|
|
61
|
+
slowTimer = clear(slowTimer);
|
|
62
|
+
if (!show)
|
|
63
|
+
return;
|
|
64
|
+
const remaining = MIN_VISIBLE_MS - (performance.now() - shownAt);
|
|
65
|
+
if (remaining > 0)
|
|
66
|
+
hideTimer ??= setTimeout(hide, remaining);
|
|
67
|
+
else
|
|
68
|
+
hide();
|
|
56
69
|
}
|
|
57
70
|
});
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
71
|
+
});
|
|
72
|
+
// Separate from the effect above: a cleanup there would run on every `isSolving` flip and
|
|
73
|
+
// cancel the timers it just set.
|
|
74
|
+
$effect(() => () => {
|
|
75
|
+
clear(showTimer);
|
|
76
|
+
clear(slowTimer);
|
|
77
|
+
clear(hideTimer);
|
|
62
78
|
});
|
|
63
79
|
return {
|
|
64
80
|
get show() {
|
|
65
81
|
return show;
|
|
82
|
+
},
|
|
83
|
+
get slow() {
|
|
84
|
+
return slow;
|
|
66
85
|
}
|
|
67
86
|
};
|
|
68
87
|
}
|
|
@@ -79,10 +79,13 @@ export function useSolveSession(args) {
|
|
|
79
79
|
discard: () => session.discard(),
|
|
80
80
|
setValue: (id, value, forceSolve) => session.setValue(id, value, forceSolve),
|
|
81
81
|
solve: () => session.solve(),
|
|
82
|
+
ensureSolved: () => session.ensureSolved(),
|
|
83
|
+
onSettled: (listener) => session.onSettled(listener),
|
|
82
84
|
loadValues: (incoming) => session.loadValues(incoming),
|
|
83
85
|
rebuild: (schema, scopeKey) => session.rebuild(schema, scopeKey),
|
|
84
86
|
report: (result) => session.report(result),
|
|
85
87
|
reportError: (message) => session.reportError(message),
|
|
88
|
+
reportAborted: () => session.reportAborted(),
|
|
86
89
|
subscribe: (listener) => session.subscribe(listener),
|
|
87
90
|
notify: () => session.notify(),
|
|
88
91
|
dispose: () => session.dispose()
|
package/dist/constants.d.ts
CHANGED
|
@@ -10,14 +10,12 @@ export declare const APP_DEFAULTS: {
|
|
|
10
10
|
DRAWER_ANIMATION_MS: number;
|
|
11
11
|
};
|
|
12
12
|
SOLVING_INDICATOR: {
|
|
13
|
-
/**
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
|
|
19
|
-
/** Number of solve durations to keep in history for averaging */
|
|
20
|
-
HISTORY_SIZE: number;
|
|
13
|
+
/** A solve that ends sooner shows no indicator (ms) */
|
|
14
|
+
SHOW_AFTER_MS: number;
|
|
15
|
+
/** Once shown, the indicator stays at least this long (ms) */
|
|
16
|
+
MIN_VISIBLE_MS: number;
|
|
17
|
+
/** Past this a solve counts as slow and the viewer dims its stale result (ms) */
|
|
18
|
+
SLOW_AFTER_MS: number;
|
|
21
19
|
};
|
|
22
20
|
FILE_SIZE: {
|
|
23
21
|
/** Bytes per kilobyte */
|
package/dist/constants.js
CHANGED
|
@@ -16,16 +16,14 @@ export const APP_DEFAULTS = {
|
|
|
16
16
|
/** Drawer open/close animation duration (ms) — matches the CSS transition. */
|
|
17
17
|
DRAWER_ANIMATION_MS: 350
|
|
18
18
|
},
|
|
19
|
-
//
|
|
19
|
+
// See createSolvingIndicator.
|
|
20
20
|
SOLVING_INDICATOR: {
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
|
|
27
|
-
/** Number of solve durations to keep in history for averaging */
|
|
28
|
-
HISTORY_SIZE: 3
|
|
21
|
+
/** A solve that ends sooner shows no indicator (ms) */
|
|
22
|
+
SHOW_AFTER_MS: 400,
|
|
23
|
+
/** Once shown, the indicator stays at least this long (ms) */
|
|
24
|
+
MIN_VISIBLE_MS: 500,
|
|
25
|
+
/** Past this a solve counts as slow and the viewer dims its stale result (ms) */
|
|
26
|
+
SLOW_AFTER_MS: 2000
|
|
29
27
|
},
|
|
30
28
|
// File size formatting
|
|
31
29
|
FILE_SIZE: {
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { GeometryKind } from '@selvajs/schemas';
|
|
2
|
+
import type { UIHost } from '../schema/host-support';
|
|
3
|
+
export type GeometryPickResult = {
|
|
4
|
+
outcome: 'picked';
|
|
5
|
+
summary: string;
|
|
6
|
+
} | {
|
|
7
|
+
outcome: 'cancelled';
|
|
8
|
+
} | {
|
|
9
|
+
outcome: 'failed';
|
|
10
|
+
error: string;
|
|
11
|
+
};
|
|
12
|
+
/** What a pick button can ask for: a Get Geometry filter's kinds, or Get Point/Line/Plane's own. */
|
|
13
|
+
export type PickKind = GeometryKind | 'line' | 'plane';
|
|
14
|
+
/** What a geometry input lets the user pick, as the host discovered it on the canvas. */
|
|
15
|
+
export interface GeometryPickTarget {
|
|
16
|
+
/** The kinds its filter allows; absent when it takes anything. */
|
|
17
|
+
kinds?: readonly GeometryKind[];
|
|
18
|
+
/** 1 picks a single object. */
|
|
19
|
+
atMost?: number;
|
|
20
|
+
}
|
|
21
|
+
export interface HostActions {
|
|
22
|
+
host: UIHost;
|
|
23
|
+
/** Prompts in the Rhino viewport for a geometry input. The picked geometry stays in Grasshopper. */
|
|
24
|
+
pickGeometry?: (paramId: string) => Promise<GeometryPickResult>;
|
|
25
|
+
/** Empties a geometry input again, back to the definition's own value. */
|
|
26
|
+
clearGeometry?: (paramId: string) => void;
|
|
27
|
+
/**
|
|
28
|
+
* Reports what the param holds after every pick or clear, including those another page asked
|
|
29
|
+
* for; null when nothing is picked into it. Returns an unsubscribe.
|
|
30
|
+
*/
|
|
31
|
+
onGeometrySummary?: (paramId: string, listener: (summary: string | null) => void) => () => void;
|
|
32
|
+
describeGeometry?: (paramId: string) => GeometryPickTarget | undefined;
|
|
33
|
+
/** Presses a button input: one solve with `true`, then it goes back to `false`. */
|
|
34
|
+
trigger?: (paramId: string) => void;
|
|
35
|
+
/** Grasshopper refuses a press while it solves, so the button waits it out disabled. */
|
|
36
|
+
isSolving?: () => boolean;
|
|
37
|
+
}
|
|
38
|
+
export declare function setHostContext(actions: HostActions): void;
|
|
39
|
+
export declare function getHostContext(): HostActions;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { getContext, setContext } from 'svelte';
|
|
2
|
+
const SELVA_HOST = { host: 'selva' };
|
|
3
|
+
const HOST_CONTEXT_KEY = Symbol('host-context');
|
|
4
|
+
export function setHostContext(actions) {
|
|
5
|
+
setContext(HOST_CONTEXT_KEY, actions);
|
|
6
|
+
}
|
|
7
|
+
export function getHostContext() {
|
|
8
|
+
return getContext(HOST_CONTEXT_KEY) ?? SELVA_HOST;
|
|
9
|
+
}
|
|
@@ -4,11 +4,18 @@ export interface LocaleContext {
|
|
|
4
4
|
readonly messages: ViewerMessages;
|
|
5
5
|
}
|
|
6
6
|
/**
|
|
7
|
-
* Provide the locale to descendants. Pass
|
|
7
|
+
* Provide the locale to descendants. Pass getters, not values: they are re-read on every
|
|
8
8
|
* consumer render, so a reactive source (a `$state`, the app's Paraglide locale) switches
|
|
9
|
-
* the language live.
|
|
9
|
+
* the language live. `getOverrides` replaces individual strings of the resolved catalog.
|
|
10
10
|
*/
|
|
11
|
-
export declare function setLocaleContext(getLocale: () => Locale | undefined): void;
|
|
11
|
+
export declare function setLocaleContext(getLocale: () => Locale | undefined, getOverrides?: () => Partial<ViewerMessages> | undefined): void;
|
|
12
|
+
/**
|
|
13
|
+
* Re-provides the nearest context for a component that takes its own `lang`/`messages` props.
|
|
14
|
+
* Without `lang`, or with the inherited locale, the subtree keeps the overrides an outer provider
|
|
15
|
+
* applied; a different `lang` starts from that locale's catalog, since those overrides were
|
|
16
|
+
* written for another language.
|
|
17
|
+
*/
|
|
18
|
+
export declare function layerLocaleContext(getLang: () => Locale | undefined, getOverrides?: () => Partial<ViewerMessages> | undefined): LocaleContext;
|
|
12
19
|
/**
|
|
13
20
|
* Falls back to an English-only context when no provider exists (a primitive used in
|
|
14
21
|
* isolation), so consumers never need a null check.
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { getContext, setContext } from 'svelte';
|
|
2
|
-
import { messagesFor, DEFAULT_LOCALE } from './messages';
|
|
2
|
+
import { messagesFor, withOverrides, DEFAULT_LOCALE } from './messages';
|
|
3
3
|
// Carries the UI locale down to the viewer and its panels without threading a
|
|
4
4
|
// `lang` prop through every layer.
|
|
5
5
|
//
|
|
6
6
|
// Resolution order for any consuming component:
|
|
7
7
|
// explicit `lang` prop → nearest locale context → English default
|
|
8
|
+
// and the strings are that locale's catalog with any `messages` overrides on top.
|
|
8
9
|
//
|
|
9
10
|
// Two ways to provide it:
|
|
10
11
|
// - Standalone: <Viewer lang="de" /> — Viewer provides the context itself.
|
|
@@ -12,21 +13,42 @@ import { messagesFor, DEFAULT_LOCALE } from './messages';
|
|
|
12
13
|
// viewer (and anything else) reads it.
|
|
13
14
|
const LOCALE_CONTEXT_KEY = Symbol('viewer-locale-context');
|
|
14
15
|
/**
|
|
15
|
-
* Provide the locale to descendants. Pass
|
|
16
|
+
* Provide the locale to descendants. Pass getters, not values: they are re-read on every
|
|
16
17
|
* consumer render, so a reactive source (a `$state`, the app's Paraglide locale) switches
|
|
17
|
-
* the language live.
|
|
18
|
+
* the language live. `getOverrides` replaces individual strings of the resolved catalog.
|
|
18
19
|
*/
|
|
19
|
-
export function setLocaleContext(getLocale) {
|
|
20
|
+
export function setLocaleContext(getLocale, getOverrides) {
|
|
20
21
|
const ctx = {
|
|
21
22
|
get locale() {
|
|
22
23
|
return getLocale() ?? DEFAULT_LOCALE;
|
|
23
24
|
},
|
|
24
25
|
get messages() {
|
|
25
|
-
return messagesFor(getLocale());
|
|
26
|
+
return withOverrides(messagesFor(getLocale()), getOverrides?.());
|
|
26
27
|
}
|
|
27
28
|
};
|
|
28
29
|
setContext(LOCALE_CONTEXT_KEY, ctx);
|
|
29
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Re-provides the nearest context for a component that takes its own `lang`/`messages` props.
|
|
33
|
+
* Without `lang`, or with the inherited locale, the subtree keeps the overrides an outer provider
|
|
34
|
+
* applied; a different `lang` starts from that locale's catalog, since those overrides were
|
|
35
|
+
* written for another language.
|
|
36
|
+
*/
|
|
37
|
+
export function layerLocaleContext(getLang, getOverrides) {
|
|
38
|
+
const outer = getLocaleContext();
|
|
39
|
+
const ctx = {
|
|
40
|
+
get locale() {
|
|
41
|
+
return getLang() ?? outer.locale;
|
|
42
|
+
},
|
|
43
|
+
get messages() {
|
|
44
|
+
const lang = getLang();
|
|
45
|
+
const base = lang === undefined || lang === outer.locale ? outer.messages : messagesFor(lang);
|
|
46
|
+
return withOverrides(base, getOverrides?.());
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
setContext(LOCALE_CONTEXT_KEY, ctx);
|
|
50
|
+
return ctx;
|
|
51
|
+
}
|
|
30
52
|
/**
|
|
31
53
|
* Falls back to an English-only context when no provider exists (a primitive used in
|
|
32
54
|
* isolation), so consumers never need a null check.
|
package/dist/i18n/messages.d.ts
CHANGED
|
@@ -20,6 +20,13 @@ export interface ViewerMessages {
|
|
|
20
20
|
viewLeft: string;
|
|
21
21
|
viewBottom: string;
|
|
22
22
|
viewIso: string;
|
|
23
|
+
lookTechnical: string;
|
|
24
|
+
lookStudio: string;
|
|
25
|
+
lookShowcase: string;
|
|
26
|
+
lookArctic: string;
|
|
27
|
+
lookXray: string;
|
|
28
|
+
lookLineart: string;
|
|
29
|
+
lookWireframe: string;
|
|
23
30
|
searchObjects: string;
|
|
24
31
|
clearSearch: string;
|
|
25
32
|
expandLayer: string;
|
|
@@ -43,12 +50,14 @@ export interface ViewerMessages {
|
|
|
43
50
|
solveMessagesConfirm: string;
|
|
44
51
|
solveMessagesDiscard: string;
|
|
45
52
|
solveMessagesAbort: string;
|
|
53
|
+
/** Stands in for Abort where the page can't take a click mid-solve. */
|
|
54
|
+
solveMessagesEscHint: string;
|
|
46
55
|
solveMessagesDismiss: string;
|
|
47
56
|
solveSolving: string;
|
|
48
57
|
parametersTab: string;
|
|
49
58
|
moreTab: string;
|
|
50
|
-
|
|
51
|
-
|
|
59
|
+
scrollTabsBack: string;
|
|
60
|
+
scrollTabsForward: string;
|
|
52
61
|
/** `{side}` is replaced with `panelSideLeft` / `panelSideRight`. */
|
|
53
62
|
expandSidePanel: string;
|
|
54
63
|
panelSideLeft: string;
|
|
@@ -60,8 +69,147 @@ export interface ViewerMessages {
|
|
|
60
69
|
pressToCalculate: string;
|
|
61
70
|
calculate: string;
|
|
62
71
|
upToDate: string;
|
|
72
|
+
/** The panel footer's ⋯ menu: saving and loading inputs, plus the host's own actions. */
|
|
73
|
+
moreActions: string;
|
|
74
|
+
/** Under a menu action that solves before it runs, while the inputs have changed. */
|
|
75
|
+
calculatesFirst: string;
|
|
76
|
+
/** `{count}` is replaced with the number of errors. */
|
|
77
|
+
errorCountOne: string;
|
|
78
|
+
errorCountOther: string;
|
|
79
|
+
/** `{count}` is replaced with the number of warnings. */
|
|
80
|
+
warningCountOne: string;
|
|
81
|
+
warningCountOther: string;
|
|
82
|
+
/** `{count}` is replaced with the number of notes. */
|
|
83
|
+
noteCountOne: string;
|
|
84
|
+
noteCountOther: string;
|
|
85
|
+
/** `{count}` is replaced with the number of messages. */
|
|
86
|
+
lastSolveMessagesOne: string;
|
|
87
|
+
lastSolveMessagesOther: string;
|
|
88
|
+
messagesTitle: string;
|
|
89
|
+
/** `{name}` is replaced with the copyright holder, `{year}` with the current year. */
|
|
90
|
+
copyright: string;
|
|
91
|
+
close: string;
|
|
92
|
+
toggleTheme: string;
|
|
93
|
+
errorTitle: string;
|
|
94
|
+
goHome: string;
|
|
95
|
+
selectOption: string;
|
|
96
|
+
noOptionsYet: string;
|
|
97
|
+
/** `{min}` is replaced with the field's minimum. */
|
|
98
|
+
minValue: string;
|
|
99
|
+
/** `{max}` is replaced with the field's maximum. */
|
|
100
|
+
maxValue: string;
|
|
101
|
+
fineDragHint: string;
|
|
102
|
+
/** `{max}` is replaced with the field's character limit. */
|
|
103
|
+
maxLength: string;
|
|
104
|
+
invalidFormat: string;
|
|
105
|
+
invalidPattern: string;
|
|
106
|
+
/** The pick button when the input takes several kinds of object. */
|
|
107
|
+
geometryPickAnyOne: string;
|
|
108
|
+
geometryPickAnyOther: string;
|
|
109
|
+
/** Shown while Rhino's viewport prompt for a pick is open. */
|
|
110
|
+
geometryPicking: string;
|
|
111
|
+
/** Where this page may not pick, such as a browser tab beside the Rhino panel. */
|
|
112
|
+
geometryPickInPanel: string;
|
|
113
|
+
geometryPickAgain: string;
|
|
114
|
+
geometryClear: string;
|
|
115
|
+
geometryPickPointOne: string;
|
|
116
|
+
geometryPickPointOther: string;
|
|
117
|
+
geometryPickPointCloudOne: string;
|
|
118
|
+
geometryPickPointCloudOther: string;
|
|
119
|
+
geometryPickCurveOne: string;
|
|
120
|
+
geometryPickCurveOther: string;
|
|
121
|
+
geometryPickLineOne: string;
|
|
122
|
+
geometryPickLineOther: string;
|
|
123
|
+
geometryPickPlaneOne: string;
|
|
124
|
+
geometryPickPlaneOther: string;
|
|
125
|
+
geometryPickSurfaceOne: string;
|
|
126
|
+
geometryPickSurfaceOther: string;
|
|
127
|
+
geometryPickPolysurfaceOne: string;
|
|
128
|
+
geometryPickPolysurfaceOther: string;
|
|
129
|
+
geometryPickExtrusionOne: string;
|
|
130
|
+
geometryPickExtrusionOther: string;
|
|
131
|
+
geometryPickMeshOne: string;
|
|
132
|
+
geometryPickMeshOther: string;
|
|
133
|
+
geometryPickSubdOne: string;
|
|
134
|
+
geometryPickSubdOther: string;
|
|
135
|
+
geometryPickBlockOne: string;
|
|
136
|
+
geometryPickBlockOther: string;
|
|
137
|
+
fileModeUpload: string;
|
|
138
|
+
fileModeUrl: string;
|
|
139
|
+
fileUrlLabel: string;
|
|
140
|
+
fetchFile: string;
|
|
141
|
+
fetchingFile: string;
|
|
142
|
+
fileUrlPublic: string;
|
|
143
|
+
chooseFile: string;
|
|
144
|
+
/** `{formats}` is replaced with the accepted extensions. */
|
|
145
|
+
acceptedFormats: string;
|
|
146
|
+
/** `{ext}` is replaced with the file's extension. */
|
|
147
|
+
uploadedFile: string;
|
|
148
|
+
/** `{ext}` is replaced with the file's extension, `{size}` with its size in MB. */
|
|
149
|
+
uploadedFileSize: string;
|
|
150
|
+
/** `{ext}` is replaced with the file's extension, `{size}` with its size in KB. */
|
|
151
|
+
fileLoaded: string;
|
|
152
|
+
urlInvalid: string;
|
|
153
|
+
urlProtocolUnsupported: string;
|
|
154
|
+
/** `{status}` is replaced with the HTTP status the server answered with. */
|
|
155
|
+
urlServerError: string;
|
|
156
|
+
/** `{ext}` is replaced with the rejected extension, `{formats}` with the accepted ones. */
|
|
157
|
+
fileFormatNotAccepted: string;
|
|
158
|
+
/** `{size}` is replaced with the file's size in MB, `{max}` with the limit in MB. */
|
|
159
|
+
fileTooLarge: string;
|
|
160
|
+
fileTooLargeUseUpload: string;
|
|
161
|
+
fileReadFailed: string;
|
|
162
|
+
/** `{host}` is replaced with the URL's host name. */
|
|
163
|
+
urlUnreachable: string;
|
|
164
|
+
urlUnreachableHint: string;
|
|
165
|
+
urlHintSharePoint: string;
|
|
166
|
+
urlHintGoogleDrive: string;
|
|
167
|
+
urlHintDropbox: string;
|
|
168
|
+
unknownError: string;
|
|
169
|
+
waitingForData: string;
|
|
170
|
+
waitingForFiles: string;
|
|
171
|
+
/** `{count}` is replaced with the number of files. */
|
|
172
|
+
fileCount: string;
|
|
173
|
+
duplicateFilesTitle: string;
|
|
174
|
+
duplicatePathsOne: string;
|
|
175
|
+
duplicatePathsOther: string;
|
|
176
|
+
duplicateFilesHint: string;
|
|
177
|
+
downloadFile: string;
|
|
178
|
+
/** `{count}` is replaced with the number of files. */
|
|
179
|
+
downloadFiles: string;
|
|
180
|
+
downloading: string;
|
|
181
|
+
downloadFailed: string;
|
|
182
|
+
copy: string;
|
|
183
|
+
copied: string;
|
|
184
|
+
chartReceiving: string;
|
|
185
|
+
chartRenderFailed: string;
|
|
186
|
+
/** `{error}` is replaced with the browser's reason. */
|
|
187
|
+
fullscreenUnavailable: string;
|
|
188
|
+
/** `{error}` is replaced with the browser's reason. */
|
|
189
|
+
exitFullscreenFailed: string;
|
|
190
|
+
imageViewer: string;
|
|
191
|
+
imageLoading: string;
|
|
192
|
+
/** `{ext}` is replaced with the file's extension, `{formats}` with the supported ones. */
|
|
193
|
+
imageUnsupported: string;
|
|
194
|
+
imageUnknownFormat: string;
|
|
195
|
+
/** `{file}` is replaced with the file's name. */
|
|
196
|
+
imageDecodeFailed: string;
|
|
197
|
+
previousImage: string;
|
|
198
|
+
nextImage: string;
|
|
199
|
+
zoomHint: string;
|
|
200
|
+
zoomIn: string;
|
|
201
|
+
zoomOut: string;
|
|
202
|
+
zoomFit: string;
|
|
203
|
+
zoomActual: string;
|
|
204
|
+
downloadImage: string;
|
|
63
205
|
}
|
|
64
206
|
export declare const VIEWER_MESSAGES: Record<Locale, ViewerMessages>;
|
|
65
207
|
export declare const DEFAULT_LOCALE: Locale;
|
|
66
208
|
/** Resolve a catalog for a locale, falling back to English for unknown locales. */
|
|
67
209
|
export declare function messagesFor(locale: Locale | undefined): ViewerMessages;
|
|
210
|
+
/** Layers a host's partial overrides over a full catalog. An `undefined` entry keeps the base string. */
|
|
211
|
+
export declare function withOverrides(base: ViewerMessages, overrides: Partial<ViewerMessages> | undefined): ViewerMessages;
|
|
212
|
+
/** Fills each `{name}` placeholder from `vars`; an unknown placeholder is left as written. */
|
|
213
|
+
export declare function formatMessage(template: string, vars: Record<string, string | number>): string;
|
|
214
|
+
/** Picks the singular or plural form for `count` and fills its `{count}`. */
|
|
215
|
+
export declare function formatCount(count: number, one: string, other: string): string;
|