{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "brands-section-v2",
  "title": "Brands Section v2",
  "description": "Infinite marquee of brand logos rendered as a seamless row of borderless-radius cardsâ€”full border container, no gaps, shared dividers between slots.",
  "registryDependencies": [],
  "files": [
    {
      "path": "registry/new-york/blocks/brands-section-v2/page.tsx",
      "content": "import BrandsSectionV2 from \"./components/brands-section-v2\"\n\nexport default function Page() {\n  return <BrandsSectionV2 />\n}\n",
      "type": "registry:page",
      "target": "app/brands-section-v2/page.tsx"
    },
    {
      "path": "registry/new-york/blocks/brands-section-v2/components/brands-section-v2.tsx",
      "content": "import Marquee from \"./marquee\"\nimport { brands } from \"../lib/brands\"\n\nimport \"../styles/brands-section-v2.css\"\n\nexport default function BrandsSectionV2() {\n  return (\n    <section className=\"py-4 md:py-6 lg:py-8\">\n      <div className=\"mx-auto max-w-6xl px-4\">\n        <Marquee brands={brands} />\n      </div>\n    </section>\n  )\n}\n",
      "type": "registry:component",
      "target": "app/brands-section-v2/components/brands-section-v2.tsx"
    },
    {
      "path": "registry/new-york/blocks/brands-section-v2/components/brand-logo.tsx",
      "content": "import type { Brand } from \"../lib/brands\"\n\nexport default function BrandLogo({ brand }: { brand: Brand }) {\n  const Light = brand.light\n  const Dark = brand.dark\n\n  if (Dark) {\n    return (\n      <span className=\"inline-flex h-12 w-12 items-center justify-center\">\n        <Light\n          className=\"bs2-logo block h-full w-full dark:hidden\"\n          aria-label={brand.name}\n        />\n        <Dark\n          className=\"bs2-logo hidden h-full w-full dark:block\"\n          aria-label={brand.name}\n        />\n      </span>\n    )\n  }\n\n  return (\n    <span className=\"inline-flex h-12 w-12 items-center justify-center\">\n      <Light className=\"bs2-logo h-full w-full\" aria-label={brand.name} />\n    </span>\n  )\n}\n",
      "type": "registry:component",
      "target": "app/brands-section-v2/components/brand-logo.tsx"
    },
    {
      "path": "registry/new-york/blocks/brands-section-v2/components/marquee.tsx",
      "content": "import type { Brand } from \"../lib/brands\"\nimport BrandLogo from \"./brand-logo\"\n\nexport default function Marquee({ brands }: { brands: Brand[] }) {\n  return (\n    <div className=\"relative overflow-hidden border border-border\">\n      <div\n        className=\"pointer-events-none absolute top-0 left-0 z-1 h-full w-35 bg-linear-to-r from-background to-transparent motion-reduce:hidden\"\n        aria-hidden\n      />\n      <div\n        className=\"pointer-events-none absolute top-0 right-0 z-1 h-full w-35 bg-linear-to-l from-background to-transparent motion-reduce:hidden\"\n        aria-hidden\n      />\n\n      <div className=\"bs2-track flex min-h-full w-max flex-nowrap items-stretch will-change-transform backface-hidden\">\n        <div\n          className=\"flex shrink-0 items-stretch\"\n          role=\"list\"\n          aria-label=\"Database brand logos\"\n        >\n          {brands.map((brand) => (\n            <div\n              key={brand.name}\n              role=\"listitem\"\n              className=\"flex w-32 items-center justify-center border-r border-border py-3 md:w-40 md:py-4\"\n            >\n              <BrandLogo brand={brand} />\n            </div>\n          ))}\n        </div>\n        <div className=\"flex shrink-0 items-stretch\" aria-hidden>\n          {brands.map((brand) => (\n            <div\n              key={`dup-${brand.name}`}\n              className=\"flex w-32 items-center justify-center border-r border-border py-3 md:w-40 md:py-4\"\n            >\n              <BrandLogo brand={brand} />\n            </div>\n          ))}\n        </div>\n      </div>\n    </div>\n  )\n}\n",
      "type": "registry:component",
      "target": "app/brands-section-v2/components/marquee.tsx"
    },
    {
      "path": "registry/new-york/blocks/brands-section-v2/lib/brands.ts",
      "content": "import type { ComponentType, SVGProps } from \"react\"\n\nimport { Convex } from \"@/components/ui/svgs/convex\"\nimport { Supabase } from \"@/components/ui/svgs/supabase\"\nimport { TursoLight } from \"@/components/ui/svgs/tursoLight\"\nimport { TursoDark } from \"@/components/ui/svgs/tursoDark\"\nimport { Upstash } from \"@/components/ui/svgs/upstash\"\nimport { Neon } from \"@/components/ui/svgs/neon\"\nimport { Planetscale } from \"@/components/ui/svgs/planetscale\"\nimport { PlanetscaleDark } from \"@/components/ui/svgs/planetscaleDark\"\nimport { MongodbIconLight } from \"@/components/ui/svgs/mongodbIconLight\"\nimport { MongodbIconDark } from \"@/components/ui/svgs/mongodbIconDark\"\n\nexport type SvgComponent = ComponentType<SVGProps<SVGSVGElement>>\n\nexport type Brand = {\n  name: string\n  light: SvgComponent\n  dark?: SvgComponent\n}\n\nexport const brands: Brand[] = [\n  { name: \"Convex\",      light: Convex },\n  { name: \"Supabase\",    light: Supabase },\n  { name: \"Turso\",       light: TursoLight,      dark: TursoDark },\n  { name: \"Upstash\",     light: Upstash },\n  { name: \"Neon\",        light: Neon },\n  { name: \"PlanetScale\", light: Planetscale,     dark: PlanetscaleDark },\n  { name: \"MongoDB\",     light: MongodbIconLight, dark: MongodbIconDark },\n]\n",
      "type": "registry:lib",
      "target": "app/brands-section-v2/lib/brands.ts"
    },
    {
      "path": "registry/new-york/blocks/brands-section-v2/styles/brands-section-v2.css",
      "content": ".bs2-track {\n  animation: bs2-marquee 40s linear infinite;\n}\n\n@keyframes bs2-marquee {\n  from {\n    transform: translate3d(0, 0, 0);\n  }\n  to {\n    transform: translate3d(-50%, 0, 0);\n  }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .bs2-track {\n    animation-duration: 0.01ms;\n    animation-iteration-count: 1;\n  }\n}\n",
      "type": "registry:file",
      "target": "app/brands-section-v2/styles/brands-section-v2.css"
    },
    {
      "path": "components/ui/svgs/convex.tsx",
      "content": "import type { SVGProps } from \"react\";\n\nconst Convex = (props: SVGProps<SVGSVGElement>) => (\n  <svg {...props} viewBox=\"28 28 128 132\" fill=\"none\">\n    <path\n      fill=\"#F3B01C\"\n      d=\"M108.092 130.021c18.166-2.018 35.293-11.698 44.723-27.854-4.466 39.961-48.162 65.218-83.83 49.711-3.286-1.425-6.115-3.796-8.056-6.844-8.016-12.586-10.65-28.601-6.865-43.135 10.817 18.668 32.81 30.111 54.028 28.122Z\"\n    />\n    <path\n      fill=\"#8D2676\"\n      d=\"M53.401 90.174c-7.364 17.017-7.682 36.94 1.345 53.336-31.77-23.902-31.423-75.052-.388-98.715 2.87-2.187 6.282-3.485 9.86-3.683 14.713-.776 29.662 4.91 40.146 15.507-21.3.212-42.046 13.857-50.963 33.555Z\"\n    />\n    <path\n      fill=\"#EE342F\"\n      d=\"M114.637 61.855C103.89 46.87 87.069 36.668 68.639 36.358c35.625-16.17 79.446 10.047 84.217 48.807.444 3.598-.139 7.267-1.734 10.512-6.656 13.518-18.998 24.002-33.42 27.882 10.567-19.599 9.263-43.544-3.065-61.704Z\"\n    />\n  </svg>\n);\n\nexport { Convex };\n",
      "type": "registry:component",
      "target": "@ui/svgs/convex.tsx"
    },
    {
      "path": "components/ui/svgs/supabase.tsx",
      "content": "import type { SVGProps } from \"react\";\n\nconst Supabase = (props: SVGProps<SVGSVGElement>) => (\n  <svg {...props} viewBox=\"0 0 109 113\" fill=\"none\">\n    <path\n      d=\"M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z\"\n      fill=\"url(#paint0_linear)\"\n    />\n    <path\n      d=\"M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z\"\n      fill=\"url(#paint1_linear)\"\n      fillOpacity=\"0.2\"\n    />\n    <path\n      d=\"M45.317 2.07103C48.1765 -1.53037 53.9745 0.442937 54.0434 5.041L54.4849 72.2922H9.83113C1.64038 72.2922 -2.92775 62.8321 2.1655 56.4175L45.317 2.07103Z\"\n      fill=\"#3ECF8E\"\n    />\n    <defs>\n      <linearGradient\n        id=\"paint0_linear\"\n        x1=\"53.9738\"\n        y1=\"54.974\"\n        x2=\"94.1635\"\n        y2=\"71.8295\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop stopColor=\"#249361\" />\n        <stop offset=\"1\" stopColor=\"#3ECF8E\" />\n      </linearGradient>\n      <linearGradient\n        id=\"paint1_linear\"\n        x1=\"36.1558\"\n        y1=\"30.578\"\n        x2=\"54.4844\"\n        y2=\"65.0806\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop />\n        <stop offset=\"1\" stopOpacity=\"0\" />\n      </linearGradient>\n    </defs>\n  </svg>\n);\n\nexport { Supabase };\n",
      "type": "registry:component",
      "target": "@ui/svgs/supabase.tsx"
    },
    {
      "path": "components/ui/svgs/tursoLight.tsx",
      "content": "import type { SVGProps } from \"react\";\n\nconst TursoLight = (props: SVGProps<SVGSVGElement>) => (\n  <svg {...props} fill=\"none\" viewBox=\"0 0 201 170\">\n    <path\n      d=\"m200.035 48.61c-4.67-27.94-29.16-48.61-29.16-48.61v30.78l-14.54 3.75-9.11-10.97-4.81 9.46c-9.92-2.7-23.58-4.44-42.37-4.44-18.7901 0-32.4501 1.75-42.3701 4.44l-4.81-9.46-9.11 10.97-14.54-3.75v-30.78s-24.48997 20.67-29.1599684 48.61l32.1399684 11.12c1.05 19.43 9.79 71.88 12.29 76.64 2.66 5.07 16.78 19.56 27.83 25.13 0 0 4-4.23 6.44-7.96 3.1 3.65 19.11 16.45 21.3001 16.45 2.19 0 18.2-12.79 21.3-16.45 2.44 3.73 6.44 7.96 6.44 7.96 11.05-5.57 25.17-20.06 27.83-25.13 2.5-4.76 11.24-57.21 12.29-76.64l32.14-11.12zm-46.19 44.74-21.75 1.94 1.91 26.67s-13.23 10.95-33.96 10.95c-20.7301 0-33.9601-10.95-33.9601-10.95l1.91-26.67-21.75-1.94-3.72-30.04 36.05 12.48-2.8 37.39c6.7 1.7 13.75 3.39 24.2801 3.39 10.53 0 17.57-1.69 24.27-3.39l-2.8-37.39 36.05-12.48-3.72 30.04z\"\n      fill=\"#183134\"\n    />\n  </svg>\n);\n\nexport { TursoLight };\n",
      "type": "registry:component",
      "target": "@ui/svgs/tursoLight.tsx"
    },
    {
      "path": "components/ui/svgs/tursoDark.tsx",
      "content": "import type { SVGProps } from \"react\";\n\nconst TursoDark = (props: SVGProps<SVGSVGElement>) => (\n  <svg {...props} fill=\"none\" viewBox=\"0 0 201 170\">\n    <path\n      d=\"m100.055 170c-2.1901 0-18.2001-12.8-21.3001-16.45-2.44 3.73-6.44 7.96-6.44 7.96-11.05-5.57-25.17-20.06-27.83-25.13-2.62-5-12.13-62.58-12.39-79.3-.34-9.41 5.85-28.49 67.9601-28.49 62.11 0 68.29 19.08 67.96 28.49-.25 16.72-9.76 74.3-12.39 79.3-2.66 5.07-16.78 19.56-27.83 25.13 0 0-4-4.23-6.44-7.96-3.1 3.65-19.11 16.45-21.3 16.45z\"\n      fill=\"#1ebca1\"\n    />\n    <path\n      d=\"m100.055 132.92c-20.7301 0-33.9601-10.95-33.9601-10.95l1.91-26.67-21.75-1.94-3.91-31.55h115.4301l-3.91 31.55-21.75 1.94 1.91 26.67s-13.23 10.95-33.96 10.95z\"\n      fill=\"#183134\"\n    />\n    <path\n      d=\"m121.535 75.79 78.52-27.18c-4.67-27.94-29.16-48.61-29.16-48.61v30.78l-14.54 3.75-9.11-10.97-7.8 15.34-39.38 10.16-39.3801-10.16-7.8-15.34-9.11 10.97-14.54-3.75v-30.78s-24.50997 20.67-29.1799684 48.61l78.5199684 27.18-2.8 37.39c6.7 1.7 13.75 3.39 24.2801 3.39 10.53 0 17.57-1.69 24.27-3.39l-2.8-37.39z\"\n      fill=\"#4ff8d2\"\n    />\n  </svg>\n);\n\nexport { TursoDark };\n",
      "type": "registry:component",
      "target": "@ui/svgs/tursoDark.tsx"
    },
    {
      "path": "components/ui/svgs/upstash.tsx",
      "content": "import type { SVGProps } from \"react\";\n\nconst Upstash = (props: SVGProps<SVGSVGElement>) => (\n  <svg {...props} viewBox=\"0 0 256 341\" preserveAspectRatio=\"xMidYMid\">\n    <path\n      fill=\"#00C98D\"\n      d=\"M0 298.417c56.554 56.553 148.247 56.553 204.801 0 56.554-56.554 56.554-148.247 0-204.801l-25.6 25.6c42.415 42.416 42.415 111.185 0 153.6-42.416 42.416-111.185 42.416-153.601 0L0 298.416Z\"\n    />\n    <path\n      fill=\"#00C98D\"\n      d=\"M51.2 247.216c28.277 28.277 74.123 28.277 102.4 0 28.277-28.276 28.277-74.123 0-102.4l-25.6 25.6c14.14 14.138 14.14 37.061 0 51.2-14.138 14.139-37.061 14.139-51.2 0l-25.6 25.6ZM256 42.415c-56.554-56.553-148.247-56.553-204.8 0-56.555 56.555-56.555 148.247 0 204.801l25.599-25.6c-42.415-42.415-42.415-111.185 0-153.6 42.416-42.416 111.185-42.416 153.6 0L256 42.416Z\"\n    />\n    <path\n      fill=\"#00C98D\"\n      d=\"M204.8 93.616c-28.276-28.277-74.124-28.277-102.4 0-28.278 28.277-28.278 74.123 0 102.4l25.6-25.6c-14.14-14.138-14.14-37.061 0-51.2 14.138-14.139 37.06-14.139 51.2 0l25.6-25.6Z\"\n    />\n    <path\n      fill=\"#FFF\"\n      fillOpacity=\".4\"\n      d=\"M256 42.415c-56.554-56.553-148.247-56.553-204.8 0-56.555 56.555-56.555 148.247 0 204.801l25.599-25.6c-42.415-42.415-42.415-111.185 0-153.6 42.416-42.416 111.185-42.416 153.6 0L256 42.416Z\"\n    />\n    <path\n      fill=\"#FFF\"\n      fillOpacity=\".4\"\n      d=\"M204.8 93.616c-28.276-28.277-74.124-28.277-102.4 0-28.278 28.277-28.278 74.123 0 102.4l25.6-25.6c-14.14-14.138-14.14-37.061 0-51.2 14.138-14.139 37.06-14.139 51.2 0l25.6-25.6Z\"\n    />\n  </svg>\n);\n\nexport { Upstash };\n",
      "type": "registry:component",
      "target": "@ui/svgs/upstash.tsx"
    },
    {
      "path": "components/ui/svgs/neon.tsx",
      "content": "import type { SVGProps } from \"react\";\n\nconst Neon = (props: SVGProps<SVGSVGElement>) => (\n  <svg {...props} viewBox=\"0 0 64 64\" fill=\"none\">\n    <title>Neon</title>\n    <path\n      d=\"M63 0.0177909V63.5526L38.4178 42.2501V63.5526H0V0L63 0.0177909ZM7.72251 55.8389H30.6953V25.3238L55.2779 47.0476V7.72922L7.72251 7.71559V55.8389Z\"\n      fill=\"#37C38F\"\n    />\n  </svg>\n);\n\nexport { Neon };\n",
      "type": "registry:component",
      "target": "@ui/svgs/neon.tsx"
    },
    {
      "path": "components/ui/svgs/planetscale.tsx",
      "content": "import type { SVGProps } from \"react\";\n\nconst Planetscale = (props: SVGProps<SVGSVGElement>) => (\n  <svg {...props} preserveAspectRatio=\"xMidYMid\" viewBox=\"0 0 256 256\">\n    <path d=\"M256 128a128 128 0 01-128 128zM128 0c52 0 96.7 31 116.8 75.5L75.5 244.8c-7.3-3.3-14.2-7.2-20.7-11.7L160 128h-32l-90.5 90.5A128 128 0 01128 0z\" />\n  </svg>\n);\n\nexport { Planetscale };\n",
      "type": "registry:component",
      "target": "@ui/svgs/planetscale.tsx"
    },
    {
      "path": "components/ui/svgs/planetscaleDark.tsx",
      "content": "import type { SVGProps } from \"react\";\n\nconst PlanetscaleDark = (props: SVGProps<SVGSVGElement>) => (\n  <svg {...props} preserveAspectRatio=\"xMidYMid\" viewBox=\"0 0 256 256\">\n    <path\n      fill=\"#fff\"\n      d=\"M256 128a128 128 0 01-128 128zM128 0c52 0 96.7 31 116.8 75.5L75.5 244.8c-7.3-3.3-14.2-7.2-20.7-11.7L160 128h-32l-90.5 90.5A128 128 0 01128 0z\"\n    />\n  </svg>\n);\n\nexport { PlanetscaleDark };\n",
      "type": "registry:component",
      "target": "@ui/svgs/planetscaleDark.tsx"
    },
    {
      "path": "components/ui/svgs/mongodbIconLight.tsx",
      "content": "import type { SVGProps } from \"react\";\n\nconst MongodbIconLight = (props: SVGProps<SVGSVGElement>) => (\n  <svg {...props} fill=\"none\" viewBox=\"0 0 120 258\">\n    <path\n      fill=\"#001E2B\"\n      d=\"M83.009 28.756C72.133 15.909 62.767 2.86 60.854.15a.488.488 0 0 0-.705 0c-1.913 2.71-11.28 15.758-22.155 28.605-93.353 118.536 14.703 198.531 14.703 198.531l.906.602c.806 12.346 2.82 30.111 2.82 30.111h8.056s2.014-17.665 2.82-30.111l.906-.702c.101 0 108.157-79.895 14.804-198.431ZM60.45 225.48s-4.834-4.115-6.143-6.223v-.2l5.84-129.076c0-.401.605-.401.605 0l5.841 129.076v.2c-1.31 2.108-6.143 6.223-6.143 6.223Z\"\n    />\n  </svg>\n);\n\nexport { MongodbIconLight };\n",
      "type": "registry:component",
      "target": "@ui/svgs/mongodbIconLight.tsx"
    },
    {
      "path": "components/ui/svgs/mongodbIconDark.tsx",
      "content": "import type { SVGProps } from \"react\";\n\nconst MongodbIconDark = (props: SVGProps<SVGSVGElement>) => (\n  <svg {...props} fill=\"none\" viewBox=\"0 0 120 257\">\n    <path\n      fill=\"#00ED64\"\n      d=\"M82.323 28.55C71.537 15.795 62.249 2.84 60.35.15c-.2-.2-.5-.2-.7 0-1.897 2.69-11.185 15.645-21.971 28.4C-54.902 146.238 52.26 225.661 52.26 225.661l.9.597c.798 12.258 2.795 29.896 2.795 29.896h7.99s1.998-17.539 2.797-29.896l.899-.697c.1 0 107.263-79.323 14.68-197.01ZM59.95 223.867s-4.793-4.086-6.092-6.179v-.199l5.793-128.151c0-.4.6-.4.6 0l5.792 128.151v.199c-1.299 2.093-6.093 6.179-6.093 6.179Z\"\n    />\n  </svg>\n);\n\nexport { MongodbIconDark };\n",
      "type": "registry:component",
      "target": "@ui/svgs/mongodbIconDark.tsx"
    }
  ],
  "type": "registry:block"
}