ilinxa/pro-ui — fully-composed shadcn/ui components, installed with the CLI, owned in your repo

ilinxa/pro-ui

Production-ready React components distributed via the model. Built on shadcn/ui primitives + Tailwind CSS v4 + React 19. Install components into your Next.js (or any React) app with pnpm dlx shadcn@latest add @ilinxa/<slug> — source files copy into your repo, you own the code.

Demo: · Catalog: · AI reference:


Install components in your app

Prerequisites

Your consumer app needs three things in place before installing any @ilinxa/* component. The CLI handles peer deps; it does NOT seed the design system itself.

1. Any React 19 host — Next.js is not required.

Components are pure React. They import only react, sibling shadcn primitives, and explicitly-declared third-party deps — never next/*. Any React 19 host works: Next.js 14/15/16 (App Router or Pages), Vite, Remix, Astro islands, RSPack, etc. Many components ship with a leading "use client" directive — load-bearing in the Next.js App Router, a harmless no-op everywhere else.

2. Tailwind CSS v4 with the shadcn token set.

This is a hard requirement, not a styling preference. Components render against semantic class names (bg-card, text-foreground, border-border, bg-primary, text-muted-foreground, ring-ring, …). Those classes only exist when Tailwind v4 reads a matching @theme inline block. Without it, the classes don't compile.

Concretely, the consumer's globals.css needs the canonical shadcn CSS variables (--background, --foreground, --card, --popover, --primary, --secondary, --muted, --accent, --destructive, --border, --input, --ring, --radius) defined under :root and .dark, plus an @theme inline block that maps them onto --color-* / --radius-* tokens. Running pnpm dlx shadcn@latest init against a v4 project does this for you.

A few components rely on extra tokens beyond the canonical set:

Token groupRequired byWhere to copy from
--chart-1--chart-5chart-shell, stat-card, rich-text-editor syntax highlightingsrc/app/globals.css:94-98, 132-136 [blocked]
--sidebar, --sidebar-foreground, --sidebar-primary, --sidebar-accent, --sidebar-border, --sidebar-ring (+ -foreground variants)sidebar / nav surfacessrc/app/globals.css:100-107, 137-144 [blocked]
--warning, --warning-foregroundcomponents with semantic warning statesrc/app/globals.css:86-87, 126-127 [blocked]
--xy-* overridesflow-canvas onlysrc/app/globals.css:224-244 [blocked]
.hljs-* syntax classesrich-text-editor onlysrc/app/globals.css:246-304 [blocked]

You don't need to copy the brand values — keep your own --primary, --background, etc. Every ilinxa component reads tokens by name, so it inherits whatever palette the host ships. The brand identity (signal-lime + cool off-white + graphite-cool dark) is only authoritative on this demo site.

3. shadcn initialized in the project.

bash
pnpm dlx shadcn@latest init

This seeds lib/utils.ts (the cn helper that every primitive imports) and components.json (alias config). Skip if you've already used any shadcn component in the project.

Install a component

The @ilinxa namespace is listed in the , so the CLI resolves it with zero configuration — no components.json setup needed.

bash
# Lean install (component only)pnpm dlx shadcn@latest add @ilinxa/properties-form
# With dummy-data fixtures (separate item)pnpm dlx shadcn@latest add @ilinxa/properties-form-fixtures

The CLI auto-installs:

  • shadcn primitives the component depends on (button, popover, etc.)
  • npm peer deps (lucide-react, @dnd-kit/*, @codemirror/*, marked, etc.)

Files land at components/<slug>/... with the sealed folder intact — src/components/<slug>/... if your project uses a src/ directory. A custom aliases.components doesn't relocate them (imports are rewritten to your aliases either way, so the install compiles as-is).

Fallback — if your CLI can't resolve @ilinxa (older or pinned CLI versions, self-hosted mirrors), register the namespace manually in your components.json (merge with your existing config):

json
"registries": {  "@ilinxa": "https://ui.ilinxa.com/r/{name}.json"}

Use it

tsx
import { PropertiesForm } from "@/components/properties-form";
export function TaskEditor() {  return (    <PropertiesForm      schema={taskSchema}      values={task}      onSubmit={async (next) => { /* persist */ }}    />  );}

