Piperubio Component Registry
Custom shadcn/ui component registry created and maintained by piperubio. Reusable React components with advanced features like unlimited columns, layout options, and smart spanning.
- • Horizontal layout (default grid)
- • Vertical layout (stacked items)
- • Up to 12 columns (no more 3-column limit)
- • Smart responsive behavior
- • Numeric spans (1, 2, 3, 4...12)
- • "filled" span (remaining columns)
- • Responsive span objects
- • Auto-clamping to available columns
- • Basic: minimal, clean design
- • Bordered: structured table format
- • Support for nested sections
- • Rich ReactNode children support
Layout Options
<Description layout="horizontal" columns={{ base: 1, md: 2, lg: 3 }}>
<DescriptionItem label="Name">Juan Pérez</DescriptionItem>
<DescriptionItem label="Email">juan@ejemplo.com</DescriptionItem>
<DescriptionItem label="Phone">+1 234 567 8900</DescriptionItem>
<DescriptionItem label="Address" span="filled">
123 Calle Principal, Ciudad, País (spans remaining columns)
</DescriptionItem>
<DescriptionItem label="Department">Engineering</DescriptionItem>
<DescriptionItem label="Role"><Badge>Senior Developer</Badge></DescriptionItem>
</Description><Description layout="vertical" columns={{ base: 1, md: 2, lg: 3 }}>
<DescriptionItem label="Name">Juan Pérez</DescriptionItem>
<DescriptionItem label="Email">juan@ejemplo.com</DescriptionItem>
<DescriptionItem label="Phone">+1 234 567 8900</DescriptionItem>
<DescriptionItem label="Bio">
Desarrollador full-stack con experiencia en React, Node.js y bases de datos.
</DescriptionItem>
</Description><Description layout="horizontal" variant="bordered" columns={{ base: 1, md: 2, lg: 3 }}>
<DescriptionItem label="Server">Production Web Server</DescriptionItem>
<DescriptionItem label="Environment"><Badge variant="outline">Production</Badge></DescriptionItem>
<DescriptionItem label="Status">
<div className="flex items-center gap-2">
<div className="w-2 h-2 bg-green-500 rounded-full"></div>
<span>Healthy</span>
</div>
</DescriptionItem>
<DescriptionItem label="CPU Usage">65%</DescriptionItem>
<DescriptionItem label="Memory">8.2 GB / 16 GB</DescriptionItem>
<DescriptionItem label="Uptime">45 days</DescriptionItem>
<DescriptionItem label="Configuration" span="filled">
<div className="w-full">
<span className="bg-gray-50 px-3 py-2 rounded border block w-full">
nginx 1.24, Node.js 20.x, PM2 cluster mode (spans remaining columns)
</span>
</div>
</DescriptionItem>
</Description><Description layout="vertical" variant="bordered" columns={{ base: 1, md: 2, lg: 3 }}>
<DescriptionItem label="Service">Cloud Database</DescriptionItem>
<DescriptionItem label="Plan"><Badge variant="outline">Professional</Badge></DescriptionItem>
<DescriptionItem label="Status">
<div className="flex items-center gap-2">
<div className="w-2 h-2 bg-green-500 rounded-full"></div>
<span>Active</span>
</div>
</DescriptionItem>
<DescriptionItem label="Region">US East (Virginia)</DescriptionItem>
</Description>Advanced Spanning & Unlimited Columns
<Description layout="horizontal" columns={{ base: 1, md: 3, lg: 4 }}>
<DescriptionItem label="Name">María González</DescriptionItem>
<DescriptionItem label="Email">maria@company.com</DescriptionItem>
<DescriptionItem label="Department">Marketing</DescriptionItem>
<DescriptionItem label="Full Bio" span="filled">
Marketing professional with 8+ years of experience... (spans remaining columns)
</DescriptionItem>
<DescriptionItem label="Skills">React, TypeScript</DescriptionItem>
<DescriptionItem label="Location">Barcelona</DescriptionItem>
</Description><Description layout="horizontal" columns={{ base: 2, md: 4, lg: 6 }}>
<DescriptionItem label="ID">USR001</DescriptionItem>
<DescriptionItem label="Name">Alex Johnson</DescriptionItem>
<DescriptionItem label="Email">alex@tech.com</DescriptionItem>
<DescriptionItem label="Phone">+1-555-0123</DescriptionItem>
<DescriptionItem label="Department">Engineering</DescriptionItem>
<DescriptionItem label="Team">Frontend</DescriptionItem>
<DescriptionItem label="Address" span={4}>
456 Tech Street, Innovation District, Silicon Valley, CA 94043 (spans 4 columns)
</DescriptionItem>
<DescriptionItem label="Status" span={2}>
<Badge>Active Employee (spans 2 columns)</Badge>
</DescriptionItem>
<DescriptionItem label="Skills" span="filled">
<div className="flex flex-wrap gap-1">
<Badge>React</Badge>
<Badge>TypeScript</Badge>
{/* ... more badges */}
</div>
</DescriptionItem>
</Description><Description layout="horizontal" columns={{ base: 1, md: 3, lg: 5 }}>
<DescriptionItem label="Project">E-commerce Platform</DescriptionItem>
<DescriptionItem label="Status"><Badge>In Progress</Badge></DescriptionItem>
<DescriptionItem label="Priority">High</DescriptionItem>
{/* Responsive spanning: base=filled, md=2, lg=3 */}
<DescriptionItem
label="Description"
span={{ base: "filled", md: 2, lg: 3 }}
>
Modern e-commerce solution with advanced features
</DescriptionItem>
<DescriptionItem label="Lead">Sarah Wilson</DescriptionItem>
{/* Responsive spanning: base/md=filled, lg=2 */}
<DescriptionItem
label="Technologies"
span={{ base: "filled", md: "filled", lg: 2 }}
>
<div className="flex flex-wrap gap-1">
<Badge>Astro</Badge>
<Badge>Prisma</Badge>
<Badge>Stripe</Badge>
</div>
</DescriptionItem>
<DescriptionItem label="Budget">$50K</DescriptionItem>
<DescriptionItem label="Timeline">Q1 2025</DescriptionItem>
<DescriptionItem label="Team Size">5 developers</DescriptionItem>
</Description>Bordered Variant Examples
<Description variant="bordered" columns={{ base: 1, md: 2, lg: 4 }}>
<DescriptionItem label="Service Name">Advanced Analytics Service</DescriptionItem>
<DescriptionItem label="Plan"><Badge variant="outline">Enterprise</Badge></DescriptionItem>
<DescriptionItem label="Region">US West (Oregon)</DescriptionItem>
<DescriptionItem label="Status">
<div className="flex items-center gap-2">
<div className="w-2 h-2 bg-green-500 rounded-full"></div>
<span>Running</span>
</div>
</DescriptionItem>
<DescriptionItem label="Created At" span={2}>
2024-01-15 10:30:00 UTC (spans 2 columns)
</DescriptionItem>
<DescriptionItem label="Last Updated" span={2}>
2024-09-20 14:22:15 UTC (spans 2 columns)
</DescriptionItem>
<DescriptionItem label="Technical Specifications" span="filled">
<div className="grid grid-cols-4 gap-4">
<div><div className="font-medium">Database</div><div>PostgreSQL 15</div></div>
<div><div className="font-medium">Memory</div><div>32 GB RAM</div></div>
{/* ... more specs */}
</div>
</DescriptionItem>
<DescriptionSection label="Network Configuration">
<div className="space-y-2">
<div><span className="font-medium">VPC:</span> vpc-12345678</div>
{/* ... more config */}
</div>
</DescriptionSection>
</Description>Complete API Reference
Description Props
variant"basic" | "bordered""basic"Visual style variantlayout"horizontal" | "vertical""horizontal"Layout direction for itemscolumnsResponsiveColumnsConfig{ base: 1, md: 2, lg: 3 }Responsive columns (unlimited, up to 12)classNamestring?-Additional CSS classesDescriptionItem Props
labelstring-Field labelchildrenReactNode-Field content (any React element)spannumber | "filled" | ResponsiveSpan1Column span (1-12, "filled", or responsive object)classNamestring?-Additional CSS classesDescriptionSection Props
labelstring-Section labelchildrenReactNode-Section contentclassNamestring?-Additional CSS classesNew Features
Layout Options
layout="horizontal" (default): Items arranged in responsive gridlayout="vertical": Items stacked vertically, full width
Unlimited Columns
No more 3-column limit! Use up to 12 columns with full Tailwind CSS support.
"Filled" Spanning
span="filled": Automatically spans all remaining columns in the current row.
Responsive Spans
Use responsive objects: span={{ base: "filled", md: 2, lg: 3 }}
Best Practices
• Use layout="vertical" for mobile-first or detailed information
• Use layout="horizontal" for traditional key-value displays
• Use span="filled" for content that should span remaining space
• Leverage responsive spanning for complex layouts
• Use up to 12 columns for complex data grids
• Mix basic and bordered variants appropriately
• Use ReactNode children for rich content (badges, icons, etc.)
• Mix variants within the same logical section
• Use too many columns on small screens
• Overcomplicate simple data with too many columns
• Forget that spans are automatically clamped to available columns
• Use vertical layout when horizontal would be more readable
• Ignore responsive considerations when using multiple columns