@selvajs/ui 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +45 -0
- package/dist/components/ErrorScreen.svelte +53 -0
- package/dist/components/ErrorScreen.svelte.d.ts +9 -0
- package/dist/components/compute/AppLayout.svelte +470 -0
- package/dist/components/compute/AppLayout.svelte.d.ts +23 -0
- package/dist/components/compute/CollapsedPanelStrip.svelte +64 -0
- package/dist/components/compute/CollapsedPanelStrip.svelte.d.ts +11 -0
- package/dist/components/compute/ComputeApp.svelte +243 -0
- package/dist/components/compute/ComputeApp.svelte.d.ts +29 -0
- package/dist/components/compute/ComputeMessages.svelte +169 -0
- package/dist/components/compute/ComputeMessages.svelte.d.ts +7 -0
- package/dist/components/compute/ParameterPresetManager.svelte +326 -0
- package/dist/components/compute/ParameterPresetManager.svelte.d.ts +13 -0
- package/dist/components/compute/index.d.ts +5 -0
- package/dist/components/compute/index.js +5 -0
- package/dist/components/layout/AppShell.svelte +110 -0
- package/dist/components/layout/AppShell.svelte.d.ts +24 -0
- package/dist/components/layout/EmptyState.svelte +48 -0
- package/dist/components/layout/EmptyState.svelte.d.ts +15 -0
- package/dist/components/layout/FooterItemRenderer.svelte +20 -0
- package/dist/components/layout/FooterItemRenderer.svelte.d.ts +7 -0
- package/dist/components/layout/PageContent.svelte +12 -0
- package/dist/components/layout/PageContent.svelte.d.ts +7 -0
- package/dist/components/layout/PageFooter.svelte +222 -0
- package/dist/components/layout/PageFooter.svelte.d.ts +9 -0
- package/dist/components/layout/PageHeader.svelte +67 -0
- package/dist/components/layout/PageHeader.svelte.d.ts +14 -0
- package/dist/components/layout/SectionHeader.svelte +38 -0
- package/dist/components/layout/SectionHeader.svelte.d.ts +11 -0
- package/dist/components/layout/SideNav.svelte +82 -0
- package/dist/components/layout/SideNav.svelte.d.ts +19 -0
- package/dist/components/layout/SubNav.svelte +45 -0
- package/dist/components/layout/SubNav.svelte.d.ts +14 -0
- package/dist/components/layout/index.d.ts +10 -0
- package/dist/components/layout/index.js +9 -0
- package/dist/components/preview/ChartOutput.svelte +222 -0
- package/dist/components/preview/ChartOutput.svelte.d.ts +8 -0
- package/dist/components/preview/Group.svelte +134 -0
- package/dist/components/preview/Group.svelte.d.ts +25 -0
- package/dist/components/preview/ImageOutput.svelte +156 -0
- package/dist/components/preview/ImageOutput.svelte.d.ts +8 -0
- package/dist/components/preview/InputControl.svelte +130 -0
- package/dist/components/preview/InputControl.svelte.d.ts +11 -0
- package/dist/components/preview/OutputDisplay.svelte +297 -0
- package/dist/components/preview/OutputDisplay.svelte.d.ts +9 -0
- package/dist/components/preview/TabBar.svelte +36 -0
- package/dist/components/preview/TabBar.svelte.d.ts +8 -0
- package/dist/components/preview/TabContent.svelte +125 -0
- package/dist/components/preview/TabContent.svelte.d.ts +13 -0
- package/dist/components/preview/TabLayout.svelte +109 -0
- package/dist/components/preview/TabLayout.svelte.d.ts +13 -0
- package/dist/components/preview/index.d.ts +3 -0
- package/dist/components/preview/index.js +4 -0
- package/dist/components/preview/inputs/CheckboxInput.svelte +29 -0
- package/dist/components/preview/inputs/CheckboxInput.svelte.d.ts +10 -0
- package/dist/components/preview/inputs/ChecklistInput.svelte +50 -0
- package/dist/components/preview/inputs/ChecklistInput.svelte.d.ts +11 -0
- package/dist/components/preview/inputs/ColorInput.svelte +21 -0
- package/dist/components/preview/inputs/ColorInput.svelte.d.ts +7 -0
- package/dist/components/preview/inputs/DropdownInput.svelte +40 -0
- package/dist/components/preview/inputs/DropdownInput.svelte.d.ts +10 -0
- package/dist/components/preview/inputs/FileInput.svelte +368 -0
- package/dist/components/preview/inputs/FileInput.svelte.d.ts +10 -0
- package/dist/components/preview/inputs/NumberInput.svelte +152 -0
- package/dist/components/preview/inputs/NumberInput.svelte.d.ts +11 -0
- package/dist/components/preview/inputs/TextInput.svelte +74 -0
- package/dist/components/preview/inputs/TextInput.svelte.d.ts +11 -0
- package/dist/components/preview/inputs/index.d.ts +7 -0
- package/dist/components/preview/inputs/index.js +7 -0
- package/dist/components/primitives/CalculateButton.svelte +40 -0
- package/dist/components/primitives/CalculateButton.svelte.d.ts +9 -0
- package/dist/components/primitives/DataTable.svelte +39 -0
- package/dist/components/primitives/DataTable.svelte.d.ts +36 -0
- package/dist/components/primitives/ImageUploadField.svelte +84 -0
- package/dist/components/primitives/ImageUploadField.svelte.d.ts +15 -0
- package/dist/components/primitives/SolvingIndicator.svelte +54 -0
- package/dist/components/primitives/SolvingIndicator.svelte.d.ts +6 -0
- package/dist/components/primitives/StateDisplay.svelte +106 -0
- package/dist/components/primitives/StateDisplay.svelte.d.ts +10 -0
- package/dist/components/primitives/ViewToggle.svelte +47 -0
- package/dist/components/primitives/ViewToggle.svelte.d.ts +9 -0
- package/dist/components/primitives/alert/alert-description.svelte +23 -0
- package/dist/components/primitives/alert/alert-description.svelte.d.ts +5 -0
- package/dist/components/primitives/alert/alert-title.svelte +20 -0
- package/dist/components/primitives/alert/alert-title.svelte.d.ts +5 -0
- package/dist/components/primitives/alert/alert.svelte +44 -0
- package/dist/components/primitives/alert/alert.svelte.d.ts +26 -0
- package/dist/components/primitives/alert/index.d.ts +5 -0
- package/dist/components/primitives/alert/index.js +7 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-action.svelte +18 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-action.svelte.d.ts +4 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-cancel.svelte +18 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-cancel.svelte.d.ts +4 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-content.svelte +27 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-content.svelte.d.ts +8 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-description.svelte +17 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-description.svelte.d.ts +4 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-footer.svelte +20 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-footer.svelte.d.ts +5 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-header.svelte +20 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-header.svelte.d.ts +5 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-overlay.svelte +20 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-overlay.svelte.d.ts +4 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-title.svelte +17 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-title.svelte.d.ts +4 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-trigger.svelte +7 -0
- package/dist/components/primitives/alert-dialog/alert-dialog-trigger.svelte.d.ts +4 -0
- package/dist/components/primitives/alert-dialog/index.d.ts +12 -0
- package/dist/components/primitives/alert-dialog/index.js +15 -0
- package/dist/components/primitives/badge/badge.svelte +49 -0
- package/dist/components/primitives/badge/badge.svelte.d.ts +32 -0
- package/dist/components/primitives/badge/index.d.ts +2 -0
- package/dist/components/primitives/badge/index.js +2 -0
- package/dist/components/primitives/button/button.svelte +83 -0
- package/dist/components/primitives/button/button.svelte.d.ts +67 -0
- package/dist/components/primitives/button/index.d.ts +2 -0
- package/dist/components/primitives/button/index.js +4 -0
- package/dist/components/primitives/button-group/button-group-separator.svelte +20 -0
- package/dist/components/primitives/button-group/button-group-separator.svelte.d.ts +13 -0
- package/dist/components/primitives/button-group/button-group-text.svelte +30 -0
- package/dist/components/primitives/button-group/button-group-text.svelte.d.ts +11 -0
- package/dist/components/primitives/button-group/button-group.svelte +46 -0
- package/dist/components/primitives/button-group/button-group.svelte.d.ts +26 -0
- package/dist/components/primitives/button-group/index.d.ts +4 -0
- package/dist/components/primitives/button-group/index.js +6 -0
- package/dist/components/primitives/card/card-action.svelte +20 -0
- package/dist/components/primitives/card/card-action.svelte.d.ts +5 -0
- package/dist/components/primitives/card/card-content.svelte +15 -0
- package/dist/components/primitives/card/card-content.svelte.d.ts +5 -0
- package/dist/components/primitives/card/card-description.svelte +20 -0
- package/dist/components/primitives/card/card-description.svelte.d.ts +5 -0
- package/dist/components/primitives/card/card-footer.svelte +20 -0
- package/dist/components/primitives/card/card-footer.svelte.d.ts +5 -0
- package/dist/components/primitives/card/card-header.svelte +23 -0
- package/dist/components/primitives/card/card-header.svelte.d.ts +5 -0
- package/dist/components/primitives/card/card-title.svelte +20 -0
- package/dist/components/primitives/card/card-title.svelte.d.ts +5 -0
- package/dist/components/primitives/card/card.svelte +23 -0
- package/dist/components/primitives/card/card.svelte.d.ts +5 -0
- package/dist/components/primitives/card/index.d.ts +8 -0
- package/dist/components/primitives/card/index.js +10 -0
- package/dist/components/primitives/checkbox/checkbox.svelte +36 -0
- package/dist/components/primitives/checkbox/checkbox.svelte.d.ts +4 -0
- package/dist/components/primitives/checkbox/index.d.ts +2 -0
- package/dist/components/primitives/checkbox/index.js +4 -0
- package/dist/components/primitives/collapsible/collapsible-content.svelte +7 -0
- package/dist/components/primitives/collapsible/collapsible-content.svelte.d.ts +4 -0
- package/dist/components/primitives/collapsible/collapsible-trigger.svelte +7 -0
- package/dist/components/primitives/collapsible/collapsible-trigger.svelte.d.ts +4 -0
- package/dist/components/primitives/collapsible/collapsible.svelte +11 -0
- package/dist/components/primitives/collapsible/collapsible.svelte.d.ts +4 -0
- package/dist/components/primitives/collapsible/index.d.ts +4 -0
- package/dist/components/primitives/collapsible/index.js +6 -0
- package/dist/components/primitives/context-menu/context-menu-checkbox-item.svelte +38 -0
- package/dist/components/primitives/context-menu/context-menu-checkbox-item.svelte.d.ts +9 -0
- package/dist/components/primitives/context-menu/context-menu-content.svelte +25 -0
- package/dist/components/primitives/context-menu/context-menu-content.svelte.d.ts +7 -0
- package/dist/components/primitives/context-menu/context-menu-group-heading.svelte +21 -0
- package/dist/components/primitives/context-menu/context-menu-group-heading.svelte.d.ts +7 -0
- package/dist/components/primitives/context-menu/context-menu-group.svelte +7 -0
- package/dist/components/primitives/context-menu/context-menu-group.svelte.d.ts +4 -0
- package/dist/components/primitives/context-menu/context-menu-item.svelte +27 -0
- package/dist/components/primitives/context-menu/context-menu-item.svelte.d.ts +8 -0
- package/dist/components/primitives/context-menu/context-menu-label.svelte +24 -0
- package/dist/components/primitives/context-menu/context-menu-label.svelte.d.ts +8 -0
- package/dist/components/primitives/context-menu/context-menu-radio-group.svelte +16 -0
- package/dist/components/primitives/context-menu/context-menu-radio-group.svelte.d.ts +4 -0
- package/dist/components/primitives/context-menu/context-menu-radio-item.svelte +31 -0
- package/dist/components/primitives/context-menu/context-menu-radio-item.svelte.d.ts +4 -0
- package/dist/components/primitives/context-menu/context-menu-separator.svelte +17 -0
- package/dist/components/primitives/context-menu/context-menu-separator.svelte.d.ts +4 -0
- package/dist/components/primitives/context-menu/context-menu-shortcut.svelte +20 -0
- package/dist/components/primitives/context-menu/context-menu-shortcut.svelte.d.ts +5 -0
- package/dist/components/primitives/context-menu/context-menu-sub-content.svelte +20 -0
- package/dist/components/primitives/context-menu/context-menu-sub-content.svelte.d.ts +4 -0
- package/dist/components/primitives/context-menu/context-menu-sub-trigger.svelte +29 -0
- package/dist/components/primitives/context-menu/context-menu-sub-trigger.svelte.d.ts +8 -0
- package/dist/components/primitives/context-menu/context-menu-trigger.svelte +7 -0
- package/dist/components/primitives/context-menu/context-menu-trigger.svelte.d.ts +4 -0
- package/dist/components/primitives/context-menu/index.d.ts +16 -0
- package/dist/components/primitives/context-menu/index.js +19 -0
- package/dist/components/primitives/dialog/dialog-close.svelte +7 -0
- package/dist/components/primitives/dialog/dialog-close.svelte.d.ts +4 -0
- package/dist/components/primitives/dialog/dialog-content.svelte +43 -0
- package/dist/components/primitives/dialog/dialog-content.svelte.d.ts +11 -0
- package/dist/components/primitives/dialog/dialog-description.svelte +17 -0
- package/dist/components/primitives/dialog/dialog-description.svelte.d.ts +4 -0
- package/dist/components/primitives/dialog/dialog-footer.svelte +20 -0
- package/dist/components/primitives/dialog/dialog-footer.svelte.d.ts +5 -0
- package/dist/components/primitives/dialog/dialog-header.svelte +20 -0
- package/dist/components/primitives/dialog/dialog-header.svelte.d.ts +5 -0
- package/dist/components/primitives/dialog/dialog-overlay.svelte +20 -0
- package/dist/components/primitives/dialog/dialog-overlay.svelte.d.ts +4 -0
- package/dist/components/primitives/dialog/dialog-title.svelte +17 -0
- package/dist/components/primitives/dialog/dialog-title.svelte.d.ts +4 -0
- package/dist/components/primitives/dialog/dialog-trigger.svelte +7 -0
- package/dist/components/primitives/dialog/dialog-trigger.svelte.d.ts +4 -0
- package/dist/components/primitives/dialog/index.d.ts +11 -0
- package/dist/components/primitives/dialog/index.js +14 -0
- package/dist/components/primitives/drawer/Drawer.svelte +32 -0
- package/dist/components/primitives/drawer/Drawer.svelte.d.ts +10 -0
- package/dist/components/primitives/drawer/index.d.ts +1 -0
- package/dist/components/primitives/drawer/index.js +1 -0
- package/dist/components/primitives/field/field-content.svelte +20 -0
- package/dist/components/primitives/field/field-content.svelte.d.ts +5 -0
- package/dist/components/primitives/field/field-description.svelte +25 -0
- package/dist/components/primitives/field/field-description.svelte.d.ts +5 -0
- package/dist/components/primitives/field/field-error.svelte +58 -0
- package/dist/components/primitives/field/field-error.svelte.d.ts +12 -0
- package/dist/components/primitives/field/field-group.svelte +23 -0
- package/dist/components/primitives/field/field-group.svelte.d.ts +5 -0
- package/dist/components/primitives/field/field-label.svelte +26 -0
- package/dist/components/primitives/field/field-label.svelte.d.ts +10 -0
- package/dist/components/primitives/field/field-legend.svelte +29 -0
- package/dist/components/primitives/field/field-legend.svelte.d.ts +8 -0
- package/dist/components/primitives/field/field-separator.svelte +35 -0
- package/dist/components/primitives/field/field-separator.svelte.d.ts +9 -0
- package/dist/components/primitives/field/field-set.svelte +24 -0
- package/dist/components/primitives/field/field-set.svelte.d.ts +5 -0
- package/dist/components/primitives/field/field-title.svelte +23 -0
- package/dist/components/primitives/field/field-title.svelte.d.ts +5 -0
- package/dist/components/primitives/field/field.svelte +53 -0
- package/dist/components/primitives/field/field.svelte.d.ts +29 -0
- package/dist/components/primitives/field/index.d.ts +11 -0
- package/dist/components/primitives/field/index.js +13 -0
- package/dist/components/primitives/index.d.ts +29 -0
- package/dist/components/primitives/index.js +32 -0
- package/dist/components/primitives/input/index.d.ts +2 -0
- package/dist/components/primitives/input/index.js +4 -0
- package/dist/components/primitives/input/input.svelte +52 -0
- package/dist/components/primitives/input/input.svelte.d.ts +13 -0
- package/dist/components/primitives/label/index.d.ts +2 -0
- package/dist/components/primitives/label/index.js +4 -0
- package/dist/components/primitives/label/label.svelte +20 -0
- package/dist/components/primitives/label/label.svelte.d.ts +4 -0
- package/dist/components/primitives/mode-toggle/index.d.ts +1 -0
- package/dist/components/primitives/mode-toggle/index.js +1 -0
- package/dist/components/primitives/mode-toggle/mode-toggle.svelte +16 -0
- package/dist/components/primitives/mode-toggle/mode-toggle.svelte.d.ts +18 -0
- package/dist/components/primitives/resizable/index.d.ts +4 -0
- package/dist/components/primitives/resizable/index.js +6 -0
- package/dist/components/primitives/resizable/resizable-handle.svelte +27 -0
- package/dist/components/primitives/resizable/resizable-handle.svelte.d.ts +8 -0
- package/dist/components/primitives/resizable/resizable-pane-group.svelte +24 -0
- package/dist/components/primitives/resizable/resizable-pane-group.svelte.d.ts +7 -0
- package/dist/components/primitives/scroll-area/index.d.ts +3 -0
- package/dist/components/primitives/scroll-area/index.js +5 -0
- package/dist/components/primitives/scroll-area/scroll-area-scrollbar.svelte +31 -0
- package/dist/components/primitives/scroll-area/scroll-area-scrollbar.svelte.d.ts +4 -0
- package/dist/components/primitives/scroll-area/scroll-area.svelte +43 -0
- package/dist/components/primitives/scroll-area/scroll-area.svelte.d.ts +11 -0
- package/dist/components/primitives/search/index.d.ts +2 -0
- package/dist/components/primitives/search/index.js +4 -0
- package/dist/components/primitives/search/search.svelte +79 -0
- package/dist/components/primitives/search/search.svelte.d.ts +13 -0
- package/dist/components/primitives/select/index.d.ts +11 -0
- package/dist/components/primitives/select/index.js +14 -0
- package/dist/components/primitives/select/select-content.svelte +40 -0
- package/dist/components/primitives/select/select-content.svelte.d.ts +8 -0
- package/dist/components/primitives/select/select-group-heading.svelte +21 -0
- package/dist/components/primitives/select/select-group-heading.svelte.d.ts +10 -0
- package/dist/components/primitives/select/select-group.svelte +7 -0
- package/dist/components/primitives/select/select-group.svelte.d.ts +4 -0
- package/dist/components/primitives/select/select-item.svelte +38 -0
- package/dist/components/primitives/select/select-item.svelte.d.ts +4 -0
- package/dist/components/primitives/select/select-label.svelte +20 -0
- package/dist/components/primitives/select/select-label.svelte.d.ts +6 -0
- package/dist/components/primitives/select/select-scroll-down-button.svelte +20 -0
- package/dist/components/primitives/select/select-scroll-down-button.svelte.d.ts +4 -0
- package/dist/components/primitives/select/select-scroll-up-button.svelte +20 -0
- package/dist/components/primitives/select/select-scroll-up-button.svelte.d.ts +4 -0
- package/dist/components/primitives/select/select-separator.svelte +18 -0
- package/dist/components/primitives/select/select-separator.svelte.d.ts +4 -0
- package/dist/components/primitives/select/select-trigger.svelte +29 -0
- package/dist/components/primitives/select/select-trigger.svelte.d.ts +8 -0
- package/dist/components/primitives/separator/index.d.ts +2 -0
- package/dist/components/primitives/separator/index.js +4 -0
- package/dist/components/primitives/separator/separator.svelte +21 -0
- package/dist/components/primitives/separator/separator.svelte.d.ts +4 -0
- package/dist/components/primitives/slider/index.d.ts +2 -0
- package/dist/components/primitives/slider/index.js +4 -0
- package/dist/components/primitives/slider/slider.svelte +52 -0
- package/dist/components/primitives/slider/slider.svelte.d.ts +5 -0
- package/dist/components/primitives/sonner/index.d.ts +2 -0
- package/dist/components/primitives/sonner/index.js +2 -0
- package/dist/components/primitives/sonner/sonner.svelte +13 -0
- package/dist/components/primitives/sonner/sonner.svelte.d.ts +4 -0
- package/dist/components/primitives/switch/index.d.ts +2 -0
- package/dist/components/primitives/switch/index.js +4 -0
- package/dist/components/primitives/switch/switch.svelte +29 -0
- package/dist/components/primitives/switch/switch.svelte.d.ts +4 -0
- package/dist/components/primitives/tabs/index.d.ts +5 -0
- package/dist/components/primitives/tabs/index.js +7 -0
- package/dist/components/primitives/tabs/tabs-content.svelte +17 -0
- package/dist/components/primitives/tabs/tabs-content.svelte.d.ts +4 -0
- package/dist/components/primitives/tabs/tabs-list.svelte +16 -0
- package/dist/components/primitives/tabs/tabs-list.svelte.d.ts +4 -0
- package/dist/components/primitives/tabs/tabs-trigger.svelte +20 -0
- package/dist/components/primitives/tabs/tabs-trigger.svelte.d.ts +4 -0
- package/dist/components/primitives/tabs/tabs.svelte +19 -0
- package/dist/components/primitives/tabs/tabs.svelte.d.ts +4 -0
- package/dist/components/primitives/textarea/index.d.ts +2 -0
- package/dist/components/primitives/textarea/index.js +4 -0
- package/dist/components/primitives/textarea/textarea.svelte +23 -0
- package/dist/components/primitives/textarea/textarea.svelte.d.ts +5 -0
- package/dist/components/primitives/theme-switcher/ThemeSwitcher.svelte +39 -0
- package/dist/components/primitives/theme-switcher/ThemeSwitcher.svelte.d.ts +3 -0
- package/dist/components/primitives/theme-switcher/index.d.ts +1 -0
- package/dist/components/primitives/theme-switcher/index.js +1 -0
- package/dist/components/viewer/MeshMetadataDialog.svelte +122 -0
- package/dist/components/viewer/MeshMetadataDialog.svelte.d.ts +10 -0
- package/dist/components/viewer/SceneManager.svelte +297 -0
- package/dist/components/viewer/SceneManager.svelte.d.ts +8 -0
- package/dist/components/viewer/Viewer.svelte +311 -0
- package/dist/components/viewer/Viewer.svelte.d.ts +18 -0
- package/dist/components/viewer/index.d.ts +3 -0
- package/dist/components/viewer/index.js +3 -0
- package/dist/composables/useFooterItem.svelte.d.ts +15 -0
- package/dist/composables/useFooterItem.svelte.js +33 -0
- package/dist/compute/computeThrottle.svelte.d.ts +24 -0
- package/dist/compute/computeThrottle.svelte.js +70 -0
- package/dist/compute/solving.svelte.d.ts +12 -0
- package/dist/compute/solving.svelte.js +68 -0
- package/dist/constants.d.ts +28 -0
- package/dist/constants.js +32 -0
- package/dist/contexts/footerContext.svelte.d.ts +18 -0
- package/dist/contexts/footerContext.svelte.js +24 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +20 -0
- package/dist/schema/defaults.d.ts +1 -0
- package/dist/schema/defaults.js +13 -0
- package/dist/schema/param-exporter.d.ts +15 -0
- package/dist/schema/param-exporter.js +120 -0
- package/dist/schema/visibility-rules.d.ts +12 -0
- package/dist/schema/visibility-rules.js +63 -0
- package/dist/styles/base.css +145 -0
- package/dist/styles/themes/cyberpunk.css +98 -0
- package/dist/styles/themes/neutral.css +72 -0
- package/dist/styles/themes/ocean.css +75 -0
- package/dist/styles/themes/selva.css +105 -0
- package/dist/theme/themeStore.svelte.d.ts +12 -0
- package/dist/theme/themeStore.svelte.js +40 -0
- package/dist/theme/themes.d.ts +5 -0
- package/dist/theme/themes.js +13 -0
- package/dist/types/actionButton.d.ts +33 -0
- package/dist/types/actionButton.js +1 -0
- package/dist/types/solveFn.d.ts +26 -0
- package/dist/types/solveFn.js +1 -0
- package/dist/utils/color.d.ts +1 -0
- package/dist/utils/color.js +38 -0
- package/dist/utils/debounce.d.ts +14 -0
- package/dist/utils/debounce.js +30 -0
- package/dist/utils/file-download.d.ts +22 -0
- package/dist/utils/file-download.js +93 -0
- package/dist/utils/loadScript.d.ts +14 -0
- package/dist/utils/loadScript.js +38 -0
- package/dist/utils.d.ts +12 -0
- package/dist/utils.js +5 -0
- package/package.json +100 -0
- package/src/lib/components/ErrorScreen.svelte +53 -0
- package/src/lib/components/compute/AppLayout.svelte +470 -0
- package/src/lib/components/compute/CollapsedPanelStrip.svelte +64 -0
- package/src/lib/components/compute/ComputeApp.svelte +243 -0
- package/src/lib/components/compute/ComputeMessages.svelte +169 -0
- package/src/lib/components/compute/ParameterPresetManager.svelte +326 -0
- package/src/lib/components/compute/index.ts +5 -0
- package/src/lib/components/layout/AppShell.svelte +110 -0
- package/src/lib/components/layout/EmptyState.svelte +48 -0
- package/src/lib/components/layout/FooterItemRenderer.svelte +20 -0
- package/src/lib/components/layout/PageContent.svelte +12 -0
- package/src/lib/components/layout/PageFooter.svelte +222 -0
- package/src/lib/components/layout/PageHeader.svelte +67 -0
- package/src/lib/components/layout/SectionHeader.svelte +38 -0
- package/src/lib/components/layout/SideNav.svelte +82 -0
- package/src/lib/components/layout/SubNav.svelte +45 -0
- package/src/lib/components/layout/index.ts +11 -0
- package/src/lib/components/preview/ChartOutput.svelte +222 -0
- package/src/lib/components/preview/Group.svelte +134 -0
- package/src/lib/components/preview/ImageOutput.svelte +156 -0
- package/src/lib/components/preview/InputControl.svelte +130 -0
- package/src/lib/components/preview/OutputDisplay.svelte +297 -0
- package/src/lib/components/preview/TabBar.svelte +36 -0
- package/src/lib/components/preview/TabContent.svelte +125 -0
- package/src/lib/components/preview/TabLayout.svelte +109 -0
- package/src/lib/components/preview/index.ts +4 -0
- package/src/lib/components/preview/inputs/CheckboxInput.svelte +29 -0
- package/src/lib/components/preview/inputs/ChecklistInput.svelte +50 -0
- package/src/lib/components/preview/inputs/ColorInput.svelte +21 -0
- package/src/lib/components/preview/inputs/DropdownInput.svelte +40 -0
- package/src/lib/components/preview/inputs/FileInput.svelte +368 -0
- package/src/lib/components/preview/inputs/NumberInput.svelte +152 -0
- package/src/lib/components/preview/inputs/TextInput.svelte +74 -0
- package/src/lib/components/preview/inputs/index.ts +7 -0
- package/src/lib/components/primitives/CalculateButton.svelte +40 -0
- package/src/lib/components/primitives/DataTable.svelte +39 -0
- package/src/lib/components/primitives/ImageUploadField.svelte +84 -0
- package/src/lib/components/primitives/SolvingIndicator.svelte +54 -0
- package/src/lib/components/primitives/StateDisplay.svelte +106 -0
- package/src/lib/components/primitives/ViewToggle.svelte +47 -0
- package/src/lib/components/primitives/alert/alert-description.svelte +23 -0
- package/src/lib/components/primitives/alert/alert-title.svelte +20 -0
- package/src/lib/components/primitives/alert/alert.svelte +44 -0
- package/src/lib/components/primitives/alert/index.ts +14 -0
- package/src/lib/components/primitives/alert-dialog/alert-dialog-action.svelte +18 -0
- package/src/lib/components/primitives/alert-dialog/alert-dialog-cancel.svelte +18 -0
- package/src/lib/components/primitives/alert-dialog/alert-dialog-content.svelte +27 -0
- package/src/lib/components/primitives/alert-dialog/alert-dialog-description.svelte +17 -0
- package/src/lib/components/primitives/alert-dialog/alert-dialog-footer.svelte +20 -0
- package/src/lib/components/primitives/alert-dialog/alert-dialog-header.svelte +20 -0
- package/src/lib/components/primitives/alert-dialog/alert-dialog-overlay.svelte +20 -0
- package/src/lib/components/primitives/alert-dialog/alert-dialog-title.svelte +17 -0
- package/src/lib/components/primitives/alert-dialog/alert-dialog-trigger.svelte +7 -0
- package/src/lib/components/primitives/alert-dialog/index.ts +39 -0
- package/src/lib/components/primitives/badge/badge.svelte +49 -0
- package/src/lib/components/primitives/badge/index.ts +2 -0
- package/src/lib/components/primitives/button/button.svelte +83 -0
- package/src/lib/components/primitives/button/index.ts +17 -0
- package/src/lib/components/primitives/button-group/button-group-separator.svelte +20 -0
- package/src/lib/components/primitives/button-group/button-group-text.svelte +30 -0
- package/src/lib/components/primitives/button-group/button-group.svelte +46 -0
- package/src/lib/components/primitives/button-group/index.ts +13 -0
- package/src/lib/components/primitives/card/card-action.svelte +20 -0
- package/src/lib/components/primitives/card/card-content.svelte +15 -0
- package/src/lib/components/primitives/card/card-description.svelte +20 -0
- package/src/lib/components/primitives/card/card-footer.svelte +20 -0
- package/src/lib/components/primitives/card/card-header.svelte +23 -0
- package/src/lib/components/primitives/card/card-title.svelte +20 -0
- package/src/lib/components/primitives/card/card.svelte +23 -0
- package/src/lib/components/primitives/card/index.ts +25 -0
- package/src/lib/components/primitives/checkbox/checkbox.svelte +36 -0
- package/src/lib/components/primitives/checkbox/index.ts +6 -0
- package/src/lib/components/primitives/collapsible/collapsible-content.svelte +7 -0
- package/src/lib/components/primitives/collapsible/collapsible-trigger.svelte +7 -0
- package/src/lib/components/primitives/collapsible/collapsible.svelte +11 -0
- package/src/lib/components/primitives/collapsible/index.ts +13 -0
- package/src/lib/components/primitives/context-menu/context-menu-checkbox-item.svelte +38 -0
- package/src/lib/components/primitives/context-menu/context-menu-content.svelte +25 -0
- package/src/lib/components/primitives/context-menu/context-menu-group-heading.svelte +21 -0
- package/src/lib/components/primitives/context-menu/context-menu-group.svelte +7 -0
- package/src/lib/components/primitives/context-menu/context-menu-item.svelte +27 -0
- package/src/lib/components/primitives/context-menu/context-menu-label.svelte +24 -0
- package/src/lib/components/primitives/context-menu/context-menu-radio-group.svelte +16 -0
- package/src/lib/components/primitives/context-menu/context-menu-radio-item.svelte +31 -0
- package/src/lib/components/primitives/context-menu/context-menu-separator.svelte +17 -0
- package/src/lib/components/primitives/context-menu/context-menu-shortcut.svelte +20 -0
- package/src/lib/components/primitives/context-menu/context-menu-sub-content.svelte +20 -0
- package/src/lib/components/primitives/context-menu/context-menu-sub-trigger.svelte +29 -0
- package/src/lib/components/primitives/context-menu/context-menu-trigger.svelte +7 -0
- package/src/lib/components/primitives/context-menu/index.ts +51 -0
- package/src/lib/components/primitives/dialog/dialog-close.svelte +7 -0
- package/src/lib/components/primitives/dialog/dialog-content.svelte +43 -0
- package/src/lib/components/primitives/dialog/dialog-description.svelte +17 -0
- package/src/lib/components/primitives/dialog/dialog-footer.svelte +20 -0
- package/src/lib/components/primitives/dialog/dialog-header.svelte +20 -0
- package/src/lib/components/primitives/dialog/dialog-overlay.svelte +20 -0
- package/src/lib/components/primitives/dialog/dialog-title.svelte +17 -0
- package/src/lib/components/primitives/dialog/dialog-trigger.svelte +7 -0
- package/src/lib/components/primitives/dialog/index.ts +37 -0
- package/src/lib/components/primitives/drawer/Drawer.svelte +32 -0
- package/src/lib/components/primitives/drawer/index.ts +1 -0
- package/src/lib/components/primitives/field/field-content.svelte +20 -0
- package/src/lib/components/primitives/field/field-description.svelte +25 -0
- package/src/lib/components/primitives/field/field-error.svelte +58 -0
- package/src/lib/components/primitives/field/field-group.svelte +23 -0
- package/src/lib/components/primitives/field/field-label.svelte +26 -0
- package/src/lib/components/primitives/field/field-legend.svelte +29 -0
- package/src/lib/components/primitives/field/field-separator.svelte +35 -0
- package/src/lib/components/primitives/field/field-set.svelte +24 -0
- package/src/lib/components/primitives/field/field-title.svelte +23 -0
- package/src/lib/components/primitives/field/field.svelte +53 -0
- package/src/lib/components/primitives/field/index.ts +33 -0
- package/src/lib/components/primitives/index.ts +41 -0
- package/src/lib/components/primitives/input/index.ts +7 -0
- package/src/lib/components/primitives/input/input.svelte +52 -0
- package/src/lib/components/primitives/label/index.ts +7 -0
- package/src/lib/components/primitives/label/label.svelte +20 -0
- package/src/lib/components/primitives/mode-toggle/index.ts +1 -0
- package/src/lib/components/primitives/mode-toggle/mode-toggle.svelte +16 -0
- package/src/lib/components/primitives/resizable/index.ts +13 -0
- package/src/lib/components/primitives/resizable/resizable-handle.svelte +27 -0
- package/src/lib/components/primitives/resizable/resizable-pane-group.svelte +24 -0
- package/src/lib/components/primitives/scroll-area/index.ts +10 -0
- package/src/lib/components/primitives/scroll-area/scroll-area-scrollbar.svelte +31 -0
- package/src/lib/components/primitives/scroll-area/scroll-area.svelte +43 -0
- package/src/lib/components/primitives/search/index.ts +7 -0
- package/src/lib/components/primitives/search/search.svelte +79 -0
- package/src/lib/components/primitives/select/index.ts +37 -0
- package/src/lib/components/primitives/select/select-content.svelte +40 -0
- package/src/lib/components/primitives/select/select-group-heading.svelte +21 -0
- package/src/lib/components/primitives/select/select-group.svelte +7 -0
- package/src/lib/components/primitives/select/select-item.svelte +38 -0
- package/src/lib/components/primitives/select/select-label.svelte +20 -0
- package/src/lib/components/primitives/select/select-scroll-down-button.svelte +20 -0
- package/src/lib/components/primitives/select/select-scroll-up-button.svelte +20 -0
- package/src/lib/components/primitives/select/select-separator.svelte +18 -0
- package/src/lib/components/primitives/select/select-trigger.svelte +29 -0
- package/src/lib/components/primitives/separator/index.ts +7 -0
- package/src/lib/components/primitives/separator/separator.svelte +21 -0
- package/src/lib/components/primitives/slider/index.ts +7 -0
- package/src/lib/components/primitives/slider/slider.svelte +52 -0
- package/src/lib/components/primitives/sonner/index.ts +2 -0
- package/src/lib/components/primitives/sonner/sonner.svelte +13 -0
- package/src/lib/components/primitives/switch/index.ts +7 -0
- package/src/lib/components/primitives/switch/switch.svelte +29 -0
- package/src/lib/components/primitives/tabs/index.ts +16 -0
- package/src/lib/components/primitives/tabs/tabs-content.svelte +17 -0
- package/src/lib/components/primitives/tabs/tabs-list.svelte +16 -0
- package/src/lib/components/primitives/tabs/tabs-trigger.svelte +20 -0
- package/src/lib/components/primitives/tabs/tabs.svelte +19 -0
- package/src/lib/components/primitives/textarea/index.ts +7 -0
- package/src/lib/components/primitives/textarea/textarea.svelte +23 -0
- package/src/lib/components/primitives/theme-switcher/ThemeSwitcher.svelte +39 -0
- package/src/lib/components/primitives/theme-switcher/index.ts +1 -0
- package/src/lib/components/viewer/MeshMetadataDialog.svelte +122 -0
- package/src/lib/components/viewer/SceneManager.svelte +297 -0
- package/src/lib/components/viewer/Viewer.svelte +311 -0
- package/src/lib/components/viewer/index.ts +3 -0
- package/src/lib/composables/useFooterItem.svelte.ts +40 -0
- package/src/lib/compute/computeThrottle.svelte.ts +97 -0
- package/src/lib/compute/solving.svelte.ts +77 -0
- package/src/lib/constants.ts +35 -0
- package/src/lib/contexts/footerContext.svelte.ts +54 -0
- package/src/lib/index.ts +31 -0
- package/src/lib/schema/defaults.ts +13 -0
- package/src/lib/schema/param-exporter.ts +160 -0
- package/src/lib/schema/visibility-rules.ts +94 -0
- package/src/lib/styles/base.css +145 -0
- package/src/lib/styles/themes/cyberpunk.css +98 -0
- package/src/lib/styles/themes/neutral.css +72 -0
- package/src/lib/styles/themes/ocean.css +75 -0
- package/src/lib/styles/themes/selva.css +105 -0
- package/src/lib/theme/themeStore.svelte.ts +50 -0
- package/src/lib/theme/themes.ts +18 -0
- package/src/lib/types/actionButton.ts +33 -0
- package/src/lib/types/solveFn.ts +29 -0
- package/src/lib/utils/color.ts +45 -0
- package/src/lib/utils/debounce.ts +36 -0
- package/src/lib/utils/file-download.ts +108 -0
- package/src/lib/utils/loadScript.ts +48 -0
- package/src/lib/utils.ts +13 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute throttle utility for managing async compute requests.
|
|
3
|
+
*
|
|
4
|
+
* - Only one request in-flight at a time
|
|
5
|
+
* - Latest values always win (no queue)
|
|
6
|
+
* - AbortController support to cancel stale requests
|
|
7
|
+
* - Configurable timeout with automatic abort
|
|
8
|
+
*/
|
|
9
|
+
interface ComputeThrottleOptions {
|
|
10
|
+
timeout?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Creates a throttled compute handler that keeps only one request in-flight.
|
|
14
|
+
* If a new value arrives while one is running, it overwrites the single pending
|
|
15
|
+
* slot — older pending values are dropped. The pending value runs once the
|
|
16
|
+
* current request finishes (or aborts).
|
|
17
|
+
*/
|
|
18
|
+
export declare function createComputeThrottle<T>(computeFn: (values: T, signal: AbortSignal) => Promise<void>, options?: ComputeThrottleOptions): {
|
|
19
|
+
trigger: (values: T) => void;
|
|
20
|
+
readonly isComputing: boolean;
|
|
21
|
+
readonly hasPending: boolean;
|
|
22
|
+
cancel: () => void;
|
|
23
|
+
};
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fallback per-solve abort timeout (ms) when the caller doesn't pass one.
|
|
3
|
+
* Used only by callers without a deployment-specific limit (e.g. builder-app
|
|
4
|
+
* over WebSocket); compute-app supplies `MAX_SOLVE_DURATION_MS` from its
|
|
5
|
+
* server config via `ComputeApp`'s `solveTimeoutMs` prop.
|
|
6
|
+
*/
|
|
7
|
+
const DEFAULT_TIMEOUT_MS = 60_000;
|
|
8
|
+
/**
|
|
9
|
+
* Creates a throttled compute handler that keeps only one request in-flight.
|
|
10
|
+
* If a new value arrives while one is running, it overwrites the single pending
|
|
11
|
+
* slot — older pending values are dropped. The pending value runs once the
|
|
12
|
+
* current request finishes (or aborts).
|
|
13
|
+
*/
|
|
14
|
+
export function createComputeThrottle(computeFn, options = {}) {
|
|
15
|
+
const { timeout = DEFAULT_TIMEOUT_MS } = options;
|
|
16
|
+
let isComputing = $state(false);
|
|
17
|
+
let pendingValues = $state(null);
|
|
18
|
+
let currentAbortController = null;
|
|
19
|
+
function abortCurrent() {
|
|
20
|
+
currentAbortController?.abort();
|
|
21
|
+
currentAbortController = null;
|
|
22
|
+
}
|
|
23
|
+
async function executeCompute(values) {
|
|
24
|
+
abortCurrent();
|
|
25
|
+
currentAbortController = new AbortController();
|
|
26
|
+
const { signal } = currentAbortController;
|
|
27
|
+
const timeoutId = setTimeout(() => currentAbortController?.abort(), timeout);
|
|
28
|
+
isComputing = true;
|
|
29
|
+
try {
|
|
30
|
+
await computeFn(values, signal);
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
if (!(err instanceof Error && err.name === 'AbortError')) {
|
|
34
|
+
throw err;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
clearTimeout(timeoutId);
|
|
39
|
+
isComputing = false;
|
|
40
|
+
currentAbortController = null;
|
|
41
|
+
if (pendingValues !== null) {
|
|
42
|
+
const next = pendingValues;
|
|
43
|
+
pendingValues = null;
|
|
44
|
+
executeCompute(next);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function trigger(values) {
|
|
49
|
+
if (isComputing) {
|
|
50
|
+
pendingValues = values;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
executeCompute(values);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function cancel() {
|
|
57
|
+
pendingValues = null;
|
|
58
|
+
abortCurrent();
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
trigger,
|
|
62
|
+
get isComputing() {
|
|
63
|
+
return isComputing;
|
|
64
|
+
},
|
|
65
|
+
get hasPending() {
|
|
66
|
+
return pendingValues !== null;
|
|
67
|
+
},
|
|
68
|
+
cancel
|
|
69
|
+
};
|
|
70
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates an adaptive solving indicator that measures actual solve durations
|
|
3
|
+
* and adjusts its visibility delay accordingly.
|
|
4
|
+
*
|
|
5
|
+
* - Fast solves (<200ms avg): indicator never shown (avoids flicker)
|
|
6
|
+
* - Slow solves (>600ms avg): indicator shown immediately
|
|
7
|
+
* - In between: indicator shown after a proportional delay
|
|
8
|
+
* - First solve: shows immediately (no history yet)
|
|
9
|
+
*/
|
|
10
|
+
export declare function createSolvingIndicator(isSolving: () => boolean): {
|
|
11
|
+
readonly show: boolean;
|
|
12
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { untrack } from 'svelte';
|
|
2
|
+
import { APP_DEFAULTS } from '../constants';
|
|
3
|
+
/**
|
|
4
|
+
* Creates an adaptive solving indicator that measures actual solve durations
|
|
5
|
+
* and adjusts its visibility delay accordingly.
|
|
6
|
+
*
|
|
7
|
+
* - Fast solves (<200ms avg): indicator never shown (avoids flicker)
|
|
8
|
+
* - Slow solves (>600ms avg): indicator shown immediately
|
|
9
|
+
* - In between: indicator shown after a proportional delay
|
|
10
|
+
* - First solve: shows immediately (no history yet)
|
|
11
|
+
*/
|
|
12
|
+
export function createSolvingIndicator(isSolving) {
|
|
13
|
+
const { FAST_THRESHOLD_MS, SLOW_THRESHOLD_MS, HISTORY_SIZE, ANIMATION_DELAY } = APP_DEFAULTS.SOLVING_INDICATOR;
|
|
14
|
+
let show = $state(false);
|
|
15
|
+
let timeout = null;
|
|
16
|
+
let solveStartTime = null;
|
|
17
|
+
const solveHistory = [];
|
|
18
|
+
$effect(() => {
|
|
19
|
+
const solving = isSolving();
|
|
20
|
+
untrack(() => {
|
|
21
|
+
if (solving) {
|
|
22
|
+
solveStartTime = performance.now();
|
|
23
|
+
const avg = solveHistory.length === 0
|
|
24
|
+
? Infinity
|
|
25
|
+
: solveHistory.reduce((a, b) => a + b, 0) / solveHistory.length;
|
|
26
|
+
if (solveHistory.length > 0 && avg < FAST_THRESHOLD_MS)
|
|
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) {
|
|
34
|
+
show = true;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
timeout = setTimeout(() => {
|
|
38
|
+
show = true;
|
|
39
|
+
timeout = null;
|
|
40
|
+
}, delay);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
if (solveStartTime !== null) {
|
|
46
|
+
solveHistory.push(performance.now() - solveStartTime);
|
|
47
|
+
if (solveHistory.length > HISTORY_SIZE)
|
|
48
|
+
solveHistory.shift();
|
|
49
|
+
solveStartTime = null;
|
|
50
|
+
}
|
|
51
|
+
if (timeout) {
|
|
52
|
+
clearTimeout(timeout);
|
|
53
|
+
timeout = null;
|
|
54
|
+
}
|
|
55
|
+
show = false;
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
return () => {
|
|
59
|
+
if (timeout)
|
|
60
|
+
clearTimeout(timeout);
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
get show() {
|
|
65
|
+
return show;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare const APP_DEFAULTS: {
|
|
2
|
+
FILE_UPLOAD: {
|
|
3
|
+
MAX_SIZE_MB: number;
|
|
4
|
+
MAX_SIZE_BYTES: number;
|
|
5
|
+
};
|
|
6
|
+
TIMEOUTS: {
|
|
7
|
+
/** Duration to show solving state (ms) */
|
|
8
|
+
SOLVE_STATE_DURATION: number;
|
|
9
|
+
/** Parameter export callback delay (ms) */
|
|
10
|
+
PARAM_EXPORT_DELAY: number;
|
|
11
|
+
/** Viewer initialization delay (ms) */
|
|
12
|
+
VIEWER_INIT_DELAY: number;
|
|
13
|
+
};
|
|
14
|
+
SOLVING_INDICATOR: {
|
|
15
|
+
/** If solve is faster than this, don't show indicator (ms) */
|
|
16
|
+
FAST_THRESHOLD_MS: number;
|
|
17
|
+
/** If solve is slower than this, show indicator immediately (ms) */
|
|
18
|
+
SLOW_THRESHOLD_MS: number;
|
|
19
|
+
/** Animation delay for solve indicator (ms) */
|
|
20
|
+
ANIMATION_DELAY: number;
|
|
21
|
+
/** Number of solve durations to keep in history for averaging */
|
|
22
|
+
HISTORY_SIZE: number;
|
|
23
|
+
};
|
|
24
|
+
FILE_SIZE: {
|
|
25
|
+
/** Bytes per kilobyte */
|
|
26
|
+
BYTES_PER_KB: number;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export const APP_DEFAULTS = {
|
|
2
|
+
// File upload limits
|
|
3
|
+
FILE_UPLOAD: {
|
|
4
|
+
MAX_SIZE_MB: 150,
|
|
5
|
+
MAX_SIZE_BYTES: 150 * 1024 * 1024
|
|
6
|
+
},
|
|
7
|
+
// Timing & performance thresholds
|
|
8
|
+
TIMEOUTS: {
|
|
9
|
+
/** Duration to show solving state (ms) */
|
|
10
|
+
SOLVE_STATE_DURATION: 3500,
|
|
11
|
+
/** Parameter export callback delay (ms) */
|
|
12
|
+
PARAM_EXPORT_DELAY: 100,
|
|
13
|
+
/** Viewer initialization delay (ms) */
|
|
14
|
+
VIEWER_INIT_DELAY: 350
|
|
15
|
+
},
|
|
16
|
+
// Solving indicator adaptive thresholds
|
|
17
|
+
SOLVING_INDICATOR: {
|
|
18
|
+
/** If solve is faster than this, don't show indicator (ms) */
|
|
19
|
+
FAST_THRESHOLD_MS: 200,
|
|
20
|
+
/** If solve is slower than this, show indicator immediately (ms) */
|
|
21
|
+
SLOW_THRESHOLD_MS: 600,
|
|
22
|
+
/** Animation delay for solve indicator (ms) */
|
|
23
|
+
ANIMATION_DELAY: 300,
|
|
24
|
+
/** Number of solve durations to keep in history for averaging */
|
|
25
|
+
HISTORY_SIZE: 3
|
|
26
|
+
},
|
|
27
|
+
// File size formatting
|
|
28
|
+
FILE_SIZE: {
|
|
29
|
+
/** Bytes per kilobyte */
|
|
30
|
+
BYTES_PER_KB: 1024
|
|
31
|
+
}
|
|
32
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SvelteMap } from 'svelte/reactivity';
|
|
2
|
+
export interface FooterItem {
|
|
3
|
+
id: string;
|
|
4
|
+
component: any;
|
|
5
|
+
/** Called on every render — return reactive state to keep footer in sync */
|
|
6
|
+
getProps: () => Record<string, any>;
|
|
7
|
+
position: 'left' | 'right';
|
|
8
|
+
priority: number;
|
|
9
|
+
onClick?: () => void;
|
|
10
|
+
}
|
|
11
|
+
export interface FooterStore {
|
|
12
|
+
items: SvelteMap<string, FooterItem>;
|
|
13
|
+
register(id: string, component: any, getProps: () => Record<string, any>, position?: 'left' | 'right', priority?: number, onClick?: () => void): void;
|
|
14
|
+
unregister(id: string): void;
|
|
15
|
+
}
|
|
16
|
+
export declare const FOOTER_CONTEXT_KEY: unique symbol;
|
|
17
|
+
export declare function initializeFooterContext(): FooterStore;
|
|
18
|
+
export declare function useFooter(): FooterStore;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { getContext, setContext } from 'svelte';
|
|
2
|
+
import { SvelteMap } from 'svelte/reactivity';
|
|
3
|
+
export const FOOTER_CONTEXT_KEY = Symbol('footer-context');
|
|
4
|
+
export function initializeFooterContext() {
|
|
5
|
+
const items = new SvelteMap();
|
|
6
|
+
const store = {
|
|
7
|
+
items,
|
|
8
|
+
register(id, component, getProps, position = 'left', priority = 0, onClick) {
|
|
9
|
+
items.set(id, { id, component, getProps, position, priority, onClick });
|
|
10
|
+
},
|
|
11
|
+
unregister(id) {
|
|
12
|
+
items.delete(id);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
setContext(FOOTER_CONTEXT_KEY, store);
|
|
16
|
+
return store;
|
|
17
|
+
}
|
|
18
|
+
export function useFooter() {
|
|
19
|
+
const store = getContext(FOOTER_CONTEXT_KEY);
|
|
20
|
+
if (!store) {
|
|
21
|
+
throw new Error('useFooter must be called within a component that is a descendant of the root layout');
|
|
22
|
+
}
|
|
23
|
+
return store;
|
|
24
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from './components/layout';
|
|
2
|
+
export { default as AppLayout } from './components/compute/AppLayout.svelte';
|
|
3
|
+
export { default as ComputeApp } from './components/compute/ComputeApp.svelte';
|
|
4
|
+
export { default as ErrorScreen } from './components/ErrorScreen.svelte';
|
|
5
|
+
export * from './components/primitives';
|
|
6
|
+
export { default as StateDisplay } from './components/primitives/StateDisplay.svelte';
|
|
7
|
+
export { default as Viewer } from './components/viewer/Viewer.svelte';
|
|
8
|
+
export * from './schema/defaults';
|
|
9
|
+
export * from './compute/solving.svelte';
|
|
10
|
+
export * from './contexts/footerContext.svelte';
|
|
11
|
+
export * from './composables/useFooterItem.svelte';
|
|
12
|
+
export * from './utils';
|
|
13
|
+
export type { ActionButton } from './types/actionButton';
|
|
14
|
+
export type { SolveFn } from './types/solveFn';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Layout components (page chrome: shell, header, footer, nav)
|
|
2
|
+
export * from './components/layout';
|
|
3
|
+
// Compute app (schema + viewer + solve controls composed into a runnable app)
|
|
4
|
+
export { default as AppLayout } from './components/compute/AppLayout.svelte';
|
|
5
|
+
export { default as ComputeApp } from './components/compute/ComputeApp.svelte';
|
|
6
|
+
// Error screen
|
|
7
|
+
export { default as ErrorScreen } from './components/ErrorScreen.svelte';
|
|
8
|
+
// Design-system primitives (shadcn-svelte + custom)
|
|
9
|
+
export * from './components/primitives';
|
|
10
|
+
export { default as StateDisplay } from './components/primitives/StateDisplay.svelte';
|
|
11
|
+
// 3D viewer
|
|
12
|
+
export { default as Viewer } from './components/viewer/Viewer.svelte';
|
|
13
|
+
// Utilities
|
|
14
|
+
export * from './schema/defaults';
|
|
15
|
+
export * from './compute/solving.svelte';
|
|
16
|
+
// Contexts & Composables
|
|
17
|
+
export * from './contexts/footerContext.svelte';
|
|
18
|
+
export * from './composables/useFooterItem.svelte';
|
|
19
|
+
// Utils (cn function)
|
|
20
|
+
export * from './utils';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getDefaultValue(paramType: string): unknown;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { UISchema, ParameterPreset, ValidationIssueMessage } from '@selvajs/schemas';
|
|
2
|
+
export declare function createSavedState(schema: UISchema, currentValues: Record<string, unknown>, metadata: {
|
|
3
|
+
name: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
author?: string;
|
|
6
|
+
tags?: string[];
|
|
7
|
+
}): ParameterPreset;
|
|
8
|
+
export declare function validateSavedState(savedState: ParameterPreset, currentSchema: UISchema): {
|
|
9
|
+
isValid: boolean;
|
|
10
|
+
issues: ValidationIssueMessage[];
|
|
11
|
+
canLoad: boolean;
|
|
12
|
+
};
|
|
13
|
+
export declare function extractLoadableValues(savedState: ParameterPreset, currentSchema: UISchema, validation: ReturnType<typeof validateSavedState>): Record<string, unknown>;
|
|
14
|
+
export declare function exportStateAsJson(savedState: ParameterPreset): void;
|
|
15
|
+
export declare function importStateFromJson(file: File): Promise<ParameterPreset>;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { APP_DEFAULTS } from '../constants';
|
|
2
|
+
function getGroups(schema) {
|
|
3
|
+
if (!schema.layout)
|
|
4
|
+
return [];
|
|
5
|
+
if (schema.layout.type === 'tabbed')
|
|
6
|
+
return schema.layout.tabs.flatMap((t) => t.groups ?? []);
|
|
7
|
+
if (schema.layout.type === 'flat')
|
|
8
|
+
return schema.layout.groups ?? [];
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
export function createSavedState(schema, currentValues, metadata) {
|
|
12
|
+
const parameters = [];
|
|
13
|
+
for (const group of getGroups(schema)) {
|
|
14
|
+
for (const item of group.items ?? []) {
|
|
15
|
+
if (item.type !== 'input')
|
|
16
|
+
continue;
|
|
17
|
+
const value = currentValues[item.paramId];
|
|
18
|
+
const inputDef = schema.inputs.find((i) => i.id === item.paramId);
|
|
19
|
+
if (value !== undefined && inputDef) {
|
|
20
|
+
parameters.push({
|
|
21
|
+
paramId: item.paramId,
|
|
22
|
+
nickname: inputDef.nickname,
|
|
23
|
+
displayName: item.displayName || inputDef.nickname,
|
|
24
|
+
paramType: inputDef.paramType,
|
|
25
|
+
value,
|
|
26
|
+
groupName: group.label
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
id: crypto.randomUUID(),
|
|
33
|
+
name: metadata.name,
|
|
34
|
+
description: metadata.description,
|
|
35
|
+
timestamp: new Date().toISOString(),
|
|
36
|
+
schemaId: schema.id,
|
|
37
|
+
documentId: schema.documentId ?? '',
|
|
38
|
+
projectFileName: schema.projectFileName ?? '',
|
|
39
|
+
pluginVersion: schema.pluginVersion ?? '',
|
|
40
|
+
author: metadata.author,
|
|
41
|
+
tags: metadata.tags ?? [],
|
|
42
|
+
parameters
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export function validateSavedState(savedState, currentSchema) {
|
|
46
|
+
const issues = [];
|
|
47
|
+
if (savedState.documentId !== (currentSchema.documentId ?? '')) {
|
|
48
|
+
issues.push({
|
|
49
|
+
paramId: '__document__',
|
|
50
|
+
severity: 'error',
|
|
51
|
+
message: 'Document ID mismatch - this state was saved for a different document',
|
|
52
|
+
details: { expected: currentSchema.documentId ?? '', actual: savedState.documentId }
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
if (savedState.schemaId !== currentSchema.id) {
|
|
56
|
+
issues.push({
|
|
57
|
+
paramId: '__schema__',
|
|
58
|
+
severity: 'warning',
|
|
59
|
+
message: 'Schema has changed since this state was saved',
|
|
60
|
+
details: { expected: currentSchema.id, actual: savedState.schemaId }
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
for (const paramState of savedState.parameters) {
|
|
64
|
+
const inputDef = currentSchema.inputs.find((i) => i.id === paramState.paramId);
|
|
65
|
+
if (!inputDef) {
|
|
66
|
+
issues.push({
|
|
67
|
+
paramId: paramState.paramId,
|
|
68
|
+
severity: 'error',
|
|
69
|
+
message: `Parameter "${paramState.nickname}" no longer exists in the schema`
|
|
70
|
+
});
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (inputDef.nickname !== paramState.nickname) {
|
|
74
|
+
issues.push({
|
|
75
|
+
paramId: paramState.paramId,
|
|
76
|
+
severity: 'warning',
|
|
77
|
+
message: 'Parameter nickname changed',
|
|
78
|
+
details: { expected: paramState.nickname, actual: inputDef.nickname }
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const hasErrors = issues.some((i) => i.severity === 'error');
|
|
83
|
+
return { isValid: issues.length === 0, issues, canLoad: !hasErrors };
|
|
84
|
+
}
|
|
85
|
+
export function extractLoadableValues(savedState, currentSchema, validation) {
|
|
86
|
+
const errorParamIds = new Set(validation.issues
|
|
87
|
+
.filter((i) => i.severity === 'error' && !i.paramId.startsWith('__'))
|
|
88
|
+
.map((i) => i.paramId));
|
|
89
|
+
const values = {};
|
|
90
|
+
for (const paramState of savedState.parameters) {
|
|
91
|
+
const exists = currentSchema.inputs.some((i) => i.id === paramState.paramId);
|
|
92
|
+
if (!errorParamIds.has(paramState.paramId) && exists) {
|
|
93
|
+
values[paramState.paramId] = paramState.value;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return values;
|
|
97
|
+
}
|
|
98
|
+
export function exportStateAsJson(savedState) {
|
|
99
|
+
const blob = new Blob([JSON.stringify(savedState, null, 2)], { type: 'application/json' });
|
|
100
|
+
const url = URL.createObjectURL(blob);
|
|
101
|
+
const link = document.createElement('a');
|
|
102
|
+
link.href = url;
|
|
103
|
+
link.download = `${savedState.name.replace(/[^a-z0-9]/gi, '_')}_${savedState.timestamp.split('T')[0].replace(/-/g, '_')}.sps`;
|
|
104
|
+
link.style.display = 'none';
|
|
105
|
+
document.body.appendChild(link);
|
|
106
|
+
setTimeout(() => {
|
|
107
|
+
link.click();
|
|
108
|
+
setTimeout(() => {
|
|
109
|
+
document.body.removeChild(link);
|
|
110
|
+
URL.revokeObjectURL(url);
|
|
111
|
+
}, APP_DEFAULTS.TIMEOUTS.PARAM_EXPORT_DELAY);
|
|
112
|
+
}, 0);
|
|
113
|
+
}
|
|
114
|
+
export async function importStateFromJson(file) {
|
|
115
|
+
const state = JSON.parse(await file.text());
|
|
116
|
+
if (!state.id || !state.name || !state.documentId || !state.parameters) {
|
|
117
|
+
throw new Error('Invalid saved state file format');
|
|
118
|
+
}
|
|
119
|
+
return state;
|
|
120
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { LayoutItem, VisibilityRule, VisibilityCondition, GroupVisibilityCondition } from '@selvajs/schemas';
|
|
2
|
+
export interface VisibilityResult {
|
|
3
|
+
visible: boolean;
|
|
4
|
+
disabled: boolean;
|
|
5
|
+
defaultValue?: unknown;
|
|
6
|
+
}
|
|
7
|
+
export declare function evaluateRule(rule: VisibilityRule, values: Record<string, unknown>): boolean;
|
|
8
|
+
export declare function evaluateCondition(condition: VisibilityCondition | GroupVisibilityCondition, values: Record<string, unknown>): boolean;
|
|
9
|
+
export declare function evaluateVisibility(item: LayoutItem, values: Record<string, unknown>): VisibilityResult;
|
|
10
|
+
export declare function evaluateGroupVisibility(group: {
|
|
11
|
+
visibilityCondition?: GroupVisibilityCondition;
|
|
12
|
+
}, values: Record<string, unknown>): boolean;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
const toStringArray = (value) => {
|
|
2
|
+
if (Array.isArray(value))
|
|
3
|
+
return value.map(String);
|
|
4
|
+
if (value === undefined || value === null || value === '')
|
|
5
|
+
return [];
|
|
6
|
+
return [String(value)];
|
|
7
|
+
};
|
|
8
|
+
const RULE_OPERATORS = {
|
|
9
|
+
equals: (a, b) => a === b,
|
|
10
|
+
notEquals: (a, b) => a !== b,
|
|
11
|
+
greaterThan: (a, b) => Number(a) > Number(b),
|
|
12
|
+
lessThan: (a, b) => Number(a) < Number(b),
|
|
13
|
+
greaterThanOrEqual: (a, b) => Number(a) >= Number(b),
|
|
14
|
+
lessThanOrEqual: (a, b) => Number(a) <= Number(b),
|
|
15
|
+
between: (a, _, vals) => vals?.length === 2 && Number(a) >= Number(vals[0]) && Number(a) <= Number(vals[1]),
|
|
16
|
+
in: (a, _, vals) => vals?.includes(String(a)) ?? false,
|
|
17
|
+
notIn: (a, _, vals) => !(vals?.includes(String(a)) ?? false),
|
|
18
|
+
matches: (a, b) => {
|
|
19
|
+
try {
|
|
20
|
+
return new RegExp(String(b)).test(String(a));
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
contains: (a, b) => toStringArray(a).includes(String(b)),
|
|
27
|
+
containsAny: (a, _, vals) => {
|
|
28
|
+
const arr = toStringArray(a);
|
|
29
|
+
return vals?.some((v) => arr.includes(String(v))) ?? false;
|
|
30
|
+
},
|
|
31
|
+
isEmpty: (a) => toStringArray(a).length === 0,
|
|
32
|
+
isNotEmpty: (a) => toStringArray(a).length > 0
|
|
33
|
+
};
|
|
34
|
+
export function evaluateRule(rule, values) {
|
|
35
|
+
const fn = RULE_OPERATORS[rule.operator];
|
|
36
|
+
return fn ? fn(values[rule.paramId], rule.value, rule.values) : false;
|
|
37
|
+
}
|
|
38
|
+
export function evaluateCondition(condition, values) {
|
|
39
|
+
const results = condition.rules.map((rule) => evaluateRule(rule, values));
|
|
40
|
+
return condition.mode === 'any' ? results.some(Boolean) : results.every(Boolean);
|
|
41
|
+
}
|
|
42
|
+
const ACTIONS = {
|
|
43
|
+
show: (met) => ({ visible: met, disabled: false }),
|
|
44
|
+
hide: (met, dv) => ({ visible: !met, disabled: false, defaultValue: dv }),
|
|
45
|
+
disable: (met, dv) => ({ visible: true, disabled: met, defaultValue: met ? dv : undefined })
|
|
46
|
+
};
|
|
47
|
+
export function evaluateVisibility(item, values) {
|
|
48
|
+
if (item.type === 'linebreak')
|
|
49
|
+
return { visible: true, disabled: false };
|
|
50
|
+
if (!item.visibilityCondition?.rules)
|
|
51
|
+
return { visible: true, disabled: false };
|
|
52
|
+
const { action = 'show', defaultValue } = item.visibilityCondition;
|
|
53
|
+
const met = evaluateCondition(item.visibilityCondition, values);
|
|
54
|
+
const actionFn = ACTIONS[action] ?? ACTIONS.show;
|
|
55
|
+
return actionFn(met, defaultValue);
|
|
56
|
+
}
|
|
57
|
+
export function evaluateGroupVisibility(group, values) {
|
|
58
|
+
if (!group.visibilityCondition?.rules)
|
|
59
|
+
return true;
|
|
60
|
+
const { action = 'show' } = group.visibilityCondition;
|
|
61
|
+
const met = evaluateCondition(group.visibilityCondition, values);
|
|
62
|
+
return action === 'hide' ? !met : met;
|
|
63
|
+
}
|