@selvajs/ui 6.6.0-beta.17 → 6.6.0-beta.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ErrorScreen.svelte +1 -1
- package/dist/components/compute/AppLayout.svelte +2 -2
- package/dist/components/compute/ComputeApp.svelte +1 -1
- package/dist/components/compute/ComputeApp.svelte.d.ts +1 -1
- package/dist/components/compute/ComputeMessagesDialog.svelte +3 -3
- package/dist/components/compute/SolveMessages.svelte +3 -3
- package/dist/components/layout/AppShell.svelte +1 -1
- package/dist/components/layout/FooterItemRenderer.svelte +1 -1
- package/dist/components/layout/FooterItemRenderer.svelte.d.ts +1 -1
- package/dist/components/layout/PageContent.svelte +3 -2
- package/dist/components/layout/PageFooter.svelte +3 -3
- package/dist/components/layout/PageHeader.svelte +2 -2
- package/dist/components/preview/ChartOutput.svelte +3 -3
- package/dist/components/preview/Group.svelte +3 -3
- package/dist/components/preview/HelpButton.svelte +1 -1
- package/dist/components/preview/ImageOutput.svelte +3 -3
- package/dist/components/preview/InputControl.svelte +12 -12
- package/dist/components/preview/OutputDisplay.svelte +4 -4
- package/dist/components/preview/TabBar.svelte +2 -2
- package/dist/components/preview/TabContent.svelte +7 -7
- package/dist/components/preview/TabLayout.svelte +3 -3
- package/dist/components/preview/inputs/CheckboxInput.svelte +1 -1
- package/dist/components/preview/inputs/ChecklistInput.svelte +2 -2
- package/dist/components/preview/inputs/ColorInput.svelte +6 -6
- package/dist/components/preview/inputs/DropdownInput.svelte +3 -3
- package/dist/components/preview/inputs/FileInput.svelte +14 -9
- 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 +4 -4
- package/dist/components/preview/inputs/TextInput.svelte +5 -5
- package/dist/components/preview/inputs/TileInput.svelte +5 -3
- package/dist/components/primitives/CalculateButton.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/button/button.svelte +1 -1
- package/dist/components/primitives/button/button.svelte.d.ts +1 -1
- package/dist/components/primitives/dialog/dialog-content.svelte +1 -1
- package/dist/components/primitives/input-group/input-group-input.svelte.d.ts +1 -1
- package/dist/components/primitives/mode-toggle/mode-toggle.svelte +2 -2
- package/dist/components/primitives/select/select-content.svelte +1 -1
- package/dist/components/primitives/tabs/tabs-list.svelte +1 -1
- package/dist/components/primitives/tabs/tabs-list.svelte.d.ts +3 -3
- package/dist/components/primitives/tabs/tabs-trigger.svelte +1 -1
- package/dist/components/primitives/tabs/tabs-trigger.svelte.d.ts +3 -3
- package/dist/components/primitives/toggle/toggle.svelte +1 -1
- package/dist/components/primitives/toggle/toggle.svelte.d.ts +3 -3
- package/dist/components/viewer/MeshMetadataPanel.svelte +1 -1
- package/dist/components/viewer/SceneManager.svelte +1 -1
- package/dist/components/viewer/Viewer.svelte +3 -35
- package/dist/components/viewer/Viewer.svelte.d.ts +1 -1
- package/dist/components/viewer/ViewerDock.svelte +10 -10
- package/dist/components/viewer/ViewerDock.svelte.d.ts +1 -1
- package/dist/composables/useFooterItem.svelte.d.ts +1 -1
- package/dist/composables/useFooterItem.svelte.js +1 -1
- package/dist/constants.js +1 -2
- package/dist/contexts/hostContext.svelte.d.ts +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/styles/base.css +49 -44
- package/package.json +17 -12
- package/src/lib/components/ErrorScreen.svelte +1 -1
- package/src/lib/components/compute/AppLayout.svelte +3 -3
- package/src/lib/components/compute/ComputeApp.svelte +1 -1
- package/src/lib/components/compute/ComputeMessagesDialog.svelte +4 -4
- package/src/lib/components/compute/SolveMessages.svelte +5 -5
- package/src/lib/components/layout/AppShell.svelte +1 -1
- package/src/lib/components/layout/FooterItemRenderer.svelte +1 -1
- package/src/lib/components/layout/PageContent.svelte +3 -2
- package/src/lib/components/layout/PageFooter.svelte +3 -3
- package/src/lib/components/layout/PageHeader.svelte +2 -2
- package/src/lib/components/layout/SideNav.svelte +1 -1
- package/src/lib/components/preview/ChartOutput.svelte +3 -3
- package/src/lib/components/preview/Group.svelte +3 -3
- package/src/lib/components/preview/HelpButton.svelte +1 -1
- package/src/lib/components/preview/ImageOutput.svelte +3 -3
- package/src/lib/components/preview/InputControl.svelte +12 -12
- package/src/lib/components/preview/OutputDisplay.svelte +4 -4
- package/src/lib/components/preview/TabBar.svelte +2 -2
- package/src/lib/components/preview/TabContent.svelte +7 -7
- package/src/lib/components/preview/TabLayout.svelte +3 -3
- package/src/lib/components/preview/inputs/CheckboxInput.svelte +1 -1
- package/src/lib/components/preview/inputs/ChecklistInput.svelte +2 -2
- package/src/lib/components/preview/inputs/ColorInput.svelte +6 -6
- package/src/lib/components/preview/inputs/DropdownInput.svelte +3 -3
- package/src/lib/components/preview/inputs/FileInput.svelte +14 -9
- 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 +4 -4
- package/src/lib/components/preview/inputs/TextInput.svelte +5 -5
- package/src/lib/components/preview/inputs/TileInput.svelte +5 -3
- package/src/lib/components/primitives/CalculateButton.svelte +1 -1
- package/src/lib/components/primitives/Callout.svelte +1 -1
- package/src/lib/components/primitives/FilterableDropdown.svelte +14 -2
- package/src/lib/components/primitives/IssueList.svelte +1 -1
- package/src/lib/components/primitives/SeverityIcon.svelte +1 -1
- 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 +1 -1
- 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 +1 -1
- package/src/lib/components/primitives/button/button.svelte +1 -1
- 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 +1 -1
- package/src/lib/components/primitives/checkbox/checkbox.svelte +1 -1
- 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 +2 -2
- package/src/lib/components/primitives/command/command-item.svelte +1 -1
- package/src/lib/components/primitives/command/command-link-item.svelte +1 -1
- 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 +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-checkbox-item.svelte +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-content.svelte +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-sub-trigger.svelte +1 -1
- package/src/lib/components/primitives/dialog/dialog-content.svelte +2 -2
- 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/dropdown-menu/dropdown-menu-checkbox-item.svelte +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-content.svelte +1 -1
- 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 +1 -1
- 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 +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-separator.svelte +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte +1 -1
- 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/input/input.svelte +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/src/lib/components/primitives/separator/separator.svelte +1 -1
- package/src/lib/components/primitives/slider/slider.svelte +1 -1
- package/src/lib/components/primitives/spinner/spinner.svelte +1 -1
- package/src/lib/components/primitives/switch/switch.svelte +1 -1
- package/src/lib/components/primitives/tabs/tabs-content.svelte +1 -1
- package/src/lib/components/primitives/tabs/tabs-list.svelte +2 -2
- package/src/lib/components/primitives/tabs/tabs-trigger.svelte +2 -2
- package/src/lib/components/primitives/tabs/tabs.svelte +1 -1
- package/src/lib/components/primitives/textarea/textarea.svelte +1 -1
- package/src/lib/components/primitives/toggle/toggle.svelte +2 -2
- package/src/lib/components/primitives/toggle-group/toggle-group-item.svelte +2 -2
- package/src/lib/components/primitives/toggle-group/toggle-group.svelte +2 -2
- package/src/lib/components/primitives/tooltip/tooltip-content.svelte +1 -1
- package/src/lib/components/viewer/MeshMetadataPanel.svelte +1 -1
- package/src/lib/components/viewer/SceneManager.svelte +1 -1
- package/src/lib/components/viewer/Viewer.svelte +4 -36
- package/src/lib/components/viewer/ViewerDock.svelte +11 -11
- package/src/lib/composables/useFooterItem.svelte.ts +1 -1
- package/src/lib/constants.ts +1 -2
- package/src/lib/contexts/hostContext.svelte.ts +1 -1
- package/src/lib/index.ts +1 -0
- package/src/lib/styles/base.css +49 -44
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
type SceneEntry,
|
|
15
15
|
type SceneOutliner
|
|
16
16
|
} from '@selvajs/visualization/scene';
|
|
17
|
-
import { getLocaleContext } from '
|
|
17
|
+
import { getLocaleContext } from '#lib/i18n/localeContext.svelte.js';
|
|
18
18
|
|
|
19
19
|
const locale = getLocaleContext();
|
|
20
20
|
const t = $derived(locale.messages);
|
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
import SceneManager from './SceneManager.svelte';
|
|
24
24
|
import ViewerDock from './ViewerDock.svelte';
|
|
25
25
|
import MeshMetadataPanel from './MeshMetadataPanel.svelte';
|
|
26
|
-
import * as Resizable from '
|
|
27
|
-
import type { Locale } from '
|
|
28
|
-
import { layerLocaleContext } from '
|
|
29
|
-
import { saveBlob } from '
|
|
26
|
+
import * as Resizable from '#lib/components/primitives/resizable/index.js';
|
|
27
|
+
import type { Locale } from '#lib/i18n/messages.js';
|
|
28
|
+
import { layerLocaleContext } from '#lib/i18n/localeContext.svelte.js';
|
|
29
|
+
import { saveBlob } from '#lib/utils/host-files.js';
|
|
30
30
|
|
|
31
31
|
export interface ViewerConfig {
|
|
32
32
|
showScreenshotButton?: boolean;
|
|
@@ -85,7 +85,6 @@
|
|
|
85
85
|
let {
|
|
86
86
|
meshes,
|
|
87
87
|
isFullscreen = $bindable(false),
|
|
88
|
-
isSolving = false,
|
|
89
88
|
isSlow = false,
|
|
90
89
|
isBlurred = false,
|
|
91
90
|
drawerOpen = false,
|
|
@@ -525,16 +524,6 @@
|
|
|
525
524
|
: 'blur-overlay-inactive'}"
|
|
526
525
|
></div>
|
|
527
526
|
|
|
528
|
-
<!-- The last result stays sharp while the next one solves: blurring it on every
|
|
529
|
-
solve hides the model the user is adjusting. -->
|
|
530
|
-
{#if isSolving}
|
|
531
|
-
<div
|
|
532
|
-
class="inset-x-0 top-0 animate-in fade-in pointer-events-none absolute z-20 h-px overflow-hidden duration-300"
|
|
533
|
-
aria-hidden="true"
|
|
534
|
-
>
|
|
535
|
-
<div class="solve-bar h-full w-1/3 bg-faint-foreground"></div>
|
|
536
|
-
</div>
|
|
537
|
-
{/if}
|
|
538
527
|
{#if isSlow}
|
|
539
528
|
<div
|
|
540
529
|
class="inset-0 animate-in fade-in pointer-events-none absolute z-10 bg-background/25 duration-500"
|
|
@@ -633,27 +622,6 @@
|
|
|
633
622
|
-webkit-tap-highlight-color: transparent;
|
|
634
623
|
}
|
|
635
624
|
|
|
636
|
-
.solve-bar {
|
|
637
|
-
animation: solve-bar 1.2s cubic-bezier(0.65, 0, 0.35, 1) infinite;
|
|
638
|
-
}
|
|
639
|
-
|
|
640
|
-
@keyframes solve-bar {
|
|
641
|
-
from {
|
|
642
|
-
transform: translateX(-100%);
|
|
643
|
-
}
|
|
644
|
-
to {
|
|
645
|
-
transform: translateX(300%);
|
|
646
|
-
}
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
@media (prefers-reduced-motion: reduce) {
|
|
650
|
-
.solve-bar {
|
|
651
|
-
animation: none;
|
|
652
|
-
width: 100%;
|
|
653
|
-
opacity: 0.6;
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
|
|
657
625
|
.blur-overlay {
|
|
658
626
|
pointer-events: none;
|
|
659
627
|
}
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
Cuboid
|
|
17
17
|
} from '@lucide/svelte';
|
|
18
18
|
import type { CameraProjection, Look, ViewPreset } from '@selvajs/visualization/render';
|
|
19
|
-
import * as DropdownMenu from '
|
|
20
|
-
import type { ViewerMessages } from '
|
|
19
|
+
import * as DropdownMenu from '#lib/components/primitives/dropdown-menu/index.js';
|
|
20
|
+
import type { ViewerMessages } from '#lib/i18n/messages.js';
|
|
21
21
|
|
|
22
22
|
interface Props {
|
|
23
23
|
t: ViewerMessages;
|
|
@@ -87,8 +87,8 @@
|
|
|
87
87
|
const touch = new MediaQuery('(pointer: coarse)');
|
|
88
88
|
const reducedMotion = new MediaQuery('(prefers-reduced-motion: reduce)');
|
|
89
89
|
|
|
90
|
-
const COLLAPSED = $derived(touch.current ? { w: 44, h: 44 } : { w:
|
|
91
|
-
const EXPANDED_H = $derived(touch.current ? 54 :
|
|
90
|
+
const COLLAPSED = $derived(touch.current ? { w: 44, h: 44 } : { w: 56, h: 5 });
|
|
91
|
+
const EXPANDED_H = $derived(touch.current ? 54 : 42);
|
|
92
92
|
const PAD = 4;
|
|
93
93
|
|
|
94
94
|
let dockEl: HTMLDivElement | undefined = $state();
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
const containerStyle = $derived.by(() => {
|
|
109
109
|
const bottom = touch.current ? 'max(1rem,env(safe-area-inset-bottom))' : '0.75rem';
|
|
110
110
|
const geometry = wantOpen
|
|
111
|
-
? `width:${rowWidth + PAD * 2 + 2}px;height:${EXPANDED_H}px;border-radius:
|
|
111
|
+
? `width:${rowWidth + PAD * 2 + 2}px;height:${EXPANDED_H}px;border-radius:12px;padding:${PAD}px`
|
|
112
112
|
: `width:${COLLAPSED.w}px;height:${COLLAPSED.h}px;border-radius:${touch.current ? 22 : 99}px;padding:0px`;
|
|
113
113
|
const size = `bottom:${bottom};${geometry}`;
|
|
114
114
|
if (reducedMotion.current) return size;
|
|
@@ -195,7 +195,7 @@
|
|
|
195
195
|
const idx = (id: string) => buttons.indexOf(id);
|
|
196
196
|
|
|
197
197
|
const BTN =
|
|
198
|
-
'relative grid size-
|
|
198
|
+
'relative grid size-8.5 shrink-0 place-items-center rounded-lg text-foreground outline-none transition-colors hover:bg-hover hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring aria-pressed:text-foreground data-[state=open]:bg-selected data-[state=open]:text-foreground pointer-coarse:size-11';
|
|
199
199
|
const DOT =
|
|
200
200
|
'aria-pressed:after:absolute aria-pressed:after:bottom-0.5 aria-pressed:after:size-1 aria-pressed:after:rounded-full aria-pressed:after:bg-primary';
|
|
201
201
|
</script>
|
|
@@ -210,15 +210,15 @@
|
|
|
210
210
|
role="toolbar"
|
|
211
211
|
aria-label={t.toolsMenu}
|
|
212
212
|
tabindex="-1"
|
|
213
|
-
class="
|
|
213
|
+
class="backdrop-blur-md absolute left-1/2 z-50 -translate-x-1/2 overflow-hidden transition-colors {hidden
|
|
214
214
|
? 'pointer-events-none opacity-0'
|
|
215
215
|
: ''} {wantOpen
|
|
216
|
-
? 'bg-
|
|
216
|
+
? 'shadow-md border border-border-strong bg-card/75'
|
|
217
217
|
: touch.current
|
|
218
|
-
? 'cursor-pointer border-border bg-background/90'
|
|
218
|
+
? 'shadow-lg cursor-pointer border border-border bg-background/90'
|
|
219
219
|
: nightOn
|
|
220
|
-
? 'border-white/
|
|
221
|
-
: 'cursor-pointer border-border-strong bg-
|
|
220
|
+
? 'border-white/25 bg-white/35 hover:bg-white/70 cursor-pointer border'
|
|
221
|
+
: 'shadow-sm cursor-pointer border border-border-strong bg-card/90 hover:bg-card'}"
|
|
222
222
|
style={containerStyle}
|
|
223
223
|
onclick={openFromCollapsed}
|
|
224
224
|
onkeydown={(e) => (e.key === 'Escape' ? (engaged = false) : undefined)}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
type FooterStore,
|
|
4
4
|
type FooterItem,
|
|
5
5
|
FOOTER_CONTEXT_KEY
|
|
6
|
-
} from '
|
|
6
|
+
} from '#lib/contexts/footerContext.svelte.js';
|
|
7
7
|
|
|
8
8
|
export type FooterItemConfig<P extends Record<string, unknown> = Record<string, unknown>> = Omit<
|
|
9
9
|
FooterItem<P>,
|
package/src/lib/constants.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
export const APP_DEFAULTS = {
|
|
2
2
|
// File upload limits
|
|
3
3
|
// TEMP (dev): raised 150 MB → 300 MB so large dev file-widget inputs aren't
|
|
4
|
-
// blocked client-side. The server request cap
|
|
5
|
-
// still defaults to 256 MB, and base64 inflates a raw file by ~4/3, so
|
|
4
|
+
// blocked client-side. The server request cap is 256 MB, and base64 inflates a raw file by ~4/3, so
|
|
6
5
|
// anything over ~192 MB is rejected with a 413 after the client accepts it.
|
|
7
6
|
// Revert to 150 before release.
|
|
8
7
|
FILE_UPLOAD: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getContext, setContext } from 'svelte';
|
|
2
2
|
import type { GeometryKind } from '@selvajs/schemas';
|
|
3
|
-
import type { UIHost } from '
|
|
3
|
+
import type { UIHost } from '#lib/schema/host-support.js';
|
|
4
4
|
|
|
5
5
|
// Tells InputControl which host it renders in and how to reach the host's own actions, without
|
|
6
6
|
// threading a prop through every layout layer. Without a provider the host is Selva.
|
package/src/lib/index.ts
CHANGED
|
@@ -13,6 +13,7 @@ export { default as ErrorScreen } from './components/ErrorScreen.svelte';
|
|
|
13
13
|
// Design-system primitives (shadcn-svelte + custom)
|
|
14
14
|
export * from './components/primitives';
|
|
15
15
|
export { default as StateDisplay } from './components/primitives/StateDisplay.svelte';
|
|
16
|
+
export { default as ColorInput } from './components/preview/inputs/ColorInput.svelte';
|
|
16
17
|
|
|
17
18
|
export { default as Viewer } from './components/viewer/Viewer.svelte';
|
|
18
19
|
|
package/src/lib/styles/base.css
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@import '@fontsource-variable/hanken-grotesk';
|
|
2
|
+
|
|
1
3
|
@custom-variant dark (&:where(.dark, .dark *));
|
|
2
4
|
|
|
3
5
|
/* Surfaces, edges and states share one set of names in both modes; each mode only changes the
|
|
@@ -8,40 +10,41 @@
|
|
|
8
10
|
--page-px: 1rem;
|
|
9
11
|
--page-py: 1.75rem;
|
|
10
12
|
/* Canvas, then surface (cards, panels), then raised (rows, menus, popovers). Light can't go
|
|
11
|
-
lighter than white, so raised is white too and lifts with a border and a shadow instead.
|
|
12
|
-
|
|
13
|
+
lighter than white, so raised is white too and lifts with a border and a shadow instead.
|
|
14
|
+
Values follow stock shadcn neutral. */
|
|
15
|
+
--background: oklch(0.985 0 0);
|
|
13
16
|
--card: oklch(1 0 0);
|
|
14
17
|
--raised: oklch(1 0 0);
|
|
15
18
|
/* Recessed fill for trays, table heads, code and skeletons: darker than the surface around it. */
|
|
16
|
-
--muted: oklch(0.
|
|
17
|
-
/* Fill of anything you type into, on a card: the same step as
|
|
18
|
-
(`--input`) carries the boundary.
|
|
19
|
-
--field: var(--
|
|
20
|
-
--foreground: oklch(0.
|
|
21
|
-
--card-foreground: oklch(0.
|
|
22
|
-
--popover-foreground: oklch(0.
|
|
19
|
+
--muted: oklch(0.97 0 0);
|
|
20
|
+
/* Fill of anything you type into, on a card: recessed, the same step as muted, in both modes.
|
|
21
|
+
The edge (`--input`) carries the boundary. */
|
|
22
|
+
--field: var(--muted);
|
|
23
|
+
--foreground: oklch(0.145 0 0);
|
|
24
|
+
--card-foreground: oklch(0.145 0 0);
|
|
25
|
+
--popover-foreground: oklch(0.145 0 0);
|
|
23
26
|
/* 4.5:1 on every surface. */
|
|
24
|
-
--muted-foreground: oklch(0.
|
|
27
|
+
--muted-foreground: oklch(0.5 0 0);
|
|
25
28
|
/* Icons, placeholders, disabled text: 3:1 on every surface. */
|
|
26
29
|
--faint-foreground: oklch(0.6 0 0);
|
|
27
30
|
/* State overlays, laid over whatever surface is underneath. */
|
|
28
|
-
--hover: oklch(0 0 0 /
|
|
29
|
-
--selected: oklch(0 0 0 /
|
|
31
|
+
--hover: oklch(0 0 0 / 4%);
|
|
32
|
+
--selected: oklch(0 0 0 / 8%);
|
|
30
33
|
/* Rest fill of a neutral filled control; its hover is `selected`. */
|
|
31
|
-
--secondary: oklch(0 0 0
|
|
32
|
-
--secondary-foreground: oklch(0.
|
|
34
|
+
--secondary: oklch(0.97 0 0);
|
|
35
|
+
--secondary-foreground: oklch(0.205 0 0);
|
|
33
36
|
/* Outlines and separators. */
|
|
34
|
-
--border: oklch(0 0 0 /
|
|
37
|
+
--border: oklch(0 0 0 / 8%);
|
|
35
38
|
/* Popovers, outline buttons, dashed drop zones. */
|
|
36
|
-
--border-strong: oklch(0 0 0 /
|
|
37
|
-
/* Edge of anything you type into or toggle, slider tracks included
|
|
38
|
-
|
|
39
|
-
--input: oklch(0 0 0 /
|
|
40
|
-
--ring: oklch(0.
|
|
41
|
-
--elevation-raised: 0 1px 2px oklch(0 0 0 /
|
|
42
|
-
--elevation-popover: 0 8px 24px oklch(0 0 0 /
|
|
39
|
+
--border-strong: oklch(0 0 0 / 14%);
|
|
40
|
+
/* Edge of anything you type into or toggle, slider tracks included. Softer than the 3:1 WCAG
|
|
41
|
+
boundary minimum in both modes: the recessed field fill carries the rest of the boundary. */
|
|
42
|
+
--input: oklch(0 0 0 / 10%);
|
|
43
|
+
--ring: oklch(0.708 0 0);
|
|
44
|
+
--elevation-raised: 0 1px 2px oklch(0 0 0 / 5%);
|
|
45
|
+
--elevation-popover: 0 8px 24px oklch(0 0 0 / 10%);
|
|
43
46
|
/* 4.5:1 as text on a card and under its foreground; 3:1 as a fill on every surface. */
|
|
44
|
-
--primary:
|
|
47
|
+
--primary: oklch(0.205 0 0);
|
|
45
48
|
--primary-foreground: oklch(0.985 0 0);
|
|
46
49
|
--destructive: #c9302d;
|
|
47
50
|
--destructive-foreground: #fbfbfb;
|
|
@@ -62,28 +65,28 @@
|
|
|
62
65
|
}
|
|
63
66
|
|
|
64
67
|
.dark {
|
|
65
|
-
--background: oklch(0.
|
|
66
|
-
--card: oklch(0.
|
|
67
|
-
--raised: oklch(0.
|
|
68
|
-
--muted: oklch(0.
|
|
69
|
-
--foreground: oklch(0.
|
|
70
|
-
--card-foreground: oklch(0.
|
|
71
|
-
--popover-foreground: oklch(0.
|
|
72
|
-
--muted-foreground: oklch(0.
|
|
73
|
-
--faint-foreground: oklch(0.
|
|
68
|
+
--background: oklch(0.145 0 0);
|
|
69
|
+
--card: oklch(0.205 0 0);
|
|
70
|
+
--raised: oklch(0.24 0 0);
|
|
71
|
+
--muted: oklch(0.269 0 0);
|
|
72
|
+
--foreground: oklch(0.985 0 0);
|
|
73
|
+
--card-foreground: oklch(0.985 0 0);
|
|
74
|
+
--popover-foreground: oklch(0.985 0 0);
|
|
75
|
+
--muted-foreground: oklch(0.708 0 0);
|
|
76
|
+
--faint-foreground: oklch(0.556 0 0);
|
|
74
77
|
--hover: oklch(1 0 0 / 6%);
|
|
75
|
-
--selected: oklch(1 0 0 /
|
|
76
|
-
--secondary: oklch(
|
|
77
|
-
--secondary-foreground: oklch(0.
|
|
78
|
-
--border: oklch(1 0 0 /
|
|
79
|
-
--border-strong: oklch(1 0 0 /
|
|
80
|
-
--input: oklch(1 0 0 /
|
|
81
|
-
--ring: oklch(0.
|
|
82
|
-
/* Shadows barely show on a dark canvas, so raised things
|
|
83
|
-
--elevation-raised:
|
|
84
|
-
--elevation-popover: 0 8px 24px oklch(0 0 0 / 50%)
|
|
85
|
-
--primary:
|
|
86
|
-
--primary-foreground: oklch(0.
|
|
78
|
+
--selected: oklch(1 0 0 / 10%);
|
|
79
|
+
--secondary: oklch(0.269 0 0);
|
|
80
|
+
--secondary-foreground: oklch(0.985 0 0);
|
|
81
|
+
--border: oklch(1 0 0 / 10%);
|
|
82
|
+
--border-strong: oklch(1 0 0 / 18%);
|
|
83
|
+
--input: oklch(1 0 0 / 15%);
|
|
84
|
+
--ring: oklch(0.556 0 0);
|
|
85
|
+
/* Shadows barely show on a dark canvas, so raised things lean on the border instead. */
|
|
86
|
+
--elevation-raised: none;
|
|
87
|
+
--elevation-popover: 0 8px 24px oklch(0 0 0 / 50%);
|
|
88
|
+
--primary: oklch(0.922 0 0);
|
|
89
|
+
--primary-foreground: oklch(0.205 0 0);
|
|
87
90
|
/* White text can't reach 4.5:1 on a red light enough to also be text on the dark card. */
|
|
88
91
|
--destructive: oklch(0.7 0.17 22);
|
|
89
92
|
--destructive-foreground: oklch(0.18 0 0);
|
|
@@ -151,6 +154,8 @@
|
|
|
151
154
|
/* Design tokens beyond Tailwind's defaults. Reach for these before an arbitrary value: the
|
|
152
155
|
design-system lint rejects `text-[10px]`, `max-h-[85dvh]` and the like. */
|
|
153
156
|
@theme {
|
|
157
|
+
/* Hanken Grotesk (OFL), self-hosted via Fontsource: the plugin UI runs offline from the .gha. */
|
|
158
|
+
--font-sans: 'Hanken Grotesk Variable', ui-sans-serif, system-ui, sans-serif;
|
|
154
159
|
/* Type tags, counters and other dense labels. */
|
|
155
160
|
--text-2xs: 0.625rem;
|
|
156
161
|
--text-2xs--line-height: calc(0.875 / 0.625);
|