diff --git a/frontend/src/app/DocumentsRoute.tsx b/frontend/src/app/DocumentsRoute.tsx
index dbf9eaf..70ba486 100644
--- a/frontend/src/app/DocumentsRoute.tsx
+++ b/frontend/src/app/DocumentsRoute.tsx
@@ -55,7 +55,8 @@ const DocumentsRouteContent: React.FC = () => {
}, []);
const renderSurface = () => {
- const layoutClass = `documents-main${sidebarHidden ? ' documents-main--sidebar-hidden' : ''}`;
+ const detailMode = surface?.detailMode ?? null;
+ const layoutClass = `documents-main${sidebarHidden ? ' documents-main--sidebar-hidden' : ''}${detailMode === 'overlay' ? ' documents-main--overlay-detail' : ''}`;
const sidebarNode = !sidebarHidden && sidebarProps ? : null;
const surfaceDetail = surface && (surface as { detail?: ReactNode }).detail ? (surface as { detail?: ReactNode }).detail : null;
const surfaceBody = surface ? surface.content : null;
diff --git a/frontend/src/app/useWorkspaceSurface.tsx b/frontend/src/app/useWorkspaceSurface.tsx
index d13f899..0c5fa38 100644
--- a/frontend/src/app/useWorkspaceSurface.tsx
+++ b/frontend/src/app/useWorkspaceSurface.tsx
@@ -27,7 +27,7 @@ export type DetailPanelProps = (ComponentProps & {
) => Promise;
}) | null;
-export type WorkspaceSurface = { content: ReactNode; detail?: ReactNode | null } | null;
+export type WorkspaceSurface = { content: ReactNode; detail?: ReactNode | null; detailMode?: 'overlay' | 'inline' | null } | null;
export interface UseWorkspaceSurfaceArgs {
sidebarHidden?: boolean;
@@ -100,7 +100,10 @@ export const useWorkspaceSurface = ({
}
const sidebarToggle = renderSidebarToggle ? renderSidebarToggle() : null;
+ const viewMode = documentsTableProps.viewMode;
+ const sidebarMode = viewMode === 'desk' ? 'overlay' : 'inline';
+ const detailMode: 'overlay' | 'inline' | null = detailPanelOpen && detailPanelProps ? sidebarMode : null;
const detail = detailPanelOpen && detailPanelProps
? (() => {
const {
@@ -114,6 +117,7 @@ export const useWorkspaceSurface = ({
const viewer = (
),
detail,
+ detailMode,
};
}, [
documentsTableProps,
@@ -205,7 +210,7 @@ export const useWorkspaceSurface = ({
)
: viewer;
- return { content, detail: null };
+ return { content, detail: null, detailMode: null };
}, [
showPreviewWorkspace,
previewWorkspaceDocument,
diff --git a/frontend/src/preview/DocumentViewerPanel.tsx b/frontend/src/preview/DocumentViewerPanel.tsx
index 287e8df..ad1c477 100644
--- a/frontend/src/preview/DocumentViewerPanel.tsx
+++ b/frontend/src/preview/DocumentViewerPanel.tsx
@@ -58,6 +58,8 @@ interface AssetLike {
[key: string]: unknown;
}
+type SidebarMode = 'overlay' | 'inline';
+
interface DocumentViewerPanelProps extends DocumentSummarySectionProps {
document: DocumentLike | null;
ensureAssetUrl?: (docId: DocumentId, asset: AssetLike, options?: { force?: boolean }) => Promise;
@@ -70,6 +72,7 @@ interface DocumentViewerPanelProps extends DocumentSummarySectionProps {
variant?: 'viewer' | 'sidebar';
onCollapsePanel?: () => void;
onMaximizePanel?: (args: { documentIds: Array }) => void;
+ sidebarMode?: SidebarMode;
}
@@ -138,6 +141,7 @@ const DocumentViewerPanel: React.FC = ({
variant = 'viewer',
onCollapsePanel,
onMaximizePanel,
+ sidebarMode = 'overlay',
}) => {
const navigate = useNavigate();
const isSidebarVariant = variant === 'sidebar';
@@ -507,10 +511,11 @@ const DocumentViewerPanel: React.FC = ({
);
if (isSidebarVariant) {
+ const sidebarClass = `detail-panel panel${sidebarMode === 'inline' ? ' detail-panel--inline' : ''}${isPanelResizing ? ' detail-panel--resizing' : ''}`;
return (
<>