diff --git a/.changeset/message-response-wrap-long-words.md b/.changeset/message-response-wrap-long-words.md
new file mode 100644
index 00000000..3a9f2062
--- /dev/null
+++ b/.changeset/message-response-wrap-long-words.md
@@ -0,0 +1,5 @@
+---
+"ai-elements": patch
+---
+
+Wrap long words in MessageResponse and ReasoningContent instead of clipping them at the message edge
diff --git a/packages/elements/__tests__/message.test.tsx b/packages/elements/__tests__/message.test.tsx
index a6d8a89a..f519d95f 100644
--- a/packages/elements/__tests__/message.test.tsx
+++ b/packages/elements/__tests__/message.test.tsx
@@ -145,6 +145,13 @@ describe("messageResponse", () => {
render(# Heading);
expect(screen.getByText("Heading")).toBeInTheDocument();
});
+
+ it("wraps long words instead of letting them overflow", () => {
+ const { container } = render(
+ {"a".repeat(200)}
+ );
+ expect(container.firstChild).toHaveClass("break-words");
+ });
});
describe("messageBranch", () => {
diff --git a/packages/elements/__tests__/reasoning.test.tsx b/packages/elements/__tests__/reasoning.test.tsx
index e874d554..557dca99 100644
--- a/packages/elements/__tests__/reasoning.test.tsx
+++ b/packages/elements/__tests__/reasoning.test.tsx
@@ -248,4 +248,16 @@ describe("reasoningContent", () => {
);
expect(container.querySelector(".custom")).toBeInTheDocument();
});
+
+ it("wraps long words instead of letting them overflow", () => {
+ const longWord = "a".repeat(200);
+ render(
+
+ {longWord}
+
+ );
+ expect(
+ screen.getByText(longWord).closest(".break-words")
+ ).toBeInTheDocument();
+ });
});
diff --git a/packages/elements/src/message.tsx b/packages/elements/src/message.tsx
index c04a3993..cf1a7389 100644
--- a/packages/elements/src/message.tsx
+++ b/packages/elements/src/message.tsx
@@ -327,7 +327,7 @@ export const MessageResponse = memo(
({ className, ...props }: MessageResponseProps) => (
*:first-child]:mt-0 [&>*:last-child]:mb-0",
+ "size-full break-words [&>*:first-child]:mt-0 [&>*:last-child]:mb-0",
className
)}
plugins={streamdownPlugins}
diff --git a/packages/elements/src/reasoning.tsx b/packages/elements/src/reasoning.tsx
index 4789ee2a..986d28ba 100644
--- a/packages/elements/src/reasoning.tsx
+++ b/packages/elements/src/reasoning.tsx
@@ -210,7 +210,7 @@ export const ReasoningContent = memo(
({ className, children, ...props }: ReasoningContentProps) => (