Smooth WebUI streaming with state-driven viewport motion (#4696)

This commit is contained in:
chengyongru
2026-07-26 00:18:24 +08:00
committed by GitHub
parent 9a7debcb48
commit b0ef759e2c
28 changed files with 3202 additions and 670 deletions
+28
View File
@@ -29,6 +29,7 @@ vi.mock("@/components/MarkdownTextRenderer", () => ({
<div
data-testid="markdown-renderer"
data-highlight-code={String(highlightCode)}
data-streaming-layout={String(streaming)}
>
{children}
</div>
@@ -106,6 +107,33 @@ describe("MarkdownText", () => {
expect(rendererMountSpy).toHaveBeenCalledTimes(1);
});
it("can complete without replacing the streaming renderer layout", async () => {
const source = "A layout-stable answer";
const { rerender } = render(
<MarkdownText streaming preserveStreamingLayout>{source}</MarkdownText>,
);
await act(async () => {
await Promise.resolve();
await Promise.resolve();
});
expect(screen.getByTestId("markdown-renderer")).toHaveAttribute(
"data-streaming-layout",
"true",
);
rerender(<MarkdownText preserveStreamingLayout>{source}</MarkdownText>);
expect(screen.getByTestId("markdown-renderer")).toHaveAttribute(
"data-streaming-layout",
"true",
);
expect(screen.getByTestId("markdown-renderer")).toHaveAttribute(
"data-highlight-code",
"true",
);
});
it("defers syntax highlighting until the final render", async () => {
rendererSpy.mockClear();
const largeCode = `\`\`\`ts\n${"const value = 1;\n".repeat(1_100)}\`\`\``;