RF

react-fancy

@particle-academy/react-fancy

Tailwind v4 + React component library — about 70 primitives.

UI surfaceTS 77 components Core of Human+
Part of Fancy Core5 packages, one productSee the family
UI surface
77 components, each with a live demo, props table, and source.
ButtonlivebetaCardRK
$npm install @particle-academy/react-fancy
One handler, two operatorsHuman+ contract
Human — keystroke
<Accordion
  value={value}
  onChange={setValue}
/>
Agent — MCP tool call
tools.call(
  "form_set_field",
  { … }
)
form_set_fieldform_submit
Why
Building a full UI kit from scratch means reinventing the same foundation every time — button states, form validation, modals, dropdowns, floating tooltips. React ecosystems offer bloated alternatives (Material-UI, shadcn) that pull in heavy dependencies or expose only internal state, leaving agents to parse DOM. @particle-academy/react-fancy fills the gap: a lightweight, Tailwind-native component suite where every interactive primitive is controlled — value + onChange — and bridgeable to MCP tools without Playwright.
What
A constellation of 50+ React components spanning form inputs (Input, Select, DatePicker, Autocomplete), display primitives (Badge, Avatar, Card, Timeline), interactive surfaces (Table, Kanban, TreeNav, Menu), overlays (Modal, Popover, Toast, Command palette), and specialized affordances for Human+ UX like ReasonTag, MoodMeter, PromptInput, and MagicWand. Every stateful component embraces the Human+ contract: controlled state, stable data-react-fancy-* handles, JSON-friendly props, and optional AgentActivity event broadcasting for presence and undo layers.
How
Install npm install @particle-academy/react-fancy (peer deps: React 18+, React DOM 18+, Tailwind v4). Add @source to your CSS to let Tailwind scan the package: @source "../node_modules/@particle-academy/react-fancy/dist/**/*.js". Import and use: import { Button, Input, Modal, Table } from "@particle-academy/react-fancy"; import "@particle-academy/react-fancy/styles.css"; All components export a *Props interface; form fields support value, onChange, and validation via a wrapping <Field> component. With Inertia? Pair it with @particle-academy/fancy-inertia for one-line form integration.

Components

77 components · click any tile for a full demo, source, and install snippet.

AccordionOpen →
What is Fancy UI?
A constellation of React + PHP primitives.
How do I install?
AccordionPanelOpen →
Shipping & returns
Free returns within 30 days. One panel, fully controlled via open.
ButtonOpen →
The workhorse button — colors, states, icons, emoji, avatar, badge, loading. (formerly Action)
Autocomplete✎ inline editOpen →
cal
  • Calendar
  • Callout
  • Card
AvatarOpen →
RK
SL
MC
AY
+3
BadgeOpen →
newlivebetaurgentdraftv0.4
BrandOpen →
Particle Academy
fancy ui kit
BreadcrumbsOpen →
CalendarOpen →
September 2026
Su
Mo
Tu
We
Th
Fr
Sa
CalloutOpen →
CardOpen →

Plan

Pro
$29/mo
CarouselOpen →
Slide 2 of 4
ChartOpen →
ChatDrawerOpen →
Hey — quick question on the new bridge API.
Sure. What's the question?
CodeViewOpen →
Lightweight syntax-highlighted source view (HTML highlighted; fills height). Powers the Editor Source toggle.
ColorPicker✎ inline editOpen →
#8B5CF6
CommandOpen →
Search…⌘K
  • New file
  • Open settings
ComposerOpen →
Let's ship it.
ContainerOpen →
max-width, centred, gutters
Page shell with a max width and consistent gutters.
ContentRendererOpen →

Release notes

Real components, not drawings.

  • one
  • two
ContextMenuOpen →
Right-click me
DropdownOpen →
Editor✎ inline editOpen →
Bold and italic text — round-trip safe JSON.
EmojiOpen →
🚀🔥
EmojiSelectOpen →
Search emoji…
EyebrowOpen →
03Human+ UX2026

Agents ride shotgun