Per-component API + worked examples on the demo site at /components/<slug>.

Update an installed component

shadcn-registry copies source verbatim — you own the code. To pull upstream changes:

bash
pnpm dlx shadcn@latest add @ilinxa/<slug> --overwrite

Diff against your local modifications (use --dry-run first if unsure), merge, ship.


Available components

64 components across 9 categories, each with an optional -fixtures sibling for example data. Generated from registry.json [blocked] — run pnpm build:llms after registry changes.

SlugCategoryDescription
code-blockcodeCode surface with view, edit, and terminal modes — Shiki highlighting, dual-theme CSS variables, and chrome presets for…
article-metadataIcon-and-value metadata strip for article headers — author, date, read time, view count, or any custom pairs.
blackboarddataChalkboard-style team notes board — handwritten ink notes with pens, widths, pins, @mentions, auto-save, and lazy histo…
card-treedataJSON-driven recursive card tree with a full structural editor — drag and drop, multi-select, permissions, search, valid…
card-tree-nodedataCard-tree renderer for flow canvas nodes — read-only viewer, a consumer-owned edit dialog pattern, and a typed port edi…
comment-threaddataRecursive comment thread with composer, optimistic add, like, and delete, inline expansion past max depth, and realtime…
data-tabledataA typed, composable table primitive with column accessors and per-cell rendering.
engagement-bardataSocial action row — like, comment, share, bookmark, custom actions, and a multi-reaction picker with realtime counts an…
event-calendardataEditable event calendar with month, week, day, and agenda views — multi-day spans, drag and resize editing, clipboard s…
↳ optional slice: event-calendar-editing — Drag-and-resize editing, quick-compose creation, keyboard mutations, cross-surface clipboard, and permission-gated acti…
event-carddataEvent preview card with six status states and four layouts — capacity-aware badges, overlay links, and soft-failure ite…
expandable-textdataTruncating text block that only shows its toggle when text actually overflows — configurable line clamp, controlled or…
flow-canvasdataNode-and-edge canvas with typed ports, pluggable node renderers, edge and port-type registries, and JSON save and load…
gantt-timelinedataEditable Gantt timeline — per-task bars, collapsible summary rows, milestone diamonds, continuous zoom from hours to qu…
info-listdataCard-framed list of icon-prefixed rows — primary and secondary text, optional actions, per-row links, comfortable and c…
kanban-boarddataDrag-and-drop kanban board with swimlanes, tinted columns, per-column rules, and a renderer registry that hosts any car…
news-carddataMagazine-style news card in five sizes — role-aware editor and viewer modes, permissions matrix, badges, paywall and se…
people-griddataResponsive grid of person cards — avatar with initials fallback, name, title, per-card links, and a custom item rendere…
post-carddataSocial post composite in four layouts — text expansion, media carousel, engagement bar, and comment thread wired togeth…
progress-timelinedataHorizontal progress bar with a current-position marker and start, state-aware center, and end captions — derives its st…
project-carddataProject and case-study card with editorial status states and grid or feature layouts — overlay links and soft-failure i…
registration-carddataEvent registration status card — capacity progress, spots-left counter, status-aware call to action, and a share slot.
rich-text-editordataPlate-powered WYSIWYG editor and read-only viewer for long-form articles — code blocks, captioned images, floating tool…
schedule-listdataTime-anchored agenda list — time or range, title, optional description and icons, per-row links, framed or bare.
stat-carddataSingle-metric dashboard card — value, label, delta, and a dependency-free SVG sparkline with polarity-aware coloring.
story-raildataHorizontal story rail with unread gradient rings, drag-free skim scrolling, an add-story tile, and edge-fade gradients.
task-carddataSchema-driven task card with time-aware color coding, popup and inline editing, clipboard and drag-drop payloads, and p…
task-treedataHierarchical task outline with multi-select, bulk operations, search and filter toolbar, dual drag-and-drop, and virtua…
thumbnail-listdataLinked thumbnail list — small image, title, and meta line per row, each row one link target.
detail-panelfeedbackSelection-aware detail container with read and edit modes, lifecycle states, sticky header and footer actions, and a sl…
empty-statefeedbackThe designed answer for empty surfaces — icon or illustration, title, description, capability-gated actions, and a hint…
category-cloudformsFlex-wrapped cloud of clickable category chips with optional counts — single-select, toggleable, controlled or uncontro…
entity-pickerformsSearchable picker for typed entities — single or multi select, kind badges, chip cluster with removal, and custom rende…
filter-barformsComposite filter bar — search, category pills, date-range picker, and results count, each independently controlled or h…
filter-panelformsSchema-driven filter panel — checkbox lists, toggles, text, and custom filter types with AND composition and debounced…
json-formformsSchema-driven form engine — a field DSL compiled to Zod, 25 field types including rich text, conditional and computed f…
markdown-editorformsCodeMirror 6 markdown editor with GFM, wikilink autocomplete, a slot-able toolbar, and edit, split, and preview modes.
properties-formformsSchema-driven read and edit form for typed records — six field types, per-field permissions, sync validation, and a cus…
signup-formformsEmail and password signup with optional profile step, OAuth row, password strength meter, magic-link variant, consent g…
team-challengegamificationCooperative team challenge card — one shared goal, collective progress, a whole-team reward, and penalty-free opt-in.
team-feedback-loopgamificationNon-blocking celebration layer — a brief skippable overlay when team progress advances, plus a gentle dismissible next-…
team-progress-bargamificationRead-only team progress bar showing milestone completion — optional ticks and numeric readout, cooperative by design.
team-quest-loggamificationTeam quest overlay — an editable skippable quest name plus a milestone chapter timeline with done, current, and upcomin…
team-task-claimgamificationTask autonomy control — an open-for-anyone toggle, a volunteer claim button, and an assignee chip with neutral release…
team-trophy-shelfgamificationGallery of earned team badges with honest locked slots, an optional count header, and a brief skippable reveal for new…
magazine-layoutlayoutSlot-based magazine layout — hero, filter bar, sidebar, and a mixed-size article grid with infinite scroll and a filter…
split-workspacelayoutSplittable, mergeable canvas of editor areas — a dynamic layout primitive for dashboards, dev tools, and data apps.
author-cardmarketingPerson identity card — avatar, name, role, optional bio, optionally clickable.
newsletter-signupmarketingNewsletter signup card — inline email form or CTA-only variant, async status tracking, three tones, full i18n.
page-heromarketingFull-bleed gradient hero band — badge, title, highlight, description, stats row, and a reveal-on-mount animation.
pricing-tablemarketingPricing tiers side by side — monthly and annual toggle, highlighted tier, per-feature tooltips, and a comparison layout.
share-barmarketingSocial share button row — nine built-in platforms, custom targets, and copy-link with success feedback.
carousel-composermediaMulti-item media post composer — drag in photos and videos, reorder them on a rail, and edit each through a shared edit…
content-composermediaMulti-step content authoring shell — each content type is a JSON config composing form, rich text, and media editing st…
media-carouselmediaEmbla image and video carousel — gallery or linear variants, coordinated video pause for inactive slides.
media-editormediaMedia capture and edit surface for photo, video, and text — capability dials and an Instagram-style chrome model.
↳ optional slice: media-editor-capture — Camera photo/video capture for Media Editor — permission flows, shutter control, multi-instance guard.
media-librarymediaDrive-style media library — folders and files, lazy loading, drag-drop upload, drag-to-move, context menus, and multi-t…
pdf-viewermediaDrop-in PDF reader — toolbar, zoom, selectable text, drag-drop, and a themed context menu.
story-composermediaInstagram-style story creation surface — a locked 9:16 wrapper around the media editor.
story-viewermediaFull-screen story viewer — segmented progress, 3D cube transitions, finger-following swipe, tap zones, and an engagemen…
video-playermediaVideo element wrapper — autoplay-friendly defaults, slot-based controls, carousel-coordinated pause, and double-tap ges…
account-switchernavigationPopover account and context switcher — active label trigger, switchable context list, and a footer slot for create or r…
app-sidebarnavigationApp-shell sidebar with mobile drawer mode, twelve composition slots, prefab nav parts, and a headless state hook.
file-managernavigationFinder-style file browser — grid and list views, marquee multi-select, cut copy paste, drag-and-drop, and a shared clip…
file-treenavigationVS Code-style file tree — format-aware icons, full CRUD, drag-and-drop, lazy children, and multi-select.

