Arc
ComponentsBlocksDocsPricingTry the demo
Get Pro
Introduction
Installation
Theming
Motion
AI and MCP
Changelog
Metrics dashboardPro
KPI drilldownPro
Metric explorerPro
Revenue explorerPro
MRR waterfallPro
Cohort retentionPro
Usage forecastPro
Journey flowPro
Uptime statusPro
Pivot builderNewPro
Choropleth explorerPro
Connected scatterPro
Horizon chartPro
Account healthPro
Market terminalPro
Budget variancePro
Small multiplesPro
Line replayPro
AI chatPro
AI composerPro
AI answerPro
Model pickerPro
Model arenaPro
Prompt studioPro
Document extractionPro
Agent memoryPro
AI side panelPro
AI inline editPro
Research runPro
AI insight cardPro
Catch upPro
AI feature launchPro
AI search barPro
AI setup wizardPro
Call insightsPro
Lead scoringPro
Agent runPro
Agent tasksPro
Agent approvalsPro
Agent routinesPro
Agent orchestratorPro
MCP serversPro
Knowledge basePro
Eval suitePro
Agent builderPro
Agent galleryPro
SidebarPro4
Page header
Command palette
Notification center
Selection toolbarPro
Empty states
Search resultsPro
Login and sign up5, free and Pro variants
Onboarding illustrationPro
OTP input
Multi-step formPro
Two-factor setupPro
Magic linkPro
Settings pagePro
Settings commandPro
Security settingsPro
Billing overviewPro
Usage billingPro
Cancel flowPro
Onboarding surveyPro
Spend alertPro
Team membersPro
Invite peoplePro
Team directoryPro
Roles and permissionsPro
Profile pagePro
API keysPro
WebhooksPro
IntegrationsPro
Environment variablesPro
Domain verifyPro
Webhook testerPro
Plan comparison
Pricing calculatorPro
Usage pricingPro
Cart drawerPro
Checkout summaryPro
Live checkoutPro
Seat managerPro
Credit top-upPro
Invoice studioPro
Wallet cardPro
Delivery trackerPro
Product listingPro
Product detailPro
Seat mapPro
Activity feedPro
Inbox triagePro
Support conversationPro
Support widgetPro
Help centerPro
Feature votingPro
File upload
Media playerPro
Week calendarPro
Availability pickerPro
Project boardPro
Gantt timelineNewPro
Release readinessPro
Kanban boardPro
Feedback boardPro
Smart schedulerPro
Task breakdownPro
Goal trackerPro
Hero section
Hero signupPro
Scroll storyPro
Spotlight gridPro
Feature bentoPro
Comparison table
Logo marquee
Studio perspectivesPro
Stats band
Changelog feed
FAQ section
Contact section
Team showcasePro
Blog grid
Site header
Site footer
CTA section
Newsletter signup
Activity terrainPro
Revenue globePro
Customer galaxyPro
Semantic zoomPro
Layout morphPro
Exploded viewPro
What’s new4 new
BlocksAI side panel

AI side panel

Pro

An assistant docked beside a page that reads it and edits it: ask about the page or a selected passage, review each edit as a word diff, and apply it with a tint sweep on the page and one-click undo.

Live block · sample data

When to use

  • An assistant next to a document or record that can summarize it and propose edits.
  • Copilot style help where edits must be approved, applied visibly and undone.
  • Asking about a selected passage or table without leaving the page.

When not to use

  • A standalone conversation; use ai-chat.
  • Rewriting a passage in place with no side panel; use ai-inline-edit.
  • A single prompt box; use ai-composer.
  • Showing an autonomous agent's steps; use agent-run.

Installation

Pro source and install commands unlock with a Pro plan.

Usage

Pass the page as blocks (headings, labelled paragraphs, tables) and respond({ prompt, page, selection, signal }), which returns { text, change? }; text can be a string or an async iterable of deltas, and change ({ blockId, after }) shows as a diff to approve. Persist edits in onApply and onUndo. It fills its container; set --side-panel-height to embed it smaller.

