RF

react-fancy

@particle-academy/react-fancy

Tailwind v4 + React component library — 94 components.

UI surfaceTS 94 components Core of Human+
Part of Fancy Core — 5 packages, one productSee the family
UI surface
94 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

94 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.
ActivityLightOpen →
Genie and Tynn12
Genie and Weaver3
Genie and Prism0
Genie and Civi
Activity on an edge between two parties - recency ramp, direction and an optional count.
AudioViewerOpen →
Make It Fancy — wishborn
Themed card around the native audio player.
Autocomplete✎ inline editOpen →
cal
  • Calendar
  • Callout
  • Card
AvatarOpen →
RK
SL
MC
AY
+3
BadgeOpen →
newlivebetaurgentdraftv0.4
BrandOpen →
Particle Academy
fancy ui kit
BreadcrumbsOpen →
ButtonOpen →
The workhorse button — colors, states, icons, emoji, avatar, badge, loading. (formerly Action)
CalendarOpen →
October 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?
CheckboxOpen →
Accessible boolean checkbox with controlled, indeterminate and validation states.
CheckboxGroupOpen →
Controlled multiple-choice checkbox group with horizontal and vertical layouts.
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
DatePickerOpen →
Single-date, date-time or date-range input with controlled values.
DrawerOpen →
Panel that slides in from any edge — viewport-level, or attached inside a Card or layout pane.
DropdownOpen →
Editor✎ inline editOpen →
Bold and italic text — round-trip safe JSON.
EmojiOpen →
🚀✨🔥
EmojiSelectOpen →
Search emoji…
EyebrowOpen →
03 — Human+ 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).
FieldOpen →

Visible to collaborators

Accessible label, description and validation shell for custom form controls.
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
FullScreenOpen →
Quarterly report
Controlled full-screen surface: viewport overlay by default, optional native Fullscreen API, Escape exits with focus and scroll restored.
GridOpen →
1
2
3
4
5
6
Modular responsive grid.
HeadingOpen →

Display

Section title

Subsection

IconOpen →
ImageViewerOpen →
Zoom + pan
Fit-to-container image with zoom / pan and a transparency checkerboard.
IndexListOpen →
  1. 01Fieldwork20 styles
  2. 02Mom-n-Pops20 styles
  3. 03Dashboards20 styles
Numbered index list for directories and tables of contents.
InputOpen →
Text input with labels, validation, affixes and controlled value helpers.
InputTagOpen →
agent human+ux Add…
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.
MenuOpen →
Workspace
MobileMenuOpen →
App
Home
Inbox
Settings
ModalOpen →
Confirm
Delete this project?
MoodMeterOpen →
↑ sure
↓ unsure
5.00 →
← 1.00
4.00
MultiSwitchOpen →
Segmented toggle switch for selecting one value from multiple options.
NavbarOpen →
FancyDocsPricing
OtpInput✎ inline editOpen →
PaginationOpen →
PastePillsOpen →
SummarisePasted text · 4,812 charactersPasted image 1
The paste-pill core Composer, PromptInput and Input share: hold a long paste or a pasted image as a pill, and post pasted files with the form.
PdfViewerOpen →
This browser can't display the PDF inline.Download PDF
Inline PDF via <object> / <iframe> with a download fallback.
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
PullQuoteOpen →

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

Component contractAGENTS.md
Editorial pull quote with optional attribution.
QrCodeOpen →
SN-4829-13
A QR code as an SVG, dependency-free - versions 1-40, L/M/Q/H, numeric/alphanumeric/byte selected automatically.
RadioGroupOpen →
Controlled single-choice radio group with accessible labels and descriptions.
ReasonTagOpen →
High intent
ReorderableGridOpen →
Amount
Stage
Owner
Close
Press Space or Enter to pick up. Use the arrow keys to move, Space or Enter to drop, Escape to cancel.
Reorder grid cells in place by pointer or keyboard: controlled id order, row-major columns, locked cells, aria-live announcements and an agent-friendly moveItem().
ResizablePanelsOpen →

Sidebar

Content

Two panels with an accessible, draggable separator: a percentage split, keyboard steps, and a commit event to persist the size.
SectionOpen →
First section
Second, with rule
Third
Vertical section rhythm with optional divider.
SelectOpen →
Native or searchable listbox selection, including grouped and multi-select options.
SeparatorOpen →

Above

Below

or
SidebarOpen →
Workspace
SkeletonOpen →
SliderOpen →
72%
Single-value or range slider with marks and visible value formatting.
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.
StickyNoteOpen →
Ship the dream ✨
Review PR #42
SwitchOpen →
Boolean toggle switch with controlled state, colors, labels and form support.
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.

TextareaOpen →
Multi-line input with validation, controlled values and optional auto-resize.
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
VideoViewerOpen →
Native video controls with poster and fit.
VirtualListOpen →
1event 1 committed
2event 2 committed
3event 3 committed
4event 4 committed
5event 5 committed
6event 6 committed
7event 7 committed
8event 8 committed
9event 9 committed
10event 10 committed
11event 11 committed
12event 12 committed
13event 13 committed
Windowed list for tens of thousands of rows - measured variable heights, deep links by row id, tail-follow.
What next
Click any component for a live demo, props, and source — or install the package and go.