Small uppercase kicker above a heading.
FauxClientOpen →
ui.particle.academy/packages
The page inside the chrome.
Browser / device / window chrome rendering real, interactive UI inside (with scale-to-fit).
FileBrowserOpen →
README.md1 KB
Remote-capable file/folder browser + directory picker — lazy async provider or streamed JSON snapshots, controlled selection, breadcrumb + editable path, ARIA tree keyboard nav.
FileUploadOpen →
Drop files here
or click to browse
GridOpen →
1
2
3
4
5
6
Modular responsive grid.
HeadingOpen →

Display

Section title

Subsection

IconOpen →
IndexListOpen →
  1. 01Fieldwork20 styles
  2. 02Mom-n-Pops20 styles
  3. 03Dashboards20 styles
Numbered index list for directories and tables of contents.
InputTagOpen →
agent human+ux Add…
Inputs✎ inline editOpen →
Role
Admin
JsonEditorOpen →
retries
3
integer
active
On
boolean
tier
pro
enum
Key/value editing for nested JSON, where a keyMap imposes a declared data type on chosen paths — driving both how a value displays and which input edits it.
KanbanOpen →
Todo
Audit tiles
Doing
Ship 0.4
KbdOpen →
K searchShift? help
Keyboard key rendering for shortcuts.
MagicWandOpen →
Selected text ready to transform.
Shorten Translate
MarqueeOpen →
Auto-scrolling ticker strip — seamless wrap, px/s speed, opposing directions, fade edges, reduced-motion safe.
MediaViewerOpen →
Auto-detected from src/mime
Picks the right viewer (image / video / audio / PDF) from a mime or src; download fallback. Exports resolveMediaType.
ImageViewerOpen →
Zoom + pan
Fit-to-container image with zoom / pan and a transparency checkerboard.
PullQuoteOpen →

The component itself is the agent's affordance, not an external target.

Component contractAGENTS.md
Editorial pull quote with optional attribution.
SectionOpen →
First section
Second, with rule
Third
Vertical section rhythm with optional divider.
StatOpen →
2,431
Files synced
99.98%
Uptime
Single metric with label, value and delta.
StatListOpen →
279 Registry items70 Packages0.5 Kit version
Row of Stat items.
VideoViewerOpen →
Native video controls with poster and fit.
AudioViewerOpen →
Make It Fancy — wishborn
Themed card around the native audio player.
PdfViewerOpen →
This browser can't display the PDF inline.Download PDF
Inline PDF via <object> / <iframe> with a download fallback.
DrawerOpen →
Panel that slides in from any edge — viewport-level, or attached inside a Card or layout pane.
MenuOpen →
Workspace
MobileMenuOpen →
App
Home
Inbox
Settings
ModalOpen →
Confirm
Delete this project?
MoodMeterOpen →
↑ sure
↓ unsure
5.00
1.00
4.00
NavbarOpen →
FancyDocsPricing
OtpInput✎ inline editOpen →
PaginationOpen →
PillboxOpen →
agenthuman+uxfancy-ui
PopoverOpen →
A floating panel anchored to a trigger.
PortalOpen →
document.body
Renders outside the tree
ProfileOpen →
RK
Rita KumarSenior engineer · NYC
ProgressOpen →
PromptInputOpen →
Build me a calendar with team availability
ReasonTagOpen →
High intent
SeparatorOpen →

Above

Below

or
SidebarOpen →
Workspace
SkeletonOpen →
StickyNoteOpen →
Ship the dream ✨
Review PR #42
TableOpen →
NameStatus
api.prodlive
api.stageslow
TabsOpen →

3 active services · 0 alerts

TextOpen →

Large paragraph.

Medium for body copy.

Smaller for hints.

Extra small for metadata.

TimeGridOpen →
MTWTF
9a
11a
1p
3p
5p
TimelineOpen →

Released v0.4

Ports → Zustand

Audit complete

TimePicker✎ inline editOpen →
09
:
30
ToastOpen →
Saved
Your settings are up to date.
TooltipOpen →
Helpful detail
TreeNavOpen →
src
components
Card.tsx
Button.tsx
index.ts
What next
Click any component for a live demo, props, and source — or install the package and go.