selva-shared 0.8.1
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/AppLayout.svelte +439 -0
- package/dist/components/AppLayout.svelte.d.ts +17 -0
- package/dist/components/CollapsedPanelStrip.svelte +67 -0
- package/dist/components/CollapsedPanelStrip.svelte.d.ts +11 -0
- package/dist/components/ComputeMessages.svelte +172 -0
- package/dist/components/ComputeMessages.svelte.d.ts +7 -0
- package/dist/components/ErrorScreen.svelte +55 -0
- package/dist/components/ErrorScreen.svelte.d.ts +9 -0
- package/dist/components/StateManager.svelte +318 -0
- package/dist/components/StateManager.svelte.d.ts +9 -0
- package/dist/components/Viewer.svelte +207 -0
- package/dist/components/Viewer.svelte.d.ts +12 -0
- package/dist/components/layout/FooterItemRenderer.svelte +20 -0
- package/dist/components/layout/FooterItemRenderer.svelte.d.ts +7 -0
- package/dist/components/layout/PageContainer.svelte +36 -0
- package/dist/components/layout/PageContainer.svelte.d.ts +12 -0
- package/dist/components/layout/PageFooter.svelte +223 -0
- package/dist/components/layout/PageFooter.svelte.d.ts +9 -0
- package/dist/components/layout/PageHeader.svelte +89 -0
- package/dist/components/layout/PageHeader.svelte.d.ts +12 -0
- package/dist/components/layout/index.d.ts +3 -0
- package/dist/components/layout/index.js +4 -0
- package/dist/components/preview/ChartOutput.svelte +257 -0
- package/dist/components/preview/ChartOutput.svelte.d.ts +8 -0
- package/dist/components/preview/Group.svelte +121 -0
- package/dist/components/preview/Group.svelte.d.ts +23 -0
- package/dist/components/preview/InputControl.svelte +119 -0
- package/dist/components/preview/InputControl.svelte.d.ts +11 -0
- package/dist/components/preview/OutputDisplay.svelte +296 -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 +124 -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/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 +358 -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 +6 -0
- package/dist/components/preview/inputs/index.js +6 -0
- package/dist/components/ui/CalculateButton.svelte +56 -0
- package/dist/components/ui/CalculateButton.svelte.d.ts +9 -0
- package/dist/components/ui/SolvingIndicator.svelte +55 -0
- package/dist/components/ui/SolvingIndicator.svelte.d.ts +6 -0
- package/dist/components/ui/StateDisplay.svelte +106 -0
- package/dist/components/ui/StateDisplay.svelte.d.ts +10 -0
- package/dist/components/ui/alert/alert-description.svelte +23 -0
- package/dist/components/ui/alert/alert-description.svelte.d.ts +5 -0
- package/dist/components/ui/alert/alert-title.svelte +20 -0
- package/dist/components/ui/alert/alert-title.svelte.d.ts +5 -0
- package/dist/components/ui/alert/alert.svelte +44 -0
- package/dist/components/ui/alert/alert.svelte.d.ts +26 -0
- package/dist/components/ui/alert/index.d.ts +5 -0
- package/dist/components/ui/alert/index.js +7 -0
- package/dist/components/ui/alert-dialog/alert-dialog-action.svelte +18 -0
- package/dist/components/ui/alert-dialog/alert-dialog-action.svelte.d.ts +4 -0
- package/dist/components/ui/alert-dialog/alert-dialog-cancel.svelte +18 -0
- package/dist/components/ui/alert-dialog/alert-dialog-cancel.svelte.d.ts +4 -0
- package/dist/components/ui/alert-dialog/alert-dialog-content.svelte +27 -0
- package/dist/components/ui/alert-dialog/alert-dialog-content.svelte.d.ts +8 -0
- package/dist/components/ui/alert-dialog/alert-dialog-description.svelte +17 -0
- package/dist/components/ui/alert-dialog/alert-dialog-description.svelte.d.ts +4 -0
- package/dist/components/ui/alert-dialog/alert-dialog-footer.svelte +20 -0
- package/dist/components/ui/alert-dialog/alert-dialog-footer.svelte.d.ts +5 -0
- package/dist/components/ui/alert-dialog/alert-dialog-header.svelte +20 -0
- package/dist/components/ui/alert-dialog/alert-dialog-header.svelte.d.ts +5 -0
- package/dist/components/ui/alert-dialog/alert-dialog-overlay.svelte +20 -0
- package/dist/components/ui/alert-dialog/alert-dialog-overlay.svelte.d.ts +4 -0
- package/dist/components/ui/alert-dialog/alert-dialog-title.svelte +17 -0
- package/dist/components/ui/alert-dialog/alert-dialog-title.svelte.d.ts +4 -0
- package/dist/components/ui/alert-dialog/alert-dialog-trigger.svelte +7 -0
- package/dist/components/ui/alert-dialog/alert-dialog-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/alert-dialog/index.d.ts +12 -0
- package/dist/components/ui/alert-dialog/index.js +15 -0
- package/dist/components/ui/badge/badge.svelte +50 -0
- package/dist/components/ui/badge/badge.svelte.d.ts +32 -0
- package/dist/components/ui/badge/index.d.ts +2 -0
- package/dist/components/ui/badge/index.js +2 -0
- package/dist/components/ui/button/button.svelte +83 -0
- package/dist/components/ui/button/button.svelte.d.ts +67 -0
- package/dist/components/ui/button/index.d.ts +2 -0
- package/dist/components/ui/button/index.js +4 -0
- package/dist/components/ui/button-group/button-group-separator.svelte +20 -0
- package/dist/components/ui/button-group/button-group-separator.svelte.d.ts +13 -0
- package/dist/components/ui/button-group/button-group-text.svelte +30 -0
- package/dist/components/ui/button-group/button-group-text.svelte.d.ts +11 -0
- package/dist/components/ui/button-group/button-group.svelte +46 -0
- package/dist/components/ui/button-group/button-group.svelte.d.ts +26 -0
- package/dist/components/ui/button-group/index.d.ts +4 -0
- package/dist/components/ui/button-group/index.js +6 -0
- package/dist/components/ui/card/card-action.svelte +20 -0
- package/dist/components/ui/card/card-action.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-content.svelte +15 -0
- package/dist/components/ui/card/card-content.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-description.svelte +20 -0
- package/dist/components/ui/card/card-description.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-footer.svelte +20 -0
- package/dist/components/ui/card/card-footer.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-header.svelte +23 -0
- package/dist/components/ui/card/card-header.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-title.svelte +20 -0
- package/dist/components/ui/card/card-title.svelte.d.ts +5 -0
- package/dist/components/ui/card/card.svelte +23 -0
- package/dist/components/ui/card/card.svelte.d.ts +5 -0
- package/dist/components/ui/card/index.d.ts +8 -0
- package/dist/components/ui/card/index.js +10 -0
- package/dist/components/ui/checkbox/checkbox.svelte +36 -0
- package/dist/components/ui/checkbox/checkbox.svelte.d.ts +4 -0
- package/dist/components/ui/checkbox/index.d.ts +2 -0
- package/dist/components/ui/checkbox/index.js +4 -0
- package/dist/components/ui/collapsible/collapsible-content.svelte +7 -0
- package/dist/components/ui/collapsible/collapsible-content.svelte.d.ts +4 -0
- package/dist/components/ui/collapsible/collapsible-trigger.svelte +7 -0
- package/dist/components/ui/collapsible/collapsible-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/collapsible/collapsible.svelte +11 -0
- package/dist/components/ui/collapsible/collapsible.svelte.d.ts +4 -0
- package/dist/components/ui/collapsible/index.d.ts +4 -0
- package/dist/components/ui/collapsible/index.js +6 -0
- package/dist/components/ui/context-menu/context-menu-checkbox-item.svelte +38 -0
- package/dist/components/ui/context-menu/context-menu-checkbox-item.svelte.d.ts +9 -0
- package/dist/components/ui/context-menu/context-menu-content.svelte +25 -0
- package/dist/components/ui/context-menu/context-menu-content.svelte.d.ts +7 -0
- package/dist/components/ui/context-menu/context-menu-group-heading.svelte +21 -0
- package/dist/components/ui/context-menu/context-menu-group-heading.svelte.d.ts +7 -0
- package/dist/components/ui/context-menu/context-menu-group.svelte +7 -0
- package/dist/components/ui/context-menu/context-menu-group.svelte.d.ts +4 -0
- package/dist/components/ui/context-menu/context-menu-item.svelte +27 -0
- package/dist/components/ui/context-menu/context-menu-item.svelte.d.ts +8 -0
- package/dist/components/ui/context-menu/context-menu-label.svelte +24 -0
- package/dist/components/ui/context-menu/context-menu-label.svelte.d.ts +8 -0
- package/dist/components/ui/context-menu/context-menu-radio-group.svelte +16 -0
- package/dist/components/ui/context-menu/context-menu-radio-group.svelte.d.ts +4 -0
- package/dist/components/ui/context-menu/context-menu-radio-item.svelte +31 -0
- package/dist/components/ui/context-menu/context-menu-radio-item.svelte.d.ts +4 -0
- package/dist/components/ui/context-menu/context-menu-separator.svelte +17 -0
- package/dist/components/ui/context-menu/context-menu-separator.svelte.d.ts +4 -0
- package/dist/components/ui/context-menu/context-menu-shortcut.svelte +20 -0
- package/dist/components/ui/context-menu/context-menu-shortcut.svelte.d.ts +5 -0
- package/dist/components/ui/context-menu/context-menu-sub-content.svelte +20 -0
- package/dist/components/ui/context-menu/context-menu-sub-content.svelte.d.ts +4 -0
- package/dist/components/ui/context-menu/context-menu-sub-trigger.svelte +29 -0
- package/dist/components/ui/context-menu/context-menu-sub-trigger.svelte.d.ts +8 -0
- package/dist/components/ui/context-menu/context-menu-trigger.svelte +7 -0
- package/dist/components/ui/context-menu/context-menu-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/context-menu/index.d.ts +16 -0
- package/dist/components/ui/context-menu/index.js +19 -0
- package/dist/components/ui/dialog/dialog-close.svelte +7 -0
- package/dist/components/ui/dialog/dialog-close.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-content.svelte +43 -0
- package/dist/components/ui/dialog/dialog-content.svelte.d.ts +11 -0
- package/dist/components/ui/dialog/dialog-description.svelte +17 -0
- package/dist/components/ui/dialog/dialog-description.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-footer.svelte +20 -0
- package/dist/components/ui/dialog/dialog-footer.svelte.d.ts +5 -0
- package/dist/components/ui/dialog/dialog-header.svelte +20 -0
- package/dist/components/ui/dialog/dialog-header.svelte.d.ts +5 -0
- package/dist/components/ui/dialog/dialog-overlay.svelte +20 -0
- package/dist/components/ui/dialog/dialog-overlay.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-title.svelte +17 -0
- package/dist/components/ui/dialog/dialog-title.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-trigger.svelte +7 -0
- package/dist/components/ui/dialog/dialog-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/index.d.ts +11 -0
- package/dist/components/ui/dialog/index.js +14 -0
- package/dist/components/ui/field/field-content.svelte +20 -0
- package/dist/components/ui/field/field-content.svelte.d.ts +5 -0
- package/dist/components/ui/field/field-description.svelte +25 -0
- package/dist/components/ui/field/field-description.svelte.d.ts +5 -0
- package/dist/components/ui/field/field-error.svelte +58 -0
- package/dist/components/ui/field/field-error.svelte.d.ts +12 -0
- package/dist/components/ui/field/field-group.svelte +23 -0
- package/dist/components/ui/field/field-group.svelte.d.ts +5 -0
- package/dist/components/ui/field/field-label.svelte +26 -0
- package/dist/components/ui/field/field-label.svelte.d.ts +10 -0
- package/dist/components/ui/field/field-legend.svelte +29 -0
- package/dist/components/ui/field/field-legend.svelte.d.ts +8 -0
- package/dist/components/ui/field/field-separator.svelte +38 -0
- package/dist/components/ui/field/field-separator.svelte.d.ts +9 -0
- package/dist/components/ui/field/field-set.svelte +24 -0
- package/dist/components/ui/field/field-set.svelte.d.ts +5 -0
- package/dist/components/ui/field/field-title.svelte +23 -0
- package/dist/components/ui/field/field-title.svelte.d.ts +5 -0
- package/dist/components/ui/field/field.svelte +53 -0
- package/dist/components/ui/field/field.svelte.d.ts +29 -0
- package/dist/components/ui/field/index.d.ts +11 -0
- package/dist/components/ui/field/index.js +13 -0
- package/dist/components/ui/index.d.ts +21 -0
- package/dist/components/ui/index.js +24 -0
- package/dist/components/ui/input/index.d.ts +2 -0
- package/dist/components/ui/input/index.js +4 -0
- package/dist/components/ui/input/input.svelte +52 -0
- package/dist/components/ui/input/input.svelte.d.ts +13 -0
- package/dist/components/ui/label/index.d.ts +2 -0
- package/dist/components/ui/label/index.js +4 -0
- package/dist/components/ui/label/label.svelte +20 -0
- package/dist/components/ui/label/label.svelte.d.ts +4 -0
- package/dist/components/ui/mode-toggle/index.d.ts +1 -0
- package/dist/components/ui/mode-toggle/index.js +1 -0
- package/dist/components/ui/mode-toggle/mode-toggle.svelte +16 -0
- package/dist/components/ui/mode-toggle/mode-toggle.svelte.d.ts +18 -0
- package/dist/components/ui/resizable/index.d.ts +4 -0
- package/dist/components/ui/resizable/index.js +6 -0
- package/dist/components/ui/resizable/resizable-handle.svelte +30 -0
- package/dist/components/ui/resizable/resizable-handle.svelte.d.ts +8 -0
- package/dist/components/ui/resizable/resizable-pane-group.svelte +20 -0
- package/dist/components/ui/resizable/resizable-pane-group.svelte.d.ts +7 -0
- package/dist/components/ui/scroll-area/index.d.ts +3 -0
- package/dist/components/ui/scroll-area/index.js +5 -0
- package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte +31 -0
- package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte.d.ts +4 -0
- package/dist/components/ui/scroll-area/scroll-area.svelte +43 -0
- package/dist/components/ui/scroll-area/scroll-area.svelte.d.ts +11 -0
- package/dist/components/ui/select/index.d.ts +11 -0
- package/dist/components/ui/select/index.js +14 -0
- package/dist/components/ui/select/select-content.svelte +40 -0
- package/dist/components/ui/select/select-content.svelte.d.ts +8 -0
- package/dist/components/ui/select/select-group-heading.svelte +21 -0
- package/dist/components/ui/select/select-group-heading.svelte.d.ts +10 -0
- package/dist/components/ui/select/select-group.svelte +7 -0
- package/dist/components/ui/select/select-group.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-item.svelte +38 -0
- package/dist/components/ui/select/select-item.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-label.svelte +20 -0
- package/dist/components/ui/select/select-label.svelte.d.ts +6 -0
- package/dist/components/ui/select/select-scroll-down-button.svelte +20 -0
- package/dist/components/ui/select/select-scroll-down-button.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-scroll-up-button.svelte +20 -0
- package/dist/components/ui/select/select-scroll-up-button.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-separator.svelte +18 -0
- package/dist/components/ui/select/select-separator.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-trigger.svelte +29 -0
- package/dist/components/ui/select/select-trigger.svelte.d.ts +8 -0
- package/dist/components/ui/separator/index.d.ts +2 -0
- package/dist/components/ui/separator/index.js +4 -0
- package/dist/components/ui/separator/separator.svelte +21 -0
- package/dist/components/ui/separator/separator.svelte.d.ts +4 -0
- package/dist/components/ui/slider/index.d.ts +2 -0
- package/dist/components/ui/slider/index.js +4 -0
- package/dist/components/ui/slider/slider.svelte +52 -0
- package/dist/components/ui/slider/slider.svelte.d.ts +5 -0
- package/dist/components/ui/sonner/index.d.ts +2 -0
- package/dist/components/ui/sonner/index.js +2 -0
- package/dist/components/ui/sonner/sonner.svelte +13 -0
- package/dist/components/ui/sonner/sonner.svelte.d.ts +4 -0
- package/dist/components/ui/switch/index.d.ts +2 -0
- package/dist/components/ui/switch/index.js +4 -0
- package/dist/components/ui/switch/switch.svelte +29 -0
- package/dist/components/ui/switch/switch.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/index.d.ts +5 -0
- package/dist/components/ui/tabs/index.js +7 -0
- package/dist/components/ui/tabs/tabs-content.svelte +17 -0
- package/dist/components/ui/tabs/tabs-content.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs-list.svelte +16 -0
- package/dist/components/ui/tabs/tabs-list.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs-trigger.svelte +20 -0
- package/dist/components/ui/tabs/tabs-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs.svelte +19 -0
- package/dist/components/ui/tabs/tabs.svelte.d.ts +4 -0
- package/dist/components/ui/textarea/index.d.ts +2 -0
- package/dist/components/ui/textarea/index.js +4 -0
- package/dist/components/ui/textarea/textarea.svelte +23 -0
- package/dist/components/ui/textarea/textarea.svelte.d.ts +5 -0
- package/dist/components/ui/theme-switcher/ThemeSwitcher.svelte +39 -0
- package/dist/components/ui/theme-switcher/ThemeSwitcher.svelte.d.ts +3 -0
- package/dist/components/ui/theme-switcher/index.d.ts +1 -0
- package/dist/components/ui/theme-switcher/index.js +1 -0
- package/dist/composables/useFooterItem.svelte.d.ts +15 -0
- package/dist/composables/useFooterItem.svelte.js +31 -0
- package/dist/constants.d.ts +6 -0
- package/dist/constants.js +6 -0
- package/dist/contexts/FOOTER_USAGE.md +164 -0
- package/dist/contexts/footerContext.svelte.d.ts +17 -0
- package/dist/contexts/footerContext.svelte.js +24 -0
- package/dist/dummy-output-values.d.ts +3 -0
- package/dist/dummy-output-values.js +53 -0
- package/dist/dummy-surface-chart.json +13 -0
- package/dist/example-schema-left-only.json +367 -0
- package/dist/example-schema-right-only.json +322 -0
- package/dist/example-schema.json +1582 -0
- package/dist/features/preview/handlers.d.ts +55 -0
- package/dist/features/preview/handlers.js +175 -0
- package/dist/features/preview/index.d.ts +2 -0
- package/dist/features/preview/index.js +2 -0
- package/dist/features/preview/notifications.d.ts +11 -0
- package/dist/features/preview/notifications.js +41 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.js +39 -0
- package/dist/stores/themeStore.svelte.d.ts +12 -0
- package/dist/stores/themeStore.svelte.js +42 -0
- package/dist/styles/base.css +142 -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/themes.d.ts +5 -0
- package/dist/themes.js +13 -0
- package/dist/types/generated/index.d.ts +6 -0
- package/dist/types/generated/index.js +6 -0
- package/dist/types/generated/preset.d.ts +80 -0
- package/dist/types/generated/preset.js +7 -0
- package/dist/types/generated/schema.d.ts +451 -0
- package/dist/types/generated/schema.js +48 -0
- package/dist/utils/computeThrottle.svelte.d.ts +28 -0
- package/dist/utils/computeThrottle.svelte.js +93 -0
- package/dist/utils/debounce.d.ts +14 -0
- package/dist/utils/debounce.js +25 -0
- package/dist/utils/file-download.d.ts +26 -0
- package/dist/utils/file-download.js +76 -0
- package/dist/utils/loadScript.d.ts +14 -0
- package/dist/utils/loadScript.js +41 -0
- package/dist/utils/param-exporter.d.ts +30 -0
- package/dist/utils/param-exporter.js +186 -0
- package/dist/utils/solving.svelte.d.ts +12 -0
- package/dist/utils/solving.svelte.js +86 -0
- package/dist/utils/utils-shared.d.ts +9 -0
- package/dist/utils/utils-shared.js +53 -0
- package/dist/utils/visibility-rules.d.ts +12 -0
- package/dist/utils/visibility-rules.js +52 -0
- package/dist/utils.d.ts +12 -0
- package/dist/utils.js +5 -0
- package/package.json +70 -0
- package/src/lib/components/AppLayout.svelte +439 -0
- package/src/lib/components/CollapsedPanelStrip.svelte +67 -0
- package/src/lib/components/ComputeMessages.svelte +172 -0
- package/src/lib/components/ErrorScreen.svelte +55 -0
- package/src/lib/components/StateManager.svelte +318 -0
- package/src/lib/components/Viewer.svelte +207 -0
- package/src/lib/components/layout/FooterItemRenderer.svelte +20 -0
- package/src/lib/components/layout/PageContainer.svelte +36 -0
- package/src/lib/components/layout/PageFooter.svelte +223 -0
- package/src/lib/components/layout/PageHeader.svelte +89 -0
- package/src/lib/components/layout/index.ts +4 -0
- package/src/lib/components/preview/ChartOutput.svelte +257 -0
- package/src/lib/components/preview/Group.svelte +121 -0
- package/src/lib/components/preview/InputControl.svelte +119 -0
- package/src/lib/components/preview/OutputDisplay.svelte +296 -0
- package/src/lib/components/preview/TabBar.svelte +36 -0
- package/src/lib/components/preview/TabContent.svelte +124 -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/ColorInput.svelte +21 -0
- package/src/lib/components/preview/inputs/DropdownInput.svelte +40 -0
- package/src/lib/components/preview/inputs/FileInput.svelte +358 -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 +6 -0
- package/src/lib/components/ui/CalculateButton.svelte +56 -0
- package/src/lib/components/ui/SolvingIndicator.svelte +55 -0
- package/src/lib/components/ui/StateDisplay.svelte +106 -0
- package/src/lib/components/ui/alert/alert-description.svelte +23 -0
- package/src/lib/components/ui/alert/alert-title.svelte +20 -0
- package/src/lib/components/ui/alert/alert.svelte +44 -0
- package/src/lib/components/ui/alert/index.ts +14 -0
- package/src/lib/components/ui/alert-dialog/alert-dialog-action.svelte +18 -0
- package/src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte +18 -0
- package/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte +27 -0
- package/src/lib/components/ui/alert-dialog/alert-dialog-description.svelte +17 -0
- package/src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte +20 -0
- package/src/lib/components/ui/alert-dialog/alert-dialog-header.svelte +20 -0
- package/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte +20 -0
- package/src/lib/components/ui/alert-dialog/alert-dialog-title.svelte +17 -0
- package/src/lib/components/ui/alert-dialog/alert-dialog-trigger.svelte +7 -0
- package/src/lib/components/ui/alert-dialog/index.ts +39 -0
- package/src/lib/components/ui/badge/badge.svelte +50 -0
- package/src/lib/components/ui/badge/index.ts +2 -0
- package/src/lib/components/ui/button/button.svelte +83 -0
- package/src/lib/components/ui/button/index.ts +17 -0
- package/src/lib/components/ui/button-group/button-group-separator.svelte +20 -0
- package/src/lib/components/ui/button-group/button-group-text.svelte +30 -0
- package/src/lib/components/ui/button-group/button-group.svelte +46 -0
- package/src/lib/components/ui/button-group/index.ts +13 -0
- package/src/lib/components/ui/card/card-action.svelte +20 -0
- package/src/lib/components/ui/card/card-content.svelte +15 -0
- package/src/lib/components/ui/card/card-description.svelte +20 -0
- package/src/lib/components/ui/card/card-footer.svelte +20 -0
- package/src/lib/components/ui/card/card-header.svelte +23 -0
- package/src/lib/components/ui/card/card-title.svelte +20 -0
- package/src/lib/components/ui/card/card.svelte +23 -0
- package/src/lib/components/ui/card/index.ts +25 -0
- package/src/lib/components/ui/checkbox/checkbox.svelte +36 -0
- package/src/lib/components/ui/checkbox/index.ts +6 -0
- package/src/lib/components/ui/collapsible/collapsible-content.svelte +7 -0
- package/src/lib/components/ui/collapsible/collapsible-trigger.svelte +7 -0
- package/src/lib/components/ui/collapsible/collapsible.svelte +11 -0
- package/src/lib/components/ui/collapsible/index.ts +13 -0
- package/src/lib/components/ui/context-menu/context-menu-checkbox-item.svelte +38 -0
- package/src/lib/components/ui/context-menu/context-menu-content.svelte +25 -0
- package/src/lib/components/ui/context-menu/context-menu-group-heading.svelte +21 -0
- package/src/lib/components/ui/context-menu/context-menu-group.svelte +7 -0
- package/src/lib/components/ui/context-menu/context-menu-item.svelte +27 -0
- package/src/lib/components/ui/context-menu/context-menu-label.svelte +24 -0
- package/src/lib/components/ui/context-menu/context-menu-radio-group.svelte +16 -0
- package/src/lib/components/ui/context-menu/context-menu-radio-item.svelte +31 -0
- package/src/lib/components/ui/context-menu/context-menu-separator.svelte +17 -0
- package/src/lib/components/ui/context-menu/context-menu-shortcut.svelte +20 -0
- package/src/lib/components/ui/context-menu/context-menu-sub-content.svelte +20 -0
- package/src/lib/components/ui/context-menu/context-menu-sub-trigger.svelte +29 -0
- package/src/lib/components/ui/context-menu/context-menu-trigger.svelte +7 -0
- package/src/lib/components/ui/context-menu/index.ts +51 -0
- package/src/lib/components/ui/dialog/dialog-close.svelte +7 -0
- package/src/lib/components/ui/dialog/dialog-content.svelte +43 -0
- package/src/lib/components/ui/dialog/dialog-description.svelte +17 -0
- package/src/lib/components/ui/dialog/dialog-footer.svelte +20 -0
- package/src/lib/components/ui/dialog/dialog-header.svelte +20 -0
- package/src/lib/components/ui/dialog/dialog-overlay.svelte +20 -0
- package/src/lib/components/ui/dialog/dialog-title.svelte +17 -0
- package/src/lib/components/ui/dialog/dialog-trigger.svelte +7 -0
- package/src/lib/components/ui/dialog/index.ts +37 -0
- package/src/lib/components/ui/field/field-content.svelte +20 -0
- package/src/lib/components/ui/field/field-description.svelte +25 -0
- package/src/lib/components/ui/field/field-error.svelte +58 -0
- package/src/lib/components/ui/field/field-group.svelte +23 -0
- package/src/lib/components/ui/field/field-label.svelte +26 -0
- package/src/lib/components/ui/field/field-legend.svelte +29 -0
- package/src/lib/components/ui/field/field-separator.svelte +38 -0
- package/src/lib/components/ui/field/field-set.svelte +24 -0
- package/src/lib/components/ui/field/field-title.svelte +23 -0
- package/src/lib/components/ui/field/field.svelte +53 -0
- package/src/lib/components/ui/field/index.ts +33 -0
- package/src/lib/components/ui/index.ts +33 -0
- package/src/lib/components/ui/input/index.ts +7 -0
- package/src/lib/components/ui/input/input.svelte +52 -0
- package/src/lib/components/ui/label/index.ts +7 -0
- package/src/lib/components/ui/label/label.svelte +20 -0
- package/src/lib/components/ui/mode-toggle/index.ts +1 -0
- package/src/lib/components/ui/mode-toggle/mode-toggle.svelte +16 -0
- package/src/lib/components/ui/resizable/index.ts +13 -0
- package/src/lib/components/ui/resizable/resizable-handle.svelte +30 -0
- package/src/lib/components/ui/resizable/resizable-pane-group.svelte +20 -0
- package/src/lib/components/ui/scroll-area/index.ts +10 -0
- package/src/lib/components/ui/scroll-area/scroll-area-scrollbar.svelte +31 -0
- package/src/lib/components/ui/scroll-area/scroll-area.svelte +43 -0
- package/src/lib/components/ui/select/index.ts +37 -0
- package/src/lib/components/ui/select/select-content.svelte +40 -0
- package/src/lib/components/ui/select/select-group-heading.svelte +21 -0
- package/src/lib/components/ui/select/select-group.svelte +7 -0
- package/src/lib/components/ui/select/select-item.svelte +38 -0
- package/src/lib/components/ui/select/select-label.svelte +20 -0
- package/src/lib/components/ui/select/select-scroll-down-button.svelte +20 -0
- package/src/lib/components/ui/select/select-scroll-up-button.svelte +20 -0
- package/src/lib/components/ui/select/select-separator.svelte +18 -0
- package/src/lib/components/ui/select/select-trigger.svelte +29 -0
- package/src/lib/components/ui/separator/index.ts +7 -0
- package/src/lib/components/ui/separator/separator.svelte +21 -0
- package/src/lib/components/ui/slider/index.ts +7 -0
- package/src/lib/components/ui/slider/slider.svelte +52 -0
- package/src/lib/components/ui/sonner/index.ts +2 -0
- package/src/lib/components/ui/sonner/sonner.svelte +13 -0
- package/src/lib/components/ui/switch/index.ts +7 -0
- package/src/lib/components/ui/switch/switch.svelte +29 -0
- package/src/lib/components/ui/tabs/index.ts +16 -0
- package/src/lib/components/ui/tabs/tabs-content.svelte +17 -0
- package/src/lib/components/ui/tabs/tabs-list.svelte +16 -0
- package/src/lib/components/ui/tabs/tabs-trigger.svelte +20 -0
- package/src/lib/components/ui/tabs/tabs.svelte +19 -0
- package/src/lib/components/ui/textarea/index.ts +7 -0
- package/src/lib/components/ui/textarea/textarea.svelte +23 -0
- package/src/lib/components/ui/theme-switcher/ThemeSwitcher.svelte +39 -0
- package/src/lib/components/ui/theme-switcher/index.ts +1 -0
- package/src/lib/composables/useFooterItem.svelte.ts +39 -0
- package/src/lib/constants.ts +6 -0
- package/src/lib/contexts/FOOTER_USAGE.md +164 -0
- package/src/lib/contexts/footerContext.svelte.ts +52 -0
- package/src/lib/dummy-output-values.ts +62 -0
- package/src/lib/dummy-surface-chart.json +13 -0
- package/src/lib/example-schema-left-only.json +367 -0
- package/src/lib/example-schema-right-only.json +322 -0
- package/src/lib/example-schema.json +1582 -0
- package/src/lib/features/preview/handlers.ts +243 -0
- package/src/lib/features/preview/index.ts +2 -0
- package/src/lib/features/preview/notifications.ts +52 -0
- package/src/lib/index.ts +52 -0
- package/src/lib/stores/themeStore.svelte.ts +54 -0
- package/src/lib/styles/base.css +142 -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/themes.ts +18 -0
- package/src/lib/types/generated/index.ts +6 -0
- package/src/lib/types/generated/preset.ts +82 -0
- package/src/lib/types/generated/schema.ts +527 -0
- package/src/lib/utils/computeThrottle.svelte.ts +117 -0
- package/src/lib/utils/debounce.ts +30 -0
- package/src/lib/utils/file-download.ts +88 -0
- package/src/lib/utils/loadScript.ts +52 -0
- package/src/lib/utils/param-exporter.ts +242 -0
- package/src/lib/utils/solving.svelte.ts +100 -0
- package/src/lib/utils/utils-shared.ts +57 -0
- package/src/lib/utils/visibility-rules.ts +97 -0
- package/src/lib/utils.ts +13 -0
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file was automatically generated from schemas/ui-schema.json.
|
|
3
|
+
* DO NOT MODIFY IT BY HAND. Instead, modify the source JSON Schema file,
|
|
4
|
+
* and run `npm run generate:ts` in the schemas directory to regenerate this file.
|
|
5
|
+
*/
|
|
6
|
+
export type GrasshopperParamType = 'number' | 'integer' | 'boolean' | 'text' | 'valueList' | 'file' | 'color' | 'generic';
|
|
7
|
+
export type InputNumberLayoutItem = LayoutItemBase & {
|
|
8
|
+
type: 'input';
|
|
9
|
+
widgetType: 'number';
|
|
10
|
+
config?: NumberWidgetConfig;
|
|
11
|
+
[k: string]: unknown | undefined;
|
|
12
|
+
};
|
|
13
|
+
export type InputTextLayoutItem = LayoutItemBase & {
|
|
14
|
+
type: 'input';
|
|
15
|
+
widgetType: 'text';
|
|
16
|
+
config?: TextWidgetConfig;
|
|
17
|
+
[k: string]: unknown | undefined;
|
|
18
|
+
};
|
|
19
|
+
export type InputDropdownLayoutItem = LayoutItemBase & {
|
|
20
|
+
type: 'input';
|
|
21
|
+
widgetType: 'dropdown';
|
|
22
|
+
config: DropdownWidgetConfig;
|
|
23
|
+
[k: string]: unknown | undefined;
|
|
24
|
+
};
|
|
25
|
+
export type InputCheckboxLayoutItem = LayoutItemBase & {
|
|
26
|
+
type: 'input';
|
|
27
|
+
widgetType: 'checkbox';
|
|
28
|
+
config?: CheckboxWidgetConfig;
|
|
29
|
+
[k: string]: unknown | undefined;
|
|
30
|
+
};
|
|
31
|
+
export type InputFileLayoutItem = LayoutItemBase & {
|
|
32
|
+
type: 'input';
|
|
33
|
+
widgetType: 'file';
|
|
34
|
+
config?: FileInputWidgetConfig;
|
|
35
|
+
[k: string]: unknown | undefined;
|
|
36
|
+
};
|
|
37
|
+
export type InputColorLayoutItem = LayoutItemBase & {
|
|
38
|
+
type: 'input';
|
|
39
|
+
widgetType: 'color';
|
|
40
|
+
config?: ColorWidgetConfig;
|
|
41
|
+
[k: string]: unknown | undefined;
|
|
42
|
+
};
|
|
43
|
+
export type OutputTextLayoutItem = LayoutItemBase & {
|
|
44
|
+
type: 'output';
|
|
45
|
+
widgetType: 'text';
|
|
46
|
+
[k: string]: unknown | undefined;
|
|
47
|
+
};
|
|
48
|
+
export type OutputNumberLayoutItem = LayoutItemBase & {
|
|
49
|
+
type: 'output';
|
|
50
|
+
widgetType: 'number';
|
|
51
|
+
[k: string]: unknown | undefined;
|
|
52
|
+
};
|
|
53
|
+
export type OutputFileLayoutItem = LayoutItemBase & {
|
|
54
|
+
type: 'output';
|
|
55
|
+
widgetType: 'file';
|
|
56
|
+
config?: FileWidgetConfig;
|
|
57
|
+
[k: string]: unknown | undefined;
|
|
58
|
+
};
|
|
59
|
+
export type OutputChartLayoutItem = LayoutItemBase & {
|
|
60
|
+
type: 'output';
|
|
61
|
+
widgetType: 'chart';
|
|
62
|
+
config?: ChartWidgetConfig;
|
|
63
|
+
[k: string]: unknown | undefined;
|
|
64
|
+
};
|
|
65
|
+
export type LayoutItem = InputNumberLayoutItem | InputTextLayoutItem | InputDropdownLayoutItem | InputCheckboxLayoutItem | InputFileLayoutItem | InputColorLayoutItem | OutputTextLayoutItem | OutputNumberLayoutItem | OutputFileLayoutItem | OutputChartLayoutItem | LineBreakLayoutItem;
|
|
66
|
+
export type LayoutConfig = TabbedLayoutConfig | FlatLayoutConfig;
|
|
67
|
+
export type GrasshopperInputStructure = 'item' | 'list' | 'tree';
|
|
68
|
+
/**
|
|
69
|
+
* Schema definitions for Selva UI configuration
|
|
70
|
+
*/
|
|
71
|
+
export interface SelvaUISchema {
|
|
72
|
+
[k: string]: unknown | undefined;
|
|
73
|
+
}
|
|
74
|
+
export interface VisibilityRule {
|
|
75
|
+
/**
|
|
76
|
+
* Parameter ID to watch for changes
|
|
77
|
+
*/
|
|
78
|
+
paramId: string;
|
|
79
|
+
/**
|
|
80
|
+
* Comparison operator
|
|
81
|
+
*/
|
|
82
|
+
operator: 'equals' | 'notEquals' | 'greaterThan' | 'lessThan' | 'greaterThanOrEqual' | 'lessThanOrEqual' | 'in' | 'notIn' | 'between' | 'matches';
|
|
83
|
+
/**
|
|
84
|
+
* Value to compare against (used for equals, notEquals, greaterThan, lessThan, greaterThanOrEqual, lessThanOrEqual)
|
|
85
|
+
*/
|
|
86
|
+
value?: {
|
|
87
|
+
[k: string]: unknown | undefined;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Array of values (used for 'in', 'notIn' operators, or [min, max] for 'between')
|
|
91
|
+
*/
|
|
92
|
+
values?: unknown[];
|
|
93
|
+
}
|
|
94
|
+
export interface VisibilityCondition {
|
|
95
|
+
/**
|
|
96
|
+
* Evaluation mode: 'all' = AND (all rules must pass), 'any' = OR (at least one rule must pass)
|
|
97
|
+
*/
|
|
98
|
+
mode?: 'all' | 'any';
|
|
99
|
+
/**
|
|
100
|
+
* List of rules to evaluate
|
|
101
|
+
*
|
|
102
|
+
* @minItems 1
|
|
103
|
+
*/
|
|
104
|
+
rules: [VisibilityRule, ...VisibilityRule[]];
|
|
105
|
+
/**
|
|
106
|
+
* Action to apply when condition is met: 'show' makes visible and enabled, 'hide' removes from view, 'disable' makes visible but greyed out and non-interactive
|
|
107
|
+
*/
|
|
108
|
+
action?: 'show' | 'hide' | 'disable';
|
|
109
|
+
/**
|
|
110
|
+
* Default value to set for the parameter when condition is met. The value should be compatible with the parameter type (number, string, boolean, etc.)
|
|
111
|
+
*/
|
|
112
|
+
defaultValue?: {
|
|
113
|
+
[k: string]: unknown | undefined;
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
export interface GroupVisibilityCondition {
|
|
117
|
+
/**
|
|
118
|
+
* Evaluation mode: 'all' = AND (all rules must pass), 'any' = OR (at least one rule must pass)
|
|
119
|
+
*/
|
|
120
|
+
mode?: 'all' | 'any';
|
|
121
|
+
/**
|
|
122
|
+
* List of rules to evaluate
|
|
123
|
+
*
|
|
124
|
+
* @minItems 1
|
|
125
|
+
*/
|
|
126
|
+
rules: [VisibilityRule, ...VisibilityRule[]];
|
|
127
|
+
/**
|
|
128
|
+
* Action to apply when condition is met: 'show' makes group visible, 'hide' removes group from view
|
|
129
|
+
*/
|
|
130
|
+
action?: 'show' | 'hide';
|
|
131
|
+
}
|
|
132
|
+
export interface NumberWidgetConfig {
|
|
133
|
+
minimum?: number;
|
|
134
|
+
maximum?: number;
|
|
135
|
+
stepSize?: number;
|
|
136
|
+
placeholder?: string;
|
|
137
|
+
renderAsSlider?: boolean;
|
|
138
|
+
}
|
|
139
|
+
export interface TextWidgetConfig {
|
|
140
|
+
placeholder?: string;
|
|
141
|
+
required?: boolean;
|
|
142
|
+
/**
|
|
143
|
+
* Maximum character length for text input
|
|
144
|
+
*/
|
|
145
|
+
maxLength?: number;
|
|
146
|
+
/**
|
|
147
|
+
* Regex pattern for validation (e.g., email, phone)
|
|
148
|
+
*/
|
|
149
|
+
pattern?: string;
|
|
150
|
+
/**
|
|
151
|
+
* Custom error message shown when pattern validation fails
|
|
152
|
+
*/
|
|
153
|
+
customErrorMessage?: string;
|
|
154
|
+
}
|
|
155
|
+
export interface DropdownWidgetConfig {
|
|
156
|
+
/**
|
|
157
|
+
* Key-value pairs for dropdown options
|
|
158
|
+
*/
|
|
159
|
+
options: {
|
|
160
|
+
[k: string]: string | undefined;
|
|
161
|
+
};
|
|
162
|
+
required?: boolean;
|
|
163
|
+
}
|
|
164
|
+
export interface CheckboxWidgetConfig {
|
|
165
|
+
}
|
|
166
|
+
export interface FileWidgetConfig {
|
|
167
|
+
buttonLabel?: string;
|
|
168
|
+
/**
|
|
169
|
+
* File format hint (e.g., '3dm') for setting download extension
|
|
170
|
+
*/
|
|
171
|
+
fileFormat?: string;
|
|
172
|
+
}
|
|
173
|
+
export interface FileInputWidgetConfig {
|
|
174
|
+
/**
|
|
175
|
+
* List of accepted file extensions (e.g., ['.3dm', '.step'])
|
|
176
|
+
*/
|
|
177
|
+
acceptedFormats?: string[];
|
|
178
|
+
/**
|
|
179
|
+
* Which mode is active by default when both are allowed
|
|
180
|
+
*/
|
|
181
|
+
defaultInputMode?: 'upload' | 'url';
|
|
182
|
+
/**
|
|
183
|
+
* Which input modes the end user can choose from. If omitted, both are allowed.
|
|
184
|
+
*/
|
|
185
|
+
allowedInputModes?: ('upload' | 'url')[];
|
|
186
|
+
}
|
|
187
|
+
export interface ColorWidgetConfig {
|
|
188
|
+
}
|
|
189
|
+
export interface LayoutItemBase {
|
|
190
|
+
/**
|
|
191
|
+
* Unique identifier for this layout item in the UI tree (not the parameter ID)
|
|
192
|
+
*/
|
|
193
|
+
id: string;
|
|
194
|
+
/**
|
|
195
|
+
* References the Grasshopper component InstanceGuid (Data Source)
|
|
196
|
+
*/
|
|
197
|
+
paramId: string;
|
|
198
|
+
displayName?: string;
|
|
199
|
+
description?: string;
|
|
200
|
+
order?: number;
|
|
201
|
+
span?: number;
|
|
202
|
+
/**
|
|
203
|
+
* Base visibility (static). If false, item is always hidden regardless of conditions.
|
|
204
|
+
*/
|
|
205
|
+
visible?: boolean;
|
|
206
|
+
visibilityCondition?: VisibilityCondition;
|
|
207
|
+
[k: string]: unknown | undefined;
|
|
208
|
+
}
|
|
209
|
+
export interface ChartWidgetConfig {
|
|
210
|
+
}
|
|
211
|
+
export interface LineBreakLayoutItem {
|
|
212
|
+
/**
|
|
213
|
+
* Unique identifier for this layout item in the UI tree
|
|
214
|
+
*/
|
|
215
|
+
id: string;
|
|
216
|
+
type: 'linebreak';
|
|
217
|
+
}
|
|
218
|
+
export interface GroupConfig {
|
|
219
|
+
id: string;
|
|
220
|
+
label: string;
|
|
221
|
+
description?: string;
|
|
222
|
+
order?: number;
|
|
223
|
+
collapsed?: boolean;
|
|
224
|
+
columns?: number;
|
|
225
|
+
items: LayoutItem[];
|
|
226
|
+
visibilityCondition?: GroupVisibilityCondition;
|
|
227
|
+
}
|
|
228
|
+
export interface TabConfig {
|
|
229
|
+
id: string;
|
|
230
|
+
label: string;
|
|
231
|
+
icon?: string;
|
|
232
|
+
order?: number;
|
|
233
|
+
groups: GroupConfig[];
|
|
234
|
+
/**
|
|
235
|
+
* Horizontal region where this tab should be positioned in multi-column layouts
|
|
236
|
+
*/
|
|
237
|
+
position?: 'left' | 'center' | 'right';
|
|
238
|
+
}
|
|
239
|
+
export interface TabbedLayoutConfig {
|
|
240
|
+
type: 'tabbed';
|
|
241
|
+
gap?: number;
|
|
242
|
+
tabs: TabConfig[];
|
|
243
|
+
}
|
|
244
|
+
export interface FlatLayoutConfig {
|
|
245
|
+
type: 'flat';
|
|
246
|
+
gap?: number;
|
|
247
|
+
groups: GroupConfig[];
|
|
248
|
+
}
|
|
249
|
+
export interface DiscoveredInput {
|
|
250
|
+
/**
|
|
251
|
+
* Grasshopper parameter instance GUID
|
|
252
|
+
*/
|
|
253
|
+
id: string;
|
|
254
|
+
name: string;
|
|
255
|
+
nickname: string;
|
|
256
|
+
description: string;
|
|
257
|
+
type: GrasshopperParamType;
|
|
258
|
+
default?: unknown;
|
|
259
|
+
minimum?: number;
|
|
260
|
+
maximum?: number;
|
|
261
|
+
stepSize?: number;
|
|
262
|
+
atLeast?: number;
|
|
263
|
+
atMost?: number;
|
|
264
|
+
treeAccess?: boolean;
|
|
265
|
+
/**
|
|
266
|
+
* Key-value pairs for dropdown/selection options
|
|
267
|
+
*/
|
|
268
|
+
options?: {
|
|
269
|
+
[k: string]: string | undefined;
|
|
270
|
+
};
|
|
271
|
+
[k: string]: unknown | undefined;
|
|
272
|
+
}
|
|
273
|
+
export interface DiscoveredOutput {
|
|
274
|
+
/**
|
|
275
|
+
* Grasshopper component instance GUID
|
|
276
|
+
*/
|
|
277
|
+
id: string;
|
|
278
|
+
nickname: string;
|
|
279
|
+
description?: string;
|
|
280
|
+
/**
|
|
281
|
+
* Output display type in UI: 'text' for text/console output, 'number' for numeric output, 'file' for downloadable files, 'html' for rendered HTML (e.g. Plotly charts)
|
|
282
|
+
*/
|
|
283
|
+
type: 'text' | 'number' | 'file' | 'chart';
|
|
284
|
+
}
|
|
285
|
+
export interface DiscoveredParameters {
|
|
286
|
+
sessionId: string;
|
|
287
|
+
timestamp: string;
|
|
288
|
+
/**
|
|
289
|
+
* List of input parameters available for UI building
|
|
290
|
+
*/
|
|
291
|
+
inputs: DiscoveredInput[];
|
|
292
|
+
/**
|
|
293
|
+
* List of output components available for UI building
|
|
294
|
+
*/
|
|
295
|
+
outputs: DiscoveredOutput[];
|
|
296
|
+
[k: string]: unknown | undefined;
|
|
297
|
+
}
|
|
298
|
+
export interface SchemaInput {
|
|
299
|
+
/**
|
|
300
|
+
* Grasshopper parameter instance GUID
|
|
301
|
+
*/
|
|
302
|
+
id: string;
|
|
303
|
+
nickname: string;
|
|
304
|
+
paramType: GrasshopperParamType;
|
|
305
|
+
description?: string;
|
|
306
|
+
default?: unknown;
|
|
307
|
+
/**
|
|
308
|
+
* Grasshopper data access mode: 'item' = Item Access, 'list' = List Access, 'tree' = Tree Access. Defaults to 'item'.
|
|
309
|
+
*/
|
|
310
|
+
inputStructure?: 'item' | 'list' | 'tree';
|
|
311
|
+
}
|
|
312
|
+
export interface SchemaOutput {
|
|
313
|
+
/**
|
|
314
|
+
* Grasshopper parameter instance GUID
|
|
315
|
+
*/
|
|
316
|
+
id: string;
|
|
317
|
+
nickname: string;
|
|
318
|
+
description?: string;
|
|
319
|
+
/**
|
|
320
|
+
* Output display type
|
|
321
|
+
*/
|
|
322
|
+
type: 'text' | 'number' | 'file' | 'chart';
|
|
323
|
+
}
|
|
324
|
+
export interface ViewerOptions {
|
|
325
|
+
/**
|
|
326
|
+
* If true, display mesh data is sent to the web preview for local rendering
|
|
327
|
+
*/
|
|
328
|
+
enableLocal?: boolean;
|
|
329
|
+
/**
|
|
330
|
+
* If true, enables remote rendering via Rhino Compute
|
|
331
|
+
*/
|
|
332
|
+
enableRemote?: boolean;
|
|
333
|
+
/**
|
|
334
|
+
* Background color for the 3D viewer as hex string (e.g., '#ffffff')
|
|
335
|
+
*/
|
|
336
|
+
backgroundColor?: string;
|
|
337
|
+
}
|
|
338
|
+
export interface UISchema {
|
|
339
|
+
id: string;
|
|
340
|
+
name: string;
|
|
341
|
+
description?: string;
|
|
342
|
+
/**
|
|
343
|
+
* Grasshopper document file name (e.g., 'myfile.gh')
|
|
344
|
+
*/
|
|
345
|
+
projectFileName?: string;
|
|
346
|
+
/**
|
|
347
|
+
* Grasshopper document unique identifier (GUID)
|
|
348
|
+
*/
|
|
349
|
+
documentId?: string;
|
|
350
|
+
/**
|
|
351
|
+
* Version of Selva plugin that created/last modified this schema
|
|
352
|
+
*/
|
|
353
|
+
pluginVersion?: string;
|
|
354
|
+
/**
|
|
355
|
+
* User-defined tags for organizing schemas (e.g., ['architecture', 'facade'])
|
|
356
|
+
*/
|
|
357
|
+
tags?: string[];
|
|
358
|
+
/**
|
|
359
|
+
* Category for organizing schemas (e.g., 'architecture', 'structural', 'mechanical')
|
|
360
|
+
*/
|
|
361
|
+
category?: string;
|
|
362
|
+
/**
|
|
363
|
+
* User or organization who created the schema
|
|
364
|
+
*/
|
|
365
|
+
author?: string;
|
|
366
|
+
/**
|
|
367
|
+
* Organization/company name
|
|
368
|
+
*/
|
|
369
|
+
organization?: string;
|
|
370
|
+
/**
|
|
371
|
+
* Semantic version of the schema format (MAJOR.MINOR.PATCH)
|
|
372
|
+
*/
|
|
373
|
+
schemaVersion?: string;
|
|
374
|
+
/**
|
|
375
|
+
* Minimum plugin version required to load this schema
|
|
376
|
+
*/
|
|
377
|
+
minPluginVersion?: string;
|
|
378
|
+
created?: string;
|
|
379
|
+
/**
|
|
380
|
+
* Last modification timestamp
|
|
381
|
+
*/
|
|
382
|
+
lastModified?: string;
|
|
383
|
+
viewerOptions?: ViewerOptions1;
|
|
384
|
+
/**
|
|
385
|
+
* If true, changes trigger immediate solving. If false, user must press Calculate button.
|
|
386
|
+
*/
|
|
387
|
+
instanceSolve?: boolean;
|
|
388
|
+
inputs: SchemaInput[];
|
|
389
|
+
/**
|
|
390
|
+
* All output components (print, bake, file download)
|
|
391
|
+
*/
|
|
392
|
+
outputs: SchemaOutput[];
|
|
393
|
+
layout: LayoutConfig;
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Configuration for the 3D viewer
|
|
397
|
+
*/
|
|
398
|
+
export interface ViewerOptions1 {
|
|
399
|
+
/**
|
|
400
|
+
* If true, display mesh data is sent to the web preview for local rendering
|
|
401
|
+
*/
|
|
402
|
+
enableLocal?: boolean;
|
|
403
|
+
/**
|
|
404
|
+
* If true, enables remote rendering via Rhino Compute
|
|
405
|
+
*/
|
|
406
|
+
enableRemote?: boolean;
|
|
407
|
+
/**
|
|
408
|
+
* Background color for the 3D viewer as hex string (e.g., '#ffffff')
|
|
409
|
+
*/
|
|
410
|
+
backgroundColor?: string;
|
|
411
|
+
}
|
|
412
|
+
export interface SessionState {
|
|
413
|
+
sessionId: string;
|
|
414
|
+
active: boolean;
|
|
415
|
+
lastUpdate: string;
|
|
416
|
+
mode: 'builder' | 'preview';
|
|
417
|
+
[k: string]: unknown | undefined;
|
|
418
|
+
}
|
|
419
|
+
export interface RuntimeValues {
|
|
420
|
+
timestamp: string;
|
|
421
|
+
values: {
|
|
422
|
+
[k: string]: unknown | undefined;
|
|
423
|
+
};
|
|
424
|
+
[k: string]: unknown | undefined;
|
|
425
|
+
}
|
|
426
|
+
export interface ValidationIssueMessage {
|
|
427
|
+
paramId: string;
|
|
428
|
+
/**
|
|
429
|
+
* warning = can still load, error = cannot load
|
|
430
|
+
*/
|
|
431
|
+
severity: 'warning' | 'error';
|
|
432
|
+
message: string;
|
|
433
|
+
details?: {
|
|
434
|
+
expected?: string;
|
|
435
|
+
actual?: string;
|
|
436
|
+
[k: string]: unknown | undefined;
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
export declare const ACCEPTED_FILE_FORMATS: readonly [".3dm", ".stp", ".step", ".fbx", ".obj", ".dxf", ".stl"];
|
|
440
|
+
export declare function isInputLayoutItem(item: LayoutItem): item is InputNumberLayoutItem | InputTextLayoutItem | InputDropdownLayoutItem | InputCheckboxLayoutItem | InputFileLayoutItem | InputColorLayoutItem;
|
|
441
|
+
export declare function isOutputLayoutItem(item: LayoutItem): item is OutputTextLayoutItem | OutputNumberLayoutItem | OutputFileLayoutItem | OutputChartLayoutItem;
|
|
442
|
+
export declare function isLineBreakLayoutItem(item: LayoutItem): item is LineBreakLayoutItem;
|
|
443
|
+
export declare function isNumberWidget(item: LayoutItem): item is InputNumberLayoutItem;
|
|
444
|
+
export declare function isTextWidget(item: LayoutItem): item is InputTextLayoutItem;
|
|
445
|
+
export declare function isDropdownWidget(item: LayoutItem): item is InputDropdownLayoutItem;
|
|
446
|
+
export declare function isCheckboxWidget(item: LayoutItem): item is InputCheckboxLayoutItem;
|
|
447
|
+
export declare function isFileWidget(item: LayoutItem): item is InputFileLayoutItem;
|
|
448
|
+
export declare function isColorWidget(item: LayoutItem): item is InputColorLayoutItem;
|
|
449
|
+
export type InputLayoutItem = InputNumberLayoutItem | InputTextLayoutItem | InputDropdownLayoutItem | InputCheckboxLayoutItem | InputFileLayoutItem | InputColorLayoutItem;
|
|
450
|
+
export type OutputLayoutItem = OutputTextLayoutItem | OutputNumberLayoutItem | OutputFileLayoutItem | OutputChartLayoutItem;
|
|
451
|
+
export type SupportedTypes = string | number | boolean;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/**
|
|
3
|
+
* This file was automatically generated from schemas/ui-schema.json.
|
|
4
|
+
* DO NOT MODIFY IT BY HAND. Instead, modify the source JSON Schema file,
|
|
5
|
+
* and run `npm run generate:ts` in the schemas directory to regenerate this file.
|
|
6
|
+
*/
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// CONSTANTS (from schema)
|
|
9
|
+
// ============================================================================
|
|
10
|
+
export const ACCEPTED_FILE_FORMATS = [
|
|
11
|
+
".3dm",
|
|
12
|
+
".stp",
|
|
13
|
+
".step",
|
|
14
|
+
".fbx",
|
|
15
|
+
".obj",
|
|
16
|
+
".dxf",
|
|
17
|
+
".stl"
|
|
18
|
+
];
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// TYPE GUARDS
|
|
21
|
+
// ============================================================================
|
|
22
|
+
export function isInputLayoutItem(item) {
|
|
23
|
+
return item.type === 'input';
|
|
24
|
+
}
|
|
25
|
+
export function isOutputLayoutItem(item) {
|
|
26
|
+
return item.type === 'output';
|
|
27
|
+
}
|
|
28
|
+
export function isLineBreakLayoutItem(item) {
|
|
29
|
+
return item.type === 'linebreak';
|
|
30
|
+
}
|
|
31
|
+
export function isNumberWidget(item) {
|
|
32
|
+
return item.type === 'input' && item.widgetType === 'number';
|
|
33
|
+
}
|
|
34
|
+
export function isTextWidget(item) {
|
|
35
|
+
return item.type === 'input' && item.widgetType === 'text';
|
|
36
|
+
}
|
|
37
|
+
export function isDropdownWidget(item) {
|
|
38
|
+
return item.type === 'input' && item.widgetType === 'dropdown';
|
|
39
|
+
}
|
|
40
|
+
export function isCheckboxWidget(item) {
|
|
41
|
+
return item.type === 'input' && item.widgetType === 'checkbox';
|
|
42
|
+
}
|
|
43
|
+
export function isFileWidget(item) {
|
|
44
|
+
return item.type === 'input' && item.widgetType === 'file';
|
|
45
|
+
}
|
|
46
|
+
export function isColorWidget(item) {
|
|
47
|
+
return item.type === 'input' && item.widgetType === 'color';
|
|
48
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute throttle utility for managing async compute requests.
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Only one request in-flight at a time
|
|
6
|
+
* - Latest values always sent (no queue, just "latest wins")
|
|
7
|
+
* - AbortController support to cancel stale requests
|
|
8
|
+
* - Configurable timeout with automatic abort
|
|
9
|
+
*
|
|
10
|
+
* Flow:
|
|
11
|
+
* 1. User changes value → request sent immediately
|
|
12
|
+
* 2. User changes value while request in-flight → current request aborted, new one starts
|
|
13
|
+
* 3. Result: server never overwhelmed, always processing latest values
|
|
14
|
+
*/
|
|
15
|
+
export interface ComputeThrottleOptions {
|
|
16
|
+
/** Timeout in milliseconds. Default: 60000 (60 seconds) */
|
|
17
|
+
timeout?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare function createComputeThrottle<T>(computeFn: (values: T, signal: AbortSignal) => Promise<void>, options?: ComputeThrottleOptions): {
|
|
20
|
+
/** Trigger a compute with the given values */
|
|
21
|
+
trigger: (values: T) => void;
|
|
22
|
+
/** Whether a compute is currently in progress */
|
|
23
|
+
readonly isComputing: boolean;
|
|
24
|
+
/** Whether there are pending values waiting to be sent */
|
|
25
|
+
readonly hasPending: boolean;
|
|
26
|
+
/** Cancel any in-flight request */
|
|
27
|
+
cancel: () => void;
|
|
28
|
+
};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute throttle utility for managing async compute requests.
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Only one request in-flight at a time
|
|
6
|
+
* - Latest values always sent (no queue, just "latest wins")
|
|
7
|
+
* - AbortController support to cancel stale requests
|
|
8
|
+
* - Configurable timeout with automatic abort
|
|
9
|
+
*
|
|
10
|
+
* Flow:
|
|
11
|
+
* 1. User changes value → request sent immediately
|
|
12
|
+
* 2. User changes value while request in-flight → current request aborted, new one starts
|
|
13
|
+
* 3. Result: server never overwhelmed, always processing latest values
|
|
14
|
+
*/
|
|
15
|
+
export function createComputeThrottle(computeFn, options = {}) {
|
|
16
|
+
const { timeout = 60000 } = options;
|
|
17
|
+
let isComputing = $state(false);
|
|
18
|
+
let pendingValues = $state(null);
|
|
19
|
+
let currentAbortController = null;
|
|
20
|
+
function abortCurrent() {
|
|
21
|
+
if (currentAbortController) {
|
|
22
|
+
currentAbortController.abort();
|
|
23
|
+
currentAbortController = null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async function executeCompute(values) {
|
|
27
|
+
// Abort any existing request
|
|
28
|
+
abortCurrent();
|
|
29
|
+
// Create new abort controller with timeout
|
|
30
|
+
currentAbortController = new AbortController();
|
|
31
|
+
const signal = currentAbortController.signal;
|
|
32
|
+
// Set up timeout
|
|
33
|
+
const timeoutId = setTimeout(() => {
|
|
34
|
+
if (currentAbortController) {
|
|
35
|
+
currentAbortController.abort(new Error(`Request timed out after ${timeout}ms`));
|
|
36
|
+
}
|
|
37
|
+
}, timeout);
|
|
38
|
+
isComputing = true;
|
|
39
|
+
try {
|
|
40
|
+
await computeFn(values, signal);
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
// Re-throw unless it's an abort (which we handle silently for cancellation)
|
|
44
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
45
|
+
// Check if there are pending values - if so, this was intentional cancellation
|
|
46
|
+
if (pendingValues === null) {
|
|
47
|
+
// Timeout or manual cancel without pending values - rethrow
|
|
48
|
+
throw err;
|
|
49
|
+
}
|
|
50
|
+
// Otherwise, silently ignore - we're about to process pending values
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
throw err;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
clearTimeout(timeoutId);
|
|
58
|
+
isComputing = false;
|
|
59
|
+
currentAbortController = null;
|
|
60
|
+
// If values changed while we were computing, send the latest
|
|
61
|
+
if (pendingValues !== null) {
|
|
62
|
+
const next = pendingValues;
|
|
63
|
+
pendingValues = null;
|
|
64
|
+
executeCompute(next);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function trigger(values) {
|
|
69
|
+
if (isComputing) {
|
|
70
|
+
// Store latest values and abort current request
|
|
71
|
+
pendingValues = values;
|
|
72
|
+
abortCurrent();
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
// No request in-flight, send immediately
|
|
76
|
+
executeCompute(values);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function cancel() {
|
|
80
|
+
pendingValues = null;
|
|
81
|
+
abortCurrent();
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
trigger,
|
|
85
|
+
get isComputing() {
|
|
86
|
+
return isComputing;
|
|
87
|
+
},
|
|
88
|
+
get hasPending() {
|
|
89
|
+
return pendingValues !== null;
|
|
90
|
+
},
|
|
91
|
+
cancel
|
|
92
|
+
};
|
|
93
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debounce utility - delays function execution until after a specified wait time
|
|
3
|
+
* has elapsed since the last time it was invoked.
|
|
4
|
+
*
|
|
5
|
+
* Use this for text inputs, search boxes, etc. where you want to wait for user
|
|
6
|
+
* to finish typing before executing.
|
|
7
|
+
*
|
|
8
|
+
* For sliders, use throttle() instead to get immediate feedback with rate limiting.
|
|
9
|
+
*
|
|
10
|
+
* @param func The function to debounce
|
|
11
|
+
* @param wait The delay in milliseconds
|
|
12
|
+
* @returns A debounced version of the function
|
|
13
|
+
*/
|
|
14
|
+
export declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number): (...args: Parameters<T>) => void;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debounce utility - delays function execution until after a specified wait time
|
|
3
|
+
* has elapsed since the last time it was invoked.
|
|
4
|
+
*
|
|
5
|
+
* Use this for text inputs, search boxes, etc. where you want to wait for user
|
|
6
|
+
* to finish typing before executing.
|
|
7
|
+
*
|
|
8
|
+
* For sliders, use throttle() instead to get immediate feedback with rate limiting.
|
|
9
|
+
*
|
|
10
|
+
* @param func The function to debounce
|
|
11
|
+
* @param wait The delay in milliseconds
|
|
12
|
+
* @returns A debounced version of the function
|
|
13
|
+
*/
|
|
14
|
+
export function debounce(func, wait) {
|
|
15
|
+
let timeout = null;
|
|
16
|
+
return function (...args) {
|
|
17
|
+
if (timeout !== null) {
|
|
18
|
+
clearTimeout(timeout);
|
|
19
|
+
}
|
|
20
|
+
timeout = setTimeout(() => {
|
|
21
|
+
func(...args);
|
|
22
|
+
timeout = null;
|
|
23
|
+
}, wait);
|
|
24
|
+
};
|
|
25
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wrapper utilities for file downloads from Grasshopper outputs
|
|
3
|
+
* Uses the core package implementation for file handling
|
|
4
|
+
*/
|
|
5
|
+
import { type FileData } from 'selva-compute';
|
|
6
|
+
/**
|
|
7
|
+
* Download file(s) from Grasshopper outputs
|
|
8
|
+
* Single files are downloaded directly, multiple files are packaged as ZIP
|
|
9
|
+
*/
|
|
10
|
+
export declare function downloadFiles(fileData: FileData | FileData[], fileName?: string): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Check if data is FileData
|
|
13
|
+
*/
|
|
14
|
+
export declare function isFileData(data: unknown): data is FileData;
|
|
15
|
+
/**
|
|
16
|
+
* Check if data is FileData array
|
|
17
|
+
*/
|
|
18
|
+
export declare function isFileDataArray(data: unknown): data is FileData[];
|
|
19
|
+
/**
|
|
20
|
+
* Format file size for display
|
|
21
|
+
*/
|
|
22
|
+
export declare function formatFileSize(bytes: number): string;
|
|
23
|
+
/**
|
|
24
|
+
* Get approximate file size from base64 string
|
|
25
|
+
*/
|
|
26
|
+
export declare function getBase64FileSize(base64: string): number;
|