"use client";
import type { FC } from "react";
import {
MessagePrimitiveParts as MessagePrimitivePartsBase,
MessagePartComponent as MessagePartComponentBase,
MessagePrimitivePartByIndex as MessagePrimitivePartByIndexBase,
messagePartsDefaultComponents,
} from "@assistant-ui/core/react";
import { MessagePartPrimitiveText } from "../messagePart/MessagePartText";
import { MessagePartPrimitiveImage } from "../messagePart/MessagePartImage";
import { MessagePartPrimitiveInProgress } from "../messagePart/MessagePartInProgress";
const webDefaultComponents = {
...messagePartsDefaultComponents,
Text: () => (
{" \u25CF"}
),
Image: () => ,
} satisfies MessagePrimitiveParts.Props["components"];
export namespace MessagePrimitiveParts {
export type Props = MessagePrimitivePartsBase.Props;
}
/**
* Renders the parts of a message with web-specific default components.
*/
export const MessagePrimitiveParts: FC = (
props,
) => {
if ("children" in props) {
return (
{props.children}
);
}
const { components, ...rest } = props;
const merged = components
? {
Text: components.Text ?? webDefaultComponents.Text,
Image: components.Image ?? webDefaultComponents.Image,
Reasoning:
components.Reasoning ?? messagePartsDefaultComponents.Reasoning,
Source: components.Source ?? messagePartsDefaultComponents.Source,
File: components.File ?? messagePartsDefaultComponents.File,
Unstable_Audio:
components.Unstable_Audio ??
messagePartsDefaultComponents.Unstable_Audio,
...("ChainOfThought" in components
? { ChainOfThought: components.ChainOfThought }
: {
tools: components.tools,
data: components.data,
ToolGroup:
components.ToolGroup ?? messagePartsDefaultComponents.ToolGroup,
ReasoningGroup:
components.ReasoningGroup ??
messagePartsDefaultComponents.ReasoningGroup,
}),
Empty: components.Empty,
Quote: components.Quote,
}
: webDefaultComponents;
return ;
};
MessagePrimitiveParts.displayName = "MessagePrimitive.Parts";
// Re-export everything else unchanged
export {
MessagePartComponentBase as MessagePartComponent,
MessagePrimitivePartByIndexBase as MessagePrimitivePartByIndex,
};