soft
Diego Quispe
Design system for React + Tailwind
264 accessible components, 95 chart types, a spreadsheet-grade DataGrid and an AI chat kit. Switch the whole look with a data attribute: the CSS does the rest. Try it on the right, the entire page restyles.
pnpm add @jcsoftdev/ui react react-domLuis Ramírez
Marco Salazar
Andrés Paredes
Real components, not screenshots
Everything below is the published library running in your browser. Drag the Kanban cards, edit a spreadsheet cell, hover the globe. Change the look above and watch every tile follow.
Zero runtime theming
These cards are server-rendered with identical HTML. The only difference is one data-style attribute on the wrapper. No theme provider, no CSS-in-JS, no JavaScript on this page for any of it.
<section data-style="brutal" data-accent="lavanda"> <!-- same components, new look --></section>Diego Quispe
Diego Quispe
Diego Quispe
Diego Quispe
Diego Quispe
Diego Quispe
95 chart types, zero chart dependencies
SVG charts built on the same tokens, with keyboard navigation and accessible summaries. A dozen of them below, each filling its container exactly. Browse them all in the docs.
Spreadsheet-grade DataGrid
Virtualized rows, range selection, undo and redo, copy and paste, and a formula engine with SUM, IF, ROUND and friends. Edit a price and every total recalculates. Export to XLSX from the toolbar.
AI kit
Conversation, streaming Markdown, chain of thought, tool calls, sources, attachments and message actions. Press a suggestion: the reply is simulated and streams token by token.
Accessible + container queries
Resize the frame: the KPI group reflows from four columns to one and the chart keeps its height, all with @container rules. Focus rings, roles, keyboard paths and reduced-motion handling are part of every component, not an add-on.
Install
pnpm add @jcsoftdev/ui react react-dom@import "tailwindcss";@import "@jcsoftdev/ui/styles/tokens.css";@import "@jcsoftdev/ui/styles/theme.css";@import "@jcsoftdev/ui/styles/base.css";@source "../node_modules/@jcsoftdev/ui/dist";import { Button, Chip } from "@jcsoftdev/ui/atoms";import { LineChart } from "@jcsoftdev/ui/charts";import { DataGrid } from "@jcsoftdev/ui/containers";
export function Revenue() { return ( <section data-style="glass" data-accent="menta"> <Chip tone="accent">Live</Chip> <LineChart height={240} title="Revenue" categories={days} series={series} /> <Button variant="primary">Export</Button> </section> );}Docs for people and for LLMs