diff --git a/apps/web/components/AppShell.tsx b/apps/web/components/AppShell.tsx index c7e6f80..b6fa456 100644 --- a/apps/web/components/AppShell.tsx +++ b/apps/web/components/AppShell.tsx @@ -18,6 +18,9 @@ interface AppShellProps { projectId?: string; // 当前激活的项目级入口键(用于高亮)。 activeNav?: ActiveNav; + // 专注写作模式(P3-4):隐藏桌面左侧图标导航以加宽正文;顶栏汉堡/命令面板仍可达导航。 + // 缺省 false → 其余页面外观不变(加法式可选项)。 + hideNav?: boolean; } // 全局外壳:顶栏(64px) + 左导航 + 主区(UX §5.1)。 @@ -27,6 +30,7 @@ export function AppShell({ subtitle, projectId, activeNav, + hideNav = false, }: AppShellProps) { return (
- + {hideNav ? null : }
void; + presetIds: readonly string[]; + onTogglePreset: (id: string) => void; + // 空章默认展开(新手最需要看到输入框的时机);满章默认收起以让出编辑视野。 + defaultOpen: boolean; + // 发送键 = 写本章:把已选文风/剧情 + 自定义要求组装后逐字流式写进正文(不改成聊天气泡)。 + streaming: boolean; + onWrite: () => void; + onStop: () => void; +} + +// 本章写作指令面板(P0-2 / P3-3 提升):正文正上方常驻的「和 AI 说话」输入条。 +// 眉题「和 AI 说话」+ 主标题「告诉 AI 这章想怎么写」+ HITL 微文案 +「?这是什么」常驻可见; +// 主 CTA「写本章」突出(md 尺寸、独占右侧),空章默认展开露出输入框。 +// 发送键即「写本章」,沿用 composeDirective + 文风/剧情 chips + 流式打字机写进正文。 +export function DirectivePanel({ + directive, + onDirectiveChange, + presetIds, + onTogglePreset, + defaultOpen, + streaming, + onWrite, + onStop, +}: DirectivePanelProps) { + const panelId = useId(); + const [open, setOpen] = useState(defaultOpen); + const activeCount = presetIds.length + (directive.trim().length > 0 ? 1 : 0); + return ( +
+
+
+ 和 AI 说话 + +
+
+ {activeCount > 0 ? ( + + {activeCount} 项指令 + + ) : null} + {/* 常驻主 CTA = 写本章:始终可见(折叠时也在),md 尺寸凸显为本条主动作,逐字流式写进正文。 */} + {streaming ? ( + + ) : ( + + )} + +
+
+

+ AI 给草稿,你决定采不采用,原文永远你说了算。 +

+ {open ? ( +
+ + + +