@selvajs/ui 6.6.0-beta.9 → 7.0.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/README.md +0 -3
- package/dist/components/ErrorScreen.svelte +1 -1
- package/dist/components/compute/AppLayout.svelte +73 -45
- package/dist/components/compute/AppLayout.svelte.d.ts +14 -2
- package/dist/components/compute/CollapsedPanelStrip.svelte +4 -2
- package/dist/components/compute/ComputeApp.svelte +6 -2
- package/dist/components/compute/ComputeApp.svelte.d.ts +1 -1
- package/dist/components/compute/ComputeMessagesDialog.svelte +3 -3
- package/dist/components/compute/ParameterPresetManager.svelte +1 -1
- package/dist/components/compute/SolveMessages.svelte +79 -88
- package/dist/components/compute/SolveMessages.svelte.d.ts +5 -0
- package/dist/components/layout/AppShell.svelte +2 -2
- package/dist/components/layout/FooterItemRenderer.svelte +2 -2
- package/dist/components/layout/FooterItemRenderer.svelte.d.ts +1 -1
- package/dist/components/layout/PageContent.svelte +3 -2
- package/dist/components/layout/PageFooter.svelte +5 -5
- package/dist/components/layout/PageHeader.svelte +3 -3
- package/dist/components/layout/SideNav.svelte +3 -3
- package/dist/components/layout/SubNav.svelte +2 -2
- package/dist/components/preview/ChartOutput.svelte +141 -50
- package/dist/components/preview/Group.svelte +9 -9
- package/dist/components/preview/HelpButton.svelte +1 -1
- package/dist/components/preview/ImageOutput.svelte +13 -10
- package/dist/components/preview/InputControl.svelte +13 -12
- package/dist/components/preview/OutputDisplay.svelte +26 -17
- package/dist/components/preview/TabBar.svelte +8 -6
- package/dist/components/preview/TabBar.svelte.d.ts +2 -0
- package/dist/components/preview/TabContent.svelte +8 -8
- package/dist/components/preview/TabLayout.svelte +6 -7
- package/dist/components/preview/inputs/CheckboxInput.svelte +1 -1
- package/dist/components/preview/inputs/ChecklistInput.svelte +5 -5
- package/dist/components/preview/inputs/ColorInput.svelte +356 -14
- package/dist/components/preview/inputs/ColorInput.svelte.d.ts +1 -0
- package/dist/components/preview/inputs/DropdownInput.svelte +3 -3
- package/dist/components/preview/inputs/FileInput.svelte +17 -12
- package/dist/components/preview/inputs/GeometryInput.svelte +4 -4
- package/dist/components/preview/inputs/GeometryInput.svelte.d.ts +1 -1
- package/dist/components/preview/inputs/NumberInput.svelte +8 -8
- package/dist/components/preview/inputs/OptionGlyph.svelte +1 -1
- package/dist/components/preview/inputs/OptionGlyph.svelte.d.ts +1 -1
- package/dist/components/preview/inputs/SegmentedInput.svelte +3 -2
- package/dist/components/preview/inputs/TextInput.svelte +5 -5
- package/dist/components/preview/inputs/TileInput.svelte +8 -5
- package/dist/components/primitives/CalculateButton.svelte +10 -4
- package/dist/components/primitives/Callout.svelte +8 -6
- package/dist/components/primitives/Callout.svelte.d.ts +4 -4
- package/dist/components/primitives/DataTable.svelte +1 -1
- package/dist/components/primitives/FilterableDropdown.svelte +13 -1
- package/dist/components/primitives/FilterableDropdown.svelte.d.ts +5 -0
- package/dist/components/primitives/ImageUploadField.svelte +1 -1
- package/dist/components/primitives/SolvingIndicator.svelte +242 -41
- package/dist/components/primitives/SolvingIndicator.svelte.d.ts +13 -5
- package/dist/components/primitives/alert-dialog/alert-dialog-content.svelte +1 -1
- package/dist/components/primitives/badge/badge.svelte +2 -2
- package/dist/components/primitives/badge/badge.svelte.d.ts +6 -6
- package/dist/components/primitives/button/button.svelte +7 -8
- package/dist/components/primitives/button/button.svelte.d.ts +19 -19
- package/dist/components/primitives/card/card.svelte +1 -1
- package/dist/components/primitives/card/card.svelte.d.ts +1 -1
- package/dist/components/primitives/checkbox/checkbox.svelte +1 -1
- package/dist/components/primitives/command/command-input.svelte +1 -1
- package/dist/components/primitives/command/command-item.svelte +1 -1
- package/dist/components/primitives/command/command-link-item.svelte +1 -1
- package/dist/components/primitives/command/command.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-checkbox-item.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-content.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-item.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-radio-item.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-sub-content.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-sub-trigger.svelte +1 -1
- package/dist/components/primitives/dialog/dialog-content.svelte +3 -3
- package/dist/components/primitives/drawer/Drawer.svelte +1 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte +31 -11
- package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +2 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-content.svelte +5 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-content.svelte.d.ts +2 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-item.svelte +4 -2
- package/dist/components/primitives/dropdown-menu/dropdown-menu-item.svelte.d.ts +2 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte +1 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte +1 -1
- package/dist/components/primitives/index.d.ts +1 -1
- package/dist/components/primitives/index.js +1 -1
- package/dist/components/primitives/input/input.svelte +2 -2
- package/dist/components/primitives/input-group/input-group-input.svelte.d.ts +1 -1
- package/dist/components/primitives/input-group/input-group.svelte +1 -1
- package/dist/components/primitives/mode-toggle/mode-toggle.svelte +2 -2
- package/dist/components/primitives/popover/popover-content.svelte +1 -1
- package/dist/components/primitives/resizable/resizable-handle.svelte +2 -2
- package/dist/components/primitives/search/search.svelte +1 -1
- package/dist/components/primitives/select/select-content.svelte +1 -1
- package/dist/components/primitives/select/select-item.svelte +1 -1
- package/dist/components/primitives/select/select-trigger.svelte +1 -1
- package/dist/components/primitives/slider/slider.svelte +1 -1
- package/dist/components/primitives/switch/switch.svelte +1 -1
- package/dist/components/primitives/tabs/tabs-list.svelte +2 -2
- package/dist/components/primitives/tabs/tabs-list.svelte.d.ts +6 -6
- package/dist/components/primitives/tabs/tabs-trigger.svelte +2 -2
- package/dist/components/primitives/tabs/tabs-trigger.svelte.d.ts +6 -6
- package/dist/components/primitives/textarea/textarea.svelte +1 -1
- package/dist/components/primitives/toggle/toggle.svelte +8 -2
- package/dist/components/primitives/toggle/toggle.svelte.d.ts +10 -4
- package/dist/components/primitives/toggle-group/toggle-group-item.svelte +1 -1
- package/dist/components/primitives/toggle-group/toggle-group.svelte +1 -1
- package/dist/components/primitives/tooltip/index.d.ts +6 -0
- package/dist/components/primitives/tooltip/index.js +8 -0
- package/dist/components/primitives/tooltip/tooltip-content.svelte +34 -0
- package/dist/components/primitives/tooltip/tooltip-content.svelte.d.ts +10 -0
- package/dist/components/primitives/tooltip/tooltip-portal.svelte +7 -0
- package/dist/components/primitives/tooltip/tooltip-portal.svelte.d.ts +4 -0
- package/dist/components/primitives/tooltip/tooltip-provider.svelte +7 -0
- package/dist/components/primitives/tooltip/tooltip-provider.svelte.d.ts +4 -0
- package/dist/components/primitives/tooltip/tooltip-trigger.svelte +7 -0
- package/dist/components/primitives/tooltip/tooltip-trigger.svelte.d.ts +4 -0
- package/dist/components/primitives/tooltip/tooltip.svelte +7 -0
- package/dist/components/primitives/tooltip/tooltip.svelte.d.ts +4 -0
- package/dist/components/viewer/MeshMetadataPanel.svelte +2 -2
- package/dist/components/viewer/SceneManager.svelte +32 -21
- package/dist/components/viewer/SceneManager.svelte.d.ts +3 -1
- package/dist/components/viewer/Viewer.svelte +128 -178
- package/dist/components/viewer/Viewer.svelte.d.ts +7 -2
- package/dist/components/viewer/ViewerDock.svelte +404 -0
- package/dist/components/viewer/ViewerDock.svelte.d.ts +42 -0
- package/dist/composables/useFooterItem.svelte.d.ts +1 -1
- package/dist/composables/useFooterItem.svelte.js +1 -1
- package/dist/compute/liveProgress.svelte.d.ts +16 -0
- package/dist/compute/liveProgress.svelte.js +90 -0
- package/dist/compute/solving.svelte.d.ts +7 -9
- package/dist/compute/solving.svelte.js +56 -48
- package/dist/constants.d.ts +6 -8
- package/dist/constants.js +8 -11
- package/dist/contexts/hostContext.svelte.d.ts +1 -1
- package/dist/features/chart/plotly-compat.d.ts +15 -0
- package/dist/features/chart/plotly-compat.js +124 -0
- package/dist/i18n/messages.d.ts +17 -0
- package/dist/i18n/messages.js +26 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/public.d.ts +1 -0
- package/dist/public.js +1 -0
- package/dist/schema/visibility-rules.d.ts +7 -1
- package/dist/schema/visibility-rules.js +17 -0
- package/dist/styles/base.css +93 -86
- package/dist/utils/color-space.d.ts +21 -0
- package/dist/utils/color-space.js +90 -0
- package/package.json +31 -23
- package/src/lib/components/ErrorScreen.svelte +1 -1
- package/src/lib/components/compute/AppLayout.svelte +74 -46
- package/src/lib/components/compute/CollapsedPanelStrip.svelte +4 -2
- package/src/lib/components/compute/ComputeApp.svelte +6 -2
- package/src/lib/components/compute/ComputeMessagesDialog.svelte +4 -4
- package/src/lib/components/compute/ParameterPresetManager.svelte +1 -1
- package/src/lib/components/compute/SolveMessages.svelte +81 -90
- package/src/lib/components/layout/AppShell.svelte +2 -2
- package/src/lib/components/layout/FooterItemRenderer.svelte +2 -2
- package/src/lib/components/layout/PageContent.svelte +3 -2
- package/src/lib/components/layout/PageFooter.svelte +5 -5
- package/src/lib/components/layout/PageHeader.svelte +3 -3
- package/src/lib/components/layout/SideNav.svelte +4 -4
- package/src/lib/components/layout/SubNav.svelte +2 -2
- package/src/lib/components/preview/ChartOutput.svelte +141 -50
- package/src/lib/components/preview/Group.svelte +9 -9
- package/src/lib/components/preview/HelpButton.svelte +1 -1
- package/src/lib/components/preview/ImageOutput.svelte +13 -10
- package/src/lib/components/preview/InputControl.svelte +13 -12
- package/src/lib/components/preview/OutputDisplay.svelte +26 -17
- package/src/lib/components/preview/TabBar.svelte +8 -6
- package/src/lib/components/preview/TabContent.svelte +8 -8
- package/src/lib/components/preview/TabLayout.svelte +6 -7
- package/src/lib/components/preview/inputs/CheckboxInput.svelte +1 -1
- package/src/lib/components/preview/inputs/ChecklistInput.svelte +5 -5
- package/src/lib/components/preview/inputs/ColorInput.svelte +356 -14
- package/src/lib/components/preview/inputs/DropdownInput.svelte +3 -3
- package/src/lib/components/preview/inputs/FileInput.svelte +17 -12
- package/src/lib/components/preview/inputs/GeometryInput.svelte +4 -4
- package/src/lib/components/preview/inputs/NumberInput.svelte +8 -8
- package/src/lib/components/preview/inputs/OptionGlyph.svelte +2 -2
- package/src/lib/components/preview/inputs/SegmentedInput.svelte +3 -2
- package/src/lib/components/preview/inputs/TextInput.svelte +5 -5
- package/src/lib/components/preview/inputs/TileInput.svelte +8 -5
- package/src/lib/components/primitives/CalculateButton.svelte +10 -4
- package/src/lib/components/primitives/Callout.svelte +9 -7
- package/src/lib/components/primitives/DataTable.svelte +1 -1
- package/src/lib/components/primitives/FilterableDropdown.svelte +14 -2
- package/src/lib/components/primitives/ImageUploadField.svelte +1 -1
- package/src/lib/components/primitives/IssueList.svelte +1 -1
- package/src/lib/components/primitives/SeverityIcon.svelte +1 -1
- package/src/lib/components/primitives/SolvingIndicator.svelte +242 -41
- package/src/lib/components/primitives/StateDisplay.svelte +1 -1
- package/src/lib/components/primitives/alert-dialog/alert-dialog-action.svelte +2 -2
- package/src/lib/components/primitives/alert-dialog/alert-dialog-cancel.svelte +2 -2
- package/src/lib/components/primitives/alert-dialog/alert-dialog-content.svelte +2 -2
- package/src/lib/components/primitives/alert-dialog/alert-dialog-description.svelte +1 -1
- package/src/lib/components/primitives/alert-dialog/alert-dialog-footer.svelte +1 -1
- package/src/lib/components/primitives/alert-dialog/alert-dialog-header.svelte +1 -1
- package/src/lib/components/primitives/alert-dialog/alert-dialog-overlay.svelte +1 -1
- package/src/lib/components/primitives/alert-dialog/alert-dialog-title.svelte +1 -1
- package/src/lib/components/primitives/badge/badge.svelte +3 -3
- package/src/lib/components/primitives/button/button.svelte +7 -8
- package/src/lib/components/primitives/button-group/button-group-separator.svelte +2 -2
- package/src/lib/components/primitives/button-group/button-group-text.svelte +1 -1
- package/src/lib/components/primitives/button-group/button-group.svelte +1 -1
- package/src/lib/components/primitives/card/card-content.svelte +1 -1
- package/src/lib/components/primitives/card/card-description.svelte +1 -1
- package/src/lib/components/primitives/card/card-footer.svelte +1 -1
- package/src/lib/components/primitives/card/card-header.svelte +1 -1
- package/src/lib/components/primitives/card/card-title.svelte +1 -1
- package/src/lib/components/primitives/card/card.svelte +2 -2
- package/src/lib/components/primitives/checkbox/checkbox.svelte +2 -2
- package/src/lib/components/primitives/command/command-dialog.svelte +2 -2
- package/src/lib/components/primitives/command/command-empty.svelte +1 -1
- package/src/lib/components/primitives/command/command-group.svelte +1 -1
- package/src/lib/components/primitives/command/command-input.svelte +3 -3
- package/src/lib/components/primitives/command/command-item.svelte +2 -2
- package/src/lib/components/primitives/command/command-link-item.svelte +2 -2
- package/src/lib/components/primitives/command/command-list.svelte +1 -1
- package/src/lib/components/primitives/command/command-separator.svelte +1 -1
- package/src/lib/components/primitives/command/command-shortcut.svelte +1 -1
- package/src/lib/components/primitives/command/command.svelte +2 -2
- package/src/lib/components/primitives/context-menu/context-menu-checkbox-item.svelte +2 -2
- package/src/lib/components/primitives/context-menu/context-menu-content.svelte +2 -2
- package/src/lib/components/primitives/context-menu/context-menu-group-heading.svelte +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-item.svelte +2 -2
- package/src/lib/components/primitives/context-menu/context-menu-label.svelte +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-radio-item.svelte +2 -2
- package/src/lib/components/primitives/context-menu/context-menu-separator.svelte +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-shortcut.svelte +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-sub-content.svelte +2 -2
- package/src/lib/components/primitives/context-menu/context-menu-sub-trigger.svelte +2 -2
- package/src/lib/components/primitives/dialog/dialog-content.svelte +4 -4
- package/src/lib/components/primitives/dialog/dialog-description.svelte +1 -1
- package/src/lib/components/primitives/dialog/dialog-footer.svelte +1 -1
- package/src/lib/components/primitives/dialog/dialog-header.svelte +1 -1
- package/src/lib/components/primitives/dialog/dialog-overlay.svelte +1 -1
- package/src/lib/components/primitives/dialog/dialog-title.svelte +1 -1
- package/src/lib/components/primitives/drawer/Drawer.svelte +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte +32 -12
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-content.svelte +6 -2
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-group-heading.svelte +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-item.svelte +5 -3
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-label.svelte +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte +2 -2
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-separator.svelte +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte +2 -2
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte +2 -2
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte +2 -2
- package/src/lib/components/primitives/empty/empty-content.svelte +1 -1
- package/src/lib/components/primitives/empty/empty-description.svelte +1 -1
- package/src/lib/components/primitives/empty/empty-header.svelte +1 -1
- package/src/lib/components/primitives/empty/empty-media.svelte +1 -1
- package/src/lib/components/primitives/empty/empty-title.svelte +1 -1
- package/src/lib/components/primitives/empty/empty.svelte +1 -1
- package/src/lib/components/primitives/field/field-content.svelte +1 -1
- package/src/lib/components/primitives/field/field-description.svelte +1 -1
- package/src/lib/components/primitives/field/field-error.svelte +1 -1
- package/src/lib/components/primitives/field/field-group.svelte +1 -1
- package/src/lib/components/primitives/field/field-label.svelte +2 -2
- package/src/lib/components/primitives/field/field-legend.svelte +1 -1
- package/src/lib/components/primitives/field/field-separator.svelte +2 -2
- package/src/lib/components/primitives/field/field-set.svelte +1 -1
- package/src/lib/components/primitives/field/field-title.svelte +1 -1
- package/src/lib/components/primitives/field/field.svelte +1 -1
- package/src/lib/components/primitives/index.ts +1 -1
- package/src/lib/components/primitives/input/input.svelte +3 -3
- package/src/lib/components/primitives/input-group/input-group-addon.svelte +1 -1
- package/src/lib/components/primitives/input-group/input-group-button.svelte +2 -2
- package/src/lib/components/primitives/input-group/input-group-input.svelte +2 -2
- package/src/lib/components/primitives/input-group/input-group-text.svelte +1 -1
- package/src/lib/components/primitives/input-group/input-group-textarea.svelte +2 -2
- package/src/lib/components/primitives/input-group/input-group.svelte +2 -2
- package/src/lib/components/primitives/label/label.svelte +1 -1
- package/src/lib/components/primitives/mode-toggle/mode-toggle.svelte +2 -2
- package/src/lib/components/primitives/popover/popover-content.svelte +2 -2
- package/src/lib/components/primitives/popover/popover-description.svelte +1 -1
- package/src/lib/components/primitives/popover/popover-header.svelte +1 -1
- package/src/lib/components/primitives/popover/popover-title.svelte +1 -1
- package/src/lib/components/primitives/popover/popover-trigger.svelte +1 -1
- package/src/lib/components/primitives/resizable/resizable-handle.svelte +3 -3
- package/src/lib/components/primitives/resizable/resizable-pane-group.svelte +1 -1
- package/src/lib/components/primitives/scroll-area/scroll-area-scrollbar.svelte +1 -1
- package/src/lib/components/primitives/scroll-area/scroll-area.svelte +1 -1
- package/src/lib/components/primitives/search/search.svelte +2 -2
- package/src/lib/components/primitives/select/select-content.svelte +2 -2
- package/src/lib/components/primitives/select/select-group-heading.svelte +1 -1
- package/src/lib/components/primitives/select/select-item.svelte +2 -2
- package/src/lib/components/primitives/select/select-label.svelte +1 -1
- package/src/lib/components/primitives/select/select-scroll-down-button.svelte +1 -1
- package/src/lib/components/primitives/select/select-scroll-up-button.svelte +1 -1
- package/src/lib/components/primitives/select/select-separator.svelte +2 -2
- package/src/lib/components/primitives/select/select-trigger.svelte +2 -2
- package/src/lib/components/primitives/separator/separator.svelte +1 -1
- package/src/lib/components/primitives/slider/slider.svelte +2 -2
- package/src/lib/components/primitives/spinner/spinner.svelte +1 -1
- package/src/lib/components/primitives/switch/switch.svelte +2 -2
- package/src/lib/components/primitives/tabs/tabs-content.svelte +1 -1
- package/src/lib/components/primitives/tabs/tabs-list.svelte +3 -3
- package/src/lib/components/primitives/tabs/tabs-trigger.svelte +3 -3
- package/src/lib/components/primitives/tabs/tabs.svelte +1 -1
- package/src/lib/components/primitives/textarea/textarea.svelte +2 -2
- package/src/lib/components/primitives/toggle/toggle.svelte +9 -3
- package/src/lib/components/primitives/toggle-group/toggle-group-item.svelte +3 -3
- package/src/lib/components/primitives/toggle-group/toggle-group.svelte +3 -3
- package/src/lib/components/primitives/tooltip/index.ts +19 -0
- package/src/lib/components/primitives/tooltip/tooltip-content.svelte +34 -0
- package/src/lib/components/primitives/tooltip/tooltip-portal.svelte +7 -0
- package/src/lib/components/primitives/tooltip/tooltip-provider.svelte +7 -0
- package/src/lib/components/primitives/tooltip/tooltip-trigger.svelte +7 -0
- package/src/lib/components/primitives/tooltip/tooltip.svelte +7 -0
- package/src/lib/components/viewer/MeshMetadataPanel.svelte +2 -2
- package/src/lib/components/viewer/SceneManager.svelte +32 -21
- package/src/lib/components/viewer/Viewer.svelte +129 -179
- package/src/lib/components/viewer/ViewerDock.svelte +404 -0
- package/src/lib/composables/useFooterItem.svelte.ts +1 -1
- package/src/lib/compute/liveProgress.svelte.ts +103 -0
- package/src/lib/compute/solving.svelte.ts +56 -55
- package/src/lib/constants.ts +8 -11
- package/src/lib/contexts/hostContext.svelte.ts +1 -1
- package/src/lib/features/chart/plotly-compat.ts +141 -0
- package/src/lib/i18n/messages.ts +43 -0
- package/src/lib/index.ts +2 -0
- package/src/lib/public.ts +1 -0
- package/src/lib/schema/visibility-rules.ts +27 -1
- package/src/lib/styles/base.css +93 -86
- package/src/lib/utils/color-space.ts +107 -0
- package/dist/components/primitives/theme-switcher/ThemeSwitcher.svelte +0 -39
- package/dist/components/primitives/theme-switcher/ThemeSwitcher.svelte.d.ts +0 -3
- package/dist/components/primitives/theme-switcher/index.d.ts +0 -1
- package/dist/components/primitives/theme-switcher/index.js +0 -1
- package/dist/styles/themes/cyberpunk.css +0 -98
- package/dist/styles/themes/neutral.css +0 -72
- package/dist/styles/themes/ocean.css +0 -75
- package/dist/styles/themes/selva.css +0 -105
- package/dist/theme/themeStore.svelte.d.ts +0 -12
- package/dist/theme/themeStore.svelte.js +0 -40
- package/dist/theme/themes.d.ts +0 -5
- package/dist/theme/themes.js +0 -13
- package/src/lib/components/primitives/theme-switcher/ThemeSwitcher.svelte +0 -39
- package/src/lib/components/primitives/theme-switcher/index.ts +0 -1
- package/src/lib/styles/themes/cyberpunk.css +0 -98
- package/src/lib/styles/themes/neutral.css +0 -72
- package/src/lib/styles/themes/ocean.css +0 -75
- package/src/lib/styles/themes/selva.css +0 -105
- package/src/lib/theme/themeStore.svelte.ts +0 -50
- package/src/lib/theme/themes.ts +0 -18
package/README.md
CHANGED
|
@@ -57,9 +57,6 @@ In your `app.css`:
|
|
|
57
57
|
@import '@selvajs/ui/styles/base.css';
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
-
Themes are available under `@selvajs/ui/styles/themes/*` — `selva`, `neutral`, `ocean`, and
|
|
61
|
-
`cyberpunk`.
|
|
62
|
-
|
|
63
60
|
## Schema types
|
|
64
61
|
|
|
65
62
|
Types generated from `packages/schemas/ui-schema.json` are published by `@selvajs/schemas`, not
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import * as Card from './primitives/card/index.js';
|
|
4
4
|
import { Button } from './primitives/button/index.js';
|
|
5
5
|
import Callout from './primitives/Callout.svelte';
|
|
6
|
-
import { getLocaleContext } from '../i18n/localeContext.svelte';
|
|
6
|
+
import { getLocaleContext } from '../i18n/localeContext.svelte.js';
|
|
7
7
|
|
|
8
8
|
interface Props {
|
|
9
9
|
status?: number;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import type { Snippet } from 'svelte';
|
|
3
3
|
import type { UISchema, SupportedTypes, ParameterPreset } from '@selvajs/schemas';
|
|
4
|
-
import type { SolveSettlement } from '@selvajs/solve/client';
|
|
4
|
+
import type { LiveSolveState, SolveSettlement } from '@selvajs/solve/client';
|
|
5
5
|
import type { ActionButton } from '../../types/actionButton';
|
|
6
6
|
import type { PresetLabels } from '../../types/presetLabels';
|
|
7
7
|
import { ChevronUp, Download, Ellipsis, Upload } from '@lucide/svelte';
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
import SolvingIndicator from '../primitives/SolvingIndicator.svelte';
|
|
12
12
|
import TabLayout from '../preview/TabLayout.svelte';
|
|
13
13
|
import CollapsedPanelStrip from './CollapsedPanelStrip.svelte';
|
|
14
|
-
import * as Resizable from '../primitives/resizable';
|
|
14
|
+
import * as Resizable from '../primitives/resizable/index.js';
|
|
15
15
|
import * as DropdownMenu from '../primitives/dropdown-menu/index.js';
|
|
16
|
-
import { Button } from '
|
|
16
|
+
import { Button } from '../../index.js';
|
|
17
17
|
import ParameterPresetManager from './ParameterPresetManager.svelte';
|
|
18
18
|
import { runPanelAction } from '../../compute/run-panel-action';
|
|
19
19
|
import { getLocaleContext } from '../../i18n/localeContext.svelte';
|
|
@@ -34,8 +34,20 @@
|
|
|
34
34
|
showViewer: boolean;
|
|
35
35
|
meshes?: any[];
|
|
36
36
|
isSolving: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* `createSolvingIndicator(...).show`, not `isSolving`: grows the action row's solve status,
|
|
39
|
+
* which would otherwise flash on every sub-second solve.
|
|
40
|
+
*/
|
|
37
41
|
showSolvingIndicator?: boolean;
|
|
38
|
-
/** `
|
|
42
|
+
/** `createSolvingIndicator(...).slow`: the solve status grows into a card with progress. */
|
|
43
|
+
solveIsSlow?: boolean;
|
|
44
|
+
/** The session's live channel: step, count and bar for that card. */
|
|
45
|
+
live?: LiveSolveState;
|
|
46
|
+
/** Abort in that card. The host's `SolveMessages` should then take `progressShownByHost`. */
|
|
47
|
+
onabort?: () => void;
|
|
48
|
+
/** As passed to `createSolvingIndicator`. */
|
|
49
|
+
freezesDuringSolve?: boolean;
|
|
50
|
+
/** @deprecated Ignored: the solving status always sits in the action row. */
|
|
39
51
|
solvingIndicatorPlacement?: 'floating' | 'inline';
|
|
40
52
|
/** Rendered above the action row, for a host that keeps the solve's messages in the flow. */
|
|
41
53
|
solveMessages?: Snippet;
|
|
@@ -68,7 +80,10 @@
|
|
|
68
80
|
meshes = [],
|
|
69
81
|
isSolving,
|
|
70
82
|
showSolvingIndicator = false,
|
|
71
|
-
|
|
83
|
+
solveIsSlow = false,
|
|
84
|
+
live,
|
|
85
|
+
onabort,
|
|
86
|
+
freezesDuringSolve = false,
|
|
72
87
|
solveMessages,
|
|
73
88
|
hasPendingChanges = false,
|
|
74
89
|
hasNeverSolved = false,
|
|
@@ -150,6 +165,14 @@
|
|
|
150
165
|
return () => mqMobile.removeEventListener('change', update);
|
|
151
166
|
});
|
|
152
167
|
|
|
168
|
+
// Without a viewer there's nothing to sit beside, so a narrow host (a docked Rhino panel) gets
|
|
169
|
+
// the phone's single edge-to-edge column instead of a card floating in its own margins.
|
|
170
|
+
const STACK_BELOW_WIDTH = 900;
|
|
171
|
+
let rootWidth = $state(0);
|
|
172
|
+
const stacked = $derived(
|
|
173
|
+
isMobile || (!hasViewer && rootWidth > 0 && rootWidth < STACK_BELOW_WIDTH)
|
|
174
|
+
);
|
|
175
|
+
|
|
153
176
|
let leftCollapsed = $state(false);
|
|
154
177
|
let rightCollapsed = $state(false);
|
|
155
178
|
let leftPaneRef = $state<{ expand: () => void } | null>(null);
|
|
@@ -255,9 +278,9 @@
|
|
|
255
278
|
<!-- One primary action and one menu. A definition that solves on every change has no Calculate,
|
|
256
279
|
so the menu sits alone at the end of the row. -->
|
|
257
280
|
{#snippet footer()}
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
{
|
|
281
|
+
<!-- No wrapper: it would always render (the messages' live region is never empty) and pick up
|
|
282
|
+
the drawer footer's row padding, leaving a gap above Calculate with nothing in it. -->
|
|
283
|
+
{@render solveMessages?.()}
|
|
261
284
|
{#if schema.instanceSolve === false}
|
|
262
285
|
<CalculateButton
|
|
263
286
|
{hasPendingChanges}
|
|
@@ -266,13 +289,18 @@
|
|
|
266
289
|
{oncalculate}
|
|
267
290
|
trailing={hasMenu ? actionsMenu : undefined}
|
|
268
291
|
/>
|
|
269
|
-
{:else
|
|
270
|
-
<div class="mt-3 pb-3 pt-2 px-2 gap-2 flex items-center border-t border-border
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
292
|
+
{:else}
|
|
293
|
+
<div class="mt-3 pb-3 pt-2 px-2 gap-2 flex items-center border-t border-border">
|
|
294
|
+
<SolvingIndicator
|
|
295
|
+
{isSolving}
|
|
296
|
+
show={showSolvingIndicator}
|
|
297
|
+
slow={solveIsSlow}
|
|
298
|
+
{live}
|
|
299
|
+
{onabort}
|
|
300
|
+
{freezesDuringSolve}
|
|
301
|
+
/>
|
|
274
302
|
{#if hasMenu}
|
|
275
|
-
|
|
303
|
+
{@render actionsMenu()}
|
|
276
304
|
{/if}
|
|
277
305
|
</div>
|
|
278
306
|
{/if}
|
|
@@ -287,9 +315,9 @@
|
|
|
287
315
|
)}
|
|
288
316
|
<div class="panel-content-wrapper">
|
|
289
317
|
{#if schema.layout.type === 'tabbed'}
|
|
290
|
-
<TabLayout {schema} {values} {onValueChange} {panelFilter} {requestedTabId} bare={
|
|
318
|
+
<TabLayout {schema} {values} {onValueChange} {panelFilter} {requestedTabId} bare={stacked} />
|
|
291
319
|
{/if}
|
|
292
|
-
{#if hostsFooter && !
|
|
320
|
+
{#if hostsFooter && !stacked}
|
|
293
321
|
<div class="panel-footer px-1">
|
|
294
322
|
{@render footer()}
|
|
295
323
|
</div>
|
|
@@ -306,15 +334,16 @@
|
|
|
306
334
|
|
|
307
335
|
<main
|
|
308
336
|
data-layout-root
|
|
309
|
-
class="min-h-0
|
|
310
|
-
? '
|
|
311
|
-
: 'sm:pl-
|
|
337
|
+
class="min-h-0 flex flex-1 flex-col overflow-hidden {stacked
|
|
338
|
+
? ''
|
|
339
|
+
: `sm:flex-row sm:py-2 ${leftCollapsed ? 'sm:pl-0' : 'sm:pl-2'} ${rightCollapsed ? 'sm:pr-0' : 'sm:pr-2'}`}"
|
|
312
340
|
class:fullscreen-layout={isViewerFullscreen}
|
|
313
341
|
class:relative={isMobile}
|
|
314
|
-
class:mobile-root={
|
|
342
|
+
class:mobile-root={stacked}
|
|
343
|
+
bind:clientWidth={rootWidth}
|
|
315
344
|
>
|
|
316
|
-
{#if
|
|
317
|
-
{#if hasViewer}
|
|
345
|
+
{#if stacked}
|
|
346
|
+
{#if isMobile && hasViewer}
|
|
318
347
|
<!-- Ends above the drawer rather than behind it, so the model stays centred in what is
|
|
319
348
|
visible. It jumps straight to its new size: animating it would resize the canvas,
|
|
320
349
|
and its render targets, on every frame of the drawer's slide. -->
|
|
@@ -322,20 +351,20 @@
|
|
|
322
351
|
<Viewer
|
|
323
352
|
{meshes}
|
|
324
353
|
bind:isFullscreen={isViewerFullscreen}
|
|
325
|
-
{isSolving}
|
|
326
354
|
drawerOpen={drawer === 'full'}
|
|
327
355
|
{logoUrl}
|
|
328
356
|
{onViewerReady}
|
|
329
357
|
viewerConfig={{
|
|
330
358
|
...viewerConfig,
|
|
331
|
-
backgroundColor: schema?.viewerOptions?.backgroundColor,
|
|
359
|
+
backgroundColor: schema?.viewerOptions?.backgroundColor ?? viewerConfig.backgroundColor,
|
|
360
|
+
look: schema?.viewerOptions?.look ?? viewerConfig.look,
|
|
332
361
|
showSceneManager: false
|
|
333
362
|
}}
|
|
334
363
|
/>
|
|
335
364
|
</div>
|
|
336
365
|
|
|
337
366
|
<div
|
|
338
|
-
class="drawer-container rounded-t-
|
|
367
|
+
class="drawer-container z-40 rounded-t-xl border-t bg-background shadow-sheet drawer-{drawer}"
|
|
339
368
|
>
|
|
340
369
|
<!-- Named by its visible label; aria-expanded carries the open/closed state. -->
|
|
341
370
|
<button
|
|
@@ -381,7 +410,7 @@
|
|
|
381
410
|
</div>
|
|
382
411
|
{:else}
|
|
383
412
|
<div class="flex flex-1 flex-col overflow-hidden">
|
|
384
|
-
<div class="px-3 pt-3 flex-1 overflow-y-auto">
|
|
413
|
+
<div class="px-3 pt-3 sm:px-5 flex-1 overflow-y-auto">
|
|
385
414
|
{#if hasLeftPanel}
|
|
386
415
|
{@render panelContent(hasRightPanel ? 'left' : undefined, requestedLeftTabId, false)}
|
|
387
416
|
{/if}
|
|
@@ -401,7 +430,7 @@
|
|
|
401
430
|
{/if}
|
|
402
431
|
{:else if !hasViewer && !isTwoPanelMode && hasLeftPanel !== hasRightPanel}
|
|
403
432
|
<!-- Single centered panel (left-only or right-only), no viewer -->
|
|
404
|
-
<div class="min-h-0 flex h-full flex-1 justify-center">
|
|
433
|
+
<div class="min-h-0 p-1 flex h-full flex-1 justify-center">
|
|
405
434
|
<div class="min-h-0 flex h-full w-4/5 flex-col">
|
|
406
435
|
{@render panelContent(
|
|
407
436
|
hasRightPanel ? 'right' : undefined,
|
|
@@ -428,7 +457,7 @@
|
|
|
428
457
|
<Resizable.PaneGroup
|
|
429
458
|
direction="horizontal"
|
|
430
459
|
autoSaveId="selva-layout-{layoutKey}"
|
|
431
|
-
class="min-h-0 flex-1"
|
|
460
|
+
class="min-h-0 m-1 flex-1"
|
|
432
461
|
>
|
|
433
462
|
{#if hasLeftPanel}
|
|
434
463
|
<Resizable.Pane
|
|
@@ -441,7 +470,6 @@
|
|
|
441
470
|
collapsedSize={0}
|
|
442
471
|
onCollapse={() => (leftCollapsed = true)}
|
|
443
472
|
onExpand={() => (leftCollapsed = false)}
|
|
444
|
-
class="ml-1"
|
|
445
473
|
>
|
|
446
474
|
<div
|
|
447
475
|
class="min-h-0 flex h-full flex-col {isViewerFullscreen || leftCollapsed
|
|
@@ -454,6 +482,7 @@
|
|
|
454
482
|
<Resizable.Handle
|
|
455
483
|
withHandle
|
|
456
484
|
line={false}
|
|
485
|
+
class="translate-x-1.5 z-20"
|
|
457
486
|
data-collapsed={leftCollapsed}
|
|
458
487
|
onclick={() => {
|
|
459
488
|
if (leftCollapsed) leftPaneRef?.expand();
|
|
@@ -462,30 +491,34 @@
|
|
|
462
491
|
{/if}
|
|
463
492
|
|
|
464
493
|
{#if hasViewer}
|
|
465
|
-
<Resizable.Pane order={2} minSize={20} class="min-h-0
|
|
494
|
+
<Resizable.Pane order={2} minSize={20} class="min-h-0 flex flex-col">
|
|
466
495
|
<Viewer
|
|
467
496
|
{meshes}
|
|
468
497
|
bind:isFullscreen={isViewerFullscreen}
|
|
469
|
-
{isSolving}
|
|
470
498
|
{logoUrl}
|
|
471
499
|
{onViewerReady}
|
|
472
500
|
viewerConfig={{
|
|
473
501
|
...viewerConfig,
|
|
474
|
-
backgroundColor:
|
|
502
|
+
backgroundColor:
|
|
503
|
+
schema?.viewerOptions?.backgroundColor ?? viewerConfig.backgroundColor,
|
|
504
|
+
look: schema?.viewerOptions?.look ?? viewerConfig.look
|
|
475
505
|
}}
|
|
476
506
|
/>
|
|
477
507
|
</Resizable.Pane>
|
|
478
508
|
{/if}
|
|
479
509
|
|
|
480
510
|
{#if hasRightPanel}
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
511
|
+
{#if hasViewer || !hasLeftPanel}
|
|
512
|
+
<Resizable.Handle
|
|
513
|
+
withHandle
|
|
514
|
+
line={false}
|
|
515
|
+
class="-translate-x-1.5 z-20"
|
|
516
|
+
data-collapsed={rightCollapsed}
|
|
517
|
+
onclick={() => {
|
|
518
|
+
if (rightCollapsed) rightPaneRef?.expand();
|
|
519
|
+
}}
|
|
520
|
+
/>
|
|
521
|
+
{/if}
|
|
489
522
|
<Resizable.Pane
|
|
490
523
|
bind:this={rightPaneRef}
|
|
491
524
|
order={3}
|
|
@@ -496,7 +529,6 @@
|
|
|
496
529
|
collapsedSize={0}
|
|
497
530
|
onCollapse={() => (rightCollapsed = true)}
|
|
498
531
|
onExpand={() => (rightCollapsed = false)}
|
|
499
|
-
class="mr-1"
|
|
500
532
|
>
|
|
501
533
|
<div
|
|
502
534
|
class="min-h-0 flex h-full flex-col {isViewerFullscreen || rightCollapsed
|
|
@@ -523,10 +555,6 @@
|
|
|
523
555
|
{/if}
|
|
524
556
|
</div>
|
|
525
557
|
{/if}
|
|
526
|
-
|
|
527
|
-
{#if solvingIndicatorPlacement === 'floating'}
|
|
528
|
-
<SolvingIndicator show={showSolvingIndicator} />
|
|
529
|
-
{/if}
|
|
530
558
|
</main>
|
|
531
559
|
|
|
532
560
|
<!-- The save, load and validation dialogs; the footer's menu opens them. -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Snippet } from 'svelte';
|
|
2
2
|
import type { UISchema, SupportedTypes, ParameterPreset } from '@selvajs/schemas';
|
|
3
|
-
import type { SolveSettlement } from '@selvajs/solve/client';
|
|
3
|
+
import type { LiveSolveState, SolveSettlement } from '@selvajs/solve/client';
|
|
4
4
|
import type { ActionButton } from '../../types/actionButton';
|
|
5
5
|
import type { PresetLabels } from '../../types/presetLabels';
|
|
6
6
|
import type { ThreeViewer } from '@selvajs/visualization/render';
|
|
@@ -14,8 +14,20 @@ interface Props {
|
|
|
14
14
|
showViewer: boolean;
|
|
15
15
|
meshes?: any[];
|
|
16
16
|
isSolving: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* `createSolvingIndicator(...).show`, not `isSolving`: grows the action row's solve status,
|
|
19
|
+
* which would otherwise flash on every sub-second solve.
|
|
20
|
+
*/
|
|
17
21
|
showSolvingIndicator?: boolean;
|
|
18
|
-
/** `
|
|
22
|
+
/** `createSolvingIndicator(...).slow`: the solve status grows into a card with progress. */
|
|
23
|
+
solveIsSlow?: boolean;
|
|
24
|
+
/** The session's live channel: step, count and bar for that card. */
|
|
25
|
+
live?: LiveSolveState;
|
|
26
|
+
/** Abort in that card. The host's `SolveMessages` should then take `progressShownByHost`. */
|
|
27
|
+
onabort?: () => void;
|
|
28
|
+
/** As passed to `createSolvingIndicator`. */
|
|
29
|
+
freezesDuringSolve?: boolean;
|
|
30
|
+
/** @deprecated Ignored: the solving status always sits in the action row. */
|
|
19
31
|
solvingIndicatorPlacement?: 'floating' | 'inline';
|
|
20
32
|
/** Rendered above the action row, for a host that keeps the solve's messages in the flow. */
|
|
21
33
|
solveMessages?: Snippet;
|
|
@@ -20,12 +20,14 @@
|
|
|
20
20
|
[
|
|
21
21
|
'gap-1 py-2 lg:py-3 lg:flex-col lg:w-auto px-2 lg:px-0',
|
|
22
22
|
'flex w-full shrink-0 flex-row items-center',
|
|
23
|
-
'backdrop-blur-sm bg-background/90 cursor-pointer'
|
|
23
|
+
'backdrop-blur-sm bg-background/90 cursor-pointer',
|
|
24
|
+
side === 'left' ? 'lg:border-r' : 'lg:border-l',
|
|
25
|
+
'border-border'
|
|
24
26
|
].join(' ')
|
|
25
27
|
);
|
|
26
28
|
|
|
27
29
|
const tabButtonClass =
|
|
28
|
-
'w-8 h-8 rounded cursor-pointer flex shrink-0 items-center justify-center text-muted-foreground transition-colors hover:bg-
|
|
30
|
+
'w-8 h-8 rounded-md cursor-pointer flex shrink-0 items-center justify-center text-muted-foreground transition-colors hover:bg-hover hover:text-foreground';
|
|
29
31
|
</script>
|
|
30
32
|
|
|
31
33
|
<div
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
footerText?: string;
|
|
58
58
|
/**
|
|
59
59
|
* How long one solve may take before the client aborts it (ms). Pass the same value the
|
|
60
|
-
* server enforces
|
|
60
|
+
* server enforces for this definition's compute server, or the client aborts solves that would
|
|
61
61
|
* have finished.
|
|
62
62
|
*/
|
|
63
63
|
solveDeadlineMs: number;
|
|
@@ -286,7 +286,10 @@
|
|
|
286
286
|
showViewer={!!schema.viewerOptions?.enableRemote}
|
|
287
287
|
meshes={session.meshes}
|
|
288
288
|
isSolving={session.isSolving}
|
|
289
|
-
showSolvingIndicator={
|
|
289
|
+
showSolvingIndicator={solvingIndicator.show}
|
|
290
|
+
solveIsSlow={solvingIndicator.slow}
|
|
291
|
+
live={session.live}
|
|
292
|
+
onabort={() => session.abort()}
|
|
290
293
|
hasPendingChanges={session.hasPendingChanges}
|
|
291
294
|
hasNeverSolved={session.hasNeverSolved}
|
|
292
295
|
bind:isViewerFullscreen
|
|
@@ -317,4 +320,5 @@
|
|
|
317
320
|
onabort={() => session.abort()}
|
|
318
321
|
onconfirm={() => session.acknowledge()}
|
|
319
322
|
ondiscard={() => session.discard()}
|
|
323
|
+
progressShownByHost={schema?.instanceSolve !== false}
|
|
320
324
|
/>
|
|
@@ -36,7 +36,7 @@ interface Props {
|
|
|
36
36
|
footerText?: string;
|
|
37
37
|
/**
|
|
38
38
|
* How long one solve may take before the client aborts it (ms). Pass the same value the
|
|
39
|
-
* server enforces
|
|
39
|
+
* server enforces for this definition's compute server, or the client aborts solves that would
|
|
40
40
|
* have finished.
|
|
41
41
|
*/
|
|
42
42
|
solveDeadlineMs: number;
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
|
|
9
9
|
import type { Snippet } from 'svelte';
|
|
10
10
|
import type { SolveDiagnostic } from '@selvajs/solve/shared';
|
|
11
|
-
import * as Dialog from '../primitives/dialog';
|
|
11
|
+
import * as Dialog from '../primitives/dialog/index.js';
|
|
12
12
|
import IssueList, { type Issue } from '../primitives/IssueList.svelte';
|
|
13
|
-
import { getLocaleContext } from '../../i18n/localeContext.svelte';
|
|
14
|
-
import { formatCount } from '../../i18n/messages';
|
|
13
|
+
import { getLocaleContext } from '../../i18n/localeContext.svelte.js';
|
|
14
|
+
import { formatCount } from '../../i18n/messages.js';
|
|
15
15
|
|
|
16
16
|
interface Props {
|
|
17
17
|
/** The last solve's messages. Preferred over `errors`/`warnings` when both are given. */
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
<button
|
|
204
204
|
type="button"
|
|
205
205
|
onclick={() => selectListedState(preset)}
|
|
206
|
-
class="p-3 w-full rounded-lg border text-left transition-colors hover:bg-
|
|
206
|
+
class="p-3 w-full rounded-lg border text-left transition-colors hover:bg-hover"
|
|
207
207
|
>
|
|
208
208
|
<div class="text-sm font-medium">{preset.name}</div>
|
|
209
209
|
{#if preset.description}
|