diff --git a/src/components/DockTabs.svelte b/src/components/DockTabs.svelte
index f3ad525c4..89a84e36d 100644
--- a/src/components/DockTabs.svelte
+++ b/src/components/DockTabs.svelte
@@ -1,3 +1,8 @@
+
+
+
+
+
+
+ {#each rows as row (row.key)}
+ -
+
+
+ {row.title}
+ {row.tooltip}
+
+ setDockViewShown(row.key, on)}
+ />
+
+ {/each}
+
+
+
+
+
diff --git a/src/components/Flow.svelte b/src/components/Flow.svelte
index 0d72d5252..dd5dab6b7 100644
--- a/src/components/Flow.svelte
+++ b/src/components/Flow.svelte
@@ -201,13 +201,6 @@
onpointerup={endResize}
>
-
diff --git a/src/components/editors/AnimationWindow.svelte b/src/components/editors/AnimationWindow.svelte
index 60aa95d86..f6edbccea 100644
--- a/src/components/editors/AnimationWindow.svelte
+++ b/src/components/editors/AnimationWindow.svelte
@@ -40,6 +40,7 @@
import DockTabs from '../DockTabs.svelte';
import WindowChrome from '../ui/WindowChrome.svelte';
import ScrollStrip from '../ui/ScrollStrip.svelte';
+ import { fullName } from '$lib/ui/fullName.js';
import Segmented from '../ui/Segmented.svelte';
import { createGesture } from '$lib/modalGrab';
// W5: the BINDING for this pane's grab key lives in the shortcut registry (an
@@ -2669,14 +2670,22 @@
onpointerup={endResize}
>
-
- Animation
- {target ? target.name || 'object' : 'no selection'}
- {#if compact && target}{@render paneSwitch()}{/if}
-
-
-
-
+
+ {#if compact && target}
+
+ Animation
+ {target.name || 'object'}
+
+ {@render paneSwitch()}
+ {:else}
+
+ Animation
+ {target ? target.name || 'object' : 'no selection'}
+
+ {/if}
{@render body()}
@@ -2707,14 +2716,14 @@
>
{#snippet heading()}
Animation
- {target ? target.name || 'object' : 'no selection'}
- {#if compact && target}{@render paneSwitch()}{/if}
+ {target ? target.name || 'object' : 'no selection'}
{/snippet}
{#snippet actions()}
{/snippet}
+ {#if compact && target}{@render paneSwitch()}
{/if}
{@render body()}
registerDockCloser('code', requestCloseWorkspace));
async function closeSavingAll() {
const failed = await saveAllCodeTabs();
if (failed.length) {
@@ -762,8 +766,6 @@
{@render openGraph()}
{@render sideToggle('right')}
-
-
{@render main()}
diff --git a/src/components/editors/Explorer.svelte b/src/components/editors/Explorer.svelte
index 27a2467cb..94cc4981f 100644
--- a/src/components/editors/Explorer.svelte
+++ b/src/components/editors/Explorer.svelte
@@ -8328,13 +8328,6 @@
{@render logChip()}
{@render storageChip()}
{@render identityChip()}
-
{@render content()}
diff --git a/src/components/editors/FlowCode.svelte b/src/components/editors/FlowCode.svelte
index 1dfcc8bed..696eb9cff 100644
--- a/src/components/editors/FlowCode.svelte
+++ b/src/components/editors/FlowCode.svelte
@@ -232,8 +232,6 @@
Flow Code
{@render editorActions()}
-
-
{@render body()}
diff --git a/src/components/editors/HudEditor.svelte b/src/components/editors/HudEditor.svelte
index 106374edc..58778f22f 100644
--- a/src/components/editors/HudEditor.svelte
+++ b/src/components/editors/HudEditor.svelte
@@ -1454,8 +1454,6 @@
HUD editor
-
-
{@render body()}
diff --git a/src/components/editors/Profiler.svelte b/src/components/editors/Profiler.svelte
index 4eaf64578..2cf74dd49 100644
--- a/src/components/editors/Profiler.svelte
+++ b/src/components/editors/Profiler.svelte
@@ -827,16 +827,6 @@
{@render controls()}
-
-
{@render body()}
diff --git a/src/components/editors/ShaderEditor.svelte b/src/components/editors/ShaderEditor.svelte
index bec319577..0d7f7ebf7 100644
--- a/src/components/editors/ShaderEditor.svelte
+++ b/src/components/editors/ShaderEditor.svelte
@@ -693,12 +693,15 @@
{/if}
-
+
+ {#if !docked}
+
+ {/if}
{/snippet}
{#snippet paletteContent(/** @type {number} */ paneH, /** @type {(key: string) => void} */ pick)}
@@ -1039,12 +1042,6 @@
{scopeLabel}
-
{@render editorActions()}
diff --git a/src/components/editors/UvEditor.svelte b/src/components/editors/UvEditor.svelte
index 1d14245c6..41a5b2c18 100644
--- a/src/components/editors/UvEditor.svelte
+++ b/src/components/editors/UvEditor.svelte
@@ -2021,8 +2021,6 @@
UV editor
-
-
{@render body()}
diff --git a/src/components/menu/LayoutsMenu.svelte b/src/components/menu/LayoutsMenu.svelte
index e6613052d..0b27c0751 100644
--- a/src/components/menu/LayoutsMenu.svelte
+++ b/src/components/menu/LayoutsMenu.svelte
@@ -1,71 +1,51 @@
+
{
- if ($layoutsMenuOpen && e.key === 'Escape') layoutsMenuOpen.set(false);
+ onkeydowncapture={(e) => {
+ if (!$layoutsMenuOpen || e.key !== 'Escape') return;
+ if (/** @type {HTMLElement} */ (e.target)?.classList?.contains('wl-rename')) return;
+ close();
}}
/>
-{#if $layoutsMenuOpen}
-
-{/if}
+
diff --git a/src/components/menu/TabStrips.svelte b/src/components/menu/TabStrips.svelte
index 8ca4c2e41..9cf5d3ab9 100644
--- a/src/components/menu/TabStrips.svelte
+++ b/src/components/menu/TabStrips.svelte
@@ -8,7 +8,8 @@
import { focusTick, raiseWindowNode } from '$lib/windowFocus';
import ContextMenu from '../ContextMenu.svelte';
import Icon from '../ui/Icon.svelte';
- import { DOCK_ICONS } from '$lib/bottomDock';
+ import { DOCK_ICONS, DOCK_FAMILY } from '$lib/bottomDock';
+ import { dockAllOf } from '$lib/dockMenu';
// 38 NOTES-38 #23: the view icon before each tab's name — the dock's icons plus the
// windows that only ever float
@@ -122,6 +123,20 @@
{/each}
+
+ {#if group.members.some((/** @type {string} */ k) => DOCK_FAMILY.includes(k))}
+
+ {/if}