Can you add a dark-mode toggle to the landing page?
14:32Component gallery
Build an operational screen: Grouped arrivals · Record timeline · Room choices · Form actions
Form Controls
Interactive inputs for collecting user data
Form#
Stacked POST form
form::stacked(…) — the submission contract from form, the rhythm from stack, and shared Save/Cancel geometry from action_row.
Method::Get — a search form
GET is right when the result URL should be linkable and bookmarkable. It is wrong for anything secret: values land in history, logs, and the Referer header.
Enctype::Multipart — file upload
Required for any form with a file input. Without it the browser submits the filename and not the file.
novalidate + autocomplete: false
Skip the browser's constraint validation (when the server owns the rules), and opt out of autofill.
Method::Dialog
Inside a <dialog>, method="dialog" closes it and submits nothing over the network.
Button#
Compact row actions
A fixed-height outline action that keeps its verb together inside a table cell.
Form actions
Primary/secondary pairing for settings, onboarding, checkout.
Destructive
Irreversible actions — only after a confirm dialog.
Loading state
Disabled + spinner icon while awaiting a response.
Icon + text
Leading glyph for recognition at a glance.
Trailing icon + leading/trailing pair
Trailing chevrons hint at navigation; pairing both icons frames a label in a command.
Size ladder (shadcn parity)
xs / sm / default / lg — plus four icon-only sizes with required aria-label.
Input#
Profile
A typical sign-up form using text, email, and password inputs.
Input Types
Each HTML input type rendered with a contextual placeholder.
Text
Email
Password
URL
Phone
Search
Number
File
States
Default, populated, invalid, disabled, and read-only.
Default
Please enter a valid email address.
Textarea#
Share your feedback
Tell us what worked and what didn't. We read every response.
Min 20 characters0 / 500
Profile
Shown on your public profile and attribution lines.
Tip: mention where you work, what you build, and where folks can find you.
Invalid (aria)
Form framework set aria_invalid without styling as hard error.
Screen readers will announce this field as invalid.
Admin notes
Read-only. Changes require a support ticket.
Last updated by Sofia M. · 6 days ago
Checkbox#
Checkbox
Radio#
Radio — Plan
Radio — States
Radio — With Descriptions
Choice Card#
light · fictional example
Tab to the selected room; arrows select another available room. Submitting reloads this example with a room parameter. No room is reserved.
dark · fictional example
Tab to the selected room; arrows select another available room. Submitting reloads this example with a room parameter. No room is reserved.
Date Range#
light · fictional example
Native date controls submit both values without JavaScript. Enhancement updates the calendar-night count and validates the interval; the server must validate dates on every submission. This preview keeps the original dates when reloaded.
dark · fictional example
Native date controls submit both values without JavaScript. Enhancement updates the calendar-night count and validates the interval; the server must validate dates on every submission. This preview keeps the original dates when reloaded.
Select#
Preferences
A realistic settings form with theme, language, and a locked timezone field.
Light
Dark
System
Controls the application appearance.
English
Spanish
French
German
Japanese
UTC
US Eastern (EST)
US Pacific (PST)
Central European (CET)
Japan Standard (JST)
Select Anatomy
Individual select states shown in isolation.
Pre-selected
Active
Paused
Archived
Placeholder
Low
Medium
High
Critical
Disabled option
Free
Pro
Enterprise (contact sales)
Fully disabled
Viewer
Editor
Admin
Small size
Compact
Normal
Roomy
Invalid state
United States
Canada
Mexico
Grouped options
Options organized under labeled groups with separator helper.
North America
Eastern
Central
Pacific
Europe
London (GMT)
Berlin (CET)
Asia
Tokyo (JST)
Singapore (SGT)
Switch#
Notification Settings
Receive emails about new products, features, and more.
Receive notifications directly on your device.
Managed by your organization.
States
Sizes
Default and compact (sm) variants.
Form Integration
Required and invalid states propagate to the hidden input.
Slider#
Price range
$80 — $320
Min
Max
$0$500
Range slider (two thumbs)
$120 — $360
$0$500
Volume
72
Brightness
40%
Vertical slider
Low
Mid
High
Number Field#
Cart — Wireless Headphones
Aurora Wireless Headphones
$149 each
Max 10 per order
Account — Age verification
You must be at least 13 to create an account.
Recipe — Tomato Basil Risotto
Adjust to scale ingredients (1–12 people).
Backordered — quantity locked
Ships when restocked on April 28.
Field#
Create Account
A realistic registration form showing label, description, error, and required field patterns together.
We'll never share your email with anyone.
Use 8 or more characters with a mix of letters and numbers.
Must be at least 8 characters.
A brief introduction for your public profile.
Multiple Errors
A field with multiple validation errors rendered via the errors Vec. Root carries data-invalid for CSS and form-framework hooks.
Passwords must meet all requirements.
Must contain at least one uppercase letter.
Must contain at least one digit.
Must be at least 12 characters long.
Horizontal Orientation
Label on the left, control on the right — good for dense forms and settings panels.
Primary contact address.
Composed Fieldset
Built from helper fns (fieldset, legend, group, title, separator, label, description, content) rather than the monolithic render(Props).
Field Anatomy
Each feature of the Field component shown in isolation.
Basic
Required
With Description
Include country code for international numbers.
With Error
Please enter a valid URL starting with https://.
Description + Error
Found in your invitation email.
This code has already been used.
Textarea Field
Any additional context (optional).
Fieldset#
Profile Fieldset
Disabled Fieldset
Label#
Variants
Default
Required
Disabled
With input
Native Select#
Display
Visual indicators and content presentation
Badge#
Variants
Leading icon
Monospace
b6e38d1eIMP-2491v0.3.0
Hollow chip
The taller bordered-transparent counterpart to the filled pill — carries a trailing count or a kbd hint.
mail2issues14Command⌘Kuser.rs×
In Context
Inbox3
Drafts12
Errors2
Labels
Authentication APIStablev2.1
Streaming SDKBetav0.9
Legacy ClientDeprecatedv1.0
Swatch#
Sizes
Small
32×32
Medium
56×56
Large
80×80
Raw values
Any valid CSS colour string. Click a chip to copy the value.
Primary
#2563eb
Success
#16a34a
Warning
#f59e0b
Danger
#dc2626
Fuchsia
hsl(289 65% 54%)
Translucent
rgba(37,99,235,0.35)
Design tokens (live)
Each chip reads var(--mui-*) at paint time, so toggling the gallery theme flips the grid.
Background
--mui-bg
Card surface
--mui-bg-card
Input surface
--mui-bg-input
Body text
--mui-text
Muted text
--mui-text-muted
Subtle text
--mui-text-subtle
Border
--mui-border
Border · hover
--mui-border-hover
Border · focus
--mui-border-focus
Accent
--mui-accent
Accent text
--mui-accent-text
Danger
--mui-danger
Scale ramps (Tailwind-style)
Horizontal ramps from 50 to 950 — click any tone to copy its hex.
slate
50
100
200
300
400
500
600
700
800
900
950
blue
50
100
200
300
400
500
600
700
800
900
950
emerald
50
100
200
300
400
500
600
700
800
900
950
rose
50
100
200
300
400
500
600
700
800
900
950
amber
50
100
200
300
400
500
600
700
800
900
950
Avatar#
User Card
Sofia Davis
sofia@example.com
Status Indicator
Status Badge
Team
+3
Sizes
sm
md
lg
Separator#
Profile card sections
Separator divides the Bio block from account Settings in a user profile.
Bio
Henry Geldenhuys
Staff engineer at Kapable. Building Claude Conductor. Cape Town → Remote.
Settings
Emailinvoice@geldentech.ca
Two-factorEnabled
Auth methods
“OR” label separates social sign-in from email + password.
OR
Labelled — turn dividers
A mono, letter-spaced, muted label and a hairline rule that carries the eye across. Used between transcript turns.
TURN 12 · 41s
REASONING
TOOL CALLS
Navigation
Vertical separator between primary nav and user menu.
Progress#
File upload
Uploading file...65%
report-2026.pdf — 3.2 MB of 4.9 MB
Stepped progress
Step 2 of 4Account details
Indeterminate
Processing your request...
With label + value helpers
Sync status40%
Download complete
Download complete100%
dataset.csv — 12.7 MB
Meter#
Battery level (higher is better)
15%
60%
90%
Disk usage (lower is better)
25%
70%
95%
Time Split#
One dominant step — the common case, drawn honestly
build-in-guest took 96% of this run (2m 29s of 2m 35s).
Failed part-way — the empty track is where it stopped
Failed at gate-clippy-test after 7.1s. 2 of 6 steps ran.
Still running
build-in-guest running · 1m 11s elapsed.
A step that ran without a measurement — a mark, never a width
Timing unavailable for 1 step.
Kbd#
Keyboard shortcuts
Save⌘+S
Undo⌘+Z
Redo⇧+⌘+Z
Command palette⌘+K
Toggle comment⌘+/
Inline code chipvehicle_state
Skeleton#
Loading post
Loading table row
Loading product card
Spinner#
Sizes
sm
md
lg
Loading button
Page loading
Loading page...
Inline status
Checking for updates...Connecting to server...
Typography#
The 0.9 type scale
A place for every detail.
Display · 44px / 1.1 · tracked −0.035emHeadings
The quick brown fox
The quick brown fox
The quick brown fox
The quick brown fox
Body text
A lead paragraph is great for intros. It's visually larger and lighter than body text, drawing the eye without shouting.
Regular paragraph text. This is the standard body copy size used throughout the interface for readable content at comfortable line lengths.
Large text for emphasis or section intros.
Muted text for secondary information, timestamps, or helper copy.Small text for fine print, captions, or metadata.Lists
- First bullet item
- Second bullet item
- Third bullet item
- Step one
- Step two
- Step three
Code
Install dependencies with bun install then run bun dev to start.
Blockquote
Design is not just what it looks like and feels like. Design is how it works.
Eyebrow
Recent activity
Prose — a server-rendered HTML blob
Release 0.3.0
Adds the prose wrapper for markdown bodies rendered outside the component tree.
- Badge hues
- Status dots
cargo add maud-uiTable
| Name | Role | Status |
|---|---|---|
| Ada Lovelace | Mathematician | Active |
| Alan Turing | Cryptanalyst | Active |
Empty State#
No related items yet
No results
No results found
Try adjusting your search query or removing some filters to find what you're looking for.
Empty inbox
Your inbox is empty
Messages you receive will appear here.
First run
Create your first project
Projects help you organize your work and collaborate with your team.
Minimal
Nothing here yet
Composed (Default media)
No packages installed
Install a package to start building your app.
Composed (Icon media)
No matches
No items match your current filters.
Layout
Structural components for organizing content
Stack#
Direction
Vertical (default)
First
Second
Third
Horizontal
First
Second
Third
Gap scale
None — 0
A
B
C
Xs — 0.25rem
A
B
C
Sm — 0.5rem
A
B
C
Md — 0.75rem
A
B
C
Lg — 1rem
A
B
C
Xl — 1.5rem
A
B
C
Xxl — 2rem
A
B
C
Align (cross axis)
Stretch (default)
Short
Tall
Short
Start
Short
Tall
Short
Center
Short
Tall
Short
End
Short
Tall
Short
Baseline
Short
Tall
Short
Justify (main axis)
Start (default)
A
B
C
Center
A
B
C
End
A
B
C
Between
A
B
C
Around
A
B
C
Evenly
A
B
C
Wrap
wrap: true — children flow onto new lines instead of overflowing
rustmaudhtmxaxumtokioserdeesbuild
Padding
padding: Xl — inset applied by the container itself
Inset content
Helpers
stack::horizontal(…) — row, centred, default gap
stack::vertical(…) inside a card body
Deployment
Composed with nested stacks — no inline flex styles.
Regioneu-central
StatusHealthy
Semantic tags
tag: Tag::Nav — renders <nav>, keeping the landmark intact
tag: Tag::Section — requires aria_label (debug_assert)
A named region, exposed as a landmark
Grid#
Auto-fit (default)
As many equal columns as fit, each at least 14rem. Resize the window — no media query involved.
Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
Minimum column width
Sm — 10rem (dense)
1
2
3
4
Md — 14rem (default)
1
2
3
4
Lg — 18rem
1
2
3
4
Xl — 24rem
1
2
3
4
Fixed columns
Collapse to one column below 40rem by default — four columns on a phone is four unreadable slivers.
Two
1
2
Three
1
2
3
Four
1
2
3
4
Six
1
2
3
4
5
6
collapse_narrow: false
For genuinely small cells that should stay side by side at every width — a swatch palette, a keypad.
Gap scale
The same Space scale as stack — one vocabulary across both containers.
None
1
2
3
4
Sm
1
2
3
4
Md (default)
1
2
3
4
Xl
1
2
3
4
Align (block axis)
Stretch (default) — items fill the row
Short
Tall
Short
Start
Short
Tall
Short
Center
Short
Tall
Short
End
Short
Tall
Short
Composition
A dashboard card grid — grid for the columns, stack for each card's rows.
Total revenue
$45,231.89
+20.1% from last monthSubscriptions
2,350
+180.1% from last monthActive now
573
-4.3% from last monthCard#
Notifications
Notifications
Choose what you want to be notified about.
Push Notifications
Send notifications to device.
Email Notifications
Receive emails for activity updates.
Stat card
Total Revenue
$45,231.89
+20.1% from last month
Create project
Create project
Deploy your new project in one click.
Next.js
Remix
Astro
Nuxt
Compact card (size: Sm)
Storage
6.2 GB of 15 GB used.
Card with action slot
Team members
Manage who has access to this project.
- Alice Johnson — Owner
- Bob Smith — Editor
- Carol Davis — Viewer
Accordion#
FAQ
Yes. It adheres to the WAI-ARIA design pattern.
Yes. It comes with a default theme that matches shadcn.
Yes. JavaScript handles expand/collapse with ARIA state.
Multiple
Content for Section A with relevant information.
Content for Section B with additional details.
Content for Section C with more information.
Collapsible#
Headless accessible UI components for maud + htmx.
Currently in active development. APIs may change.
- Item A
- Item B
Works with JS disabled
Rendered as <details>/<summary>; the browser owns the toggle.
Tabs#
Default (horizontal, segmented)
Make changes to your account here. Click save when you’re done.
Change your password here. After saving, you’ll be logged out.
Invite your team members to collaborate.
Sofia Davis
sofia@example.com
Jackson Lee
jackson@example.com
Isabella Nguyen
isabella@example.com
Line variant (underline)
Make changes to your account here. Click save when you’re done.
Change your password here. After saving, you’ll be logged out.
Invite your team members to collaborate.
Sofia Davis
sofia@example.com
Jackson Lee
jackson@example.com
Isabella Nguyen
isabella@example.com
Vertical orientation + disabled tab + manual activation
Make changes to your account here. Click save when you’re done.
Change your password here. After saving, you’ll be logged out.
Invite your team members to collaborate.
Sofia Davis
sofia@example.com
Jackson Lee
jackson@example.com
Isabella Nguyen
isabella@example.com
Table#
Compact row actions — fixed height, verb stays together
With badges, right-aligned amounts, and footer total
| Invoice | Status | Method | Amount |
|---|---|---|---|
| INV001 | Paid | Credit Card | $250.00 |
| INV002 | Pending | PayPal | $150.00 |
| INV003 | Unpaid | Bank Transfer | $350.00 |
| INV004 | Paid | Credit Card | $450.00 |
| INV005 | Paid | PayPal | $550.00 |
| Total | $1,750.00 |
Striped + hoverable
| Invoice | Status | Method | Amount |
|---|---|---|---|
| INV001 | Paid | Credit Card | $250.00 |
| INV002 | Pending | PayPal | $150.00 |
| INV003 | Unpaid | Bank Transfer | $350.00 |
| INV004 | Paid | Credit Card | $450.00 |
| INV005 | Paid | PayPal | $550.00 |
Compact — tabular amounts align in plain rows too
| Invoice | Status | Method | Amount |
|---|---|---|---|
| INV001 | Paid | Credit Card | $250.00 |
| INV002 | Pending | PayPal | $150.00 |
| INV003 | Unpaid | Bank Transfer | $350.00 |
| INV004 | Paid | Credit Card | $450.00 |
| INV005 | Paid | PayPal | $550.00 |
Data Table#
Searchable, sortable, paginated (5 per page)
| Invoice | Status | Method | Amount |
|---|---|---|---|
| INV001 | Paid | Credit Card | $250.00 |
| INV002 | Pending | PayPal | $150.00 |
| INV003 | Unpaid | Bank Transfer | $350.00 |
| INV004 | Paid | Credit Card | $450.00 |
| INV005 | Paid | PayPal | $550.00 |
| INV006 | Pending | Bank Transfer | $200.00 |
| INV007 | Paid | Credit Card | $300.00 |
| INV008 | Unpaid | PayPal | $400.00 |
| INV009 | Paid | Bank Transfer | $500.00 |
| INV010 | Pending | Credit Card | $275.00 |
Selectable rows + view options
| Name | Role | |
|---|---|---|
| Alice | Admin | |
| Bob | Editor |
Standalone column_header() helper
| Sortable column | Amount |
|---|
Pagination#
Search results
Showing 21–30 of 97 results
First page
Last page
Few pages (no ellipsis)
With href pattern (anchor links)
Icons only (prev/next labels hidden)
Resizable#
Sidebar + Content
Three-column Layout
Explorer
Editor
Select a file from the explorer to view its contents here. This center panel occupies the majority of the available space.
Inspector
Properties and metadata for the selected item will appear in this panel.
Scroll Area#
Release tags
Commit log
Sidebar#
App shell (left, icon-collapsible)
Press Cmd/Ctrl + B to toggle, or click the menu button.
Item#
Item group — three variants
Default with icon media, Outline with image media, Muted title-only (sm).
New message from Jane
Hey — just a heads up that the design doc is ready for review.
Acme Corp launch brief
Shared folder · 12 files · updated 2h ago
Drafts (3)
Status tones — service health rows
status_dot in the media slot, Props.tone tinting the row. Each dot ships a visually-hidden label.
auth-service
2d
web-gateway
19d
event-relay
—
log-scribe
—
With header / footer / separator
Today
Build finished
api-service · blue slot · 00:42 elapsed
Tests passed
Aspect Ratio#
Common ratios
16:9
16:9
4:3
4:3
1:1
1:1
With image
Direction#
Writing direction
The HTML dir attribute cascades to all descendants — inputs, lists, and even scrollbars flip automatically.
dir="ltr"
Hello World
English flows left to right.
dir="rtl"
مرحبا بالعالم
تتدفق اللغة العربية من اليمين إلى اليسار.
Overlay
Modal and floating content layers
Dialog#
Alert Dialog#
Drawer#
Right (default)
Left (navigation)
Bottom (sheet with grab handle)
Scaled background (Vaul-style)
No close button (footer-only dismiss)
Sheet#
right edge
left edge
top edge
bottom edge
Popover#
Popover with Form (bottom-start)
Dimensions
Set width and height for the element.
Right-Center with header/title/description
Shortcut
Press ⌘K to open the command palette from anywhere.
Left-End, controlled open state
Controlled
This popover is rendered open via the `open` prop.
Tooltip#
Icon buttons with contextual tooltips — copy, roster, shortcut, destructive.
Copy to clipboardView full list (12 members)Keyboard shortcut: ⌘KDelete permanently
Align start / center / end (bottom placement)
Aligned to startAligned to centerAligned to end
Custom side_offset (emits data-side-offset for client positioning code)
Offset: 4pxOffset: 12px
Hover Card#
HoverCard — Bottom / Center (default)
@shadcn
@
Crafting beautiful, accessible interfaces. Passionate about design systems.
HoverCard — Top / End
@shadcn
@
Crafting beautiful, accessible interfaces. Passionate about design systems.
HoverCard — Right / Start
@shadcn
@
Crafting beautiful, accessible interfaces. Passionate about design systems.
Toast#
Static toasts (inline)
Profile updated
Your display name and avatar have been saved.
Invoice sent
Invoice #1042 has been emailed to the client.
Session expiring in 5 minutes
Save your work now to avoid losing unsaved changes.
Payment failed
Please check your card details and try again.
Imperative (click to dispatch)
Title only
With description
With action slot
Message archived
You can restore it from the archive view.
Sonner#
Position (pick one, then fire a toast)
Alert#
Subscription expiring
Your Pro plan expires in 3 days
Renew by Apr 19 to keep unlimited builds and priority support. After expiry your workspace drops to the Free tier and projects over 3 will be archived.
Two-factor enabled
Two-factor authentication is on
Backup codes were emailed to invoice@geldentech.ca. Store them somewhere safe — you'll need one if you lose access to your authenticator.
Destructive — API key revocation
Revoke key sk_live_…A9f2?
Any services using this key will stop working immediately. This action cannot be undone — you'll need to issue a new key and redeploy.
Informational
Scheduled maintenance Sunday 02:00 UTC
The build pipeline will be paused for roughly 20 minutes. In-flight deploys will resume automatically once maintenance completes.
With action — deletion undo
Project "atlas" was archived
It will be permanently deleted in 30 days. You can restore it from the Trash until then.
Composite
Multi-part components combining primitives
Button Group#
Text alignment toolbar
Editor toolbar — exactly one alignment active at a time. Click or use ← / → to switch.
Text formatting
Rich-text controls — each toggle independent (Bold currently on). Click any to flip.
View switcher
Project listing view — Grid / List / Board (Grid active).
Pager with separator
Sm-size pager — [Prev] [separator] [Next]. The separator is a vertical rule between buttons in a horizontal group.
Pager with text indicator
Non-interactive text cell — [Page 1 of 10] [Prev] [Next]. Useful for status read-outs inside toolbars.
Toggle#
Text Editor Toolbar
Default variant — formatting controls
Outline variant
Sizes
md
sm
lg
Disabled
Toggle Group#
Text alignment
Paragraph alignment in the document editor.
Text formatting
Bold, italic, underline, strikethrough — multi-select.
Calendar view
Switch between Day, Week, and Month layouts.
Compact
Input Group#
Input with $ prefix
$
Input with .com suffix
.com
Input with https:// prefix and Go button
https://
Email with @ prefix
@
Addon alignment — prefix text, suffix button, block-end hint
Uses `addon`, `text`, `button`, and `input_el` helpers. Prefix text is InlineStart, Go is InlineEnd, hint wraps below the row via BlockEnd.
https://
We'll prepend https:// and check the domain resolves.
Input Otp#
Verify your email
We sent a code to sofia@example.com
Code expires in 9:42
Enter PIN
Your transaction PIN
Confirms payments over $100. Never share this PIN.
2FA locked
Too many failed attempts. Try again in 15 minutes.
Redeem coupon
Alphanumeric code — pattern: DigitsAndChars.
Wrong code
aria_invalid: true — announces failure to screen readers.
Radio Group#
Vertical (default)
Horizontal
Disabled
Required + Comfortable
required: true propagates to each input; variant: Comfortable opens spacing.
Compact
variant: Compact — tighter rows for admin/settings panels.
Calendar#
Check-in
Pick a check-in date — earliest arrival is today (Apr 16).
April 2026
Su
Mo
Tu
We
Th
Fr
Sa
Departure
Departure must be after check-in — min Apr 21, max 60 days out.
April 2026
Su
Mo
Tu
We
Th
Fr
Sa
Disabled weekends
Business-day picking — window locked to the Mon–Fri work week of Apr 20–24.
April 2026
Su
Mo
Tu
We
Th
Fr
Sa
Carousel#
Featured products
What customers say
Chart#
Bar chart
Monthly Revenue (USD)
Line chart with area fill
Active Users Over Time
Custom color
Conversion Rate by Month
Wide line chart
Pageviews Trend (6 months)
Accessibility layer (emits data-accessibility-layer)
Sessions (a11y layer on)
Date Picker#
No selection (placeholder)
April 2026
SuMoTuWeThFrSa
With selected date
April 2026
SuMoTuWeThFrSa
Disabled
April 2026
SuMoTuWeThFrSa
Custom format + range mode
April 2026
SuMoTuWeThFrSa
Conversation
Chat, streaming, and agent tool-call surfaces
Message#
Chat layout — one reading column, prompt right, reply flat
Avatar layout — a transcript row
Streaming Cursor#
Streaming cursor (inline text)
The answer is 42
Thinking dots
thinkingPulse beacon
connectedCode Block#
fn main() {
println!("hello, maud-ui!");
}curl -X POST https://api.example.com/v1/sessions \
-H 'x-api-key: sk_live_…' \
-d '{"prompt":"hi"}'Diff#
src/primitives/message.rs
+2−1
@@ -17,5 +17,6 @@
1717pub struct Props {
18Removed: pub role: String,
18Added: pub role: Role,
19Added: pub is_live: bool,
1920 pub body: Markup,
2021}
Tool Call#
Compact — one chip per call, expands in place
result
126 lines
result
old_string not found
Card — the inspector shape
arguments
old_string: "role: Role::Default" new_string: "role: Role::Assistant"
result
Applied edit — 1 replacement.
Session
The agent session view — composer dock, run status, and inspector gutter
Composer#
Ready — the 84px dock
The resting state. Welded to the bottom of the pane; the operator's hands never hunt for it.
Growing — focused, ringed, grows then scrolls
Two rows minimum; grows to a max then scrolls internally. The transcript loses the height, never the composer.
Executing — writable, not disabled
A turn is running, but the field stays writable so a follow-up can be queued. Interrupt sits beside the primary as a hollow-destructive.
Surface — a second way to write, in the same card
An alternate input surface (voice capture, say) takes the text area's place while it is shown; the text area stays in the form and comes back when the surface hides.
Asleep — 46px, dashed, same anchor line
The session is paused. A mono state tag and a neutral Wake button; still the same anchor line.
Segmented Control#
Turn Progress#
Turn progress
A 2px hard-gradient strip — accent to N%, accent-10% after. Rendered above the executing composer.
8%
34%
62%
100%
Status Dot#
Tones
Success — passing, live
Accent — running, selected
Warning — degraded
Neutral — idle, unknown
Destructive — failed, blocked
Outline — observing
Hollow reads as “watching, not yet settled” without spending a second hue.
Accent, observing
Success, observing
Attention Pill#
Wants attention
Accent-12% fill, accent dot, accent text — the one thing on the row the eye should land on.
2 waiting on youreview requested
Zero state — muted
Nothing waiting: the same pill spends no accent, so it recedes instead of glowing at an empty count.
all caught up0 waiting
Facts List#
Session facts
Mono subtle labels, foreground values, rows on the 4px rhythm.
- model
- sonnet-4.6
- context
- 18.4k / 200k
- spend
- $1.84
- worktree
- refactor-auth-middleware
- started
- 41m ago
Gutter Section#
Inspector gutter sections
A mono uppercase header (10px, letter-spaced, subtle) over any content.
Session
- model
- sonnet-4.6
- turn
- 12