@selvajs/ui 6.6.0-beta.15 → 6.6.0-beta.16
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/compute/AppLayout.svelte +5 -3
- package/dist/components/compute/CollapsedPanelStrip.svelte +1 -1
- package/dist/components/compute/ParameterPresetManager.svelte +1 -1
- package/dist/components/compute/SolveMessages.svelte +2 -2
- package/dist/components/layout/FooterItemRenderer.svelte +1 -1
- package/dist/components/layout/PageFooter.svelte +2 -2
- package/dist/components/layout/PageHeader.svelte +1 -1
- package/dist/components/layout/SideNav.svelte +3 -3
- package/dist/components/layout/SubNav.svelte +2 -2
- package/dist/components/preview/ChartOutput.svelte +3 -3
- package/dist/components/preview/Group.svelte +7 -7
- package/dist/components/preview/ImageOutput.svelte +6 -6
- package/dist/components/preview/InputControl.svelte +1 -0
- package/dist/components/preview/OutputDisplay.svelte +8 -6
- package/dist/components/preview/TabBar.svelte +6 -4
- package/dist/components/preview/TabBar.svelte.d.ts +2 -0
- package/dist/components/preview/TabContent.svelte +1 -1
- package/dist/components/preview/TabLayout.svelte +3 -4
- package/dist/components/preview/inputs/ChecklistInput.svelte +3 -3
- 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/FileInput.svelte +3 -3
- package/dist/components/preview/inputs/SegmentedInput.svelte +2 -1
- package/dist/components/preview/inputs/TileInput.svelte +1 -1
- package/dist/components/primitives/CalculateButton.svelte +2 -2
- package/dist/components/primitives/Callout.svelte +7 -5
- package/dist/components/primitives/Callout.svelte.d.ts +4 -4
- package/dist/components/primitives/DataTable.svelte +1 -1
- package/dist/components/primitives/ImageUploadField.svelte +1 -1
- 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 +6 -7
- package/dist/components/primitives/button/button.svelte.d.ts +18 -18
- 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 +2 -2
- 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.svelte +1 -1
- 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 +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/textarea/textarea.svelte +1 -1
- package/dist/components/primitives/toggle/toggle.svelte +6 -3
- package/dist/components/primitives/toggle/toggle.svelte.d.ts +10 -7
- 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 +1 -1
- package/dist/components/viewer/SceneManager.svelte +19 -19
- package/dist/components/viewer/Viewer.svelte +68 -157
- package/dist/components/viewer/ViewerDock.svelte +404 -0
- package/dist/components/viewer/ViewerDock.svelte.d.ts +42 -0
- package/dist/i18n/messages.d.ts +11 -0
- package/dist/i18n/messages.js +18 -0
- package/dist/styles/base.css +81 -80
- package/dist/utils/color-space.d.ts +21 -0
- package/dist/utils/color-space.js +90 -0
- package/package.json +9 -10
- package/src/lib/components/compute/AppLayout.svelte +5 -3
- package/src/lib/components/compute/CollapsedPanelStrip.svelte +1 -1
- package/src/lib/components/compute/ParameterPresetManager.svelte +1 -1
- package/src/lib/components/compute/SolveMessages.svelte +2 -2
- package/src/lib/components/layout/FooterItemRenderer.svelte +1 -1
- package/src/lib/components/layout/PageFooter.svelte +2 -2
- package/src/lib/components/layout/PageHeader.svelte +1 -1
- package/src/lib/components/layout/SideNav.svelte +3 -3
- package/src/lib/components/layout/SubNav.svelte +2 -2
- package/src/lib/components/preview/ChartOutput.svelte +3 -3
- package/src/lib/components/preview/Group.svelte +7 -7
- package/src/lib/components/preview/ImageOutput.svelte +6 -6
- package/src/lib/components/preview/InputControl.svelte +1 -0
- package/src/lib/components/preview/OutputDisplay.svelte +8 -6
- package/src/lib/components/preview/TabBar.svelte +6 -4
- package/src/lib/components/preview/TabContent.svelte +1 -1
- package/src/lib/components/preview/TabLayout.svelte +3 -4
- package/src/lib/components/preview/inputs/ChecklistInput.svelte +3 -3
- package/src/lib/components/preview/inputs/ColorInput.svelte +356 -14
- package/src/lib/components/preview/inputs/FileInput.svelte +3 -3
- package/src/lib/components/preview/inputs/SegmentedInput.svelte +2 -1
- package/src/lib/components/preview/inputs/TileInput.svelte +1 -1
- package/src/lib/components/primitives/CalculateButton.svelte +2 -2
- package/src/lib/components/primitives/Callout.svelte +7 -5
- package/src/lib/components/primitives/DataTable.svelte +1 -1
- package/src/lib/components/primitives/ImageUploadField.svelte +1 -1
- package/src/lib/components/primitives/alert-dialog/alert-dialog-content.svelte +1 -1
- package/src/lib/components/primitives/badge/badge.svelte +2 -2
- package/src/lib/components/primitives/button/button.svelte +6 -7
- 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-input.svelte +1 -1
- 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.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-item.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-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/drawer/Drawer.svelte +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte +31 -11
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-content.svelte +5 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-item.svelte +4 -2
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-radio-item.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/index.ts +1 -1
- package/src/lib/components/primitives/input/input.svelte +2 -2
- package/src/lib/components/primitives/input-group/input-group.svelte +1 -1
- package/src/lib/components/primitives/popover/popover-content.svelte +1 -1
- package/src/lib/components/primitives/resizable/resizable-handle.svelte +2 -2
- package/src/lib/components/primitives/search/search.svelte +1 -1
- package/src/lib/components/primitives/select/select-content.svelte +1 -1
- package/src/lib/components/primitives/select/select-item.svelte +1 -1
- package/src/lib/components/primitives/select/select-trigger.svelte +1 -1
- package/src/lib/components/primitives/slider/slider.svelte +1 -1
- package/src/lib/components/primitives/switch/switch.svelte +1 -1
- package/src/lib/components/primitives/tabs/tabs-list.svelte +1 -1
- package/src/lib/components/primitives/tabs/tabs-trigger.svelte +1 -1
- package/src/lib/components/primitives/textarea/textarea.svelte +1 -1
- package/src/lib/components/primitives/toggle/toggle.svelte +6 -3
- package/src/lib/components/primitives/toggle-group/toggle-group-item.svelte +1 -1
- package/src/lib/components/primitives/toggle-group/toggle-group.svelte +1 -1
- 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 +1 -1
- package/src/lib/components/viewer/SceneManager.svelte +19 -19
- package/src/lib/components/viewer/Viewer.svelte +68 -157
- package/src/lib/components/viewer/ViewerDock.svelte +404 -0
- package/src/lib/i18n/messages.ts +29 -0
- package/src/lib/styles/base.css +81 -80
- 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
|
@@ -15,30 +15,15 @@
|
|
|
15
15
|
type Grid,
|
|
16
16
|
type ThreeViewer
|
|
17
17
|
} from '@selvajs/visualization/render';
|
|
18
|
-
import {
|
|
19
|
-
Maximize,
|
|
20
|
-
Minimize,
|
|
21
|
-
Camera,
|
|
22
|
-
Layers,
|
|
23
|
-
Settings2,
|
|
24
|
-
Box,
|
|
25
|
-
Square,
|
|
26
|
-
Frame,
|
|
27
|
-
Ruler,
|
|
28
|
-
Grid3x3,
|
|
29
|
-
Palette,
|
|
30
|
-
Spline
|
|
31
|
-
} from '@lucide/svelte';
|
|
32
18
|
import { SvelteSet } from 'svelte/reactivity';
|
|
33
19
|
import type * as THREE from 'three';
|
|
34
20
|
import type { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
|
|
35
21
|
import { createSceneOutliner, type SceneOutliner } from '@selvajs/visualization/scene';
|
|
36
22
|
import { clearGeometryCache } from '@selvajs/visualization/parse';
|
|
37
23
|
import SceneManager from './SceneManager.svelte';
|
|
24
|
+
import ViewerDock from './ViewerDock.svelte';
|
|
38
25
|
import MeshMetadataPanel from './MeshMetadataPanel.svelte';
|
|
39
26
|
import * as Resizable from '../primitives/resizable/index.js';
|
|
40
|
-
import * as DropdownMenu from '../primitives/dropdown-menu/index.js';
|
|
41
|
-
import { Button } from '../primitives/button/index.js';
|
|
42
27
|
import type { Locale } from '../../i18n/messages';
|
|
43
28
|
import { layerLocaleContext } from '../../i18n/localeContext.svelte';
|
|
44
29
|
import { saveBlob } from '../../utils/host-files';
|
|
@@ -174,12 +159,16 @@
|
|
|
174
159
|
wireframe: t.lookWireframe,
|
|
175
160
|
night: t.lookNight
|
|
176
161
|
});
|
|
162
|
+
// Night has its own toggle, so it stays out of the radio list.
|
|
177
163
|
const styleOptions = $derived<{ look: Look; label: string }[]>(
|
|
178
|
-
LOOKS.map((look) => ({
|
|
164
|
+
LOOKS.filter((look) => look !== 'night').map((look) => ({
|
|
179
165
|
look,
|
|
180
166
|
label: lookLabels[look] ?? look.charAt(0).toUpperCase() + look.slice(1)
|
|
181
167
|
}))
|
|
182
168
|
);
|
|
169
|
+
const nightOn = $derived(renderStyle === 'night');
|
|
170
|
+
// What the night toggle returns to.
|
|
171
|
+
let dayLook: Look = $state(openingLook === 'night' ? defaultViewerConfig.look : openingLook);
|
|
183
172
|
|
|
184
173
|
const VIEW_PRESETS: { preset: ViewPreset; label: () => string }[] = [
|
|
185
174
|
{ preset: 'top', label: () => t.viewTop },
|
|
@@ -298,6 +287,7 @@
|
|
|
298
287
|
if (!setLook || look === renderStyle) return;
|
|
299
288
|
const wasLineDrawing = LOOK_PRESETS[renderStyle].requiresEdges === true;
|
|
300
289
|
renderStyle = look;
|
|
290
|
+
if (look !== 'night') dayLook = look;
|
|
301
291
|
setLook(look);
|
|
302
292
|
|
|
303
293
|
// A look never drives the overlay itself; honouring `requiresEdges` is the host's call. Without
|
|
@@ -363,6 +353,10 @@
|
|
|
363
353
|
else clearEdges?.(scene);
|
|
364
354
|
}
|
|
365
355
|
|
|
356
|
+
function toggleNight() {
|
|
357
|
+
setRenderStyle(nightOn ? dayLook : 'night');
|
|
358
|
+
}
|
|
359
|
+
|
|
366
360
|
function toggleEdges() {
|
|
367
361
|
edgesVisible = !edgesVisible;
|
|
368
362
|
// Toggling by hand inside lineart overrides what that look forced, so the pre-look value is
|
|
@@ -448,6 +442,27 @@
|
|
|
448
442
|
isFullscreen = !isFullscreen;
|
|
449
443
|
}
|
|
450
444
|
|
|
445
|
+
// Single letters; F (fit) is handled by the canvas itself. Held back while typing, e.g. in the
|
|
446
|
+
// scene manager's search box.
|
|
447
|
+
const SHORTCUTS: Record<string, () => void> = {
|
|
448
|
+
o: toggleProjection,
|
|
449
|
+
m: toggleMeasure,
|
|
450
|
+
g: toggleGrid,
|
|
451
|
+
n: toggleNight,
|
|
452
|
+
e: toggleEdges,
|
|
453
|
+
s: () => (sceneManagerOpen = !sceneManagerOpen)
|
|
454
|
+
};
|
|
455
|
+
|
|
456
|
+
function handleShortcut(event: KeyboardEvent) {
|
|
457
|
+
if (event.ctrlKey || event.metaKey || event.altKey || event.repeat) return;
|
|
458
|
+
const target = event.target as HTMLElement;
|
|
459
|
+
if (target.closest('input, textarea, select, [contenteditable]')) return;
|
|
460
|
+
const action = SHORTCUTS[event.key.toLowerCase()];
|
|
461
|
+
if (!action) return;
|
|
462
|
+
event.preventDefault();
|
|
463
|
+
action();
|
|
464
|
+
}
|
|
465
|
+
|
|
451
466
|
function hasUsefulMetadata(metadata: Record<string, any>): boolean {
|
|
452
467
|
if (!metadata) return false;
|
|
453
468
|
|
|
@@ -478,10 +493,13 @@
|
|
|
478
493
|
}
|
|
479
494
|
</script>
|
|
480
495
|
|
|
496
|
+
<!-- Key events bubble up from the focused canvas or any control inside; the div itself is not interactive. -->
|
|
497
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
481
498
|
<div
|
|
482
499
|
class="min-h-64 sm:min-h-96 lg:min-h-125 relative h-full flex-1 border {isFullscreen
|
|
483
500
|
? 'fullscreen-viewer'
|
|
484
501
|
: 'overflow-hidden rounded-lg'}"
|
|
502
|
+
onkeydown={handleShortcut}
|
|
485
503
|
>
|
|
486
504
|
<Resizable.PaneGroup direction="horizontal" class="h-full w-full">
|
|
487
505
|
<!-- `defaultSize` must sum to 100 across the live panes. Panes register a frame before the
|
|
@@ -495,7 +513,7 @@
|
|
|
495
513
|
the DOM, so this is the only observable proof a solve's geometry decoded and
|
|
496
514
|
rendered; e2e asserts on it. -->
|
|
497
515
|
<canvas
|
|
498
|
-
class="viewer-canvas block h-full w-full select-none"
|
|
516
|
+
class="viewer-canvas block h-full w-full outline-none select-none"
|
|
499
517
|
data-testid="viewer-canvas"
|
|
500
518
|
data-mesh-count={meshes.length}
|
|
501
519
|
bind:this={canvas}
|
|
@@ -511,10 +529,10 @@
|
|
|
511
529
|
solve hides the model the user is adjusting. -->
|
|
512
530
|
{#if isSolving}
|
|
513
531
|
<div
|
|
514
|
-
class="inset-x-0 top-0
|
|
532
|
+
class="inset-x-0 top-0 animate-in fade-in pointer-events-none absolute z-20 h-px overflow-hidden duration-300"
|
|
515
533
|
aria-hidden="true"
|
|
516
534
|
>
|
|
517
|
-
<div class="solve-bar h-full w-1/3 bg-
|
|
535
|
+
<div class="solve-bar h-full w-1/3 bg-faint-foreground"></div>
|
|
518
536
|
</div>
|
|
519
537
|
{/if}
|
|
520
538
|
{#if isSlow}
|
|
@@ -548,143 +566,36 @@
|
|
|
548
566
|
{/if}
|
|
549
567
|
|
|
550
568
|
{#if config.showToolsMenu}
|
|
551
|
-
<
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
<DropdownMenu.Item onSelect={() => fitToView?.()}>
|
|
582
|
-
<Frame />
|
|
583
|
-
{t.fitToView}
|
|
584
|
-
</DropdownMenu.Item>
|
|
585
|
-
|
|
586
|
-
<DropdownMenu.Sub>
|
|
587
|
-
<DropdownMenu.SubTrigger>
|
|
588
|
-
<Box />
|
|
589
|
-
{t.views}
|
|
590
|
-
</DropdownMenu.SubTrigger>
|
|
591
|
-
<DropdownMenu.SubContent class="z-10001">
|
|
592
|
-
{#each VIEW_PRESETS as { preset, label } (preset)}
|
|
593
|
-
<DropdownMenu.Item onSelect={() => setView(preset)}
|
|
594
|
-
>{label()}</DropdownMenu.Item
|
|
595
|
-
>
|
|
596
|
-
{/each}
|
|
597
|
-
</DropdownMenu.SubContent>
|
|
598
|
-
</DropdownMenu.Sub>
|
|
599
|
-
|
|
600
|
-
{#if config.showDisplayMenu}
|
|
601
|
-
<DropdownMenu.Sub>
|
|
602
|
-
<DropdownMenu.SubTrigger>
|
|
603
|
-
<Palette />
|
|
604
|
-
{t.display}
|
|
605
|
-
</DropdownMenu.SubTrigger>
|
|
606
|
-
<DropdownMenu.SubContent class="min-w-40 z-10001">
|
|
607
|
-
<DropdownMenu.RadioGroup
|
|
608
|
-
value={renderStyle}
|
|
609
|
-
onValueChange={(look) => setRenderStyle(look as typeof renderStyle)}
|
|
610
|
-
>
|
|
611
|
-
{#each styleOptions as { look, label } (look)}
|
|
612
|
-
<DropdownMenu.RadioItem value={look} closeOnSelect={false}>
|
|
613
|
-
{label}
|
|
614
|
-
</DropdownMenu.RadioItem>
|
|
615
|
-
{/each}
|
|
616
|
-
</DropdownMenu.RadioGroup>
|
|
617
|
-
<DropdownMenu.Separator />
|
|
618
|
-
<DropdownMenu.CheckboxItem
|
|
619
|
-
checked={edgesVisible}
|
|
620
|
-
onCheckedChange={toggleEdges}
|
|
621
|
-
>
|
|
622
|
-
<Spline />
|
|
623
|
-
{t.edges}
|
|
624
|
-
</DropdownMenu.CheckboxItem>
|
|
625
|
-
</DropdownMenu.SubContent>
|
|
626
|
-
</DropdownMenu.Sub>
|
|
627
|
-
{/if}
|
|
628
|
-
|
|
629
|
-
<DropdownMenu.CheckboxItem checked={measureActive} onCheckedChange={toggleMeasure}>
|
|
630
|
-
<Ruler />
|
|
631
|
-
{t.measure}
|
|
632
|
-
</DropdownMenu.CheckboxItem>
|
|
633
|
-
|
|
634
|
-
{#if config.showGridToggle}
|
|
635
|
-
<DropdownMenu.CheckboxItem checked={gridVisible} onCheckedChange={toggleGrid}>
|
|
636
|
-
<Grid3x3 />
|
|
637
|
-
{t.grid}
|
|
638
|
-
</DropdownMenu.CheckboxItem>
|
|
639
|
-
{/if}
|
|
640
|
-
|
|
641
|
-
{#if config.showSceneManager || config.showScreenshotButton || config.showFullscreenButton}
|
|
642
|
-
<DropdownMenu.Separator />
|
|
643
|
-
{/if}
|
|
644
|
-
|
|
645
|
-
{#if config.showSceneManager}
|
|
646
|
-
<DropdownMenu.CheckboxItem
|
|
647
|
-
checked={sceneManagerOpen}
|
|
648
|
-
onCheckedChange={() => (sceneManagerOpen = !sceneManagerOpen)}
|
|
649
|
-
>
|
|
650
|
-
<Layers />
|
|
651
|
-
{t.sceneManager}
|
|
652
|
-
</DropdownMenu.CheckboxItem>
|
|
653
|
-
{/if}
|
|
654
|
-
|
|
655
|
-
{#if config.showScreenshotButton}
|
|
656
|
-
<DropdownMenu.Item onSelect={downloadScreenshot}>
|
|
657
|
-
<Camera />
|
|
658
|
-
{t.screenshot}
|
|
659
|
-
</DropdownMenu.Item>
|
|
660
|
-
{/if}
|
|
661
|
-
|
|
662
|
-
{#if config.showFullscreenButton}
|
|
663
|
-
<DropdownMenu.Item onSelect={toggleFullscreen}>
|
|
664
|
-
{#if isFullscreen}
|
|
665
|
-
<Minimize />
|
|
666
|
-
{t.exitFullscreen}
|
|
667
|
-
{:else}
|
|
668
|
-
<Maximize />
|
|
669
|
-
{t.fullscreen}
|
|
670
|
-
{/if}
|
|
671
|
-
</DropdownMenu.Item>
|
|
672
|
-
{/if}
|
|
673
|
-
</DropdownMenu.Content>
|
|
674
|
-
</DropdownMenu.Root>
|
|
675
|
-
<!-- Touch has no F key, and fit-to-view is the way back from a framed part. -->
|
|
676
|
-
<div class="hidden pointer-coarse:block">
|
|
677
|
-
<Button
|
|
678
|
-
variant="overlay"
|
|
679
|
-
size="icon-lg"
|
|
680
|
-
title={t.fitToView}
|
|
681
|
-
aria-label={t.fitToView}
|
|
682
|
-
onclick={() => fitToView?.()}
|
|
683
|
-
>
|
|
684
|
-
<Frame />
|
|
685
|
-
</Button>
|
|
686
|
-
</div>
|
|
687
|
-
</div>
|
|
569
|
+
<ViewerDock
|
|
570
|
+
{t}
|
|
571
|
+
hidden={hideButton}
|
|
572
|
+
showDisplay={config.showDisplayMenu}
|
|
573
|
+
showGrid={config.showGridToggle}
|
|
574
|
+
showSceneManager={config.showSceneManager}
|
|
575
|
+
showScreenshot={config.showScreenshotButton}
|
|
576
|
+
showFullscreen={config.showFullscreenButton}
|
|
577
|
+
{styleOptions}
|
|
578
|
+
viewPresets={VIEW_PRESETS.map(({ preset, label }) => ({ preset, label: label() }))}
|
|
579
|
+
{renderStyle}
|
|
580
|
+
{nightOn}
|
|
581
|
+
{edgesVisible}
|
|
582
|
+
{measureActive}
|
|
583
|
+
{gridVisible}
|
|
584
|
+
{sceneManagerOpen}
|
|
585
|
+
{projection}
|
|
586
|
+
{isFullscreen}
|
|
587
|
+
onSetLook={setRenderStyle}
|
|
588
|
+
onToggleNight={toggleNight}
|
|
589
|
+
onToggleEdges={toggleEdges}
|
|
590
|
+
onToggleMeasure={toggleMeasure}
|
|
591
|
+
onToggleGrid={toggleGrid}
|
|
592
|
+
onToggleSceneManager={() => (sceneManagerOpen = !sceneManagerOpen)}
|
|
593
|
+
onToggleProjection={toggleProjection}
|
|
594
|
+
onSetView={setView}
|
|
595
|
+
onFit={() => fitToView?.()}
|
|
596
|
+
onScreenshot={downloadScreenshot}
|
|
597
|
+
onToggleFullscreen={toggleFullscreen}
|
|
598
|
+
/>
|
|
688
599
|
{/if}
|
|
689
600
|
</div>
|
|
690
601
|
</Resizable.Pane>
|