Compatibility

  • React host — any React 19 framework. Tested on Next.js 14 / 15 / 16 (App Router & Pages Router); works in Vite, Remix, Astro, RSPack, etc. Components never import next/*.
  • React version — 19 (or 18 with graceful primitive variants).
  • Tailwind CSSv4 required (CSS-vars-only config; no tailwind.config.*). The components are written against semantic Tailwind tokens (bg-card, text-foreground, border-border, …) registered through @theme inline. v3 + JS config won't compile the class names. See .
  • Design tokens — canonical shadcn token set required (--background, --foreground, --card, --popover, --primary, --secondary, --muted, --accent, --destructive, --border, --input, --ring, --radius). A few components also need --chart-*, --sidebar*, --warning* — see the table in .
  • Package managers — pnpm / bun / yarn. npm + React 19 needs --legacy-peer-deps.

AI / LLM access

A concise, AI-friendly registry reference is at .

Point Claude Code, Cursor, GitHub Copilot, or any AI assistant at this URL when working on a project that consumes the registry. It contains install steps, the full component list, common gotchas, and the fallback registry config — everything an AI needs to install components correctly without guessing.


Troubleshooting

SymptomFix
Cannot find module '@/lib/utils' after installRun pnpm dlx shadcn@latest init in the consumer project. shadcn add doesn't seed the cn helper — init does.
Re-running add didn't pull upstream changesWithout --overwrite, locally-modified files are skipped — non-interactive runs auto-answer the overwrite prompt with "no" and exit 0, so exit-code checks can't detect it. Add --overwrite to update; the CLI diffs per file, so unchanged files are left alone.
npm ERESOLVE on React 19 peer depsUse npm install --legacy-peer-deps, or switch to pnpm/bun which resolve cleanly.
Stale install after upstream registry updateThe CLI doesn't cache; the CDN does. Wait out the 5-minute TTL or append ?v=<hash> to the registry URL once.

Longer-form troubleshooting + context: .


FAQ

How is this different from shadcn/ui? shadcn/ui gives you primitives — button, dialog, select. pro-ui distributes what you'd normally build from those primitives: kanban boards, gantt timelines, calendars, media editors, rich-text surfaces. Same install model (source copies into your project, you own it), one level higher in composition. Every component depends on shadcn/ui; none duplicates it.

Does it work without Next.js? Yes. Components are pure React 19 and never import next/*. Vite, Remix, Astro islands, and RSPack hosts all work; the "use client" directives are no-ops outside the App Router.

Do I need Tailwind CSS v4? Yes — it's a compile-time requirement, not a preference. Components render semantic token classes (bg-card, text-foreground) that only exist when Tailwind v4 maps them via @theme inline. Tailwind v3 with a JS config won't compile them. See .

Is it free for commercial use? Yes — MIT. The installed code lands in your repo under your control, so there's no license coupling beyond the standard MIT notice.

Can an AI coding assistant install and use these components? Yes. Point it at , or use the shadcn MCP server — @ilinxa is listed in the official shadcn registry directory, so it resolves without any namespace configuration, and the registry follows the standard shadcn item schema, so search / view / add all work.

Do components update automatically after install? No — by design. The registry copies source; upstream changes only arrive when you re-run add with --overwrite. See .


Contributing — building components

Bug reports and PRs welcome — read CONTRIBUTING.md [blocked] first (setup, gates, PR conventions). Security reports go through SECURITY.md [blocked], other help routes through SUPPORT.md [blocked].

Stack: Next.js 16 (App Router, Turbopack, React Compiler) · React 19 · Tailwind v4 · shadcn CLI v4 · TypeScript 5 · pnpm 10 Building or modifying components? See docs/component-guide.md [blocked] — comprehensive developer reference covering anatomy, rules, design system, lifecycle, and a worked end-to-end example.

Local dev

bash
pnpm installpnpm dev                # http://localhost:3000pnpm registry:build     # regenerate public/r/*.json from registry.json

Add a new component

bash
pnpm new:component <category>/<slug># e.g. pnpm new:component data/stat-card

The scaffolder copies the canonical template at src/registry/components/_template/_template/, replaces tokens, writes a fresh meta.ts, and prints the 3 lines to paste into src/registry/manifest.ts. After implementing, add the component to registry.json (one base item + one -fixtures sibling) following the pattern of existing items. The vercel-build script regenerates the catalog automatically on each Vercel deploy.

Categories live in src/registry/categories.tsdata, forms, navigation, feedback, overlays, marketing, layout, media, auth.

Project shape

src/├── app/                     # docs site (consumes the registry)├── components/│   ├── site/                # site chrome — header, footer, theme toggle│   └── ui/                  # shadcn primitives (treat as third-party)├── lib/utils.ts└── registry/                # THE LIBRARY — keep portable for distribution    ├── categories.ts    ├── manifest.ts    ├── types.ts    └── components/        ├── _template/       # canonical template (excluded from manifest)        └── <category>/<slug>/            ├── <slug>.tsx   # main export            ├── parts/, hooks/, lib/            ├── types.ts            ├── dummy-data.ts # ships in <slug>-fixtures item            ├── demo.tsx     # docs-site only — NOT shipped via registry            ├── usage.tsx    # docs-site only — NOT shipped via registry            ├── meta.ts      # docs-site only — NOT shipped via registry            └── index.tsregistry.json                # source of truth for the shadcn-registry catalogpublic/r/                    # build artifacts — auto-regenerated by vercel-buildscripts/new-component.mjs

Registry import rules — registry code may import only react, @/components/ui/*, @/lib/utils, and explicitly-declared third-party deps. Never next/* or app-level concerns. This keeps every sealed folder portable across consumer projects.

Design system

  • Type: Onest (sans), JetBrains Mono (mono)
  • Accent: signal-lime — oklch(0.80 0.20 132) light / oklch(0.86 0.18 132) dark — paired with near-black foreground (lime is too bright for white text)
  • Light surfaces: cool off-white page (oklch(0.975 0.003 250)); cards lifted to pure white for visible elevation
  • Dark surfaces: graphite-cool — 0.13 base / 0.17 raised / 0.22 subtle, all at hue 250
  • Motion: one orchestrated reveal-up per major page (60ms stagger), guarded by prefers-reduced-motion

Full token reference: src/app/globals.css [blocked]. The don'ts: no Inter / Roboto / Geist / system-font defaults, no pure-white page backgrounds, no neon-saturated lime, no purple-on-white gradient clichés.

Status & roadmap

User-facing changes land in CHANGELOG.md [blocked]; per-component versions in docs/component-versions.md [blocked]; the current catalog is always the .

Scripts

bash
pnpm dev                                # next dev (Turbopack)pnpm build                              # next build (local; production uses vercel-build)pnpm vercel-build                       # shadcn build && next build (used by Vercel)pnpm registry:build                     # shadcn build only — regenerate public/r/*.jsonpnpm lint                               # ESLintpnpm tsc --noEmit                       # typecheckpnpm new:component <category>/<slug>    # scaffold a new componentpnpm dlx shadcn@latest add <name>       # add a shadcn primitive

License

MIT [blocked] — open source since 2026-08-11.