Labsco
vercel-labs logo

shadcn

15,600

by vercel · part of vercel-labs/json-render

Pre-built shadcn/ui components for json-render. Use when working with @json-render/shadcn, adding standard UI components to a catalog, or building web UIs with…

🔥🔥🔥✓ VerifiedFreeQuick setup
🧰 Not standalone. This skill ships with vercel-labs/json-render and only works together with that tool — install the tool first, then add this skill.

Pre-built shadcn/ui components for json-render. Use when working with @json-render/shadcn, adding standard UI components to a catalog, or building web UIs with…

Inspect the full instructions your agent will receiveExpand

This is the exact playbook injected into your agent when the skill activates — shown here so you can audit it before installing. You don't need to read it to use the skill.

by vercel

Pre-built shadcn/ui components for json-render. Use when working with @json-render/shadcn, adding standard UI components to a catalog, or building web UIs with… npx skills add https://github.com/vercel-labs/json-render --skill shadcn Download ZIPGitHub15.6k

@json-render/shadcn

Pre-built shadcn/ui component definitions and implementations for json-render. Provides 36 components built on Radix UI + Tailwind CSS.

Two Entry Points

Entry Point Exports Use For @json-render/shadcn/catalog shadcnComponentDefinitions Catalog schemas (no React dependency, safe for server) @json-render/shadcn shadcnComponents React implementations

Extending with Custom Components

Add custom components alongside standard ones:

Copy & paste — that's it
const catalog = defineCatalog(schema, {
 components: {
 // Standard
 Card: shadcnComponentDefinitions.Card,
 Stack: shadcnComponentDefinitions.Stack,

 // Custom
 Metric: {
 props: z.object({
 label: z.string(),
 value: z.string(),
 trend: z.enum(["up", "down", "neutral"]).nullable(),
 }),
 description: "KPI metric display",
 },
 },
 actions: {},
});

const { registry } = defineRegistry(catalog, {
 components: {
 Card: shadcnComponents.Card,
 Stack: shadcnComponents.Stack,
 Metric: ({ props }) => {props.label}: {props.value}
,
 },
});

Available Components

Layout

  • Card - Container with optional title, description, maxWidth, centered

  • Stack - Flex container with direction, gap, align, justify

  • Grid - Grid layout with columns (number) and gap

  • Separator - Visual divider with orientation

Navigation

  • Tabs - Tabbed navigation with tabs array, defaultValue, value

  • Accordion - Collapsible sections with items array and type (single/multiple)

  • Collapsible - Single collapsible section with title

  • Pagination - Page navigation with totalPages and page

Overlay

  • Dialog - Modal dialog with title, description, openPath

  • Drawer - Bottom drawer with title, description, openPath

  • Tooltip - Hover tooltip with content and text

  • Popover - Click-triggered popover with trigger and content

  • DropdownMenu - Dropdown with label and items array

Content

  • Heading - Heading text with level (h1-h4)

  • Text - Paragraph with variant (body, caption, muted, lead, code)

  • Image - Image with alt, width, height

  • Avatar - User avatar with src, name, size

  • Badge - Status badge with text and variant (default, secondary, destructive, outline)

  • Alert - Alert banner with title, message, type (success, warning, info, error)

  • Carousel - Scrollable carousel with items array

  • Table - Data table with columns (string[]) and rows (string[][])

Feedback

  • Progress - Progress bar with value, max, label

  • Skeleton - Loading placeholder with width, height, rounded

  • Spinner - Loading spinner with size and label

Input

  • Button - Button with label, variant (primary, secondary, danger), disabled

  • Link - Anchor link with label and href

  • Input - Text input with label, name, type, placeholder, value, checks

  • Textarea - Multi-line input with label, name, placeholder, rows, value, checks

  • Select - Dropdown select with label, name, options (string[]), value, checks

  • Checkbox - Checkbox with label, name, checked, checks, validateOn

  • Radio - Radio group with label, name, options (string[]), value, checks, validateOn

  • Switch - Toggle switch with label, name, checked, checks, validateOn

  • Slider - Range slider with label, min, max, step, value

  • Toggle - Toggle button with label, pressed, variant

  • ToggleGroup - Group of toggles with items, type, value

  • ButtonGroup - Button group with buttons array and selected

Built-in Actions (from @json-render/react)

These are built into the React schema and handled by ActionProvider automatically. They appear in prompts without needing to be declared in the catalog.

  • setState - Set a value at a state path ({ statePath, value })

  • pushState - Push a value onto an array ({ statePath, value, clearStatePath? })

  • removeState - Remove an array item by index ({ statePath, index })

  • validateForm - Validate all fields, write { valid, errors } to state ({ statePath? })

Validation Timing (validateOn)

All form components support validateOn to control when validation runs:

  • "change" — validate on every input change (default for Select, Checkbox, Radio, Switch)

  • "blur" — validate when field loses focus (default for Input, Textarea)

  • "submit" — validate only on form submission

Important Notes

  • The /catalog entry point has no React dependency -- use it for server-side prompt generation

  • Components use Tailwind CSS classes -- your app must have Tailwind configured

  • Component implementations use bundled shadcn/ui primitives (not your app's components/ui/)

  • All form inputs support checks for validation (type + message pairs) and validateOn for timing

  • Events: inputs emit change/submit/focus/blur; buttons emit press; selects emit change/select