import type { ReactNode } from "react"; import type { ActionDefinition } from "@tooee/commands"; import type { StatusBarItem } from "@tooee/layout"; import type { MarkSet } from "@tooee/marks"; import { DocumentScreen } from "@tooee/shell"; import type { DocumentController } from "@tooee/shell"; import { useProvideViewCommandContext } from "../hooks/use-view-command-context.js"; import type { AnyContent } from "../types.js"; export interface ViewScreenProps { content: AnyContent; controller: DocumentController; streaming: boolean; actions?: ActionDefinition[]; /** Content-shaped status (format, line/row counts), rendered before Mode. */ statusItems?: StatusBarItem[]; reload: () => void; providerMarks: MarkSet[]; userMarks: MarkSet[]; setMarkSet: (set: MarkSet) => void; clearMarkNamespace: (namespace: string) => void; clearAllUserMarks: () => void; children: ReactNode; } /** * The chrome every subview shares: `DocumentScreen` for the row-document half * (theme/quit commands, actions, `ctx.document`, layout, standard status) plus * the content-only `ctx.view` slice that viewers contribute on top. */ export const ViewScreen = function ViewScreen({ content, controller, streaming, actions, statusItems, reload, providerMarks, userMarks, setMarkSet, clearMarkNamespace, clearAllUserMarks, children, }: ViewScreenProps): ReactNode { useProvideViewCommandContext({ content, marks: { clearAll: clearAllUserMarks, clearNamespace: clearMarkNamespace, providerMarks, setMarkSet, userMarks, }, reload, }); const items: StatusBarItem[] = [ ...(statusItems ?? []), ...(streaming ? [{ label: "Status:", value: "streaming" }] : []), ]; return ( {children} ); };