AI Components
Chat components for AI agents, adapted from AI Elements and built on Nooxit components.
These are AI Elements components rebuilt on
Nooxit. They keep AI Elements' props, so its examples and the messages from the
AI SDK's useChat work unchanged. Everything you see on screen is a Nooxit
component.
| Component | Built on |
|---|---|
| Chat | A complete assistant window: Card with the components below |
| Chain of Thought | Collapsible, Badge |
| Conversation | Message Scroller, Empty |
| Message | Message, Bubble, Button Group, Tooltip |
| Prompt Input | Input Group, Dropdown Menu, Select, Hover Card, Command, Spinner |
| Shimmer | The theme's shimmer utility |
| Snippet | Input Group |
| Suggestion | Button, Scroll Area |
Installation
Import them from nooxit-design-system/components/ai/*:
import {
Message,
MessageContent,
} from 'nooxit-design-system/components/ai/message';They live in their own folder because some share a name with a base component:
components/message is the chat layout, and components/ai/message is the AI
message built on it. From the registry they install as
@nooxit/ai-message, @nooxit/ai-prompt-input and so on.
The components take their message types from the AI SDK
(UIMessage, ChatStatus, FileUIPart), so add ai to your app. These are
type imports only; no AI SDK code runs inside the components.
Replies are rendered as Markdown by Streamdown, which comes with the package. It is set up for code highlighting only: Mermaid diagrams, math and CJK text are not supported.
What changed from AI Elements
- Nooxit components inside. Conversation scrolls with Message Scroller
instead of
use-stick-to-bottom. Message is Message and Bubble, so a user message is amutedbubble on the right and a reply is plain text on the left. The send button is primary. The empty state is Empty. - Phosphor icons replace Lucide, also in Streamdown's code-block controls.
- Token states. Hovers use the
hover-*tokens and list items highlight like menu items. There are no shadows. - Fewer dependencies. A built-in id replaces
nanoid, Shimmer uses the theme'sshimmerutility instead ofmotion, and only Streamdown's code plugin is installed. - No Model Selector.