implement editor-above-Claude split in workspace

Editor opens above Claude via Ctrl+E with a draggable divider at
35% height (clamped 15-70%). Ctrl+W or Escape closes it. The
workspace no longer renders a tab bar — Claude is the always-visible
primary surface per D-047/D-048; the editor is a split overlay
per D-049, not a tab. The _WorkspaceSlot separates editor from
primary content tabs and renders them as a vertical split when the
editor is open.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-22 23:01:02 +02:00
co-authored by Claude Opus 4.6
parent 3f19eca059
commit 43901bc387
5 changed files with 207 additions and 0 deletions
@@ -100,5 +100,42 @@ void main() {
a.applyPreset(classicPreset());
expect(a.isInFocusMode, false);
});
test('openEditor sets editorOpen', () {
final a = LayoutArrangement()..applyPreset(classicPreset());
expect(a.editorOpen, false);
a.openEditor();
expect(a.editorOpen, true);
});
test('closeEditor clears editorOpen', () {
final a = LayoutArrangement()..applyPreset(classicPreset());
a.openEditor();
a.closeEditor();
expect(a.editorOpen, false);
});
test('toggleEditor flips editorOpen', () {
final a = LayoutArrangement()..applyPreset(classicPreset());
a.toggleEditor();
expect(a.editorOpen, true);
a.toggleEditor();
expect(a.editorOpen, false);
});
test('setEditorRatio clamps to 0.150.70', () {
final a = LayoutArrangement()..applyPreset(classicPreset());
a.setEditorRatio(0.05);
expect(a.editorRatio, 0.15);
a.setEditorRatio(0.90);
expect(a.editorRatio, 0.70);
a.setEditorRatio(0.40);
expect(a.editorRatio, 0.40);
});
test('editorRatio defaults to 0.35', () {
final a = LayoutArrangement()..applyPreset(classicPreset());
expect(a.editorRatio, 0.35);
});
});
}