{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "bordered-clients-grid",
"type": "registry:ui",
"title": "Bordered Clients Grid",
"description": "Five-column logo grid with subtle dividers, hover-tinted cells, and decorative cross markers at the four corners.",
"dependencies": [],
"files": [
{
"path": "registry/ruixenui/bordered-clients-grid.tsx",
"content": "\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ═══════════════════════════════════════════════════════════\n Bordered Clients Grid — A 5-column wordmark grid with subtle\n dividers, hover-tinted cells, and decorative cross markers\n at the four outer corners.\n\n Wordmarks render as typography (not images) — each brand has\n distinct font weight, letter-spacing, case, and style to\n capture its character. No external CDN dependency, fully\n theme-aware via `currentColor`.\n\n Override the `logos` prop with your own entries — either\n styled text (matching the default API) or full ReactNodes\n for SVG wordmarks if you want pixel-perfect brand typography.\n\n Grid collapses 5 → 4 → 3 columns at lg → md → sm breakpoints.\n ═══════════════════════════════════════════════════════════ */\n\nexport interface ClientLogo {\n /** Display name; used as alt/key. */\n name: string;\n /** Override the rendered text (e.g., \"tailwindcss\" for Tailwind CSS). Defaults to `name`. */\n label?: string;\n /** Custom font family. Falls back to inherited sans. */\n fontFamily?: string;\n /** Font weight (100–900). Defaults to 600. */\n fontWeight?: number;\n /** Font size in pixels. Defaults to 18. */\n fontSize?: number;\n /** CSS letter-spacing (e.g., \"-0.04em\" or \"0.06em\"). */\n letterSpacing?: string;\n /** Italic typography. */\n italic?: boolean;\n /** Uppercase transform. */\n uppercase?: boolean;\n /** Optional anchor href. */\n href?: string;\n /** Escape hatch — render a custom node (e.g., an SVG) instead of styled text. */\n node?: React.ReactNode;\n}\n\nexport interface BorderedClientsGridProps {\n logos?: ClientLogo[];\n className?: string;\n}\n\nconst DEFAULT_LOGOS: ClientLogo[] = [\n {\n name: \"NVIDIA\",\n fontWeight: 900,\n fontSize: 18,\n letterSpacing: \"0.06em\",\n uppercase: true,\n },\n {\n name: \"OpenAI\",\n fontWeight: 600,\n fontSize: 22,\n letterSpacing: \"-0.01em\",\n fontFamily:\n '\"Times New Roman\", ui-serif, Georgia, \"Liberation Serif\", serif',\n },\n {\n name: \"GitHub\",\n fontWeight: 700,\n fontSize: 24,\n letterSpacing: \"-0.025em\",\n },\n {\n name: \"Tailwind CSS\",\n label: \"tailwindcss\",\n fontWeight: 600,\n fontSize: 22,\n letterSpacing: \"-0.04em\",\n },\n {\n name: \"Vercel\",\n fontWeight: 800,\n fontSize: 24,\n letterSpacing: \"-0.05em\",\n },\n {\n name: \"Stripe\",\n fontWeight: 700,\n fontSize: 24,\n letterSpacing: \"-0.025em\",\n },\n {\n name: \"Linear\",\n fontWeight: 600,\n fontSize: 22,\n letterSpacing: \"-0.04em\",\n },\n {\n name: \"Cloudflare\",\n fontWeight: 700,\n fontSize: 18,\n letterSpacing: \"-0.025em\",\n },\n {\n name: \"Zapier\",\n fontWeight: 800,\n fontSize: 22,\n letterSpacing: \"-0.025em\",\n },\n {\n name: \"Laravel\",\n fontWeight: 700,\n fontSize: 22,\n italic: true,\n letterSpacing: \"-0.025em\",\n },\n];\n\nexport default function BorderedClientsGrid({\n logos = DEFAULT_LOGOS,\n className,\n}: BorderedClientsGridProps) {\n return (\n