example.tsx
1import { AiSidePanel } from "@/components/arc/blocks/ai-side-panel/ai-side-panel";2 3export function SpecPage({ spec }) {4  return (5    <AiSidePanel6      page={spec}7      respond={async ({ prompt, page, selection, signal }) => {8        const res = await fetch("/api/assistant", {9          method: "POST",10          body: JSON.stringify({ prompt, page, selection }),11          signal,12        });13        const { text, change } = await res.json(); // change: { blockId, after: PageBlock }14        return { text, change };15      }}16      onApply={(change, page) => saveSpec(page)}17      onUndo={(change, page) => saveSpec(page)}18    />19  );20}21 22// Stream real tokens: return text as an async iterable of deltas.23async function* deltas(stream) {24  for await (const event of stream) if (event.type === "text") yield event.text;25}
Built fromButtonText shimmerTooltip

API reference

AiSidePanel

An assistant docked beside a page that reads the page and edits it. The header shows the assistant, its model mark and context chips (This page, plus a selection you send over). Answers stream in fast chunks; an answer that changes the page brings a compact word diff with Apply and Discard. Apply sweeps a soft accent tint across the changed part of the page while the new text crossfades in, and an Undo pill appears above the composer. Selecting text in the page shows an Ask about selection button that adds it as a context chip. The panel collapses to the side with no bounce while the page reflows, and becomes a bottom sheet in containers narrower than 640px.

PropTypeDefaultDescription
pagePanelPagesample specThe page the assistant reads and edits: { title, meta?, blocks }. Blocks are headings, paragraphs (with a label such as "Intro") and tables (label, columns, rows). The panel keeps its own copy and reports edits through onApply and onUndo; passing a new object resets it.
respond(request: PanelRequest) => PanelReply | Promise<PanelReply>scripted demoAnswers a prompt. The request has { prompt, page, selection?, signal }; abort work when signal fires (Stop). Return { text, change? }: text is a string (streamed at about 95 words a second) or an AsyncIterable<string> of deltas from your model; change is { blockId, after } and shows as a diff to approve. Throw to show the error state with Retry.
onApply(change: AppliedChange, page: PanelPage) => void–Called after Apply with the change (blockId, after and the before block it replaced) and the page after it. Persist the page here.
onUndo(change: AppliedChange, page: PanelPage) => void–Called after Undo with the reverted change and the restored page.
defaultOpenbooleantrueWhether the panel starts open.
suggestionsstring[]["Summarize this page", "Tighten the intro", "Add an annual price column"]Suggestion chips in the empty thread. Unused ones follow each finished answer.
assistant{ name?: string; model?: string; mark?: ReactNode }{ name: "Assistant", model: "Claude Sonnet 5.5", mark: Claude mark }Identity shown in the panel header, the reopen button and status messages.
classNamestring–Class on the root. It fills its container's width and the screen's height; set --side-panel-height to fit a smaller area and --side-panel-page (default 680px) for the page column width.

Keyboard interactions

Tab
Moves through the page's Ask about selection button, the reopen button, the panel header, suggestions, change actions, the Undo pill and the composer.
Enter
Sends the message from the composer, or activates the focused chip or button.
Shift+Arrow keys
With caret browsing, extends a text selection in the page; releasing Shift shows Ask about selection.
Escape
Closes the panel from anywhere inside it and returns focus to the reopen button.

Accessibility

  • The panel is a labelled complementary region; the close and reopen buttons report aria-expanded and aria-controls.
  • A polite status region announces each step: reading the page, answer ready (and which part a change touches), applied with undo available, undone, discarded, stopped and errors.
  • After Apply focus moves to the Undo pill; after Undo it returns to the card's Apply button; after Discard it moves to the composer.
  • Diffs use real ins and del elements, so removed and added words are distinguishable without color.
  • Every status pairs an icon with a label (Applied to the page, Discarded, Undone, Stopped, did not respond).
  • In sheet mode the page behind is inert while the sheet is open.

Motion

  • Closing the panel narrows the dock on a critically damped spring (no bounce) while the panel slides out; the page column widens and the document glides to center.
  • Answers stream in chunks of 3 to 8 words every 34ms on a requestAnimationFrame clock; each chunk fades in over 150ms and settled text never re-renders.
  • Apply sweeps an accent tint across the changed block once, while the old text fades out in 100ms and the new text fades in over 180ms; the block height follows on a spring with no overshoot.
  • Status swaps in the change card footer, chips and the Undo pill are single opacity crossfades in a fixed size slot, so nothing shifts.
  • Reduced motion keeps every state, drops the chunk fade, the slide and the sweep travel, and only fades the tint.

Responsive behavior

  • From 640px the panel docks at 360px wide beside the page; the page keeps a readable 520px measure.
  • Below 640px of container width the panel becomes a bottom sheet over the page with a soft scrim and a close button.
  • Chips truncate the selection label; the full selected text is in the chip's title.

Performance

  • Only the dock width (or sheet position) animates during open and close; the page reflows once per frame.
  • Streaming updates one answer; earlier chunks and turns do not re-render.
  • The word diff is a small LCS over one block, computed on render.

Notes for AI

Give your coding assistant the Markdown reference instead of screenshots.

  • Choose this to add an assistant to a document, spec or record page where answers should become reviewable edits.
  • Return edits as data ({ blockId, after }) rather than prose so people approve each change; every applied change can be undone.
  • Pass the selection to your model; it carries the block id, its label and the selected text.
  • Stream with an async iterable of text deltas; the panel paces the reveal and drains bursts quickly.
  • The preview's scripted responder fails the first free form question it cannot answer once, to show the error state; real responders throw to show it.
/components/blocks/ai-side-panel/markdown

The full library index for assistants is at /llms.txt.

Related

AI chatProBlockA full-screen AI chat where answers stream in as markdown with folding reasoning, tool chips and cited sources. People can switch chats and models, edit or retry a message into versions, rate replies and stop a reply mid-stream.AI composerProBlockThe prompt box at the bottom of an AI app: files upload in place, / opens commands, @ inserts mentions, a model and effort menu sits in the toolbar, and the send button turns into a stop control ringed by the reply's progress.AI inline editProBlockA document you edit with AI in place: ⌘K on a selection, watch the rewrite stream in as a diff, accept each change, and Tab through ghost text.AI answerProBlockOne AI answer set like a clean article: it thinks, shows its sources as small cards with colored marks, and streams a formatted answer where every citation lights the sentence it supports. Copy, regenerate with options, rate, share, page through versions and ask a related question in place.Context windowProComponentAn AI context window as a grid of 200 cells: the system prompt, tools, files, summary and messages fill it in order, a threshold row marks where compaction starts, and sending a message, attaching a file or compacting shows exactly how much still fits.
PreviousActivity feedNextResearch run
Arc · 134 block pagesllms.txt

On this page

  • Preview
  • When to use
  • When not to use
  • Installation
  • Usage
  • API reference
  • Keyboard
  • Accessibility
  • Motion
  • Responsive behavior
  • Performance
  • Notes for AI
  • Related
View as Markdown

Team workspaces

Product spec · Maya Chen · Edited Oct 18

Team workspaces are a new feature that will make it possible for people who work together to share their projects, files and billing in one single place, so that they no longer need to forward invoices around or invite each other to every project one at a time.

Goals

Cut the time it takes to invite a team from six minutes to under one. Move 30% of paid solo accounts to a team plan by the end of March 2027.

Pricing

Per seat, billed monthly. Admins add or remove seats at any time and changes are prorated on the next invoice.

PlanSeatsMonthly
StarterUp to 5$12
TeamUp to 50$24
BusinessUnlimited$36
AssistantClaude Sonnet 5.5
  • This page

Ask about Team workspaces

Assistant reads this page and proposes edits. Nothing changes until you apply it. Answers in this preview are simulated.