nessa-ui

Components

nessa-ui is a set of accessible React components and tokens for AI products. It covers primitives, layout, data, charts, files, conversation, agent and git surfaces.

Components own the behaviour and hand back the presentation: renderEvent and renderTask for the calendar and Gantt, node and card children for the canvas and board, compound parts everywhere else. Unlike an unstyled primitives library, each component arrives with a default skin painted in tokens rather than fixed colour.

Behaviour first

The library owns the drag models, pan and zoom, streaming, focus order and keyboard paths.

You render the content

Calendar events, Gantt bars, board cards and canvas nodes are rendered by the consumer, through render props and children.

Compound parts

Every surface is assembled from named parts, so one can be rearranged without forking the component.

Styling stays open

Every part carries a data-slot and merges className. Tokens drive light and dark.

Agent harness

An agent app assembled from these components: sidebar, split panes, transcript, composer, board, calendar, Gantt timeline, workflow canvas and a terminal dock. The source of each surface opens inside the app.

Installation

Install the package, or copy the source into your project. Both paths give the same code, which lives at github.com/nessalabs/nessa_ui.

npm install @nessa-ui/react # or copy the source into your projectnpx shadcn@latest add https://nessalabs.ai/r/tool-call.json

All components

Primitives
Charts
Conversation
Message

A row in a transcript, with assistant and user sides built from avatar, bubble and footer parts.

Message scroller

A transcript viewport that follows the live edge until the reader scrolls away, with a control to return.

Conversation rail

A navigator beside a transcript that marks every turn and previews one on hover or focus.

Composer

A chat entry surface with an input, footer actions, attachments and submit.

Composer editor

A message input where attachments are atomic inline chips that keep their place in the sentence.

Composer queue

A queue of messages pending on a running turn. Entries can be reordered, steered and removed.

Access mode

A control beside the composer that picks the tool-approval policy a turn runs under.

Model picker

A model chooser grouped by provider, with search.

Thinking controls

A thinking-level control and fast-mode toggle for the composer's model row.

Pill composer

A pill-shaped composer for small chat surfaces, with a light travelling its rim while the agent works.

Chat bubbles

A bubble transcript built from message, quote, reaction, receipt and attachment parts.

Chat tabs

A strip of pill tabs for a chat window, with busy dots, attention badges and close controls.

Chat tray

A single row of everything attached to the message being written, collapsing its tail into a count.

Chat overlay

A reading view that takes over a chat's transcript while the tab strip and composer stay in use.

Chat annotations

Passages lifted from a document and the reader's comments on them, read as short conversations.

Conversation history

A searchable roster of conversations, each row painted from the avatar of its project.

Questionnaire

A question flow of fieldsets, choices and free text, answered through a wrapping form.

Reference

An inline citation that opens its source card on hover or focus.

Selection tooltip

A pill of actions for the current text selection. Overflow actions sit in a scrolling shelf.

Agent

Attribution

Open-source work nessa-ui is built on.

React, Next.js

Framework and rendering model.

Tailwind CSS

Token and utility layer.

Radix UI

Menu, popover, tab and dialog primitives.

dnd-kit

Drag and drop under the Kanban board.

shadcn/ui

Source distribution model and registry format.

Lucide

Default icon set.

KaTeX, Mermaid, react-markdown

Math, diagram and markdown rendering.

WAI-ARIA APG

Roles, keyboard interaction, focus behaviour.