The live screen opens wide beside the chat while the bot works on it or asks for a takeover, a file the bot presents as its result opens next to the conversation, and a question that scrolled away gets a "Needs you" pill back to it. Shared core rules derive the focus from signals clients already have (pointer events, takeover requests, a new `present` flag on attach_file, pending asks), move the pane only on focus edges, never replace a pane the user opened, and learn per bot whether the screen opens on its own. Pane widths persist per device; mobile shows a pill that opens the computer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C7VSRHHzyt2KwoCkUkZ2Gc
17 lines
569 B
TypeScript
17 lines
569 B
TypeScript
import { useEffect, useState } from "react";
|
|
|
|
/** Wide enough to keep the conversation readable beside a working pane. */
|
|
const WIDE_LAYOUT_QUERY = "(min-width: 1024px)";
|
|
|
|
export function useWideLayout(): boolean {
|
|
const [wide, setWide] = useState(() => window.matchMedia(WIDE_LAYOUT_QUERY).matches);
|
|
useEffect(() => {
|
|
const media = window.matchMedia(WIDE_LAYOUT_QUERY);
|
|
const sync = () => setWide(media.matches);
|
|
sync();
|
|
media.addEventListener("change", sync);
|
|
return () => media.removeEventListener("change", sync);
|
|
}, []);
|
|
return wide;
|
|
}
|