import type { DocumentSlotState } from '../documents/useDocumentSlot';
import { DocumentPane } from './DocumentPane';
const DEFAULT_EMPTY_HINT = 'Select a file from the sidebar to open it here.';
type DocumentSlotViewProps = {
state: DocumentSlotState;
className?: string;
placeholder?: string;
emptyHint?: string;
};
function SlotPlaceholder({ message }: { message: string }) {
return (
{message}
);
}
/**
* Renders a document slot's empty, loading, error, or open states.
* Workspaces compose this inside their layout chrome.
*/
export function DocumentSlotView({
state,
className,
placeholder = 'Start writing…',
emptyHint = DEFAULT_EMPTY_HINT,
}: DocumentSlotViewProps) {
if (state.kind === 'empty') {
return ;
}
if (state.kind === 'loading') {
return ;
}
if (state.kind === 'error') {
return (
);
}
return (
// Key by document id so switching tabs to a different document remounts a
// fresh editor instead of reusing one bound to the previous document. The
// shared editor view binds its content on mount only, so without this a
// tab switch can leave the previous file's content showing.
);
}